From 7c724070dd06091831d429d31069130591aeae25 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 5 Oct 2017 14:54:41 -0400 Subject: [PATCH 01/22] HOR-3938 --- .../engine/classes/model/AppDelegation.php | 28 +- .../src/ProcessMaker/BusinessModel/Cases.php | 1593 +++++++++-------- .../src/ProcessMaker/Services/Api/Cases.php | 300 ++-- .../src/ProcessMaker/Services/Api/Light.php | 11 +- 4 files changed, 1062 insertions(+), 870 deletions(-) diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 75beda41d..540479493 100644 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -788,18 +788,26 @@ class AppDelegation extends BaseAppDelegation return $data['TAS_UID']; } + /** + * This function get the current user related to the specific case and index + * @param string $appUid, Uid related to the case + * @param integer $index, Index to review + * @return array + */ public function getCurrentUsers($appUid, $index) { - $oCriteria = new Criteria(); - $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); - $oCriteria->add( AppDelegationPeer::APP_UID, $appUid ); - $oCriteria->add( AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN' ); - $oCriteria->add( AppDelegationPeer::DEL_INDEX, $index ); - $oRuleSet = AppDelegationPeer::doSelectRS( $oCriteria ); - $oRuleSet->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $oRuleSet->next(); - $data = $oRuleSet->getRow(); - return $data; + $criteria = new Criteria(); + $criteria->addSelectColumn( AppDelegationPeer::USR_UID ); + $criteria->add( AppDelegationPeer::APP_UID, $appUid ); + $criteria->add( AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN' ); + $criteria->add( AppDelegationPeer::DEL_INDEX, $index ); + $dataResult = AppDelegationPeer::doSelectRS( $criteria ); + $dataResult->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + if($dataResult->next()) { + return $dataResult->getRow(); + } else { + return []; + } } /** diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 938a61b01..3a37ab6f0 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -1,19 +1,54 @@ formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName); + return ($this->formatFieldNameInUppercase) ? strtoupper($fieldName) : strtolower($fieldName); } catch (Exception $e) { throw $e; } @@ -55,14 +90,14 @@ class Cases /** * Throw the exception "The Case doesn't exist" * - * @param string $applicationUid Unique id of Case + * @param string $applicationUid Unique id of Case * @param string $fieldNameForException Field name for the exception * * @return void */ private function throwExceptionCaseDoesNotExist($applicationUid, $fieldNameForException) { - throw new Exception(\G::LoadTranslation( + throw new Exception(G::LoadTranslation( 'ID_CASE_DOES_NOT_EXIST2', [$fieldNameForException, $applicationUid] )); } @@ -70,8 +105,8 @@ class Cases /** * Verify if does not exist the Case in table APPLICATION * - * @param string $applicationUid Unique id of Case - * @param string $delIndex Delegation index + * @param string $applicationUid Unique id of Case + * @param string $delIndex Delegation index * @param string $fieldNameForException Field name for the exception * * return void Throw exception if does not exist the Case in table APPLICATION @@ -79,12 +114,12 @@ class Cases public function throwExceptionIfNotExistsCase($applicationUid, $delIndex, $fieldNameForException) { try { - $obj = \ApplicationPeer::retrieveByPK($applicationUid); + $obj = ApplicationPeer::retrieveByPK($applicationUid); $flag = is_null($obj); if (!$flag && $delIndex > 0) { - $obj = \AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); + $obj = AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); $flag = is_null($obj); } @@ -100,9 +135,9 @@ class Cases /** * Get Application record * - * @param string $applicationUid Unique id of Case - * @param array $arrayVariableNameForException Variable name for exception - * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist + * @param string $applicationUid Unique id of Case + * @param array $arrayVariableNameForException Variable name for exception + * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist * (TRUE: throw the exception; FALSE: returns FALSE) * * @return array Returns an array with Application record, ThrowTheException/FALSE otherwise @@ -113,7 +148,7 @@ class Cases $throwException = true ) { try { - $obj = \ApplicationPeer::retrieveByPK($applicationUid); + $obj = ApplicationPeer::retrieveByPK($applicationUid); if (is_null($obj)) { if ($throwException) { @@ -126,7 +161,7 @@ class Cases } //Return - return $obj->toArray(\BasePeer::TYPE_FIELDNAME); + return $obj->toArray(BasePeer::TYPE_FIELDNAME); } catch (Exception $e) { throw $e; } @@ -135,10 +170,10 @@ class Cases /** * Get AppDelegation record * - * @param string $applicationUid Unique id of Case - * @param int $delIndex Delegation index - * @param array $arrayVariableNameForException Variable name for exception - * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist + * @param string $applicationUid Unique id of Case + * @param int $delIndex Delegation index + * @param array $arrayVariableNameForException Variable name for exception + * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist * (TRUE: throw the exception; FALSE: returns FALSE) * * @return array Returns an array with AppDelegation record, ThrowTheException/FALSE otherwise @@ -150,11 +185,11 @@ class Cases $throwException = true ) { try { - $obj = \AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); + $obj = AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); if (is_null($obj)) { if ($throwException) { - throw new Exception(\G::LoadTranslation( + throw new Exception(G::LoadTranslation( 'ID_CASE_DEL_INDEX_DOES_NOT_EXIST', [ $arrayVariableNameForException['$applicationUid'], @@ -169,7 +204,7 @@ class Cases } //Return - return $obj->toArray(\BasePeer::TYPE_FIELDNAME); + return $obj->toArray(BasePeer::TYPE_FIELDNAME); } catch (Exception $e) { throw $e; } @@ -178,8 +213,8 @@ class Cases /** * Get list counters * - * @param string $userUid Unique id of User - * @param array $arrayType Type lists + * @param string $userUid Unique id of User + * @param array $arrayType Type lists * * @return array Return the list counters */ @@ -190,7 +225,7 @@ class Cases $solrConf = System::solrEnv(); if ($solrConf !== false) { - $ApplicationSolrIndex = new \AppSolr( + $ApplicationSolrIndex = new AppSolr( $solrConf['solr_enabled'], $solrConf['solr_host'], $solrConf['solr_instance'] @@ -201,7 +236,7 @@ class Cases } } - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); if ($solrEnabled) { $arrayListCounter = array_merge( @@ -229,7 +264,7 @@ class Cases * /light/unassigned * * @access public - * @param array $dataList, Data for list + * @param array $dataList , Data for list * @return array $response */ public function getList($dataList = array()) @@ -241,48 +276,48 @@ class Cases //We need to use the USR_UID for the cases in the list $userUid = isset($dataList["userUid"]) ? $dataList["userUid"] : $dataList["userId"]; - $callback = isset( $dataList["callback"] ) ? $dataList["callback"] : "stcCallback1001"; - $dir = isset( $dataList["dir"] ) ? $dataList["dir"] : "DESC"; - $sort = isset( $dataList["sort"] ) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; + $callback = isset($dataList["callback"]) ? $dataList["callback"] : "stcCallback1001"; + $dir = isset($dataList["dir"]) ? $dataList["dir"] : "DESC"; + $sort = isset($dataList["sort"]) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; if ($sort === 'APP_CACHE_VIEW.APP_NUMBER') { $sort = "APPLICATION.APP_NUMBER"; } - $start = isset( $dataList["start"] ) ? $dataList["start"] : "0"; - $limit = isset( $dataList["limit"] ) ? $dataList["limit"] : ""; - $filter = isset( $dataList["filter"] ) ? $dataList["filter"] : ""; - $process = isset( $dataList["process"] ) ? $dataList["process"] : ""; - $category = isset( $dataList["category"] ) ? $dataList["category"] : ""; - $status = isset( $dataList["status"] ) ? strtoupper( $dataList["status"] ) : ""; - $search = isset( $dataList["search"] ) ? $dataList["search"] : ""; - $action = isset( $dataList["action"] ) ? $dataList["action"] : "todo"; - $paged = isset( $dataList["paged"] ) ? $dataList["paged"] : true; + $start = isset($dataList["start"]) ? $dataList["start"] : "0"; + $limit = isset($dataList["limit"]) ? $dataList["limit"] : ""; + $filter = isset($dataList["filter"]) ? $dataList["filter"] : ""; + $process = isset($dataList["process"]) ? $dataList["process"] : ""; + $category = isset($dataList["category"]) ? $dataList["category"] : ""; + $status = isset($dataList["status"]) ? strtoupper($dataList["status"]) : ""; + $search = isset($dataList["search"]) ? $dataList["search"] : ""; + $action = isset($dataList["action"]) ? $dataList["action"] : "todo"; + $paged = isset($dataList["paged"]) ? $dataList["paged"] : true; $type = "extjs"; - $dateFrom = (!empty( $dataList["dateFrom"] )) ? substr( $dataList["dateFrom"], 0, 10 ) : ""; - $dateTo = (!empty( $dataList["dateTo"] )) ? substr( $dataList["dateTo"], 0, 10 ) : ""; - $newerThan = (!empty($dataList['newerThan']))? $dataList['newerThan'] : ''; - $oldestThan = (!empty($dataList['oldestthan']))? $dataList['oldestthan'] : ''; + $dateFrom = (!empty($dataList["dateFrom"])) ? substr($dataList["dateFrom"], 0, 10) : ""; + $dateTo = (!empty($dataList["dateTo"])) ? substr($dataList["dateTo"], 0, 10) : ""; + $newerThan = (!empty($dataList['newerThan'])) ? $dataList['newerThan'] : ''; + $oldestThan = (!empty($dataList['oldestthan'])) ? $dataList['oldestthan'] : ''; $apps = new Applications(); $response = $apps->getAll( - $userUid, - $start, - $limit, - $action, - $filter, - $search, - $process, - $status, - $type, - $dateFrom, - $dateTo, - $callback, - $dir, - (strpos($sort, ".") !== false)? $sort : "APP_CACHE_VIEW." . $sort, - $category, - true, - $paged, - $newerThan, - $oldestThan + $userUid, + $start, + $limit, + $action, + $filter, + $search, + $process, + $status, + $type, + $dateFrom, + $dateTo, + $callback, + $dir, + (strpos($sort, ".") !== false) ? $sort : "APP_CACHE_VIEW." . $sort, + $category, + true, + $paged, + $newerThan, + $oldestThan ); if (!empty($response['data'])) { foreach ($response['data'] as &$value) { @@ -292,7 +327,7 @@ class Cases if ($paged) { $response['total'] = $response['totalCount']; - $response['start'] = $start+1; + $response['start'] = $start + 1; $response['limit'] = $limit; $response['sort'] = G::toLower($sort); $response['dir'] = G::toLower($dir); @@ -302,13 +337,15 @@ class Cases } else { $response = $response['data']; } + return $response; } + /** * Search cases and get list of cases * * @access public - * @param array $dataList, Data for list + * @param array $dataList , Data for list * @return array $response */ public function getCasesSearch($dataList = array()) @@ -320,21 +357,21 @@ class Cases //We need to user the USR_ID for performance $userId = $dataList["userId"]; - $dir = isset( $dataList["dir"] ) ? $dataList["dir"] : "DESC"; - $sort = isset( $dataList["sort"] ) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; + $dir = isset($dataList["dir"]) ? $dataList["dir"] : "DESC"; + $sort = isset($dataList["sort"]) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; if ($sort === 'APP_CACHE_VIEW.APP_NUMBER') { $sort = "APPLICATION.APP_NUMBER"; } - $start = isset( $dataList["start"] ) ? $dataList["start"] : "0"; - $limit = isset( $dataList["limit"] ) ? $dataList["limit"] : ""; - $process = isset( $dataList["process"] ) ? $dataList["process"] : ""; - $category = isset( $dataList["category"] ) ? $dataList["category"] : ""; - $status = isset( $dataList["status"] ) ? strtoupper( $dataList["status"] ) : ""; - $user = isset( $dataList["user"] ) ? $dataList["user"] : ""; - $search = isset( $dataList["search"] ) ? $dataList["search"] : ""; - $dateFrom = (!empty( $dataList["dateFrom"] )) ? substr( $dataList["dateFrom"], 0, 10 ) : ""; - $dateTo = (!empty( $dataList["dateTo"] )) ? substr( $dataList["dateTo"], 0, 10 ) : ""; - $filterStatus = isset( $dataList["filterStatus"] ) ? strtoupper( $dataList["filterStatus"] ) : ""; + $start = isset($dataList["start"]) ? $dataList["start"] : "0"; + $limit = isset($dataList["limit"]) ? $dataList["limit"] : ""; + $process = isset($dataList["process"]) ? $dataList["process"] : ""; + $category = isset($dataList["category"]) ? $dataList["category"] : ""; + $status = isset($dataList["status"]) ? strtoupper($dataList["status"]) : ""; + $user = isset($dataList["user"]) ? $dataList["user"] : ""; + $search = isset($dataList["search"]) ? $dataList["search"] : ""; + $dateFrom = (!empty($dataList["dateFrom"])) ? substr($dataList["dateFrom"], 0, 10) : ""; + $dateTo = (!empty($dataList["dateTo"])) ? substr($dataList["dateTo"], 0, 10) : ""; + $filterStatus = isset($dataList["filterStatus"]) ? strtoupper($dataList["filterStatus"]) : ""; $apps = new Applications(); $response = $apps->searchAll( @@ -352,7 +389,7 @@ class Cases ); $response['total'] = 0; - $response['start'] = $start+1; + $response['start'] = $start + 1; $response['limit'] = $limit; $response['sort'] = G::toLower($sort); $response['dir'] = G::toLower($dir); @@ -380,7 +417,7 @@ class Cases try { $solrEnabled = 0; if (($solrEnv = System::solrEnv()) !== false) { - $appSolr = new \AppSolr( + $appSolr = new AppSolr( $solrEnv["solr_enabled"], $solrEnv["solr_host"], $solrEnv["solr_instance"] @@ -398,29 +435,29 @@ class Cases $columsToInclude = array("APP_UID"); $solrSearchText = null; //Todo - $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; + $solrSearchText = $solrSearchText . (($solrSearchText != null) ? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . $userUid . "_txt"; //Draft - $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:" . $userUid . ")"; + $solrSearchText = $solrSearchText . (($solrSearchText != null) ? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:" . $userUid . ")"; //Index is allways 1 $solrSearchText = "($solrSearchText)"; //Add del_index dynamic fields to list of resulting columns $columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes); - $solrRequestData = \EntitySolrRequestData::createForRequestPagination( + $solrRequestData = EntitySolrRequestData::createForRequestPagination( array( - "workspace" => $solrEnv["solr_instance"], + "workspace" => $solrEnv["solr_instance"], "startAfter" => 0, - "pageSize" => 1000, + "pageSize" => 1000, "searchText" => $solrSearchText, "numSortingCols" => 1, "sortCols" => array("APP_NUMBER"), - "sortDir" => array(strtolower("DESC")), - "includeCols" => $columsToIncludeFinal, + "sortDir" => array(strtolower("DESC")), + "includeCols" => $columsToIncludeFinal, "resultFormat" => "json" ) ); //Use search index to return list of cases - $searchIndex = new \BpmnEngineServicesSearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); + $searchIndex = new BpmnEngineServicesSearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); //Execute query $solrQueryResult = $searchIndex->getDataTablePaginatedList($solrRequestData); //Get the missing data from database @@ -484,7 +521,7 @@ class Cases $array['app_create_date'] = $array['createDate']; $array['app_update_date'] = $array['updateDate']; $array['current_task'] = $array['currentUsers']; - for ($i = 0; $i<=count($array['current_task'])-1; $i++) { + for ($i = 0; $i <= count($array['current_task']) - 1; $i++) { $current_task = $array['current_task'][$i]; $current_task['usr_uid'] = $current_task['userId']; $current_task['usr_name'] = trim($current_task['userName']); @@ -521,16 +558,19 @@ class Cases $oResponse = json_decode(json_encode($array), false); $oResponse->current_task = $current_task; } + //Return return $oResponse; } } - } catch (\InvalidIndexSearchTextException $e) { + } catch (InvalidIndexSearchTextException $e) { $arrayData = array(); - $arrayData[] = array ("app_uid" => $e->getMessage(), - "app_name" => $e->getMessage(), - "del_index" => $e->getMessage(), - "pro_uid" => $e->getMessage()); + $arrayData[] = array( + "app_uid" => $e->getMessage(), + "app_name" => $e->getMessage(), + "del_index" => $e->getMessage(), + "pro_uid" => $e->getMessage() + ); throw (new Exception($arrayData)); } } else { @@ -555,7 +595,7 @@ class Cases $aCurrent_task = array(); - for ($i = 0; $i<=count($array['current_task'])-1; $i++) { + for ($i = 0; $i <= count($array['current_task']) - 1; $i++) { $current_task = $array['current_task'][$i]; $current_task['usr_uid'] = $current_task['userId']; $current_task['usr_name'] = trim($current_task['userName']); @@ -594,6 +634,7 @@ class Cases $current_task = json_decode(json_encode($aCurrent_task), false); $oResponse = json_decode(json_encode($array), false); $oResponse->current_task = $current_task; + //Return return $oResponse; } @@ -616,48 +657,51 @@ class Cases //Verify data $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\ApplicationPeer::APP_UID); + $criteria->addSelectColumn(ApplicationPeer::APP_UID); - $criteria->add(\ApplicationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria->add(\ApplicationPeer::APP_STATUS, "COMPLETED", \Criteria::EQUAL); + $criteria->add(ApplicationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria->add(ApplicationPeer::APP_STATUS, "COMPLETED", Criteria::EQUAL); - $rsCriteria = \ApplicationPeer::doSelectRS($criteria); + $rsCriteria = ApplicationPeer::doSelectRS($criteria); if ($rsCriteria->next()) { - throw new Exception(\G::LoadTranslation("ID_CASE_NO_CURRENT_TASKS_BECAUSE_CASE_ITS_COMPLETED", array($this->getFieldNameByFormatFieldName("APP_UID"), $applicationUid))); + throw new Exception(G::LoadTranslation("ID_CASE_NO_CURRENT_TASKS_BECAUSE_CASE_ITS_COMPLETED", + array($this->getFieldNameByFormatFieldName("APP_UID"), $applicationUid))); } //Get data $result = array(); - $oCriteria = new \Criteria( 'workflow' ); - $del = \DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(\AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(\AppDelegationPeer::DEL_INIT_DATE); - $oCriteria->addSelectColumn(\AppDelegationPeer::DEL_TASK_DUE_DATE); - $oCriteria->addSelectColumn(\TaskPeer::TAS_TITLE); - $oCriteria->addJoin(\AppDelegationPeer::TAS_UID, \TaskPeer::TAS_UID); - $oCriteria->add( \AppDelegationPeer::APP_UID, $applicationUid ); - $oCriteria->add( \AppDelegationPeer::USR_UID, $userUid ); - $oCriteria->add( \AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN' ); - $oCriteria->add( \AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL ); - $oDataset = \AppDelegationPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $oCriteria = new Criteria('workflow'); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); + $oCriteria->addSelectColumn(TaskPeer::TAS_TITLE); + $oCriteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID); + $oCriteria->add(AppDelegationPeer::APP_UID, $applicationUid); + $oCriteria->add(AppDelegationPeer::USR_UID, $userUid); + $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result = array ('tas_uid' => $aRow['TAS_UID'], - 'tas_title' => $aRow['TAS_TITLE'], - 'del_index' => $aRow['DEL_INDEX'], - "del_init_date" => $aRow["DEL_INIT_DATE"] . "", - "del_task_due_date" => $aRow["DEL_TASK_DUE_DATE"]); + $result = array( + 'tas_uid' => $aRow['TAS_UID'], + 'tas_title' => $aRow['TAS_TITLE'], + 'del_index' => $aRow['DEL_INDEX'], + "del_init_date" => $aRow["DEL_INIT_DATE"] . "", + "del_task_due_date" => $aRow["DEL_TASK_DUE_DATE"] + ); $oDataset->next(); } //Return if (empty($result)) { - throw new Exception(\G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); + throw new Exception(G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); } else { return $result; } @@ -685,9 +729,9 @@ class Cases $variables = array_shift($variables); } Validator::proUid($processUid, '$pro_uid'); - $oTask = new \Task(); - if (! $oTask->taskExists($taskUid)) { - throw new Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('tas_uid'))); + $oTask = new ModelTask(); + if (!$oTask->taskExists($taskUid)) { + throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_FOR", array('tas_uid'))); } $fields = $ws->newCase($processUid, $userUid, $taskUid, $variables); $array = json_decode(json_encode($fields), true); @@ -703,6 +747,7 @@ class Cases unset($array['caseNumber']); } $oResponse = json_decode(json_encode($array), false); + //Return return $oResponse; } catch (Exception $e) { @@ -731,17 +776,17 @@ class Cases $variables = array(array()); } Validator::proUid($processUid, '$pro_uid'); - $user = new \Users(); - if (! $user->userExists( $userUid )) { - throw new Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('usr_uid'))); + $user = new ModelUsers(); + if (!$user->userExists($userUid)) { + throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_FOR", array('usr_uid'))); } $fields = $ws->newCaseImpersonate($processUid, $userUid, $variables, $taskUid); $array = json_decode(json_encode($fields), true); if ($array ["status_code"] != 0) { if ($array ["status_code"] == 12) { - throw (new Exception(\G::loadTranslation('ID_NO_STARTING_TASK') . '. tas_uid.')); + throw (new Exception(G::loadTranslation('ID_NO_STARTING_TASK') . '. tas_uid.')); } elseif ($array ["status_code"] == 13) { - throw (new Exception(\G::loadTranslation('ID_MULTIPLE_STARTING_TASKS') . '. tas_uid.')); + throw (new Exception(G::loadTranslation('ID_MULTIPLE_STARTING_TASKS') . '. tas_uid.')); } throw (new Exception($array ["message"])); } else { @@ -754,6 +799,7 @@ class Cases unset($array['caseNumber']); } $oResponse = json_decode(json_encode($array), false); + //Return return $oResponse; } catch (Exception $e) { @@ -791,7 +837,7 @@ class Cases unset($array['timestamp']); } } else { - throw new Exception(\G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); + throw new Exception(G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); } } catch (Exception $e) { throw $e; @@ -802,9 +848,9 @@ class Cases * Put cancel case * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid for user - * @param string $del_index, Index for case + * @param string $app_uid , Uid for case + * @param string $usr_uid , Uid for user + * @param string $del_index , Index for case * @return array * * @author Brayan Pereyra (Cochalo) @@ -823,32 +869,32 @@ class Cases } Validator::isInteger($del_index, '$del_index'); - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid); if ($fields['APP_STATUS'] == 'CANCELLED') { - throw (new Exception(\G::LoadTranslation("ID_CASE_ALREADY_CANCELED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_ALREADY_CANCELED", array($app_uid)))); } - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); $arrayProcess = $appCacheView->getProUidSupervisor($usr_uid); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_INDEX, $del_index, \Criteria::EQUAL); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $arrayProcess, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) ); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_CASE_USER_INVALID_CANCEL_CASE", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_CANCEL_CASE", array($usr_uid)))); } - $case->cancelCase( $app_uid, $del_index, $usr_uid ); + $case->cancelCase($app_uid, $del_index, $usr_uid); } /** @@ -858,7 +904,7 @@ class Cases * @param string $app_uid , Uid for case * @param string $usr_uid , Uid for user * @param bool|string $del_index , Index for case - * @param null|string $unpaused_date, Date for unpaused + * @param null|string $unpaused_date , Date for unpaused * @return array * * @author Brayan Pereyra (Cochalo) @@ -878,45 +924,45 @@ class Cases Validator::isInteger($del_index, '$del_index'); - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid); if ($fields['APP_STATUS'] == 'CANCELLED') { - throw (new Exception(\G::LoadTranslation("ID_CASE_IS_CANCELED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_IS_CANCELED", array($app_uid)))); } - $oDelay = new \AppDelay(); + $oDelay = new AppDelay(); if ($oDelay->isPaused($app_uid, $del_index)) { - throw (new Exception(\G::LoadTranslation("ID_CASE_PAUSED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_PAUSED", array($app_uid)))); } - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); $arrayProcess = $appCacheView->getProUidSupervisor($usr_uid); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_INDEX, $del_index, \Criteria::EQUAL); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $arrayProcess, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) ); - $criteria->add(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_CASE_USER_INVALID_PAUSED_CASE", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_PAUSED_CASE", array($usr_uid)))); } if ($unpaused_date != null) { Validator::isDate($unpaused_date, 'Y-m-d', '$unpaused_date'); } - $case->pauseCase( $app_uid, $del_index, $usr_uid, $unpaused_date ); + $case->pauseCase($app_uid, $del_index, $usr_uid, $unpaused_date); } /** @@ -943,43 +989,43 @@ class Cases } Validator::isInteger($del_index, '$del_index'); - $oDelay = new \AppDelay(); + $oDelay = new AppDelay(); if (!$oDelay->isPaused($app_uid, $del_index)) { - throw (new Exception(\G::LoadTranslation("ID_CASE_NOT_PAUSED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_NOT_PAUSED", array($app_uid)))); } - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); $arrayProcess = $appCacheView->getProUidSupervisor($usr_uid); - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_INDEX, $del_index, \Criteria::EQUAL); + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $arrayProcess, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) ); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_CASE_USER_INVALID_UNPAUSE_CASE", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_UNPAUSE_CASE", array($usr_uid)))); } - $case = new \Cases(); - $case->unpauseCase( $app_uid, $del_index, $usr_uid ); + $case = new ClassesCases(); + $case->unpauseCase($app_uid, $del_index, $usr_uid); } /** * Put execute trigger case * * @access public - * @param string $appUid, Uid for case - * @param string $triUid, Uid for trigger - * @param string $userUid, Uid for user - * @param bool|string $delIndex, Index for case + * @param string $appUid , Uid for case + * @param string $triUid , Uid for trigger + * @param string $userUid , Uid for user + * @param bool|string $delIndex , Index for case * * @return array * @throws Exception @@ -1006,7 +1052,7 @@ class Cases global $RBAC; if (!method_exists($RBAC, 'initRBAC')) { - $RBAC = RBAC::getSingleton( PATH_DATA, session_id() ); + $RBAC = RBAC::getSingleton(PATH_DATA, session_id()); $RBAC->sSystem = 'PROCESSMAKER'; } @@ -1022,8 +1068,8 @@ class Cases * Delete case * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid user + * @param string $app_uid , Uid for case + * @param string $usr_uid , Uid user * @return array * * @author Brayan Pereyra (Cochalo) @@ -1034,24 +1080,24 @@ class Cases Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); - $criteria = new \Criteria(); - $criteria->addSelectColumn( \ApplicationPeer::APP_STATUS ); - $criteria->addSelectColumn( \ApplicationPeer::APP_INIT_USER ); - $criteria->add( \ApplicationPeer::APP_UID, $app_uid, \Criteria::EQUAL ); - $dataset = \ApplicationPeer::doSelectRS($criteria); - $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria = new Criteria(); + $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); + $criteria->addSelectColumn(ApplicationPeer::APP_INIT_USER); + $criteria->add(ApplicationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $dataset = ApplicationPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $aRow = $dataset->getRow(); if ($aRow['APP_STATUS'] != 'DRAFT') { - throw (new Exception(\G::LoadTranslation("ID_DELETE_CASE_NO_STATUS"))); + throw (new Exception(G::LoadTranslation("ID_DELETE_CASE_NO_STATUS"))); } if ($aRow['APP_INIT_USER'] != $usr_uid) { - throw (new Exception(\G::LoadTranslation("ID_DELETE_CASE_NO_OWNER"))); + throw (new Exception(G::LoadTranslation("ID_DELETE_CASE_NO_OWNER"))); } - $case = new \Cases(); - $case->removeCase( $app_uid ); + $case = new ClassesCases(); + $case->removeCase($app_uid); } /** @@ -1070,15 +1116,16 @@ class Cases if (!$delIndex) { $delIndex = AppDelegation::getCurrentIndex($applicationUid); //Check if the next task is a subprocess SYNCHRONOUS with a thread Open - $subAppData = new \SubApplication(); + $subAppData = new SubApplication(); $caseSubprocessPending = $subAppData->isSubProcessWithCasePending($applicationUid, $delIndex); if ($caseSubprocessPending) { - throw (new Exception(\G::LoadTranslation("ID_CASE_ALREADY_DERIVATED"))); + throw (new Exception(G::LoadTranslation("ID_CASE_ALREADY_DERIVATED"))); } } $ws = new WsBase(); - $fields = $ws->derivateCase($userUid, $applicationUid, $delIndex, $bExecuteTriggersBeforeAssignment = false); + $fields = $ws->derivateCase($userUid, $applicationUid, $delIndex, + $bExecuteTriggersBeforeAssignment = false); $array = json_decode(json_encode($fields), true); if ($array ["status_code"] != 0) { throw (new Exception($array ["message"])); @@ -1104,10 +1151,10 @@ class Cases public function getAllUploadedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID) { - $conf = new \Configurations(); + $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); - $cases = new \cases(); + $cases = new ClassesCases(); $listing = false; $oPluginRegistry = PluginRegistry::loadSingleton(); @@ -1147,43 +1194,44 @@ class Cases } } $aDelete = $cases->getAllObjectsFrom($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID, 'DELETE'); - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); //$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( - \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], \Criteria::IN)-> - addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, array($sUserUID, '-1'), \Criteria::IN)) + AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN)-> + addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, array($sUserUID, '-1'), Criteria::IN)) ); $aConditions = array(); - $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); - $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); - $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $aConditions[] = array(AppDocumentPeer::APP_UID, AppDelegationPeer::APP_UID); + $aConditions[] = array(AppDocumentPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aInputDocuments = array(); $aInputDocuments[] = array( 'APP_DOC_UID' => 'char', 'DOC_UID' => 'char', 'APP_DOC_COMMENT' => 'char', - 'APP_DOC_FILENAME' => 'char', 'APP_DOC_INDEX' => 'integer' + 'APP_DOC_FILENAME' => 'char', + 'APP_DOC_INDEX' => 'integer' ); - $oUser = new \Users(); + $oUser = new ModelUsers(); while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new \Criteria('workflow'); - $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); - $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oCriteria2 = new Criteria('workflow'); + $oCriteria2->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria2->add(AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); + $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); - $oTask = new \Task(); + $oTask = new ModelTask(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { @@ -1196,7 +1244,8 @@ class Cases try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '***'; } @@ -1220,17 +1269,17 @@ class Cases $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; - $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); + $aFields['CONFIRM'] = G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aDelete['INPUT_DOCUMENTS'])) { - $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); + $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_DOWNLOAD'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_DOWNLOAD'); $aFields['DOWNLOAD_LINK'] = "cases/cases_ShowDocument?a=" . $aRow['APP_DOC_UID'] . "&v=" . $aRow['DOC_VERSION']; $aFields['DOC_VERSION'] = $aRow['DOC_VERSION']; if (is_array($listing)) { foreach ($listing as $folderitem) { if ($folderitem->filename == $aRow['APP_DOC_UID']) { - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_GET_EXTERNAL_FILE'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_GET_EXTERNAL_FILE'); $aFields['DOWNLOAD_LINK'] = $folderitem->downloadScript; continue; } @@ -1242,34 +1291,34 @@ class Cases } $oDataset->next(); } - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, array('ATTACHED'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('ATTACHED'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( - \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], \Criteria::IN + AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN )-> - addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, array($sUserUID, '-1'), \Criteria::IN))); + addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, array($sUserUID, '-1'), Criteria::IN))); $aConditions = array(); - $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); - $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); - $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $aConditions[] = array(AppDocumentPeer::APP_UID, AppDelegationPeer::APP_UID); + $aConditions[] = array(AppDocumentPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new \Criteria('workflow'); - $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); - $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oCriteria2 = new Criteria('workflow'); + $oCriteria2->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria2->add(AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); + $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); - $oTask = new \Task(); + $oTask = new ModelTask(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { @@ -1280,7 +1329,8 @@ class Cases try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '***'; } @@ -1315,26 +1365,27 @@ class Cases $oDataset->next(); } // Get input documents added/modified by a supervisor - Begin - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::DEL_INDEX, 100000); - $oCriteria->addJoin(\AppDocumentPeer::APP_UID, \ApplicationPeer::APP_UID, \Criteria::LEFT_JOIN); - $oCriteria->add(\ApplicationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::DEL_INDEX, 100000); + $oCriteria->addJoin(AppDocumentPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); + $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); - $oUser = new \Users(); + $oUser = new ModelUsers(); while ($aRow = $oDataset->getRow()) { $aTask = array('TAS_TITLE' => '[ ' . G::LoadTranslation('ID_SUPERVISOR') . ' ]'); $aAux = $oAppDocument->load($aRow['APP_DOC_UID'], $aRow['DOC_VERSION']); $lastVersion = $oAppDocument->getLastAppDocVersion($aRow['APP_DOC_UID'], $sApplicationUID); try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '***'; } @@ -1355,17 +1406,17 @@ class Cases $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; - $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); + $aFields['CONFIRM'] = G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aDelete['INPUT_DOCUMENTS'])) { - $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); + $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_DOWNLOAD'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_DOWNLOAD'); $aFields['DOWNLOAD_LINK'] = "cases_ShowDocument?a=" . $aRow['APP_DOC_UID'] . "&v=" . $aRow['DOC_VERSION']; $aFields['DOC_VERSION'] = $aRow['DOC_VERSION']; if (is_array($listing)) { foreach ($listing as $folderitem) { if ($folderitem->filename == $aRow['APP_DOC_UID']) { - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_GET_EXTERNAL_FILE'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_GET_EXTERNAL_FILE'); $aFields['DOWNLOAD_LINK'] = $folderitem->downloadScript; continue; } @@ -1382,9 +1433,10 @@ class Cases global $_DBArray; $_DBArray['inputDocuments'] = $aInputDocuments; - $oCriteria = new \Criteria('dbarray'); + $oCriteria = new Criteria('dbarray'); $oCriteria->setDBArrayTable('inputDocuments'); $oCriteria->addDescendingOrderByColumn('CREATE_DATE'); + return $oCriteria; } @@ -1401,10 +1453,10 @@ class Cases public function getAllGeneratedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID) { - $conf = new \Configurations(); + $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); - $cases = new \cases(); + $cases = new ClassesCases(); $listing = false; $oPluginRegistry = PluginRegistry::loadSingleton(); @@ -1416,7 +1468,11 @@ class Cases } $aObjectPermissions = $cases->getAllObjects($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID); if (!is_array($aObjectPermissions)) { - $aObjectPermissions = array('DYNAFORMS' => array(-1),'INPUT_DOCUMENTS' => array(-1),'OUTPUT_DOCUMENTS' => array(-1)); + $aObjectPermissions = array( + 'DYNAFORMS' => array(-1), + 'INPUT_DOCUMENTS' => array(-1), + 'OUTPUT_DOCUMENTS' => array(-1) + ); } if (!isset($aObjectPermissions['DYNAFORMS'])) { $aObjectPermissions['DYNAFORMS'] = array(-1); @@ -1440,24 +1496,25 @@ class Cases } } $aDelete = $cases->getAllObjectsFrom($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID, 'DELETE'); - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); //$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( - \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], \Criteria::IN)->addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, $sUserUID, \Criteria::EQUAL)) + AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], + Criteria::IN)->addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, $sUserUID, Criteria::EQUAL)) ); $aConditions = array(); - $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); - $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); - $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $aConditions[] = array(AppDocumentPeer::APP_UID, AppDelegationPeer::APP_UID); + $aConditions[] = array(AppDocumentPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aOutputDocuments = array(); $aOutputDocuments[] = array( @@ -1467,16 +1524,16 @@ class Cases 'APP_DOC_FILENAME' => 'char', 'APP_DOC_INDEX' => 'integer' ); - $oUser = new \Users(); + $oUser = new ModelUsers(); while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new \Criteria('workflow'); - $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); - $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oCriteria2 = new Criteria('workflow'); + $oCriteria2->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria2->add(AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); + $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); - $oTask = new \Task(); + $oTask = new ModelTask(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { @@ -1502,7 +1559,7 @@ class Cases if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "PDF")) { - $filePdfLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; + $filePdfLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; $filePdf = $folderitem->downloadScript; continue; } @@ -1518,7 +1575,7 @@ class Cases if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "DOC")) { - $fileDocLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .doc"; + $fileDocLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .doc"; $fileDoc = $folderitem->downloadScript; continue; } @@ -1545,7 +1602,7 @@ class Cases if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "PDF")) { - $filePdfLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; + $filePdfLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; $filePdf = $folderitem->downloadScript; continue; } @@ -1555,7 +1612,8 @@ class Cases } try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '(USER DELETED)'; } @@ -1596,10 +1654,10 @@ class Cases $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; - $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); + $aFields['CONFIRM'] = G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aObjectPermissions['OUTPUT_DOCUMENTS'])) { if (in_array($aRow['APP_DOC_UID'], $aDelete['OUTPUT_DOCUMENTS'])) { - $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); + $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } } $aOutputDocuments[] = $aFields; @@ -1609,9 +1667,10 @@ class Cases global $_DBArray; $_DBArray['outputDocuments'] = $aOutputDocuments; - $oCriteria = new \Criteria('dbarray'); + $oCriteria = new Criteria('dbarray'); $oCriteria->setDBArrayTable('outputDocuments'); $oCriteria->addDescendingOrderByColumn('CREATE_DATE'); + return $oCriteria; } @@ -1644,12 +1703,14 @@ class Cases } } } else { - $caseVariableAux = $this->__getFieldsAndValuesByDynaFormAndAppData($field, $appData, $caseVariable); + $caseVariableAux = $this->__getFieldsAndValuesByDynaFormAndAppData($field, $appData, + $caseVariable); $caseVariable = array_merge($caseVariable, $caseVariableAux); } } } } + return $caseVariable; } catch (Exception $e) { throw $e; @@ -1660,22 +1721,28 @@ class Cases * Get Case Variables * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid for user - * @param string $dynaFormUid, Uid for dynaform + * @param string $app_uid , Uid for case + * @param string $usr_uid , Uid for user + * @param string $dynaFormUid , Uid for dynaform * @return array * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ - public function getCaseVariables($app_uid, $usr_uid, $dynaFormUid = null, $pro_uid = null, $act_uid = null, $app_index = null) - { + public function getCaseVariables( + $app_uid, + $usr_uid, + $dynaFormUid = null, + $pro_uid = null, + $act_uid = null, + $app_index = null + ) { Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); Validator::isString($usr_uid, '$usr_uid'); Validator::usrUid($usr_uid, '$usr_uid'); - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid); $arrayCaseVariable = []; @@ -1686,15 +1753,15 @@ class Cases $data["CURRENT_DYNAFORM"] = $dynaFormUid; $pmDynaForm = new PmDynaform($data); $arrayDynaFormData = $pmDynaForm->getDynaform(); - $arrayDynContent = \G::json_decode($arrayDynaFormData['DYN_CONTENT']); + $arrayDynContent = G::json_decode($arrayDynaFormData['DYN_CONTENT']); $pmDynaForm->jsonr($arrayDynContent); - $arrayDynContent = \G::json_decode(\G::json_encode($arrayDynContent), true); + $arrayDynContent = G::json_decode(G::json_encode($arrayDynContent), true); $arrayAppData = $fields['APP_DATA']; $arrayCaseVariable = $this->__getFieldsAndValuesByDynaFormAndAppData( - $arrayDynContent['items'][0], $arrayAppData, $arrayCaseVariable + $arrayDynContent['items'][0], $arrayAppData, $arrayCaseVariable ); } else { $arrayCaseVariable = $fields['APP_DATA']; @@ -1702,20 +1769,20 @@ class Cases //Get historyDate for Dynaform if (!is_null($pro_uid) && !is_null($act_uid) && !is_null($app_index)) { - $oCriteriaAppHistory = new \Criteria("workflow"); - $oCriteriaAppHistory->addSelectColumn(\AppHistoryPeer::HISTORY_DATE); - $oCriteriaAppHistory->add(\AppHistoryPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::DEL_INDEX, $app_index, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::PRO_UID, $pro_uid, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::TAS_UID, $act_uid, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::USR_UID, $usr_uid, \Criteria::EQUAL); + $oCriteriaAppHistory = new Criteria("workflow"); + $oCriteriaAppHistory->addSelectColumn(AppHistoryPeer::HISTORY_DATE); + $oCriteriaAppHistory->add(AppHistoryPeer::APP_UID, $app_uid, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::DEL_INDEX, $app_index, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::PRO_UID, $pro_uid, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::TAS_UID, $act_uid, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::USR_UID, $usr_uid, Criteria::EQUAL); if (!is_null($dynaFormUid)) { - $oCriteriaAppHistory->add(\AppHistoryPeer::DYN_UID, $dynaFormUid, \Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::DYN_UID, $dynaFormUid, Criteria::EQUAL); } $oCriteriaAppHistory->addDescendingOrderByColumn('HISTORY_DATE'); $oCriteriaAppHistory->setLimit(1); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteriaAppHistory); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset = AppDocumentPeer::doSelectRS($oCriteriaAppHistory); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); if ($aRow = $oDataset->getRow()) { $dateHistory['SYS_VAR_UPDATE_DATE'] = $aRow['HISTORY_DATE']; @@ -1724,6 +1791,7 @@ class Cases } $arrayCaseVariable = array_merge($arrayCaseVariable, $dateHistory); } + return $arrayCaseVariable; } @@ -1731,16 +1799,16 @@ class Cases * Put Set Case Variables * * @access public - * @param string $app_uid, Uid for case - * @param array $app_data, Data for case variables - * @param string $dyn_uid, Uid for dynaform - * @param string $del_index, Index for case - * @param string $usr_uid, Uid for user + * @param string $app_uid , Uid for case + * @param array $app_data , Data for case variables + * @param string $dyn_uid , Uid for dynaform + * @param string $del_index , Index for case + * @param string $usr_uid , Uid for user * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ - public function setCaseVariables($app_uid, $app_data, $dyn_uid = null, $usr_uid ,$del_index = 0) + public function setCaseVariables($app_uid, $app_data, $dyn_uid = null, $usr_uid, $del_index = 0) { Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); @@ -1751,27 +1819,27 @@ class Cases $arrayResult = $this->getStatusInfo($app_uid); if ($arrayResult["APP_STATUS"] == "CANCELLED") { - throw new Exception(\G::LoadTranslation("ID_CASE_CANCELLED", array($app_uid))); + throw new Exception(G::LoadTranslation("ID_CASE_CANCELLED", array($app_uid))); } if ($arrayResult["APP_STATUS"] == "COMPLETED") { - throw new Exception(\G::LoadTranslation("ID_CASE_IS_COMPLETED", array($app_uid))); + throw new Exception(G::LoadTranslation("ID_CASE_IS_COMPLETED", array($app_uid))); } - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); $isProcessSupervisor = $appCacheView->getProUidSupervisor($usr_uid); - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL); + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $isProcessSupervisor, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $isProcessSupervisor, Criteria::IN)) ); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_NO_PERMISSION_NO_PARTICIPATED", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_NO_PERMISSION_NO_PARTICIPATED", array($usr_uid)))); } $_SESSION['APPLICATION'] = $app_uid; @@ -1787,7 +1855,7 @@ class Cases unset($app_data['__VARIABLE_DOCUMENT_DELETE__']); } - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid, $del_index); $_POST['form'] = $app_data; @@ -1795,7 +1863,7 @@ class Cases $oDynaform = \DynaformPeer::retrieveByPK($dyn_uid); if ($oDynaform->getDynVersion() < 2) { - $oForm = new \Form ( $fields['PRO_UID'] . "/" . $dyn_uid, PATH_DYNAFORM ); + $oForm = new \Form ($fields['PRO_UID'] . "/" . $dyn_uid, PATH_DYNAFORM); $oForm->validatePost(); } } @@ -1824,7 +1892,7 @@ class Cases * Get Case Notes * * @access public - * @param string $app_uid, Uid for case + * @param string $app_uid , Uid for case * @return array * * @author Brayan Pereyra (Cochalo) @@ -1839,33 +1907,33 @@ class Cases Validator::isArray($data_get, '$data_get'); Validator::isArray($data_get, '$data_get'); - $start = isset( $data_get["start"] ) ? $data_get["start"] : "0"; - $limit = isset( $data_get["limit"] ) ? $data_get["limit"] : ""; - $sort = isset( $data_get["sort"] ) ? $data_get["sort"] : "APP_NOTES.NOTE_DATE"; - $dir = isset( $data_get["dir"] ) ? $data_get["dir"] : "DESC"; - $user = isset( $data_get["user"] ) ? $data_get["user"] : ""; - $dateFrom = (!empty( $data_get["dateFrom"] )) ? substr( $data_get["dateFrom"], 0, 10 ) : ""; - $dateTo = (!empty( $data_get["dateTo"] )) ? substr( $data_get["dateTo"], 0, 10 ) : ""; - $search = isset( $data_get["search"] ) ? $data_get["search"] : ""; - $paged = isset( $data_get["paged"] ) ? $data_get["paged"] : true; + $start = isset($data_get["start"]) ? $data_get["start"] : "0"; + $limit = isset($data_get["limit"]) ? $data_get["limit"] : ""; + $sort = isset($data_get["sort"]) ? $data_get["sort"] : "APP_NOTES.NOTE_DATE"; + $dir = isset($data_get["dir"]) ? $data_get["dir"] : "DESC"; + $user = isset($data_get["user"]) ? $data_get["user"] : ""; + $dateFrom = (!empty($data_get["dateFrom"])) ? substr($data_get["dateFrom"], 0, 10) : ""; + $dateTo = (!empty($data_get["dateTo"])) ? substr($data_get["dateTo"], 0, 10) : ""; + $search = isset($data_get["search"]) ? $data_get["search"] : ""; + $paged = isset($data_get["paged"]) ? $data_get["paged"] : true; - $case = new \Cases(); + $case = new ClassesCases(); $caseLoad = $case->loadCase($app_uid); - $pro_uid = $caseLoad['PRO_UID']; - $tas_uid = AppDelegation::getCurrentTask($app_uid); - $respView = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW' ); - $respBlock = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK' ); + $pro_uid = $caseLoad['PRO_UID']; + $tas_uid = AppDelegation::getCurrentTask($app_uid); + $respView = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW'); + $respBlock = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK'); if ($respView['CASES_NOTES'] == 0 && $respBlock['CASES_NOTES'] == 0) { - throw (new Exception(\G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); + throw (new Exception(G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); } if ($sort != 'APP_NOTE.NOTE_DATE') { $sort = G::toUpper($sort); - $columnsAppCacheView = \AppNotesPeer::getFieldNames(\BasePeer::TYPE_FIELDNAME); + $columnsAppCacheView = AppNotesPeer::getFieldNames(BasePeer::TYPE_FIELDNAME); if (!(in_array($sort, $columnsAppCacheView))) { $sort = 'APP_NOTES.NOTE_DATE'; } else { - $sort = 'APP_NOTES.'.$sort; + $sort = 'APP_NOTES.' . $sort; } } if ((int)$start == 1 || (int)$start == 0) { @@ -1917,6 +1985,7 @@ class Cases $con++; } } + return $response; } @@ -1924,8 +1993,8 @@ class Cases * Save new case note * * @access public - * @param string $app_uid, Uid for case - * @param array $app_data, Data for case variables + * @param string $app_uid , Uid for case + * @param array $app_data , Data for case variables * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia @@ -1940,19 +2009,19 @@ class Cases Validator::isString($note_content, '$note_content'); if (strlen($note_content) > 500) { - throw (new Exception(\G::LoadTranslation("ID_INVALID_MAX_PERMITTED", array($note_content,'500')))); + throw (new Exception(G::LoadTranslation("ID_INVALID_MAX_PERMITTED", array($note_content, '500')))); } Validator::isBoolean($send_mail, '$send_mail'); - $case = new \Cases(); + $case = new ClassesCases(); $caseLoad = $case->loadCase($app_uid); - $pro_uid = $caseLoad['PRO_UID']; - $tas_uid = AppDelegation::getCurrentTask($app_uid); - $respView = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW' ); - $respBlock = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK' ); + $pro_uid = $caseLoad['PRO_UID']; + $tas_uid = AppDelegation::getCurrentTask($app_uid); + $respView = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW'); + $respBlock = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK'); if ($respView['CASES_NOTES'] == 0 && $respBlock['CASES_NOTES'] == 0) { - throw (new Exception(\G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); + throw (new Exception(G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); } $note_content = addslashes($note_content); @@ -1971,17 +2040,17 @@ class Cases { try { return array( - $this->getFieldNameByFormatFieldName("TAS_UID") => $record["TAS_UID"], - $this->getFieldNameByFormatFieldName("TAS_TITLE") => $record["TAS_TITLE"] . "", + $this->getFieldNameByFormatFieldName("TAS_UID") => $record["TAS_UID"], + $this->getFieldNameByFormatFieldName("TAS_TITLE") => $record["TAS_TITLE"] . "", $this->getFieldNameByFormatFieldName("TAS_DESCRIPTION") => $record["TAS_DESCRIPTION"] . "", - $this->getFieldNameByFormatFieldName("TAS_START") => ($record["TAS_START"] == "TRUE")? 1 : 0, - $this->getFieldNameByFormatFieldName("TAS_TYPE") => $record["TAS_TYPE"], - $this->getFieldNameByFormatFieldName("TAS_DERIVATION") => $record["TAS_DERIVATION"], + $this->getFieldNameByFormatFieldName("TAS_START") => ($record["TAS_START"] == "TRUE") ? 1 : 0, + $this->getFieldNameByFormatFieldName("TAS_TYPE") => $record["TAS_TYPE"], + $this->getFieldNameByFormatFieldName("TAS_DERIVATION") => $record["TAS_DERIVATION"], $this->getFieldNameByFormatFieldName("TAS_ASSIGN_TYPE") => $record["TAS_ASSIGN_TYPE"], - $this->getFieldNameByFormatFieldName("USR_UID") => $record["USR_UID"] . "", - $this->getFieldNameByFormatFieldName("USR_USERNAME") => $record["USR_USERNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $record["USR_FIRSTNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $record["USR_LASTNAME"] . "" + $this->getFieldNameByFormatFieldName("USR_UID") => $record["USR_UID"] . "", + $this->getFieldNameByFormatFieldName("USR_USERNAME") => $record["USR_USERNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $record["USR_FIRSTNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $record["USR_LASTNAME"] . "" ); } catch (Exception $e) { throw $e; @@ -2008,7 +2077,7 @@ class Cases //Set variables $process = new \Process(); $application = new \Application(); - $conf = new \Configurations(); + $conf = new Configurations(); $arrayApplicationData = $application->Load($applicationUid); $processUid = $arrayApplicationData["PRO_UID"]; @@ -2019,28 +2088,28 @@ class Cases //Get data //SQL - $delimiter = \DBAdapter::getStringDelimiter(); + $delimiter = DBAdapter::getStringDelimiter(); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\TaskPeer::TAS_UID); - $criteria->addSelectColumn(\TaskPeer::TAS_TITLE); - $criteria->addSelectColumn(\TaskPeer::TAS_DESCRIPTION); - $criteria->addSelectColumn(\TaskPeer::TAS_START); - $criteria->addSelectColumn(\TaskPeer::TAS_TYPE); - $criteria->addSelectColumn(\TaskPeer::TAS_DERIVATION); - $criteria->addSelectColumn(\TaskPeer::TAS_ASSIGN_TYPE); - $criteria->addSelectColumn(\UsersPeer::USR_UID); - $criteria->addSelectColumn(\UsersPeer::USR_USERNAME); - $criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(TaskPeer::TAS_UID); + $criteria->addSelectColumn(TaskPeer::TAS_TITLE); + $criteria->addSelectColumn(TaskPeer::TAS_DESCRIPTION); + $criteria->addSelectColumn(TaskPeer::TAS_START); + $criteria->addSelectColumn(TaskPeer::TAS_TYPE); + $criteria->addSelectColumn(TaskPeer::TAS_DERIVATION); + $criteria->addSelectColumn(TaskPeer::TAS_ASSIGN_TYPE); + $criteria->addSelectColumn(UsersPeer::USR_UID); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria->addJoin(\TaskPeer::TAS_LAST_ASSIGNED, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); + $criteria->addJoin(TaskPeer::TAS_LAST_ASSIGNED, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $criteria->add(\TaskPeer::PRO_UID, $processUid, \Criteria::EQUAL); + $criteria->add(TaskPeer::PRO_UID, $processUid, Criteria::EQUAL); - $rsCriteria = \TaskPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = TaskPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -2049,23 +2118,23 @@ class Cases if ($row["TAS_TYPE"] == "NORMAL") { if (($row["TAS_TITLE"] . "" == "")) { //There is no Label in Current SYS_LANG language so try to find in English - by default - $task = new \Task(); + $task = new ModelTask(); $task->setTasUid($row["TAS_UID"]); $row["TAS_TITLE"] = $task->getTasTitle(); } } else { - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addSelectColumn(\SubProcessPeer::PRO_UID); - $criteria2->addSelectColumn(\TaskPeer::TAS_TITLE); - $criteria2->addSelectColumn(\TaskPeer::TAS_DESCRIPTION); - $criteria2->addJoin(\SubProcessPeer::TAS_PARENT, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN); - $criteria2->add(\SubProcessPeer::PRO_PARENT, $processUid); - $criteria2->add(\SubProcessPeer::TAS_PARENT, $row["TAS_UID"]); + $criteria2->addSelectColumn(SubProcessPeer::PRO_UID); + $criteria2->addSelectColumn(TaskPeer::TAS_TITLE); + $criteria2->addSelectColumn(TaskPeer::TAS_DESCRIPTION); + $criteria2->addJoin(SubProcessPeer::TAS_PARENT, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria2->add(SubProcessPeer::PRO_PARENT, $processUid); + $criteria2->add(SubProcessPeer::TAS_PARENT, $row["TAS_UID"]); - $rsCriteria2 = \SubProcessPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = SubProcessPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria2->next(); @@ -2081,18 +2150,18 @@ class Cases $routeType = ""; $arrayRoute = array(); - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addAsColumn("ROU_NUMBER", \RoutePeer::ROU_CASE); - $criteria2->addSelectColumn(\RoutePeer::ROU_TYPE); - $criteria2->addSelectColumn(\RoutePeer::ROU_CONDITION); - $criteria2->addAsColumn("TAS_UID", \RoutePeer::ROU_NEXT_TASK); - $criteria2->add(\RoutePeer::PRO_UID, $processUid, \Criteria::EQUAL); - $criteria2->add(\RoutePeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); + $criteria2->addAsColumn("ROU_NUMBER", RoutePeer::ROU_CASE); + $criteria2->addSelectColumn(RoutePeer::ROU_TYPE); + $criteria2->addSelectColumn(RoutePeer::ROU_CONDITION); + $criteria2->addAsColumn("TAS_UID", RoutePeer::ROU_NEXT_TASK); + $criteria2->add(RoutePeer::PRO_UID, $processUid, Criteria::EQUAL); + $criteria2->add(RoutePeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); $criteria2->addAscendingOrderByColumn("ROU_NUMBER"); - $rsCriteria2 = \RoutePeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = RoutePeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria2->next()) { $row2 = $rsCriteria2->getRow(); @@ -2100,42 +2169,51 @@ class Cases $routeType = $row2["ROU_TYPE"]; $arrayRoute[] = array( - $this->getFieldNameByFormatFieldName("ROU_NUMBER") => (int)($row2["ROU_NUMBER"]), + $this->getFieldNameByFormatFieldName("ROU_NUMBER") => (int)($row2["ROU_NUMBER"]), $this->getFieldNameByFormatFieldName("ROU_CONDITION") => $row2["ROU_CONDITION"] . "", - $this->getFieldNameByFormatFieldName("TAS_UID") => $row2["TAS_UID"] + $this->getFieldNameByFormatFieldName("TAS_UID") => $row2["TAS_UID"] ); } //Delegations $arrayAppDelegation = array(); - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INIT_DATE); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_TASK_DUE_DATE); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); - $criteria2->addSelectColumn(\UsersPeer::USR_UID); - $criteria2->addSelectColumn(\UsersPeer::USR_USERNAME); - $criteria2->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteria2->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); + $criteria2->addSelectColumn(UsersPeer::USR_UID); + $criteria2->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria2->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria2->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria2->addJoin(\AppDelegationPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); + $criteria2->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $criteria2->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria2->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); - $criteria2->addAscendingOrderByColumn(\AppDelegationPeer::DEL_INDEX); + $criteria2->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria2->add(AppDelegationPeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); + $criteria2->addAscendingOrderByColumn(AppDelegationPeer::DEL_INDEX); - $rsCriteria2 = \AppDelegationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = AppDelegationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria2->next()) { $row2 = $rsCriteria2->getRow(); $arrayAppDelegationDate = array( - "DEL_INIT_DATE" => array("date" => $row2["DEL_INIT_DATE"], "dateFormated" => \G::LoadTranslation("ID_CASE_NOT_YET_STARTED")), - "DEL_TASK_DUE_DATE" => array("date" => $row2["DEL_TASK_DUE_DATE"], "dateFormated" => \G::LoadTranslation("ID_CASE_NOT_YET_STARTED")), - "DEL_FINISH_DATE" => array("date" => $row2["DEL_FINISH_DATE"], "dateFormated" => \G::LoadTranslation("ID_NOT_FINISHED")) + "DEL_INIT_DATE" => array( + "date" => $row2["DEL_INIT_DATE"], + "dateFormated" => G::LoadTranslation("ID_CASE_NOT_YET_STARTED") + ), + "DEL_TASK_DUE_DATE" => array( + "date" => $row2["DEL_TASK_DUE_DATE"], + "dateFormated" => G::LoadTranslation("ID_CASE_NOT_YET_STARTED") + ), + "DEL_FINISH_DATE" => array( + "date" => $row2["DEL_FINISH_DATE"], + "dateFormated" => G::LoadTranslation("ID_NOT_FINISHED") + ) ); foreach ($arrayAppDelegationDate as $key => $value) { @@ -2147,7 +2225,7 @@ class Cases } } - $appDelegationDuration = \G::LoadTranslation("ID_NOT_FINISHED"); + $appDelegationDuration = G::LoadTranslation("ID_NOT_FINISHED"); if (!empty($row2["DEL_FINISH_DATE"]) && !empty($row2["DEL_INIT_DATE"])) { $t = strtotime($row2["DEL_FINISH_DATE"]) - strtotime($row2["DEL_INIT_DATE"]); @@ -2159,21 +2237,21 @@ class Cases $h = (int)($h); $m = (int)($m); - $appDelegationDuration = $h . " " . (($h == 1)? \G::LoadTranslation("ID_HOUR") : \G::LoadTranslation("ID_HOURS")); - $appDelegationDuration = $appDelegationDuration . " " . $m . " " . (($m == 1)? \G::LoadTranslation("ID_MINUTE") : \G::LoadTranslation("ID_MINUTES")); - $appDelegationDuration = $appDelegationDuration . " " . $s . " " . (($s == 1)? \G::LoadTranslation("ID_SECOND") : \G::LoadTranslation("ID_SECONDS")); + $appDelegationDuration = $h . " " . (($h == 1) ? G::LoadTranslation("ID_HOUR") : G::LoadTranslation("ID_HOURS")); + $appDelegationDuration = $appDelegationDuration . " " . $m . " " . (($m == 1) ? G::LoadTranslation("ID_MINUTE") : G::LoadTranslation("ID_MINUTES")); + $appDelegationDuration = $appDelegationDuration . " " . $s . " " . (($s == 1) ? G::LoadTranslation("ID_SECOND") : G::LoadTranslation("ID_SECONDS")); } $arrayAppDelegation[] = array( - $this->getFieldNameByFormatFieldName("DEL_INDEX") => (int)($row2["DEL_INDEX"]), - $this->getFieldNameByFormatFieldName("DEL_INIT_DATE") => $arrayAppDelegationDate["DEL_INIT_DATE"]["dateFormated"], + $this->getFieldNameByFormatFieldName("DEL_INDEX") => (int)($row2["DEL_INDEX"]), + $this->getFieldNameByFormatFieldName("DEL_INIT_DATE") => $arrayAppDelegationDate["DEL_INIT_DATE"]["dateFormated"], $this->getFieldNameByFormatFieldName("DEL_TASK_DUE_DATE") => $arrayAppDelegationDate["DEL_TASK_DUE_DATE"]["dateFormated"], - $this->getFieldNameByFormatFieldName("DEL_FINISH_DATE") => $arrayAppDelegationDate["DEL_FINISH_DATE"]["dateFormated"], - $this->getFieldNameByFormatFieldName("DEL_DURATION") => $appDelegationDuration, - $this->getFieldNameByFormatFieldName("USR_UID") => $row2["USR_UID"], - $this->getFieldNameByFormatFieldName("USR_USERNAME") => $row2["USR_USERNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $row2["USR_FIRSTNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $row2["USR_LASTNAME"] . "" + $this->getFieldNameByFormatFieldName("DEL_FINISH_DATE") => $arrayAppDelegationDate["DEL_FINISH_DATE"]["dateFormated"], + $this->getFieldNameByFormatFieldName("DEL_DURATION") => $appDelegationDuration, + $this->getFieldNameByFormatFieldName("USR_UID") => $row2["USR_UID"], + $this->getFieldNameByFormatFieldName("USR_USERNAME") => $row2["USR_USERNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $row2["USR_FIRSTNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $row2["USR_LASTNAME"] . "" ); } @@ -2181,30 +2259,30 @@ class Cases $status = ""; //$criteria2 - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addAsColumn("CANT", "COUNT(" . \AppDelegationPeer::APP_UID . ")"); - $criteria2->addAsColumn("FINISH", "MIN(" . \AppDelegationPeer::DEL_FINISH_DATE . ")"); - $criteria2->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria2->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); + $criteria2->addAsColumn("CANT", "COUNT(" . AppDelegationPeer::APP_UID . ")"); + $criteria2->addAsColumn("FINISH", "MIN(" . AppDelegationPeer::DEL_FINISH_DATE . ")"); + $criteria2->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria2->add(AppDelegationPeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); - $rsCriteria2 = \AppDelegationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = AppDelegationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria2->next(); $row2 = $rsCriteria2->getRow(); //$criteria3 - $criteria3 = new \Criteria("workflow"); + $criteria3 = new Criteria("workflow"); - $criteria3->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); - $criteria3->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria3->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); - $criteria3->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); + $criteria3->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); + $criteria3->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria3->add(AppDelegationPeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); + $criteria3->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $rsCriteria3 = \AppDelegationPeer::doSelectRS($criteria3); - $rsCriteria3->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria3 = AppDelegationPeer::doSelectRS($criteria3); + $rsCriteria3->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria3->next(); @@ -2273,11 +2351,10 @@ class Cases Validator::appUid($app_uid, '$app_uid'); Validator::isInteger($del_index, '$del_index'); - $oCase = new \Cases(); + $oCase = new ClassesCases(); $aField = $oCase->loadCase($app_uid, $del_index); - $tas_uid = $aField["TAS_UID"]; + $tas_uid = $aField["TAS_UID"]; - $task = new \Tasks(); $aField["APP_DATA"] = $oCase->executeTriggers($tas_uid, $obj_type, $obj_uid, "AFTER", $aField["APP_DATA"]); $aField = $oCase->updateCase($app_uid, $aField); } @@ -2286,7 +2363,7 @@ class Cases * Get Steps evaluate * * @access public - * @param string $app_uid, Uid for case + * @param string $app_uid , Uid for case * @param int $del_index , Index for case * @return array * @@ -2298,10 +2375,10 @@ class Cases Validator::appUid($app_uid, '$app_uid'); Validator::isInteger($del_index, '$del_index'); - $oCase = new \Cases(); + $oCase = new ClassesCases(); $aCaseField = $oCase->loadCase($app_uid, $del_index); - $tas_uid = $aCaseField["TAS_UID"]; - $pro_uid = $aCaseField["PRO_UID"]; + $tas_uid = $aCaseField["TAS_UID"]; + $pro_uid = $aCaseField["PRO_UID"]; $oApplication = new Applications(); $aField = $oApplication->getSteps($app_uid, $del_index, $tas_uid, $pro_uid); @@ -2317,7 +2394,11 @@ class Cases if ($rsCriteria->next()) { $record = $rsCriteria->getRow(); - $arrayData = ['APP_STATUS' => $record['APP_STATUS'], 'DEL_INDEX' => [], 'PRO_UID' => $record['PRO_UID']]; + $arrayData = [ + 'APP_STATUS' => $record['APP_STATUS'], + 'DEL_INDEX' => [], + 'PRO_UID' => $record['PRO_UID'] + ]; $arrayData['DEL_INDEX'][] = $record['DEL_INDEX']; while ($rsCriteria->next()) { @@ -2338,8 +2419,8 @@ class Cases * Get status info Case * * @param string $applicationUid Unique id of Case - * @param int $delIndex Delegation index - * @param string $userUid Unique id of User + * @param int $delIndex Delegation index + * @param string $userUid Unique id of User * * @return array Return an array with status info Case, array empty otherwise */ @@ -2347,36 +2428,37 @@ class Cases { try { //Verify data - $this->throwExceptionIfNotExistsCase($applicationUid, $delIndex, $this->getFieldNameByFormatFieldName("APP_UID")); + $this->throwExceptionIfNotExistsCase($applicationUid, $delIndex, + $this->getFieldNameByFormatFieldName("APP_UID")); //Get data //Status is PAUSED - $delimiter = \DBAdapter::getStringDelimiter(); + $delimiter = DBAdapter::getStringDelimiter(); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); $criteria->setDistinct(); $criteria->addSelectColumn($delimiter . 'PAUSED' . $delimiter . ' AS APP_STATUS'); - $criteria->addSelectColumn(\AppDelayPeer::APP_DEL_INDEX . " AS DEL_INDEX"); - $criteria->addSelectColumn(\AppDelayPeer::PRO_UID); + $criteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX . " AS DEL_INDEX"); + $criteria->addSelectColumn(AppDelayPeer::PRO_UID); - $criteria->add(\AppDelayPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria->add(\AppDelayPeer::APP_TYPE, "PAUSE", \Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_TYPE, "PAUSE", Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelayPeer::APP_DISABLE_ACTION_USER, null, \Criteria::ISNULL)->addOr( - $criteria->getNewCriterion(\AppDelayPeer::APP_DISABLE_ACTION_USER, 0, \Criteria::EQUAL)) + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)->addOr( + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0, Criteria::EQUAL)) ); if ($delIndex != 0) { - $criteria->add(\AppDelayPeer::APP_DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_DEL_INDEX, $delIndex, Criteria::EQUAL); } if ($userUid != "") { - $criteria->add(\AppDelayPeer::APP_DELEGATION_USER, $userUid, \Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_DELEGATION_USER, $userUid, Criteria::EQUAL); } - $rsCriteria = \AppDelayPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = AppDelayPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria); @@ -2386,30 +2468,30 @@ class Cases //Status is UNASSIGNED if ($userUid != '') { - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); $criteria = $appCacheView->getUnassignedListCriteria($userUid); } else { - $criteria = new \Criteria('workflow'); + $criteria = new Criteria('workflow'); - $criteria->add(\AppCacheViewPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); - $criteria->add(\AppCacheViewPeer::USR_UID, '', \Criteria::EQUAL); + $criteria->add(AppCacheViewPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $criteria->add(AppCacheViewPeer::USR_UID, '', Criteria::EQUAL); } $criteria->setDistinct(); $criteria->clearSelectColumns(); $criteria->addSelectColumn($delimiter . 'UNASSIGNED' . $delimiter . ' AS APP_STATUS'); - $criteria->addSelectColumn(\AppCacheViewPeer::DEL_INDEX); - $criteria->addSelectColumn(\AppCacheViewPeer::PRO_UID); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX); + $criteria->addSelectColumn(AppCacheViewPeer::PRO_UID); - $criteria->add(\AppCacheViewPeer::APP_UID, $applicationUid, \Criteria::EQUAL); + $criteria->add(AppCacheViewPeer::APP_UID, $applicationUid, Criteria::EQUAL); if ($delIndex != 0) { - $criteria->add(\AppCacheViewPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppCacheViewPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); } - $rsCriteria = \AppCacheViewPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = AppCacheViewPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria); @@ -2418,40 +2500,44 @@ class Cases } //Status is TO_DO, DRAFT - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); $criteria->setDistinct(); - $criteria->addSelectColumn(\ApplicationPeer::APP_STATUS); - $criteria->addSelectColumn(\ApplicationPeer::PRO_UID); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); + $criteria->addSelectColumn(ApplicationPeer::PRO_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $arrayCondition = array(); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, \AppDelegationPeer::APP_UID, \Criteria::EQUAL); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, \AppThreadPeer::APP_UID, \Criteria::EQUAL); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, $delimiter . $applicationUid . $delimiter, \Criteria::EQUAL); - $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + $arrayCondition[] = array(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array(ApplicationPeer::APP_UID, AppThreadPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array( + ApplicationPeer::APP_UID, + $delimiter . $applicationUid . $delimiter, + Criteria::EQUAL + ); + $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN); $criteria->add( - $criteria->getNewCriterion(\ApplicationPeer::APP_STATUS, "TO_DO", \Criteria::EQUAL)->addAnd( - $criteria->getNewCriterion(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL))->addAnd( - $criteria->getNewCriterion(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( - $criteria->getNewCriterion(\AppThreadPeer::APP_THREAD_STATUS, "OPEN")) + $criteria->getNewCriterion(ApplicationPeer::APP_STATUS, "TO_DO", Criteria::EQUAL)->addAnd( + $criteria->getNewCriterion(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL))->addAnd( + $criteria->getNewCriterion(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( + $criteria->getNewCriterion(AppThreadPeer::APP_THREAD_STATUS, "OPEN")) )->addOr( - $criteria->getNewCriterion(\ApplicationPeer::APP_STATUS, "DRAFT", \Criteria::EQUAL)->addAnd( - $criteria->getNewCriterion(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( - $criteria->getNewCriterion(\AppThreadPeer::APP_THREAD_STATUS, "OPEN")) + $criteria->getNewCriterion(ApplicationPeer::APP_STATUS, "DRAFT", Criteria::EQUAL)->addAnd( + $criteria->getNewCriterion(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( + $criteria->getNewCriterion(AppThreadPeer::APP_THREAD_STATUS, "OPEN")) ); if ($delIndex != 0) { - $criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); } if ($userUid != "") { - $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL); } - $rsCriteria = \ApplicationPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = ApplicationPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria); @@ -2460,34 +2546,38 @@ class Cases } //Status is CANCELLED, COMPLETED - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\ApplicationPeer::APP_STATUS); - $criteria->addSelectColumn(\ApplicationPeer::PRO_UID); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); + $criteria->addSelectColumn(ApplicationPeer::PRO_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $arrayCondition = array(); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, \AppDelegationPeer::APP_UID, \Criteria::EQUAL); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, $delimiter . $applicationUid . $delimiter, \Criteria::EQUAL); - $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + $arrayCondition[] = array(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array( + ApplicationPeer::APP_UID, + $delimiter . $applicationUid . $delimiter, + Criteria::EQUAL + ); + $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN); if ($delIndex != 0) { - $criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); } if ($userUid != "") { - $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL); } $criteria2 = clone $criteria; $criteria2->setDistinct(); - $criteria2->add(\ApplicationPeer::APP_STATUS, ['CANCELLED', 'COMPLETED'], \Criteria::IN); - $criteria2->add(\AppDelegationPeer::DEL_LAST_INDEX, 1, \Criteria::EQUAL); + $criteria2->add(ApplicationPeer::APP_STATUS, ['CANCELLED', 'COMPLETED'], Criteria::IN); + $criteria2->add(AppDelegationPeer::DEL_LAST_INDEX, 1, Criteria::EQUAL); - $rsCriteria2 = \ApplicationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = ApplicationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria2); @@ -2501,12 +2591,12 @@ class Cases $criteria2->setDistinct(); $criteria2->clearSelectColumns(); $criteria2->addSelectColumn($delimiter . 'PARTICIPATED' . $delimiter . ' AS APP_STATUS'); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria2->addSelectColumn(\ApplicationPeer::APP_UID); - $criteria2->addSelectColumn(\ApplicationPeer::PRO_UID); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria2->addSelectColumn(ApplicationPeer::APP_UID); + $criteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $rsCriteria2 = \ApplicationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = ApplicationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria2); @@ -2534,7 +2624,7 @@ class Cases try { Validator::usrUid($usrUid, '$usr_uid'); - $case = new \Cases(); + $case = new ClassesCases(); $response = $case->getProcessListStartCase($usrUid, $typeView); return $response; @@ -2556,27 +2646,27 @@ class Cases try { Validator::usrUid($usrUid, '$usr_uid'); - $user = new \Users(); + $user = new ModelUsers(); $fields = $user->load($usrUid); $bookmark = empty($fields['USR_BOOKMARK_START_CASES']) ? array() : unserialize($fields['USR_BOOKMARK_START_CASES']); //Getting group id and adding the user id - $group = new \Groups(); + $group = new Groups(); $groups = $group->getActiveGroupsForAnUser($usrUid); $groups[] = $usrUid; - $c = new \Criteria(); + $c = new Criteria(); $c->clearSelectColumns(); - $c->addSelectColumn(\TaskPeer::TAS_UID); - $c->addSelectColumn(\TaskPeer::TAS_TITLE); - $c->addSelectColumn(\TaskPeer::PRO_UID); - $c->addSelectColumn(\ProcessPeer::PRO_TITLE); - $c->addJoin(\TaskPeer::PRO_UID, \ProcessPeer::PRO_UID, \Criteria::LEFT_JOIN); - $c->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); - $c->add(\ProcessPeer::PRO_STATUS, 'ACTIVE'); - $c->add(\TaskPeer::TAS_START, 'TRUE'); - $c->add(\TaskUserPeer::USR_UID, $groups, \Criteria::IN); - $c->add(\TaskPeer::TAS_UID, $bookmark, \Criteria::IN); + $c->addSelectColumn(TaskPeer::TAS_UID); + $c->addSelectColumn(TaskPeer::TAS_TITLE); + $c->addSelectColumn(TaskPeer::PRO_UID); + $c->addSelectColumn(ProcessPeer::PRO_TITLE); + $c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); + $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); + $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); + $c->add(TaskPeer::TAS_START, 'TRUE'); + $c->add(TaskUserPeer::USR_UID, $groups, Criteria::IN); + $c->add(TaskPeer::TAS_UID, $bookmark, Criteria::IN); if ($typeView == 'category') { $c->addAsColumn('PRO_CATEGORY', 'PCS.PRO_CATEGORY'); @@ -2584,16 +2674,16 @@ class Cases $c->addAlias('PCS', 'PROCESS'); $c->addAlias('PCSCAT', 'PROCESS_CATEGORY'); $aConditions = array(); - $aConditions[] = array(\TaskPeer::PRO_UID, 'PCS.PRO_UID'); - $c->addJoinMC( $aConditions, \Criteria::LEFT_JOIN ); + $aConditions[] = array(TaskPeer::PRO_UID, 'PCS.PRO_UID'); + $c->addJoinMC($aConditions, Criteria::LEFT_JOIN); $aConditions = array(); $aConditions[] = array('PCS.PRO_CATEGORY', 'PCSCAT.CATEGORY_UID'); - $c->addJoinMC( $aConditions, \Criteria::LEFT_JOIN ); + $c->addJoinMC($aConditions, Criteria::LEFT_JOIN); } $c->setDistinct(); - $rs = \TaskPeer::doSelectRS($c); + $rs = TaskPeer::doSelectRS($c); - $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $processList = array(); while ($rs->next()) { $row = $rs->getRow(); @@ -2628,143 +2718,158 @@ class Cases /** * Get Users to reassign * - * @param string $userUid Unique id of User (User logged) - * @param string $taskUid Unique id of Task - * @param array $arrayFilterData Data of the filters - * @param string $sortField Field name to sort - * @param string $sortDir Direction of sorting (ASC, DESC) - * @param int $start Start - * @param int $limit Limit + * @param string $userUid Unique id of User (User logged) + * @param string $taskUid Unique id of Task + * @param array $arrayFilterData Data of the filters + * @param string $sortField Field name to sort + * @param string $sortDir Direction of sorting (ASC, DESC) + * @param int $start Start + * @param int $limit Limit * * @return array Return Users to reassign */ - public function getUsersToReassign($userUid, $taskUid, $arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null) - { + public function getUsersToReassign( + $userUid, + $taskUid, + $arrayFilterData = null, + $sortField = null, + $sortDir = null, + $start = null, + $limit = null + ) { try { $arrayUser = []; $numRecTotal = 0; //Set variables - $task = \TaskPeer::retrieveByPK($taskUid); + $task = TaskPeer::retrieveByPK($taskUid); $processUid = $task->getProUid(); - $user = new \ProcessMaker\BusinessModel\User(); - $task = new \Tasks(); - $group = new \Groups(); + $user = new BmUser(); + $task = new ClassesTasks(); + $group = new Groups(); //Set variables $filterName = 'filter'; if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) { $arrayAux = [ - '' => 'filter', - 'LEFT' => 'lfilter', + '' => 'filter', + 'LEFT' => 'lfilter', 'RIGHT' => 'rfilter' ]; - $filterName = $arrayAux[(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : '']; + $filterName = $arrayAux[(isset($arrayFilterData['filterOption'])) ? $arrayFilterData['filterOption'] : '']; } //Get data if (!is_null($limit) && $limit . '' == '0') { //Return return [ - 'total' => $numRecTotal, - 'start' => (int)((!is_null($start))? $start : 0), - 'limit' => (int)((!is_null($limit))? $limit : 0), - $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']))? $arrayFilterData['filter'] : '', - 'data' => $arrayUser + 'total' => $numRecTotal, + 'start' => (int)((!is_null($start)) ? $start : 0), + 'limit' => (int)((!is_null($limit)) ? $limit : 0), + $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) ? $arrayFilterData['filter'] : '', + 'data' => $arrayUser ]; } //Set variables - $processSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $processSupervisor = new BmProcessSupervisor(); - $arrayResult = $processSupervisor->getProcessSupervisors($processUid, 'ASSIGNED', null, null, null, 'group'); + $arrayResult = $processSupervisor->getProcessSupervisors($processUid, 'ASSIGNED', null, null, null, + 'group'); $arrayGroupUid = array_merge( - array_map(function ($value) { return $value['GRP_UID']; }, $task->getGroupsOfTask($taskUid, 1)), //Groups - array_map(function ($value) { return $value['GRP_UID']; }, $task->getGroupsOfTask($taskUid, 2)), //AdHoc Groups - array_map(function ($value) { return $value['grp_uid']; }, $arrayResult['data']) //ProcessSupervisor Groups + array_map(function ($value) { + return $value['GRP_UID']; + }, $task->getGroupsOfTask($taskUid, 1)), //Groups + array_map(function ($value) { + return $value['GRP_UID']; + }, $task->getGroupsOfTask($taskUid, 2)), //AdHoc Groups + array_map(function ($value) { + return $value['grp_uid']; + }, $arrayResult['data']) //ProcessSupervisor Groups ); $sqlTaskUser = ' - SELECT ' . \TaskUserPeer::USR_UID . ' - FROM ' . \TaskUserPeer::TABLE_NAME . ' - WHERE ' . \TaskUserPeer::TAS_UID . ' = \'%s\' AND - ' . \TaskUserPeer::TU_TYPE . ' IN (1, 2) AND - ' . \TaskUserPeer::TU_RELATION . ' = 1 + SELECT ' . TaskUserPeer::USR_UID . ' + FROM ' . TaskUserPeer::TABLE_NAME . ' + WHERE ' . TaskUserPeer::TAS_UID . ' = \'%s\' AND + ' . TaskUserPeer::TU_TYPE . ' IN (1, 2) AND + ' . TaskUserPeer::TU_RELATION . ' = 1 '; $sqlGroupUser = ' - SELECT ' . \GroupUserPeer::USR_UID . ' - FROM ' . \GroupUserPeer::TABLE_NAME . ' - WHERE ' . \GroupUserPeer::GRP_UID . ' IN (%s) + SELECT ' . GroupUserPeer::USR_UID . ' + FROM ' . GroupUserPeer::TABLE_NAME . ' + WHERE ' . GroupUserPeer::GRP_UID . ' IN (%s) '; $sqlProcessSupervisor = ' - SELECT ' . \ProcessUserPeer::USR_UID . ' - FROM ' . \ProcessUserPeer::TABLE_NAME . ' - WHERE ' . \ProcessUserPeer::PRO_UID . ' = \'%s\' AND - ' . \ProcessUserPeer::PU_TYPE . ' = \'%s\' + SELECT ' . ProcessUserPeer::USR_UID . ' + FROM ' . ProcessUserPeer::TABLE_NAME . ' + WHERE ' . ProcessUserPeer::PRO_UID . ' = \'%s\' AND + ' . ProcessUserPeer::PU_TYPE . ' = \'%s\' '; $sqlUserToReassign = '(' . sprintf($sqlTaskUser, $taskUid) . ')'; if (!empty($arrayGroupUid)) { - $sqlUserToReassign .= ' UNION (' . sprintf($sqlGroupUser, '\'' . implode('\', \'', $arrayGroupUid) . '\'') . ')'; + $sqlUserToReassign .= ' UNION (' . sprintf($sqlGroupUser, + '\'' . implode('\', \'', $arrayGroupUid) . '\'') . ')'; } $sqlUserToReassign .= ' UNION (' . sprintf($sqlProcessSupervisor, $processUid, 'SUPERVISOR') . ')'; //Query - $criteria = new \Criteria('workflow'); + $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(\UsersPeer::USR_UID); - $criteria->addSelectColumn(\UsersPeer::USR_USERNAME); - $criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(UsersPeer::USR_UID); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); $criteria->addAlias('USER_TO_REASSIGN', '(' . $sqlUserToReassign . ')'); - $criteria->addJoin(\UsersPeer::USR_UID, 'USER_TO_REASSIGN.USR_UID', \Criteria::INNER_JOIN); + $criteria->addJoin(UsersPeer::USR_UID, 'USER_TO_REASSIGN.USR_UID', Criteria::INNER_JOIN); if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']) && trim($arrayFilterData['filter']) != '') { $arraySearch = [ - '' => '%' . $arrayFilterData['filter'] . '%', - 'LEFT' => $arrayFilterData['filter'] . '%', + '' => '%' . $arrayFilterData['filter'] . '%', + 'LEFT' => $arrayFilterData['filter'] . '%', 'RIGHT' => '%' . $arrayFilterData['filter'] ]; - $search = $arraySearch[(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : '']; + $search = $arraySearch[(isset($arrayFilterData['filterOption'])) ? $arrayFilterData['filterOption'] : '']; $criteria->add( - $criteria->getNewCriterion(\UsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr( - $criteria->getNewCriterion(\UsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE))->addOr( - $criteria->getNewCriterion(\UsersPeer::USR_LASTNAME, $search, \Criteria::LIKE)) + $criteria->getNewCriterion(UsersPeer::USR_USERNAME, $search, Criteria::LIKE)->addOr( + $criteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, $search, Criteria::LIKE))->addOr( + $criteria->getNewCriterion(UsersPeer::USR_LASTNAME, $search, Criteria::LIKE)) ); } - $criteria->add(\UsersPeer::USR_STATUS, 'ACTIVE', \Criteria::EQUAL); + $criteria->add(UsersPeer::USR_STATUS, 'ACTIVE', Criteria::EQUAL); if (!$user->checkPermission($userUid, 'PM_SUPERVISOR')) { - $criteria->add(\UsersPeer::USR_UID, $userUid, \Criteria::NOT_EQUAL); + $criteria->add(UsersPeer::USR_UID, $userUid, Criteria::NOT_EQUAL); } //Number records total - $numRecTotal = \UsersPeer::doCount($criteria); + $numRecTotal = UsersPeer::doCount($criteria); //Query - $conf = new \Configurations(); - $sortFieldDefault = \UsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable(); + $conf = new Configurations(); + $sortFieldDefault = UsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable(); if (!is_null($sortField) && trim($sortField) != '') { $sortField = strtoupper($sortField); - if (in_array(\UsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) { - $sortField = \UsersPeer::TABLE_NAME . '.' . $sortField; + if (in_array(UsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) { + $sortField = UsersPeer::TABLE_NAME . '.' . $sortField; } else { $sortField = $sortFieldDefault; } @@ -2786,8 +2891,8 @@ class Cases $criteria->setLimit((int)($limit)); } - $rsCriteria = \UsersPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = UsersPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -2797,11 +2902,11 @@ class Cases //Return return [ - 'total' => $numRecTotal, - 'start' => (int)((!is_null($start))? $start : 0), - 'limit' => (int)((!is_null($limit))? $limit : 0), - $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']))? $arrayFilterData['filter'] : '', - 'data' => $arrayUser + 'total' => $numRecTotal, + 'start' => (int)((!is_null($start)) ? $start : 0), + 'limit' => (int)((!is_null($limit)) ? $limit : 0), + $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) ? $arrayFilterData['filter'] : '', + 'data' => $arrayUser ]; } catch (Exception $e) { throw $e; @@ -2828,12 +2933,13 @@ class Cases } $dataResponse = $data; $casesToReassign = $data['cases']; - $oCases = new \Cases(); + $oCases = new ClassesCases(); foreach ($casesToReassign as $key => $val) { - $appDelegation = \AppDelegationPeer::retrieveByPK($val['APP_UID'], $val['DEL_INDEX']); + $appDelegation = AppDelegationPeer::retrieveByPK($val['APP_UID'], $val['DEL_INDEX']); $existDelegation = $this->validateReassignData($appDelegation, $val, $data, 'DELEGATION_NOT_EXISTS'); if ($existDelegation) { - $existDelegation = $this->validateReassignData($appDelegation, $val, $data, 'USER_NOT_ASSIGNED_TO_TASK'); + $existDelegation = $this->validateReassignData($appDelegation, $val, $data, + 'USER_NOT_ASSIGNED_TO_TASK'); if ($existDelegation) { $usrUid = ''; if (array_key_exists('USR_UID', $val)) { @@ -2842,16 +2948,19 @@ class Cases } } if ($usrUid == '') { - $fields = $appDelegation->toArray(\BasePeer::TYPE_FIELDNAME); + $fields = $appDelegation->toArray(BasePeer::TYPE_FIELDNAME); $usrUid = $fields['USR_UID']; } //Will be not able reassign a case when is paused - $flagPaused = $this->validateReassignData($appDelegation, $val, $data, 'ID_REASSIGNMENT_PAUSED_ERROR'); + $flagPaused = $this->validateReassignData($appDelegation, $val, $data, + 'ID_REASSIGNMENT_PAUSED_ERROR'); //Current users of OPEN DEL_INDEX thread - $flagSameUser = $this->validateReassignData($appDelegation, $val, $data, 'REASSIGNMENT_TO_THE_SAME_USER'); + $flagSameUser = $this->validateReassignData($appDelegation, $val, $data, + 'REASSIGNMENT_TO_THE_SAME_USER'); //reassign case if ($flagPaused && $flagSameUser) { - $reassigned = $oCases->reassignCase($val['APP_UID'], $val['DEL_INDEX'], $usrUid, $data['usr_uid_target']); + $reassigned = $oCases->reassignCase($val['APP_UID'], $val['DEL_INDEX'], $usrUid, + $data['usr_uid_target']); $result = $reassigned ? 1 : 0; $this->messageResponse = [ 'APP_UID' => $val['APP_UID'], @@ -2865,6 +2974,7 @@ class Cases $dataResponse['cases'][$key] = $this->messageResponse; } unset($dataResponse['usr_uid_target']); + return G::json_encode($dataResponse); } @@ -2891,8 +3001,8 @@ class Cases } break; case 'USER_NOT_ASSIGNED_TO_TASK': - $task = new \ProcessMaker\BusinessModel\Task(); - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $task = new BmTask(); + $supervisor = new BmProcessSupervisor(); $taskUid = $appDelegation->getTasUid(); $flagBoolean = $task->checkUserOrGroupAssignedTask($taskUid, $data['usr_uid_target']); $flagps = $supervisor->isUserProcessSupervisor($appDelegation->getProUid(), $data['usr_uid_target']); @@ -2908,12 +3018,12 @@ class Cases } break; case 'ID_REASSIGNMENT_PAUSED_ERROR': - if (\AppDelay::isPaused($value['APP_UID'], $value['DEL_INDEX'])) { + if (AppDelay::isPaused($value['APP_UID'], $value['DEL_INDEX'])) { $this->messageResponse = [ 'APP_UID' => $value['APP_UID'], 'DEL_INDEX' => $value['DEL_INDEX'], 'RESULT' => 0, - 'STATUS' => \G::LoadTranslation('ID_REASSIGNMENT_PAUSED_ERROR') + 'STATUS' => G::LoadTranslation('ID_REASSIGNMENT_PAUSED_ERROR') ]; $return = false; } @@ -2938,12 +3048,13 @@ class Cases 'APP_UID' => $value['APP_UID'], 'DEL_INDEX' => $value['DEL_INDEX'], 'RESULT' => 0, - 'STATUS' => \G::LoadTranslation('ID_REASSIGNMENT_ERROR') + 'STATUS' => G::LoadTranslation('ID_REASSIGNMENT_ERROR') ]; $return = false; } break; } + return $return; } @@ -2957,37 +3068,36 @@ class Cases */ public function caseAlreadyRouted($app_uid, $del_index, $usr_uid = '') { - $c = new \Criteria('workflow'); - $c->add(\AppDelegationPeer::APP_UID, $app_uid); - $c->add(\AppDelegationPeer::DEL_INDEX, $del_index); + $c = new Criteria('workflow'); + $c->add(AppDelegationPeer::APP_UID, $app_uid); + $c->add(AppDelegationPeer::DEL_INDEX, $del_index); if (!empty($usr_uid)) { - $c->add(\AppDelegationPeer::USR_UID, $usr_uid); + $c->add(AppDelegationPeer::USR_UID, $usr_uid); } - $c->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); - return !(boolean) \AppDelegationPeer::doCount($c); + $c->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + + return !(boolean)AppDelegationPeer::doCount($c); } public function checkUserHasPermissionsOrSupervisor($userUid, $applicationUid, $dynaformUid) { $arrayApplicationData = $this->getApplicationRecordByPk($applicationUid, [], false); //Check whether the process supervisor - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $supervisor = new BmProcessSupervisor(); $userAccess = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $userUid); if (!empty($dynaformUid)) { //Check if have objects assigned (Supervisor) - $cases = new \Cases(); - $resultDynaForm = $cases->getAllDynaformsStepsToRevise($applicationUid); - $flagSupervisors = false; - while ($resultDynaForm->next()) { - $row = $resultDynaForm->getRow(); - if ($row["STEP_UID_OBJ"] = $dynaformUid) { - $flagSupervisors = true; - break; - } - } + $flagSupervisors = $this->isSupervisorFromForm( + $userUid, + $applicationUid, + $dynaformUid, + $arrayApplicationData['PRO_UID'] + ); + //Check if have permissions VIEW - $case = new \Cases(); - $arrayAllObjectsFrom = $case->getAllObjectsFrom($arrayApplicationData['PRO_UID'], $applicationUid, '', $userUid, 'VIEW', 0); + $case = new ClassesCases(); + $arrayAllObjectsFrom = $case->getAllObjectsFrom($arrayApplicationData['PRO_UID'], $applicationUid, '', + $userUid, 'VIEW', 0); $flagPermissionsVIEW = false; if (array_key_exists('DYNAFORMS', $arrayAllObjectsFrom) && !empty($arrayAllObjectsFrom['DYNAFORMS']) @@ -2999,7 +3109,8 @@ class Cases } } //Check if have permissions BLOCK - $arrayAllObjectsFrom = $case->getAllObjectsFrom($arrayApplicationData['PRO_UID'], $applicationUid, '', $userUid, 'BLOCK', 0); + $arrayAllObjectsFrom = $case->getAllObjectsFrom($arrayApplicationData['PRO_UID'], $applicationUid, '', + $userUid, 'BLOCK', 0); $flagPermissionsBLOCK = false; if (array_key_exists('DYNAFORMS', $arrayAllObjectsFrom) && !empty($arrayAllObjectsFrom['DYNAFORMS']) @@ -3012,6 +3123,7 @@ class Cases } //check case Tracker $flagCaseTracker = $case->getAllObjectsTrackerDynaform($arrayApplicationData['PRO_UID'], $dynaformUid); + return ($flagSupervisors && $userAccess) || $flagPermissionsVIEW || $flagPermissionsBLOCK || $flagCaseTracker; } else { $arrayResult = $this->getStatusInfo($applicationUid, 0, $userUid); @@ -3019,6 +3131,7 @@ class Cases if ($arrayResult || $userAccess) { $flagParticipated = true; } + return $flagParticipated; } } @@ -3026,16 +3139,21 @@ class Cases /** * Delete MultipleFile in Case data * - * @param array $arrayApplicationData Case data - * @param string $variable1 Variable1 - * @param string $variable2 Variable2 - * @param string $type Type (NORMAL, GRID) - * @param array $arrayDocumentToDelete Document to delete + * @param array $arrayApplicationData Case data + * @param string $variable1 Variable1 + * @param string $variable2 Variable2 + * @param string $type Type (NORMAL, GRID) + * @param array $arrayDocumentToDelete Document to delete * * @return array Returns array with Case data updated */ - private function __applicationDataDeleteMultipleFile(array $arrayApplicationData, $variable1, $variable2, $type, array $arrayDocumentToDelete) - { + private function __applicationDataDeleteMultipleFile( + array $arrayApplicationData, + $variable1, + $variable2, + $type, + array $arrayDocumentToDelete + ) { if (array_key_exists($variable1, $arrayApplicationData) && is_array($arrayApplicationData[$variable1]) && !empty($arrayApplicationData[$variable1]) ) { @@ -3091,15 +3209,15 @@ class Cases /** * Delete MultipleFile * - * @param string $applicationUid Unique id of Case - * @param array $arrayVariableDocumentToDelete Variable with Documents to delete + * @param string $applicationUid Unique id of Case + * @param array $arrayVariableDocumentToDelete Variable with Documents to delete * * @return void */ public function deleteMultipleFile($applicationUid, array $arrayVariableDocumentToDelete) { - $case = new \Cases(); - $appDocument = new \AppDocument(); + $case = new ClassesCases(); + $appDocument = new AppDocument(); $arrayApplicationData = $this->getApplicationRecordByPk($applicationUid, [], false); $arrayApplicationData['APP_DATA'] = $case->unserializeData($arrayApplicationData['APP_DATA']); @@ -3166,7 +3284,7 @@ class Cases //The observations suggested by 'pull request' approver are applied (please see pull request). foreach ($arrayVariableDocumentToDelete as $key => $value) { if (isset($value['appDocUid'])) { - $appDocument->remove($value['appDocUid'], (int) (isset($value['version']) ? $value['version'] : 1)); + $appDocument->remove($value['appDocUid'], (int)(isset($value['version']) ? $value['version'] : 1)); if (is_string($arrayApplicationData['APP_DATA'][$key])) { try { $files = G::json_decode($arrayApplicationData['APP_DATA'][$key]); @@ -3177,7 +3295,8 @@ class Cases } $arrayApplicationData['APP_DATA'][$key] = G::json_encode($files); } catch (Exception $e) { - Bootstrap::registerMonolog('DeleteFile', 400, $e->getMessage(), $value, SYS_SYS, 'processmaker.log'); + Bootstrap::registerMonolog('DeleteFile', 400, $e->getMessage(), $value, SYS_SYS, + 'processmaker.log'); } } $flagDelete = true; @@ -3199,7 +3318,13 @@ class Cases * @param array $objectPermissions * @return array Returns array with all access */ - public function userAuthorization($usrUid, $proUid, $appUid, $rolesPermissions = array(), $objectPermissions = array()) { + public function userAuthorization( + $usrUid, + $proUid, + $appUid, + $rolesPermissions = array(), + $objectPermissions = array() + ) { $arrayAccess = array(); //User has participated @@ -3208,7 +3333,7 @@ class Cases $arrayAccess['participated'] = (count($aParticipated) == 0) ? false : true; //User is supervisor - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $supervisor = new BmProcessSupervisor(); $isSupervisor = $supervisor->isUserProcessSupervisor($proUid, $usrUid); $arrayAccess['supervisor'] = ($isSupervisor) ? true : false; @@ -3222,7 +3347,7 @@ class Cases //Object Permissions if (count($objectPermissions) > 0) { - $oCase = new \Cases(); + $oCase = new ClassesCases(); foreach ($objectPermissions as $key => $value) { $resPermission = $oCase->getAllObjectsFrom($proUid, $appUid, '', $usrUid, $value); if (isset($resPermission[$key])) { @@ -3274,13 +3399,13 @@ class Cases $result['USR_USERNAME'] = ''; global $RBAC; if (isset($RBAC) && isset($RBAC->aUserInfo)) { - $result['USER_LOGGED'] = $RBAC->aUserInfo['USER_INFO']['USR_UID']; - $result['USR_USERNAME'] = $RBAC->aUserInfo['USER_INFO']['USR_USERNAME']; + $result['USER_LOGGED'] = isset($RBAC->aUserInfo['USER_INFO']['USR_UID']) ? $RBAC->aUserInfo['USER_INFO']['USR_UID'] : ''; + $result['USR_USERNAME'] = isset($RBAC->aUserInfo['USER_INFO']['USR_USERNAME']) ? $RBAC->aUserInfo['USER_INFO']['USR_USERNAME'] : ''; } if (empty($result['USER_LOGGED'])) { $result['USER_LOGGED'] = Server::getUserId(); if (!empty($result['USER_LOGGED'])) { - $oUserLogged = new Users(); + $oUserLogged = new ModelUsers(); $oUserLogged->load($result['USER_LOGGED']); $result['USR_USERNAME'] = $oUserLogged->getUsrUsername(); } @@ -3288,6 +3413,7 @@ class Cases //the parameter dataVariable may contain additional elements $result = array_merge($dataVariable, $result); + return $result; } @@ -3304,18 +3430,19 @@ class Cases */ public function getLastParticipatedByUser($appUid, $userUid, $threadStatus = '') { - $criteria = new \Criteria('workflow'); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_THREAD_STATUS); - $criteria->add(\AppDelegationPeer::APP_UID, $appUid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS); + $criteria->add(AppDelegationPeer::APP_UID, $appUid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL); if (!empty($threadStatus)) { - $criteria->add(\AppDelegationPeer::DEL_THREAD_STATUS, $threadStatus, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, $threadStatus, Criteria::EQUAL); } - $dataSet = \AppDelegationPeer::doSelectRS($criteria); - $dataSet->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $dataSet = AppDelegationPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataSet->next(); $row = $dataSet->getRow(); + return isset($row['DEL_INDEX']) ? $row['DEL_INDEX'] : 0; } @@ -3332,68 +3459,79 @@ class Cases */ public function getOneLastThread($appUid, $checkCaseIsPaused = false) { - $criteria = new \Criteria('workflow'); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_THREAD_STATUS); - $criteria->add(\AppDelegationPeer::APP_UID, $appUid, \Criteria::EQUAL); - $dataSet = \AppDelegationPeer::doSelectRS($criteria); - $dataSet->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS); + $criteria->add(AppDelegationPeer::APP_UID, $appUid, Criteria::EQUAL); + $dataSet = AppDelegationPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataSet->next(); $row = $dataSet->getRow(); $delIndex = 0; while (is_array($row)) { $delIndex = $row['DEL_INDEX']; - if ($checkCaseIsPaused && \AppDelay::isPaused($appUid, $delIndex)) { + if ($checkCaseIsPaused && AppDelay::isPaused($appUid, $delIndex)) { return $delIndex; } $dataSet->next(); $row = $dataSet->getRow(); } + return $delIndex; } + /** * This function will be return the criteria for the search filter * * We considered in the search criteria the custom cases list, * the titles related to: caseTitle taskTitle processTitle and * the case number - * @param Criteria $criteria, must be contain the initial criteria for search - * @param string $listPeer, name of the list class - * @param string $search, the parameter for search in the table - * @param string $additionalClassName, name of the className of pmtable - * @param array $additionalColumns, columns related to the custom cases list + * @param Criteria $criteria , must be contain the initial criteria for search + * @param string $listPeer , name of the list class + * @param string $search , the parameter for search in the table + * @param string $additionalClassName , name of the className of pmtable + * @param array $additionalColumns , columns related to the custom cases list * @throws PropelException */ - public function getSearchCriteriaListCases(&$criteria, $listPeer ,$search, $additionalClassName = '', $additionalColumns = array() ) - { + public function getSearchCriteriaListCases( + &$criteria, + $listPeer, + $search, + $additionalClassName = '', + $additionalColumns = array() + ) { $oTmpCriteria = ''; //If we have additional tables configured in the custom cases list, prepare the variables for search if (count($additionalColumns) > 0) { require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $additionalClassName . '.php'); - $oNewCriteria = new \Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", \Criteria::LIKE); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", + Criteria::LIKE); //We prepare the query related to the custom cases list foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", \Criteria::LIKE)->addOr($oTmpCriteria); + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", + Criteria::LIKE)->addOr($oTmpCriteria); } } if (!empty($oTmpCriteria)) { $criteria->add( - $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, \Criteria::EQUAL)->addOr( - $oTmpCriteria - )))) + $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', + Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) ); } else { $criteria->add( - $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, \Criteria::EQUAL)))) + $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', + Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, Criteria::EQUAL)))) ); } } @@ -3402,23 +3540,29 @@ class Cases * This function get the table.column by order by the result * We can include the additional table related to the custom cases list * - * @param string $listPeer, name of the list class - * @param string $field, name of the fieldName - * @param string $sort, name of column by sort - * @param string $defaultSort, name of column by sort default - * @param string $additionalClassName, name of the className of pmTable - * @param array $additionalColumns, columns related to the custom cases list with the format TABLE_NAME.COLUMN_NAME + * @param string $listPeer , name of the list class + * @param string $field , name of the fieldName + * @param string $sort , name of column by sort + * @param string $defaultSort , name of column by sort default + * @param string $additionalClassName , name of the className of pmTable + * @param array $additionalColumns , columns related to the custom cases list with the format TABLE_NAME.COLUMN_NAME * @return string $tableName */ - public function getSortColumn($listPeer, $field, $sort, $defaultSort, $additionalClassName = '', $additionalColumns = array()) - { + public function getSortColumn( + $listPeer, + $field, + $sort, + $defaultSort, + $additionalClassName = '', + $additionalColumns = array() + ) { $columnSort = $defaultSort; $tableName = ''; //We will check if the column by sort is a LIST table $columnsList = $listPeer::getFieldNames($field); if (in_array($sort, $columnsList)) { - $columnSort = $listPeer::TABLE_NAME . '.' . $sort; + $columnSort = $listPeer::TABLE_NAME . '.' . $sort; } else { //We will sort by CUSTOM CASE LIST table if (count($additionalColumns) > 0) { @@ -3435,4 +3579,45 @@ class Cases return $columnSort; } + + /** + * This function verify if the user is a supervisor + * If we send the formUid we will to review if has the object form assigned + * + * @param string $usrUid, Uid related to the user + * @param string $appUid, Uid related to the case + * @param string $formUid, Uid related to the dynaform + * @param string $proUid, Uid related to the process + * + * @return boolean + */ + public function isSupervisorFromForm($usrUid, $appUid, $formUid, $proUid = '') + { + + //We will to search the proUid related to the appUid + if (empty($proUid)) { + $arrayApplicationData = $this->getApplicationRecordByPk($appUid, [], false); + $proUid = $arrayApplicationData['PRO_UID']; + } + + $supervisor = new BmProcessSupervisor(); + $isSupervisor = $supervisor->isUserProcessSupervisor($proUid, $usrUid); + + //We will check if the supervisor has the object form assigned + if ($isSupervisor) { + $cases = new ClassesCases(); + $resultDynaForm = $cases->getAllDynaformsStepsToRevise($appUid); + $isSupervisor = false; + while ($resultDynaForm->next()) { + $row = $resultDynaForm->getRow(); + //Review if the supervisor has the form assigned + if ($row["STEP_UID_OBJ"] === $formUid) { + $isSupervisor = true; + break; + } + } + } + + return $isSupervisor; + } } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php index 47818ac73..fb09e7320 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php @@ -1,11 +1,20 @@ parameters[$arrayArgs['app_index']]; $userUid = $this->getUserId(); //Check if the user has the case - $appDelegation = new \AppDelegation(); + $appDelegation = new AppDelegation(); $aCurUser = $appDelegation->getCurrentUsers($applicationUid, $delIndex); if (!empty($aCurUser)) { foreach ($aCurUser as $key => $value) { @@ -52,16 +61,37 @@ class Cases extends Api } } //Check if the user has Permissions - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); return $oCases->checkUserHasPermissionsOrSupervisor($userUid, $applicationUid, $dynaformUid); break; + case 'doPutCaseVariables': + $applicationUid = $this->parameters[$arrayArgs['app_uid']]; + $dynaformUid = $this->parameters[$arrayArgs['dyn_uid']]; + $delIndex = $this->parameters[$arrayArgs['del_index']]; + $userUid = $this->getUserId(); + + //Check if the user has the case currently + $appDelegation = new AppDelegation(); + $currentUser = $appDelegation->getCurrentUsers($applicationUid, $delIndex); + foreach ($currentUser as $key => $value) { + if ($value === $userUid) { + return true; + } + } + + //Check if the user is a supervisor + //Unlike GET, it is not enough to have the processPermission for update the variables + $cases = new BmCases(); + $isSupervisor = $cases->isSupervisorFromForm($userUid, $applicationUid, $dynaformUid); + return $isSupervisor; + break; case 'doPostReassign': $arrayParameters = $this->parameters[0]['cases']; $usrUid = $this->getUserId(); //Check if the user is supervisor process - $case = new \ProcessMaker\BusinessModel\Cases(); - $user = new \ProcessMaker\BusinessModel\User(); + $case = new BmCases(); + $user = new BmUser(); $count = 0; @@ -71,7 +101,7 @@ class Cases extends Api if (!empty($arrayApplicationData)) { if (!$user->checkPermission($usrUid, 'PM_REASSIGNCASE')) { if ($user->checkPermission($usrUid, 'PM_REASSIGNCASE_SUPERVISOR')) { - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $supervisor = new BmProcessSupervisor(); $flagps = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $usrUid); if (!$flagps) { $count = $count + 1; @@ -90,20 +120,20 @@ class Cases extends Api $appUid = $this->parameters[$arrayArgs['app_uid']]; $usrUid = $this->getUserId(); //Check if the user is supervisor process - $case = new \ProcessMaker\BusinessModel\Cases(); - $user = new \ProcessMaker\BusinessModel\User(); + $case = new BmCases(); + $user = new BmUser(); $arrayApplicationData = $case->getApplicationRecordByPk($appUid, [], false); if (!empty($arrayApplicationData)) { - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $appUid); - $criteria->add(\AppDelegationPeer::USR_UID, $usrUid); + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $appUid); + $criteria->add(AppDelegationPeer::USR_UID, $usrUid); $criteria->setLimit(1); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if ($rsCriteria->next()) { return true; } else { - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $supervisor = new BmProcessSupervisor(); $flagps = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $usrUid); return $flagps; } @@ -131,7 +161,7 @@ class Cases extends Api } return false; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -147,9 +177,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET */ @@ -174,11 +202,11 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -194,9 +222,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /paged */ @@ -221,10 +247,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -240,9 +266,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /draft */ @@ -267,10 +291,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -286,9 +310,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /draft/paged */ @@ -313,10 +335,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -332,9 +354,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /participated */ @@ -359,10 +379,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -378,9 +398,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /participated/paged */ @@ -405,10 +423,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -424,9 +442,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /unassigned */ @@ -451,10 +467,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -470,9 +486,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /unassigned/paged */ @@ -497,10 +511,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -516,9 +530,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /paused */ @@ -543,10 +555,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -562,9 +574,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /paused/paged */ @@ -589,10 +599,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -612,9 +622,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /advanced-search */ @@ -647,10 +655,10 @@ class Cases extends Api $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -670,9 +678,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /advanced-search/paged */ @@ -705,10 +711,10 @@ class Cases extends Api $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -719,17 +725,19 @@ class Cases extends Api * @url GET /:app_uid * * @param string $app_uid {@min 32}{@max 32} + * @return array + * @throws Exception */ public function doGetCaseInfo($app_uid) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $caseInfo = $case->getCaseInfo($app_uid, $this->getUserId()); $caseInfo = DateTime::convertUtcToIso8601($caseInfo, $this->arrayFieldIso8601); return $caseInfo; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -742,7 +750,7 @@ class Cases extends Api public function doGetTaskCase($app_uid) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $arrayData = $case->getTaskCase($app_uid, $this->getUserId()); @@ -750,7 +758,7 @@ class Cases extends Api $response = $arrayData; return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -767,10 +775,10 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $oData = $cases->addCase($pro_uid, $tas_uid, $userUid, $variables); return $oData; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -787,10 +795,10 @@ class Cases extends Api public function doPostCaseImpersonate($pro_uid, $usr_uid, $tas_uid, $variables = null) { try { - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $oData = $cases->addCaseImpersonate($pro_uid, $usr_uid, $tas_uid, $variables); return $oData; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -807,9 +815,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->updateReassignCase($app_uid, $userUid, $del_index, $usr_uid_source, $usr_uid_target); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -825,9 +833,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->updateRouteCase($app_uid, $userUid, $del_index); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -846,9 +854,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putCancelCase($cas_uid, $userUid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -858,9 +866,7 @@ class Cases extends Api * * @param string $cas_uid {@min 1}{@max 32} * @param string $unpaused_date {@from body} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url PUT /:cas_uid/pause */ @@ -868,13 +874,13 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); if ($unpaused_date == null) { $cases->putPauseCase($cas_uid, $userUid); } else { $cases->putPauseCase($cas_uid, $userUid, false, $unpaused_date); } - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -883,9 +889,7 @@ class Cases extends Api * Unpause Case * * @param string $cas_uid {@min 1}{@max 32} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url PUT /:cas_uid/unpause */ @@ -893,9 +897,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putUnpauseCase($cas_uid, $userUid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -905,9 +909,7 @@ class Cases extends Api * * @param string $cas_uid {@min 1}{@max 32} * @param string $tri_uid {@min 1}{@max 32} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url PUT /:cas_uid/execute-trigger/:tri_uid */ @@ -915,9 +917,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putExecuteTriggerCase($cas_uid, $tri_uid, $userUid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -926,9 +928,7 @@ class Cases extends Api * Delete Case * * @param string $cas_uid {@min 1}{@max 32} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url DELETE /:cas_uid */ @@ -936,9 +936,9 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->deleteCase($cas_uid, $usr_uid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -962,10 +962,10 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $response = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid, $pro_uid, $act_uid, $app_index); return DateTime::convertUtcToIso8601($response); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -977,9 +977,7 @@ class Cases extends Api * @param array $request_data * @param string $dyn_uid {@from path} * @param int $del_index {@from path} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url PUT /:app_uid/variable */ @@ -987,10 +985,10 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $request_data = \ProcessMaker\Util\DateTime::convertDataToUtc($request_data); $cases->setCaseVariables($app_uid, $request_data, $dyn_uid, $usr_uid, $del_index); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1008,9 +1006,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /:app_uid/notes */ @@ -1038,10 +1034,10 @@ class Cases extends Api $dataList['search'] = $search; $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $response = $cases->getCaseNotes($app_uid, $usr_uid, $dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1058,9 +1054,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /:app_uid/notes/paged */ @@ -1086,10 +1080,10 @@ class Cases extends Api $dataList['search'] = $search; $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $response = $cases->getCaseNotes($app_uid, $usr_uid, $dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1100,9 +1094,7 @@ class Cases extends Api * @param string $app_uid {@min 1}{@max 32} * @param string $note_content {@min 1}{@max 500} * @param int $send_mail {@choice 1,0} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url POST /:app_uid/note */ @@ -1110,10 +1102,10 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $send_mail = ($send_mail == 0) ? false : true; $cases->saveCaseNote($app_uid, $usr_uid, $note_content, $send_mail); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1126,13 +1118,13 @@ class Cases extends Api public function doGetTasks($app_uid) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $response = $case->getTasks($app_uid); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1144,17 +1136,16 @@ class Cases extends Api * @param int $del_index {@from body} * @param string $obj_type {@from body} * @param string $obj_uid {@from body} - * - * @copyright Colosa - Bolivia + * @throws Exception * * @url PUT /:app_uid/execute-triggers */ public function doPutExecuteTriggers($app_uid, $del_index, $obj_type, $obj_uid) { try { - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putExecuteTriggers($app_uid, $del_index, $obj_type, $obj_uid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1169,13 +1160,13 @@ class Cases extends Api public function doGetSteps($app_uid, $del_index) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $response = $case->getSteps($app_uid, $del_index); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1187,6 +1178,7 @@ class Cases extends Api * * @param string $type_view {@from path} * @return array + * @throws Exception * */ public function doGetCasesListStarCase( @@ -1194,12 +1186,12 @@ class Cases extends Api ) { try { $usr_uid = $this->getUserId(); - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $response = $case->getCasesListStarCase($usr_uid, $type_view); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1211,6 +1203,7 @@ class Cases extends Api * * @param string $type_view {@from path} * @return array + * @throws Exception * */ public function doGetCasesListBookmarkStarCase( @@ -1218,12 +1211,12 @@ class Cases extends Api ) { try { $usr_uid = $this->getUserId(); - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $response = $case->getCasesListBookmarkStarCase($usr_uid, $type_view); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1234,15 +1227,16 @@ class Cases extends Api * @url POST /bookmark/:tas_uid * * @param string $tas_uid {@min 32}{@max 32} + * @throws Exception * */ public function doPostBookmarkStartCase($tas_uid) { try { $userLoggedUid = $this->getUserId(); - $user = new \ProcessMaker\BusinessModel\User(); + $user = new BmUser(); $user->updateBookmark($userLoggedUid, $tas_uid, 'INSERT'); - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1252,15 +1246,16 @@ class Cases extends Api * @url DELETE /bookmark/:tas_uid * * @param string $tas_uid {@min 32}{@max 32} + * @throws Exception * */ public function doDeleteBookmarkStartCase($tas_uid) { try { $userLoggedUid = $this->getUserId(); - $user = new \ProcessMaker\BusinessModel\User(); + $user = new BmUser(); $user->updateBookmark($userLoggedUid, $tas_uid, 'DELETE'); - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1273,15 +1268,16 @@ class Cases extends Api * @class AccessControl {@className \ProcessMaker\Services\Api\Cases} * * @param array $request_data + * @throws Exception * */ public function doPostReassign($request_data) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $response = $case->doPostReassign($request_data); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index d5d849b73..d0e27612b 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -1715,24 +1715,26 @@ class Light extends Api /** * Put Case Variables + * @access protected + * @class AccessControl {@className \ProcessMaker\Services\Api\Cases} + * @url PUT /:app_uid/variable * * @param string $app_uid {@min 1}{@max 32} * @param array $request_data * @param string $dyn_uid {@from path} * @param int $del_index {@from path} * - * @url PUT /:app_uid/variable + * @return void + * @throws RestException */ public function doPutCaseVariables($app_uid, $request_data, $dyn_uid = '', $del_index = 0) { try { //Check if the user is a supervisor or have permissions $usr_uid = $this->getUserId(); - $cases = new BusinessModelCases(); - $hasAccess = $cases->checkUserHasPermissionsOrSupervisor($usr_uid, $app_uid, $dyn_uid); //When the user is a supervisor del_index is 0 - if ($del_index <= 0 && !$hasAccess) { + if ($del_index < 0) { throw (new Exception(G::LoadTranslation('ID_INVALID_VALUE_EXPECTING_POSITIVE_INTEGER', array('del_index')), Api::STAT_APP_EXCEPTION)); } @@ -1740,6 +1742,7 @@ class Light extends Api throw (new Exception(G::LoadTranslation('ID_CAN_NOT_BE_NULL', array('del_index')), Api::STAT_APP_EXCEPTION)); } + $cases = new BusinessModelCases(); if ($del_index > 0) { if ($cases->caseAlreadyRouted($app_uid, $del_index, $usr_uid)) { throw (new Exception(G::LoadTranslation('ID_CASE_ALREADY_DERIVATED'), Api::STAT_APP_EXCEPTION)); From 4e1f891e281d01fd31f19018708ced55b27ae640 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 10 Oct 2017 10:06:23 -0400 Subject: [PATCH 02/22] HOR-3961 --- .../src/ProcessMaker/Services/Api/Project.php | 32 ++----------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index 859e40511..10e54bf4c 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -16,12 +16,10 @@ use ProcessMaker\Project\Adapter\BpmnWorkflow; use Exception; /** - * Class Project - * * @package Services\Api\ProcessMaker - * @author Erik Amaru Ortiz - * * @protected + * @access protected + * @class AccessControl {@permission PM_FACTORY} */ class Project extends Api { @@ -53,7 +51,6 @@ class Project extends Api /** * @url GET /:prj_uid - * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetProject($prj_uid) @@ -75,10 +72,6 @@ class Project extends Api * * @param string $prj_name * @param array $request_data - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia - * * @url POST * @status 201 */ @@ -97,7 +90,6 @@ class Project extends Api /** * @url PUT /:prj_uid - * * @param string $prj_uid {@min 32}{@max 32} */ public function doPutProject($prj_uid, $request_data) @@ -141,11 +133,10 @@ class Project extends Api /** * Bulk actions + * * @url POST /bulk - * * @access protected * @class AccessControl {@permission PM_FACTORY} - * * @param array $request_data * @return array $response * @throws Exception @@ -162,7 +153,6 @@ class Project extends Api /** * @url GET /:prj_uid/export/listObjects - * * @param string $prj_uid {@min 32}{@max 32} * @return mixed|string * @throws RestException @@ -180,7 +170,6 @@ class Project extends Api /** * @url GET /:prj_uid/export-granular - * * @param string $prj_uid {@min 32}{@max 32} * @param string $objects */ @@ -203,7 +192,6 @@ class Project extends Api /** * @url GET /:prj_uid/export - * * @param string $prj_uid {@min 32}{@max 32} */ public function export($prj_uid) @@ -230,9 +218,7 @@ class Project extends Api /** * @url POST /import - * * @param array $request_data - * * @status 201 */ public function doPostImport(array $request_data, $option = null, $option_group = null) @@ -260,7 +246,6 @@ class Project extends Api /** * @url POST /save-as - * * @param string $prj_uid {@from body} * @param string $prj_name {@from body} * @param string $prj_description {@from body} @@ -274,7 +259,6 @@ class Project extends Api /** * @url GET /:prj_uid/process - * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetProcess($prj_uid) @@ -295,7 +279,6 @@ class Project extends Api /** * @url PUT /:prj_uid/process - * * @param string $prj_uid {@min 32}{@max 32} * @param array $request_data */ @@ -315,9 +298,7 @@ class Project extends Api /** * @url POST /generate-bpmn - * * @param array $request_data - * * @status 201 */ public function doPostGenerateBpmn(array $request_data) @@ -353,7 +334,6 @@ class Project extends Api /** * @url GET /:prj_uid/dynaforms - * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetDynaForms($prj_uid) @@ -373,7 +353,6 @@ class Project extends Api /** * @url GET /:prj_uid/input-documents - * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetInputDocuments($prj_uid) @@ -393,7 +372,6 @@ class Project extends Api /** * @url GET /:prj_uid/variables - * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetVariables($prj_uid) @@ -414,7 +392,6 @@ class Project extends Api /** * @url GET /:prj_uid/grid/variables * @url GET /:prj_uid/grid/:grid_uid/variables - * * @param string $prj_uid {@min 32}{@max 32} * @param string $grid_uid */ @@ -435,7 +412,6 @@ class Project extends Api /** * @url GET /:prj_uid/trigger-wizards - * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetTriggerWizards($prj_uid) @@ -455,7 +431,6 @@ class Project extends Api /** * @url PUT /:prj_uid/update-route-order - * * @param string $prj_uid {@min 32}{@max 32} */ public function doPutUpdateRouteOrder($prj_uid, $request_data) @@ -471,7 +446,6 @@ class Project extends Api /** * @url PUT /:prj_uid/update-route-order-from-project - * * @param string $prj_uid {@min 32}{@max 32} */ public function doPutUpdateRouteOrderFromProject($prj_uid) From e85be7412e95be1ea9ac78ecaf4f58c2ad182ac2 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 10 Oct 2017 12:20:01 -0400 Subject: [PATCH 03/22] HOR-3969 --- workflow/engine/config/mobileios.pem | 129 ++++++++++++++++++--------- 1 file changed, 85 insertions(+), 44 deletions(-) diff --git a/workflow/engine/config/mobileios.pem b/workflow/engine/config/mobileios.pem index f8b631977..bb56d7bda 100644 --- a/workflow/engine/config/mobileios.pem +++ b/workflow/engine/config/mobileios.pem @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- -MIIGVTCCBT2gAwIBAgIIXLYlpPfN6a8wDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV +MIIGVTCCBT2gAwIBAgIIC2XzArbAqykwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3 aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw -HhcNMTYwOTIwMTczMTI2WhcNMTcxMDIwMTczMTI2WjCBqTEtMCsGCgmSJomT8ixk +HhcNMTcxMDA0MTM0MzMwWhcNMTgxMTAzMTM0MzMwWjCBqTEtMCsGCgmSJomT8ixk AQEMHWNvbS5wcm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyMTswOQYDVQQDDDJBcHBs ZSBQdXNoIFNlcnZpY2VzOiBjb20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlcjET MBEGA1UECwwKOTQyUVA3UUpFOTEZMBcGA1UECgwQUHJvY2Vzc01ha2VyIEluYzEL -MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDsX8rt -KIHrXR6KQpCRFVMOPEpPesTAVUQR5tYk1YdJv/b0MwwcfJk2tu7z8raIOnzm7/Su -FEFKzFGZBWwN9/yvSdmCcmhjm4UqKgaHErD+S5QsP0tkIZvBud776sNFkS0k0rx8 -xXYjCHVk7v2M0UEGadVbxmkZawAbbubyVjREGGjBe6kwTzRHEo2OUXtZkwCF8s6W -dd9SeS653Mn1estlDwqDl38uKF/rcl0Hfav3GP208FdxnPlK4KaCRwdBoTneOLHw -ndUlRmprM1wW0+7SEte+nNbGW4jnMJUTVEgOlUKsPQhsz0vY4JdYT/m9UOapLiQL -a4BlP23BEQDm1wBJAgMBAAGjggKQMIICjDAdBgNVHQ4EFgQUjRosATP+9HjdasRI -GTumZ1QGXaIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2 +MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwQgZG +uKp6qEd1Uwgh0qmJLEFlMaIPjxkY+mGjbZyZys73oenLHgPwPukm+64oPdxs7UXl +ZifbWYU4rHbQDEkmOC4GyQU5n9s4zgNtgTqCpab3BuODA/1ffm2OullK1SHmS0cG +Cm8WC93SDa9nmF5xIaiUBbfOsZGcjUKM+MTn/5ETWoZEBUqlf5PKPGZ63/99Q/pj +UxNftY3LTE3o37GYATxFX/sIFtB98vB5hcTdt4zfXHzwisAtqQpkuWIGd5nULX5w +JzlAUjq4werqQhg/k/OAw7kL/JP/PDHpgrbCoO9BZTsAD8H21aZDZR1uDSFSa4H/ +2FeWj286U6Uu10XfAgMBAAGjggKQMIICjDAdBgNVHQ4EFgQUZtV15ABNLGW8Kjjp +yUaQl6f5eRowDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2 R1nFUlSjtzCCARwGA1UdIASCARMwggEPMIIBCwYJKoZIhvdjZAUBMIH9MIHDBggr BgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55 IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxl @@ -27,44 +27,85 @@ BgoqhkiG92NkBgMBBAIFADAQBgoqhkiG92NkBgMCBAIFADCBoAYKKoZIhvdjZAYD BgSBkTCBjgwdY29tLnByb2Nlc3NtYWtlci5Qcm9jZXNzTWFrZXIwBQwDYXBwDCJj b20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlci52b2lwMAYMBHZvaXAMKmNvbS5w cm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyLmNvbXBsaWNhdGlvbjAODAxjb21wbGlj -YXRpb24wDQYJKoZIhvcNAQELBQADggEBAIkizqjhmF+YyQJJDYGsqa6/mx9xeNAa -rUQj5n156drHN7YG579X2seI4NemlOU72jwyqZR4QJUaLukxQiVVA0vT6OUPbRN1 -iDBf24UhoYj9pQsluCbHK2bh2h7TrNF5bqU4vJ8d97F9eS0Q4zJUVqHlrxJLCcSU -UoAPxLwxXHcU9z2w7l57J+rEKdjs10rPis1kNiFkKAcF/LJy6qg6+IpEWYJH2Pml -R3sc26uxd9i83q9EjA6seMQIu3dTp3KoMlrvA3XvxXYlgQ0xHWpRmV7/dhF2J16F -nc8/Yh7yz0QI9nlTNBHDKvZbeJqANIyvf0i6GIjGE8B8cw883zIkgE4= +YXRpb24wDQYJKoZIhvcNAQELBQADggEBADLO70r/cMu7M2A1xNu356IBL4vOtGK7 +nKaAxnjt7aZB+qGTz9xzjH0sHKIefAtlTTSzUzcR/9+gprKt4cdmwgV0zWBpO0UU +7Nu0WreMJKKJ1COO26d8WywvaNdWWHH7+lksZBJFiqFcYvECu3CaMoe77PUqKrWy +R/7MhsHtTsMLz/IMATgMU32NTUs3qKElXjHwTOyE2c+n5VYNoDDMUpx//mbZ5K1B +zA12bA2lg5VLXq4yA9p2Xc2JBg647CXcMQdzPphQ/NZaetcfmE0F01FAF3dfhmmX +jbNoPanngYpPEUVR6kt4MpB/3SeBXgU3HPhBIo7vtfIwI0wT+QlB5bw= -----END CERTIFICATE----- Bag Attributes - friendlyName: ProcessMaker Production - localKeyID: 8D 1A 2C 01 33 FE F4 78 DD 6A C4 48 19 3B A6 67 54 06 5D A2 + friendlyName: Apple Push Services: com.processmaker.ProcessMaker + localKeyID: 66 D5 75 E4 00 4D 2C 65 BC 2A 38 E9 C9 46 90 97 A7 F9 79 1A +subject=/UID=com.processmaker.ProcessMaker/CN=Apple Push Services: com.processmaker.ProcessMaker/OU=942QP7QJE9/O=ProcessMaker Inc/C=US +issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority +-----BEGIN CERTIFICATE----- +MIIGVTCCBT2gAwIBAgIIC2XzArbAqykwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV +BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js +ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3 +aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw +HhcNMTcxMDA0MTM0MzMwWhcNMTgxMTAzMTM0MzMwWjCBqTEtMCsGCgmSJomT8ixk +AQEMHWNvbS5wcm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyMTswOQYDVQQDDDJBcHBs +ZSBQdXNoIFNlcnZpY2VzOiBjb20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlcjET +MBEGA1UECwwKOTQyUVA3UUpFOTEZMBcGA1UECgwQUHJvY2Vzc01ha2VyIEluYzEL +MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwQgZG +uKp6qEd1Uwgh0qmJLEFlMaIPjxkY+mGjbZyZys73oenLHgPwPukm+64oPdxs7UXl +ZifbWYU4rHbQDEkmOC4GyQU5n9s4zgNtgTqCpab3BuODA/1ffm2OullK1SHmS0cG +Cm8WC93SDa9nmF5xIaiUBbfOsZGcjUKM+MTn/5ETWoZEBUqlf5PKPGZ63/99Q/pj +UxNftY3LTE3o37GYATxFX/sIFtB98vB5hcTdt4zfXHzwisAtqQpkuWIGd5nULX5w +JzlAUjq4werqQhg/k/OAw7kL/JP/PDHpgrbCoO9BZTsAD8H21aZDZR1uDSFSa4H/ +2FeWj286U6Uu10XfAgMBAAGjggKQMIICjDAdBgNVHQ4EFgQUZtV15ABNLGW8Kjjp +yUaQl6f5eRowDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2 +R1nFUlSjtzCCARwGA1UdIASCARMwggEPMIIBCwYJKoZIhvdjZAUBMIH9MIHDBggr +BgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55 +IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxl +IHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNh +dGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMu +MDUGCCsGAQUFBwIBFilodHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1 +dGhvcml0eTAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmFwcGxlLmNvbS93 +d2RyY2EuY3JsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAQ +BgoqhkiG92NkBgMBBAIFADAQBgoqhkiG92NkBgMCBAIFADCBoAYKKoZIhvdjZAYD +BgSBkTCBjgwdY29tLnByb2Nlc3NtYWtlci5Qcm9jZXNzTWFrZXIwBQwDYXBwDCJj +b20ucHJvY2Vzc21ha2VyLlByb2Nlc3NNYWtlci52b2lwMAYMBHZvaXAMKmNvbS5w +cm9jZXNzbWFrZXIuUHJvY2Vzc01ha2VyLmNvbXBsaWNhdGlvbjAODAxjb21wbGlj +YXRpb24wDQYJKoZIhvcNAQELBQADggEBADLO70r/cMu7M2A1xNu356IBL4vOtGK7 +nKaAxnjt7aZB+qGTz9xzjH0sHKIefAtlTTSzUzcR/9+gprKt4cdmwgV0zWBpO0UU +7Nu0WreMJKKJ1COO26d8WywvaNdWWHH7+lksZBJFiqFcYvECu3CaMoe77PUqKrWy +R/7MhsHtTsMLz/IMATgMU32NTUs3qKElXjHwTOyE2c+n5VYNoDDMUpx//mbZ5K1B +zA12bA2lg5VLXq4yA9p2Xc2JBg647CXcMQdzPphQ/NZaetcfmE0F01FAF3dfhmmX +jbNoPanngYpPEUVR6kt4MpB/3SeBXgU3HPhBIo7vtfIwI0wT+QlB5bw= +-----END CERTIFICATE----- +Bag Attributes + friendlyName: ProcessMaker Prod Key + localKeyID: 66 D5 75 E4 00 4D 2C 65 BC 2A 38 E9 C9 46 90 97 A7 F9 79 1A Key Attributes: -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,BC1E17B433FB3A98 +DEK-Info: DES-EDE3-CBC,6D70077A389A3A8C -lSsYwz/4sOIm/By9K4RfK7EpoyDRBvC9T58UJKgKS9vuwhNusNb1snPU+Bu+Xk/k -/lIxq5Dvrg64ZtIvqSK67Pj+KQ6RkUmNE/bcHnewV/pTZIqpOdhI3jW2r63KdVPZ -/xo663ujEgDIEytPWMP1/bMygfXOAgl5xk3Z6omqV0AvVjxlabvz5uftlEuHI1wy -Hws6q8D5sk7vtSheqYwq+J9hqHONqU1UOKaLSr+x2oQIEcqcVl38NdSqNqwoN9KN -rv18hNuhW3RUnkX+FLSGkPzbNfsHvtoHqnlFafEzELd5dwmHEfLUHORgTQCI6Tew -1qYvzXIzqFKbUrkcAf0RPcciIUn0dfsndMBb9DkF0iw0iJmJ9kt7TbtZD8oj7Hbj -gJKVO55ob5xdNqiXXIPoQmhOWV29n15q7jLJgUpu40McMbYQ+L9xIYRjRB5l0E3j -evymHbXeZB4HqBExZVDPtS/Ue/ewOzSL6O/bdZLbnzQ4dC6sH+rvBJdPzcPBD1rL -4bwArf1gfHgLgsgHkmUg10cjgsbDgtc6NklyNV542iDOSUeYtE4zau7sU+u7yCjb -WoJPWS95zDK/4sDQB3moUOxxUUs79dyElsiDtVbjh8PuPLhpw4KLX7gf+7Cj2RC2 -vLgk2O/xfZRH2OiJxdh+eNVjSFrZGdhQ7ovlV5N+K6/hAtiH4dFBiuN6ptRB9HrI -CQaHwuzqpAWxMAQcCTnTIl+UcGjmKtR7PC3wc2zotH0alRESMbOKcAZuFLgOlCHq -c9TYSHuueNO62b09XAUROHgxS7zpoNYwz3jsgLtLRSeKKWa6cP2i/NsAbBxgkyxJ -h0+cXYI9uMZ1QSojRP05k0TfJ3m0aTfI9r4zipuPPIWMZTfKDpmtBGSK6xJ5TGwH -KQijKqV37/L5uVUHfWqOWdcgy22/pa0VFigSB10oCalEF4CJY600S3MYd5e8JWC3 -B9c86m36BI7/7/V/gn9UmPqWRZNIKMVLb8fHiSMLAtdvdwNkN8bvEpHCxa6dT8aS -gnRqOgaqSU8r6kIjaHH3wsu5vwfKygHUMlpaXntDyUC8jNm2AEMjc79cVdxFGZV+ -eu89Tu9iQFTE3L1y9aUFRDQernmyxqPj6ehrqkb4bPjhkYm5Zl5WJKK+Xu8y81em -N+o12ewdsv6JJhQ7Q4+198DA2YuArLetlJiaxgtJw5xgySfm7gFRztKaH7XEdtfT -kIampxWmoG/Ymcw0UBdEDAIi4kKkOjMpB6tO9sQ+1GZ0op8mjyrvYUefcejRqOyD -EE5ACaUUvK8e6qEcpe9R/v4RBJu+V0h+Bj/JzMx27iu9T5RuCZSsw8ll3SfgTrpp -Z7P1yoR1WWkSMCmlHUFAyMW1PhD1EIiZZ1c5Lr/OcmHAYXbG5YusULRvD1XBd9uv -TtYo1CBznMAa+tI1TgAb1j61asYLREmER11R9hBYgnDei2/xTO4N0VDIkBaY7GEz -KJVCEAxR/7VxHGosAji5gP78J/2hUMmkQSxQeRj4G/mCBrbibU+SPlv4oWMpgQoj -La5yGDm+HsVb3sXGCCPyGGajxIwoiYRubdwIiJ72BCLrBkUnH7TXrgptY657nDHK +bziMWwK5LMeP0dIM2wHeO6juXqzmtH/U9FW5GAZuJEKt0zYAyv1DmEJFfyMMZmob +4j+LfvfdZVium6cIEkC+JMPFwW0dSRQNgA6I44E2AT73MTQr6u7pZi/QiQ09CJCQ +JjFJ2Q08ZgHQXrJMy62PeHO+uWOQW6YuI5aNC/K+AdvIwNyzlCj/HNWcf7IeSaeE +urH5/dL1cVSfpeBXMsqfYSAcfTZOXgAb8BRwngi+RSGNQ6SawEl53vm94gDSH3Mi +3tzCsDcw0Gw5Wu1d/755Zzakl48LOqxLzptbOr5QbJK5BeGhE0y3Db+rYNpG3fzw +I3YdZTMhkzaigG4xp/BLyLL2tgGzSIGg8BARMHF/GkXcdKBJyQrweXMkhhoeYxr2 +dzWurOd0Bkw3DJXONE9uPNQb/i33TYmflQMhWJFlHkKhkHlIgAu5cIzTwRNbHCF7 +aRKiHz5uL+/WufgVlw62JZp9JZ1mPsmJINba4BAT9i9zkUnPvxYN/GB5Z2Ttz1nj +ylyGiAtdAZ7l05OWd7I9gEUTce8dsojThIun3QQ1UFCRJUmg38Dp/XxMzWP5IpTb +E2McM90jyN+M8gII2KU6U5uqTXDiMMFiXFa9WlTc4xIkHNQLINDASBgUQr7pIqth +UTvU4YoST6wma9BNYAuGX9ga6uEg94kmVXrUEBZWI13T56bSpw4cyvzSJvNwcH8m +nClVXMIrysoGgQ1Gxs6G2xWTduXysK5E26bY6Gypk9VPMUyo6oVENnY3EQs3Cj/R +W2vyz1t05xPonPxmun2mFTQQvgSbbkfUbuL02tBQXxkWNoo5rCAVuRMFlVjFzIEF +qZ3uiU8ui5Nj1Tc5SAosuoTu53vLp4ynn9A5WVmLXdE1DucCXTumN8teISF69cUU +XYVy2Ch39LxUGumWTSVZNDJBJgSFtiNxCmpwS4jQsNRF9piK/T+t3INSXRcRB9mF +f3DYOrjor6TTu0hEppZosIUfoo7EDgplfMK5x9ZjL8JWSWEqA2U2JoRbe9ucMkGy +wbFTsbyg9NNSdF1jEZUEKWKr7dT3ShPHhut/F9HOi5KvbMAgUf0HnYgUsCTYhZru +UbVf8cWnfYPyVUW3Doa12/uSpqwrHzOduexb1LzO0mukdfyR7UhY/rRv5w4KkTXJ ++zlNncWiSZQiDJq053i8UYhDj0U7+YzmpxE/BUU5HwMcZ8wtl0MDac66Z1YXkqgs +bO2dK71tNQ1D5msmDDP+Cw0W4wLdRiJn8FNF5oBl2QYMyTyclduhrlCMp8VgnMmT +mDrygATrWoaToSiR+Mc6D7rOLyHt+29HMtFx1Lgs3jpgzLQ4nBWBtLN5uxkxTclH +W35sMR2eDYiM7nEO9TJSBlC8lkFiGsv4xYYK8gLEZ2h7OMPrO/9L9CmHk/v3Ts8I +wSt0FiVZNP4JEL0NZ5nSZMnDT0R47CuFkEgf271Um4lNPPRV7mPA0fWkKXt59FeK +LoBZYkGes/QliAUWdY44tVKgg6oIM6IqubsO92Hru5o36Px7ucVoqiNHnSy1lo/v +KAfvW9/40XJ+z1JUTYwreaLoO+Wlk0Irkvv4Fro0KTA8rXDNFm/JL2gkgknEae4i -----END RSA PRIVATE KEY----- From 99700467b8500861e68a2e02deb3ebfc92fb4745 Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Tue, 10 Oct 2017 16:18:22 -0400 Subject: [PATCH 04/22] HOR-3858 Unauthenticated download of any file from server with "processes/processes_GetFile" page + Path Traversal - Add validation path only PATH_DATA_MAILTEMPLATES or PATH_DATA_PUBLIC - exists process uid --- gulliver/system/class.rbac.php | 6 +++- .../methods/processes/processes_GetFile.php | 35 +++++++++++++++---- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index e6ccf3752..e23d924e0 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -178,7 +178,11 @@ class RBAC 'DEL' => array('PM_SETUP'), 'LST' => array('PM_SETUP'), 'TEST' => array('PM_SETUP') - ) + ), + 'processes_GetFile.php' => [ + 'mailTemplates' => ['PM_FACTORY'], + 'public' => ['PM_FACTORY'] + ] ); } diff --git a/workflow/engine/methods/processes/processes_GetFile.php b/workflow/engine/methods/processes/processes_GetFile.php index 477f2d6d9..0c8d798c9 100644 --- a/workflow/engine/methods/processes/processes_GetFile.php +++ b/workflow/engine/methods/processes/processes_GetFile.php @@ -1,18 +1,39 @@ allows(basename(__FILE__), $_GET['MAIN_DIRECTORY']); + +$mainDirectory = !empty($_GET['MAIN_DIRECTORY']) ? $_GET['MAIN_DIRECTORY'] : ''; +$proUid = !empty($_GET['PRO_UID']) ? $_GET['PRO_UID'] : ''; +$currentDirectory = !empty($_GET['CURRENT_DIRECTORY']) ? $_GET['CURRENT_DIRECTORY'] . PATH_SEP : ''; +$file = !empty($_GET['FILE']) ? $_GET['FILE'] : ''; +$extension = (!empty($_GET['sFilextension']) && $_GET['sFilextension'] === 'javascript') ? '.js' : ''; + +//validated process exists, return throw if not exists. +$process = new Process(); +$process->load($proUid); + +switch ($mainDirectory) { case 'mailTemplates': - $sDirectory = PATH_DATA_MAILTEMPLATES . $_GET['PRO_UID'] . PATH_SEP . ($_GET['CURRENT_DIRECTORY'] != '' ? $_GET['CURRENT_DIRECTORY'] . PATH_SEP : ''); + $directory = PATH_DATA_MAILTEMPLATES; break; case 'public': - $sDirectory = PATH_DATA_PUBLIC . $_GET['PRO_UID'] . PATH_SEP . ($_GET['CURRENT_DIRECTORY'] != '' ? $_GET['CURRENT_DIRECTORY'] . PATH_SEP : ''); + $directory = PATH_DATA_PUBLIC; break; default: die(); break; } -//fixed: added a file extension when is a javascript file by krlos -$_GET['FILE'] .= ($_GET['sFilextension'] != '' && $_GET['sFilextension'] == 'javascript') ? '.js' : ''; -if (file_exists( $sDirectory . $_GET['FILE'] )) { - G::streamFile( $sDirectory . $_GET['FILE'], true ); +$directory .= $proUid; + +//Delete return directory because path exists in PATH_DATA_MAILTEMPLATES or PATH_DATA_PUBLIC +foreach (pathinfo($currentDirectory) as $value) { + if ($value !== '..') { + $directory .= PATH_SEP . $value; + } +} +$file .= $extension; + +if (file_exists($directory . $file)) { + G::streamFile($directory . $file, true); } From 45c6b0df571a65002583cf721316808170ba2e6c Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Tue, 10 Oct 2017 16:22:07 -0400 Subject: [PATCH 05/22] - Fix path --- workflow/engine/methods/processes/processes_GetFile.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/engine/methods/processes/processes_GetFile.php b/workflow/engine/methods/processes/processes_GetFile.php index 0c8d798c9..b8204d97a 100644 --- a/workflow/engine/methods/processes/processes_GetFile.php +++ b/workflow/engine/methods/processes/processes_GetFile.php @@ -24,12 +24,12 @@ switch ($mainDirectory) { break; } -$directory .= $proUid; +$directory .= $proUid . PATH_SEP; //Delete return directory because path exists in PATH_DATA_MAILTEMPLATES or PATH_DATA_PUBLIC foreach (pathinfo($currentDirectory) as $value) { if ($value !== '..') { - $directory .= PATH_SEP . $value; + $directory .= $value . PATH_SEP; } } $file .= $extension; From c7e8614ada79cf86b369a96032586c9ca895feac Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Wed, 11 Oct 2017 13:26:34 -0400 Subject: [PATCH 06/22] - sanitize field current_directory --- .../engine/methods/processes/processes_GetFile.php | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/workflow/engine/methods/processes/processes_GetFile.php b/workflow/engine/methods/processes/processes_GetFile.php index b8204d97a..02f1ac2dd 100644 --- a/workflow/engine/methods/processes/processes_GetFile.php +++ b/workflow/engine/methods/processes/processes_GetFile.php @@ -4,7 +4,7 @@ $RBAC->allows(basename(__FILE__), $_GET['MAIN_DIRECTORY']); $mainDirectory = !empty($_GET['MAIN_DIRECTORY']) ? $_GET['MAIN_DIRECTORY'] : ''; $proUid = !empty($_GET['PRO_UID']) ? $_GET['PRO_UID'] : ''; -$currentDirectory = !empty($_GET['CURRENT_DIRECTORY']) ? $_GET['CURRENT_DIRECTORY'] . PATH_SEP : ''; +$currentDirectory = !empty($_GET['CURRENT_DIRECTORY']) ? realpath($_GET['CURRENT_DIRECTORY']) . PATH_SEP : ''; $file = !empty($_GET['FILE']) ? $_GET['FILE'] : ''; $extension = (!empty($_GET['sFilextension']) && $_GET['sFilextension'] === 'javascript') ? '.js' : ''; @@ -24,14 +24,7 @@ switch ($mainDirectory) { break; } -$directory .= $proUid . PATH_SEP; - -//Delete return directory because path exists in PATH_DATA_MAILTEMPLATES or PATH_DATA_PUBLIC -foreach (pathinfo($currentDirectory) as $value) { - if ($value !== '..') { - $directory .= $value . PATH_SEP; - } -} +$directory .= $proUid . PATH_SEP . $currentDirectory; $file .= $extension; if (file_exists($directory . $file)) { From f8300900b5898a6ba3218215fd91b3ef176070fe Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Wed, 11 Oct 2017 12:56:52 -0400 Subject: [PATCH 07/22] HOR-3920 Unauthenticated calling of may Ajax pages with tracker_designer=1 (URL INJECTION) - Add validation in sysGeneric with session PIN and CASE --- workflow/engine/controllers/admin.php | 19 ++++++++++++------- workflow/public_html/sysGeneric.php | 16 +++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/workflow/engine/controllers/admin.php b/workflow/engine/controllers/admin.php index aa87d89ca..76871c03e 100644 --- a/workflow/engine/controllers/admin.php +++ b/workflow/engine/controllers/admin.php @@ -196,15 +196,20 @@ class Admin extends Controller $this->render('extJs'); } - function getSystemInfo () + public function getSystemInfo() { - $this->setResponseType( 'json' ); - $infoList = $this->_getSystemInfo(); - $data = array (); + global $RBAC; + $RBAC->requirePermissions('PM_SETUP'); - foreach ($infoList as $row) { - $data[] = array ('label' => $row[0],'value' => $row[1],'section' => $row[2] - ); + $this->setResponseType('json'); + $data = []; + + foreach ($this->_getSystemInfo() as $row) { + $data[] = [ + 'label' => $row[0], + 'value' => $row[1], + 'section' => $row[2] + ]; } return $data; } diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index d61fbc598..f0c0503d3 100644 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -999,23 +999,25 @@ if (! defined( 'EXECUTE_BY_CRON' )) { } } - if ($bRedirect && !isset($_GET["tracker_designer"])) { - if (substr( SYS_SKIN, 0, 2 ) == 'ux' && SYS_SKIN != 'uxs') { // verify if the current skin is a 'ux' variant + if ($bRedirect && + (!isset($_GET['tracker_designer']) || (!isset($_SESSION['CASE']) && !isset($_SESSION['PIN']))) && + $_GET['tracker_designer'] !== 1) { + if (substr(SYS_SKIN, 0, 2) === 'ux' && SYS_SKIN !== 'uxs') { // verify if the current skin is a 'ux' variant $loginUrl = 'main/login'; - } else if (strpos( $_SERVER['REQUEST_URI'], '/home' ) !== false) { //verify is it is using the uxs skin for simplified interface + } else if (strpos($_SERVER['REQUEST_URI'], '/home') !== false) { //verify is it is using the uxs skin for simplified interface $loginUrl = 'home/login'; } else { $loginUrl = 'login/login'; // just set up the classic login } - if (empty( $_POST )) { - header( 'location: ' . SYS_URI . $loginUrl . '?u=' . urlencode( $_SERVER['REQUEST_URI'] ) ); + if (empty($_POST)) { + header('location: ' . SYS_URI . $loginUrl . '?u=' . urlencode($_SERVER['REQUEST_URI'])); } else { if ($isControllerCall) { - header( "HTTP/1.0 302 session lost in controller" ); + header("HTTP/1.0 302 session lost in controller"); } else { - header( 'location: ' . SYS_URI . $loginUrl ); + header('location: ' . SYS_URI . $loginUrl); } } die(); From 437220f1e562ae6fbe3f0e0df614703e43c158d2 Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Wed, 11 Oct 2017 14:20:59 -0400 Subject: [PATCH 08/22] - correction validated with tracker_designer parameter missing --- workflow/public_html/sysGeneric.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index f0c0503d3..87fbbd425 100644 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -999,9 +999,11 @@ if (! defined( 'EXECUTE_BY_CRON' )) { } } - if ($bRedirect && - (!isset($_GET['tracker_designer']) || (!isset($_SESSION['CASE']) && !isset($_SESSION['PIN']))) && - $_GET['tracker_designer'] !== 1) { + if (isset($_GET['tracker_designer']) && intval($_GET['tracker_designer']) !== 1) { + unset($_GET['tracker_designer']); + } + + if ($bRedirect && (!isset($_GET['tracker_designer']) || (!isset($_SESSION['CASE']) && !isset($_SESSION['PIN'])))) { if (substr(SYS_SKIN, 0, 2) === 'ux' && SYS_SKIN !== 'uxs') { // verify if the current skin is a 'ux' variant $loginUrl = 'main/login'; } else if (strpos($_SERVER['REQUEST_URI'], '/home') !== false) { //verify is it is using the uxs skin for simplified interface From 086cc31982887ee6c2820cf2badf2eba043f995e Mon Sep 17 00:00:00 2001 From: davidcallizaya Date: Fri, 13 Oct 2017 07:57:22 -0400 Subject: [PATCH 09/22] HOR-3921 Fix CSRF security issue. --- workflow/engine/PmBootstrap.php | 3 +- .../engine/methods/login/authentication.php | 6 +- .../methods/login/authenticationSso.php | 7 +- .../processes/processes_Import_Bpmn.php | 1 - .../services/webentry/anonymousLogin.php | 3 +- workflow/engine/methods/users/usersAjax.php | 1 + workflow/engine/skinEngine/skinEngine.php | 3 + .../engine/src/ProcessMaker/Util/helpers.php | 34 ++++++ workflow/engine/templates/users/users.js | 7 ++ workflow/public_html/bootstrap.php | 3 +- workflow/public_html/pmGmail/sso.php | 106 +++++++++--------- workflow/public_html/sysGeneric.php | 6 +- 12 files changed, 112 insertions(+), 68 deletions(-) diff --git a/workflow/engine/PmBootstrap.php b/workflow/engine/PmBootstrap.php index 8c54c057c..0d1e5870e 100644 --- a/workflow/engine/PmBootstrap.php +++ b/workflow/engine/PmBootstrap.php @@ -323,8 +323,7 @@ class PmBootstrap extends Bootstrap require_once 'classes/model/Users.php'; $oUser = new Users(); $aUser = $oUser->load($aSession['USR_UID']); - $_SESSION['USER_LOGGED'] = $aUser['USR_UID']; - $_SESSION['USR_USERNAME'] = $aUser['USR_USERNAME']; + initUserSession($aUser['USR_UID'], $aUser['USR_USERNAME']); $bRedirect = false; $RBAC->initRBAC(); $RBAC->loadUserRolePermission( $RBAC->sSystem, $_SESSION['USER_LOGGED'] ); diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index 6934fe4ca..d6abdd619 100644 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -182,14 +182,12 @@ try { $oPluginRegistry->executeTriggers ( PM_LOGIN , $loginInfo ); } EnterpriseClass::enterpriseSystemUpdate($loginInfo); - $_SESSION['USER_LOGGED'] = $uid; - $_SESSION['USR_USERNAME'] = $usr; + initUserSession($uid, $usr); } else { setcookie("singleSignOn", '1', time() + (24 * 60 * 60), '/'); $uid = $RBAC->userObj->fields['USR_UID']; $usr = $RBAC->userObj->fields['USR_USERNAME']; - $_SESSION['USER_LOGGED'] = $uid; - $_SESSION['USR_USERNAME'] = $usr; + initUserSession($uid, $usr); } //Set default Languaje diff --git a/workflow/engine/methods/login/authenticationSso.php b/workflow/engine/methods/login/authenticationSso.php index 1d8a9cafb..efb6935a5 100644 --- a/workflow/engine/methods/login/authenticationSso.php +++ b/workflow/engine/methods/login/authenticationSso.php @@ -129,9 +129,10 @@ try { setcookie('singleSignOn', '1', time() + (24 * 60 * 60), '/'); - $_SESSION['USER_LOGGED'] = $_SESSION['__USER_LOGGED_SSO__']; - $_SESSION['USR_USERNAME'] = $_SESSION['__USR_USERNAME_SSO__']; - + initUserSession( + $_SESSION['__USER_LOGGED_SSO__'], + $_SESSION['__USR_USERNAME_SSO__'] + ); unset($_SESSION['__USER_LOGGED_SSO__'], $_SESSION['__USR_USERNAME_SSO__']); G::header('Location: ' . $location); diff --git a/workflow/engine/methods/processes/processes_Import_Bpmn.php b/workflow/engine/methods/processes/processes_Import_Bpmn.php index 8e21eb4bd..42733fa65 100644 --- a/workflow/engine/methods/processes/processes_Import_Bpmn.php +++ b/workflow/engine/methods/processes/processes_Import_Bpmn.php @@ -4,7 +4,6 @@ ini_set("max_execution_time", 0); $filter = new InputFilter(); $_FILES = $filter->xssFilterHard($_FILES); -$_SESSION['USER_LOGGED'] = $filter->xssFilterHard($_SESSION['USER_LOGGED']); if (isset($_FILES["PROCESS_FILENAME"]) && pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION) == "bpmn" diff --git a/workflow/engine/methods/services/webentry/anonymousLogin.php b/workflow/engine/methods/services/webentry/anonymousLogin.php index 2b8387149..208cee429 100644 --- a/workflow/engine/methods/services/webentry/anonymousLogin.php +++ b/workflow/engine/methods/services/webentry/anonymousLogin.php @@ -24,8 +24,7 @@ try { throw new \Exception('WebEntry User not found'); } - $_SESSION['USER_LOGGED'] = $userUid; - $_SESSION['USR_USERNAME'] = $userInfo['username']; + initUserSession($userUid, $userInfo['username']); $result = [ 'user_logged' => $userUid, diff --git a/workflow/engine/methods/users/usersAjax.php b/workflow/engine/methods/users/usersAjax.php index 9c97c46ca..2532da641 100644 --- a/workflow/engine/methods/users/usersAjax.php +++ b/workflow/engine/methods/users/usersAjax.php @@ -129,6 +129,7 @@ switch ($_POST['action']) { case 'saveUser': case 'savePersonalInfo': try { + verifyCsrfToken($_POST); $user = new \ProcessMaker\BusinessModel\User(); $form = $_POST; $permissionsToSaveData = $user->getPermissionsForEdit(); diff --git a/workflow/engine/skinEngine/skinEngine.php b/workflow/engine/skinEngine/skinEngine.php index 61f0e37a4..1174d189b 100644 --- a/workflow/engine/skinEngine/skinEngine.php +++ b/workflow/engine/skinEngine/skinEngine.php @@ -261,9 +261,11 @@ class SkinEngine $template = new TemplatePower($templateFile); $template->prepare(); + $header = '' . "\n" . $header; $template->assign('header', $header); $template->assign('styles', $styles); $template->assign('bodyTemplate', $body); + $template->assign('csrf_token', csrfToken()); $doctype = ""; $meta = null; @@ -569,6 +571,7 @@ class SkinEngine $smarty->cache_dir = PATH_SMARTY_CACHE; $smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs'; $smarty->register_function('translate', 'translate'); + $smarty->register_function('csrf_token', 'csrfToken'); $viewVars = $oHeadPublisher->getVars(); diff --git a/workflow/engine/src/ProcessMaker/Util/helpers.php b/workflow/engine/src/ProcessMaker/Util/helpers.php index 828ef8e8d..90747d11f 100644 --- a/workflow/engine/src/ProcessMaker/Util/helpers.php +++ b/workflow/engine/src/ProcessMaker/Util/helpers.php @@ -1,4 +1,8 @@ load($aSession['USR_UID']); - $_SESSION['USER_LOGGED'] = $aUser['USR_UID']; - $_SESSION['USR_USERNAME'] = $aUser['USR_USERNAME']; + initUserSession($aUser['USR_UID'], $aUser['USR_USERNAME']); $bRedirect = false; if (PHP_VERSION < 5.2) { setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly'); diff --git a/workflow/public_html/pmGmail/sso.php b/workflow/public_html/pmGmail/sso.php index b6958096f..346c6a701 100644 --- a/workflow/public_html/pmGmail/sso.php +++ b/workflow/public_html/pmGmail/sso.php @@ -15,7 +15,7 @@ $server = isset($_GET['server']) ? $_GET['server'] : ''; //We do need the server to continue. if( !isset($_GET['server']) || $server == "" ){ - throw new \Exception(Bootstrap::LoadTranslation( 'ID_GMAIL_NEED_SERVER' )); + throw new \Exception(Bootstrap::LoadTranslation( 'ID_GMAIL_NEED_SERVER' )); } //First check if the feature is enabled in the license. @@ -53,75 +53,77 @@ curl_close($curl); $decodedResp = G::json_decode($curl_response); if(!is_object($decodedResp) || property_exists($decodedResp,'error')) { - die($decodedResp->error->message); + die($decodedResp->error->message); } //getting the enviroment $enviroment = $decodedResp->enviroment; if(count($decodedResp->user) > 1){ - echo Bootstrap::LoadTranslation( 'ID_EMAIL_MORE_THAN_ONE_USER' ); - die; + echo Bootstrap::LoadTranslation( 'ID_EMAIL_MORE_THAN_ONE_USER' ); + die; } else if(count($decodedResp->user) < 1){ - echo Bootstrap::LoadTranslation( 'ID_USER_NOT_FOUND' ); - die; + echo Bootstrap::LoadTranslation( 'ID_USER_NOT_FOUND' ); + die; } //validationg if there is an actual PM session if( !isset($_SESSION['USER_LOGGED']) || $_SESSION['USER_LOGGED'] != $decodedResp->user['0']->USR_UID){ - $url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$gmailToken; + $url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$gmailToken; - // init curl object - $ch = curl_init(); - // define options - $optArray = array( + // init curl object + $ch = curl_init(); + // define options + $optArray = array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false - ); - // apply those options - curl_setopt_array($ch, $optArray); - // execute request and get response - $result = curl_exec($ch); - $response = (G::json_decode($result)); - curl_close($ch); + ); + // apply those options + curl_setopt_array($ch, $optArray); + // execute request and get response + $result = curl_exec($ch); + $response = (G::json_decode($result)); + curl_close($ch); - //First validate if this user (mail) corresponds to a PM user - if(isset($response->email) && ($gmail == $response->email)){ - //If the email corresponds I get the username and with the gmail user_id the session is created. - if($decodedResp->user['0']->USR_STATUS == "ACTIVE"){ - //User Active! lets create the Session - @session_destroy(); - session_start(); - session_regenerate_id(); - - if (PHP_VERSION < 5.2) { - setcookie("workspaceSkin", $enviroment, time() + (24 * 60 * 60), "/sys" . $enviroment, "; HttpOnly"); - } else { - setcookie("workspaceSkin", $enviroment, time() + (24 * 60 * 60), "/sys" . $enviroment, null, false, true); - } + //First validate if this user (mail) corresponds to a PM user + if(isset($response->email) && ($gmail == $response->email)){ + //If the email corresponds I get the username and with the gmail user_id the session is created. + if($decodedResp->user['0']->USR_STATUS == "ACTIVE"){ + //User Active! lets create the Session + @session_destroy(); + session_start(); + session_regenerate_id(); - $_SESSION = array(); - $_SESSION['__EE_INSTALLATION__'] = 2; - $_SESSION['__EE_SW_PMLICENSEMANAGER__'] = 1; - $_SESSION['phpLastFileFound'] = ''; - $_SESSION['USERNAME_PREVIOUS1'] = $decodedResp->user['0']->USR_USERNAME; - $_SESSION['USERNAME_PREVIOUS2'] = $decodedResp->user['0']->USR_USERNAME; - $_SESSION['WORKSPACE'] = $pmws; - $_SESSION['USER_LOGGED'] = $decodedResp->user['0']->USR_UID; - $_SESSION['USR_USERNAME'] = $decodedResp->user['0']->USR_USERNAME; - $_SESSION['USR_FULLNAME'] = $decodedResp->user['0']->USR_FIRSTNAME. ' ' .$decodedResp->user['0']->USR_LASTNAME; - $_SESSION['__sw__'] = 1; - //session created - } else { - echo Bootstrap::LoadTranslation( 'ID_USER_NOT_ACTIVE' ); - die; - } - } else { - echo Bootstrap::LoadTranslation( 'ID_USER_DOES_NOT_CORRESPOND' ); - die; - } + if (PHP_VERSION < 5.2) { + setcookie("workspaceSkin", $enviroment, time() + (24 * 60 * 60), "/sys" . $enviroment, "; HttpOnly"); + } else { + setcookie("workspaceSkin", $enviroment, time() + (24 * 60 * 60), "/sys" . $enviroment, null, false, true); + } + + $_SESSION = array(); + $_SESSION['__EE_INSTALLATION__'] = 2; + $_SESSION['__EE_SW_PMLICENSEMANAGER__'] = 1; + $_SESSION['phpLastFileFound'] = ''; + $_SESSION['USERNAME_PREVIOUS1'] = $decodedResp->user['0']->USR_USERNAME; + $_SESSION['USERNAME_PREVIOUS2'] = $decodedResp->user['0']->USR_USERNAME; + $_SESSION['WORKSPACE'] = $pmws; + $_SESSION['USR_FULLNAME'] = $decodedResp->user['0']->USR_FIRSTNAME. ' ' .$decodedResp->user['0']->USR_LASTNAME; + $_SESSION['__sw__'] = 1; + initUserSession( + $decodedResp->user['0']->USR_UID, + $decodedResp->user['0']->USR_USERNAME + ); + //session created + } else { + echo Bootstrap::LoadTranslation( 'ID_USER_NOT_ACTIVE' ); + die; + } + } else { + echo Bootstrap::LoadTranslation( 'ID_USER_DOES_NOT_CORRESPOND' ); + die; + } } $_SESSION['server'] = 'https://' . $server . '/sys'. $pmws .'/en/'.$enviroment.'/'; diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index d61fbc598..8b18f5c18 100644 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -979,8 +979,10 @@ if (! defined( 'EXECUTE_BY_CRON' )) { require_once 'classes/model/Users.php'; $oUser = new Users(); $aUser = $oUser->load( $aSession['USR_UID'] ); - $_SESSION['USER_LOGGED'] = $aUser['USR_UID']; - $_SESSION['USR_USERNAME'] = $aUser['USR_USERNAME']; + initUserSession( + $_SESSION['USER_LOGGED'], + $aUser['USR_USERNAME'] + ); $bRedirect = false; if ((preg_match("/msie/i", $_SERVER ['HTTP_USER_AGENT']) != 1 || $config['ie_cookie_lifetime'] == 1) && From 69b2370ba6f6ce0284ecb703647a08d3326e6131 Mon Sep 17 00:00:00 2001 From: davidcallizaya Date: Fri, 13 Oct 2017 10:49:45 -0400 Subject: [PATCH 10/22] HOR-3921 Fix CR observations. --- workflow/engine/skinEngine/skinEngine.php | 2 +- workflow/engine/src/ProcessMaker/Util/helpers.php | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/workflow/engine/skinEngine/skinEngine.php b/workflow/engine/skinEngine/skinEngine.php index 1174d189b..a774506ed 100644 --- a/workflow/engine/skinEngine/skinEngine.php +++ b/workflow/engine/skinEngine/skinEngine.php @@ -261,7 +261,7 @@ class SkinEngine $template = new TemplatePower($templateFile); $template->prepare(); - $header = '' . "\n" . $header; + $header = '' . "\n" . $header; $template->assign('header', $header); $template->assign('styles', $styles); $template->assign('bodyTemplate', $body); diff --git a/workflow/engine/src/ProcessMaker/Util/helpers.php b/workflow/engine/src/ProcessMaker/Util/helpers.php index 90747d11f..cccfbb9ad 100644 --- a/workflow/engine/src/ProcessMaker/Util/helpers.php +++ b/workflow/engine/src/ProcessMaker/Util/helpers.php @@ -376,6 +376,12 @@ function initUserSession($usrUid, $usrName) $_SESSION['USR_CSRF_TOKEN'] = Str::random(40); } +/** + * Verify token for an incoming request. + * + * @param type $request + * @throws TokenMismatchException + */ function verifyCsrfToken($request) { $headers = getallheaders(); @@ -386,11 +392,18 @@ function verifyCsrfToken($request) : null); $match = is_string($_SESSION['USR_CSRF_TOKEN']) && is_string($token) + && !empty($_SESSION['USR_CSRF_TOKEN']) && hash_equals($_SESSION['USR_CSRF_TOKEN'], $token); if (!$match) { throw new TokenMismatchException(); } } + +/** + * Get the current user CSRF token. + * + * @return string + */ function csrfToken() { return isset($_SESSION['USR_CSRF_TOKEN']) ? $_SESSION['USR_CSRF_TOKEN'] : ''; From 8b2e2147d903438d93c2472e1bc4e459c72f1d3f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 12 Oct 2017 08:24:22 -0400 Subject: [PATCH 11/22] HOR-3834 --- gulliver/methods/genericAjax.php | 722 ++++++++++++++++-------------- gulliver/system/class.xmlform.php | 12 +- 2 files changed, 393 insertions(+), 341 deletions(-) diff --git a/gulliver/methods/genericAjax.php b/gulliver/methods/genericAjax.php index 10e0489b0..f75561d26 100644 --- a/gulliver/methods/genericAjax.php +++ b/gulliver/methods/genericAjax.php @@ -1,228 +1,266 @@ xssFilterHard($_GET,"url"); -$_POST = $filter->xssFilterHard($_POST,"url"); -$_REQUEST = $filter->xssFilterHard($_REQUEST,"url"); -$_SESSION = $filter->xssFilterHard($_SESSION,"url"); +$_GET = $filter->xssFilterHard($_GET, "url"); +$_POST = $filter->xssFilterHard($_POST, "url"); +$_REQUEST = $filter->xssFilterHard($_REQUEST, "url"); +$_SESSION = $filter->xssFilterHard($_SESSION, "url"); -$request = isset($_POST['request'])? $_POST['request']: null; -if( !isset($request) ){ - $request = isset($_GET['request'])? $_GET['request']: null; +$request = isset($_POST['request']) ? $_POST['request'] : null; + +if (!isset($request)) { + $request = isset($_GET['request']) ? $_GET['request'] : null; } -if( isset($request) ){ - switch($request){ - case 'deleteGridRowOnDynaform': - //This code is to update the SESSION variable for dependent fields in grids +if (isset($request)) { + switch ($request) { + case 'deleteGridRowOnDynaform': + //This code is to update the SESSION variable for dependent fields in grids - if (!defined("XMLFORM_AJAX_PATH")) { - define("XMLFORM_AJAX_PATH", PATH_XMLFORM); - } - - if (is_array($_SESSION[$_POST["formID"]][$_POST["gridname"]])) { - if (!is_array($_SESSION[$_POST["formID"]][$_POST["gridname"]])) { - $_SESSION[$_POST["formID"]][$_POST["gridname"]] = (array)$_SESSION[$_POST["formID"]][$_POST["gridname"]]; - } - ksort($_SESSION[$_POST["formID"]][$_POST["gridname"]]); - $oFields = array(); - $initialKey = 1; - - foreach ($_SESSION[$_POST["formID"]][$_POST["gridname"]] as $key => $value) { - if ($key != $_POST["rowpos"]) { - $oFields[$initialKey] = $value; - $initialKey++; - } - } - - unset($_SESSION[$_POST["formID"]][$_POST["gridname"]]); - - $_SESSION[$_POST["formID"]][$_POST["gridname"]] = $oFields; - } - - break; - /** widgets **/ - case 'suggest': - - try { - if(isset($_GET["inputEnconde64"])) { - $_GET['input'] = base64_decode($_GET['input']); - } - $sData = base64_decode(str_rot13($_GET['hash'])); - list($SQL, $DB_UID) = explode('@|', $sData); - // Remplace values for dependent fields - $aDependentFieldsKeys = explode("|", base64_decode(str_rot13($_GET['dependentFieldsKeys']))); - $aDependentFieldsValue = explode("|", $_GET['dependentFieldsValue']); - if ($aDependentFieldsKeys) { - $aDependentFields = array(); - foreach ($aDependentFieldsKeys as $nKey => $sFieldVar ) { - $sKeyDepFields = substr($sFieldVar, 2); - $aDependentFields[$sKeyDepFields] = $aDependentFieldsValue[$nKey]; - } - $SQL = G::replaceDataField($SQL, $aDependentFields); - } - - // Parsed SQL Structure - - $parser = new PHPSQLParser($SQL); - $searchType = $_GET["searchType"]; - - // Verif parsed array - // print_r($parser->parsed); - $SQL = queryModified($parser->parsed, $_GET['input'], $searchType); - - $aRows = Array(); - try { - $con = Propel::getConnection($DB_UID); - $con->begin(); - $rs = $con->executeQuery($SQL); - $con->commit(); - - while ( $rs->next() ) { - array_push($aRows, $rs->getRow()); - } - } catch (SQLException $sqle) { - $con->rollback(); - } - - $input = strtolower( $_GET['input'] ); - $len = strlen($input); - $limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 0; - $aResults = array(); - $count = 0; - $aRows = sortByChar($aRows, $input); - - if ($len){ - for ($i=0;$i= 3: - $id = $aRow[0]; - $value = $aRow[1]; - $info = $aRow[2]; - break; + if (!defined("XMLFORM_AJAX_PATH")) { + define("XMLFORM_AJAX_PATH", PATH_XMLFORM); } + if (is_array($_SESSION[$_POST["formID"]][$_POST["gridname"]])) { + if (!is_array($_SESSION[$_POST["formID"]][$_POST["gridname"]])) { + $_SESSION[$_POST["formID"]][$_POST["gridname"]] = (array)$_SESSION[$_POST["formID"]][$_POST["gridname"]]; + } + ksort($_SESSION[$_POST["formID"]][$_POST["gridname"]]); + $oFields = array(); + $initialKey = 1; - // had to use utf_decode, here - // not necessary if the results are coming from mysql - // - $count++; - $aResults[] = array( "id"=>$id ,"value"=>htmlspecialchars($value), "info"=>htmlspecialchars($info) ); + foreach ($_SESSION[$_POST["formID"]][$_POST["gridname"]] as $key => $value) { + if ($key != $_POST["rowpos"]) { + $oFields[$initialKey] = $value; + $initialKey++; + } + } - } - } + unset($_SESSION[$_POST["formID"]][$_POST["gridname"]]); - header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past - header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified - header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 - header ("Pragma: no-cache"); // HTTP/1.0 + $_SESSION[$_POST["formID"]][$_POST["gridname"]] = $oFields; + } - if (isset($_REQUEST['json'])) { - header("Content-Type: application/json"); - echo Bootstrap::json_encode(array("status" => 0, "results" => $aResults)); - } else { - header("Content-Type: text/xml"); - - echo ""; - for ($i=0;$i".$aResults[$i]['value'].""; - } - echo ""; - } - - } catch(Exception $e){ - $err = $e->getMessage(); - //$err = eregi_replace("[\n|\r|\n\r]", ' ', $err); - $err = preg_replace("[\n|\r|\n\r]", ' ', $err);//Made compatible to PHP 5.3 - echo '{"status":1, "message":"'.$err.'"}'; - } - break; - - - case 'storeInTmp': - if(!isset($_SESSION['USER_LOGGED'])) { - echo "{status: 1, message: \"success\"}"; break; - } - try { - $con = Propel::getConnection($_GET['cnn']); - if($_GET['pkt'] == 'int'){ - - $primaryKeyField = Propel::getDB($_GET['cnn'])->quoteIdentifier($_GET['pk']); - $tableName = Propel::getDB($_GET['cnn'])->quoteIdentifier($_GET['table']); - $rs = $con->executeQuery("SELECT MAX($primaryKeyField) as lastId FROM $tableName"); - $rs->next(); - $row = $rs->getRow(); - $gKey = (int)$row['lastId'] + 1; + /** widgets **/ + case 'suggest': - } else { - $gKey = G::encryptOld(date('Y-m-d H:i:s').'@'.rand()); - } - - // See above. Gross, but it works. - $field = mysql_real_escape_string($_GET['fld']); - $field = str_replace("`", "", $field); - - $query = "INSERT INTO $tableName ($primaryKeyField, $field) VALUES (?, ?)"; // '$gKey', '{$_GET['value']}')"; + try { - $rs = $con->prepareStatement($query); - $rs->set(1, $gKey); - $rs->set(2, $_GET['value']); - $rs->executeQuery(); + if (isset($_GET["inputEnconde64"])) { + $_GET['input'] = base64_decode($_GET['input']); + } - echo "{status: 1, message: \"success\"}"; - } catch (Exception $e) { - $err = $e->getMessage(); - //$err = eregi_replace("[\n|\r|\n\r]", ' ', $err); - $err = preg_replace("[\n|\r|\n\r]", " ", $err); //Made compatible to PHP 5.3 - echo "{status: 0, message: \"" . $err . "\"}"; - } - break; - } + if (!isset($_GET['form']) || !isset($_GET['variable'])) { + throw new Exception('Please contact the system administrator.'); + } + + $gridName = isset($_GET['grid']) ? $_GET['grid'] : ''; + //When is a grid the form parameter include the name of grid + $xmlFile = str_replace($gridName, '', $_GET['form']); + //We will to get the form and variable and the query related + $xmlFile = G::getUIDName(urlDecode($xmlFile)); + $gridName = isset($_GET['grid']) ? $_GET['grid'] : ''; + $xmlFile = str_replace($gridName, '', $xmlFile); + + $myForm = new Form($xmlFile, PATH_DYNAFORM); + $myForm->id = urlDecode($_GET['form']); + + + $bdUid = 'workflow'; + if (isset($_GET['type']) && $_GET['type']==='form' && isset($myForm->fields[$_GET['variable']]->sql)) { + $sqlQuery = $myForm->fields[$_GET['variable']]->sql; + if (isset($myForm->fields[$_GET['variable']]->sqlConnection) && !empty($myForm->fields[$_GET['variable']]->sqlConnection)) { + $bdUid = $myForm->fields[$_GET['variable']]->sqlConnection; + } + } elseif (isset($_GET['type']) && $_GET['type']==='grid' && isset($myForm->fields[$_GET['grid']])) { + foreach ($myForm->fields[$_GET['grid']] as $index => $value) { + if (is_array($value) && isset($value[$_GET['variable']])) { + $newObj = $value[$_GET['variable']]; + $sqlQuery = $newObj->sql; + if (isset($newObj->sqlConnection) && !empty($newObj->sqlConnection)) { + $bdUid = $newObj->sqlConnection; + } + } + } + } else { + throw new Exception('The variable with ' . $_GET['variable'] . ' does not defined in the form.'); + } + + // Replace values for dependent fields + $aDependentFieldsKeys = explode("|", base64_decode(str_rot13($_GET['dependentFieldsKeys']))); + $aDependentFieldsValue = explode("|", $_GET['dependentFieldsValue']); + if ($aDependentFieldsKeys) { + $aDependentFields = array(); + foreach ($aDependentFieldsKeys as $nKey => $sFieldVar) { + $sKeyDepFields = substr($sFieldVar, 2); + $aDependentFields[$sKeyDepFields] = $aDependentFieldsValue[$nKey]; + } + $sqlQuery = G::replaceDataField($sqlQuery, $aDependentFields); + } + + // Parsed SQL Structure + + $parser = new PHPSQLParser($sqlQuery); + $searchType = $_GET["searchType"]; + + // Verify parsed array + $sqlQuery = queryModified($parser->parsed, $_GET['input'], $searchType); + + $aRows = Array(); + try { + $con = Propel::getConnection($bdUid); + $con->begin(); + $rs = $con->executeQuery($sqlQuery); + $con->commit(); + + while ($rs->next()) { + array_push($aRows, $rs->getRow()); + } + } catch (SQLException $sqle) { + $con->rollback(); + } + + $input = strtolower($_GET['input']); + $len = strlen($input); + $limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 0; + $aResults = array(); + $count = 0; + $aRows = sortByChar($aRows, $input); + + if ($len) { + for ($i = 0; $i < count($aRows); $i++) { + $aRow = $aRows[$i]; + $nCols = sizeof($aRow); + + $aRow = array_values($aRow); + switch ($nCols) { + case 1: + $id = $aRow[0]; + $value = $aRow[0]; + $info = ''; + break; + + case 2: + $id = $aRow[0]; + $value = $aRow[1]; + $info = ''; + break; + + case $nCols >= 3: + $id = $aRow[0]; + $value = $aRow[1]; + $info = $aRow[2]; + break; + } + + + // had to use utf_decode, here + // not necessary if the results are coming from mysql + // + $count++; + $aResults[] = array( + "id" => $id, + "value" => htmlspecialchars($value), + "info" => htmlspecialchars($info) + ); + + } + } + + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified + header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 + header("Pragma: no-cache"); // HTTP/1.0 + + if (isset($_REQUEST['json'])) { + header("Content-Type: application/json"); + echo Bootstrap::json_encode(array("status" => 0, "results" => $aResults)); + } else { + header("Content-Type: text/xml"); + + echo ""; + for ($i = 0; $i < count($aResults); $i++) { + echo "" . $aResults[$i]['value'] . ""; + } + echo ""; + } + + } catch (Exception $e) { + $err = $e->getMessage(); + $err = preg_replace("[\n|\r|\n\r]", ' ', $err);//Made compatible to PHP 5.3 + echo '{"status":1, "message":"' . $err . '"}'; + } + break; + + + case 'storeInTmp': + if (!isset($_SESSION['USER_LOGGED'])) { + echo "{status: 1, message: \"success\"}"; + break; + } + try { + $con = Propel::getConnection($_GET['cnn']); + if ($_GET['pkt'] == 'int') { + + $primaryKeyField = Propel::getDB($_GET['cnn'])->quoteIdentifier($_GET['pk']); + $tableName = Propel::getDB($_GET['cnn'])->quoteIdentifier($_GET['table']); + $rs = $con->executeQuery("SELECT MAX($primaryKeyField) as lastId FROM $tableName"); + $rs->next(); + $row = $rs->getRow(); + $gKey = (int)$row['lastId'] + 1; + + } else { + $gKey = G::encryptOld(date('Y-m-d H:i:s') . '@' . rand()); + } + + // See above. Gross, but it works. + $field = mysql_real_escape_string($_GET['fld']); + $field = str_replace("`", "", $field); + + $query = "INSERT INTO $tableName ($primaryKeyField, $field) VALUES (?, ?)"; // '$gKey', '{$_GET['value']}')"; + + $rs = $con->prepareStatement($query); + $rs->set(1, $gKey); + $rs->set(2, $_GET['value']); + $rs->executeQuery(); + + echo "{status: 1, message: \"success\"}"; + } catch (Exception $e) { + $err = $e->getMessage(); + $err = preg_replace("[\n|\r|\n\r]", " ", $err); //Made compatible to PHP 5.3 + echo "{status: 0, message: \"" . $err . "\"}"; + } + break; + } } function sortByChar($aRows, $charSel) { - $aIniChar = array(); - $aRest = array(); - for($i=0; $i= 3: - $value = $aRowOrder[1]; - break; + $aIniChar = array(); + $aRest = array(); + for ($i = 0; $i < count($aRows); $i++) { + $aRow = $aRows[$i]; + $nCols = sizeof($aRow); + $aRowOrder = array_values($aRow); + switch ($nCols) { + case 1: + $value = $aRowOrder[0]; + break; + case 2: + $value = $aRowOrder[1]; + break; + case $nCols >= 3: + $value = $aRowOrder[1]; + break; + } + + if (substr(strtolower($value), 0, 1) == substr(strtolower($charSel), 0, 1)) { + array_push($aIniChar, $aRow); + } else { + array_push($aRest, $aRow); + } } - if(substr(strtolower($value), 0, 1) == substr( strtolower($charSel), 0, 1)){ - array_push($aIniChar, $aRow); - } else { - array_push($aRest, $aRow); - } - } - return array_merge($aIniChar, $aRest); + return array_merge($aIniChar, $aRest); } @@ -234,148 +272,164 @@ function sortByChar($aRows, $charSel) */ function queryModified($sqlParsed, $inputSel = "", $searchType) { - if(!empty($sqlParsed['SELECT'])) { - $sqlSelectOptions = (isset($sqlParsed["OPTIONS"]) && count($sqlParsed["OPTIONS"]) > 0)? implode(" ", $sqlParsed["OPTIONS"]) : null; + if (!empty($sqlParsed['SELECT'])) { + $sqlSelectOptions = (isset($sqlParsed["OPTIONS"]) && count($sqlParsed["OPTIONS"]) > 0) ? implode(" ", + $sqlParsed["OPTIONS"]) : null; - $sqlSelect = "SELECT $sqlSelectOptions "; - $aSelect = $sqlParsed["SELECT"]; - - $sFieldSel = (count($aSelect)>1 ) ? $aSelect[1]['base_expr'] : $aSelect[0]['base_expr']; - foreach($aSelect as $key => $value ) { - if($key != 0) - $sqlSelect .= ", "; - $sAlias = str_replace("`","", $aSelect[$key]['alias']); - $sBaseExpr = $aSelect[$key]['base_expr']; - switch($aSelect[$key]['expr_type']){ - case 'colref' : if($sAlias === $sBaseExpr) - $sqlSelect .= $sAlias; - else - $sqlSelect .= $sBaseExpr . ' AS ' . $sAlias; - break; - case 'expression' : if($sAlias === $sBaseExpr) - $sqlSelect .= $sBaseExpr; - else - $sqlSelect .= $sBaseExpr . ' AS ' . $sAlias; - break; - case 'subquery' : if(strpos($sAlias, $sBaseExpr,0) != 0) - $sqlSelect .= $sAlias; - else - $sqlSelect .= $sBaseExpr . " AS " . $sAlias; - break; - case 'operator' : $sqlSelect .= $sBaseExpr; - break; - default : $sqlSelect .= $sBaseExpr; - break; - } - } - - $sqlFrom = " FROM "; - if(!empty($sqlParsed['FROM'])){ - $aFrom = $sqlParsed['FROM']; - if(count($aFrom) > 0){ - foreach($aFrom as $key => $value ){ - if($key == 0) { - $sqlFrom .= $aFrom[$key]['table'] . (($aFrom[$key]['table'] == $aFrom[$key]['alias'])?"" : " " . $aFrom[$key]['alias']); - } else { - $sqlFrom .= " " . (($aFrom[$key]['join_type']=='JOIN')?"INNER": $aFrom[$key]['join_type']) . " JOIN " . $aFrom[$key]['table'] - . (($aFrom[$key]['table'] == $aFrom[$key]['alias'])?"" : " " . $aFrom[$key]['alias']) . " " . $aFrom[$key]['ref_type'] . " " . $aFrom[$key]['ref_clause'] ; - } + $sqlSelect = "SELECT $sqlSelectOptions "; + $aSelect = $sqlParsed["SELECT"]; + $sFieldSel = (count($aSelect) > 1) ? $aSelect[1]['base_expr'] : $aSelect[0]['base_expr']; + foreach ($aSelect as $key => $value) { + if ($key != 0) { + $sqlSelect .= ", "; + } + $sAlias = str_replace("`", "", $aSelect[$key]['alias']); + $sBaseExpr = $aSelect[$key]['base_expr']; + switch ($aSelect[$key]['expr_type']) { + case 'colref' : + if ($sAlias === $sBaseExpr) { + $sqlSelect .= $sAlias; + } else { + $sqlSelect .= $sBaseExpr . ' AS ' . $sAlias; + } + break; + case 'expression' : + if ($sAlias === $sBaseExpr) { + $sqlSelect .= $sBaseExpr; + } else { + $sqlSelect .= $sBaseExpr . ' AS ' . $sAlias; + } + break; + case 'subquery' : + if (strpos($sAlias, $sBaseExpr, 0) != 0) { + $sqlSelect .= $sAlias; + } else { + $sqlSelect .= $sBaseExpr . " AS " . $sAlias; + } + break; + case 'operator' : + $sqlSelect .= $sBaseExpr; + break; + default : + $sqlSelect .= $sBaseExpr; + break; + } } - } - } - $sqlConditionLike = "LIKE '%" . $inputSel . "%'"; + $sqlFrom = " FROM "; + if (!empty($sqlParsed['FROM'])) { + $aFrom = $sqlParsed['FROM']; + if (count($aFrom) > 0) { + foreach ($aFrom as $key => $value) { + if ($key == 0) { + $sqlFrom .= $aFrom[$key]['table'] . (($aFrom[$key]['table'] == $aFrom[$key]['alias']) ? "" : " " . $aFrom[$key]['alias']); + } else { + $sqlFrom .= " " . (($aFrom[$key]['join_type'] == 'JOIN') ? "INNER" : $aFrom[$key]['join_type']) . " JOIN " . $aFrom[$key]['table'] + . (($aFrom[$key]['table'] == $aFrom[$key]['alias']) ? "" : " " . $aFrom[$key]['alias']) . " " . $aFrom[$key]['ref_type'] . " " . $aFrom[$key]['ref_clause']; + } - switch ($searchType) { - case "searchtype*": - $sqlConditionLike = "LIKE '" . $inputSel . "%'"; - break; - case "*searchtype": - $sqlConditionLike = "LIKE '%" . $inputSel . "'"; - break; - } + } + } + } - if(!empty($sqlParsed['WHERE'])){ - $sqlWhere = " WHERE "; - $aWhere = $sqlParsed['WHERE']; - foreach($aWhere as $key => $value ){ - $sqlWhere .= $value['base_expr'] . " "; - } - $sqlWhere .= " AND " . $sFieldSel . " " . $sqlConditionLike; - } - else { - $sqlWhere = " WHERE " . $sFieldSel . " " . $sqlConditionLike; - } + $sqlConditionLike = "LIKE '%" . $inputSel . "%'"; - $sqlGroupBy = ""; - if(!empty($sqlParsed['GROUP'])){ - $sqlGroupBy = "GROUP BY "; - $aGroup = $sqlParsed['GROUP']; - foreach($aGroup as $key => $value ){ - if($key != 0) - $sqlGroupBy .= ", "; - if($value['direction'] == 'ASC' ) - $sqlGroupBy .= $value['base_expr']; - else - $sqlGroupBy .= $value['base_expr'] . " " . $value['direction']; - } - } + switch ($searchType) { + case "searchtype*": + $sqlConditionLike = "LIKE '" . $inputSel . "%'"; + break; + case "*searchtype": + $sqlConditionLike = "LIKE '%" . $inputSel . "'"; + break; + } - $sqlHaving = ""; - if(!empty($sqlParsed['HAVING'])){ - $sqlHaving = "HAVING "; - $aHaving = $sqlParsed['HAVING']; - foreach($aHaving as $key => $value ){ - $sqlHaving .= $value['base_expr'] . " "; - } - } + if (!empty($sqlParsed['WHERE'])) { + $sqlWhere = " WHERE "; + $aWhere = $sqlParsed['WHERE']; + foreach ($aWhere as $key => $value) { + $sqlWhere .= $value['base_expr'] . " "; + } + $sqlWhere .= " AND " . $sFieldSel . " " . $sqlConditionLike; + } else { + $sqlWhere = " WHERE " . $sFieldSel . " " . $sqlConditionLike; + } - $sqlOrderBy = ""; - if(!empty($sqlParsed['ORDER'])){ - $sqlOrderBy = "ORDER BY "; - $aOrder = $sqlParsed['ORDER']; - foreach($aOrder as $key => $value ){ - if($key != 0) - $sqlOrderBy .= ", "; - if($value['direction'] == 'ASC' ) - $sqlOrderBy .= $value['base_expr']; - else - $sqlOrderBy .= $value['base_expr'] . " " . $value['direction']; - } - } else { - $sqlOrderBy = " ORDER BY " . $sFieldSel; - } + $sqlGroupBy = ""; + if (!empty($sqlParsed['GROUP'])) { + $sqlGroupBy = "GROUP BY "; + $aGroup = $sqlParsed['GROUP']; + foreach ($aGroup as $key => $value) { + if ($key != 0) { + $sqlGroupBy .= ", "; + } + if ($value['direction'] == 'ASC') { + $sqlGroupBy .= $value['base_expr']; + } else { + $sqlGroupBy .= $value['base_expr'] . " " . $value['direction']; + } + } + } - $sqlLimit = ""; - if(!empty($sqlParsed['LIMIT'])){ - $sqlLimit = "LIMIT ". $sqlParsed['LIMIT']['start'] . ", " . $sqlParsed['LIMIT']['end']; - } + $sqlHaving = ""; + if (!empty($sqlParsed['HAVING'])) { + $sqlHaving = "HAVING "; + $aHaving = $sqlParsed['HAVING']; + foreach ($aHaving as $key => $value) { + $sqlHaving .= $value['base_expr'] . " "; + } + } - return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . $sqlOrderBy . $sqlLimit; - } - if(!empty($sqlParsed['CALL'])){ - $sCall = "CALL "; - $aCall = $sqlParsed['CALL']; - foreach($aCall as $key => $value ){ - $sCall .= $value . " "; + $sqlOrderBy = ""; + if (!empty($sqlParsed['ORDER'])) { + $sqlOrderBy = "ORDER BY "; + $aOrder = $sqlParsed['ORDER']; + foreach ($aOrder as $key => $value) { + if ($key != 0) { + $sqlOrderBy .= ", "; + } + if ($value['direction'] == 'ASC') { + $sqlOrderBy .= $value['base_expr']; + } else { + $sqlOrderBy .= $value['base_expr'] . " " . $value['direction']; + } + } + } else { + $sqlOrderBy = " ORDER BY " . $sFieldSel; + } + + $sqlLimit = ""; + if (!empty($sqlParsed['LIMIT'])) { + $sqlLimit = "LIMIT " . $sqlParsed['LIMIT']['start'] . ", " . $sqlParsed['LIMIT']['end']; + } + + return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . $sqlOrderBy . $sqlLimit; } - return $sCall; - } - if(!empty($sqlParsed['EXECUTE'])){ - $sCall = "EXECUTE "; - $aCall = $sqlParsed['EXECUTE']; - foreach($aCall as $key => $value ){ - $sCall .= $value . " "; + if (!empty($sqlParsed['CALL'])) { + $sCall = "CALL "; + $aCall = $sqlParsed['CALL']; + foreach ($aCall as $key => $value) { + $sCall .= $value . " "; + } + + return $sCall; } - return $sCall; - } - if(!empty($sqlParsed[''])){ - $sCall = ""; - $aCall = $sqlParsed['']; - foreach($aCall as $key => $value ){ - $sCall .= $value . " "; + if (!empty($sqlParsed['EXECUTE'])) { + $sCall = "EXECUTE "; + $aCall = $sqlParsed['EXECUTE']; + foreach ($aCall as $key => $value) { + $sCall .= $value . " "; + } + + return $sCall; + } + if (!empty($sqlParsed[''])) { + $sCall = ""; + $aCall = $sqlParsed['']; + foreach ($aCall as $key => $value) { + $sCall .= $value . " "; + } + + return $sCall; } - return $sCall; - } } diff --git a/gulliver/system/class.xmlform.php b/gulliver/system/class.xmlform.php index 43d70a182..614693bff 100644 --- a/gulliver/system/class.xmlform.php +++ b/gulliver/system/class.xmlform.php @@ -1354,8 +1354,7 @@ class XmlFormFieldSuggest extends XmlFormFieldSimpleText } else { $sCallBack = ''; } - - $hash = str_rot13( base64_encode( $this->sql . '@|' . $this->sqlConnection ) ); + $sSQL = $this->sql; $nCount = preg_match_all( '/\@(?:([\@\%\#\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/', $sSQL, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); @@ -1405,8 +1404,8 @@ class XmlFormFieldSuggest extends XmlFormFieldSimpleText $sOptions = 'script: function (input) { '; $sOptions .= ' var inputValue = base64_encode(getField(\'' . $this->name . '_label\').value); '; - $sOptions .= ' return "' . $this->ajaxServer . '?request=suggest&json=true&limit=' . $this->maxresults; - $sOptions .= '&hash=' . $hash . '&dependentFieldsKeys=' . $sResultKeys . '&dependentFieldsValue="'; + $sOptions .= ' return "' . $this->ajaxServer . '?request=suggest&type=form&form=' . $owner->id . '&variable=' . $this->name . '&json=true&limit=' . $this->maxresults; + $sOptions .= '&dependentFieldsKeys=' . $sResultKeys . '&dependentFieldsValue="'; $sOptions .= $depValues . '"&input="+inputValue+"&inputEnconde64=enable&searchType=' . $this->searchType . '";'; @@ -1561,7 +1560,6 @@ class XmlFormFieldSuggest extends XmlFormFieldSimpleText $sCallBack = ''; } - $hash = str_rot13( base64_encode( $this->sql . '@|' . $this->sqlConnection ) ); $sSQL = $this->sql; $nCount = preg_match_all( '/\@(?:([\@\%\#\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/', $sSQL, $match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); @@ -1602,8 +1600,8 @@ class XmlFormFieldSuggest extends XmlFormFieldSimpleText $sOptions .= ' var inputValue = base64_encode(getField(\'' . $rowIdField . '[' . $this->name . '_label\').value); '; - $sOptions .= ' return "' . $this->ajaxServer . '?request=suggest&json=true&limit=' . $this->maxresults; - $sOptions .= '&hash=' . $hash . '&dependentFieldsKeys=' . $sResultKeys . '&dependentFieldsValue="'; + $sOptions .= ' return "' . $this->ajaxServer . '?request=suggest&type=grid&form=' . $owner->id . '&grid=' . $owner->name . '&variable=' . $this->name . '&json=true&limit=' . $this->maxresults; + $sOptions .= '&dependentFieldsKeys=' . $sResultKeys . '&dependentFieldsValue="'; $sOptions .= $depValues . '"&input="+inputValue+"&inputEnconde64=enable&searchType=' . $this->searchType . '";'; $sOptions .= '},'; From be147ee39de804650412c110e1fe692faa2046ec Mon Sep 17 00:00:00 2001 From: davidcallizaya Date: Fri, 13 Oct 2017 16:22:56 -0400 Subject: [PATCH 12/22] HOR-3979 Add PLUGIN_TASK_EXTENDED_PROPERTIES for plugins. --- .../model/map/PluginsRegistryMapBuilder.php | 2 + .../classes/model/om/BasePluginsRegistry.php | 66 +++++++++++++++++-- .../model/om/BasePluginsRegistryPeer.php | 23 ++++--- workflow/engine/config/schema.xml | 1 + workflow/engine/data/mysql/schema.sql | 1 + .../Plugins/Adapters/PluginAdapter.php | 1 + 6 files changed, 81 insertions(+), 13 deletions(-) diff --git a/workflow/engine/classes/model/map/PluginsRegistryMapBuilder.php b/workflow/engine/classes/model/map/PluginsRegistryMapBuilder.php index 7be2b32e9..25cfaf8c6 100644 --- a/workflow/engine/classes/model/map/PluginsRegistryMapBuilder.php +++ b/workflow/engine/classes/model/map/PluginsRegistryMapBuilder.php @@ -109,6 +109,8 @@ class PluginsRegistryMapBuilder $tMap->addColumn('PLUGIN_REST_SERVICE', 'PluginRestService', 'string', CreoleTypes::LONGVARCHAR, false, null); + $tMap->addColumn('PLUGIN_TASK_EXTENDED_PROPERTIES', 'PluginTaskExtendedProperties', 'string', CreoleTypes::LONGVARCHAR, false, null); + $tMap->addColumn('PLUGIN_ATTRIBUTES', 'PluginAttributes', 'string', CreoleTypes::LONGVARCHAR, false, null); } // doBuild() diff --git a/workflow/engine/classes/model/om/BasePluginsRegistry.php b/workflow/engine/classes/model/om/BasePluginsRegistry.php index 042361f6d..d6f0be021 100644 --- a/workflow/engine/classes/model/om/BasePluginsRegistry.php +++ b/workflow/engine/classes/model/om/BasePluginsRegistry.php @@ -159,6 +159,12 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent */ protected $plugin_rest_service; + /** + * The value for the plugin_task_extended_properties field. + * @var string + */ + protected $plugin_task_extended_properties; + /** * The value for the plugin_attributes field. * @var string @@ -421,6 +427,17 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent return $this->plugin_rest_service; } + /** + * Get the [plugin_task_extended_properties] column value. + * + * @return string + */ + public function getPluginTaskExtendedProperties() + { + + return $this->plugin_task_extended_properties; + } + /** * Get the [plugin_attributes] column value. * @@ -916,6 +933,28 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent } // setPluginRestService() + /** + * Set the value of [plugin_task_extended_properties] column. + * + * @param string $v new value + * @return void + */ + public function setPluginTaskExtendedProperties($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->plugin_task_extended_properties !== $v) { + $this->plugin_task_extended_properties = $v; + $this->modifiedColumns[] = PluginsRegistryPeer::PLUGIN_TASK_EXTENDED_PROPERTIES; + } + + } // setPluginTaskExtendedProperties() + /** * Set the value of [plugin_attributes] column. * @@ -999,14 +1038,16 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent $this->plugin_rest_service = $rs->getString($startcol + 21); - $this->plugin_attributes = $rs->getString($startcol + 22); + $this->plugin_task_extended_properties = $rs->getString($startcol + 22); + + $this->plugin_attributes = $rs->getString($startcol + 23); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 23; // 23 = PluginsRegistryPeer::NUM_COLUMNS - PluginsRegistryPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 24; // 24 = PluginsRegistryPeer::NUM_COLUMNS - PluginsRegistryPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating PluginsRegistry object", $e); @@ -1277,6 +1318,9 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent return $this->getPluginRestService(); break; case 22: + return $this->getPluginTaskExtendedProperties(); + break; + case 23: return $this->getPluginAttributes(); break; default: @@ -1321,7 +1365,8 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent $keys[19] => $this->getPluginCss(), $keys[20] => $this->getPluginJs(), $keys[21] => $this->getPluginRestService(), - $keys[22] => $this->getPluginAttributes(), + $keys[22] => $this->getPluginTaskExtendedProperties(), + $keys[23] => $this->getPluginAttributes(), ); return $result; } @@ -1420,6 +1465,9 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent $this->setPluginRestService($value); break; case 22: + $this->setPluginTaskExtendedProperties($value); + break; + case 23: $this->setPluginAttributes($value); break; } // switch() @@ -1534,7 +1582,11 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent } if (array_key_exists($keys[22], $arr)) { - $this->setPluginAttributes($arr[$keys[22]]); + $this->setPluginTaskExtendedProperties($arr[$keys[22]]); + } + + if (array_key_exists($keys[23], $arr)) { + $this->setPluginAttributes($arr[$keys[23]]); } } @@ -1636,6 +1688,10 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent $criteria->add(PluginsRegistryPeer::PLUGIN_REST_SERVICE, $this->plugin_rest_service); } + if ($this->isColumnModified(PluginsRegistryPeer::PLUGIN_TASK_EXTENDED_PROPERTIES)) { + $criteria->add(PluginsRegistryPeer::PLUGIN_TASK_EXTENDED_PROPERTIES, $this->plugin_task_extended_properties); + } + if ($this->isColumnModified(PluginsRegistryPeer::PLUGIN_ATTRIBUTES)) { $criteria->add(PluginsRegistryPeer::PLUGIN_ATTRIBUTES, $this->plugin_attributes); } @@ -1736,6 +1792,8 @@ abstract class BasePluginsRegistry extends BaseObject implements Persistent $copyObj->setPluginRestService($this->plugin_rest_service); + $copyObj->setPluginTaskExtendedProperties($this->plugin_task_extended_properties); + $copyObj->setPluginAttributes($this->plugin_attributes); diff --git a/workflow/engine/classes/model/om/BasePluginsRegistryPeer.php b/workflow/engine/classes/model/om/BasePluginsRegistryPeer.php index 7b900ec09..f6c8814a7 100644 --- a/workflow/engine/classes/model/om/BasePluginsRegistryPeer.php +++ b/workflow/engine/classes/model/om/BasePluginsRegistryPeer.php @@ -25,7 +25,7 @@ abstract class BasePluginsRegistryPeer const CLASS_DEFAULT = 'classes.model.PluginsRegistry'; /** The total number of columns. */ - const NUM_COLUMNS = 23; + const NUM_COLUMNS = 24; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -97,6 +97,9 @@ abstract class BasePluginsRegistryPeer /** the column name for the PLUGIN_REST_SERVICE field */ const PLUGIN_REST_SERVICE = 'PLUGINS_REGISTRY.PLUGIN_REST_SERVICE'; + /** the column name for the PLUGIN_TASK_EXTENDED_PROPERTIES field */ + const PLUGIN_TASK_EXTENDED_PROPERTIES = 'PLUGINS_REGISTRY.PLUGIN_TASK_EXTENDED_PROPERTIES'; + /** the column name for the PLUGIN_ATTRIBUTES field */ const PLUGIN_ATTRIBUTES = 'PLUGINS_REGISTRY.PLUGIN_ATTRIBUTES'; @@ -111,10 +114,10 @@ abstract class BasePluginsRegistryPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('PrUid', 'PluginNamespace', 'PluginDescription', 'PluginClassName', 'PluginFriendlyName', 'PluginFile', 'PluginFolder', 'PluginSetupPage', 'PluginCompanyLogo', 'PluginWorkspaces', 'PluginVersion', 'PluginEnable', 'PluginPrivate', 'PluginMenus', 'PluginFolders', 'PluginTriggers', 'PluginPmFunctions', 'PluginRedirectLogin', 'PluginSteps', 'PluginCss', 'PluginJs', 'PluginRestService', 'PluginAttributes', ), - BasePeer::TYPE_COLNAME => array (PluginsRegistryPeer::PR_UID, PluginsRegistryPeer::PLUGIN_NAMESPACE, PluginsRegistryPeer::PLUGIN_DESCRIPTION, PluginsRegistryPeer::PLUGIN_CLASS_NAME, PluginsRegistryPeer::PLUGIN_FRIENDLY_NAME, PluginsRegistryPeer::PLUGIN_FILE, PluginsRegistryPeer::PLUGIN_FOLDER, PluginsRegistryPeer::PLUGIN_SETUP_PAGE, PluginsRegistryPeer::PLUGIN_COMPANY_LOGO, PluginsRegistryPeer::PLUGIN_WORKSPACES, PluginsRegistryPeer::PLUGIN_VERSION, PluginsRegistryPeer::PLUGIN_ENABLE, PluginsRegistryPeer::PLUGIN_PRIVATE, PluginsRegistryPeer::PLUGIN_MENUS, PluginsRegistryPeer::PLUGIN_FOLDERS, PluginsRegistryPeer::PLUGIN_TRIGGERS, PluginsRegistryPeer::PLUGIN_PM_FUNCTIONS, PluginsRegistryPeer::PLUGIN_REDIRECT_LOGIN, PluginsRegistryPeer::PLUGIN_STEPS, PluginsRegistryPeer::PLUGIN_CSS, PluginsRegistryPeer::PLUGIN_JS, PluginsRegistryPeer::PLUGIN_REST_SERVICE, PluginsRegistryPeer::PLUGIN_ATTRIBUTES, ), - BasePeer::TYPE_FIELDNAME => array ('PR_UID', 'PLUGIN_NAMESPACE', 'PLUGIN_DESCRIPTION', 'PLUGIN_CLASS_NAME', 'PLUGIN_FRIENDLY_NAME', 'PLUGIN_FILE', 'PLUGIN_FOLDER', 'PLUGIN_SETUP_PAGE', 'PLUGIN_COMPANY_LOGO', 'PLUGIN_WORKSPACES', 'PLUGIN_VERSION', 'PLUGIN_ENABLE', 'PLUGIN_PRIVATE', 'PLUGIN_MENUS', 'PLUGIN_FOLDERS', 'PLUGIN_TRIGGERS', 'PLUGIN_PM_FUNCTIONS', 'PLUGIN_REDIRECT_LOGIN', 'PLUGIN_STEPS', 'PLUGIN_CSS', 'PLUGIN_JS', 'PLUGIN_REST_SERVICE', 'PLUGIN_ATTRIBUTES', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, ) + BasePeer::TYPE_PHPNAME => array ('PrUid', 'PluginNamespace', 'PluginDescription', 'PluginClassName', 'PluginFriendlyName', 'PluginFile', 'PluginFolder', 'PluginSetupPage', 'PluginCompanyLogo', 'PluginWorkspaces', 'PluginVersion', 'PluginEnable', 'PluginPrivate', 'PluginMenus', 'PluginFolders', 'PluginTriggers', 'PluginPmFunctions', 'PluginRedirectLogin', 'PluginSteps', 'PluginCss', 'PluginJs', 'PluginRestService', 'PluginTaskExtendedProperties', 'PluginAttributes', ), + BasePeer::TYPE_COLNAME => array (PluginsRegistryPeer::PR_UID, PluginsRegistryPeer::PLUGIN_NAMESPACE, PluginsRegistryPeer::PLUGIN_DESCRIPTION, PluginsRegistryPeer::PLUGIN_CLASS_NAME, PluginsRegistryPeer::PLUGIN_FRIENDLY_NAME, PluginsRegistryPeer::PLUGIN_FILE, PluginsRegistryPeer::PLUGIN_FOLDER, PluginsRegistryPeer::PLUGIN_SETUP_PAGE, PluginsRegistryPeer::PLUGIN_COMPANY_LOGO, PluginsRegistryPeer::PLUGIN_WORKSPACES, PluginsRegistryPeer::PLUGIN_VERSION, PluginsRegistryPeer::PLUGIN_ENABLE, PluginsRegistryPeer::PLUGIN_PRIVATE, PluginsRegistryPeer::PLUGIN_MENUS, PluginsRegistryPeer::PLUGIN_FOLDERS, PluginsRegistryPeer::PLUGIN_TRIGGERS, PluginsRegistryPeer::PLUGIN_PM_FUNCTIONS, PluginsRegistryPeer::PLUGIN_REDIRECT_LOGIN, PluginsRegistryPeer::PLUGIN_STEPS, PluginsRegistryPeer::PLUGIN_CSS, PluginsRegistryPeer::PLUGIN_JS, PluginsRegistryPeer::PLUGIN_REST_SERVICE, PluginsRegistryPeer::PLUGIN_TASK_EXTENDED_PROPERTIES, PluginsRegistryPeer::PLUGIN_ATTRIBUTES, ), + BasePeer::TYPE_FIELDNAME => array ('PR_UID', 'PLUGIN_NAMESPACE', 'PLUGIN_DESCRIPTION', 'PLUGIN_CLASS_NAME', 'PLUGIN_FRIENDLY_NAME', 'PLUGIN_FILE', 'PLUGIN_FOLDER', 'PLUGIN_SETUP_PAGE', 'PLUGIN_COMPANY_LOGO', 'PLUGIN_WORKSPACES', 'PLUGIN_VERSION', 'PLUGIN_ENABLE', 'PLUGIN_PRIVATE', 'PLUGIN_MENUS', 'PLUGIN_FOLDERS', 'PLUGIN_TRIGGERS', 'PLUGIN_PM_FUNCTIONS', 'PLUGIN_REDIRECT_LOGIN', 'PLUGIN_STEPS', 'PLUGIN_CSS', 'PLUGIN_JS', 'PLUGIN_REST_SERVICE', 'PLUGIN_TASK_EXTENDED_PROPERTIES', 'PLUGIN_ATTRIBUTES', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ) ); /** @@ -124,10 +127,10 @@ abstract class BasePluginsRegistryPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('PrUid' => 0, 'PluginNamespace' => 1, 'PluginDescription' => 2, 'PluginClassName' => 3, 'PluginFriendlyName' => 4, 'PluginFile' => 5, 'PluginFolder' => 6, 'PluginSetupPage' => 7, 'PluginCompanyLogo' => 8, 'PluginWorkspaces' => 9, 'PluginVersion' => 10, 'PluginEnable' => 11, 'PluginPrivate' => 12, 'PluginMenus' => 13, 'PluginFolders' => 14, 'PluginTriggers' => 15, 'PluginPmFunctions' => 16, 'PluginRedirectLogin' => 17, 'PluginSteps' => 18, 'PluginCss' => 19, 'PluginJs' => 20, 'PluginRestService' => 21, 'PluginAttributes' => 22, ), - BasePeer::TYPE_COLNAME => array (PluginsRegistryPeer::PR_UID => 0, PluginsRegistryPeer::PLUGIN_NAMESPACE => 1, PluginsRegistryPeer::PLUGIN_DESCRIPTION => 2, PluginsRegistryPeer::PLUGIN_CLASS_NAME => 3, PluginsRegistryPeer::PLUGIN_FRIENDLY_NAME => 4, PluginsRegistryPeer::PLUGIN_FILE => 5, PluginsRegistryPeer::PLUGIN_FOLDER => 6, PluginsRegistryPeer::PLUGIN_SETUP_PAGE => 7, PluginsRegistryPeer::PLUGIN_COMPANY_LOGO => 8, PluginsRegistryPeer::PLUGIN_WORKSPACES => 9, PluginsRegistryPeer::PLUGIN_VERSION => 10, PluginsRegistryPeer::PLUGIN_ENABLE => 11, PluginsRegistryPeer::PLUGIN_PRIVATE => 12, PluginsRegistryPeer::PLUGIN_MENUS => 13, PluginsRegistryPeer::PLUGIN_FOLDERS => 14, PluginsRegistryPeer::PLUGIN_TRIGGERS => 15, PluginsRegistryPeer::PLUGIN_PM_FUNCTIONS => 16, PluginsRegistryPeer::PLUGIN_REDIRECT_LOGIN => 17, PluginsRegistryPeer::PLUGIN_STEPS => 18, PluginsRegistryPeer::PLUGIN_CSS => 19, PluginsRegistryPeer::PLUGIN_JS => 20, PluginsRegistryPeer::PLUGIN_REST_SERVICE => 21, PluginsRegistryPeer::PLUGIN_ATTRIBUTES => 22, ), - BasePeer::TYPE_FIELDNAME => array ('PR_UID' => 0, 'PLUGIN_NAMESPACE' => 1, 'PLUGIN_DESCRIPTION' => 2, 'PLUGIN_CLASS_NAME' => 3, 'PLUGIN_FRIENDLY_NAME' => 4, 'PLUGIN_FILE' => 5, 'PLUGIN_FOLDER' => 6, 'PLUGIN_SETUP_PAGE' => 7, 'PLUGIN_COMPANY_LOGO' => 8, 'PLUGIN_WORKSPACES' => 9, 'PLUGIN_VERSION' => 10, 'PLUGIN_ENABLE' => 11, 'PLUGIN_PRIVATE' => 12, 'PLUGIN_MENUS' => 13, 'PLUGIN_FOLDERS' => 14, 'PLUGIN_TRIGGERS' => 15, 'PLUGIN_PM_FUNCTIONS' => 16, 'PLUGIN_REDIRECT_LOGIN' => 17, 'PLUGIN_STEPS' => 18, 'PLUGIN_CSS' => 19, 'PLUGIN_JS' => 20, 'PLUGIN_REST_SERVICE' => 21, 'PLUGIN_ATTRIBUTES' => 22, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, ) + BasePeer::TYPE_PHPNAME => array ('PrUid' => 0, 'PluginNamespace' => 1, 'PluginDescription' => 2, 'PluginClassName' => 3, 'PluginFriendlyName' => 4, 'PluginFile' => 5, 'PluginFolder' => 6, 'PluginSetupPage' => 7, 'PluginCompanyLogo' => 8, 'PluginWorkspaces' => 9, 'PluginVersion' => 10, 'PluginEnable' => 11, 'PluginPrivate' => 12, 'PluginMenus' => 13, 'PluginFolders' => 14, 'PluginTriggers' => 15, 'PluginPmFunctions' => 16, 'PluginRedirectLogin' => 17, 'PluginSteps' => 18, 'PluginCss' => 19, 'PluginJs' => 20, 'PluginRestService' => 21, 'PluginTaskExtendedProperties' => 22, 'PluginAttributes' => 23, ), + BasePeer::TYPE_COLNAME => array (PluginsRegistryPeer::PR_UID => 0, PluginsRegistryPeer::PLUGIN_NAMESPACE => 1, PluginsRegistryPeer::PLUGIN_DESCRIPTION => 2, PluginsRegistryPeer::PLUGIN_CLASS_NAME => 3, PluginsRegistryPeer::PLUGIN_FRIENDLY_NAME => 4, PluginsRegistryPeer::PLUGIN_FILE => 5, PluginsRegistryPeer::PLUGIN_FOLDER => 6, PluginsRegistryPeer::PLUGIN_SETUP_PAGE => 7, PluginsRegistryPeer::PLUGIN_COMPANY_LOGO => 8, PluginsRegistryPeer::PLUGIN_WORKSPACES => 9, PluginsRegistryPeer::PLUGIN_VERSION => 10, PluginsRegistryPeer::PLUGIN_ENABLE => 11, PluginsRegistryPeer::PLUGIN_PRIVATE => 12, PluginsRegistryPeer::PLUGIN_MENUS => 13, PluginsRegistryPeer::PLUGIN_FOLDERS => 14, PluginsRegistryPeer::PLUGIN_TRIGGERS => 15, PluginsRegistryPeer::PLUGIN_PM_FUNCTIONS => 16, PluginsRegistryPeer::PLUGIN_REDIRECT_LOGIN => 17, PluginsRegistryPeer::PLUGIN_STEPS => 18, PluginsRegistryPeer::PLUGIN_CSS => 19, PluginsRegistryPeer::PLUGIN_JS => 20, PluginsRegistryPeer::PLUGIN_REST_SERVICE => 21, PluginsRegistryPeer::PLUGIN_TASK_EXTENDED_PROPERTIES => 22, PluginsRegistryPeer::PLUGIN_ATTRIBUTES => 23, ), + BasePeer::TYPE_FIELDNAME => array ('PR_UID' => 0, 'PLUGIN_NAMESPACE' => 1, 'PLUGIN_DESCRIPTION' => 2, 'PLUGIN_CLASS_NAME' => 3, 'PLUGIN_FRIENDLY_NAME' => 4, 'PLUGIN_FILE' => 5, 'PLUGIN_FOLDER' => 6, 'PLUGIN_SETUP_PAGE' => 7, 'PLUGIN_COMPANY_LOGO' => 8, 'PLUGIN_WORKSPACES' => 9, 'PLUGIN_VERSION' => 10, 'PLUGIN_ENABLE' => 11, 'PLUGIN_PRIVATE' => 12, 'PLUGIN_MENUS' => 13, 'PLUGIN_FOLDERS' => 14, 'PLUGIN_TRIGGERS' => 15, 'PLUGIN_PM_FUNCTIONS' => 16, 'PLUGIN_REDIRECT_LOGIN' => 17, 'PLUGIN_STEPS' => 18, 'PLUGIN_CSS' => 19, 'PLUGIN_JS' => 20, 'PLUGIN_REST_SERVICE' => 21, 'PLUGIN_TASK_EXTENDED_PROPERTIES' => 22, 'PLUGIN_ATTRIBUTES' => 23, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ) ); /** @@ -272,6 +275,8 @@ abstract class BasePluginsRegistryPeer $criteria->addSelectColumn(PluginsRegistryPeer::PLUGIN_REST_SERVICE); + $criteria->addSelectColumn(PluginsRegistryPeer::PLUGIN_TASK_EXTENDED_PROPERTIES); + $criteria->addSelectColumn(PluginsRegistryPeer::PLUGIN_ATTRIBUTES); } diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index a8dfd703e..276ccb68d 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -5673,6 +5673,7 @@ + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 4d2ebb4e0..0f75d38d0 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -3177,6 +3177,7 @@ CREATE TABLE `PLUGINS_REGISTRY` `PLUGIN_CSS` MEDIUMTEXT, `PLUGIN_JS` MEDIUMTEXT, `PLUGIN_REST_SERVICE` MEDIUMTEXT, + `PLUGIN_TASK_EXTENDED_PROPERTIES` MEDIUMTEXT, `PLUGIN_ATTRIBUTES` MEDIUMTEXT, PRIMARY KEY (`PR_UID`) )ENGINE=InnoDB ; diff --git a/workflow/engine/src/ProcessMaker/Plugins/Adapters/PluginAdapter.php b/workflow/engine/src/ProcessMaker/Plugins/Adapters/PluginAdapter.php index 97118e7c0..9d95a1786 100644 --- a/workflow/engine/src/ProcessMaker/Plugins/Adapters/PluginAdapter.php +++ b/workflow/engine/src/ProcessMaker/Plugins/Adapters/PluginAdapter.php @@ -90,6 +90,7 @@ class PluginAdapter '_aJavascripts' => ['name' => 'PLUGIN_JS', 'type' => 'array'], '_aJs' => ['name' => 'PLUGIN_JS', 'type' => 'array'], '_restServices' => ['name' => 'PLUGIN_REST_SERVICE', 'type' => 'array'], + '_aTaskExtendedProperties' => ['name' => 'PLUGIN_TASK_EXTENDED_PROPERTIES', 'type' => 'array'], ]; /** From cda3c88d98489b68682e78cf3d40827089b980bc Mon Sep 17 00:00:00 2001 From: davidcallizaya Date: Mon, 16 Oct 2017 15:07:23 -0400 Subject: [PATCH 13/22] HOR-3979 Wrong trigger class registration because of class case sensitive names in PluginsRegistry. --- .../src/ProcessMaker/Plugins/PluginRegistry.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php index d521627fb..803b531ac 100644 --- a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php +++ b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php @@ -855,12 +855,19 @@ class PluginRegistry } if ($found) { require_once($classFile); - $sClassName = substr($this->_aPluginDetails[$trigger->getNamespace()]->getClassName(), 0, 1) . + $sClassNameA = substr($this->_aPluginDetails[$trigger->getNamespace()]->getClassName(), 0, 1) . str_replace( - 'plugin', + ['Plugin','plugin'], + 'Class', + substr($this->_aPluginDetails[$trigger->getNamespace()]->getClassName(), 1) + ); + $sClassNameB = substr($this->_aPluginDetails[$trigger->getNamespace()]->getClassName(), 0, 1) . + str_replace( + ['Plugin','plugin'], 'class', substr($this->_aPluginDetails[$trigger->getNamespace()]->getClassName(), 1) ); + $sClassName = class_exists($sClassNameA) ? $sClassNameA : $sClassNameB; $obj = new $sClassName(); $methodName = $trigger->getTriggerName(); $response = $obj->{$methodName}($oData); From 313103f591a2343de725294a2c9474a668163a9b Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Mon, 16 Oct 2017 15:47:36 -0400 Subject: [PATCH 14/22] Add realpath to variable File --- workflow/engine/methods/processes/processes_GetFile.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/methods/processes/processes_GetFile.php b/workflow/engine/methods/processes/processes_GetFile.php index 02f1ac2dd..685519820 100644 --- a/workflow/engine/methods/processes/processes_GetFile.php +++ b/workflow/engine/methods/processes/processes_GetFile.php @@ -5,7 +5,7 @@ $RBAC->allows(basename(__FILE__), $_GET['MAIN_DIRECTORY']); $mainDirectory = !empty($_GET['MAIN_DIRECTORY']) ? $_GET['MAIN_DIRECTORY'] : ''; $proUid = !empty($_GET['PRO_UID']) ? $_GET['PRO_UID'] : ''; $currentDirectory = !empty($_GET['CURRENT_DIRECTORY']) ? realpath($_GET['CURRENT_DIRECTORY']) . PATH_SEP : ''; -$file = !empty($_GET['FILE']) ? $_GET['FILE'] : ''; +$file = !empty($_GET['FILE']) ? realpath($_GET['FILE']) : ''; $extension = (!empty($_GET['sFilextension']) && $_GET['sFilextension'] === 'javascript') ? '.js' : ''; //validated process exists, return throw if not exists. From 229ad1e40f6fbea671afd2481750d44fbf85a5e1 Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Mena Date: Tue, 17 Oct 2017 08:02:50 -0400 Subject: [PATCH 15/22] change permission PM_SETUP TO PM_SETUP_ADVANCE --- workflow/engine/controllers/admin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/controllers/admin.php b/workflow/engine/controllers/admin.php index 76871c03e..8d681f524 100644 --- a/workflow/engine/controllers/admin.php +++ b/workflow/engine/controllers/admin.php @@ -199,7 +199,7 @@ class Admin extends Controller public function getSystemInfo() { global $RBAC; - $RBAC->requirePermissions('PM_SETUP'); + $RBAC->requirePermissions('PM_SETUP_ADVANCE'); $this->setResponseType('json'); $data = []; From adc0c23acf924e7f9cf056d16e49d97623ce302d Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 13 Oct 2017 17:48:08 -0400 Subject: [PATCH 16/22] HOR-3980 --- gulliver/system/class.rbac.php | 2 +- workflow/engine/bin/cron_single.php | 2 +- workflow/engine/classes/class.pmFunctions.php | 2 +- .../triggers/class.pmAlfrescoFunctions.php | 4 +- .../translations/english/processmaker.en.po | 94 +++++++++++-------- workflow/engine/data/mysql/insert.sql | 18 ++-- workflow/engine/menus/setup.php | 4 +- 7 files changed, 74 insertions(+), 52 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index e6ccf3752..97151b2ec 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -338,7 +338,7 @@ class RBAC ), array("PER_UID" => "00000000000000000000000000000038", "PER_CODE" => "PM_UNCANCELCASE", "PER_NAME" => "Undo cancel case" ), array("PER_UID" => "00000000000000000000000000000039", "PER_CODE" => "PM_REST_API_APPLICATIONS", - "PER_NAME" => "Create rest API Aplications" + "PER_NAME" => "Register External Applications" ), array("PER_UID" => "00000000000000000000000000000040", "PER_CODE" => "PM_EDIT_USER_PROFILE_FIRST_NAME", "PER_NAME" => "Edit User profile First Name" ), array("PER_UID" => "00000000000000000000000000000041", "PER_CODE" => "PM_EDIT_USER_PROFILE_LAST_NAME", diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index ae686b118..e3571a3c7 100644 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -819,7 +819,7 @@ function executeCaseSelfService() unset($appFields['APP_PIN']); $case->updateCase($appFields["APP_UID"], $appFields); - saveLog("unassignedCase", "action", "OK Executed tigger to the case $appcacheAppNumber"); + saveLog("unassignedCase", "action", "OK Executed trigger to the case $appcacheAppNumber"); } } diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 14f5896b9..6f751d1bc 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -2098,7 +2098,7 @@ function PMFDerivateCase ($caseId, $delIndex, $bExecuteTriggersBeforeAssignment * @param string(32) | $processId | Process ID | The unique ID of the process. * @param string(32) | $userId | User ID | The unique ID of the user. * @param array | $variables | Array of variables | An associative array of the variables which will be sent to the case. - * @param string(32) | $taskId | The unique ID of the task taha is in the starting group. + * @param string(32) | $taskId | The unique ID of the task that is in the starting group. * @return int | $result | Result | Returns 1 if new case was created successfully; otherwise, returns 0 if an error occurred. * */ diff --git a/workflow/engine/classes/triggers/class.pmAlfrescoFunctions.php b/workflow/engine/classes/triggers/class.pmAlfrescoFunctions.php index bff416aeb..209f617c7 100644 --- a/workflow/engine/classes/triggers/class.pmAlfrescoFunctions.php +++ b/workflow/engine/classes/triggers/class.pmAlfrescoFunctions.php @@ -305,10 +305,10 @@ function getFolderChildren($alfrescoServerUrl, $folderId, $user, $pwd) /** * @method * - * Uplaod file/document in Alfresco Repository + * Upload file/document in Alfresco Repository * * @name uploadDoc - * @label Uplaod file/document in Alfresco Repository + * @label Upload file/document in Alfresco Repository * * @param string | $alfrescoServerUrl | Server name and port where Alfresco exists | http://localhost:8080/alfresco * @param string | $fileSource | File Source diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index bf7890e93..c4a5e3303 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -1750,8 +1750,62 @@ msgstr "Changes saved" # TRANSLATION # LABEL/ID_EMAILS #: LABEL/ID_EMAILS -msgid "EMAILS" -msgstr "EMAILS" +msgid "Emails" +msgstr "Emails" + +# TRANSLATION +# LABEL/ID_NO_PREVIOUS_USR_UID +#: LABEL/ID_NO_PREVIOUS_USR_UID +msgid "The previous task doesn't have any users." +msgstr "The previous task doesn't have any users." + +# TRANSLATION +# LABEL/ID_SET_NO_MANAGER +#: LABEL/ID_SET_NO_MANAGER +msgid "Unassign Manager" +msgstr "Unassign Manager" + +# TRANSLATION +# LABEL/ID_ERROR_EMAIL +#: LABEL/ID_ERROR_EMAIL +msgid "Error" +msgstr "Error" + +# TRANSLATION +# LABEL/ID_CASE_SCHEDULER_CLASSIC +#: LABEL/ID_CASE_SCHEDULER_CLASSIC +msgid "Case Scheduler (classic processes)" +msgstr "Case Scheduler (classic processes)" + +# TRANSLATION +# LABEL/ID_PROCESS_IS_REQUIRED +#: LABEL/ID_PROCESS_IS_REQUIRED +msgid "Process field is required" +msgstr "Process field is required" + +# TRANSLATION +# LABEL/ID_DELEGATE_DATE_FROM +#: LABEL/ID_DELEGATE_DATE_FROM +msgid "Date from" +msgstr "Date from" + +# TRANSLATION +# LABEL/ID_REASSIGN_CONFIRM +#: LABEL/ID_REASSIGN_CONFIRM +msgid "Do you want to reassign the case?" +msgstr "Do you want to reassign the case?" + +# TRANSLATION +# LABEL/ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION +#: LABEL/ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION +msgid "A note has been added to the case" +msgstr "A note has been added to the case" + +# TRANSLATION +# LABEL/ID_EVENTS_CLASSIC +#: LABEL/ID_EVENTS_CLASSIC +msgid "Events (classic processes)" +msgstr "Events (classic processes)" # TRANSLATION # LABEL/ID_REPORT2 @@ -5360,12 +5414,6 @@ msgstr "Can not save, because, there is an Output Document with the same name in msgid "User or password is empty." msgstr "User or password is empty." -# TRANSLATION -# LABEL/ID_DELEGATE_DATE_FROM -#: LABEL/ID_DELEGATE_DATE_FROM -msgid "Delegated date from" -msgstr "Delegated date from" - # TRANSLATION # JAVASCRIPT/ID_DUPLICATE_CATEGORY_NAME #: JAVASCRIPT/ID_DUPLICATE_CATEGORY_NAME @@ -6872,12 +6920,6 @@ msgstr "Last Name" msgid "Case #{APP_NUMBER} was reassigned to user {USER}." msgstr "Case #{APP_NUMBER} was reassigned to user {USER}." -# TRANSLATION -# LABEL/ID_REASSIGN_CONFIRM -#: LABEL/ID_REASSIGN_CONFIRM -msgid "Are you sure to reassign the current case?" -msgstr "Are you sure to reassign the current case?" - # TRANSLATION # LABEL/ID_CASE_PAUSED_SUCCESSFULLY #: LABEL/ID_CASE_PAUSED_SUCCESSFULLY @@ -10508,12 +10550,6 @@ msgstr "From each table select at least one Schema/Data to export." msgid "Do you want to delete the selected skin?" msgstr "Do you want to delete the selected skin?" -# TRANSLATION -# LABEL/ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION -#: LABEL/ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION -msgid "A note has been added to the case." -msgstr "A note has been added to the case." - # TRANSLATION # LABEL/ID_MSG_CANNOT_EXPORT_DEFAULT_SKIN #: LABEL/ID_MSG_CANNOT_EXPORT_DEFAULT_SKIN @@ -18685,12 +18721,6 @@ msgstr "Compare" msgid "You can click on one of the dashboards to view the data or click on the favorite icon to make it your main dashboard." msgstr "You can click on one of the dashboards to view the data or click on the favorite icon to make it your main dashboard." -# TRANSLATION -# LABEL/ID_SET_NO_MANAGER -#: LABEL/ID_SET_NO_MANAGER -msgid "No set Manager" -msgstr "No set Manager" - # TRANSLATION # LABEL/ID_NO_SET_MANAGER_SUCCES #: LABEL/ID_NO_SET_MANAGER_SUCCES @@ -18895,12 +18925,6 @@ msgstr "(Goal value)" msgid "Please enter your credentials below" msgstr "Please enter your credentials below" -# TRANSLATION -# LABEL/ID_ERROR_EMAIL -#: LABEL/ID_ERROR_EMAIL -msgid "Error email" -msgstr "Error email" - # TRANSLATION # LABEL/ID_AVAILABLE_DATABASE #: LABEL/ID_AVAILABLE_DATABASE @@ -27473,12 +27497,6 @@ msgstr "Error: The application {0} is not canceled." msgid "Error: Thread status does not exist for the application {0}." msgstr "Error: Thread status does not exist for the application {0}." -# TRANSLATION -# LABEL/ID_NO_PREVIOUS_USR_UID -#: LABEL/ID_NO_PREVIOUS_USR_UID -msgid "The previuos task doesn't have any users." -msgstr "The previuos task doesn't have any users." - # TRANSLATION # LABEL/ID_WARNING_GATEWAY_CONVERGENT_WITH_CONDITION #: LABEL/ID_WARNING_GATEWAY_CONVERGENT_WITH_CONDITION diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 524d1777b..c36449fee 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -44,6 +44,7 @@ INSERT INTO CONTENT (CON_CATEGORY,CON_PARENT,CON_ID,CON_LANG,CON_VALUE) VALUES ('PER_NAME','','00000000000000000000000000000036','en','Delete process cases'), ('PER_NAME','','00000000000000000000000000000037','en','Edit personal info Calendar'), ('PER_NAME','','00000000000000000000000000000038','en','Undo cancel case'), +('PER_NAME','','00000000000000000000000000000039','en','Register External Applications'), ('PER_NAME','','00000000000000000000000000000040','en','Edit User profile First Name'), ('PER_NAME','','00000000000000000000000000000041','en','Edit User profile Last Name'), ('PER_NAME','','00000000000000000000000000000042','en','Edit User profile Username'), @@ -1730,7 +1731,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'JAVASCRIPT','ID_DBS_NEW','en','Add new Database Source','2014-01-15') , ( 'JAVASCRIPT','ID_DBS_LIST','en','Databases Source List','2014-01-15') , ( 'LABEL','ID_CHANGES_SAVED','en','Changes saved','2014-01-15') , -( 'LABEL','ID_EMAILS','en','EMAILS','2014-01-15') , +( 'LABEL','ID_EMAILS','en','Emails','2017-10-18') , ( 'LABEL','ID_REPORT2','en','Number of cases per process','2014-01-15') , ( 'LABEL','ID_REPORT1','en','Case duration by process and task','2014-01-15') , ( 'LABEL','ID_IUD','en','#','2014-01-15') , @@ -2346,7 +2347,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'JAVASCRIPT','ID_EXIST_INPUTDOCUMENT','en','Can not save, because there is an Input Document with the same name in this process.','2014-01-15') , ( 'JAVASCRIPT','ID_EXIST_OUTPUTDOCUMENT','en','Can not save, because, there is an Output Document with the same name in this process.','2014-01-15') , ( 'LABEL','ID_CASE_SCHEDULER_VALIDATE_ALERT','en','User or password is empty.','2014-10-21') , -( 'LABEL','ID_DELEGATE_DATE_FROM','en','Delegated date from','2014-01-15') , +( 'LABEL','ID_DELEGATE_DATE_FROM','en','Date from','2017-10-18') , ( 'JAVASCRIPT','ID_DUPLICATE_CATEGORY_NAME','en','Duplicate category name.','2014-01-15') ; INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ) VALUES @@ -2606,7 +2607,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_FIRSTNAME','en','First Name','2014-01-15') , ( 'LABEL','ID_LASTNAME','en','Last Name','2014-01-15') , ( 'LABEL','ID_REASSIGNMENT_SUCCESS','en','Case #{APP_NUMBER} was reassigned to user {USER}.','2014-01-15') , -( 'LABEL','ID_REASSIGN_CONFIRM','en','Are you sure to reassign the current case?','2014-01-15') , +( 'LABEL','ID_REASSIGN_CONFIRM','en','Do you want to reassign the case?','2017-10-18') , ( 'LABEL','ID_CASE_PAUSED_SUCCESSFULLY','en','The Case {APP_NUMBER} was paused successfully and it will be unpaused on date {UNPAUSE_DATE}','2014-01-15') , ( 'LABEL','ID_VACATION','en','Vacation','2014-01-15') , ( 'JAVASCRIPT','ID_DB_CONNECTION_ASSIGN','en','You cannot delete this database connection. It is assigned to a step.','2014-01-15') , @@ -3226,7 +3227,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_TABLES_TO_EXPORT','en','Tables To Export','2014-01-15') , ( 'LABEL','ID_PMTABLES_NOTICE_EXPORT','en','From each table select at least one Schema/Data to export.','2014-10-21') , ( 'LABEL','ID_CONFIRM_DELETE_SKIN','en','Do you want to delete the selected skin?','2017-04-21') , -( 'LABEL','ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION','en','A note has been added to the case.','2014-10-21') , +( 'LABEL','ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION','en','A note has been added to the case','2017-10-18') , ( 'LABEL','ID_MSG_CANNOT_EXPORT_DEFAULT_SKIN','en','Default skin can''t be exported. Instead create new one based on default','2014-01-15') , ( 'LABEL','ID_MSG_CANNOT_EXPORT_SKIN','en','Can''t export skin. Server Error','2014-01-15') , ( 'LABEL','ID_NEW_SKIN','en','New Skin','2014-01-15') , @@ -3867,6 +3868,9 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_EVENT_DESCRIPTION','en','Event Description','2014-01-15') , ( 'LABEL','ID_EVENT_ACTION','en','Event Type','2014-01-15') , ( 'LABEL','ID_EVENTS','en','Events','2014-01-15') , +( 'LABEL','ID_EVENTS_CLASSIC','en','Events (classic processes)','2017-13-10') , +( 'LABEL','ID_CASE_SCHEDULER_CLASSIC','en','Case Scheduler (classic processes)','2017-13-10') , +( 'LABEL','ID_PROCESS_IS_REQUIRED','en','Process field is required','2017-13-10') , ( 'LABEL','ID_EVENT_LIST','en','Log of events','2014-01-15') , ( 'LABEL','ID_EMPTY_TYPE','en','Select a Type','2014-01-15') , ( 'LABEL','ID_GRID_PAGE_NO_EVENT_MESSAGE','en','No Events to display','2014-01-15') , @@ -4624,7 +4628,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_DASH_COMPARE_MONTH','en','Compare this month with','2015-05-26') , ( 'LABEL','ID_DASH_COMPARE','en','Compare','2015-03-18') , ( 'LABEL','ID_DASH_CLICK_TO_VIEW','en','You can click on one of the dashboards to view the data or click on the favorite icon to make it your main dashboard.','2015-03-18') , -( 'LABEL','ID_SET_NO_MANAGER','en','No set Manager','2015-03-18') , +( 'LABEL','ID_SET_NO_MANAGER','en','Unassign Manager','2017-10-18') , ( 'LABEL','ID_NO_SET_MANAGER_SUCCES','en','Manager unassigned correctly','2015-03-18') , ( 'LABEL','ID_INDICATOR_PROCESS_REQUIRED','en','The field Process of indicator "{0}" is required.','2015-03-18') , ( 'LABEL','ID_INDICATOR_TITLE_REQUIRED','en','The field Title of indicator "{0}" is required.','2015-03-18') , @@ -4661,7 +4665,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_UNTITLED_TASK','en','Untitled task','2015-04-01') , ( 'LABEL','ID_GOAL_HELP','en','(Goal value)','2015-04-06') , ( 'LABEL','ID_PLEASE_ENTER_CREDENTIALS','en','Please enter your credentials below','2015-04-09') , -( 'LABEL','ID_ERROR_EMAIL','en','Error email','2015-04-20') , +( 'LABEL','ID_ERROR_EMAIL','en','Error','2017-10-18') , ( 'LABEL','ID_AVAILABLE_DATABASE','en','Available.','2015-04-21') , ( 'LABEL','ID_NOT_AVAILABLE_DATABASE','en','Not available.','2015-04-21') , ( 'LABEL','ID_WRONG_USER_PASS','en','Wrong username or password.','2015-04-22') , @@ -6124,7 +6128,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_YOU_DO_NOT_HAVE_PERMISSION','en','Error: You do not have permission.','2016-06-15') , ( 'LABEL','ID_THE_APPLICATION_IS_NOT_CANCELED','en','Error: The application {0} is not canceled.','2016-06-15') , ( 'LABEL','ID_THREAD_STATUS_DOES_NOT_EXIST_FOR_THE_APPLICATION','en','Error: Thread status does not exist for the application {0}.','2016-06-15') , -( 'LABEL','ID_NO_PREVIOUS_USR_UID','en','The previuos task doesn''t have any users.','2016-06-17') , +( 'LABEL','ID_NO_PREVIOUS_USR_UID','en','The previous task doesn''t have any users.','2017-10-18') , ( 'LABEL','ID_WARNING_GATEWAY_CONVERGENT_WITH_CONDITION','en','Your Gateway Convergent has a condition, save again your process.','2016-06-23') , ( 'LABEL','ID_RT_RENAME_NAME_TABLE','en','All references to the previous table name are going to be invalid. Do you really want to change the table name?','2016-06-29') , ( 'LABEL','ID_RT_CONTINUE_TABLE_RENAME','en','Continue renaming the table','2016-06-30') ; diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index 50caffa9a..f0173beef 100644 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -202,10 +202,10 @@ if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') === 1 && $RBAC->userCanAccess('PM_U } if ($RBAC->userCanAccess('PM_SETUP') === 1 && $RBAC->userCanAccess('PM_SETUP_LOGS') === 1) { - $G_TMP_MENU->AddIdRawOption('EVENT', '../events/eventList', G::LoadTranslation('ID_EVENTS'), '', '', 'logs'); + $G_TMP_MENU->AddIdRawOption('EVENT', '../events/eventList', G::LoadTranslation('ID_EVENTS_CLASSIC'), '', '', 'logs'); $G_TMP_MENU->AddIdRawOption( 'LOG_CASE_SCHEDULER', '../cases/cases_Scheduler_Log', - G::LoadTranslation('ID_CASE_SCHEDULER'), + G::LoadTranslation('ID_CASE_SCHEDULER_CLASSIC'), "icon-logs-list.png", '', 'logs' ); $G_TMP_MENU->AddIdRawOption("CRON", "../setup/cron", G::LoadTranslation("ID_CRON_ACTIONS"), null, null, 'logs'); From 3b6e2416ef9f72b6c410ee22df027f5cd3571d97 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 19 Oct 2017 09:46:48 -0400 Subject: [PATCH 17/22] HOR-3841 --- .../engine/content/translations/english/processmaker.en.po | 6 ++++++ workflow/engine/data/mysql/insert.sql | 3 ++- .../src/ProcessMaker/BusinessModel/ProcessPermissions.php | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index bf7890e93..6f16a77e4 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -27869,6 +27869,12 @@ msgstr "NOT IMPORTED" msgid "CANNOT IMPORT" msgstr "CANNOT IMPORT" +# TRANSLATION +# LABEL/ID_SELECT_USER_OR_GROUP +#: LABEL/ID_SELECT_USER_OR_GROUP +msgid "Please select the name of a user or a group in the Group or User field" +msgstr "Please select the name of a user or a group in the Group or User field" + # additionalTables/additionalTablesData.xml?ADD_TAB_NAME # additionalTables/additionalTablesData.xml #: text - ADD_TAB_NAME diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 524d1777b..1ae33de85 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -6185,7 +6185,8 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_CASE_ROUTED_TO','en','Case routed to','2017-06-02'), ( 'LABEL','ID_IMPORTED','en','IMPORTED','2017-10-03'), ( 'LABEL','ID_NOT_IMPORTED','en','NOT IMPORTED','2017-10-03'), -( 'LABEL','ID_CANNOT_IMPORT','en','CANNOT IMPORT','2017-10-03'); +( 'LABEL','ID_CANNOT_IMPORT','en','CANNOT IMPORT','2017-10-03'), +( 'LABEL','ID_SELECT_USER_OR_GROUP','en','Please select the name of a user or a group in the Group or User field','2017-10-19'); INSERT INTO ISO_LOCATION (IC_UID,IL_UID,IL_NAME,IL_NORMAL_NAME,IS_UID) VALUES ('AD','','',' ','') , diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php index d66b6e197..c16555636 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php @@ -381,7 +381,7 @@ class ProcessPermissions { $usr_uid = trim($usr_uid); if ($usr_uid == '') { - throw (new \Exception(\G::LoadTranslation("ID_USER_NOT_EXIST", array('usr_uid','')))); + throw (new \Exception(\G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); } $oUsers = new \Users(); if (!($oUsers->userExists($usr_uid))) { @@ -403,7 +403,7 @@ class ProcessPermissions { $grp_uid = trim($grp_uid); if ($grp_uid == '') { - throw (new \Exception(\G::LoadTranslation("ID_GROUP_NOT_EXIST", array('grp_uid','')))); + throw (new \Exception(\G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); } $oGroup = new \Groupwf(); if (!($oGroup->GroupwfExists($grp_uid))) { From 31b12efbb5cc190a489ccbc17e7c4af38d792214 Mon Sep 17 00:00:00 2001 From: dante Date: Thu, 19 Oct 2017 10:53:56 -0400 Subject: [PATCH 18/22] HOR-3845 --- gulliver/system/class.g.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 477578c59..c96681c48 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1250,9 +1250,9 @@ class G $aAux = explode('/', $filename); $downloadFileName = $aAux[count($aAux) - 1]; } - header('Content-Disposition: attachment; filename="' . $downloadFileName . '"'); + header('Content-Disposition: attachment; filename="' . G::inflect($downloadFileName) . '"'); } else { - header('Content-Disposition: inline; filename="' . $downloadFileName . '"'); + header('Content-Disposition: inline; filename="' . G::inflect($downloadFileName) . '"'); } header('Content-Type: ' . $contentType); From 305585b87414910f4b07101cfbb56e4bcd912f99 Mon Sep 17 00:00:00 2001 From: dante Date: Thu, 19 Oct 2017 10:59:28 -0400 Subject: [PATCH 19/22] change to static self reference form to call methods --- gulliver/system/class.g.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index c96681c48..0351e5e7d 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1250,9 +1250,9 @@ class G $aAux = explode('/', $filename); $downloadFileName = $aAux[count($aAux) - 1]; } - header('Content-Disposition: attachment; filename="' . G::inflect($downloadFileName) . '"'); + header('Content-Disposition: attachment; filename="' . static::inflect($downloadFileName) . '"'); } else { - header('Content-Disposition: inline; filename="' . G::inflect($downloadFileName) . '"'); + header('Content-Disposition: inline; filename="' . static::inflect($downloadFileName) . '"'); } header('Content-Type: ' . $contentType); From 11f01b8453a19230149ed634eb927fdf4f81b317 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 19 Oct 2017 11:44:31 -0400 Subject: [PATCH 20/22] HOR-3841 --- .../translations/english/processmaker.en.po | 12 ++--- .../BusinessModel/ProcessPermissions.php | 7 ++- .../Api/Project/ProcessPermissions.php | 44 +++++-------------- 3 files changed, 22 insertions(+), 41 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 6f16a77e4..09b966a0e 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -1747,6 +1747,12 @@ msgstr "Databases Source List" msgid "Changes saved" msgstr "Changes saved" +# TRANSLATION +# LABEL/ID_SELECT_USER_OR_GROUP +#: LABEL/ID_SELECT_USER_OR_GROUP +msgid "Please select the name of a user or a group in the Group or User field" +msgstr "Please select the name of a user or a group in the Group or User field" + # TRANSLATION # LABEL/ID_EMAILS #: LABEL/ID_EMAILS @@ -27869,12 +27875,6 @@ msgstr "NOT IMPORTED" msgid "CANNOT IMPORT" msgstr "CANNOT IMPORT" -# TRANSLATION -# LABEL/ID_SELECT_USER_OR_GROUP -#: LABEL/ID_SELECT_USER_OR_GROUP -msgid "Please select the name of a user or a group in the Group or User field" -msgstr "Please select the name of a user or a group in the Group or User field" - # additionalTables/additionalTablesData.xml?ADD_TAB_NAME # additionalTables/additionalTablesData.xml #: text - ADD_TAB_NAME diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php index c16555636..ca5a754c1 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php @@ -224,6 +224,9 @@ class ProcessPermissions if ($opUid != '') { $opUid = $this->validateOpUid($opUid); } + if (empty($data['USR_UID']) || $data['USR_UID'] === "null") { + throw (new \Exception(\G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); + } if ($data['OP_USER_RELATION'] == "1") { $this->validateUsrUid($data['USR_UID']); } else { @@ -381,7 +384,7 @@ class ProcessPermissions { $usr_uid = trim($usr_uid); if ($usr_uid == '') { - throw (new \Exception(\G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); + throw (new \Exception(\G::LoadTranslation("ID_USER_NOT_EXIST", array('usr_uid','')))); } $oUsers = new \Users(); if (!($oUsers->userExists($usr_uid))) { @@ -403,7 +406,7 @@ class ProcessPermissions { $grp_uid = trim($grp_uid); if ($grp_uid == '') { - throw (new \Exception(\G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); + throw (new \Exception(\G::LoadTranslation("ID_GROUP_NOT_EXIST", array('grp_uid','')))); } $oGroup = new \Groupwf(); if (!($oGroup->GroupwfExists($grp_uid))) { diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php index 974f18116..7b023a8da 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php @@ -58,44 +58,22 @@ class ProcessPermissions extends Api } /** + * Creates a new Process Permission for a project. + * + * @url POST /:prj_uid/process-permission/ + * @status 201 + * * @param string $prj_uid {@min 1} {@max 32} * @param array $request_data * - * @param string $usr_uid {@from body} {@min 1} {@max 32} - * @param string $op_user_relation {@from body} {@choice 1,2} - * @param string $op_case_status {@from body} {@choice ALL,DRAFT,TO_DO,PAUSED,COMPLETED} - * @param string $op_participate {@from body} {@choice 0,1} - * @param string $op_obj_type {@from body} {@choice ANY,DYNAFORM,ATTACHMENT,INPUT,OUTPUT,CASES_NOTES,MSGS_HISTORY,SUMMARY_FORM} - * @param string $op_action {@from body} {@choice VIEW,BLOCK,DELETE,RESEND} - * @param string $tas_uid {@from body} - * @param string $op_task_source {@from body} - * @param string $dynaforms {@from body} - * @param string $inputs {@from body} - * @param string $outputs {@from body} - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia - * * @return array - * - * @url POST /:prj_uid/process-permission/ - * @status 201 + * @throws RestException + * + * @access protected + * @class AccessControl {@permission PM_FACTORY} */ - public function doPostProcessPermission( - $prj_uid, - $request_data, - $usr_uid, - $op_user_relation, - $op_case_status, - $op_participate, - $op_obj_type, - $op_action, - $tas_uid = '', - $op_task_source = '', - $dynaforms = '', - $inputs = '', - $outputs = '' - ) { + public function doPostProcessPermission($prj_uid, $request_data) + { try { $hiddenFields = array('task_target', 'group_user', 'task_source', 'object_type', 'object', 'participated', 'action' From 2ce253b67f9bd182ae3c24def0301c7222ed3711 Mon Sep 17 00:00:00 2001 From: dheeyi william Date: Tue, 17 Oct 2017 16:18:26 -0400 Subject: [PATCH 21/22] FBI-2187 Translations should be available for PMDynaform --- workflow/engine/classes/model/Language.php | 221 ++++++++++-------- .../engine/templates/cases/pmdynaform.html | 1 + 2 files changed, 126 insertions(+), 96 deletions(-) diff --git a/workflow/engine/classes/model/Language.php b/workflow/engine/classes/model/Language.php index 06e6a69e7..1785e8759 100644 --- a/workflow/engine/classes/model/Language.php +++ b/workflow/engine/classes/model/Language.php @@ -121,34 +121,31 @@ class Language extends BaseLanguage } } - /* + /** * Import a language file * - * @author Erik Amaru Ortiz - * @param string $sLanguageFile - * @param string $bXml - * @return void + * @param string $languageFile + * @param bool $updateXml + * @param bool $updateDB + * @param bool $generateMafe + * @return Object + * @throws Exception */ - public function import ($sLanguageFile, $updateXml = true, $updateDB = true, $generateMafe = true) + public function import($languageFile, $updateXml = true, $updateDB = true, $generateMafe = true) { try { - - //get labels MichelangeloFE + $translation = new Translation(); try { - $oTranslation = new Translation(); - $MichelangeloFE = PATH_HOME . "../workflow/public_html/lib/js"; - if (file_exists($MichelangeloFE)) { - $labels = self::readLabelsDirectory($MichelangeloFE, true); - foreach ($labels as $label) { - $oTranslation->addTranslation('LABEL', 'ID_MAFE_' . G::encryptOld($label), 'en', $label); - } + //We get all MichelangeloFE and PMDynaform translatable labels. + $labels = array_merge(self::getLabelsMafe(), self::getLabelsPMDynaform()); + foreach ($labels as $label) { + $translation->addTranslation('LABEL', 'ID_MAFE_' . G::encryptOld($label), 'en', $label); } } catch (Exception $e) { error_log($e->getMessage()); } - - $POFile = new i18n_PO( $sLanguageFile ); + $POFile = new i18n_PO($languageFile); $POFile->readInit(); $POHeaders = $POFile->getHeaders(); @@ -156,13 +153,13 @@ class Language extends BaseLanguage $langName = $POHeaders['X-Poedit-Language']; //find the lang id $language = new Language(); - $langRecord = $language->findByLanName( $langName ); + $langRecord = $language->findByLanName($langName); - if (! isset( $langRecord['LAN_ID'] )) { - $langRecord = $language->findById( $langName ); - if (! isset( $langRecord['LAN_ID'] )) { + if (!isset($langRecord['LAN_ID'])) { + $langRecord = $language->findById($langName); + if (!isset($langRecord['LAN_ID'])) { //if the language doesn't exist abort - throw new Exception( 'The .po file has a invalid X-Poedit-Language definition!' ); + throw new Exception('The .po file has a invalid X-Poedit-Language definition!'); } } @@ -172,11 +169,11 @@ class Language extends BaseLanguage $countryName = $POHeaders['X-Poedit-Country']; if ($countryName != '.') { $isoCountry = new IsoCountry(); - $countryRecord = $isoCountry->findByIcName( $countryName ); + $countryRecord = $isoCountry->findByIcName($countryName); - if (! isset( $countryRecord['IC_UID'] )) { + if (!isset($countryRecord['IC_UID'])) { //if the language doesn't exist abort - throw new Exception( 'The .po file has a invalid X-Poedit-Country definition!' ); + throw new Exception('The .po file has a invalid X-Poedit-Country definition!'); } $countryID = $countryRecord['IC_UID']; @@ -186,23 +183,22 @@ class Language extends BaseLanguage $LOCALE = $languageID; } - $oTranslation = new Translation(); $countItems = 0; $countItemsSuccess = 0; $errorMsg = ''; while ($rowTranslation = $POFile->getTranslation()) { - $countItems ++; - if (! isset( $POFile->translatorComments[0] ) || ! isset( $POFile->translatorComments[1] ) || ! isset( $POFile->references[0] )) { - throw new Exception( 'The .po file doesn\'t have valid directives for Processmaker!' ); + $countItems++; + if (!isset($POFile->translatorComments[0]) || !isset($POFile->translatorComments[1]) || !isset($POFile->references[0])) { + throw new Exception('The .po file doesn\'t have valid directives for Processmaker!'); } foreach ($POFile->translatorComments as $a => $aux) { - $aux = trim( $aux ); + $aux = trim($aux); if ($aux == 'TRANSLATION') { $identifier = $aux; } else { - $var = explode( '/', $aux ); + $var = explode('/', $aux); if ($var[0] == 'LABEL') { $context = $aux; } @@ -210,10 +206,10 @@ class Language extends BaseLanguage $context = $aux; } } - if (preg_match( '/^([\w-]+)\/([\w-]+\/*[\w-]*\.xml\?)/', $aux, $match )) { + if (preg_match('/^([\w-]+)\/([\w-]+\/*[\w-]*\.xml\?)/', $aux, $match)) { $identifier = $aux; } else { - if (preg_match( '/^([\w-]+)\/([\w-]+\/*[\w-]*\.xml$)/', $aux, $match )) { + if (preg_match('/^([\w-]+)\/([\w-]+\/*[\w-]*\.xml$)/', $aux, $match)) { $context = $aux; } } @@ -224,10 +220,10 @@ class Language extends BaseLanguage // it is a Sql insert on TRANSLATIONS TAble if ($identifier == 'TRANSLATION') { if ($updateDB) { - list ($category, $id) = explode( '/', $context ); - $result = $oTranslation->addTranslation( $category, $id, $LOCALE, trim( stripcslashes( str_replace( chr( 10 ), '', $rowTranslation['msgstr'] ) ) ) ); + list ($category, $id) = explode('/', $context); + $result = $translation->addTranslation($category, $id, $LOCALE, trim(stripcslashes(str_replace(chr(10), '', $rowTranslation['msgstr'])))); if ($result['codError'] == 0) { - $countItemsSuccess ++; + $countItemsSuccess++; } else { $errorMsg .= $id . ': ' . $result['message'] . "\n"; } @@ -236,52 +232,52 @@ class Language extends BaseLanguage elseif ($updateXml) { $xmlForm = $context; //erik: expresion to prevent and hable correctly dropdown values like -1, -2 etc. - preg_match( '/^([\w_]+)\s-\s([\w_]+)\s*-*\s*([\w\W]*)$/', $reference, $match ); + preg_match('/^([\w_]+)\s-\s([\w_]+)\s*-*\s*([\w\W]*)$/', $reference, $match); - if (! file_exists( PATH_XMLFORM . $xmlForm )) { + if (!file_exists(PATH_XMLFORM . $xmlForm)) { $errorMsg .= 'file doesn\'t exist: ' . PATH_XMLFORM . $xmlForm . "\n"; continue; } - if (count( $match ) < 4) { - $near = isset( $rowTranslation['msgid'] ) ? $rowTranslation['msgid'] : (isset( $rowTranslation['msgstr'] ) ? $rowTranslation['msgstr'] : ''); + if (count($match) < 4) { + $near = isset($rowTranslation['msgid']) ? $rowTranslation['msgid'] : (isset($rowTranslation['msgstr']) ? $rowTranslation['msgstr'] : ''); $errorMsg .= "Invalid Translation reference: \"$reference\", near -> " . strip_tags($near) . "\n"; continue; } - $dynaform = new DynaformHandler( PATH_XMLFORM . $xmlForm ); + $dynaform = new DynaformHandler(PATH_XMLFORM . $xmlForm); $fieldName = $match[2]; - $codes = explode( '-', $reference ); + $codes = explode('-', $reference); - if (sizeof( $codes ) == 2) { + if (sizeof($codes) == 2) { //is a normal node - $dynaform->addChilds( $fieldName, Array ($LOCALE => stripcslashes( str_replace( chr( 10 ), '', $rowTranslation['msgstr'] ) ) - ) ); - } elseif (sizeof( $codes ) > 2) { + $dynaform->addChilds($fieldName, Array($LOCALE => stripcslashes(str_replace(chr(10), '', $rowTranslation['msgstr'])) + )); + } elseif (sizeof($codes) > 2) { //is a node child for a language node $name = $match[3] == "''" ? '' : $match[3]; - $childNode = Array (Array ('name' => 'option','value' => $rowTranslation['msgstr'],'attributes' => Array ('name' => $name + $childNode = Array(Array('name' => 'option', 'value' => $rowTranslation['msgstr'], 'attributes' => Array('name' => $name ) ) ); - $dynaform->addChilds( $fieldName, Array ($LOCALE => null - ), $childNode ); + $dynaform->addChilds($fieldName, Array($LOCALE => null + ), $childNode); } - $countItemsSuccess ++; + $countItemsSuccess++; } } - $oLanguage = new Language(); - $oLanguage->update( array ('LAN_ID' => $languageID,'LAN_ENABLED' => '1' - ) ); + $language = new Language(); + $language->update(array('LAN_ID' => $languageID, 'LAN_ENABLED' => '1' + )); if ($updateXml) { $trn = new Translation(); - $trn->generateFileTranslation( $LOCALE ); - $trn->addTranslationEnvironment( $LOCALE, $POHeaders, $countItemsSuccess ); + $trn->generateFileTranslation($LOCALE); + $trn->addTranslationEnvironment($LOCALE, $POHeaders, $countItemsSuccess); } if ($generateMafe) { @@ -297,26 +293,26 @@ class Language extends BaseLanguage $results->headers = $POHeaders; $results->errMsg = $errorMsg; - G::auditLog("UploadLanguage", "Language: ".$languageID); + G::auditLog("UploadLanguage", "Language: " . $languageID); return $results; - } catch (Exception $oError) { - throw ($oError); + } catch (Exception $error) { + throw ($error); } } - //export + /** + * Export language to Download + * @throws Exception + */ public function export () { - //get labels MichelangeloFE + $translation = new Translation(); try { - $oTranslation = new Translation(); - $MichelangeloFE = PATH_HOME . "../workflow/public_html/lib/js"; - if (file_exists($MichelangeloFE)) { - $labels = self::readLabelsDirectory($MichelangeloFE, true); - foreach ($labels as $label) { - $oTranslation->addTranslation('LABEL', 'ID_MAFE_' . G::encryptOld($label), 'en', $label); - } + //We get all MichelangeloFE and PMDynaform translatable labels. + $labels = array_merge(self::getLabelsMafe(), self::getLabelsPMDynaform()); + foreach ($labels as $label) { + $translation->addTranslation('LABEL', 'ID_MAFE_' . G::encryptOld($label), 'en', $label); } } catch (Exception $e) { error_log($e->getMessage()); @@ -412,8 +408,7 @@ class Language extends BaseLanguage // IF the translations id "TRN_ID" has invalid characteres or has not accepted categories if ($sTestResult[0] !== $trnCategory || ($trnCategory != 'LABEL' && $trnCategory != 'JAVASCRIPT')) { - $oTranslation = new Translation(); - $oTranslation->remove( $aRow1['TRN_CATEGORY'], $aRow1['TRN_ID'], 'en' ); //remove not accepted translations + $translation->remove( $aRow1['TRN_CATEGORY'], $aRow1['TRN_ID'], 'en' ); //remove not accepted translations continue; //jump to next iteration } @@ -561,6 +556,67 @@ class Language extends BaseLanguage G::auditLog("ExportLanguage", "Language: ".$_GET['LOCALE']); G::streamFile( $sPOFile, true ); } + + /** + * Get Labels MAFE (Michelangelo Project) + * @return array + */ + public static function getLabelsMafe() + { + $labels = []; + $buildhash = PATH_HTML . "lib/buildhash"; + if (!file_exists($buildhash)) { + throw new RuntimeException("Unable to generate labels for MAFE!.\nMissing file '{$buildhash}'."); + } + $buildhash = file_get_contents($buildhash); + + $michelangeloFE = PATH_HTML . "lib/js"; + $pathFileMafe = array_pop(glob($michelangeloFE . '/' . '*' . $buildhash . '*', GLOB_BRACE)); + if (file_exists($pathFileMafe) && is_readable($pathFileMafe)) { + $labels = self::readLabelsDirectory($pathFileMafe, true); + } + return $labels; + } + + /** + * Get Labels PMDynaform (PMDynaform Project) + * @return array + */ + public static function getLabelsPMDynaform() + { + $labels = []; + $pathFilePMDynaform = PATH_HTML . "lib/pmdynaform/build/js/PMDynaform.js"; + if (file_exists($pathFilePMDynaform) && is_readable($pathFilePMDynaform)) { + $labels = self::readLabelsDirectory($pathFilePMDynaform, true); + } + return $labels; + } + + /** + * We read all labels + * @param $path + * @param bool $unique + * @return array + */ + public static function readLabelsDirectory($path, $unique = false) + { + $labels = []; + if (is_file($path)) { + $info = pathinfo($path); + if (strtolower($info["extension"]) === "js") { + $file = file_get_contents($path); + //search string 'xx\'xx\'xx'.translate() + $labels = array_merge($labels, self::readLabelsFile($file, "'")); + //search string "xx\"xx\"xx".translate() + $labels = array_merge($labels, self::readLabelsFile($file, "\"")); + } + } + if ($unique) { + $labels = array_unique($labels); + } + return $labels; + } + public function updateLanguagePlugin ($plugin, $idLanguage) { if (!file_exists(PATH_PLUGINS . $plugin)) { @@ -835,33 +891,6 @@ class Language extends BaseLanguage } //end foreach } } - - public static function readLabelsDirectory($path, $unique = false) - { - $labels = array(); - $items = opendir($path); - while (false !== ($item = readdir($items))) { - $a = $path . "/" . $item; - if ($item !== "." && $item !== ".." && is_dir($a)) { - $labels = array_merge($labels, self::readLabelsDirectory($a, false)); - } - if (is_file($a)) { - $info = pathinfo($a); - if ($info["extension"] === "js" || $info["extension"] === "JS") { - $file = file_get_contents($a); - //search string 'xx\'xx\'xx'.translate() - $labels = array_merge($labels, self::readLabelsFile($file, "'")); - //search string "xx\"xx\"xx".translate() - $labels = array_merge($labels, self::readLabelsFile($file, "\"")); - } - } - } - if ($unique) { - $labels = array_unique($labels); - } - closedir($items); - return $labels; - } public static function readLabelsFile($file, $sep) { diff --git a/workflow/engine/templates/cases/pmdynaform.html b/workflow/engine/templates/cases/pmdynaform.html index e593e3597..fd91d6578 100644 --- a/workflow/engine/templates/cases/pmdynaform.html +++ b/workflow/engine/templates/cases/pmdynaform.html @@ -12,6 +12,7 @@ + From 4ec3e2a90a8a70732f2ba81a0892377b61944bf6 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 19 Oct 2017 15:54:42 -0400 Subject: [PATCH 22/22] HOR-3841 --- .../src/ProcessMaker/BusinessModel/ProcessPermissions.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php index ca5a754c1..862907bd8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php @@ -5,6 +5,7 @@ use Behat\Behat\Exception\Exception; use \G; use \Criteria; use \ObjectPermissionPeer; +use \Exception as StandardException; /** * @author Brayan Pereyra (Cochalo) @@ -224,8 +225,8 @@ class ProcessPermissions if ($opUid != '') { $opUid = $this->validateOpUid($opUid); } - if (empty($data['USR_UID']) || $data['USR_UID'] === "null") { - throw (new \Exception(\G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); + if (empty($data['USR_UID']) || (isset($data['USR_UID']) && $data['USR_UID'] === "null")) { + throw (new StandardException(G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); } if ($data['OP_USER_RELATION'] == "1") { $this->validateUsrUid($data['USR_UID']);