container = $container; $this->producerService = $producerService; } public static function getSubscribedEvents() { return array( 'workflow.leave' => array('leave'), 'workflow.transition' => array('transition'), 'workflow.enter' => array('enter'), 'workflow.guard' => array('guard') ); } public function leave(Event $event) { foreach ($event->getTransition()->getFroms() as $place) { $actions = $this->getActions($event, 'leave', $place); foreach($actions as $k => $action) { $params = array('entity'=>$event->getSubject()); $this->completeAction($action, $params); } } } public function transition(Event $event) { $transitionName = $event->getTransition()->getName(); $actions = $this->getActions($event, 'transition', $transitionName); foreach($actions as $k => $action) { $params = array('entity'=>$event->getSubject()); $this->completeAction($action, $params); } } public function enter(Event $event) { foreach ($event->getTransition()->getTos() as $place) { $actions = $this->getActions($event, 'enter', $place); foreach($actions as $k => $action) { $params = array('entity'=>$event->getSubject()); $this->completeAction($action, $params); } } } public function guard(GuardEvent $event) { //$event->setBlocked(true); } public function getActions($event, $eventType, $eventReference) { $logger = $this->container->get('logger'); $em = $this->container->get("doctrine.orm.entity_manager"); $object = $event->getSubject(); $class = (string) get_class($object); $filter = array(); $filter['event'] = $eventType; $filter['objectClass'] = $class; $filter['workflowType'] = $object->getWorkflowType(); $filter['workflowName'] = $object->getWorkflowName(); $filter['eventReference'] = $eventReference; $logger->info("EVENT {$eventType}:{$eventReference} => {$class}_id_{$object->getId()}"); $actions = $em->getRepository("WorkflowBundle:Action")->findBy($filter); return $actions; } public function completeAction($action, $params) { $logger = $this->container->get('logger'); $object = $params['entity']; $this->producerService->publishMessage($action, $object); $template = $action->getTemplate(); $twig = new \Twig_Environment(new \Twig_Loader_String()); $rendered = $twig->render($template, $params); $class = get_class($object); $logger->info("ACTION (action_id_{$action->getId()}) {$action->getName()} | Task: '{$rendered}' => {$class}_id_{$object->getId()}"); // $string = file_get_contents("/var/flowdat/ftth/out.log"); // $string .= "### Action id :".$action->getId().PHP_EOL; // $string .= "----------------------".PHP_EOL.$template.PHP_EOL; // $string .= "----------------------".PHP_EOL.$rendered.PHP_EOL.PHP_EOL; // file_put_contents("/var/flowdat/ftth/out.log", $string); } }