restler->apiMethodInfo->methodName; $arrayArgs = $this->restler->apiMethodInfo->arguments; switch ($methodName) { case 'doIfAlreadyRoute': $applicationUid = $this->parameters[$arrayArgs['app_uid']]; $delIndex = $this->parameters[$arrayArgs['cas_index']]; $userUid = $this->getUserId(); //Check if the user has the case $appDelegation = new \AppDelegation(); $aCurUser = $appDelegation->getCurrentUsers($applicationUid, $delIndex); if (!empty($aCurUser) && in_array($userUid, $aCurUser)) { return true; } return false; break; } return false; } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } /** * Constructor of the class * * return void */ public function __construct() { try { /** * The variable $RBAC can be defined as follows: * * $RBAC = new \stdClass(); * $RBAC->aUserInfo['USER_INFO'] = ["USR_UID" => $this->getUserId()]; * * Please consider removing the use of this variable in model class, * or perform a corresponding improvement. */ global $RBAC; if (!isset($RBAC)) { $RBAC = \RBAC::getSingleton(PATH_DATA, session_id()); $RBAC->sSystem = 'PROCESSMAKER'; $RBAC->initRBAC(); $RBAC->loadUserRolePermission($RBAC->sSystem, $this->getUserId()); } } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } /** * Get list counters * @return array * * @copyright Colosa - Bolivia * * @url GET /counters */ public function countersCases () { try { $userId = $this->getUserId(); /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $list = new \ProcessMaker\BusinessModel\Lists(); $arrayListCounter = $list->getCounters($userId); } else { /*----------------------------------********---------------------------------*/ $case = new \ProcessMaker\BusinessModel\Cases(); $arrayListCounter = $case->getListCounters( $userId, ['to_do', 'draft', 'sent', 'selfservice', 'paused', 'completed', 'cancelled'] ); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ $result = $this->parserCountersCases($arrayListCounter); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $result; } public function parserCountersCases ($data) { $structure = array( "CASES_INBOX" => "toDo", "CASES_DRAFT" => "draft", "CASES_CANCELLED" => "cancelled", "CASES_SENT" => "participated", "CASES_PAUSED" => "paused", "CASES_COMPLETED" => "completed", "CASES_SELFSERVICE" => "unassigned", 'to_do' => 'toDo', 'draft' => 'draft', 'cancelled' => 'cancelled', 'sent' => 'participated', 'paused' => 'paused', 'completed' => 'completed', 'selfservice' => 'unassigned' ); $response = array(); foreach ($data as $key => $counterList) { if(isset($structure[$counterList['item']])){ $name = $structure[$counterList['item']]; $response[$name] = $counterList['count']; } else { if (isset($structure[$key])) { $response[$structure[$key]] = $counterList; } } } return $response; } /** * Get list process start * @return array * * @copyright Colosa - Bolivia * * @url GET /start-case */ public function getProcessListStartCase () { try { $oMobile = new \ProcessMaker\BusinessModel\Light(); $processListStartCase = $oMobile->getProcessListStartCase($this->getUserId()); $startCase = $processListStartCase; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $startCase; } /** * Get list Case To Do * * @copyright Colosa - Bolivia * * @url GET /todo */ public function doGetCasesListToDo( $start = 0, $limit = 10, $sort = 'DEL_DELEGATE_DATE', $dir = 'DESC', $cat_uid = '', $pro_uid = '', $search = '', $filter = '', $date_from = '', $date_to = '', $newerThan = '', $oldestthan ='' ) { try { if (preg_match($this->regexNull, $newerThan)) { return []; } $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'todo'; $dataList['paged'] = true; $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['sort'] = $sort; $dataList['dir'] = $dir; $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; $dataList['filter'] = $filter; $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['newerThan'] = $newerThan; $dataList['oldestthan'] = $oldestthan; Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601); $dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601); /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $list = new \ProcessMaker\BusinessModel\Lists(); $response = $list->getList('inbox', $dataList); } else { /*----------------------------------********---------------------------------*/ $case = new \ProcessMaker\BusinessModel\Cases(); $response = $case->getList($dataList); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ //Complete the list information with some task properties $response['data'] = $this->addTaskProperties($response['data']); $result = $this->parserDataTodo($response['data']); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function addTaskProperties($data){ $task = new \ProcessMaker\BusinessModel\Task(); foreach ($data as $key => $value) { $valueUpper = array_change_key_case($value, CASE_UPPER); list($data[$key]['TAS_OFFLINE'], $data[$key]['TAS_AUTO_ROOT']) = $task->getColumnValues($valueUpper['PRO_UID'], $valueUpper['TAS_UID'], array('TAS_OFFLINE', 'TAS_AUTO_ROOT')); } return $data; } public function parserDataTodo ($data) { $structure = array( 'APP_UID' => 'caseId', 'APP_TITLE' => 'caseTitle', 'APP_NUMBER' => 'caseNumber', 'APP_UPDATE_DATE' => 'date', 'DEL_TASK_DUE_DATE' => 'dueDate', 'DEL_INDEX' => 'delIndex', 'DEL_DELEGATE_DATE' => 'delegateDate', 'DEL_RISK_DATE' => 'delRiskDate', 'user' => array( 'USR_UID' => 'userId' ), 'prevUser' => array( 'PREVIOUS_USR_UID' => 'userId', 'PREVIOUS_USR_FIRSTNAME' => 'firstName', 'PREVIOUS_USR_LASTNAME' => 'lastName', 'PREVIOUS_USR_USERNAME' => 'userName', ), 'process' => array( 'PRO_UID' => 'processId', 'APP_PRO_TITLE' => 'name' ), 'task' => array( 'TAS_UID' => 'taskId', 'APP_TAS_TITLE' => 'name', 'TAS_OFFLINE' => 'offlineEnabled', 'TAS_AUTO_ROOT' => 'autoRoot' ) ); $response = $this->replaceFields($data, $structure); return $response; } /** * Get list Case Draft * * @copyright Colosa - Bolivia * * @url GET /draft */ public function doGetCasesListDraft( $start = 0, $limit = 10, $sort = 'DEL_DELEGATE_DATE', $dir = 'DESC', $cat_uid = '', $pro_uid = '', $search = '', $newerThan = '', $oldestthan ='' ) { try { if (preg_match($this->regexNull, $newerThan)) { return []; } $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'draft'; $dataList['paged'] = true; $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['sort'] = $sort; $dataList['dir'] = $dir; $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; $dataList['newerThan'] = $newerThan; $dataList['oldestthan'] = $oldestthan; Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601); $dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601); /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $list = new \ProcessMaker\BusinessModel\Lists(); $response = $list->getList('inbox', $dataList); } else { /*----------------------------------********---------------------------------*/ $case = new \ProcessMaker\BusinessModel\Cases(); $response = $case->getList($dataList); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ //Complete the list information with some task properties $response['data'] = $this->addTaskProperties($response['data']); $result = $this->parserDataDraft($response['data']); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function parserDataDraft ($data) { $structure = array( 'APP_UID' => 'caseId', 'APP_TITLE' => 'caseTitle', 'APP_NUMBER' => 'caseNumber', 'APP_UPDATE_DATE' => 'date', 'DEL_TASK_DUE_DATE' => 'dueDate', 'DEL_INDEX' => 'delIndex', 'DEL_DELEGATE_DATE' => 'delegateDate', 'user' => array( 'USR_UID' => 'userId' ), 'currentUser' => array( 'USR_UID' => 'userId', 'USR_FIRSTNAME' => 'firstName', 'USR_LASTNAME' => 'lastName', 'USR_USERNAME' => 'userName', ), 'process' => array( 'PRO_UID' => 'processId', 'APP_PRO_TITLE' => 'name' ), 'task' => array( 'TAS_UID' => 'taskId', 'APP_TAS_TITLE' => 'name', 'TAS_OFFLINE' => 'offlineEnabled', 'TAS_AUTO_ROOT' => 'autoRoot' ) ); $response = $this->replaceFields($data, $structure); return $response; } /** * Get list Cases Participated * * @copyright Colosa - Bolivia * * @url GET /participated */ public function doGetCasesListParticipated( $count = true, $paged = true, $start = 0, $limit = 10, $sort = 'DEL_DELEGATE_DATE', $dir = 'DESC', $category = '', $process = '', $search = '', $filter = '', $date_from = '', $date_to = '', $newerThan = '', $oldestthan ='' ) { try { if (preg_match($this->regexNull, $newerThan)) { return []; } $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'sent'; $dataList['paged'] = $paged; $dataList['count'] = $count; $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['sort'] = $sort; $dataList['dir'] = $dir; $dataList['category'] = $category; $dataList['process'] = $process; $dataList['search'] = $search; $dataList['filter'] = $filter; $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['newerThan'] = $newerThan; $dataList['oldestthan'] = $oldestthan; Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601); $dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601); /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $list = new \ProcessMaker\BusinessModel\Lists(); $response = $list->getList('participated_last', $dataList); } else { /*----------------------------------********---------------------------------*/ $case = new \ProcessMaker\BusinessModel\Cases(); $response = $case->getList($dataList); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ $result = $this->parserDataParticipated($response['data']); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function parserDataParticipated ($data) { $structure = array( 'APP_UID' => 'caseId', 'APP_TITLE' => 'caseTitle', 'APP_NUMBER' => 'caseNumber', 'APP_UPDATE_DATE' => 'date', 'DEL_TASK_DUE_DATE' => 'dueDate', 'DEL_INDEX' => 'delIndex', 'DEL_DELEGATE_DATE' => 'delegateDate', 'currentUser' => array( 'USR_UID' => 'userId', 'USR_FIRSTNAME' => 'firstName', 'USR_LASTNAME' => 'lastName', 'USR_USERNAME' => 'userName', ), 'prevUser' => array( 'PREVIOUS_USR_UID' => 'userId', 'PREVIOUS_USR_FIRSTNAME' => 'firstName', 'PREVIOUS_USR_LASTNAME' => 'lastName', 'PREVIOUS_USR_USERNAME' => 'userName', ), 'process' => array( 'PRO_UID' => 'processId', 'APP_PRO_TITLE' => 'name' ), 'task' => array( 'TAS_UID' => 'taskId', 'APP_TAS_TITLE' => 'name' ) ); $response = $this->replaceFields($data, $structure); return $response; } /** * Get list Cases Paused * * @copyright Colosa - Bolivia * * @url GET /paused */ public function doGetCasesListPaused( $start = 0, $limit = 10, $sort = 'APP_PAUSED_DATE', $dir = 'DESC', $cat_uid = '', $pro_uid = '', $search = '', $filter = '', $date_from = '', $date_to = '', $newerThan = '', $oldestthan = '' ) { try { if (preg_match($this->regexNull, $newerThan)) { return []; } $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'paused'; $dataList['paged'] = true; $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['sort'] = $sort; $dataList['dir'] = $dir; $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; $dataList['filter'] = $filter; $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['newerThan'] = $newerThan; $dataList['oldestthan'] = $oldestthan; /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $list = new \ProcessMaker\BusinessModel\Lists(); $response = $list->getList('paused', $dataList); } else { /*----------------------------------********---------------------------------*/ $case = new \ProcessMaker\BusinessModel\Cases(); $response = $case->getList($dataList); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ $result = $this->parserDataParticipated($response['data']); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function parserDataPaused ($data) { $structure = array( 'APP_UID' => 'caseId', 'APP_TITLE' => 'caseTitle', 'APP_NUMBER' => 'caseNumber', 'APP_UPDATE_DATE' => 'date', 'DEL_TASK_DUE_DATE' => 'dueDate', 'DEL_INDEX' => 'delIndex', 'DEL_DELEGATE_DATE' => 'delegateDate', 'currentUser' => array( 'USR_UID' => 'userId', 'DEL_CURRENT_USR_FIRSTNAME' => 'firstName', 'DEL_CURRENT_USR_LASTNAME' => 'lastName', 'DEL_CURRENT_USR_USERNAME' => 'userName', ), 'prevUser' => array( 'DEL_PREVIOUS_USR_UID' => 'userId', 'DEL_PREVIOUS_USR_FIRSTNAME' => 'firstName', 'DEL_PREVIOUS_USR_LASTNAME' => 'lastName', 'DEL_PREVIOUS_USR_USERNAME' => 'userName', ), 'process' => array( 'PRO_UID' => 'processId', 'APP_PRO_TITLE' => 'name' ), 'task' => array( 'TAS_UID' => 'taskId', 'APP_TAS_TITLE' => 'name' ) ); $response = $this->replaceFields($data, $structure); return $response; } /** * Get list Cases Unassigned * * @copyright Colosa - Bolivia * * @url GET /unassigned */ public function doGetCasesListUnassigned( $start = 0, $limit = 0, $sort = 'APP_CACHE_VIEW.APP_NUMBER', $dir = 'DESC', $cat_uid = '', $pro_uid = '', $search = '', $newerThan = '', $oldestthan ='' ) { try { if (preg_match($this->regexNull, $newerThan)) { return []; } $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'unassigned'; $dataList['paged'] = false; $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['sort'] = $sort; $dataList['dir'] = $dir; $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; $dataList['newerThan'] = $newerThan; $dataList['oldestthan'] = $oldestthan; Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601); $dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601); /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $oCases = new \ProcessMaker\BusinessModel\Lists(); $response = $oCases->getList('unassigned', $dataList); } else { /*----------------------------------********---------------------------------*/ $oCases = new \ProcessMaker\BusinessModel\Cases(); $response = $oCases->getList($dataList); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ $result = $this->parserDataUnassigned($response); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function parserDataUnassigned ($data) { $structure = array( 'app_uid' => 'caseId', 'app_title' => 'caseTitle', 'app_number' => 'caseNumber', 'app_update_date' => 'date', 'del_task_due_date' => 'dueDate', 'del_index' => 'delIndex', 'del_delegate_date' => 'delegateDate', 'currentUser' => array( 'usrcr_usr_uid' => 'userId', 'usrcr_usr_firstname' => 'firstName', 'usrcr_usr_lastname' => 'lastName', 'usrcr_usr_username' => 'userName', ), 'prevUser' => array( 'previous_usr_uid' => 'userId', 'previous_usr_firstname' => 'firstName', 'previous_usr_lastname' => 'lastName', 'previous_usr_username' => 'userName', ), 'process' => array( 'pro_uid' => 'processId', 'app_pro_title' => 'name' ), 'task' => array( 'tas_uid' => 'taskId', 'app_tas_title' => 'name' ) ); $response = $this->replaceFields($data, $structure); return $response; } public function replaceFields ($data, $structure) { $response = array(); foreach ($data as $field => $d) { $field = preg_quote($field); if (is_array($d)) { $newData = array(); foreach ($d as $field => $value) { $field = preg_quote($field); if ( preg_match( '/\|(' . $field . ')\|/i', '|' . implode('|', array_keys($structure)) . '|', $arrayMatch ) && !is_array($structure[$arrayMatch[1]]) ) { $newName = $structure[$arrayMatch[1]]; $newData[$newName] = is_null($value) ? "":$value; } else { foreach ($structure as $name => $str) { if (is_array($str) && preg_match( '/\|(' . $field . ')\|/i', '|' . implode('|', array_keys($str)) . '|', $arrayMatch ) && !is_array($str[$arrayMatch[1]]) ) { $newName = $str[$arrayMatch[1]]; $newData[$name][$newName] = is_null($value) ? "":$value; } } } } if (count($newData) > 0) $response[] = $newData; } else { if ( preg_match( '/\|(' . $field . ')\|/i', '|' . implode('|', array_keys($structure)) . '|', $arrayMatch ) && !is_array($structure[$arrayMatch[1]]) ) { $newName = $structure[$arrayMatch[1]]; $response[$newName] = is_null($d) ? "":$d; } else { foreach ($structure as $name => $str) { if (is_array($str) && preg_match( '/\|(' . $field . ')\|/i', '|' . implode('|', array_keys($str)) .'|', $arrayMatch ) && !is_array($str[$arrayMatch[1]]) ) { $newName = $str[$arrayMatch[1]]; $response[$name][$newName] = is_null($d) ? "":$d; } } } } } return $response; } /** * Delete case * * @copyright Colosa - Bolivia * * @url DELETE /case/:app_uid/delete * * @param string $app_uid {@min 32}{@max 32} */ public function doDeleteCases($app_uid) { try { $oCase = new \Cases(); $oCase->removeCase( $app_uid ); $result = array ( "message" => \G::LoadTranslation( "ID_COMMAND_EXECUTED_SUCCESSFULLY" ) ); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $result; } /** * Get list History case * * @copyright Colosa - Bolivia * * @url GET /history/:app_uid * * @param string $app_uid {@min 32}{@max 32} */ public function doGetCasesListHistory($app_uid) { try { $arrayFieldIso8601 = array('DEL_DELEGATE_DATE', 'DEL_INIT_DATE', 'DEL_FINISH_DATE'); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->getCasesListHistory($app_uid); $response8601 = DateTime::convertUtcToIso8601($response['flow'], $arrayFieldIso8601); $response['flow'] = $this->parserDataHistory($response8601); $r = new \stdclass(); $r->data = $response; $r->totalCount = count($response['flow']); return $r; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function parserDataHistory ($data) { $structure = array( //'' => 'caseId', //'' => 'caseTitle', //'' => 'processName', //'' => 'ownerFullName', //'flow' => array( 'TAS_TITLE' => 'taskName', //'' => 'userId', 'USR_NAME' => 'userFullName', 'APP_TYPE' => 'flowStatus', // is null default Router in FE 'DEL_DELEGATE_DATE' => 'dueDate', //) ); $response = $this->replaceFields($data, $structure); return $response; } /** * Get Already Route * * @access protected * @class AccessControl {@className \ProcessMaker\Services\Api\Light} * @param string $app_uid {@min 1}{@max 32} * @param int $cas_index * * @status 204 * @url GET /case/:app_uid/:cas_index */ public function doIfAlreadyRoute($app_uid, $cas_index) { try { $oAppDelegate = new \AppDelegation(); $alreadyRouted = $oAppDelegate->alreadyRouted($app_uid, $cas_index); if ($alreadyRouted) { throw (new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'))); } } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** * * @url GET /project/:prj_uid/dynaforms * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetDynaForms($prj_uid) { try { $process = new \ProcessMaker\BusinessModel\Process(); $process->setFormatFieldNameInUppercase(false); $process->setArrayFieldNameForException(array("processUid" => "prj_uid")); $_SESSION['PROCESS'] = $prj_uid; $response = $process->getDynaForms($prj_uid); $result = $this->parserDataDynaForm($response); $pmDynaForm = new PmDynaform(); foreach ($result as $k => $form) { $result[$k]['formContent'] = (isset($form['formContent']) && $form['formContent'] != null)?json_decode($form['formContent']):""; $pmDynaForm->jsonr($result[$k]['formContent']); $result[$k]['index'] = $k; } } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $result; } /** * @url GET /project/:prj_uid/activity/:act_uid/steps * * @param string $act_uid {@min 32}{@max 32} * @param string $prj_uid {@min 32}{@max 32} */ public function doGetActivitySteps($act_uid, $prj_uid) { try { $task = new \ProcessMaker\BusinessModel\Task(); $task->setFormatFieldNameInUppercase(false); $task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid")); $activitySteps = $task->getSteps($act_uid); $_SESSION['PROCESS'] = $prj_uid; $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->setFormatFieldNameInUppercase(false); $oMobile = new \ProcessMaker\BusinessModel\Light(); $step = new \ProcessMaker\Services\Api\Project\Activity\Step(); $response = array(); for ($i = 0; $i < count($activitySteps); $i++) { if ($activitySteps[$i]['step_type_obj'] == "DYNAFORM") { $dataForm = $dynaForm->getDynaForm($activitySteps[$i]['step_uid_obj']); $result = $this->parserDataDynaForm($dataForm); $result["formUpdateDate"] = \ProcessMaker\Util\DateTime::convertUtcToIso8601($result["formUpdateDate"]); $result['index'] = $i; $result['stepId'] = $activitySteps[$i]["step_uid"]; $result['stepUidObj'] = $activitySteps[$i]["step_uid_obj"]; $result['stepMode'] = $activitySteps[$i]['step_mode']; $result['stepCondition'] = $activitySteps[$i]['step_condition']; $result['stepPosition'] = $activitySteps[$i]['step_position']; $trigger = $oMobile->statusTriggers($step->doGetActivityStepTriggers($activitySteps[$i]["step_uid"], $act_uid, $prj_uid)); $result["triggers"] = $trigger; unset($result["formContent"]); $response[] = $result; } } } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * Execute Trigger case * * @param string $prj_uid {@min 1}{@max 32} * @param string $act_uid {@min 1}{@max 32} * @param string $cas_uid {@min 1}{@max 32} * @param string $step_uid {@min 32}{@max 32} * @param string $type {@choice before,after} * * @copyright Colosa - Bolivia * * @url POST /process/:prj_uid/task/:act_uid/case/:cas_uid/step/:step_uid/execute-trigger/:type */ public function doPutExecuteTriggerCase($prj_uid, $act_uid, $cas_uid, $step_uid, $type) { try { $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->doExecuteTriggerCase($userUid, $prj_uid, $act_uid, $cas_uid, $step_uid, $type); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * Get next step * * @param string $pro_uid {@min 1}{@max 32} * @param string $app_uid {@min 1}{@max 32} * @param int $cas_index * @param int $step_pos * * @url GET /process/:pro_uid/case/:app_uid/:cas_index/step/:step_pos */ public function doGetNextStep($pro_uid, $app_uid, $cas_index, $step_pos) { try { $oCase = new \Cases(); $oAppDelegate = new \AppDelegation(); $alreadyRouted = $oAppDelegate->alreadyRouted($app_uid, $cas_index); if ($alreadyRouted) { throw (new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'))); } $userUid = $this->getUserId(); $_SESSION["APPLICATION"] = $app_uid; $_SESSION["PROCESS"] = $pro_uid; //$_SESSION["TASK"] = ""; $_SESSION["INDEX"] = $cas_index; $_SESSION["USER_LOGGED"] = $userUid; //$_SESSION["USR_USERNAME"] = ""; $response = $oCase->getNextStep($pro_uid, $app_uid, $cas_index, $step_pos ); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * @url GET /project/:prj_uid/dynaformprocessed/:dyn_uid * * @param string $dyn_uid {@min 32}{@max 32} * @param string $prj_uid {@min 32}{@max 32} */ public function doGetDynaformProcessed($prj_uid, $dyn_uid, $app_uid = null, $del_index = 0) { try { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->setFormatFieldNameInUppercase(false); $_SESSION['PROCESS'] = $prj_uid; $response = $dynaForm->getDynaForm($dyn_uid); $result = $this->parserDataDynaForm($response); $result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null) ? \G::json_decode($result['formContent']) : ""; $caseVariables = array(); if (!is_null($app_uid)) { $case = new \Cases(); $fields = $case->loadCase($app_uid, $del_index); $caseVariables = array_merge($fields['APP_DATA'], \ProcessMaker\BusinessModel\Cases::getGlobalVariables($fields['APP_DATA'])); $caseVariables = DateTime::convertUtcToTimeZone($caseVariables); } $pmDynaform = new PmDynaform(array("APP_DATA" => $caseVariables, "CURRENT_DYNAFORM" => $dyn_uid)); $pmDynaform->jsonr($result['formContent']); return $result; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** * @url GET /project/:prj_uid/dynaform/:dyn_uid * * @param string $dyn_uid {@min 32}{@max 32} * @param string $prj_uid {@min 32}{@max 32} */ public function doGetDynaForm($prj_uid, $dyn_uid) { try { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->setFormatFieldNameInUppercase(false); $_SESSION['PROCESS'] = $prj_uid; $response = $dynaForm->getDynaForm($dyn_uid); $result = $this->parserDataDynaForm($response); $result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null) ? \G::json_decode($result['formContent']) : ""; $pmDynaForm = new PmDynaform(["CURRENT_DYNAFORM" => $dyn_uid]); $pmDynaForm->jsonr($result['formContent']); return $result; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** * @url POST /project/:prj_uid/dynaforms * * @param string $prj_uid {@min 32}{@max 32} * */ public function doGetDynaFormsId($prj_uid, $request_data) { try { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->setFormatFieldNameInUppercase(false); $_SESSION['PROCESS'] = $prj_uid; $return = array(); foreach ($request_data['formId'] as $dyn_uid) { $response = $dynaForm->getDynaForm($dyn_uid); $pmDynaForm = new PmDynaform(array("CURRENT_DYNAFORM" => $dyn_uid)); $result = $this->parserDataDynaForm($response); $result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null)?json_decode($result['formContent']):""; $pmDynaForm->jsonr($result['formContent']); $return[] = $result; } } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $return; } public function parserDataDynaForm ($data) { $structure = array( 'dyn_uid' => 'formId', 'dyn_title' => 'formTitle', 'dyn_description' => 'formDescription', 'dyn_content' => 'formContent', 'dyn_update_date' => 'formUpdateDate' ); $response = $this->replaceFields($data, $structure); return $response; } /** * @url POST /process/:pro_uid/task/:task_uid/start-case * * @param string $pro_uid {@min 32}{@max 32} * @param string $task_uid {@min 32}{@max 32} */ public function postStartCase($pro_uid, $task_uid) { try { $oMobile = new \ProcessMaker\BusinessModel\Light(); $result = $oMobile->startCase($this->getUserId(), $pro_uid, $task_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $result; } /** * Return Informaction User for derivate * assignment Users * * @url GET /task/:tas_uid/case/:app_uid/:del_index/assignment * * @param string $tas_uid {@min 32}{@max 32} * @param string $app_uid {@min 32}{@max 32} * @param int $del_index */ public function doGetPrepareInformation($tas_uid, $app_uid, $del_index = null) { try { $usr_uid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->getPrepareInformation($usr_uid, $tas_uid, $app_uid, $del_index); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * Route Case * @url PUT /cases/:app_uid/route-case * * @param string $app_uid {@min 32}{@max 32} * @param int $del_index {@from body} * @param array $tasks {@from body} */ public function doPutRouteCase($app_uid, $del_index = null, $tasks = array()) { try { $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->updateRouteCase($app_uid, $this->getUserId(), $del_index, $tasks); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * @url GET /user/data */ public function doGetUserData() { try { $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->getUserData($userUid); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $response; } /** * @url POST /users/data */ public function doGetUsersData($request_data) { try { $response = array(); $oMobile = new \ProcessMaker\BusinessModel\Light(); foreach ($request_data['user']['ids'] as $userUid) { $response[] = $oMobile->getUserData($userUid); } } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $response; } /** * @url POST /case/:app_uid/upload/location * * @param string $app_uid { @min 32}{@max 32} * @param float $latitude {@min -90}{@max 90} * @param float $longitude {@min -180}{@max 180} */ public function postInputDocumentLocation($app_uid, $latitude, $longitude) { try { $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $url = "http://maps.googleapis.com/maps/api/staticmap?center=".$latitude.','.$longitude."&format=jpg&size=600x600&zoom=15&markers=color:blue%7Clabel:S%7C".$latitude.','.$longitude; $imageLocation = imagecreatefromjpeg($url); $tmpfname = tempnam("php://temp","pmm"); imagejpeg($imageLocation, $tmpfname); $_FILES["form"]["type"] = "image/jpeg"; $_FILES["form"]["name"] = 'Location.jpg'; $_FILES["form"]["tmp_name"] = $tmpfname; $_FILES["form"]["error"] = 0; $sizes = getimagesize($tmpfname); $_FILES["form"]["size"] = ($sizes['0'] * $sizes['1']); $request_data = array(array('name' => $_FILES["form"]["name"])); $file = $oMobile->postUidUploadFiles($userUid, $app_uid, $request_data); $strPathName = PATH_DOCUMENT . G::getPathFromUID($app_uid) . PATH_SEP; $strFileName = $file[0]['appDocUid'] . "_" . $file[0]['docVersion'] . ".jpg"; if (! is_dir( $strPathName )) { G::verifyPath( $strPathName, true ); } copy($tmpfname, $strPathName . $strFileName); unlink($tmpfname); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $file; } /** * @url POST /case/:app_uid/download64 * * @param string $app_uid {@min 32}{@max 32} */ public function postDownloadFile($app_uid, $request_data) { try { $oMobile = new \ProcessMaker\BusinessModel\Light(); $files = $oMobile->downloadFile($app_uid, $request_data); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $files; } /** * @url POST /logout * * @param $access * @param $refresh * @return mixed */ public function postLogout($access, $refresh) { try { $oMobile = new \ProcessMaker\BusinessModel\Light(); $files = $oMobile->logout($access, $refresh); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $files; } /** * @url GET /:type/case/:app_uid * * @param $access * @param $refresh * @return mixed */ public function getInformation($type, $app_uid) { try { $arrayFieldIso8601 = array('caseCreateDate', 'caseUpdateData', 'delDelegateDate', 'delInitDate', 'delDueDate', 'delFinishDate'); $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->getInformation($userUid, $type, $app_uid); $response = $this->parserGetInformation($response); $response = DateTime::convertUtcToIso8601($response, $arrayFieldIso8601); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } public function parserGetInformation ($data) { $structure = array( 'case' => array( 'PRO_TITLE' => 'processTitle', 'APP_TITLE' => 'caseTitle', 'APP_NUMBER' => 'caseNumber', 'APP_STATUS' => 'caseStatus', 'APP_UID' => 'caseId', 'CREATOR' => 'caseCreator', 'CREATE_DATE' => 'caseCreateDate', 'UPDATE_DATE' => 'caseUpdateData', 'DESCRIPTION' => 'caseDescription', 'PRO_UID' => 'processId', 'DEL_INDEX' => 'delIndex' ), 'task' => array( 'TAS_TITLE' => 'taskTitle', 'CURRENT_USER' => 'currentUser', 'DEL_DELEGATE_DATE' => 'delDelegateDate', 'DEL_INIT_DATE' => 'delInitDate', 'DEL_TASK_DUE_DATE' => 'delDueDate', 'DEL_FINISH_DATE' => 'delFinishDate', 'TAS_UID' => 'taskId' ) ); $response = $this->replaceFields($data, $structure); return $response; } /** * @url POST /case/:app_uid/upload * * @param $access * @param $refresh * @return mixed */ public function uidUploadFiles($app_uid, $request_data) { try { $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $filesUids = $oMobile->postUidUploadFiles($userUid, $app_uid, $request_data); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $filesUids; } /** * @url POST /case/:app_uid/upload/:app_doc_uid * * @param $access * @param $refresh * @return mixed */ public function documentUploadFiles($app_uid, $app_doc_uid, $request_data) { try { $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->documentUploadFiles($userUid, $app_uid, $app_doc_uid, $request_data); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * @url POST /case/:app_uid/claim * * @param $app_uid {@min 1}{@max 32} * @return mixed */ public function claimCaseUser($app_uid) { try { $userUid = $this->getUserId(); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->claimCaseUser($userUid, $app_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; } /** * Get Case Notes * * @param string $app_uid {@min 1}{@max 32} * @param int $start {@from path} * @param int $limit {@from path} * @param string $sort {@from path} * @param string $dir {@from path} * @param string $usr_uid {@from path} * @param string $date_from {@from path} * @param string $date_to {@from path} * @param string $search {@from path} * @return array * * @copyright Colosa - Bolivia * * @url GET /case/:app_uid/notes */ public function doGetCaseNotes( $app_uid, $start = 0, $limit = 25, $sort = 'APP_CACHE_VIEW.APP_NUMBER', $dir = 'DESC', $usr_uid = '', $date_from = '', $date_to = '', $search = '' ) { try { $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['sort'] = $sort; $dataList['dir'] = $dir; $dataList['user'] = $usr_uid; $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['search'] = $search; $appNotes = new \AppNotes(); $response = $appNotes->getNotesList( $app_uid, '', $start, $limit ); $response = $this->parserDataNotes($response['array']['notes']); return DateTime::convertUtcToIso8601($response, array('date')); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } public function parserDataNotes ($data) { $structure = array( 'APP_UID' => 'caseId', 'notes' => array( 'NOTE_DATE' => 'date', 'NOTE_CONTENT' => 'content' ), 'user' => array( 'USR_UID' => 'userId', 'USR_USERNAME' => 'name', 'USR_FIRSTNAME' => 'firstName', 'USR_LASTNAME' => 'lastName', 'USR_EMAIL' => 'email' ) ); $response = $this->replaceFields($data, $structure); return $response; } /** * Post Case Notes * * @param string $app_uid {@min 1}{@max 32} * @param string $noteContent {@min 1}{@max 500} * @param int $sendMail {@choice 1,0} * * @copyright Colosa - Bolivia * * @url POST /case/:app_uid/note */ public function doPostCaseNote($app_uid, $noteContent, $sendMail = 0) { try { $usr_uid = $this->getUserId(); $cases = new \ProcessMaker\BusinessModel\Cases(); $sendMail = ($sendMail == 0) ? false : true; $cases->saveCaseNote($app_uid, $usr_uid, $noteContent, $sendMail); $result = array("status" => 'ok'); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $result; } /** * GET list category * * @return array * @throws RestException * * @url GET /category */ public function getCategoryList() { try { $oLight = new \ProcessMaker\BusinessModel\Light(); $category = $oLight->getCategoryList(); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $category; } /** * GET list process * * @return array * @throws RestException * * @param string $action {@min 1}{@max 32} * @param string $cat_uid {@max 32}{@from path} * * @url GET /process/:action */ public function getProcessList ($action, $cat_uid = null) { try { $usr_uid = $this->getUserId(); $oLight = new \ProcessMaker\BusinessModel\Light(); $process = $oLight->getProcessList($action, $cat_uid, $usr_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $process; } /** * GET list process * * @return array * @throws RestException * * @param string $task_uid {@min 1}{@max 32} * * @url GET /userstoreassign/:task_uid */ public function getUsersToReassign ($task_uid) { try { $usr_uid = $this->getUserId(); $oLight = new \ProcessMaker\BusinessModel\Light(); $process = $oLight->getUsersToReassign($usr_uid, $task_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $process; } /** * @return \stdclass * @throws RestException * * @param string $app_uid {@min 1}{@max 32} * @param string $to_usr_uid {@min 1}{@max 32} * * @url POST /reassign/:app_uid/user/:to_usr_uid */ public function reassignCase ($app_uid, $to_usr_uid) { try { $usr_uid = $this->getUserId(); $oLight = new \ProcessMaker\BusinessModel\Light(); $process = $oLight->reassignCase($usr_uid, $app_uid, $to_usr_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $process; } /** * Paused Case * * @return \stdclass * @throws RestException * * @param string $app_uid {@min 1}{@max 32} * * @url POST /cases/:app_uid/pause */ public function pauseCase ($app_uid, $request_data) { try { Validator::throwExceptionIfDataNotMetIso8601Format($request_data, array('unpauseDate')); $usr_uid = $this->getUserId(); $oLight = new \ProcessMaker\BusinessModel\Light(); $process = $oLight->pauseCase($usr_uid, $app_uid, $request_data); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $process; } /** * Unpaused Case * * @return \stdclass * @throws RestException * * @param string $app_uid {@min 1}{@max 32} * * @url POST /cases/:app_uid/unpause */ public function unpauseCase ($app_uid) { $result = array(); try { $usr_uid = $this->getUserId(); $cases = new \ProcessMaker\BusinessModel\Cases(); $cases->putUnpauseCase($app_uid, $usr_uid); $result["status"] = "ok"; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $result; } /** * Cancel Case * * @param string $cas_uid {@min 1}{@max 32} * * @copyright Colosa - Bolivia * * @url POST /cases/:app_uid/cancel */ public function doPutCancelCase($app_uid) { $response = array("status" => "false"); try { $userUid = $this->getUserId(); $cases = new \ProcessMaker\BusinessModel\Cases(); $cases->putCancelCase($app_uid, $userUid); $response["status"] = "ok"; } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $response; } /** * Get Case Variables * * @access protected * @class AccessControl {@className \ProcessMaker\Services\Api\Cases} * @url GET /:app_uid/variables * * @param string $app_uid {@min 1}{@max 32} * @param string $dyn_uid * @param string $pro_uid * @param string $act_uid * @param int $app_index * @return mixed * @throws RestException */ public function doGetCaseVariables($app_uid, $dyn_uid = null, $pro_uid = null, $act_uid = null, $app_index = null) { try { $usr_uid = $this->getUserId(); $cases = new \ProcessMaker\BusinessModel\Cases(); $response = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid, $pro_uid, $act_uid, $app_index); return DateTime::convertUtcToTimeZone($response); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** * Put Case Variables * * @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 */ 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 \ProcessMaker\BusinessModel\Cases(); $hasAccess = $cases->checkUserHasPermissionsOrSupervisor($usr_uid, $app_uid, $dyn_uid); //When the user is a supervisor del_index is 0 if ($del_index <= 0 && !$hasAccess) { throw (new \Exception(G::LoadTranslation('ID_INVALID_VALUE_EXPECTING_POSITIVE_INTEGER', array('del_index')), Api::STAT_APP_EXCEPTION)); } if ($del_index === null) { throw (new \Exception(G::LoadTranslation('ID_CAN_NOT_BE_NULL', array('del_index')), Api::STAT_APP_EXCEPTION)); } 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)); } } $request_data = \ProcessMaker\Util\DateTime::convertDataToUtc($request_data); $cases->setCaseVariables($app_uid, $request_data, $dyn_uid, $usr_uid, $del_index); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** * Get in base64 the image process (processmap) * * @url GET /process/:pro_uid/case * * @param string $prj_uid {@min 32}{@max 32} * @param string $app_uid {@min 32}{@max 32}{@from path} */ public function doGetProcessMapImage($pro_uid, $app_uid = null) { $return = array(); try { $oPMap = new \ProcessMaker\BusinessModel\ProcessMap(); $schema = Adapter\BpmnWorkflow::getStruct($pro_uid); $schemaStatus = array(); if (!is_null($app_uid)) { $case = new \ProcessMaker\BusinessModel\Cases(); $case->setFormatFieldNameInUppercase(false); $schemaStatus = $case->getTasks($app_uid); } $file = $oPMap->get_image($schema, $schemaStatus); ob_start(); imagepng($file); $image = ob_get_clean(); $return["map"] = base64_encode($image); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $return; } /** * Get configuration ProcessMaker * * @return array * * @access public * @url GET /config * * @param boolean $fileLimit {@from path} */ public function getConfiguration($fileLimit = false) { try { $params = array('fileLimit' => $fileLimit); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->getConfiguration($params); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $response; } /** * Get configuration ProcessMaker * * @return array * * @url GET /config-user * * @param boolean $fileLimit {@from path} * @param boolean $tz {@from path} */ public function getConfigurationUser($fileLimit = false, $tz = false) { try { $params = array('fileLimit' => $fileLimit, 'tz' => $tz); $oMobile = new \ProcessMaker\BusinessModel\Light(); $response = $oMobile->getConfiguration($params); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $response; } /** * Get next step * * @url POST /get-next-step/:app_uid * @return array */ public function doGetStep($app_uid, $request_data) { $pro_uid = $request_data["pro_uid"]; $act_uid = $request_data["act_uid"]; $step_uid = $request_data["step_uid"]; $step_pos = $request_data["step_pos"]; $app_index = $request_data["app_index"]; $dyn_uid = isset($request_data["dyn_uid"]) ? $request_data["dyn_uid"] : null; $usr_uid = $this->getUserId(); $response = array(); //conditionalSteps $oCase = new \Cases(); $oAppDelegate = new \AppDelegation(); $alreadyRouted = $oAppDelegate->alreadyRouted($app_uid, $app_index); if ($alreadyRouted) { throw (new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED'))); } $_SESSION["APPLICATION"] = $app_uid; $_SESSION["PROCESS"] = $pro_uid; $_SESSION["INDEX"] = $app_index; $_SESSION["USER_LOGGED"] = $usr_uid; do { $conditionalSteps = $oCase->getNextStep($pro_uid, $app_uid, $app_index, $step_pos); if (is_array($conditionalSteps) && ( $conditionalSteps["TYPE"] === "DYNAFORM" || $conditionalSteps["TYPE"] === "DERIVATION") ) { break; } else { $step_pos = $step_pos + 1; } } while ($conditionalSteps !== false); $response["conditionalSteps"] = $conditionalSteps; //trigger before if($conditionalSteps) { $c = new \Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(\StepPeer::STEP_UID); $c->addSelectColumn(\StepPeer::STEP_UID_OBJ); $c->add(\StepPeer::TAS_UID, $act_uid); $c->add(\StepPeer::STEP_TYPE_OBJ, 'DYNAFORM'); $c->add(\StepPeer::STEP_UID_OBJ, $conditionalSteps['UID']); $rs = \StepPeer::doSelectRS($c); $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $rs->next(); $row = $rs->getRow(); if ($row) { $oMobile = new \ProcessMaker\BusinessModel\Light(); $triggers = $oMobile->doExecuteTriggerCase($usr_uid, $pro_uid, $act_uid, $app_uid, $row['STEP_UID'], "before", $app_index); if ($triggers["status"] === "ok") { $triggers["status"] = "200"; } $response["triggers"] = $triggers; } } //variables $cases = new \ProcessMaker\BusinessModel\Cases(); $variables = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid, $pro_uid, $act_uid, $app_index); $variables = DateTime::convertUtcToTimeZone($variables); $response["variables"] = $variables; return $response; } }