diff --git a/workflow/engine/classes/model/Dynaform.php b/workflow/engine/classes/model/Dynaform.php index 9f30f063c..cd7442d7d 100755 --- a/workflow/engine/classes/model/Dynaform.php +++ b/workflow/engine/classes/model/Dynaform.php @@ -729,5 +729,28 @@ class Dynaform extends BaseDynaform } return $flag; } + + /** + * verify if a dynaform is assigned some dynaform + * + * @param string $proUid the uid of the process + * @param string $dynUid the uid of the dynaform + * + * @return array + */ + public function verifyDynaformAssignDynaform ($dynUid, $proUid) + { + $res = array(); + $oCriteria = new Criteria(); + $oCriteria->addSelectColumn(DynaformPeer::DYN_UID); + $oCriteria->add(DynaformPeer::PRO_UID, $proUid); + $oCriteria->add(DynaformPeer::DYN_UID, $dynUid, Criteria::NOT_EQUAL); + $oCriteria->add(DynaformPeer::DYN_CONTENT, "%" . $dynUid . "%", Criteria::LIKE); + $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($oDataset->next()) { + $res[] = $oDataset->getRow(); + } + return $res; + } } - diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index 0ff269f4e..e0f14d8b0 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -227,10 +227,19 @@ class DynaForm $messageCaseTracker = "($countSteps) Depends in case traker"; } + $dynaformDepends = \Dynaform::verifyDynaformAssignDynaform($dynUid, $proUid); + $messageDynaform = '(0) Depends in case traker'; + if (!empty($dynaformDepends)) { + $flagDepend = true; + $countSteps = count($dynaformDepends); + $messageDynaform = "($countSteps) Depends in dynaform"; + } + if ($flagDepend) { $message = "You can not delete the dynaform '$dynUid', because it has the following dependencies: \n\n"; $message .= $messageSteps . ".\n" . $messageStepsSupervisors . ".\n"; - $message .= $messageObjectPermission . ".\n" . $messageCaseTracker; + $message .= $messageObjectPermission . ".\n" . $messageCaseTracker . "\n"; + $message .= $messageDynaform; return $message; } return ''; @@ -1138,4 +1147,63 @@ class DynaForm throw $e; } } + + /** + * Get data of a DynaForm History + * + * @param string $dynaFormUid Unique id of DynaForm + * + * return array Return an array with data of a DynaForm History + */ + public function getDynaFormHistory($prj_uid, $dynaFormUid, array $arrayData = array()) + { + try { + $filter = ""; + if (isset($arrayData["filter"])) { + $filter = $arrayData["filter"]; + } + $start = 0; + if (isset($arrayData["start"])) { + $start = $arrayData["start"]; + } + $limit = 50; + if (isset($arrayData["limit"])) { + $limit = $arrayData["limit"]; + } + $this->throwExceptionIfNotExistsDynaForm($dynaFormUid, "", $this->arrayFieldNameForException["dynaFormUid"]); + + $criteria = new \Criteria("workflow"); + + $subcriteria = $criteria->getNewCriterion(\AppHistoryPeer::HISTORY_DATE, "%" . $filter . "%", \Criteria::LIKE); + + $criteria->addSelectColumn(\AppHistoryPeer::DYN_UID); + $criteria->addSelectColumn(\AppHistoryPeer::HISTORY_DATA); + $criteria->addSelectColumn(\AppHistoryPeer::HISTORY_DATE); + $criteria->addAnd(\AppHistoryPeer::DYN_UID, $dynaFormUid, \Criteria::EQUAL); + $criteria->addAnd(\AppHistoryPeer::OBJ_TYPE, "DYNAFORM", \Criteria::EQUAL); + $criteria->addAnd(\AppHistoryPeer::HISTORY_DATA, "%DYN_CONTENT_HISTORY%", \Criteria::LIKE); + $criteria->addAnd($subcriteria); + + $criteria->addDescendingOrderByColumn(\AppHistoryPeer::HISTORY_DATE); + $criteria->setOffset($start); + $criteria->setLimit($limit); + + $rsCriteria = \AppHistoryPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $data = array(); + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $d = @unserialize($row["HISTORY_DATA"]); + $data[] = array( + "history_date" => $row["HISTORY_DATE"], + "dyn_uid" => $row["DYN_UID"], + "dyn_content_history" => isset($d["DYN_CONTENT_HISTORY"]) ? $d["DYN_CONTENT_HISTORY"] : "" + ); + } + return $data; + } catch (\Exception $e) { + throw $e; + } + } + } diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index ffaebadfd..63af4a074 100755 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -1298,6 +1298,25 @@ class Workflow extends Handler $arrayWorkflowData = (array)($workflowData); + foreach ($arrayWorkflowData["dynaforms"] as $key => $value) { + if ($arrayWorkflowData["dynaforms"][$key]["DYN_CONTENT"] != "") { + $dynaFormContent = $arrayWorkflowData["dynaforms"][$key]["DYN_CONTENT"]; + + foreach ($arrayWorkflowData["uid"] as $value2) { + $arrayAux = $value2; + + foreach ($arrayAux as $key3 => $value3) { + $uidOld = $key3; + $uid = $value3; + + $dynaFormContent = str_replace($uidOld, $uid, $dynaFormContent); + } + } + + $arrayWorkflowData["dynaforms"][$key]["DYN_CONTENT"] = $dynaFormContent; + } + } + //Workflow files foreach ($arrayWorkflowFile as $key => $value) { $arrayFile = $value; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php index 81b145247..a509e7cb8 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/DynaForm.php @@ -181,4 +181,25 @@ class DynaForm extends Api } } + /** + * @url POST /:prj_uid/dynaform/:dyn_uid/history + * + * @param string $dyn_uid {@min 32}{@max 32} + * @param string $prj_uid {@min 32}{@max 32} + * @param array $request_data + */ + public function doGetDynaFormHistory($dyn_uid, $prj_uid, $request_data) + { + try { + $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); + $dynaForm->setFormatFieldNameInUppercase(false); + + $response = $dynaForm->getDynaFormHistory($prj_uid, $dyn_uid, $request_data); + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + }