public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER, $decodeState = true) { //TODO implement $start, $limit and $filter $c = new Criteria('workflow'); if (! is_null($prjUid)) { $c->add(BpmnFlowPeer::PRJ_UID, $prjUid, Criteria::EQUAL); } $c->addAscendingOrderByColumn(BpmnFlowPeer::FLO_POSITION); $rs = BpmnFlowPeer::doSelectRS($c); $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $flows = array(); while ($rs->next()) { $flow = $rs->getRow(); if ($decodeState) { $flow["FLO_STATE"] = @json_decode($flow["FLO_STATE"], true); } //$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 addRouteSecJoin($taskUid, $nextTaskUid) { try { //Route $result = parent::addRoute($taskUid, $nextTaskUid, "SEC-JOIN"); //BPMN $arrayTaskData = $this->getTask($taskUid); $activityUid = $arrayTaskData["TAS_UID"]; $activityBouX = (int)($arrayTaskData["TAS_POSX"]); $activityBouY = (int)($arrayTaskData["TAS_POSY"]); $activityBouWidth = (int)($arrayTaskData["TAS_WIDTH"]); $activityBouHeight = (int)($arrayTaskData["TAS_HEIGHT"]); $arrayTaskData = $this->getTask($nextTaskUid); $nextActivityUid = $arrayTaskData["TAS_UID"]; $nextActivityBouX = (int)($arrayTaskData["TAS_POSX"]); $nextActivityBouY = (int)($arrayTaskData["TAS_POSY"]); $nextActivityBouWidth = (int)($arrayTaskData["TAS_WIDTH"]); $nextActivityBouHeight = (int)($arrayTaskData["TAS_HEIGHT"]); $result = $this->bp->getGatewayByDirectionActivityAndFlow("CONVERGING", $nextActivityUid); if (!is_array($result)) { $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN . " AS GAT_UID"); $criteria->add(\BpmnFlowPeer::PRJ_UID, $this->bp->getUid(), \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_TYPE, "SEQUENCE", \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE, "bpmnGateway", \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_DEST, $activityUid, \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE, "bpmnActivity", \Criteria::EQUAL); $rsCriteria = \BpmnFlowPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $gatewayParentUid = ""; if ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $gatewayParentUid = $row["GAT_UID"]; } else { throw new \Exception(\G::LoadTranslation("ID_ROUTE_PARENT_DOES_NOT_EXIST_FOR_ROUTE_SECJOIN")); } $arrayGatewayData = $this->bp->getGateway2($gatewayParentUid); $gatewayParentType = $arrayGatewayData["GAT_TYPE"]; $gatewayUid = $this->routeToBpmnGateway( "bpmnActivity", $nextActivityUid, $nextActivityBouX, $nextActivityBouY, $nextActivityBouWidth, $nextActivityBouHeight, "", $gatewayParentType, "CONVERGING" ); $arrayGatewayData = $this->bp->getGateway2($gatewayUid); } else { $arrayGatewayData = $result; } $gatewayUid = $arrayGatewayData["GAT_UID"]; $gatewayType = $arrayGatewayData["GAT_TYPE"]; $gatewayBouX = $arrayGatewayData["BOU_X"]; $gatewayBouY = $arrayGatewayData["BOU_Y"]; $gatewayBouWidth = $arrayGatewayData["BOU_WIDTH"]; $gatewayBouHeight = $arrayGatewayData["BOU_HEIGHT"]; $flowUid = $this->routeToBpmnFlow( "bpmnActivity", $activityUid, $activityBouX, $activityBouY, $activityBouWidth, $activityBouHeight, "bpmnGateway", $gatewayUid, $gatewayBouX, $gatewayBouY, $gatewayBouWidth, $gatewayBouHeight ); //Return return $result; } catch (\Exception $e) { $this->removeRouteFromTo($taskUid, $nextTaskUid); throw $e; } }
public function reOrderFlowPosition ($sFloOrigin, $iPosition) { try { $con = \Propel::getConnection('workflow'); $oCriteria = new Criteria( 'workflow' ); $oCriteria->add( \BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $sFloOrigin ); $oCriteria->add( \BpmnFlowPeer::FLO_POSITION, $iPosition, '>' ); $oDataset = \BpmnFlowPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); while ($oDataset->next()) { $aRow = $oDataset->getRow(); $newPosition = ((int)$aRow['FLO_POSITION'])-1; $oCriteriaTemp = new Criteria( 'workflow' ); $oCriteriaTemp->add( \BpmnFlowPeer::FLO_UID, $aRow['FLO_UID'] ); $oCriteria2 = new Criteria('workflow'); $oCriteria2->add(\BpmnFlowPeer::FLO_POSITION, $newPosition); BasePeer::doUpdate($oCriteriaTemp, $oCriteria2, $con); } } catch (Exception $oException) { throw $oException; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $webEntryEventUid Unique id of WebEntry-Event * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($webEntryEventUid, $projectUid, array $arrayData) { try { //Set variables $arrayWebEntryEventData = $webEntryEventUid == "" ? array() : $this->getWebEntryEvent($webEntryEventUid, true); $flagInsert = $webEntryEventUid == "" ? true : false; $arrayFinalData = array_merge($arrayWebEntryEventData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["EVN_UID"])) { $this->throwExceptionIfEventIsRegistered($projectUid, $arrayData["EVN_UID"], $this->arrayFieldNameForException["eventUid"], $webEntryEventUid); } if (isset($arrayData["EVN_UID"])) { $obj = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_EXIST", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } if ($obj->getEvnType() != "START" || $obj->getEvnType() == "START" && $obj->getEvnMarker() != "EMPTY") { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_IS_START_EVENT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } } if (isset($arrayData["WEE_TITLE"])) { $this->throwExceptionIfExistsTitle($projectUid, $arrayData["WEE_TITLE"], $this->arrayFieldNameForException["webEntryEventTitle"], $webEntryEventUid); } if (isset($arrayData["ACT_UID"])) { $bpmn = new \ProcessMaker\Project\Bpmn(); if (!$bpmn->activityExists($arrayData["ACT_UID"])) { throw new \Exception(\G::LoadTranslation("ID_ACTIVITY_DOES_NOT_EXIST", array($this->arrayFieldNameForException["activityUid"], $arrayData["ACT_UID"]))); } } if (isset($arrayData["EVN_UID"]) || isset($arrayData["ACT_UID"])) { $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\BpmnFlowPeer::FLO_UID); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $arrayFinalData["EVN_UID"], \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE, "bpmnEvent", \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_DEST, $arrayFinalData["ACT_UID"], \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE, "bpmnActivity", \Criteria::EQUAL); $rsCriteria = \BpmnFlowPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { throw new \Exception(\G::LoadTranslation("ID_WEB_ENTRY_EVENT_FLOW_EVENT_TO_ACTIVITY_DOES_NOT_EXIST")); } } if (isset($arrayData["DYN_UID"])) { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->throwExceptionIfNotExistsDynaForm($arrayData["DYN_UID"], $projectUid, $this->arrayFieldNameForException["dynaFormUid"]); } if (isset($arrayData["USR_UID"])) { $process->throwExceptionIfNotExistsUser($arrayData["USR_UID"], $this->arrayFieldNameForException["userUid"]); } } catch (\Exception $e) { throw $e; } }
public function updateRouteOrderFromProject($prjUid) { $accountsArray = array(); $criteria = new \Criteria("workflow"); $criteria->clearSelectColumns(); $criteria->addSelectColumn(\BpmnFlowPeer::FLO_POSITION); $criteria->addSelectColumn(\BpmnFlowPeer::FLO_ELEMENT_DEST); $criteria->addSelectColumn(\BpmnFlowPeer::PRJ_UID); $criteria->addSelectColumn(\BpmnFlowPeer::FLO_TYPE); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE, 'bpmnGateway'); $criteria->add(\BpmnFlowPeer::PRJ_UID, $prjUid); $criteria->addAscendingOrderByColumn(BpmnFlowPeer::FLO_POSITION); $result = \BpmnFlowPeer::doSelectRS($criteria); $result->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $result->next(); $j = 0; $k = 1; while ($aRow = $result->getRow()) { $accountsArray[$j]['PRO_UID'] = $aRow['PRJ_UID']; $accountsArray[$j]['ROU_NEXT_TASK'] = $aRow['FLO_ELEMENT_DEST']; $accountsArray[$j]['ROU_CASE'] = $k++; $result->next(); $j++; } if (sizeof($accountsArray)) { $this->updateRouteOrder($accountsArray); } }
/** * Returns the number of rows matching criteria, joining the related BpmnDiagram table * * @param Criteria $c * @param boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria). * @param Connection $con * @return int Number of matching rows. */ public static function doCountJoinAllExceptBpmnDiagram(Criteria $criteria, $distinct = false, $con = null) { // we're going to modify criteria, so copy it first $criteria = clone $criteria; // clear out anything that might confuse the ORDER BY clause $criteria->clearSelectColumns()->clearOrderByColumns(); if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { $criteria->addSelectColumn(BpmnFlowPeer::COUNT_DISTINCT); } else { $criteria->addSelectColumn(BpmnFlowPeer::COUNT); } // just in case we're grouping: add those columns to the select statement foreach ($criteria->getGroupByColumns() as $column) { $criteria->addSelectColumn($column); } $criteria->addJoin(BpmnFlowPeer::PRJ_UID, BpmnProjectPeer::PRJ_UID); $rs = BpmnFlowPeer::doSelectRS($criteria, $con); if ($rs->next()) { return $rs->getInt(1); } else { // no rows returned; we infer that means 0 matches. return 0; } }