diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 3bf5e7653..7b243084e 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -206,8 +206,8 @@ class Bpmn extends Handler public function addActivity($data) { - if (empty($this->diagram)) { - throw new \Exception("Error: There is not an initialized diagram."); + if (! ($process = $this->getProcess("object"))) { + throw new \Exception(sprintf("Error: There is not an initialized diagram for Project with prj_uid: %s.", $this->getUid())); } // setting defaults @@ -215,8 +215,8 @@ class Bpmn extends Handler $activity = new Activity(); $activity->fromArray($data); - $activity->setPrjUid($this->project->getPrjUid()); - $activity->setProUid($this->getProcess("object")->getProUid()); + $activity->setPrjUid($this->getUid()); + $activity->setProUid($process->getProUid()); $activity->save(); return $activity->getActUid(); diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project.php b/workflow/engine/src/Services/Api/ProcessMaker/Project.php index 345651e49..1e24995c7 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project.php @@ -4,6 +4,7 @@ namespace Services\Api\ProcessMaker; use Luracast\Restler\RestException; use ProcessMaker\Services\Api; use ProcessMaker\Adapter\Bpmn\Model as BpmnModel; +use ProcessMaker\Util\Hash; /** * Class Project @@ -96,6 +97,31 @@ class Project extends Api public function put($prjUid, $request_data) { try { + $projectData = $request_data; + $prjUid = $projectData["prj_uid"]; + $diagram = isset($request_data["diagrams"]) && isset($request_data["diagrams"][0]) ? $request_data["diagrams"][0] : array(); + + $bwp = \ProcessMaker\Project\Adapter\BpmnWorkflow::load($prjUid); + + $result = array(); + + foreach ($diagram["activities"] as $activityData) { + $activityData = array_change_key_case($activityData, CASE_UPPER); + + // activity exists ? + if ($activity = $bwp->getActivity($activityData["ACT_UID"])) { + // then update activity + $bwp->updateActivity($activityData["ACT_UID"], $activityData); + } else { + // if not exists then create it + $oldActUid = $activityData["ACT_UID"]; + $actUid = Hash::generateUID(); + $activityData["ACT_UID"] = $actUid; + $bwp->addActivity($activityData); + + $result[] = array("object" => "activity", "new_uid" => $actUid, "old_uid" => $oldActUid); + } + } //$result = BpmnModel::updateProject($prjUid, $request_data);