diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index 719fb3f31..c6b75a5f6 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -226,6 +226,18 @@ class BpmnWorkflow extends Project\Bpmn if ($event && $event->getEvnType() == "START") { $this->wp->setStartTask($data["FLO_ELEMENT_DEST"]); } + + // update case scheduler + if ($event->getEvnType() == "START" && $event->getEvnMarker() == "TIMER") { + $aData = array('TAS_UID'=>$data["FLO_ELEMENT_DEST"], 'SCH_UID'=>$data["FLO_ELEMENT_ORIGIN"]); + $this->wp->updateCaseScheduler($aData); + } + + // update web entry + if ($event->getEvnType() == "START" && $event->getEvnMarker() == "MESSAGE") { + $aData = array('TAS_UID'=>$data["FLO_ELEMENT_DEST"], 'WE_UID'=>$data["FLO_ELEMENT_ORIGIN"]); + $this->wp->updateWebEntry($aData); + } break; } break; @@ -271,6 +283,54 @@ class BpmnWorkflow extends Project\Bpmn $this->wp->setStartTask($activity->getActUid(), false); } } + + // update case scheduler + if (! is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "TIMER") { + $aData = array( + 'SCH_NAME'=>'', + 'SCH_DEL_USER_NAME'=>'', + 'SCH_DEL_USER_UID'=>'', + 'TAS_UID'=>'', + 'SCH_LAST_RUN_TIME'=>NULL, + 'SCH_STATE'=>'', + 'SCH_LAST_STATE'=>'', + 'USR_UID'=>'', + 'SCH_OPTION'=>'', + 'SCH_DAYS_PERFORM_TASK'=>'', + 'SCH_EVERY_DAYS'=>NULL, + 'SCH_WEEK_DAYS'=>'', + 'SCH_START_DAY'=>'', + 'SCH_START_DAY_OPT_1'=>'', + 'SCH_START_DAY_OPT_2'=>'', + 'SCH_MONTHS'=>'', + 'SCH_REPEAT_EVERY'=>'', + 'SCH_REPEAT_STOP_IF_RUNNING'=>'', + 'CASE_SH_PLUGIN_UID'=>NULL, + 'SCH_DEL_USER_PASS'=>'', + 'SCH_UID'=>$flow->getFloElementOrigin(), + 'SCH_REPEAT_UNTIL'=>'' + ); + $this->wp->updateCaseScheduler($aData); + } + + // update web entry + if (! is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "MESSAGE") { + $aData = array( + 'WE_UID'=>$flow->getFloElementOrigin(), + 'TAS_UID'=>'', + 'DYN_UID'=>'', + 'TAS_UID'=>'', + 'USR_UID'=>'', + 'WE_METHOD'=>'', + 'WE_INPUT_DOCUMENT_ACCESS'=>'', + 'WE_DATA'=>'', + 'WE_CREATE_USR_UID'=>'', + 'WE_UPDATE_USR_UID'=>'', + 'WE_UPDATE_DATE'=>date('Y-m-d H:i:s') + ); + $this->wp->updateWebEntry($aData); + } + } elseif ($flow->getFloElementOriginType() == "bpmnActivity" && $flow->getFloElementDestType() == "bpmnEvent") { // verify case: activity -> event(end) @@ -310,19 +370,36 @@ class BpmnWorkflow extends Project\Bpmn $event = \BpmnEventPeer::retrieveByPK($eventUid); // create case scheduler - if ($event->getEvnMarker() == "TIMER") { + if ($event->getEvnMarker() == "TIMER" && $event->getEvnType() == "START") { $this->wp->addCaseScheduler($eventUid); } // create web entry - if ($event->getEvnMarker() == "MESSAGE") { + if ($event->getEvnMarker() == "MESSAGE" && $event->getEvnType() == "START") { $this->wp->addWebEntry($eventUid); } - //return parent::addEvent($data); return $eventUid; } + public function removeEvent($data) + { + + $event = \BpmnEventPeer::retrieveByPK($data); + + // delete case scheduler + if ($event->getEvnMarker() == "TIMER" && $event->getEvnType() == "START") { + $this->wp->removeCaseScheduler($data); + } + + // delete web entry + if ($event->getEvnMarker() == "MESSAGE" && $event->getEvnType() == "START") { + $this->wp->removeWebEntry($data); + } + + parent::removeEvent($data); + } + public function mapBpmnFlowsToWorkflowRoutes() { $activities = $this->getActivities(); diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index bb58df8ff..c484b07c5 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -668,9 +668,6 @@ class Workflow extends Handler $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - if ($aRow['EVN_UID'] == 'TIMER') { - $this->removeCaseScheduler(); - } $oEvent->remove($aRow['EVN_UID']); $oDataset->next(); } @@ -775,7 +772,7 @@ class Workflow extends Handler $this->update(array("PRO_STATUS" => $status)); } - public function addCaseScheduler($eventUid) + public function addCaseScheduler($schUid) { try { $caseScheduler = new \CaseScheduler(); @@ -805,7 +802,7 @@ class Workflow extends Handler 'SCH_REPEAT_STOP_IF_RUNNING'=>'', 'CASE_SH_PLUGIN_UID'=>NULL, 'SCH_DEL_USER_PASS'=>'', - 'SCH_UID'=>$eventUid, + 'SCH_UID'=>$schUid, 'SCH_REPEAT_UNTIL'=>'' ); @@ -819,12 +816,12 @@ class Workflow extends Handler } } - public function removeCaseScheduler() + public function removeCaseScheduler($schUid) { try { $caseScheduler = new \CaseScheduler(); - self::log("Remove Case Scheduler: ".$caseScheduler->getSchUid()); - $caseScheduler->delete(); + self::log("Remove Case Scheduler: ".$schUid); + $caseScheduler->remove($schUid); self::log("Remove Case Scheduler Success!"); } catch (\Exception $e) { self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); @@ -832,16 +829,23 @@ class Workflow extends Handler } } - public function updateCaseScheduler() + public function updateCaseScheduler($data) { - + try { + $caseScheduler = new \CaseScheduler(); + $caseScheduler->update($data); + self::log("Update Case Scheduler Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } } - public function addWebEntry($eventUid) + public function addWebEntry($weUid) { try { $webEntry = new \WebEntry(); - $webEntryUid = $eventUid; + $webEntryUid = $weUid; $webEntry->setWeUid($webEntryUid); $webEntry->setProUid($this->proUid); $webEntry->setWeMethod(''); @@ -856,12 +860,12 @@ class Workflow extends Handler } } - public function removeWebEntry() + public function removeWebEntry($weUid) { try { - $webEntry = new \WebEntry(); - self::log("Remove Web Entry: ".$webEntry->getWeUid()); - $webEntry->delete(); + $webEntry = new \ProcessMaker\BusinessModel\WebEntry(); + self::log("Remove Web Entry: ".$weUid); + $webEntry->delete($weUid); self::log("Remove Web Entry Success!"); } catch (\Exception $e) { self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); @@ -869,8 +873,18 @@ class Workflow extends Handler } } - public function updateWebEntry() + public function updateWebEntry($data) { + try { + $webEntryUid = $data['WE_UID']; + $webEntry = \WebEntryPeer::retrieveByPK($webEntryUid); + $webEntry->fromArray($data, \BasePeer::TYPE_FIELDNAME); + $webEntry->save(); + self::log("Update Web Entry Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } } } \ No newline at end of file