From a9f87be8e57bd3ec5b8a82ca42d01d85e79a4f33 Mon Sep 17 00:00:00 2001 From: matthieu Date: Tue, 19 May 2026 19:52:47 +0200 Subject: [PATCH] feat(workflow) : listener garantissant un seul workflow isDefault=true --- .../UniqueDefaultWorkflowListener.php | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/EventListener/UniqueDefaultWorkflowListener.php 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); + } + } +}