public function mapBpmnEventToWorkflowRoutes($activityUid, $eventUid, $routeType = "SEQUENTIAL", $routeCondition = "", $routeDefault = 0) { try { $arrayEventData = \BpmnEvent::findOneBy(\BpmnEventPeer::EVN_UID, $eventUid)->toArray(); if (!is_null($arrayEventData)) { $arrayEventType = array("INTERMEDIATE"); $arrayEventMarker = array("MESSAGECATCH", "TIMER"); if (in_array($arrayEventData["EVN_TYPE"], $arrayEventType) && in_array($arrayEventData["EVN_MARKER"], $arrayEventMarker)) { $arrayKey = array( "MESSAGECATCH" => "intermediate-catch-message-event", "TIMER" => "intermediate-catch-timer-event" ); $taskUid = $this->createTaskByElement( $eventUid, "bpmnEvent", $arrayKey[$arrayEventData["EVN_MARKER"]] ); $result = $this->wp->addRoute($activityUid, $taskUid, $routeType, $routeCondition, $routeDefault); $activityUid = $taskUid; $routeType = "SEQUENTIAL"; $routeCondition = ""; $routeDefault = 0; } //Flows $arrayFlow = \BpmnFlow::findAllBy(array( \BpmnFlowPeer::FLO_TYPE => array("MESSAGE", \Criteria::NOT_EQUAL), \BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $eventUid, \BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnEvent" )); foreach ($arrayFlow as $value) { $arrayFlowData = $value->toArray(); switch ($arrayFlowData["FLO_ELEMENT_DEST_TYPE"]) { case "bpmnActivity": //Event ----> Activity $result = $this->wp->addRoute($activityUid, $arrayFlowData["FLO_ELEMENT_DEST"], $routeType, $routeCondition, $routeDefault); break; case "bpmnGateway": //Event ----> Gateway $this->mapBpmnGatewayToWorkflowRoutes($activityUid, $arrayFlowData["FLO_ELEMENT_DEST"]); break; case "bpmnEvent": //Event ----> Event $event = \BpmnEventPeer::retrieveByPK($arrayFlowData["FLO_ELEMENT_DEST"]); if (!is_null($event)) { switch ($event->getEvnType()) { case "START": throw new \LogicException("Incorrect design" . PHP_EOL . "Given: bpmnEvent -> " . $arrayFlowData["FLO_ELEMENT_DEST_TYPE"]); break; case "END": //$event->getEvnMarker(): EMPTY or MESSAGETHROW switch ($event->getEvnMarker()) { case "MESSAGETHROW": $taskUid = $this->createTaskByElement( $event->getEvnUid(), "bpmnEvent", "end-message-event" ); $result = $this->wp->addRoute($activityUid, $taskUid, $routeType, $routeCondition, $routeDefault); $result = $this->wp->addRoute($taskUid, -1, "SEQUENTIAL"); break; case "EMAIL": $taskUid = $this->createTaskByElement( $event->getEvnUid(), "bpmnEvent", "end-email-event" ); $result = $this->wp->addRoute($activityUid, $taskUid, $routeType, $routeCondition, $routeDefault); $result = $this->wp->addRoute($taskUid, -1, "SEQUENTIAL"); break; default: //EMPTY //and others types $result = $this->wp->addRoute($activityUid, -1, $routeType, $routeCondition, $routeDefault); break; } break; default: //INTERMEDIATE //and others types $this->mapBpmnEventToWorkflowRoutes($activityUid, $arrayFlowData["FLO_ELEMENT_DEST"], $routeType, $routeCondition, $routeDefault); break; } } break; default: //For ProcessMaker is only allowed flows between: "event -> activity", "event -> gateway", "event -> event" //any another flow is considered invalid throw new \LogicException( "For ProcessMaker is only allowed flows between: \"event -> activity\", \"event -> gateway\", \"event -> event\"" . PHP_EOL . "Given: bpmnEvent -> " . $arrayFlowData["FLO_ELEMENT_DEST_TYPE"] ); } } } } catch (\Exception $e) { throw $e; } }