From 1a71d8e87658991462ab0cafa06c0d4907982c1e Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Tue, 21 Apr 2015 11:12:45 -0400 Subject: [PATCH 1/5] PM-2313: I solved the issue when I created install/newSite with Drop database if exists deschecked didn't create a workspace --- workflow/engine/classes/class.Installer.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.Installer.php b/workflow/engine/classes/class.Installer.php index bc777e008..f28892519 100755 --- a/workflow/engine/classes/class.Installer.php +++ b/workflow/engine/classes/class.Installer.php @@ -104,7 +104,16 @@ class Installer $result['name']['message'] = ($result['isset']) ? 'Workspace already exist' : $result['name']['message']; $result['name']['status'] = ($result['isset']) ? false : $result['name']['status']; //print_r($result); - return Array('created' => G::var_compare(true, $result['path_data'], $result['database']['connection'], $result['name']['status'], $result['database']['version'], $result['database']['ao']['ao_db_wf']['status'], $result['database']['ao']['ao_db_rb']['status'], $result['database']['ao']['ao_db_rp']['status'], $result['admin']['username'], (($result['isset']) ? false : true), $result['admin']['password']), 'result' => $result + return Array('created' => G::var_compare(true, + $result['path_data'], + $result['database']['connection'], + $result['name']['status'], + $result['database']['version'], + $result['database']['ao']['ao_db_wf']['status'], + $result['admin']['username'], + (($result['isset']) ? false : true), + $result['admin']['password']), + 'result' => $result ); } From b4584de9c79f995c819fa0d4d3973277bd5db388 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Tue, 21 Apr 2015 11:15:39 -0400 Subject: [PATCH 2/5] PM-00000 "Eliminar los Access y Refresh Token expirados" SOLVED Issue: Eliminar los Access y Refresh Token expirados Cause: Nuevo requerimiento de funciones Solution: Se estan eliminando los Access y Refresh Token expirados al hacer un request al End-point: POST /{workspace}/oauth2/token --- .../engine/src/ProcessMaker/Services/OAuth2/PmPdo.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php b/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php index 966b4b05a..efdf78e59 100644 --- a/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php +++ b/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php @@ -116,6 +116,12 @@ class PmPdo implements \OAuth2\Storage\AuthorizationCodeInterface, public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null) { + //Delete expired Access and Refresh Token + foreach (array($this->config["access_token_table"], $this->config["refresh_token_table"]) as $value) { + $stmt = $this->db->prepare(sprintf("DELETE FROM %s WHERE EXPIRES < %s", $value, "'" . date("Y-m-d H:i:s") . "'")); + $result = $stmt->execute(); + } + // convert expires to datestring $expires = date('Y-m-d H:i:s', $expires); @@ -177,10 +183,8 @@ class PmPdo implements \OAuth2\Storage\AuthorizationCodeInterface, $access_token->load($token); $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE ACCESS_TOKEN = :token', $this->config['access_token_table'])); - $stmt->execute(compact('token')); - $stmt = $this->db->prepare(sprintf("DELETE FROM %s WHERE EXPIRES < %s", $this->config["refresh_token_table"], "'" . date("Y-m-d H:i:s") . "'")); - return $stmt->execute(compact('token')); + return $stmt->execute(compact("token")); } /* OAuth2_Storage_UserCredentialsInterface */ From 6205f7a53074ab4b6cb4bb4ad43e045e262eb1e4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Tue, 21 Apr 2015 11:23:32 -0400 Subject: [PATCH 3/5] PM-2370 "Nuestra error al instalar rc4" SOLVED > Code Isuue: Nuestra error al instalar rc4 > Solution: Al instalar processmaker rc4 se mostraba un error de path, se corrige con el path correcto. --- workflow/public_html/sysGeneric.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 9f693cd98..0ebf585ed 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -692,16 +692,22 @@ ob_start(); // Rebuild the base Workflow translations if not exists if (! is_file( PATH_LANGUAGECONT . 'translation.en' )) { - $pathFile = $filter->validateInput("classes/model/Translation.php",'path'); + $pathFile = $filter->validateInput(PATH_CLASSES . "model" . PATH_SEP . "Translation.php", "path"); + require_once ($pathFile); - $fields = Translation::generateFileTranslation( 'en' ); + + $pmTranslation = new Translation(); + $fields = $pmTranslation->generateFileTranslation("en"); } // TODO: Verify if the language set into url is defined in translations env. if (SYS_LANG != 'en' && ! is_file( PATH_LANGUAGECONT . 'translation.' . SYS_LANG )) { - $pathFile = $filter->validateInput("classes/model/Translation.php",'path'); + $pathFile = $filter->validateInput(PATH_CLASSES . "model" . PATH_SEP . "Translation.php", "path"); + require_once ($pathFile); - $fields = Translation::generateFileTranslation( SYS_LANG ); + + $pmTranslation = new Translation(); + $fields = $pmTranslation->generateFileTranslation(SYS_LANG); } // Setup plugins From cd5dbd0e01a42256c7e16fb02398c3d29ee44a5d Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Tue, 21 Apr 2015 12:16:13 -0400 Subject: [PATCH 4/5] I corrected a problem when the workspace exists --- workflow/engine/controllers/newSiteProxy.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/engine/controllers/newSiteProxy.php b/workflow/engine/controllers/newSiteProxy.php index 5a5d0ae0b..807ecf4d4 100755 --- a/workflow/engine/controllers/newSiteProxy.php +++ b/workflow/engine/controllers/newSiteProxy.php @@ -12,12 +12,13 @@ class newSiteProxy extends HttpProxyController public function testingNW ($params) { if (isset( $_POST['NW_TITLE'] )) { $action = (isset( $_POST['action'] )) ? trim( $_POST['action'] ) : 'test'; + $ao_db_drop = (isset( $_POST['AO_DB_DROP'] )) ? true : false; G::LoadClass( 'Installer' ); //G::LoadClass( 'json' ); $name = trim( $_POST['NW_TITLE'] ); $inst = new Installer(); - if ($inst->isset_site($name)) { + if ($inst->isset_site($name) && $ao_db_drop !==true) { $this->error = true; return; } @@ -25,7 +26,6 @@ class newSiteProxy extends HttpProxyController $pass = (isset( $_POST['NW_PASSWORD'] )) ? $_POST['NW_PASSWORD'] : 'admin'; $pass1 = (isset( $_POST['NW_PASSWORD2'] )) ? $_POST['NW_PASSWORD2'] : 'admin'; - $ao_db_drop = (isset( $_POST['AO_DB_DROP'] )) ? true : false; $ao_db_wf = (isset( $_POST['AO_DB_WF'] )) ? $_POST['AO_DB_WF'] : false; $ao_db_rb = (isset( $_POST['AO_DB_RB'] )) ? $_POST['AO_DB_RB'] : false; From 8baaad9c861c71a01373469d8214ab1770ca80c4 Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Tue, 21 Apr 2015 12:16:22 -0400 Subject: [PATCH 5/5] Se adicion cambio endPoint de listado por llamada Ajax --- .../engine/methods/cases/casesListExtJs.php | 48 +----- .../methods/cases/proxyNewCasesList.php | 156 ++++++++++++++++++ workflow/engine/templates/cases/casesList.js | 8 - .../engine/xmlform/login/sysLoginNoWS.xml | 14 ++ .../engine/xmlform/login/sysLoginNoWSpm3.xml | 14 ++ workflow/public_html/sysGeneric.php | 1 + 6 files changed, 192 insertions(+), 49 deletions(-) create mode 100644 workflow/engine/methods/cases/proxyNewCasesList.php diff --git a/workflow/engine/methods/cases/casesListExtJs.php b/workflow/engine/methods/cases/casesListExtJs.php index 18d36ee1a..7d86cf9b0 100755 --- a/workflow/engine/methods/cases/casesListExtJs.php +++ b/workflow/engine/methods/cases/casesListExtJs.php @@ -11,71 +11,40 @@ if ($action == 'selfservice') { } /*----------------------------------********---------------------------------*/ -$urlProxy = '/api/1.0/' . SYS_SYS . '/lists/'; +$urlProxy = 'proxyNewCasesList'; switch ($action) { case 'todo': case 'draft': - $urlProxy .= 'inbox'; + $urlProxy .= '?list=inbox'; break; case 'sent': - $urlProxy .= 'participated'; + $urlProxy .= '?list=participated'; break; case 'search': case 'participated-history': $urlProxy = 'proxyCasesList'; break; case 'paused': - $urlProxy .= 'paused'; + $urlProxy .= '?list=paused'; break; case 'cancel': case 'canceled': - $urlProxy .= 'canceled'; + $urlProxy .= '?list=canceled'; break; case 'completed': - $urlProxy .= 'completed'; + $urlProxy .= '?list=completed'; break; case 'myinbox': case 'my-inbox': - $urlProxy .= 'my-inbox'; + $urlProxy .= '?list=myInbox'; break; case 'unassigned': $urlProxy = 'proxyCasesList'; $action = 'unassigned'; break; } - -$clientId = 'x-pm-local-client'; -$client = getClientCredentials($clientId); -$authCode = getAuthorizationCode($client); -$debug = false; //System::isDebugMode(); - -$loader = Maveriks\Util\ClassLoader::getInstance(); -$loader->add(PATH_TRUNK . 'vendor/bshaffer/oauth2-server-php/src/', "OAuth2"); - -$request = array( - 'grant_type' => 'authorization_code', - 'code' => $authCode -); -$server = array( - 'REQUEST_METHOD' => 'POST' -); -$headers = array( - "PHP_AUTH_USER" => $client['CLIENT_ID'], - "PHP_AUTH_PW" => $client['CLIENT_SECRET'], - "Content-Type" => "multipart/form-data;", - "Authorization" => "Basic " . base64_encode($client['CLIENT_ID'] . ":" . $client['CLIENT_SECRET']) -); - -$request = new \OAuth2\Request(array(), $request, array(), array(), array(), $server, null, $headers); -$oauthServer = new \ProcessMaker\Services\OAuth2\Server(); -$response = $oauthServer->postToken($request, true); -$clientToken = $response->getParameters(); -$clientToken["client_id"] = $client['CLIENT_ID']; -$clientToken["client_secret"] = $client['CLIENT_SECRET']; /*----------------------------------********---------------------------------*/ - - G::LoadClass("BasePeer"); G::LoadClass("configuration"); //require_once ("classes/model/Fields.php"); @@ -195,9 +164,6 @@ $oHeadPublisher->assign( 'reassignColumns', $reassignColumns ); //sending the co $oHeadPublisher->assign( 'action', $action ); //sending the action to make $oHeadPublisher->assign( 'urlProxy', $urlProxy ); //sending the urlProxy to make $oHeadPublisher->assign( 'caseListBuilder', $caseListBuilder ); //sending the caseListBuilder -/*----------------------------------********---------------------------------*/ -$oHeadPublisher->assign( 'credentials', $clientToken ); //sending the SYS_SYS to make -/*----------------------------------********---------------------------------*/ $oHeadPublisher->assign( 'PMDateFormat', $dateFormat ); //sending the fields to get from proxy $oHeadPublisher->assign( 'statusValues', $status ); //Sending the listing of status $oHeadPublisher->assign( 'processValues', $processes ); //Sending the listing of processes diff --git a/workflow/engine/methods/cases/proxyNewCasesList.php b/workflow/engine/methods/cases/proxyNewCasesList.php new file mode 100644 index 000000000..e17092ca8 --- /dev/null +++ b/workflow/engine/methods/cases/proxyNewCasesList.php @@ -0,0 +1,156 @@ +xssFilterHard($_GET); +$_REQUEST = $filter->xssFilterHard($_REQUEST); +$_SESSION['USER_LOGGED'] = $filter->xssFilterHard($_SESSION['USER_LOGGED']); + +if (!isset($_SESSION['USER_LOGGED'])) { + $responseObject = new stdclass(); + $responseObject->error = G::LoadTranslation('ID_LOGIN_AGAIN'); + $responseObject->success = true; + $responseObject->lostSession = true; + print G::json_encode( $responseObject ); + die(); +} + +try { + $userUid = $_SESSION['USER_LOGGED']; + $filters["paged"] = isset( $_REQUEST["paged"] ) ? $_REQUEST["paged"] : true; + $filters['count'] = isset( $_REQUEST['count'] ) ? $_REQUEST['count'] : true; + $filters["category"] = isset( $_REQUEST["category"] ) ? $_REQUEST["category"] : ""; + $filters["process"] = isset( $_REQUEST["process"] ) ? $_REQUEST["process"] : ""; + $filters["search"] = isset( $_REQUEST["search"] ) ? $_REQUEST["search"] : ""; + $filters["filter"] = isset( $_REQUEST["filter"] ) ? $_REQUEST["filter"] : ""; + $filters["dateFrom"] = (!empty( $_REQUEST["dateFrom"] )) ? substr( $_REQUEST["dateFrom"], 0, 10 ) : ""; + $filters["dateTo"] = (!empty( $_REQUEST["dateTo"] )) ? substr( $_REQUEST["dateTo"], 0, 10 ) : ""; + + $filters["start"] = isset( $_REQUEST["start"] ) ? $_REQUEST["start"] : "0"; + $filters["limit"] = isset( $_REQUEST["limit"] ) ? $_REQUEST["limit"] : "25"; + $filters["sort"] = isset( $_REQUEST["sort"] ) ? $_REQUEST["sort"] : ""; + $filters["dir"] = isset( $_REQUEST["dir"] ) ? $_REQUEST["dir"] : "DESC"; + + $filters["action"] = isset( $_REQUEST["action"] ) ? $_REQUEST["action"] : ""; + $listName = isset( $_REQUEST["list"] ) ? $_REQUEST["list"] : "inbox"; + + // Select list + switch ($listName) { + case 'inbox': + $list = new ListInbox(); + $listpeer = 'ListInboxPeer'; + break; + case 'participated_history': + $list = new ListParticipatedHistory(); + $listpeer = 'ListParticipatedHistoryPeer'; + break; + case 'participated': + case 'participated_last': + $list = new ListParticipatedLast(); + $listpeer = 'ListParticipatedLastPeer'; + break; + case 'completed': + $list = new ListCompleted(); + $listpeer = 'ListCompletedPeer'; + break; + case 'paused': + $list = new ListPaused(); + $listpeer = 'ListPausedPeer'; + break; + case 'canceled': + $list = new ListCanceled(); + $listpeer = 'ListCanceledPeer'; + break; + case 'my_inbox': + $list = new ListMyInbox(); + $listpeer = 'ListMyInboxPeer'; + break; + case 'unassigned': + $list = new ListUnassigned(); + $listpeer = 'ListUnassignedPeer'; + break; + } + + + // Validate filters + $filters["start"] = (int)$filters["start"]; + $filters["start"] = abs($filters["start"]); + if ($filters["start"] != 0) { + $filters["start"]+1; + } + + $filters["limit"] = (int)$filters["limit"]; + $filters["limit"] = abs($filters["limit"]); + if ($filters["limit"] == 0) { + G::LoadClass("configuration"); + $conf = new Configurations(); + $generalConfCasesList = $conf->getConfiguration('ENVIRONMENT_SETTINGS', ''); + if (isset($generalConfCasesList['casesListRowNumber'])) { + $filters["limit"] = (int)$generalConfCasesList['casesListRowNumber']; + } else { + $filters["limit"] = 25; + } + } else { + $filters["limit"] = (int)$filters["limit"]; + } + + $filters["sort"] = G::toUpper($filters["sort"]); + $columnsList = $listpeer::getFieldNames(BasePeer::TYPE_FIELDNAME); + if (!(in_array($filters["sort"], $columnsList))) { + $filters["sort"] = ''; + } + + $filters["dir"] = G::toUpper($filters["dir"]); + if (!($filters["dir"] == 'DESC' || $filters["dir"] == 'ASC')) { + $filters["dir"] = 'DESC'; + } + + $result = $list->loadList($userUid, $filters); + if (!empty($result)) { + foreach ($result as &$value) { + if (isset($value['DEL_PREVIOUS_USR_UID'])) { + $value['PREVIOUS_USR_UID'] = $value['DEL_PREVIOUS_USR_UID']; + $value['PREVIOUS_USR_USERNAME'] = $value['DEL_PREVIOUS_USR_USERNAME']; + $value['PREVIOUS_USR_FIRSTNAME'] = $value['DEL_PREVIOUS_USR_FIRSTNAME']; + $value['PREVIOUS_USR_LASTNAME'] = $value['DEL_PREVIOUS_USR_LASTNAME']; + } + if (isset($value['DEL_DUE_DATE'])) { + $value['DEL_TASK_DUE_DATE'] = $value['DEL_DUE_DATE']; + } + if (isset($value['APP_PAUSED_DATE'])) { + $value['APP_UPDATE_DATE'] = $value['APP_PAUSED_DATE']; + } + if (isset($value['DEL_CURRENT_USR_USERNAME'])) { + $value['USR_USERNAME'] = $value['DEL_CURRENT_USR_USERNAME']; + $value['USR_FIRSTNAME'] = $value['DEL_CURRENT_USR_FIRSTNAME']; + $value['USR_LASTNAME'] = $value['DEL_CURRENT_USR_LASTNAME']; + $value['APP_UPDATE_DATE'] = $value['DEL_DELEGATE_DATE']; + } + if (isset($value['APP_STATUS'])) { + $value['APP_STATUS_LABEL'] = G::LoadTranslation( "ID_{$value['APP_STATUS']}" ); + } + + //$value = array_change_key_case($value, CASE_LOWER); + } + } + + $filtersData = array(); + $filtersData['start'] = $filters["start"]; + $filtersData['limit'] = $filters["limit"]; + $filtersData['sort'] = G::toLower($filters["sort"]); + $filtersData['dir'] = G::toLower($filters["dir"]); + $filtersData['cat_uid'] = $filters["category"]; + $filtersData['pro_uid'] = $filters["process"]; + $filtersData['search'] = $filters["search"]; + $filtersData['date_from'] = $filters["dateFrom"]; + $filtersData['date_to'] = $filters["dateTo"]; + $response['filters'] = $filtersData; + $response['data'] = $result; + $filtersData['action'] = $filters["action"]; + $response['totalCount'] = $list->countTotal($userUid, $filtersData); + + echo G::json_encode($response); +} catch (Exception $e) { + $msg = array("error" => $e->getMessage()); + echo G::json_encode($msg); +} + diff --git a/workflow/engine/templates/cases/casesList.js b/workflow/engine/templates/cases/casesList.js index 6f73784da..b27ac37ef 100755 --- a/workflow/engine/templates/cases/casesList.js +++ b/workflow/engine/templates/cases/casesList.js @@ -734,7 +734,6 @@ Ext.onReady ( function() { } - // Create HttpProxy instance, all CRUD requests will be directed to single proxy url. if (caseListBuilder) { var proxyCasesList = new Ext.data.HttpProxy({ @@ -747,13 +746,6 @@ Ext.onReady ( function() { api: { read : urlProxy } - /*----------------------------------********---------------------------------*/ - ,method: 'GET' - ,headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + credentials.access_token - } - /*----------------------------------********---------------------------------*/ }); } diff --git a/workflow/engine/xmlform/login/sysLoginNoWS.xml b/workflow/engine/xmlform/login/sysLoginNoWS.xml index 4a6bda2ce..1bc2588d7 100755 --- a/workflow/engine/xmlform/login/sysLoginNoWS.xml +++ b/workflow/engine/xmlform/login/sysLoginNoWS.xml @@ -41,6 +41,20 @@ leimnud.event.add(document.getElementById('form[USR_PASSWORD_MASK]'), 'keypress' } }); +leimnud.event.add(document.getElementById('form[USER_ENV]'), 'keypress', function(event) { + var key; + if(window.event) + key = window.event.keyCode; //IE + else + key = event.which; //firefox + if(key == 13) { + document.getElementById('form[BSUBMIT]').click(); + return true; + } else { + return true; + } +}); + leimnud.event.add(document.getElementById('form[BSUBMIT]'), 'click', function() { createCookie("pm_sys_sys", "{\"sys_sys\": \"" + getField("USER_ENV").value + "\"}", 365); diff --git a/workflow/engine/xmlform/login/sysLoginNoWSpm3.xml b/workflow/engine/xmlform/login/sysLoginNoWSpm3.xml index 57e307f7a..659c4a254 100755 --- a/workflow/engine/xmlform/login/sysLoginNoWSpm3.xml +++ b/workflow/engine/xmlform/login/sysLoginNoWSpm3.xml @@ -48,6 +48,20 @@ leimnud.event.add(document.getElementById('form[USR_PASSWORD_MASK]'), 'keypress' } }); +leimnud.event.add(document.getElementById('form[USER_ENV]'), 'keypress', function(event) { + var key; + if(window.event) + key = window.event.keyCode; //IE + else + key = event.which; //firefox + if(key == 13) { + document.getElementById('form[BSUBMIT]').click(); + return true; + } else { + return true; + } +}); + leimnud.event.add(document.getElementById('form[BSUBMIT]'), 'click', function() { createCookie("pm_sys_sys", "{\"sys_sys\": \"" + getField("USER_ENV").value + "\"}", 365); diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index 9f693cd98..a6f653bbd 100755 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -894,6 +894,7 @@ if (! defined( 'EXECUTE_BY_CRON' )) { $noLoginFiles[] = 'appFolderAjax'; $noLoginFiles[] = 'steps_Ajax'; $noLoginFiles[] = 'proxyCasesList'; + $noLoginFiles[] = 'proxyNewCasesList'; $noLoginFiles[] = 'casesStartPage_Ajax'; $noLoginFiles[] = 'appProxy'; $noLoginFiles[] = 'cases_Ajax';