예제 #1
0
 public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER)
 {
     $c = new Criteria('workflow');
     $c->addSelectColumn("BPMN_EVENT.*");
     $c->addSelectColumn("BPMN_BOUND.*");
     $c->addJoin(BpmnEventPeer::EVN_UID, BpmnBoundPeer::ELEMENT_UID, Criteria::LEFT_JOIN);
     if (!is_null($prjUid)) {
         $c->add(BpmnEventPeer::PRJ_UID, $prjUid, Criteria::EQUAL);
     }
     $rs = BpmnEventPeer::doSelectRS($c);
     $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
     $events = array();
     while ($rs->next()) {
         $events[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow();
     }
     return $events;
 }
예제 #2
0
 /**
  * Returns the number of rows matching criteria, joining the related BpmnProcess 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 doCountJoinAllExceptBpmnProcess(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(BpmnEventPeer::COUNT_DISTINCT);
     } else {
         $criteria->addSelectColumn(BpmnEventPeer::COUNT);
     }
     // just in case we're grouping: add those columns to the select statement
     foreach ($criteria->getGroupByColumns() as $column) {
         $criteria->addSelectColumn($column);
     }
     $criteria->addJoin(BpmnEventPeer::PRJ_UID, BpmnProjectPeer::PRJ_UID);
     $rs = BpmnEventPeer::doSelectRS($criteria, $con);
     if ($rs->next()) {
         return $rs->getInt(1);
     } else {
         // no rows returned; we infer that means 0 matches.
         return 0;
     }
 }
예제 #3
0
    public function throwExceptionFlowIfIsAnInvalidMessageFlow(array $bpmnFlow)
    {
        try {
            if ($bpmnFlow["FLO_TYPE"] == "MESSAGE" &&
                $bpmnFlow["FLO_ELEMENT_ORIGIN_TYPE"] == "bpmnEvent" && $bpmnFlow["FLO_ELEMENT_DEST_TYPE"] == "bpmnEvent"
            ) {
                $flagValid = true;

                $arrayEventType = array("START", "END", "INTERMEDIATE");

                $arrayAux = array(
                    array("eventUid" => $bpmnFlow["FLO_ELEMENT_ORIGIN"], "eventMarker" => "MESSAGETHROW"),
                    array("eventUid" => $bpmnFlow["FLO_ELEMENT_DEST"],   "eventMarker" => "MESSAGECATCH")
                );

                foreach ($arrayAux as $value) {
                    $criteria = new \Criteria("workflow");

                    $criteria->addSelectColumn(\BpmnEventPeer::EVN_UID);
                    $criteria->add(\BpmnEventPeer::EVN_UID, $value["eventUid"], \Criteria::EQUAL);
                    $criteria->add(\BpmnEventPeer::EVN_TYPE, $arrayEventType, \Criteria::IN);
                    $criteria->add(\BpmnEventPeer::EVN_MARKER, $value["eventMarker"], \Criteria::EQUAL);

                    $rsCriteria = \BpmnEventPeer::doSelectRS($criteria);

                    if (!$rsCriteria->next()) {
                        $flagValid = false;
                        break;
                    }
                }

                if (!$flagValid) {
                    throw new \RuntimeException("Invalid Message Flow.");
                }
            }
        } catch (\Exception $e) {
            self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());

            throw $e;
        }
    }