diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 3234f564c..4de3af6df 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -1682,18 +1682,67 @@ class Cases return $oCriteria; } + /** + * Get fields and values by DynaForm + * + * @param array $form + * @param array $appData + * @param array $caseVariable + * + * return array Return array + */ + private function __getFieldsAndValuesByDynaFormAndAppData(array $form, array $appData, array $caseVariable) + { + try { + $caseVariableAux = []; + + foreach ($form['items'] as $value) { + foreach ($value as $value2) { + $field = $value2; + + if (isset($field['type'])) { + if ($field['type'] != 'form') { + if (isset($field['name']) && isset($appData[$field['name']])) { + if (isset($field['dataType']) && $field['dataType'] != 'grid') { + $caseVariable[$field['name']] = $appData[$field['name']]; + + if (isset($appData[$field['name'] . '_label'])) { + $caseVariable[$field['name'] . '_label'] = $appData[$field['name'] . '_label']; + } else { + $caseVariable[$field['name'] . '_label'] = ''; + } + } else { + $caseVariable[$field['name']] = $appData[$field['name']]; + } + } + } else { + $caseVariableAux = $this->__getFieldsAndValuesByDynaFormAndAppData($field, $appData, $caseVariable); + $caseVariable = array_merge($caseVariable, $caseVariableAux); + } + } + } + } + + //Return + return $caseVariable; + } catch (\Exception $e) { + throw $e; + } + } + /** * 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 * @return array * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ - public function getCaseVariables($app_uid, $usr_uid) + public function getCaseVariables($app_uid, $usr_uid, $dynaFormUid = null) { Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); @@ -1718,7 +1767,26 @@ class Cases $case = new \Cases(); $fields = $case->loadCase($app_uid); - return $fields['APP_DATA']; + + $arrayCaseVariable = []; + + if (!is_null($dynaFormUid)) { + $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); + $arrayDynaFormData = $dynaForm->getDynaFormRecordByPk($dynaFormUid, ['$dynaFormUid' => '$dynaFormUid']); + + $arrayDynContent = \G::json_decode($arrayDynaFormData['DYN_CONTENT'], true); + + $arrayAppData = $fields['APP_DATA']; + + $arrayCaseVariable = $this->__getFieldsAndValuesByDynaFormAndAppData( + $arrayDynContent['items'][0], $arrayAppData, $arrayCaseVariable + ); + } else { + $arrayCaseVariable = $fields['APP_DATA']; + } + + //Return + return $arrayCaseVariable; } /** diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index 6ea8b421a..f7feb8cc8 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -1501,12 +1501,12 @@ class Light extends Api * * @url GET /:app_uid/variables */ - public function doGetCaseVariables($app_uid) + public function doGetCaseVariables($app_uid, $dyn_uid = null) { try { $usr_uid = $this->getUserId(); $cases = new \ProcessMaker\BusinessModel\Cases(); - $response = $cases->getCaseVariables($app_uid, $usr_uid); + $response = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid); return DateTime::convertUtcToTimeZone($response); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));