public static function createFromStruct(array $projectData, $generateUid = true) { $projectData["prj_name"] = trim($projectData["prj_name"]); if ($projectData["prj_name"] == '') { throw new \Exception("`prj_name` is required but it is empty."); } if (\Process::existsByProTitle($projectData["prj_name"])) { throw new \Exception("Project with name: {$projectData["prj_name"]}, already exists."); } $activities = $projectData['diagrams']['0']['activities']; foreach ($activities as $value) { if (empty($value['act_type'])) { throw new \Exception("For activity: {$value['act_uid']} `act_type` is required but missing."); } } $events = $projectData['diagrams']['0']['events']; foreach ($events as $value) { if (empty($value['evn_type'])) { throw new \Exception("For event: {$value['evn_uid']} `evn_type` is required but missing."); } if (empty($value['evn_marker'])) { throw new \Exception("For event: {$value['evn_uid']} `evn_marker` is required but missing."); } } $bwp = new self; $result = array(); $data = array(); if ($generateUid) { $result[0]["old_uid"] = isset($projectData["prj_uid"]) ? $projectData["prj_uid"] : ""; $projectData["prj_uid"] = Util\Common::generateUID(); $result[0]["new_uid"] = $projectData["prj_uid"]; $result[0]["object"] = "project"; } $data["PRJ_UID"] = $projectData["prj_uid"]; $data["PRJ_AUTHOR"] = $projectData["prj_author"]; $bwp->create($data); $diagramData = $processData = array(); if (array_key_exists("diagrams", $projectData) && is_array($projectData["diagrams"]) && count($projectData["diagrams"]) > 0) { $diagramData = array_change_key_case($projectData["diagrams"][0], CASE_UPPER); if ($generateUid) { $result[1]["old_uid"] = $diagramData["DIA_UID"]; $diagramData["DIA_UID"] = Util\Common::generateUID(); $result[1]["new_uid"] = $diagramData["DIA_UID"]; $result[1]["object"] = "diagram"; } } $bwp->addDiagram($diagramData); if (array_key_exists("process", $projectData) && is_array($projectData["process"])) { $processData = array_change_key_case($projectData["process"], CASE_UPPER); if ($generateUid) { $result[2]["old_uid"] = $processData["PRO_UID"]; $processData["PRO_UID"] = Util\Common::generateUID(); $result[2]["new_uid"] = $processData["PRO_UID"]; $result[2]["object"] = "process"; } } $bwp->addProcess($processData); $mappedUid = array_merge($result, self::updateFromStruct($bwp->prjUid, $projectData, $generateUid, true)); return $generateUid ? $mappedUid : $bwp->getUid(); }