diff --git a/src/EventListener/UniqueDefaultWorkflowListener.php b/src/EventListener/UniqueDefaultWorkflowListener.php new file mode 100644 index 0000000..15b61c4 --- /dev/null +++ b/src/EventListener/UniqueDefaultWorkflowListener.php @@ -0,0 +1,46 @@ +getObjectManager(); + $uow = $em->getUnitOfWork(); + + $candidates = []; + foreach ($uow->getScheduledEntityInsertions() as $entity) { + if ($entity instanceof Workflow && $entity->isDefault()) { + $candidates[] = $entity; + } + } + foreach ($uow->getScheduledEntityUpdates() as $entity) { + if ($entity instanceof Workflow && $entity->isDefault()) { + $candidates[] = $entity; + } + } + + if (0 === count($candidates)) { + return; + } + + $metadata = $em->getClassMetadata(Workflow::class); + $repo = $em->getRepository(Workflow::class); + foreach ($repo->findBy(['isDefault' => true]) as $existing) { + if (in_array($existing, $candidates, true)) { + continue; + } + $existing->setIsDefault(false); + $uow->recomputeSingleEntityChangeSet($metadata, $existing); + } + } +}