diff --git a/src/Bundle/ChillDocStoreBundle/Service/WorkflowDocumentService.php b/src/Bundle/ChillDocStoreBundle/Service/WorkflowDocumentService.php index f796fe56e..17591b2d0 100644 --- a/src/Bundle/ChillDocStoreBundle/Service/WorkflowDocumentService.php +++ b/src/Bundle/ChillDocStoreBundle/Service/WorkflowDocumentService.php @@ -4,32 +4,36 @@ namespace Chill\DocStoreBundle\Service; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; +use Chill\MainBundle\Workflow\EntityWorkflowManager; use Symfony\Component\Security\Core\Security; class WorkflowDocumentService { - public function __construct(private readonly Security $security, private readonly EntityWorkflowRepository $repository) + public function __construct(private readonly Security $security, private readonly EntityWorkflowManager $entityWorkflowManager) { } - public function notBlockedByWorkflow($entity): bool + public function notBlockedByWorkflow(object $entity): bool { /** * @var EntityWorkflow */ - $workflow = $this->repository->findByRelatedEntity(get_class($entity), $entity->getId()); - - if ($workflow->isFinal()) { - return false; - } - + $workflow = $this->entityWorkflowManager->findByRelatedEntity($entity); $currentUser = $this->security->getUser(); - if ($workflow->getCurrentStep()->getAllDestUser()->contains($currentUser)) { - return true; + + + if (null !== $workflow) { + if ($workflow->isFinal()) { + return false; + } + + if ($workflow->getCurrentStep()->getAllDestUser()->contains($currentUser)) { + return true; + } } - return false; + return true; } } diff --git a/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php b/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php index 9d1b619f9..e3f201914 100644 --- a/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php +++ b/src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php @@ -12,8 +12,10 @@ declare(strict_types=1); namespace Chill\DocStoreBundle\Workflow; use Chill\DocStoreBundle\Entity\AccompanyingCourseDocument; +use Chill\DocStoreBundle\Repository\AccompanyingCourseDocumentRepository; use Chill\DocStoreBundle\Security\Authorization\AccompanyingCourseDocumentVoter; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; +use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation; use Doctrine\ORM\EntityManagerInterface; @@ -22,16 +24,13 @@ use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkflowHandlerInterface { - private readonly EntityRepository $repository; - /** - * TODO: injecter le repository directement. - */ public function __construct( EntityManagerInterface $em, - private readonly TranslatorInterface $translator + private readonly TranslatorInterface $translator, + private readonly EntityWorkflowRepository $workflowRepository, + private readonly AccompanyingCourseDocumentRepository $repository ) { - $this->repository = $em->getRepository(AccompanyingCourseDocument::class); } public function getDeletionRoles(): array @@ -126,4 +125,13 @@ class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkflowHandler { return false; } + + public function findByRelatedEntity(object $object): ?EntityWorkflow + { + if(!$object instanceof AccompanyingCourseDocument) { + return null; + } + + return $this->workflowRepository->findByRelatedEntity(AccompanyingCourseDocument::class, $object->getId()); + } } diff --git a/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php b/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php index 1d185ba0e..bff1057c8 100644 --- a/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php +++ b/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowHandlerInterface.php @@ -51,4 +51,6 @@ interface EntityWorkflowHandlerInterface public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool; public function supportsFreeze(EntityWorkflow $entityWorkflow, array $options = []): bool; + + public function findByRelatedEntity(object $object): ?EntityWorkflow; } diff --git a/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowManager.php b/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowManager.php index 9a1f52280..3f2ff0439 100644 --- a/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowManager.php +++ b/src/Bundle/ChillMainBundle/Workflow/EntityWorkflowManager.php @@ -37,4 +37,13 @@ class EntityWorkflowManager { return $this->registry->all($entityWorkflow); } + + public function findByRelatedEntity(object $object): ?EntityWorkflow + { + foreach ($this->handlers as $handler) { + return $handler->findByRelatedEntity($object); + } + return null; + } + } diff --git a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler.php b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler.php index 0fc13224e..0fd3af0af 100644 --- a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler.php +++ b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Workflow; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; +use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument; @@ -21,7 +22,12 @@ use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityWorkflowHandlerInterface { - public function __construct(private readonly AccompanyingPeriodWorkEvaluationDocumentRepository $repository, private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator) {} + public function __construct( + private readonly AccompanyingPeriodWorkEvaluationDocumentRepository $repository, + private readonly EntityWorkflowRepository $workflowRepository, + private readonly TranslatableStringHelperInterface $translatableStringHelper, + private readonly TranslatorInterface $translator + ) {} public function getDeletionRoles(): array { @@ -128,4 +134,12 @@ class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityW { return false; } + + public function findByRelatedEntity(object $object): ?EntityWorkflow + { + if (!$object instanceof AccompanyingPeriodWorkEvaluationDocument) { + return null; + } + return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluationDocument::class, $object->getId()); + } } diff --git a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php index 63b34d1dc..e007f03f7 100644 --- a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php +++ b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Workflow; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; +use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation; @@ -22,7 +23,12 @@ use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowHandlerInterface { - public function __construct(private readonly AccompanyingPeriodWorkEvaluationRepository $repository, private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator) {} + public function __construct( + private readonly AccompanyingPeriodWorkEvaluationRepository $repository, + private readonly EntityWorkflowRepository $workflowRepository, + private readonly TranslatableStringHelperInterface $translatableStringHelper, + private readonly TranslatorInterface $translator + ) {} public function getDeletionRoles(): array { @@ -114,4 +120,13 @@ class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowH { return false; } + + public function findByRelatedEntity(object $object): ?EntityWorkflow + { + if (!$object instanceof AccompanyingPeriodWorkEvaluation) { + return null; + } + + return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluation::class, $object->getId()); + } } diff --git a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php index 5c74e5b17..81116b7b2 100644 --- a/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php +++ b/src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Workflow; use Chill\MainBundle\Entity\Workflow\EntityWorkflow; +use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; @@ -23,7 +24,12 @@ use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInterface { - public function __construct(private readonly AccompanyingPeriodWorkRepository $repository, private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator) {} + public function __construct( + private readonly AccompanyingPeriodWorkRepository $repository, + private readonly EntityWorkflowRepository $workflowRepository, + private readonly TranslatableStringHelperInterface $translatableStringHelper, + private readonly TranslatorInterface $translator + ) {} public function getDeletionRoles(): array { @@ -121,4 +127,12 @@ class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInte { return false; } + + public function findByRelatedEntity(object $object): ?EntityWorkflow + { + if (!$object instanceof AccompanyingPeriodWork) { + return null; + } + return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWork::class, $object->getId()); + } }