diff --git a/workflow/engine/classes/model/BpmnFlow.php b/workflow/engine/classes/model/BpmnFlow.php index b9684a84b..78e9f2a60 100644 --- a/workflow/engine/classes/model/BpmnFlow.php +++ b/workflow/engine/classes/model/BpmnFlow.php @@ -14,6 +14,37 @@ require_once 'classes/model/om/BaseBpmnFlow.php'; * * @package classes.model */ -class BpmnFlow extends BaseBpmnFlow { +class BpmnFlow extends BaseBpmnFlow +{ + public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER) + { + //TODO implement $start, $limit and $filter + $c = new Criteria('workflow'); + + if (! is_null($prjUid)) { + $c->add(BpmnFlowPeer::PRJ_UID, $prjUid, Criteria::EQUAL); + } + + $rs = BpmnFlowPeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + $flows = array(); + + while ($rs->next()) { + $flow = $rs->getRow(); + $flow["FLO_STATE"] = @json_decode($flow["FLO_STATE"]); + $flow["FLO_IS_INMEDIATE"] = $flow["FLO_IS_INMEDIATE"] == 1 ? true : false; + $flow = $changeCaseTo !== CASE_UPPER ? array_change_key_case($flow, CASE_LOWER) : $flow; + + $flows[] = $flow; + } + + return $flows; + } + + public function toArray($type = BasePeer::TYPE_FIELDNAME) + { + return parent::toArray($type); + } } // BpmnFlow diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 86e9b168d..77d43e776 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -290,7 +290,7 @@ class Bpmn extends Handler public function addEvent($data) { // setting defaults - $data['EVN_UID'] = array_key_exists('EVN_UID', $data) ? $data['EVN_UID'] : Hash::generateUID();; + $data['EVN_UID'] = array_key_exists('EVN_UID', $data) ? $data['EVN_UID'] : Hash::generateUID(); $event = new Event(); $event->fromArray($data); @@ -325,7 +325,7 @@ class Bpmn extends Handler public function addGateway($data) { // setting defaults - $data['GAT_UID'] = array_key_exists('GAT_UID', $data) ? $data['GAT_UID'] : Hash::generateUID();; + $data['GAT_UID'] = array_key_exists('GAT_UID', $data) ? $data['GAT_UID'] : Hash::generateUID(); $gateway = new Gateway(); $gateway->fromArray($data); @@ -360,35 +360,39 @@ class Bpmn extends Handler public function addFlow($data) { // setting defaults - $data['GAT_UID'] = array_key_exists('GAT_UID', $data) ? $data['GAT_UID'] : Hash::generateUID();; - $data['FLO_STATE'] = json_encode($data['FLO_STATE']); + $data['FLO_UID'] = array_key_exists('FLO_UID', $data) ? $data['FLO_UID'] : Hash::generateUID(); + $data['FLO_STATE'] = is_array($data['FLO_STATE']) ? json_encode($data['FLO_STATE']) : $data['FLO_STATE']; - $flow = new Flow(); - $flow->fromArray($data, BasePeer::TYPE_FIELDNAME); - $flow->setPrjUid($this->project->getPrjUid()); - $flow->setDiaUid($this->getDiagram("object")->getDiaUid()); - $flow->save(); + try { + self::log("Add Flow with data: ", $data); + + $flow = new Flow(); + $flow->fromArray($data, BasePeer::TYPE_FIELDNAME); + $flow->setPrjUid($this->getUid()); + $flow->setDiaUid($this->getDiagram("object")->getDiaUid()); + $flow->save(); + + self::log("Add Flow Success!"); + } catch (\Exception $e) { + self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); + throw $e; + } } - public function getFlow($floUid) + public function getFlow($floUid, $retType = 'array') { - if (empty($this->flows) || ! array_key_exists($floUid, $this->flows)) { - $flow = GatewayPeer::retrieveByPK($floUid); + $flow = FlowPeer::retrieveByPK($floUid); - if (! is_object($flow)) { - return null; - } - - $this->flows[$floUid] = $flow; + if ($retType != "object" && ! empty($activity)) { + $flow = $flow->toArray(); } - return $this->flows[$floUid]; + return $flow; } public function getFlows($retType = 'array') { - //return Activity::getAll($this->project->getPrjUid(), null, null, '', $retType); - return array(); + return Flow::getAll($this->getUid(), null, null, '', $retType); } public function addArtifact($data) diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project.php b/workflow/engine/src/Services/Api/ProcessMaker/Project.php index 2995b4c4f..bf70923fa 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project.php @@ -114,6 +114,9 @@ class Project extends Api 'lanes' => 'lan_uid' ); + /* + * Diagram's Activities Handling + */ $whiteList = array(); foreach ($diagram["activities"] as $activityData) { $activityData = array_change_key_case($activityData, CASE_UPPER); @@ -146,6 +149,31 @@ class Project extends Api } } + /* + * Diagram's Flows Handling + */ + $whiteList = array(); + foreach ($diagram["flows"] as $flowData) { + $flowData = array_change_key_case($flowData, CASE_UPPER); + + // activity exists ? + if ($activity = $bwp->getFlow($flowData["FLO_UID"])) { + // then update activity + //$bwp->updateFlow($activityData["FLO_UID"], $flowData); + + //$whiteList[] = $activityData["FLO_UID"]; + } else { + // if not exists then create it + $oldFloUid = $flowData["FLO_UID"]; + $flowData["FLO_UID"] = Hash::generateUID(); + $bwp->addFlow($flowData); + + $result[] = array("object" => "flow", "new_uid" => $flowData["FLO_UID"], "old_uid" => $oldFloUid); + $whiteList[] = $flowData["FLO_UID"]; + } + } + + return $result; } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());