From 2a9201dc334732e0d69279c080958e3a056cdafd Mon Sep 17 00:00:00 2001 From: Erik Amaru Ortiz Date: Mon, 27 Jan 2014 17:09:32 -0400 Subject: [PATCH] More updates for: PUT /project, UPDATE for Project->Diagram->Activities is completled --- .../engine/classes/model/BpmnActivity.php | 63 ++++++++++++++++--- .../methods/processes/processes_Delete.php | 9 +-- .../src/ProcessMaker/Adapter/Bpmn/Model.php | 33 +++++++--- 3 files changed, 84 insertions(+), 21 deletions(-) diff --git a/workflow/engine/classes/model/BpmnActivity.php b/workflow/engine/classes/model/BpmnActivity.php index 0bf56009d..aba32afb3 100644 --- a/workflow/engine/classes/model/BpmnActivity.php +++ b/workflow/engine/classes/model/BpmnActivity.php @@ -21,9 +21,7 @@ class BpmnActivity extends BaseBpmnActivity public function __construct($generateUid = true) { $this->bound = new BpmnBound(); - $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); - $this->bound->setBouElement('pm_canvas'); - $this->bound->setBouContainer('bpmnDiagram'); + $this->setBoundDefaults(); } public function getBound() @@ -31,6 +29,21 @@ class BpmnActivity extends BaseBpmnActivity return $this->bound; } + private function setBoundDefaults() + { + $this->bound->setBouElementType(lcfirst(str_replace(__NAMESPACE__, '', __CLASS__))); + $this->bound->setBouElement('pm_canvas'); + $this->bound->setBouContainer('bpmnDiagram'); + + $this->bound->setPrjUid($this->getPrjUid()); + $this->bound->setElementUid($this->getActUid()); + + $process = BpmnProcessPeer::retrieveByPK($this->getProUid()); + + if (is_object($process)) { + $this->bound->setDiaUid($process->getDiaUid()); + } + } // OVERRIDES @@ -58,9 +71,8 @@ class BpmnActivity extends BaseBpmnActivity { parent::save($con); - if (is_object($this->bound) && get_class($this->bound) == 'BpmnBound') { - $this->bound->save($con); - } + $this->setBoundDefaults(); + $this->bound->save($con); } public function delete($con = null) @@ -77,17 +89,50 @@ class BpmnActivity extends BaseBpmnActivity parent::delete($con); } + public static function getAll($start = null, $limit = null, $filter = '', $returnType = null, $changeCaseTo=CASE_UPPER) + { + if (is_array($start)) { + // $start, is a array config + extract($start, EXTR_OVERWRITE); + } + + $activities = array(); + $c = new Criteria('workflow'); + $c->addSelectColumn("BPMN_ACTIVITY.*"); + $c->addSelectColumn("BPMN_BOUND.*"); + $c->addJoin(BpmnActivityPeer::ACT_UID, BpmnBoundPeer::ELEMENT_UID, Criteria::LEFT_JOIN); + + $returnType = ($returnType != 'array' && $returnType != 'object') ? 'array' : $returnType; + + switch ($returnType) { + case 'object': + $activities = BpmnActivityPeer::doSelect($c); + break; + + case 'array': + $rs = BpmnActivityPeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + while ($rs->next()) { + $activities[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow(); + } + + break; + } + + return $activities; + } + public function fromArray($data) { parent::fromArray($data, BasePeer::TYPE_FIELDNAME); - // try resolve the related bound $bound = BpmnBound::findByElement('Activity', $this->getActUid()); - //if (array_key_exists('BOU_UID', $data)) { if (is_object($bound)) { - //$bound = BpmnBoundPeer::retrieveByPK($data['BOU_UID']); $this->bound = $bound; + } else { + $this->bound = new BpmnBound(); + $this->bound->setBouUid(ProcessMaker\Util\Hash::generateUID()); } $this->bound->fromArray($data, BasePeer::TYPE_FIELDNAME); diff --git a/workflow/engine/methods/processes/processes_Delete.php b/workflow/engine/methods/processes/processes_Delete.php index 3361bb0c4..a2ca8223b 100755 --- a/workflow/engine/methods/processes/processes_Delete.php +++ b/workflow/engine/methods/processes/processes_Delete.php @@ -46,7 +46,8 @@ $UIDS = explode( ',', $_POST['PRO_UIDS'] ); try { foreach ($UIDS as $UID) { - $oProcessMap->deleteProcess( $UID ); + $oProcessMap->deleteProcess($UID); + ProcessMaker\Adapter\Bpmn\Model::deleteProject($UID); } $resp->status = 0; $resp->msg = 'All process was deleted successfully'; @@ -55,6 +56,6 @@ try { $resp->status = 1; $resp->msg = $e->getMessage(); echo G::json_encode( $resp ); -} - - +} + + diff --git a/workflow/engine/src/ProcessMaker/Adapter/Bpmn/Model.php b/workflow/engine/src/ProcessMaker/Adapter/Bpmn/Model.php index 7caf0be62..90bc698d5 100644 --- a/workflow/engine/src/ProcessMaker/Adapter/Bpmn/Model.php +++ b/workflow/engine/src/ProcessMaker/Adapter/Bpmn/Model.php @@ -377,7 +377,7 @@ class Model $project = self::getBpmnObjectBy('Project', ProjectPeer::PRJ_UID, $prjUid, true); if (empty($project)) { - throw new \RuntimeException("Project with id: $prjUid, does not exists. "); + throw new \RuntimeException("Project with id: $prjUid, doesn't exist. "); } $process = self::getBpmnObjectBy('Process', ProcessPeer::PRJ_UID, $prjUid, true); @@ -388,7 +388,12 @@ class Model //if (! empty($diagram)) { $lanesets = self::getBpmnCollectionBy('Laneset', LanesetPeer::PRJ_UID, $prjUid, true); $lanes = self::getBpmnCollectionBy('Lane', LanePeer::PRJ_UID, $prjUid, true); - $activities = self::getBpmnCollectionBy('Activity', ActivityPeer::PRJ_UID, $prjUid, true); + + //$activities = self::getBpmnCollectionBy('Activity', ActivityPeer::PRJ_UID, $prjUid, true); + //$activities = Activity::getAll(null, null, null, 'object', CASE_LOWER); + $activities = Activity::getAll(array('changeCaseTo' => CASE_LOWER)); + //print_r($activities); die; + $events = self::getBpmnCollectionBy('Event', EventPeer::PRJ_UID, $prjUid, true); $gateways = self::getBpmnCollectionBy('Gateway', GatewayPeer::PRJ_UID, $prjUid, true); $flows = self::getBpmnCollectionBy('Flow', FlowPeer::PRJ_UID, $prjUid, true); @@ -450,8 +455,6 @@ class Model public static function updateProject($prjUid, $projectUpdated) { - echo 'PRJ_UID ->: ' . $prjUid . PHP_EOL; - $project = ProjectPeer::retrieveByPK($prjUid); $project->setPrjName($projectUpdated['prj_name']); $project->setPrjUpdateDate(date("Y-m-d H:i:s")); @@ -466,10 +469,12 @@ class Model $diagram = DiagramPeer::retrieveByPK($diagramData['dia_uid']); if (! is_object($diagram)) { - throw new \RuntimeException("Related Diagram with id: {$diagramData['dia_uid']}, does not exist!"); + throw new \RuntimeException("Project's diagram with id: {$diagramData['dia_uid']}, doesn't exist."); } - $diagram->setDiaName($diagramData['dia_name']); + if (array_key_exists('dia_name', $diagramData)) { + $diagram->setDiaName($diagramData['dia_name']); + } if (!empty($diagramData['dia_is_closable'])) { $diagram->setDiaIsClosable($diagramData['dia_is_closable']); @@ -519,6 +524,11 @@ class Model break; case 'activities': $activity = ActivityPeer::retrieveByPk($data['ACT_UID']); + + // fixing data + //$data['ELEMENT_UID'] = $data['BOU_ELEMENT_UID']; + //unset($data['BOU_ELEMENT_UID']); + $activity->fromArray($data); $activity->save(); break; @@ -609,12 +619,12 @@ class Model public function deleteProject($prjUid) { - $project = self::loadProject($prjUid); + $projectData = self::loadProject($prjUid); // TODO first at all, make validation, the project can only deleted if there are not any started case for it // Delete related objects - $diagramData = $project['diagrams'][0]; + $diagramData = $projectData['diagrams'][0]; foreach ($diagramData['flows'] as $data) { $flow = FlowPeer::retrieveByPK($data['flo_uid']); @@ -652,6 +662,9 @@ class Model $process = ProcessPeer::retrieveByPK($diagramData['pro_uid']); $process->delete(); + $diagram = DiagramPeer::retrieveByPK($diagramData['dia_uid']); + $diagram->delete(); + $project = ProjectPeer::retrieveByPK($prjUid); $project->delete(); @@ -686,6 +699,10 @@ class Model continue; } + /*print_r($savedProject['diagrams'][0][$element]); + print_r($updatedProject['diagrams'][0][$element]); + var_dump($key);*/ + $arrayDiff = self::arrayDiff( $savedProject['diagrams'][0][$element], $updatedProject['diagrams'][0][$element],