|
@@ -8,20 +8,44 @@ use Doctrine\ORM\EntityManager;
|
|
|
|
|
|
class WorkflowInterfaceListener
|
|
|
{
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @var ContainerInterface
|
|
|
+ */
|
|
|
private $container;
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param ContainerInterface $container
|
|
|
+ */
|
|
|
public function __construct($container)
|
|
|
{
|
|
|
$this->container = $container;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @param LifecycleEventArgs $event
|
|
|
*/
|
|
|
public function prePersist(LifecycleEventArgs $event)
|
|
|
+ {
|
|
|
+ $this->executePre($event);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param LifecycleEventArgs $event
|
|
|
+ */
|
|
|
+ public function preUpdate(LifecycleEventArgs $event)
|
|
|
+ {
|
|
|
+ $this->executePre($event);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param LifecycleEventArgs $event
|
|
|
+ */
|
|
|
+ public function executePre(LifecycleEventArgs $event)
|
|
|
{
|
|
|
$em = $event->getEntityManager();
|
|
|
- $entity = $event->getEntity();
|
|
|
+ $entity = $event->getObject();
|
|
|
if ($entity instanceof WorkflowInterface) {
|
|
|
$workflow = $entity->getWorkflow();
|
|
|
// La entidad no tiene workflow, busco por la clase y le asigno el primero
|
|
@@ -32,14 +56,50 @@ class WorkflowInterfaceListener
|
|
|
$entity->setWorkflow($workflow);
|
|
|
}
|
|
|
}
|
|
|
- if (!is_null($workflow)) {
|
|
|
+ if (!is_null($workflow) && is_null($entity->getCurrentState())) {
|
|
|
$entity->setCurrentState($workflow->getInitialPlace($entity));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $object = $event->getObject();
|
|
|
- if ($object instanceof \WorkflowBundle\Entity\Workflow) {
|
|
|
- $object->setContainer($this->container);
|
|
|
+ if ($entity instanceof \WorkflowBundle\Entity\Workflow) {
|
|
|
+ $entity->setContainer($this->container);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param LifecycleEventArgs $event
|
|
|
+ */
|
|
|
+ public function postPersist(LifecycleEventArgs $event)
|
|
|
+ {
|
|
|
+ $this->executePost($event);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param LifecycleEventArgs $event
|
|
|
+ */
|
|
|
+ public function postUpdate(LifecycleEventArgs $event)
|
|
|
+ {
|
|
|
+ $this->executePost($event);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param LifecycleEventArgs $event
|
|
|
+ */
|
|
|
+ public function executePost(LifecycleEventArgs $event)
|
|
|
+ {
|
|
|
+ $em = $event->getEntityManager();
|
|
|
+ $entity = $event->getObject();
|
|
|
+ if ($entity instanceof \WorkflowBundle\Entity\Workflow) {
|
|
|
+ // Asigno el workflow a las entidades que soporta que no tengan uno asignado
|
|
|
+ $supports = $entity->getSupport();
|
|
|
+ foreach ($supports as $class) {
|
|
|
+ $entities = $em->getRepository($class)->findBy(['workflow' => null]);
|
|
|
+ foreach ($entities as $object) {
|
|
|
+ $object->setWorkflow($entity);
|
|
|
+ $object->setCurrentState($entity->getInitialPlace($object));
|
|
|
+ $em->flush($object);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|