|
@@ -29,27 +29,54 @@ class EventSubscriber implements EventSubscriberInterface
|
|
|
public static function getSubscribedEvents()
|
|
|
{
|
|
|
return array(
|
|
|
+ 'workflow.leave' => array('leave'),
|
|
|
'workflow.transition' => array('transition'),
|
|
|
'workflow.enter' => array('enter'),
|
|
|
- 'workflow.leave' => array('leave'),
|
|
|
'workflow.guard' => array('guard')
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- public function transition(Event $event)
|
|
|
+ public function leave(Event $event)
|
|
|
{
|
|
|
-
|
|
|
+ foreach ($event->getTransition()->getFroms() as $place) {
|
|
|
+ $actions = $this->getActions($event, 'leave', $place);
|
|
|
+
|
|
|
+ foreach($actions as $k => $action) {
|
|
|
+ $params = array('object'=>$event->getSubject());
|
|
|
+ $this->completeAction($action, $params);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
-
|
|
|
- public function leave(Event $event)
|
|
|
+
|
|
|
+ public function transition(Event $event)
|
|
|
{
|
|
|
+ $transitionName = $event->getTransition()->getName();
|
|
|
+
|
|
|
+ $actions = $this->getActions($event, 'transition', $transitionName);
|
|
|
|
|
|
+ foreach($actions as $k => $action) {
|
|
|
+ $params = array('object'=>$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('object'=>$event->getSubject());
|
|
|
+ $this->completeAction($action, $params);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|
|
@@ -58,5 +85,50 @@ class EventSubscriber implements EventSubscriberInterface
|
|
|
{
|
|
|
//$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->getWorkflow();
|
|
|
+ $filter['eventReference'] = $eventReference;
|
|
|
+
|
|
|
+ $logger->info("WORKFLOW-ACTION {$object->getWorkflowType()}.{$object->getWorkflow()} => EVENT {$eventType}:{$eventReference} => CLASS {$class}_id_{$object->getId()}");
|
|
|
+
|
|
|
+ $actions = $em->getRepository("WorkflowBundle:Action")->findBy($filter);
|
|
|
+
|
|
|
+ return $actions;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public function completeAction($action, $params) {
|
|
|
+
|
|
|
+ $logger = $this->container->get('logger');
|
|
|
+ $template = $action->getTemplate();
|
|
|
+
|
|
|
+ $twig = new \Twig_Environment(new \Twig_Loader_String());
|
|
|
+ $rendered = $twig->render($template, $params);
|
|
|
+
|
|
|
+ $object = $params['object'];
|
|
|
+ $class = get_class($object);
|
|
|
+
|
|
|
+ $logger->info("WORKFLOW-ACTION {$class}_id_{$object->getId()} | action_id_{$action->getId()} => Render: {$rendered}");
|
|
|
+
|
|
|
+ $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);
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|