123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- <?php
- namespace WorkflowBundle\Event;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- use Symfony\Component\Workflow\Event\Event;
- use Symfony\Component\Workflow\Event\GuardEvent;
- use WorkflowBundle\Services\ProducerService;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- # Ayuda:
- # http://blog.eleven-labs.com/en/symfony-workflow-component/
- # https://github.com/lexik/LexikWorkflowBundle
- # https://github.com/fduch/workflow-bundle
- class EventSubscriber implements EventSubscriberInterface
- {
- private $container;
- private $producerService;
- /**
- * @param ContainerInterface $container
- */
- public function __construct(ContainerInterface $container, ProducerService $producerService)
- {
- $this->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);
- }
-
- }
|