|
@@ -16,12 +16,20 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
|
|
|
|
|
|
class EventSubscriber implements EventSubscriberInterface
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var ContainerInterface
|
|
|
+ */
|
|
|
private $container;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var ProducerService
|
|
|
+ */
|
|
|
private $producerService;
|
|
|
|
|
|
/**
|
|
|
* @param ContainerInterface $container
|
|
|
+ * @param ProducerService $producerService
|
|
|
*/
|
|
|
public function __construct(ContainerInterface $container, ProducerService $producerService)
|
|
|
{
|
|
@@ -29,57 +37,69 @@ class EventSubscriber implements EventSubscriberInterface
|
|
|
$this->producerService = $producerService;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
public static function getSubscribedEvents()
|
|
|
{
|
|
|
return array(
|
|
|
- 'workflow.leave' => array('leave'),
|
|
|
- 'workflow.transition' => array('transition'),
|
|
|
- 'workflow.enter' => array('enter'),
|
|
|
- 'workflow.guard' => array('guard')
|
|
|
+ 'workflow.leave' => array('leave'),
|
|
|
+ 'workflow.transition' => array('transition'),
|
|
|
+ 'workflow.enter' => array('enter'),
|
|
|
+ 'workflow.guard' => array('guard'),
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param 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('entity'=>$event->getSubject());
|
|
|
+ foreach ($actions as $k => $action) {
|
|
|
+ $params = array(
|
|
|
+ 'entity' => $event->getSubject(),
|
|
|
+ );
|
|
|
$this->completeAction($action, $params);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param Event $event
|
|
|
+ */
|
|
|
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());
|
|
|
+ foreach ($actions as $k => $action) {
|
|
|
+ $params = array(
|
|
|
+ 'entity' => $event->getSubject(),
|
|
|
+ );
|
|
|
$this->completeAction($action, $params);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param Event $event
|
|
|
+ */
|
|
|
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());
|
|
|
+ foreach ($actions as $k => $action) {
|
|
|
+ $params = array(
|
|
|
+ 'entity' => $event->getSubject(),
|
|
|
+ );
|
|
|
$this->completeAction($action, $params);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param Event $event
|
|
|
+ */
|
|
|
public function guard(GuardEvent $event)
|
|
|
{
|
|
|
//$event->setBlocked(true);
|
|
@@ -100,32 +120,33 @@ class EventSubscriber implements EventSubscriberInterface
|
|
|
$object = $event->getSubject();
|
|
|
$objectClass = (string) get_class($object);
|
|
|
$logger->info("EVENT {$eventName}:{$eventReference} => {$objectClass }_id_{$object->getId()}");
|
|
|
-
|
|
|
- $criteria = array("workflowName" => $event->getWorkflowName(), "eventReference" => $eventReference
|
|
|
- );
|
|
|
- $actions = $em->getRepository("WorkflowBundle:Action")->findBy($criteria);
|
|
|
-
|
|
|
- $new_actions = array();
|
|
|
- foreach($actions as $action){
|
|
|
-
|
|
|
- if(in_array($eventName, $action->getEvent()) AND is_a($object, $action->getObjectClass())){
|
|
|
- $new_actions[] = $action;
|
|
|
- }
|
|
|
- }
|
|
|
- $actions = $new_actions;
|
|
|
+
|
|
|
+ $workflowName = $object->getWorkflowName();
|
|
|
+ $actions = $em->getRepository("WorkflowBundle:Action")
|
|
|
+ ->findByWorkflowAndEventRef($workflowName, $eventReference);
|
|
|
+
|
|
|
+ $new_actions = array();
|
|
|
+ foreach ($actions as $action) {
|
|
|
+ if (in_array($eventName, $action->getEvent()) AND is_a($object, $action->getObjectClass())) {
|
|
|
+ $new_actions[] = $action;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $actions = $new_actions;
|
|
|
$logger->info("EVENT Found ". count($actions) . " actions to apply", $criteria);
|
|
|
|
|
|
return $actions;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param Action $action
|
|
|
+ * @param array $params
|
|
|
+ */
|
|
|
public function completeAction($action, $params)
|
|
|
{
|
|
|
-
|
|
|
$logger = $this->container->get('logger');
|
|
|
-
|
|
|
$object = $params['entity'];
|
|
|
$routing_key = "";
|
|
|
- if(getenv("AMQP_KEY") !== false){
|
|
|
+ if (getenv("AMQP_KEY") !== false) {
|
|
|
$routing_key = getenv("AMQP_KEY");
|
|
|
}
|
|
|
|