public function addSubProcess($proUid = '', $tasUid) { try { $subProcess = new \SubProcess(); $data = array('SP_UID' => Util\Common::generateUID(), 'PRO_UID' => 0, 'TAS_UID' => 0, 'PRO_PARENT' => $proUid, 'TAS_PARENT' => $tasUid, 'SP_TYPE' => 'SIMPLE', 'SP_SYNCHRONOUS' => 0, 'SP_SYNCHRONOUS_TYPE' => 'ALL', 'SP_SYNCHRONOUS_WAIT' => 0, 'SP_VARIABLES_OUT' => '', 'SP_VARIABLES_IN' => '', 'SP_GRID_IN' => ''); self::log("Adding SubProcess with data: ", $data); $spUid = $subProcess->create($data); self::log("Adding SubProcess success!, created sp_uid: ", $spUid); return $spUid; } catch (\Exception $oError) { throw $oError; } }
/** * Create Message-Application for the Case * * @param string $applicationUid Unique id of Case * @param string $projectUid Unique id of Project * @param string $eventUidThrow Unique id of Event (throw) * @param array $arrayApplicationData Case data * * return bool Return true if been created, false otherwise */ public function create($applicationUid, $projectUid, $eventUidThrow, array $arrayApplicationData) { try { $flagCreate = true; //Set data //Message-Event-Relation - Get unique id of Event (catch) $messageEventRelation = new \ProcessMaker\BusinessModel\MessageEventRelation(); $arrayMessageEventRelationData = $messageEventRelation->getMessageEventRelationWhere( array( \MessageEventRelationPeer::PRJ_UID => $projectUid, \MessageEventRelationPeer::EVN_UID_THROW => $eventUidThrow ), true ); if (!is_null($arrayMessageEventRelationData)) { $eventUidCatch = $arrayMessageEventRelationData["EVN_UID_CATCH"]; } else { $flagCreate = false; } //Message-Application - Get data ($eventUidThrow) $messageEventDefinition = new \ProcessMaker\BusinessModel\MessageEventDefinition(); if ($messageEventDefinition->existsEvent($projectUid, $eventUidThrow)) { $arrayMessageEventDefinitionData = $messageEventDefinition->getMessageEventDefinitionByEvent($projectUid, $eventUidThrow, true); $arrayMessageApplicationVariables = $arrayMessageEventDefinitionData["MSGED_VARIABLES"]; $messageApplicationCorrelation = \G::replaceDataField($arrayMessageEventDefinitionData["MSGED_CORRELATION"], $arrayApplicationData["APP_DATA"]); foreach ($arrayMessageApplicationVariables as $key => $value) { $arrayMessageApplicationVariables[$key] = \G::replaceDataField($value, $arrayApplicationData["APP_DATA"]); } } else { $flagCreate = false; } if (!$flagCreate) { //Return return false; } //Create $cnn = \Propel::getConnection("workflow"); try { $messageApplication = new \MessageApplication(); $messageApplicationUid = \ProcessMaker\Util\Common::generateUID(); $messageApplication->setMsgappUid($messageApplicationUid); $messageApplication->setAppUid($applicationUid); $messageApplication->setPrjUid($projectUid); $messageApplication->setEvnUidThrow($eventUidThrow); $messageApplication->setEvnUidCatch($eventUidCatch); $messageApplication->setMsgappVariables(serialize($arrayMessageApplicationVariables)); $messageApplication->setMsgappCorrelation($messageApplicationCorrelation); $messageApplication->setMsgappThrowDate("now"); if ($messageApplication->validate()) { $cnn->begin(); $result = $messageApplication->save(); $cnn->commit(); //Return return true; } else { $msg = ""; foreach ($messageApplication->getValidationFailures() as $validationFailure) { $msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }
/** * make_site * * @return array $test */ private function make_site() { $test = $this->create_site_test(); if ($test["created"] == true || $this->options["advanced"]["ao_db_drop"] == true) { /* Check if the hostname is local (localhost or 127.0.0.1) */ $islocal = (strcmp(substr($this->options['database']['hostname'], 0, strlen('localhost')), 'localhost') === 0) || (strcmp(substr($this->options['database']['hostname'], 0, strlen('127.0.0.1')), '127.0.0.1') === 0); $this->wf_site_name = $wf = $this->options['advanced']['ao_db_wf']; $this->rbac_site_name = $rb = $this->options['advanced']['ao_db_rb']; $this->report_site_name = $rp = $this->options['advanced']['ao_db_rp']; $schema = "schema.sql"; $values = "insert.sql"; if ($this->options['advanced']['ao_db_drop'] === true) { //Delete workspace directory if exists //Drop databases $this->run_query("DROP DATABASE IF EXISTS " . $wf, "Drop database $wf"); } $this->run_query("CREATE DATABASE IF NOT EXISTS " . $wf . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci", "Create database $wf"); if ($this->cc_status == 1) { $host = ($islocal) ? "localhost" : "%"; $this->run_query("GRANT ALL PRIVILEGES ON `$wf`.* TO $wf@'$host' IDENTIFIED BY '{$this->options['password']}' WITH GRANT OPTION", "Grant privileges for user $wf on database $wf"); } /* Dump schema workflow && data */ $this->log("Import database schema:\n"); $myPortA = explode(":", $this->options['database']['hostname']); if (count($myPortA) < 2) { $myPortA[1] = "3306"; } $myPort = $myPortA[1]; $this->options['database']['hostname'] = $myPortA[0]; mysql_select_db($wf, $this->connection_database); $pws = PATH_WORKFLOW_MYSQL_DATA . $schema; $qws = $this->query_sql_file(PATH_WORKFLOW_MYSQL_DATA . $schema, $this->connection_database); $this->log($qws, isset($qws['errors'])); $qwv = $this->query_sql_file(PATH_WORKFLOW_MYSQL_DATA . $values, $this->connection_database); $this->log($qwv, isset($qwv['errors'])); $http = (G::is_https() == true) ? 'https' : 'http'; $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; $host = $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != '80' ? ':' . $_SERVER['SERVER_PORT'] : ''); $workspace = $this->options['name']; $endpoint = sprintf( '%s://%s/sys%s/%s/%s/oauth2/grant', $http, $host, $workspace, $lang, SYS_SKIN ); // inserting the outh_client $query = ( "INSERT INTO OAUTH_CLIENTS (CLIENT_ID,CLIENT_SECRET,CLIENT_NAME,CLIENT_DESCRIPTION,CLIENT_WEBSITE,REDIRECT_URI,USR_UID ) VALUES ('x-pm-local-client','179ad45c6ce2cb97cf1029e212046e81','PM Web Designer','ProcessMaker Web Designer App','www.processmaker.com','" . $endpoint . "','00000000000000000000000000000001' )"); $this->run_query( $query ); /* Dump schema rbac && data */ $pws = PATH_RBAC_MYSQL_DATA . $schema; mysql_select_db($rb, $this->connection_database); $qrs = $this->query_sql_file(PATH_RBAC_MYSQL_DATA . $schema, $this->connection_database); $this->log($qrs, isset($qrs['errors'])); $qrv = $this->query_sql_file(PATH_RBAC_MYSQL_DATA . $values, $this->connection_database); $this->log($qrv, isset($qrv['errors'])); mysql_select_db($wf, $this->connection_database); require_once ("propel/Propel.php"); require_once ('classes/model/AppCacheView.php'); $appCache = new AppCacheView(); $appCache->setPathToAppCacheFiles(PATH_METHODS . 'setup/setupSchemas/'); $triggers = $appCache->getTriggers("en"); $this->log("Create 'cases list cache' triggers"); foreach ($triggers as $triggerName => $trigger) { $this->run_query($trigger, "-> Trigger $triggerName"); } $path_site = $this->options['path_data'] . "/sites/" . $this->options['name'] . "/"; $db_file = $path_site . "db.php"; @mkdir($path_site, 0777, true); @mkdir($path_site . "files/", 0777, true); @mkdir($path_site . "mailTemplates/", 0777, true); @mkdir($path_site . "public/", 0777, true); @mkdir($path_site . "reports/", 0777, true); @mkdir($path_site . "xmlForms", 0777, true); $db_text = "<?php\n" . "// Processmaker configuration\n" . "define ('DB_ADAPTER', 'mysql' );\n" . "define ('DB_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_NAME', '" . $wf . "' );\n" . "define ('DB_USER', '" . (($this->cc_status == 1) ? $wf : $this->options['database']['username']) . "' );\n" . "define ('DB_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "define ('DB_RBAC_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_RBAC_NAME', '" . $rb . "' );\n" . "define ('DB_RBAC_USER', '" . (($this->cc_status == 1) ? $rb : $this->options['database']['username']) . "' );\n" . "define ('DB_RBAC_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n" . "define ('DB_REPORT_HOST', '" . $this->options['database']['hostname'] . ":" . $myPort . "' );\n" . "define ('DB_REPORT_NAME', '" . $rp . "' );\n" . "define ('DB_REPORT_USER', '" . (($this->cc_status == 1) ? $rp : $this->options['database']['username']) . "' );\n" . "define ('DB_REPORT_PASS', '" . (($this->cc_status == 1) ? $this->options['password'] : $this->options['database']['password']) . "' );\n"; if (defined('PARTNER_FLAG') || isset($_REQUEST['PARTNER_FLAG'])) { $db_text .= "define ('PARTNER_FLAG', " . ((defined('PARTNER_FLAG') && PARTNER_FLAG != '') ? PARTNER_FLAG : ((isset($_REQUEST['PARTNER_FLAG'])) ? $_REQUEST['PARTNER_FLAG']:'false')) . ");\n"; if (defined('SYSTEM_NAME')) { $db_text .= " define ('SYSTEM_NAME', '" . SYSTEM_NAME . "');\n"; } } $db_text .="?>"; $fp = @fopen($db_file, "w"); $this->log("Create: " . $db_file . " => " . ((!$fp) ? $fp : "OK") . "\n", $fp === false); $ff = @fputs($fp, $db_text, strlen($db_text)); $this->log("Write: " . $db_file . " => " . ((!$ff) ? $ff : "OK") . "\n", $ff === false); fclose($fp); $this->setPartner(); $this->setAdmin(); $querySql = "INSERT INTO EMAIL_SERVER(MESS_UID, MESS_ENGINE) VALUES('" . \ProcessMaker\Util\Common::generateUID() . "', 'MAIL')"; $this->run_query($querySql); } return $test; }
/** * Create Variable * * @param string $messageUid Unique id of Project * @param array $arrayData Data * * return array Return data of the new Message created */ public function create($messageTypeUid, array $arrayData) { try { //Verify data $validator = new \ProcessMaker\BusinessModel\Validator(); $messageType = new \ProcessMaker\BusinessModel\MessageType(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["MSGTV_UID"]); unset($arrayData["MSGT_UID"]); //Verify data $messageType->throwExceptionIfNotExistsMessageType($messageTypeUid, $this->arrayFieldNameForException["messageTypeUid"]); $this->throwExceptionIfDataIsInvalid("", $messageTypeUid, $arrayData); //Create $cnn = \Propel::getConnection("workflow"); try { $messageTypeVariable = new \MessageTypeVariable(); $messageTypeVariable->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $messageTypeVariableUid = \ProcessMaker\Util\Common::generateUID(); $messageTypeVariable->setMsgtvUid($messageTypeVariableUid); $messageTypeVariable->setMsgtUid($messageTypeUid); if ($messageTypeVariable->validate()) { $cnn->begin(); $result = $messageTypeVariable->save(); $cnn->commit(); //Return return $this->getMessageTypeVariable($messageTypeVariableUid); } else { $msg = ""; foreach ($messageTypeVariable->getValidationFailures() as $validationFailure) { $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }
/** * Save Data for Email-Event * @var string $prj_uid. Uid for Process * @var string $arrayData. Data for Trigger * * return array */ public function save($prj_uid = '', $arrayData = array()) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data $process->throwExceptionIfNotExistsProcess($prj_uid, "projectUid"); //Create $db = \Propel::getConnection("workflow"); try { $emailEvent = new \EmailEvent(); $emailEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $emailEventUid = \ProcessMaker\Util\Common::generateUID(); $emailEvent->setEmailEventUid($emailEventUid); $emailEvent->setPrjUid($prj_uid); $db->begin(); $result = $emailEvent->save(); $db->commit(); return $this->getEmailEvent($emailEventUid); } catch (\Exception $e) { $db->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }
public function save($con = null) { parent::save($con); $this->setBoundDefaults(); if ($this->bound->getBouUid() == "") { $this->bound->setBouUid(\ProcessMaker\Util\Common::generateUID()); } $this->bound->save($con); }
/** * Create Variable for a Process * * @param string $processUid Unique id of Process * @param array $arrayData Data * * return array Return data of the new Variable created */ public function create($processUid, array $arrayData) { try { //Verify data Validator::proUid($processUid, '$prj_uid'); $arrayData = array_change_key_case($arrayData, CASE_UPPER); $this->existsName($processUid, $arrayData["VAR_NAME"], ""); $this->throwExceptionFieldDefinition($arrayData); //Create $cnn = \Propel::getConnection("workflow"); try { $variable = new \ProcessVariables(); $sPkProcessVariables = \ProcessMaker\Util\Common::generateUID(); $variable->setVarUid($sPkProcessVariables); $variable->setPrjUid($processUid); if ($variable->validate()) { $cnn->begin(); if (isset($arrayData["VAR_NAME"])) { $variable->setVarName($arrayData["VAR_NAME"]); } else { throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_name'))); } if (isset($arrayData["VAR_FIELD_TYPE"])) { $variable->setVarFieldType($arrayData["VAR_FIELD_TYPE"]); } else { throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_field_type'))); } if (isset($arrayData["VAR_FIELD_SIZE"])) { $variable->setVarFieldSize($arrayData["VAR_FIELD_SIZE"]); } if (isset($arrayData["VAR_LABEL"])) { $variable->setVarLabel($arrayData["VAR_LABEL"]); } else { throw new \Exception(\G::LoadTranslation("ID_CAN_NOT_BE_NULL", array('$var_label'))); } if (isset($arrayData["VAR_DBCONNECTION"])) { $variable->setVarDbconnection($arrayData["VAR_DBCONNECTION"]); } else { $variable->setVarDbconnection(""); } if (isset($arrayData["VAR_SQL"])) { $variable->setVarSql($arrayData["VAR_SQL"]); } else { $variable->setVarSql(""); } if (isset($arrayData["VAR_NULL"])) { $variable->setVarNull($arrayData["VAR_NULL"]); } else { $variable->setVarNull(0); } if (isset($arrayData["VAR_DEFAULT"])) { $variable->setVarDefault($arrayData["VAR_DEFAULT"]); } if (isset($arrayData["VAR_ACCEPTED_VALUES"])) { $encodeAcceptedValues = \G::json_encode($arrayData["VAR_ACCEPTED_VALUES"]); $variable->setVarAcceptedValues($encodeAcceptedValues); } if (isset($arrayData["INP_DOC_UID"])) { $variable->setInpDocUid($arrayData["INP_DOC_UID"]); } $variable->save(); $cnn->commit(); } else { $msg = ""; foreach ($variable->getValidationFailures() as $validationFailure) { $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . "\n" . $msg); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } //Return $variable = $this->getVariable($processUid, $sPkProcessVariables); return $variable; } catch (\Exception $e) { throw $e; } }
/** * Create Web Entry for a Process * * @param string $processUid Unique id of Process * @param string $userUidCreator Unique id of creator User * @param array $arrayData Data * * return array Return data of the new Web Entry created */ public function create($processUid, $userUidCreator, array $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["WE_UID"]); unset($arrayData["WE_DATA"]); //Verify data $process->throwExceptionIfNotExistsProcess($processUid, $this->arrayFieldNameForException["processUid"]); $this->throwExceptionIfDataIsInvalid("", $processUid, $arrayData); //Create $cnn = \Propel::getConnection("workflow"); try { $webEntry = new \WebEntry(); $webEntry->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $webEntryUid = \ProcessMaker\Util\Common::generateUID(); $webEntry->setWeUid($webEntryUid); $webEntry->setProUid($processUid); $webEntry->setWeCreateUsrUid($userUidCreator); $webEntry->setWeCreateDate("now"); if ($webEntry->validate()) { $cnn->begin(); $result = $webEntry->save(); $cnn->commit(); //Set WE_TITLE if (isset($arrayData["WE_TITLE"])) { $result = \Content::addContent("WE_TITLE", "", $webEntryUid, SYS_LANG, $arrayData["WE_TITLE"]); } if (isset($arrayData["WE_DESCRIPTION"])) { $result = \Content::addContent("WE_DESCRIPTION", "", $webEntryUid, SYS_LANG, $arrayData["WE_DESCRIPTION"]); } //Set WE_DATA $this->setWeData($webEntryUid); //Return return $this->getWebEntry($webEntryUid); } else { $msg = ""; foreach ($webEntry->getValidationFailures() as $validationFailure) { $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }
/** * Create/Update CaseScheduler * * @param string $caseSchedulerUid Unique id of CaseScheduler * @param string $projectUid Unique id of Project * @param string $userUidCreatorUpdater Unique id of creator/updater User * @param array $arrayData Data * @param array $arrayDataPlugin Data plugin * * return void */ public function createUpdate($caseSchedulerUid, $projectUid, $userUidCreatorUpdater, array $arrayData, array $arrayDataPlugin = array()) { try { //Set variables $flagInsert = $caseSchedulerUid == "" ? true : false; $option = $flagInsert ? "INS" : "UPD"; //Set data if ($flagInsert) { $caseSchedulerUid = \ProcessMaker\Util\Common::generateUID(); } foreach ($arrayData as $key => $value) { if (is_array($value)) { foreach ($value as $key2 => $value2) { $arrayData[$key][$key2] = trim($value2); } } else { $arrayData[$key] = trim($value); } } $arrayCaseSchedulerData = array(); $arrayCaseSchedulerData["SCH_UID"] = $caseSchedulerUid; $arrayCaseSchedulerData["SCH_NAME"] = $arrayData["SCH_NAME"]; $arrayCaseSchedulerData["PRO_UID"] = $projectUid; $arrayCaseSchedulerData["TAS_UID"] = $arrayData["TAS_UID"]; $arrayCaseSchedulerData["SCH_DEL_USER_UID"] = $arrayData["SCH_USER_UID"]; $arrayCaseSchedulerData["SCH_DEL_USER_NAME"] = $arrayData["SCH_USER_NAME"]; switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]); $arrayCaseSchedulerData["SCH_STATE"] = "ACTIVE"; $arrayCaseSchedulerData["SCH_LAST_STATE"] = "CREATED"; $sDateTmp = $arrayData["SCH_START_DATE"] != "" ? $arrayData["SCH_START_DATE"] : date("Y-m-d"); break; case "UPD": if ($arrayData["SCH_USER_PASSWORD"] != "DefaultPM") { $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]); } $sDateTmp = $arrayData["SCH_START_DATE"]; break; } $caseSchedulerOption = (int) $arrayData["SCH_OPTION"]; $arrayCaseSchedulerData["USR_UID"] = $userUidCreatorUpdater; $arrayCaseSchedulerData["SCH_OPTION"] = $caseSchedulerOption; $arrayCaseSchedulerData["SCH_START_TIME"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"])); $arrayCaseSchedulerData["SCH_START_DATE"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"])); $sValue = ""; $sDaysPerformTask = ""; $sWeeks = ""; $sMonths = ""; switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_START_DAY"] = ""; $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ""; $arrayCaseSchedulerData["SCH_REPEAT_UNTIL"] = ""; $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = ""; break; case "UPD": break; } switch ($caseSchedulerOption) { case 1: //Option 1 $sValue = $arrayData["SCH_DAYS_PERFORM_TASK"]; switch ($sValue) { case "1": $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|1"; break; case "2": $arrayCaseSchedulerData["SCH_OPTION"] = "2"; $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = "1"; $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = "1|2|3|4|5|"; break; case "3": //Every [n] Days $sDaysPerformTask = $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"]; $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|" . $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"]; break; } break; case 2: //If the option is zero, set by default 1 $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = empty($arrayData["SCH_EVERY_DAYS"]) ? 1 : $arrayData["SCH_EVERY_DAYS"]; $sWeeks = ""; if (!empty($arrayData["SCH_WEEK_DAYS"])) { $aWeekDays = $arrayData["SCH_WEEK_DAYS"]; foreach ($aWeekDays as $value) { $sWeeks = $sWeeks . $value . "|"; } } if (!empty($arrayData["SCH_WEEK_DAYS_2"])) { $aWeekDays2 = $arrayData["SCH_WEEK_DAYS_2"]; foreach ($aWeekDays2 as $value) { $sWeeks = $sWeeks . $value . "|"; } } $sStartTime = $arrayData["SCH_START_TIME"]; $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = $sWeeks; break; case 3: $nStartDay = $arrayData["SCH_START_DAY"]; if ($nStartDay == 1) { $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_1"]; } else { $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_2_WEEKS"] . "|" . $arrayData["SCH_START_DAY_OPT_2_DAYS_WEEK"]; } $sMonths = ""; if (!empty($arrayData["SCH_MONTHS"])) { $aMonths = $arrayData["SCH_MONTHS"]; foreach ($aMonths as $value) { $sMonths = $sMonths . $value . "|"; } } if (!empty($arrayData["SCH_MONTHS_2"])) { $aMonths2 = $arrayData["SCH_MONTHS_2"]; foreach ($aMonths2 as $value) { $sMonths = $sMonths . $value . "|"; } } if (!empty($arrayData["SCH_MONTHS_3"])) { $aMonths3 = $arrayData["SCH_MONTHS_3"]; foreach ($aMonths3 as $value) { $sMonths = $sMonths . $value . "|"; } } $arrayCaseSchedulerData["SCH_MONTHS"] = $sMonths; $sValue = $nStartDay; break; } $caseScheduler = new \CaseScheduler(); $recalculateDate = false; $recalculateTime = false; switch ($option) { case "INS": $recalculateDate = true; $recalculateTime = true; break; case "UPD": $arrayDataAux = $caseScheduler->load($caseSchedulerUid); $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"] != "" ? $arrayData["SCH_END_DATE"] : null; //If the start date has changed then recalculate the next run time $recalculateDate = $arrayData["SCH_START_DATE"] != $arrayData["PREV_SCH_START_DATE"] ? true : false; $recalculateTime = date("H:i:s", strtotime($arrayData["SCH_START_TIME"])) != date("H:i:s", strtotime($arrayData["PREV_SCH_START_TIME"])) ? true : false; break; } switch ($caseSchedulerOption) { case 4: //$arrayCaseSchedulerData["SCH_END_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"]; break; case 5: switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_START_TIME"] = time(); $arrayCaseSchedulerData["SCH_START_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"]; break; case "UPD": break; } $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = $arrayData["SCH_REPEAT_EVERY"]; break; } switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y-m-d") . " " . ($caseSchedulerOption != 5 ? $arrayData["SCH_START_TIME"] . ":00" : date("H:i:s")); if ($arrayData["SCH_END_DATE"] != "") { $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"]; } break; case "UPD": break; } //if (!empty($arrayData["SCH_REPEAT_TASK_CHK"])) { // if ($arrayData["SCH_REPEAT_EVERY_OPT"] . "" == "2") { // $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ((int)($arrayData["SCH_REPEAT_EVERY"])) * 60; // } else { // $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = (int)($arrayData["SCH_REPEAT_EVERY"]); // } //} //Create/Update $caseSchedulerAux = new \CaseScheduler(); $caseSchedulerUid = ""; $arrayCaseSchedulerDataOld = array(); switch ($option) { case "INS": if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") { $arrayCaseSchedulerData["CASE_SH_PLUGIN_UID"] = $arrayData["CASE_SH_PLUGIN_UID"]; } $result = $caseScheduler->create($arrayCaseSchedulerData); $caseSchedulerUid = $caseScheduler->getSchUid(); $arrayCaseSchedulerDataOld = $caseSchedulerAux->load($caseSchedulerUid); break; case "UPD": $caseSchedulerUid = $caseScheduler->getSchUid(); $arrayCaseSchedulerDataOld = $caseSchedulerAux->load($caseSchedulerUid); $result = $caseScheduler->update($arrayCaseSchedulerData); break; } //Update the SCH_TIME_NEXT_RUN field $caseScheduler = new \CaseScheduler(); $arrayCaseSchedulerData = $caseScheduler->load($caseSchedulerUid); $flagUpdateTimeNextRun = false; switch ((int) $arrayCaseSchedulerData["SCH_OPTION"]) { case 1: //Daily $flagUpdateTimeNextRun = $recalculateDate || $recalculateTime; break; case 2: //Weekly $flagUpdateTimeNextRun = $recalculateDate || $recalculateTime || $arrayCaseSchedulerData["SCH_WEEK_DAYS"] != $arrayCaseSchedulerDataOld["SCH_WEEK_DAYS"]; break; case 3: //Monthly $flagUpdateTimeNextRun = $recalculateDate || $recalculateTime || $arrayCaseSchedulerData["SCH_START_DAY"] != $arrayCaseSchedulerDataOld["SCH_START_DAY"] || $arrayCaseSchedulerData["SCH_MONTHS"] != $arrayCaseSchedulerDataOld["SCH_MONTHS"]; break; case 4: //One time only $flagUpdateTimeNextRun = $recalculateTime || $arrayCaseSchedulerData["SCH_START_TIME"] != $arrayCaseSchedulerDataOld["SCH_START_TIME"]; break; case 5: //Every $flagUpdateTimeNextRun = $option == "INS" || $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] != $arrayCaseSchedulerDataOld["SCH_REPEAT_EVERY"]; break; } if ($flagUpdateTimeNextRun) { $caseSchedulerTimeNextRunNew = $caseScheduler->getTimeNextRunByDate($arrayCaseSchedulerData, date("Y-m-d H:i:s")); } //Plugin if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") { $oPluginRegistry =& \PMPluginRegistry::getSingleton(); $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins(); $params = explode("--", $arrayData["CASE_SH_PLUGIN_UID"]); foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPluginDetail) { if ($caseSchedulerPluginDetail->sNamespace == $params[0] && $caseSchedulerPluginDetail->sActionId == $params[1]) { $caseSchedulerSelected = $caseSchedulerPluginDetail; } } if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) { //Save the form $arrayDataPlugin["SCH_UID"] = $arrayCaseSchedulerData["SCH_UID"]; $oPluginRegistry->executeMethod($caseSchedulerPluginDetail->sNamespace, $caseSchedulerPluginDetail->sActionSave, $arrayDataPlugin); } } } catch (\Exception $e) { throw $e; } }
/** * Single create Timer-Event * * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return string Return unique id of Timer-Event */ public function singleCreate($projectUid, array $arrayData) { try { $cnn = \Propel::getConnection("workflow"); try { $timerEvent = new \TimerEvent(); $timerEventUid = \ProcessMaker\Util\Common::generateUID(); $timerEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $timerEvent->setTmrevnUid($timerEventUid); $timerEvent->setPrjUid($projectUid); if ($timerEvent->validate()) { $cnn->begin(); $result = $timerEvent->save(); $cnn->commit(); //Return return $timerEventUid; } else { $msg = ""; foreach ($timerEvent->getValidationFailures() as $validationFailure) { $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }
/** * Create/Update CaseScheduler * * @param string $caseSchedulerUid Unique id of CaseScheduler * @param string $projectUid Unique id of Project * @param string $userUidCreatorUpdater Unique id of creator/updater User * @param array $arrayData Data * @param array $arrayDataPlugin Data plugin * * return void */ public function createUpdate($caseSchedulerUid, $projectUid, $userUidCreatorUpdater, array $arrayData, array $arrayDataPlugin = array()) { try { //Set variables $flagInsert = ($caseSchedulerUid == "")? true : false; $option = ($flagInsert)? "INS" : "UPD"; //Set data if ($flagInsert) { $caseSchedulerUid = \ProcessMaker\Util\Common::generateUID(); } foreach ($arrayData as $key => $value) { if (is_array($value)) { foreach ($value as $key2 => $value2) { $arrayData[$key][$key2] = trim($value2); } } else { $arrayData[$key] = trim($value); } } $arrayCaseSchedulerData = array(); $arrayCaseSchedulerData["SCH_UID"] = $caseSchedulerUid; $arrayCaseSchedulerData["SCH_NAME"] = $arrayData["SCH_NAME"]; $arrayCaseSchedulerData["PRO_UID"] = $projectUid; $arrayCaseSchedulerData["TAS_UID"] = $arrayData["TAS_UID"]; $arrayCaseSchedulerData["SCH_DEL_USER_UID"] = $arrayData["SCH_USER_UID"]; $arrayCaseSchedulerData["SCH_DEL_USER_NAME"] = $arrayData["SCH_USER_NAME"]; switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]); $arrayCaseSchedulerData["SCH_STATE"] = "ACTIVE"; $arrayCaseSchedulerData["SCH_LAST_STATE"] = "CREATED"; $sDateTmp = ($arrayData["SCH_START_DATE"] != "")? $arrayData["SCH_START_DATE"] : date("Y-m-d"); break; case "UPD": if ($arrayData["SCH_USER_PASSWORD"] != "DefaultPM") { $arrayCaseSchedulerData["SCH_DEL_USER_PASS"] = \Bootstrap::hashPassword($arrayData["SCH_USER_PASSWORD"]); } $sDateTmp = $arrayData["SCH_START_DATE"]; break; } $caseSchedulerOption = (int)($arrayData["SCH_OPTION"]); $arrayCaseSchedulerData["USR_UID"] = $userUidCreatorUpdater; $arrayCaseSchedulerData["SCH_OPTION"] = $caseSchedulerOption; $arrayCaseSchedulerData["SCH_START_TIME"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"])); $arrayCaseSchedulerData["SCH_START_DATE"] = date("Y-m-d", strtotime($sDateTmp)) . " " . date("H:i:s", strtotime($arrayData["SCH_START_TIME"])); $sValue = ""; $sDaysPerformTask = ""; $sWeeks = ""; $sMonths = ""; $sStartDay = ""; switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_START_DAY"] = ""; $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ""; $arrayCaseSchedulerData["SCH_REPEAT_UNTIL"] = ""; $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = ""; break; case "UPD": break; } switch ($caseSchedulerOption) { case 1: //Option 1 $sValue = $arrayData["SCH_DAYS_PERFORM_TASK"]; switch ($sValue) { case "1": $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|1"; break; case "2": $arrayCaseSchedulerData["SCH_OPTION"] = "2"; $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = "1"; $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = "1|2|3|4|5|"; break; case "3": //Every [n] Days $sDaysPerformTask = $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"]; $arrayCaseSchedulerData["SCH_DAYS_PERFORM_TASK"] = $arrayData["SCH_DAYS_PERFORM_TASK"] . "|" . $arrayData["SCH_DAYS_PERFORM_TASK_OPT_3"]; break; } break; case 2: //If the option is zero, set by default 1 $arrayCaseSchedulerData["SCH_EVERY_DAYS"] = (empty($arrayData["SCH_EVERY_DAYS"]))? 1 : $arrayData["SCH_EVERY_DAYS"]; $sWeeks = ""; if (!empty($arrayData["SCH_WEEK_DAYS"])) { $aWeekDays = $arrayData["SCH_WEEK_DAYS"]; foreach ($aWeekDays as $value) { $sWeeks = $sWeeks . $value . "|"; } } if (!empty($arrayData["SCH_WEEK_DAYS_2"])) { $aWeekDays2 = $arrayData["SCH_WEEK_DAYS_2"]; foreach ($aWeekDays2 as $value) { $sWeeks = $sWeeks . $value . "|"; } } $sStartTime = $arrayData["SCH_START_TIME"]; $arrayCaseSchedulerData["SCH_WEEK_DAYS"] = $sWeeks; break; case 3: $nStartDay = $arrayData["SCH_START_DAY"]; if ($nStartDay == 1) { $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_1"]; } else { $arrayCaseSchedulerData["SCH_START_DAY"] = $nStartDay . "|" . $arrayData["SCH_START_DAY_OPT_2_WEEKS"] . "|" . $arrayData["SCH_START_DAY_OPT_2_DAYS_WEEK"]; } $sMonths = ""; if (!empty($arrayData["SCH_MONTHS"])) { $aMonths = $arrayData["SCH_MONTHS"]; foreach ($aMonths as $value) { $sMonths = $sMonths . $value . "|"; } } if (!empty($arrayData["SCH_MONTHS_2"])) { $aMonths2 = $arrayData["SCH_MONTHS_2"]; foreach ($aMonths2 as $value) { $sMonths = $sMonths . $value . "|"; } } if (!empty($arrayData["SCH_MONTHS_3"])) { $aMonths3 = $arrayData["SCH_MONTHS_3"]; foreach ($aMonths3 as $value) { $sMonths = $sMonths . $value . "|"; } } $arrayCaseSchedulerData["SCH_MONTHS"] = $sMonths; $sStartDay = $arrayCaseSchedulerData["SCH_START_DAY"]; $sValue = $nStartDay; break; } $caseScheduler = new \CaseScheduler(); switch ($option) { case "INS": break; case "UPD": $arrayDataAux = $caseScheduler->load($caseSchedulerUid); if ($arrayData["SCH_END_DATE"] != "") { $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"]; } //If the start date has changed then recalculate the next run time $recalculateDate = ($arrayData["SCH_START_DATE"] == $arrayData["PREV_SCH_START_DATE"])? false : true; $recalculateTime = (date("H:i:s", strtotime($arrayData["SCH_START_TIME"])) == date("H:i:s", strtotime($arrayData["PREV_SCH_START_TIME"])))? false : true; break; } $nActualTime = $arrayData["SCH_START_TIME"]; if ($caseSchedulerOption != 1 && $caseSchedulerOption != 4 && $caseSchedulerOption != 5) { if ($sStartDay == "") { $sStartDay = date("Y-m-d"); } $dCurrentDay = (int)(date("d")); $dCurrentMonth = (int)(date("m")); $aStartDay = explode("|", $arrayCaseSchedulerData["SCH_START_DAY"]); if ($caseSchedulerOption == 3 && $aStartDay[0] == "1") { $monthsArray = explode("|", $sMonths); foreach ($monthsArray as $row) { switch ($option) { case "INS": if ((int)($row) == $dCurrentMonth && $dCurrentDay <= (int)($aStartDay[1])) { $startTime = $arrayData["SCH_START_TIME"] . ":00"; $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime; break; } else { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false); } break; case "UPD": if ($dCurrentMonth == $row && $dCurrentDay < $aStartDay[1]) { $startTime = $arrayData["SCH_START_TIME"] . ":00"; if ($recalculateDate) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y") . "-" . $row . "-" . $aStartDay[1] . " " . $startTime; } else { if ($recalculateTime) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00"; } } break; } else { if ($recalculateDate) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false); } else { if ($recalculateTime) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00"; } } } break; } } } else { switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false); break; case "UPD": if ($recalculateDate) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->updateNextRun($caseSchedulerOption, $sValue, $nActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths, $sDateTmp, false); } else { if ($recalculateTime) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00"; } } break; } } } else { if ($caseSchedulerOption == 4) { $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"]; } switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"]; break; case "UPD": if ($recalculateDate) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $arrayCaseSchedulerData["SCH_START_TIME"]; } else { if ($recalculateTime) { $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = $caseScheduler->getSchTimeNextRun("Y-m-d") . " " . $arrayData["SCH_START_TIME"] . ":00"; } } break; } if ($caseSchedulerOption == 5) { switch ($option) { case "INS": $arrayCaseSchedulerData["SCH_START_TIME"] = time(); $arrayCaseSchedulerData["SCH_START_DATE"] = $arrayCaseSchedulerData["SCH_START_TIME"]; $date = $arrayCaseSchedulerData["SCH_START_TIME"]; break; case "UPD": $date = $caseScheduler->getSchLastRunTime(); if (is_null($date)) { $date = $caseScheduler->getSchStartTime(); } $date = strtotime($date); break; } $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = $arrayData["SCH_REPEAT_EVERY"]; $arrayCaseSchedulerData["SCH_TIME_NEXT_RUN"] = date("Y-m-d H:i", $date + (((int)($arrayData["SCH_REPEAT_EVERY"])) * 60 * 60)); } } switch ($option) { case "INS": if ($arrayData["SCH_END_DATE"] != "") { $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"]; } break; case "UPD": break; } if (!empty($arrayData["SCH_REPEAT_TASK_CHK"])) { if ($arrayData["SCH_REPEAT_EVERY_OPT"] . "" == "2") { $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = ((int)($arrayData["SCH_REPEAT_EVERY"])) * 60; } else { $arrayCaseSchedulerData["SCH_REPEAT_EVERY"] = (int)($arrayData["SCH_REPEAT_EVERY"]); } } //Create/Update switch ($option) { case "INS": if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") { $arrayCaseSchedulerData["CASE_SH_PLUGIN_UID"] = $arrayData["CASE_SH_PLUGIN_UID"]; } $caseScheduler->create($arrayCaseSchedulerData); break; case "UPD": $caseScheduler->update($arrayCaseSchedulerData); break; } //Plugin if (isset($arrayData["CASE_SH_PLUGIN_UID"]) && $arrayData["CASE_SH_PLUGIN_UID"] != "") { $oPluginRegistry = &\PMPluginRegistry::getSingleton(); $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins(); $params = explode("--", $arrayData["CASE_SH_PLUGIN_UID"]); foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPluginDetail) { if ($caseSchedulerPluginDetail->sNamespace == $params[0] && $caseSchedulerPluginDetail->sActionId == $params[1]) { $caseSchedulerSelected = $caseSchedulerPluginDetail; } } if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) { //Save the form $arrayDataPlugin["SCH_UID"] = $arrayCaseSchedulerData["SCH_UID"]; $oPluginRegistry->executeMethod($caseSchedulerPluginDetail->sNamespace, $caseSchedulerPluginDetail->sActionSave, $arrayDataPlugin); } } } catch (\Exception $e) { throw $e; } }
/** * Create Category * * @param array $arrayData Data * * return array Return data of the new Category created */ public function create(array $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["CAT_UID"]); //Verify data $this->throwExceptionIfDataIsInvalid("", $arrayData); //Create $category = new \ProcessCategory(); $categoryUid = \ProcessMaker\Util\Common::generateUID(); $category->setNew(true); $category->setCategoryUid($categoryUid); $category->setCategoryName($arrayData["CAT_NAME"]); $result = $category->save(); //Return return $this->getCategory($categoryUid); } catch (\Exception $e) { throw $e; } }
public function addLaneset($data) { // setting defaults $processUid = $this->getProcess("object")->getProUid(); $data['LNS_UID'] = array_key_exists('LNS_UID', $data) ? $data['LNS_UID'] : Common::generateUID(); $data["PRO_UID"] = $processUid; try { self::log("Add Laneset with data: ", $data); $laneset = new Laneset(); $laneset->fromArray($data, BasePeer::TYPE_FIELDNAME); $laneset->setPrjUid($this->getUid()); $laneset->setProUid($this->getProcess("object")->getProUid()); $laneset->save(); self::log("Add Laneset Success!"); } catch (\Exception $e) { self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); throw $e; } return $laneset->getLnsUid(); }
/** * Create Email Server by data * * @param array $arrayData Data * * return array Return data of the new Email Server created */ public function create2(array $arrayData) { try { //Create $cnn = \Propel::getConnection("workflow"); try { $emailServer = new \EmailServer(); $emailServer->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $emailServerUid = \ProcessMaker\Util\Common::generateUID(); $emailServer->setMessUid($emailServerUid); if ($emailServer->validate()) { $cnn->begin(); $result = $emailServer->save(); $cnn->commit(); if (isset($arrayData["MESS_DEFAULT"]) && (int) $arrayData["MESS_DEFAULT"] == 1) { $this->setEmailServerDefaultByUid($emailServerUid); } //Return return $this->getEmailServer($emailServerUid); } else { $msg = ""; foreach ($emailServer->getValidationFailures() as $validationFailure) { $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }
public function createMSSQLWorkspace () { G::LoadSystem('inputfilter'); $filter = new InputFilter(); ini_set( 'max_execution_time', '0' ); $info = new stdClass(); $info->result = false; $info->message = ''; $db_hostname = trim( $_REQUEST['db_hostname'] ); $db_hostname = $filter->validateInput($db_hostname); $db_port = trim( $_REQUEST['db_port'] ); $db_port = $filter->validateInput($db_port); $db_username = trim( $_REQUEST['db_username'] ); $db_username = $filter->validateInput($db_username); $db_password = trim( $_REQUEST['db_password'] ); $db_password = $filter->validateInput($db_password); $wf = trim( $_REQUEST['wfDatabase'] ); $rb = trim( $_REQUEST['wfDatabase'] ); $rp = trim( $_REQUEST['wfDatabase'] ); $workspace = trim( $_REQUEST['workspace'] ); $pathConfig = trim( $_REQUEST['pathConfig'] ); $pathLanguages = trim( $_REQUEST['pathLanguages'] ); $pathPlugins = trim( $_REQUEST['pathPlugins'] ); $pathShared = trim( $_REQUEST['pathShared'] ); $pathXmlforms = trim( $_REQUEST['pathXmlforms'] ); $adminPassword = trim( $_REQUEST['adminPassword'] ); $adminUsername = trim( $_REQUEST['adminUsername'] ); $deleteDB = ($_REQUEST['deleteDB'] == 'true'); if (substr( $pathShared, - 1 ) != '/') { $pathShared .= '/'; } $this->installLog( '-------------------------------------------' ); $this->installLog( G::LoadTranslation('ID_CREATING_WORKSPACE', SYS_LANG, Array($workspace) ) ); try { $db_host = ($db_port != '' && $db_port != 1433) ? $db_hostname . ':' . $db_port : $db_hostname; $db_host = $filter->validateInput($db_host); $db_username = $filter->validateInput($db_username); $db_password = $filter->validateInput($db_password); $this->link = @mssql_connect( $db_host, $db_username, $db_password ); $this->installLog( G::LoadTranslation('ID_CONNECT_TO_SERVER', SYS_LANG, Array( $db_hostname, $db_port, $db_username )) ); $this->mssqlQuery( 'USE [master]' ); // DROP databases wf_workflow, rb_workflow and rp_workflow if ($deleteDB) { $q = sprintf( "IF EXISTS (SELECT name FROM sys.databases WHERE name='%s' ) DROP DATABASE %s", $wf, $wf ); $this->mssqlQuery( $q ); } // CREATE databases wf_workflow, rb_workflow and rp_workflow $q = sprintf( "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name='%s' ) CREATE DATABASE %s", $wf, $wf ); $this->mssqlQuery( $q ); //CREATE users and GRANT Privileges $wfPass = G::generate_password( 12 ); $this->setGrantPrivilegesMSSQL( $wf, $wfPass, $wf ); //Generate the db.php file and folders $path_site = $pathShared . "/sites/" . $workspace . "/"; $db_file = $path_site . "db.php"; mkdir( $path_site, 0777, true ); @mkdir( $path_site . "files/", 0777, true ); @mkdir( $path_site . "mailTemplates/", 0777, true ); @mkdir( $path_site . "public/", 0777, true ); @mkdir( $path_site . "reports/", 0777, true ); @mkdir( $path_site . "xmlForms", 0777, true ); $dbText = "<?php\n"; $dbText .= sprintf( "// Processmaker configuration\n" ); $dbText .= sprintf( " define ('DB_ADAPTER', '%s' );\n", 'mssql' ); $dbText .= sprintf( " define ('DB_HOST', '%s' );\n", $db_host ); $dbText .= sprintf( " define ('DB_NAME', '%s' );\n", $wf ); $dbText .= sprintf( " define ('DB_USER', '%s' );\n", $wf ); $dbText .= sprintf( " define ('DB_PASS', '%s' );\n", $wfPass ); $dbText .= sprintf( " define ('DB_RBAC_HOST', '%s' );\n", $db_host ); $dbText .= sprintf( " define ('DB_RBAC_NAME', '%s' );\n", $wf ); $dbText .= sprintf( " define ('DB_RBAC_USER', '%s' );\n", $wf ); $dbText .= sprintf( " define ('DB_RBAC_PASS', '%s' );\n", $wfPass ); $dbText .= sprintf( " define ('DB_REPORT_HOST', '%s' );\n", $db_host ); $dbText .= sprintf( " define ('DB_REPORT_NAME', '%s' );\n", $wf ); $dbText .= sprintf( " define ('DB_REPORT_USER', '%s' );\n", $wf ); $dbText .= sprintf( " define ('DB_REPORT_PASS', '%s' );\n", $wfPass ); if (defined('PARTNER_FLAG') || isset($_REQUEST['PARTNER_FLAG'])) { $dbText .= "\n"; $dbText .= " define ('PARTNER_FLAG', " . ((defined('PARTNER_FLAG')) ? PARTNER_FLAG : ((isset($_REQUEST['PARTNER_FLAG'])) ? $_REQUEST['PARTNER_FLAG']:'false')) . ");\n"; if ($this->systemName != '') { $dbText .= " define ('SYSTEM_NAME', '" . $this->systemName . "');\n"; } } $this->installLog( G::LoadTranslation('ID_CREATING', SYS_LANG, Array($db_file) )); file_put_contents( $db_file, $dbText ); // Generate the databases.php file $databases_file = $path_site . 'databases.php'; $dbData = sprintf( "\$dbAdapter = '%s';\n", 'mssql' ); $dbData .= sprintf( "\$dbHost = '%s';\n", $db_host ); $dbData .= sprintf( "\$dbName = '%s';\n", $wf ); $dbData .= sprintf( "\$dbUser = '******';\n", $wf ); $dbData .= sprintf( "\$dbPass = '******';\n", $wfPass ); $dbData .= sprintf( "\$dbRbacHost = '%s';\n", $db_host ); $dbData .= sprintf( "\$dbRbacName = '%s';\n", $wf ); $dbData .= sprintf( "\$dbRbacUser = '******';\n", $wf ); $dbData .= sprintf( "\$dbRbacPass = '******';\n", $wfPass ); $dbData .= sprintf( "\$dbReportHost = '%s';\n", $db_host ); $dbData .= sprintf( "\$dbReportName = '%s';\n", $wf ); $dbData .= sprintf( "\$dbReportUser = '******';\n", $wf ); $dbData .= sprintf( "\$dbReportPass = '******';\n", $wfPass ); $databasesText = str_replace( '{dbData}', $dbData, @file_get_contents( PATH_HOME . 'engine/templates/installer/databases.tpl' ) ); $this->installLog( G::LoadTranslation('ID_CREATING', SYS_LANG, Array($databases_file) )); file_put_contents( $databases_file, $databasesText ); //execute scripts to create and populates databases $query = sprintf( "USE %s;", $wf ); $this->mssqlQuery( $query ); $this->mssqlFileQuery( PATH_RBAC_HOME . 'engine/data/mssql/schema.sql' ); $this->mssqlFileQuery( PATH_RBAC_HOME . 'engine/data/mssql/insert.sql' ); $query = sprintf( "USE %s;", $wf ); $this->mssqlQuery( $query ); $this->mssqlFileQuery( PATH_HOME . 'engine/data/mssql/schema.sql' ); $this->mssqlFileQuery( PATH_HOME . 'engine/data/mssql/insert.sql' ); // Create the triggers if (file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationInsert.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationUpdate.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationUpdate.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationDelete.sql' ) && file_exists( PATH_HOME . 'engine/plugins/enterprise/data/triggerContentUpdate.sql' )) { $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationInsert.sql' ) ); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationUpdate.sql' ) ); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationUpdate.sql' ) ); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationDelete.sql' ) ); $this->mysqlQuery(@file_get_contents(PATH_HOME . "engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql")); $this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerContentUpdate.sql' ) ); $this->mssqlQuery( "INSERT INTO CONFIGURATION ( CFG_UID, CFG_VALUE ) VALUES ( 'APP_CACHE_VIEW_ENGINE', '" . addslashes( serialize( array ('LANG' => 'en','STATUS' => 'active' ) ) ) . "' )" ); $this->mssqlQuery("INSERT INTO EMAIL_SERVER(MESS_UID, MESS_ENGINE) VALUES('" . \ProcessMaker\Util\Common::generateUID() . "','MAIL')"); } //change admin user $query = sprintf( "USE %s;", $wf ); $this->mssqlQuery( $query ); $query = sprintf( "UPDATE USERS SET USR_USERNAME = '******', USR_PASSWORD = '******' WHERE USR_UID = '00000000000000000000000000000001' ", $adminUsername, G::encryptOld( $adminPassword ) ); $this->mssqlQuery( $query ); $query = sprintf( "USE %s;", $wf ); $this->mssqlQuery( $query ); $query = sprintf( "UPDATE RBAC_USERS SET USR_USERNAME = '******', USR_PASSWORD = '******' WHERE USR_UID = '00000000000000000000000000000001' ", $adminUsername, G::encryptOld( $adminPassword ) ); $this->mssqlQuery( $query ); // Write the paths_installed.php file (contains all the information configured so far) if (! file_exists( FILE_PATHS_INSTALLED )) { $sh = G::encryptOld( filemtime( PATH_GULLIVER . '/class.g.php' ) ); $h = G::encrypt( $db_hostname . $sh . $db_username . $sh . $db_password . '1', $sh ); $dbText = "<?php\n"; $dbText .= sprintf( " define ('PATH_DATA', '%s' );\n", $pathShared ); $dbText .= sprintf( " define ('PATH_C', '%s' );\n", $pathShared . 'compiled/' ); $dbText .= sprintf( " define ('HASH_INSTALLATION', '%s' );\n", $h ); $dbText .= sprintf( " define ('SYSTEM_HASH', '%s' );\n", $sh ); $this->installLog( G::LoadTranslation('ID_CREATING', SYS_LANG, Array(FILE_PATHS_INSTALLED) )); file_put_contents( FILE_PATHS_INSTALLED, $dbText ); } $this->installLog( G::LoadTranslation('ID_INSTALL_SUCESS') ); $info->result = true; $info->message = G::LoadTranslation('ID_INSTALL_SUCESS'); $info->url = '/sys' . $_REQUEST['workspace'] . '/en/neoclassic/login/login'; $info->messageFinish = G::LoadTranslation('ID_PROCESSMAKER_SUCCESS_INSTALLED', SYS_LANG, Array($workspace));; } catch (Exception $e) { $info->result = false; $info->message = $e->getMessage(); } return $info; }
/** * Create Role * * @param array $arrayData Data * * return array Return data of the new Role created */ public function create(array $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["ROL_UID"]); $arrayData["ROL_SYSTEM"] = "00000000000000000000000000000002"; //PROCESSMAKER //Verify data $this->throwExceptionIfDataIsInvalid("", $arrayData); //Create $role = new \Roles(); $roleUid = \ProcessMaker\Util\Common::generateUID(); $arrayData["ROL_UID"] = $roleUid; $arrayData["ROL_STATUS"] = isset($arrayData["ROL_STATUS"]) ? $arrayData["ROL_STATUS"] == "ACTIVE" ? 1 : 0 : 1; $arrayData["ROL_CREATE_DATE"] = date("Y-M-d H:i:s"); $result = $role->createRole($arrayData); //Return return $this->getRole($roleUid); } catch (\Exception $e) { throw $e; } }
/** * * * Creates a Dynaform based on a PMTable * * @name createFromPMTable * @author gustavo cruz gustavo[at]colosa[dot]com * @param array $aData Fields with : * $aData['DYN_UID'] the dynaform id * $aData['USR_UID'] the userid * string $pmTableUid uid of the PMTable * */ public function createFromPMTable($aData, $pmTableUid) { $this->create($aData, $pmTableUid); $aData['DYN_UID'] = $this->getDynUid(); //krumo(BasePeer::getFieldnames('Content')); $fields = array(); //$oCriteria = new Criteria('workflow'); $pmTable = AdditionalTablesPeer::retrieveByPK($pmTableUid); $addTabName = $pmTable->getAddTabName(); $keys = ''; if (isset($aData['FIELDS'])) { foreach ($aData['FIELDS'] as $iRow => $row) { if ($keys != '') { $keys = $keys . '|' . $row['PRO_VARIABLE']; } else { $keys = $row['PRO_VARIABLE']; } } } else { $keys = ' '; } // $addTabKeys = $pmTable->getAddTabDynavars(); // $addTabKeys = unserialize($addTabKeys); // $keys = ''; // foreach ( $addTabKeys as $addTabKey ){ // if (trim($addTabKey['CASE_VARIABLE'])!=''&&$keys!=''){ // $keys = $keys.'|'.$addTabKey['CASE_VARIABLE']; // } else { // $keys = $addTabKey['CASE_VARIABLE']; // } // // } // Determines the engine to use // For a description of a table $sDataBase = 'database_' . strtolower(DB_ADAPTER); if (G::LoadSystemExist($sDataBase)) { G::LoadSystem($sDataBase); $oDataBase = new database(); $sql = $oDataBase->getTableDescription($addTabName); } else { $sql = 'DESC ' . $addTabName; } $dbh = Propel::getConnection(AdditionalTablesPeer::DATABASE_NAME); $sth = $dbh->createStatement(); $res = $sth->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); $file = $aData['PRO_UID'] . '/' . $aData['DYN_UID']; $dbc = new DBConnection(PATH_DYNAFORM . $file . '.xml', '', '', '', 'myxml'); $ses = new DBSession($dbc); $fieldXML = new DynaFormField($dbc); $pmConnectionName = $addTabName . '_CONNECTION'; if ($aData['DYN_TYPE'] == 'xmlform') { $labels = array(); $options = array(); $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => $pmConnectionName, 'TYPE' => 'pmconnection', 'PMTABLE' => $pmTableUid, 'KEYS' => $keys); $fieldXML->Save($attributes, $labels, $options); } $keyRequered = ''; $countKeys = 0; while ($res->next()) { if ($res->get('Key') != '') { $countKeys++; } if ($res->get('Extra') == 'auto_increment') { $keyRequered .= $res->get('Field'); } } $dbh = Propel::getConnection(AdditionalTablesPeer::DATABASE_NAME); $sth = $dbh->createStatement(); $res = $sth->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); while ($res->next()) { // if(strtoupper($res->get('Null'))=='NO') { if (strtoupper($res->get($oDataBase->getFieldNull())) == 'NO') { if ($countKeys == 1 && $res->get('Field') == $keyRequered) { $required = '0'; } else { $required = '1'; } } else { $required = '0'; } $fieldName = $res->get('Field'); $defaultValue = $res->get('Default'); $labels = array(SYS_LANG => $fieldName); $options = array(); $type = explode('(', $res->get('Type')); switch ($type[0]) { case 'text': $type = 'textarea'; break; case 'date': $type = 'date'; break; default: $type = 'text'; break; } if ($aData['DYN_TYPE'] == 'xmlform') { $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => $fieldName, 'TYPE' => $type, 'PMCONNECTION' => $pmConnectionName, 'PMFIELD' => $fieldName, 'REQUIRED' => $required, 'DEFAULTVALUE' => $defaultValue); } else { $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => $fieldName, 'TYPE' => $type, 'REQUIRED' => $required, 'DEFAULTVALUE' => $defaultValue); } $fieldXML->Save($attributes, $labels, $options); } $labels = array(SYS_LANG => 'Submit'); $attributes = array('XMLNODE_NAME_OLD' => '', 'XMLNODE_NAME' => 'SUBMIT', 'TYPE' => 'submit'); $fieldXML->Save($attributes, $labels, $options); //update content if version is 2 if ($this->getDynVersion() === 2) { $items = array(); $variables = array(); $res = $sth->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); while ($res->next()) { //data type $type = "text"; $dataType = explode('(', $res->get('Type')); error_log(print_r($dataType, true)); switch ($dataType[0]) { case 'bigint': $type = 'text'; $dataType = 'integer'; break; case 'int': $type = 'text'; $dataType = 'integer'; break; case 'smallint': $type = 'text'; $dataType = 'integer'; break; case 'tinyint': $type = 'text'; $dataType = 'integer'; break; case 'decimal': $type = 'text'; $dataType = 'float'; break; case 'double': $type = 'text'; $dataType = 'float'; break; case 'float': $type = 'text'; $dataType = 'float'; break; case 'datetime': $type = 'datetime'; $dataType = 'datetime'; break; case 'date': $type = 'datetime'; $dataType = 'datetime'; break; case 'time': $type = 'datetime'; $dataType = 'datetime'; break; case 'char': $type = 'text'; $dataType = 'string'; break; case 'varchar': $type = 'text'; $dataType = 'string'; break; case 'mediumtext': $type = 'textarea'; $dataType = 'string'; break; default: $type = "text"; $dataType = 'string'; break; } //variables $arrayData = array("var_name" => $res->get('Field'), "var_label" => $res->get('Field'), "var_field_type" => $dataType, "var_field_size" => 10, "var_null" => 1, "var_dbconnection" => "none", "var_sql" => "", "var_options_control" => "", "var_default" => "", "var_accepted_values" => array()); $objVariable = new \ProcessMaker\BusinessModel\Variable(); try { $objVariable->existsName($this->getProUid(), $res->get('Field')); $variable = $objVariable->create($this->getProUid(), $arrayData); } catch (\Exception $e) { $data = $objVariable->getVariables($this->getProUid()); foreach ($data as $datavariable) { if ($datavariable["var_name"] === $res->get('Field')) { $variable = $datavariable; break; } } } array_push($variables, $variable); array_push($items, array(array("type" => $type, "dataType" => $dataType, "id" => $res->get('Field'), "name" => $res->get('Field'), "label" => $res->get('Field'), "hint" => "", "required" => false, "defaultValue" => "", "dependentFields" => array(), "textTransform" => "none", "validate" => "any", "mask" => "", "maxLength" => 1000, "formula" => "", "mode" => "parent", "var_uid" => $variable["var_uid"], "var_name" => $variable["var_name"], "colSpan" => 12))); } //submit button array_push($items, array(array("type" => "submit", "id" => "FormDesigner-" . \ProcessMaker\Util\Common::generateUID(), "name" => "submit", "label" => "submit", "colSpan" => 12))); $json = array("name" => $this->getDynTitle(), "description" => $this->getDynDescription(), "items" => array(array("type" => "form", "id" => $this->getDynUid(), "name" => $this->getDynTitle(), "description" => $this->getDynDescription(), "mode" => "edit", "script" => "", "items" => $items, "variables" => $variables))); $aData = $this->Load($this->getDynUid()); $aData["DYN_CONTENT"] = G::json_encode($json); $this->update($aData); } }
/** * Update project from a struct defined. * * This function make add, update or delete of elements of a project * Actions is based on a diff from project save in Db and the given structure as param, by the following criteria. * * 1. Elements that are on the struct, but they are not in the Db will be created on Db * 2. Elements that are on the struct and they are found in db, will be compared, if they have been modified then will be updated on Db * 3. Elements found in Db but they are not present on the struct will be considered deleted, so they will be deleted from Db. * * Example Struct: * array( * "prj_uid" => "25111170353317e324d6e23073851309", * "prj_name" => "example project", * "prj_description" => "project desc.", * ... * "diagrams" => array( * array( * "dia_uid" => "94208559153317e325f1c24068030751", * "dia_name" => "Example Diagram", * ... * "activities" => array(...), * "events" => array(...), * "gateways" => array(...), * "flows" => array(...), * "artifacts" => array(...), * "laneset" => array(...), * "lanes" => array(...) * ) * ) * ) * * Notes: * 1. All elements keys are in lowercase * 2. the "diagrams" element is an array of arrays * * @param $prjUid * @param $projectData * @return array */ public static function updateFromStruct($prjUid, $projectData, $generateUid = true, $forceInsert = false) { $diagram = isset($projectData["diagrams"]) && isset($projectData["diagrams"][0]) ? $projectData["diagrams"][0] : array(); $diagram["activities"] = isset($diagram["activities"])? $diagram["activities"]: array(); $diagram["artifacts"] = isset($diagram["artifacts"])? $diagram["artifacts"]: array(); $diagram["gateways"] = isset($diagram["gateways"])? $diagram["gateways"]: array(); $diagram["events"] = isset($diagram["events"])? $diagram["events"]: array(); $diagram["data"] = isset($diagram["data"])? $diagram["data"]: array(); $diagram["participants"] = isset($diagram["participants"])? $diagram["participants"]: array(); $diagram["laneset"] = isset($diagram["laneset"])? $diagram["laneset"]: array(); $diagram["lanes"] = isset($diagram["lanes"])? $diagram["lanes"]: array(); $result = array(); $projectData['prj_uid'] = $prjUid; $bwp = BpmnWorkflow::load($prjUid); $projectRecord = array_change_key_case($projectData, CASE_UPPER); $bwp->update($projectRecord); //Array - Set empty $bwp->arrayElementTaskRelation = array(); //Element-Task-Relation - Get all records $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_UID); $criteria->addSelectColumn(\ElementTaskRelationPeer::TAS_UID); $criteria->add(\ElementTaskRelationPeer::PRJ_UID, $bwp->wp->getUid(), \Criteria::EQUAL); $rsCriteria = \ElementTaskRelationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); //Array - Add element $bwp->arrayElementTaskRelation[$row["ELEMENT_UID"]] = $row["TAS_UID"]; } /* * Diagram's Laneset Handling */ $whiteList = array(); foreach ($diagram["laneset"] as $i => $lanesetData) { $lanesetData = array_change_key_case($lanesetData, CASE_UPPER); $dataObject = $bwp->getLaneset($lanesetData["LNS_UID"]); if ($forceInsert || is_null($dataObject)) { if ($generateUid) { //Generate and update UID unset($lanesetData["BOU_UID"]); $uidOld = $lanesetData["LNS_UID"]; $lanesetData["LNS_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "laneset", "old_uid" => $uidOld, "new_uid" => $lanesetData["LNS_UID"] ); } $bwp->addLaneset($lanesetData); } elseif (! $bwp->isEquals($dataObject, $lanesetData)) { $bwp->updateLaneset($lanesetData["LNS_UID"], $lanesetData); } else { Util\Logger::log("Update Laneset ({$lanesetData["LNS_UID"]}) Skipped - No changes required"); } $diagram["laneset"][$i] = $lanesetData; $whiteList[] = $lanesetData["LNS_UID"]; } $dataCollection = $bwp->getLanesets(); // looking for removed elements foreach ($dataCollection as $lanesetData) { if (! in_array($lanesetData["LNS_UID"], $whiteList)) { // If it is not in the white list, then remove them $bwp->removeLaneset($lanesetData["LNS_UID"]); } } /* * Diagram's Lane Handling */ $whiteList = array(); foreach ($diagram["lanes"] as $i => $laneData) { $laneData = array_change_key_case($laneData, CASE_UPPER); //Update UIDs foreach ($result as $value) { if ($laneData["LNS_UID"] == $value["old_uid"]) { $laneData["LNS_UID"] = $value["new_uid"]; } } $dataObject = $bwp->getLane($laneData["LAN_UID"]); if ($forceInsert || is_null($dataObject)) { if ($generateUid) { //Generate and update UID unset($laneData["BOU_UID"]); $uidOld = $laneData["LAN_UID"]; $laneData["LAN_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "lane", "old_uid" => $uidOld, "new_uid" => $laneData["LAN_UID"] ); } $bwp->addLane($laneData); } elseif (! $bwp->isEquals($dataObject, $laneData)) { $bwp->updateLane($laneData["LAN_UID"], $laneData); } else { Util\Logger::log("Update Lane ({$laneData["LAN_UID"]}) Skipped - No changes required"); } $diagram["lanes"][$i] = $laneData; $whiteList[] = $laneData["LAN_UID"]; } $dataCollection = $bwp->getLanes(); // looking for removed elements foreach ($dataCollection as $laneData) { if (! in_array($laneData["LAN_UID"], $whiteList)) { // If it is not in the white list, then remove them $bwp->removeLane($laneData["LAN_UID"]); } } /* * Diagram's Activities Handling */ $whiteList = array(); foreach ($diagram["activities"] as $i => $activityData) { $activityData = array_change_key_case($activityData, CASE_UPPER); unset($activityData["_EXTENDED"], $activityData["BOU_ELEMENT_ID"]); $activityData = Util\ArrayUtil::boolToIntValues($activityData); $activity = $bwp->getActivity($activityData["ACT_UID"]); if ($activity["BOU_CONTAINER"] != $activityData["BOU_CONTAINER"]) { $activity = null; } if ($forceInsert || is_null($activity)) { if ($generateUid) { //Generate and update UID $activityData = $bwp->updateBoundByArrayUid($activityData, $result); $uidOld = $activityData["ACT_UID"]; $activityData["ACT_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "activity", "old_uid" => $uidOld, "new_uid" => $activityData["ACT_UID"] ); } $bwp->addActivity($activityData); } elseif (! $bwp->isEquals($activity, $activityData)) { $bwp->updateActivity($activityData["ACT_UID"], $activityData); } else { Util\Logger::log("Update Activity ({$activityData["ACT_UID"]}) Skipped - No changes required"); } $diagram["activities"][$i] = $activityData; $whiteList[] = $activityData["ACT_UID"]; } $activities = $bwp->getActivities(); // looking for removed elements foreach ($activities as $activityData) { if (! in_array($activityData["ACT_UID"], $whiteList)) { $bwp->removeActivity($activityData["ACT_UID"]); } } /* * Diagram's Artifacts Handling */ $whiteList = array(); foreach ($diagram["artifacts"] as $i => $artifactData) { $artifactData = array_change_key_case($artifactData, CASE_UPPER); unset($artifactData["_EXTENDED"]); $artifact = $bwp->getArtifact($artifactData["ART_UID"]); if ($artifact["BOU_CONTAINER"] != $artifactData["BOU_CONTAINER"]) { $artifact = null; } if ($forceInsert || is_null($artifact)) { if ($generateUid) { //Generate and update UID $artifactData = $bwp->updateBoundByArrayUid($artifactData, $result); $uidOld = $artifactData["ART_UID"]; $artifactData["ART_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "artifact", "old_uid" => $uidOld, "new_uid" => $artifactData["ART_UID"] ); } $bwp->addArtifact($artifactData); } elseif (! $bwp->isEquals($artifact, $artifactData)) { $bwp->updateArtifact($artifactData["ART_UID"], $artifactData); } else { Util\Logger::log("Update Artifact ({$artifactData["ART_UID"]}) Skipped - No changes required"); } $diagram["artifacts"][$i] = $artifactData; $whiteList[] = $artifactData["ART_UID"]; } $artifacts = $bwp->getArtifacts(); // looking for removed elements foreach ($artifacts as $artifactData) { if (! in_array($artifactData["ART_UID"], $whiteList)) { $bwp->removeArtifact($artifactData["ART_UID"]); } } /* * Diagram's Gateways Handling */ $arrayGatewayUid = array(); $arrayGatewayParallelUid = array(); $arrayGatewayUidToCheckConverging = array(); //PARALLEL, INCLUSIVE $whiteList = array(); foreach ($diagram["gateways"] as $i => $gatewayData) { $gatewayData = array_change_key_case($gatewayData, CASE_UPPER); unset($gatewayData["_EXTENDED"]); $flagAddOrUpdate = false; $gateway = $bwp->getGateway($gatewayData["GAT_UID"]); if ($gateway["BOU_CONTAINER"] != $gatewayData["BOU_CONTAINER"]) { $gateway = null; } if ($forceInsert || is_null($gateway)) { if ($generateUid) { //Generate and update UID $gatewayData = $bwp->updateBoundByArrayUid($gatewayData, $result); $uidOld = $gatewayData["GAT_UID"]; $gatewayData["GAT_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "gateway", "old_uid" => $uidOld, "new_uid" => $gatewayData["GAT_UID"] ); } $bwp->addGateway($gatewayData); $flagAddOrUpdate = true; } elseif (! $bwp->isEquals($gateway, $gatewayData)) { $bwp->updateGateway($gatewayData["GAT_UID"], $gatewayData); $flagAddOrUpdate = true; } else { Util\Logger::log("Update Gateway ({$gatewayData["GAT_UID"]}) Skipped - No changes required"); } if ($flagAddOrUpdate) { $arrayGatewayData = $bwp->getGateway($gatewayData["GAT_UID"]); switch ($arrayGatewayData["GAT_TYPE"]) { case self::BPMN_GATEWAY_PARALLEL: $arrayGatewayParallelUid[] = $gatewayData["GAT_UID"]; $arrayGatewayUidToCheckConverging[] = $gatewayData["GAT_UID"]; break; case self::BPMN_GATEWAY_INCLUSIVE: $arrayGatewayUidToCheckConverging[] = $gatewayData["GAT_UID"]; break; } } $arrayGatewayUid[$gatewayData["GAT_UID"]] = 1; $diagram["gateways"][$i] = $gatewayData; $whiteList[] = $gatewayData["GAT_UID"]; } $gateways = $bwp->getGateways(); // looking for removed elements foreach ($gateways as $gatewayData) { if (! in_array($gatewayData["GAT_UID"], $whiteList)) { $bwp->removeGateway($gatewayData["GAT_UID"]); } } /* * Diagram's Events Handling */ $whiteList = array(); foreach ($diagram["events"] as $i => $eventData) { $eventData = array_change_key_case($eventData, CASE_UPPER); unset($eventData["_EXTENDED"]); if (array_key_exists("EVN_CANCEL_ACTIVITY", $eventData)) { $eventData["EVN_CANCEL_ACTIVITY"] = $eventData["EVN_CANCEL_ACTIVITY"] ? 1 : 0; } if (array_key_exists("EVN_WAIT_FOR_COMPLETION", $eventData)) { $eventData["EVN_WAIT_FOR_COMPLETION"] = $eventData["EVN_WAIT_FOR_COMPLETION"] ? 1 : 0; } $event = $bwp->getEvent($eventData["EVN_UID"]); if ($event["BOU_CONTAINER"] != $eventData["BOU_CONTAINER"]) { $event = null; } if ($forceInsert || is_null($event)) { if ($generateUid) { //Generate and update UID $eventData = $bwp->updateBoundByArrayUid($eventData, $result); $uidOld = $eventData["EVN_UID"]; $eventData["EVN_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "event", "old_uid" => $uidOld, "new_uid" => $eventData["EVN_UID"] ); } $bwp->addEvent($eventData); } elseif (! $bwp->isEquals($event, $eventData)) { $bwp->updateEvent($eventData["EVN_UID"], $eventData); } else { Util\Logger::log("Update Event ({$eventData["EVN_UID"]}) Skipped - No changes required"); } $diagram["events"][$i] = $eventData; $whiteList[] = $eventData["EVN_UID"]; } $events = $bwp->getEvents(); // looking for removed elements foreach ($events as $eventData) { if (! in_array($eventData["EVN_UID"], $whiteList)) { // If it is not in the white list, then remove them $bwp->removeEvent($eventData["EVN_UID"]); } } /* * Diagram's Data Handling */ $whiteList = array(); foreach ($diagram["data"] as $i => $dataObjectData) { $dataObjectData = array_change_key_case($dataObjectData, CASE_UPPER); unset($dataObjectData["_EXTENDED"]); $dataObject = $bwp->getData($dataObjectData["DAT_UID"]); if ($dataObject["BOU_CONTAINER"] != $dataObjectData["BOU_CONTAINER"]) { $dataObject = null; } if ($forceInsert || is_null($dataObject)) { if ($generateUid) { //Generate and update UID $dataObjectData = $bwp->updateBoundByArrayUid($dataObjectData, $result); $uidOld = $dataObjectData["DAT_UID"]; $dataObjectData["DAT_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "data", "old_uid" => $uidOld, "new_uid" => $dataObjectData["DAT_UID"] ); } $bwp->addData($dataObjectData); } elseif (! $bwp->isEquals($dataObject, $dataObjectData)) { $bwp->updateData($dataObjectData["DAT_UID"], $dataObjectData); } else { Util\Logger::log("Update Data ({$dataObjectData["DAT_UID"]}) Skipped - No changes required"); } $diagram["data"][$i] = $dataObjectData; $whiteList[] = $dataObjectData["DAT_UID"]; } $dataCollection = $bwp->getDataCollection(); // looking for removed elements foreach ($dataCollection as $dataObjectData) { if (! in_array($dataObjectData["DAT_UID"], $whiteList)) { // If it is not in the white list, then remove them $bwp->removeData($dataObjectData["DAT_UID"]); } } /* * Diagram's Participant Handling */ $whiteList = array(); foreach ($diagram["participants"] as $i => $participantData) { $participantData = array_change_key_case($participantData, CASE_UPPER); unset($participantData["_EXTENDED"]); $participant = $bwp->getParticipant($participantData["PAR_UID"]); if ($participant["BOU_CONTAINER"] != $participantData["BOU_CONTAINER"]) { $participant = null; } if ($forceInsert || is_null($participant)) { if ($generateUid) { //Generate and update UID $participantData = $bwp->updateBoundByArrayUid($participantData, $result); $uidOld = $participantData["PAR_UID"]; $participantData["PAR_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "participant", "old_uid" => $uidOld, "new_uid" => $participantData["PAR_UID"] ); } $bwp->addParticipant($participantData); } elseif (! $bwp->isEquals($participant, $participantData)) { $bwp->updateParticipant($participantData["PAR_UID"], $participantData); } else { Util\Logger::log("Update Participant ({$participantData["PAR_UID"]}) Skipped - No changes required"); } $diagram["participants"][$i] = $participantData; $whiteList[] = $participantData["PAR_UID"]; } $dataCollection = $bwp->getParticipants(); // looking for removed elements foreach ($dataCollection as $participantData) { if (! in_array($participantData["PAR_UID"], $whiteList)) { // If it is not in the white list, then remove them $bwp->removeParticipant($participantData["PAR_UID"]); } } /* * Diagram's Flows Handling */ $arrayGatewayGatDefaultFlow = array(); $whiteList = array(); foreach ($diagram["flows"] as $i => $flowData) { $flowData = array_change_key_case($flowData, CASE_UPPER); // if it is a new flow record if ($forceInsert || ($generateUid && !\BpmnFlow::exists($flowData["FLO_UID"]))) { $uidOld = $flowData["FLO_UID"]; $flowData["FLO_UID"] = Util\Common::generateUID(); $result[] = array( "object" => "flow", "old_uid" => $uidOld, "new_uid" => $flowData["FLO_UID"] ); $mappedUid = self::mapUid($flowData["FLO_ELEMENT_ORIGIN"], $result); if ($mappedUid !== false) { $flowData["FLO_ELEMENT_ORIGIN"] = $mappedUid; } $mappedUid = self::mapUid($flowData["FLO_ELEMENT_DEST"], $result); if ($mappedUid !== false) { $flowData["FLO_ELEMENT_DEST"] = $mappedUid; } } //Update UIDs foreach ($result as $value) { if ($flowData["FLO_ELEMENT_ORIGIN"] == $value["old_uid"]) { $flowData["FLO_ELEMENT_ORIGIN"] = $value["new_uid"]; } if ($flowData["FLO_ELEMENT_DEST"] == $value["old_uid"]) { $flowData["FLO_ELEMENT_DEST"] = $value["new_uid"]; } } //Update condition if ($flowData["FLO_ELEMENT_ORIGIN_TYPE"] == "bpmnGateway" && in_array($flowData["FLO_ELEMENT_ORIGIN"], $arrayGatewayParallelUid)) { $flowData["FLO_CONDITION"] = ""; } //Add element to array Gateway default flow if ($flowData["FLO_TYPE"] == "DEFAULT" && isset($arrayGatewayUid[$flowData["FLO_ELEMENT_ORIGIN"]])) { $arrayGatewayGatDefaultFlow[$flowData["FLO_ELEMENT_ORIGIN"]] = $flowData["FLO_UID"]; } $diagram["flows"][$i] = $flowData; $whiteList[] = $flowData["FLO_UID"]; } foreach ($diagram["flows"] as $flowData) { $flow = $bwp->getFlow($flowData["FLO_UID"]); if ($forceInsert || is_null($flow)) { $bwp->addFlow($flowData); } elseif (! $bwp->isEquals($flow, $flowData)) { $bwp->updateFlow($flowData["FLO_UID"], $flowData, $diagram["flows"]); } else { Util\Logger::log("Update Flow ({$flowData["FLO_UID"]}) Skipped - No changes required"); } } $flows = $bwp->getFlows(); // looking for removed elements foreach ($flows as $flowData) { if (! in_array($flowData["FLO_UID"], $whiteList)) { $bwp->removeFlow($flowData["FLO_UID"]); } } //Update BPMN_GATEWAY.GAT_DIRECTION foreach ($arrayGatewayUidToCheckConverging as $value) { $arrayGatewayData = $bwp->getGateway($value); if (!is_null($arrayGatewayData)) { $arrayFlow = \BpmnFlow::findAllBy(array( \BpmnFlowPeer::FLO_TYPE => array("MESSAGE", \Criteria::NOT_EQUAL), \BpmnFlowPeer::FLO_ELEMENT_DEST => $arrayGatewayData["GAT_UID"], \BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE => "bpmnGateway" )); if (count($arrayFlow) > 1) { $bwp->updateGateway($arrayGatewayData["GAT_UID"], array("GAT_DIRECTION" => "CONVERGING")); } } } //Update BPMN_GATEWAY.GAT_DEFAULT_FLOW foreach ($arrayGatewayGatDefaultFlow as $key => $value) { $bwp->updateGateway($key, array("GAT_DEFAULT_FLOW" => $value)); } //Map Bpmn-Flows to Workflow-Routes $bwp->mapBpmnFlowsToWorkflowRoutes(); //Return return $result; }
/** * Get an unused unique id for Message-Type-Variable * * @return string $uid */ public function getUnusedMessageTypeVariableUid() { try { $variable = new \ProcessMaker\BusinessModel\MessageType\Variable(); do { $newUid = \ProcessMaker\Util\Common::generateUID(); } while ($variable->exists($newUid)); return $newUid; } catch (Exception $e) { throw $e; } }
/** * Create Message-Event-Definition for a Project * * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return array Return data of the new Message-Event-Definition created */ public function create($projectUid, array $arrayData, $flagValidateArrayData = true) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["MSGED_UID"]); unset($arrayData["PRJ_UID"]); //Verify data $process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]); if ($flagValidateArrayData) { $this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData); } //Create $cnn = \Propel::getConnection("workflow"); try { $messageEventDefinition = new \MessageEventDefinition(); if (!isset($arrayData["MSGT_UID"]) || $arrayData["MSGT_UID"] . "" == "") { $arrayData["MSGT_UID"] = ""; $arrayData["MSGED_VARIABLES"] = array(); } if (!isset($arrayData["MSGED_VARIABLES"])) { $arrayData["MSGED_VARIABLES"] = array(); } $messageEventDefinitionUid = \ProcessMaker\Util\Common::generateUID(); if (isset($arrayData["MSGED_VARIABLES"])) { $arrayData["MSGED_VARIABLES"] = serialize($arrayData["MSGED_VARIABLES"]); } $messageEventDefinition->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); $messageEventDefinition->setMsgedUid($messageEventDefinitionUid); $messageEventDefinition->setPrjUid($projectUid); $messageEventDefinition->setMsgedUsrUid("00000000000000000000000000000001"); //admin if ($messageEventDefinition->validate()) { $cnn->begin(); $result = $messageEventDefinition->save(); $cnn->commit(); //Return return $this->getMessageEventDefinition($messageEventDefinitionUid); } else { $msg = ""; foreach ($messageEventDefinition->getValidationFailures() as $validationFailure) { $msg = $msg . ($msg != "" ? "\n" : "") . $validationFailure->getMessage(); } throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . ($msg != "" ? "\n" . $msg : "")); } } catch (\Exception $e) { $cnn->rollback(); throw $e; } } catch (\Exception $e) { throw $e; } }