mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Handle cases when there are multiple EntityWorkflows associated with one entity
This commit is contained in:
parent
31f842471a
commit
9e92ede16f
@ -11,7 +11,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\DocStoreBundle\Service;
|
namespace Chill\DocStoreBundle\Service;
|
||||||
|
|
||||||
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
|
||||||
use Chill\MainBundle\Workflow\EntityWorkflowManager;
|
use Chill\MainBundle\Workflow\EntityWorkflowManager;
|
||||||
use Symfony\Component\Security\Core\Security;
|
use Symfony\Component\Security\Core\Security;
|
||||||
|
|
||||||
@ -21,13 +20,10 @@ class WorkflowDocumentService
|
|||||||
|
|
||||||
public function notBlockedByWorkflow(object $entity): bool
|
public function notBlockedByWorkflow(object $entity): bool
|
||||||
{
|
{
|
||||||
/**
|
$workflows = $this->entityWorkflowManager->findByRelatedEntity($entity);
|
||||||
* @var EntityWorkflow
|
|
||||||
*/
|
|
||||||
$workflow = $this->entityWorkflowManager->findByRelatedEntity($entity);
|
|
||||||
$currentUser = $this->security->getUser();
|
$currentUser = $this->security->getUser();
|
||||||
|
|
||||||
if (null != $workflow) {
|
foreach ($workflows as $workflow) {
|
||||||
if ($workflow->isFinal()) {
|
if ($workflow->isFinal()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -121,10 +121,10 @@ readonly class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkfl
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findByRelatedEntity(object $object): ?EntityWorkflow
|
public function findByRelatedEntity(object $object): array
|
||||||
{
|
{
|
||||||
if (!$object instanceof AccompanyingCourseDocument) {
|
if (!$object instanceof AccompanyingCourseDocument) {
|
||||||
return null;
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->workflowRepository->findByRelatedEntity(AccompanyingCourseDocument::class, $object->getId());
|
return $this->workflowRepository->findByRelatedEntity(AccompanyingCourseDocument::class, $object->getId());
|
||||||
|
@ -99,7 +99,10 @@ class EntityWorkflowRepository implements ObjectRepository
|
|||||||
return $this->repository->findAll();
|
return $this->repository->findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findByRelatedEntity($entityClass, $relatedEntityId): ?EntityWorkflow
|
/**
|
||||||
|
* @return list<EntityWorkflow>
|
||||||
|
*/
|
||||||
|
public function findByRelatedEntity($entityClass, $relatedEntityId): array
|
||||||
{
|
{
|
||||||
$qb = $this->repository->createQueryBuilder('w');
|
$qb = $this->repository->createQueryBuilder('w');
|
||||||
|
|
||||||
|
@ -52,5 +52,8 @@ interface EntityWorkflowHandlerInterface
|
|||||||
|
|
||||||
public function supportsFreeze(EntityWorkflow $entityWorkflow, array $options = []): bool;
|
public function supportsFreeze(EntityWorkflow $entityWorkflow, array $options = []): bool;
|
||||||
|
|
||||||
public function findByRelatedEntity(object $object): ?EntityWorkflow;
|
/**
|
||||||
|
* @return list<EntityWorkflow>
|
||||||
|
*/
|
||||||
|
public function findByRelatedEntity(object $object): array;
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,17 @@ class EntityWorkflowManager
|
|||||||
return $this->registry->all($entityWorkflow);
|
return $this->registry->all($entityWorkflow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findByRelatedEntity(object $object): ?EntityWorkflow
|
/**
|
||||||
|
* @return list<EntityWorkflow>
|
||||||
|
*/
|
||||||
|
public function findByRelatedEntity(object $object): array
|
||||||
{
|
{
|
||||||
foreach ($this->handlers as $handler) {
|
foreach ($this->handlers as $handler) {
|
||||||
return $handler->findByRelatedEntity($object);
|
if ([] !== $workflows = $handler->findByRelatedEntity($object)) {
|
||||||
|
return $workflows;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ namespace Chill\PersonBundle\Repository\AccompanyingPeriod;
|
|||||||
|
|
||||||
use Chill\DocStoreBundle\Entity\StoredObject;
|
use Chill\DocStoreBundle\Entity\StoredObject;
|
||||||
use Chill\DocStoreBundle\Repository\AssociatedEntityToStoredObjectInterface;
|
use Chill\DocStoreBundle\Repository\AssociatedEntityToStoredObjectInterface;
|
||||||
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
|
|
||||||
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Doctrine\ORM\EntityRepository;
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
@ -135,10 +135,10 @@ class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityW
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findByRelatedEntity(object $object): ?EntityWorkflow
|
public function findByRelatedEntity(object $object): array
|
||||||
{
|
{
|
||||||
if (!$object instanceof AccompanyingPeriodWorkEvaluationDocument) {
|
if (!$object instanceof AccompanyingPeriodWorkEvaluationDocument) {
|
||||||
return null;
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluationDocument::class, $object->getId());
|
return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluationDocument::class, $object->getId());
|
||||||
|
@ -21,13 +21,13 @@ use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkEvalu
|
|||||||
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodWorkEvaluationVoter;
|
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodWorkEvaluationVoter;
|
||||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||||
|
|
||||||
class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowHandlerInterface
|
readonly class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowHandlerInterface
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly AccompanyingPeriodWorkEvaluationRepository $repository,
|
private AccompanyingPeriodWorkEvaluationRepository $repository,
|
||||||
private readonly EntityWorkflowRepository $workflowRepository,
|
private EntityWorkflowRepository $workflowRepository,
|
||||||
private readonly TranslatableStringHelperInterface $translatableStringHelper,
|
private TranslatableStringHelperInterface $translatableStringHelper,
|
||||||
private readonly TranslatorInterface $translator
|
private TranslatorInterface $translator
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function getDeletionRoles(): array
|
public function getDeletionRoles(): array
|
||||||
@ -121,10 +121,10 @@ class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowH
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findByRelatedEntity(object $object): ?EntityWorkflow
|
public function findByRelatedEntity(object $object): array
|
||||||
{
|
{
|
||||||
if (!$object instanceof AccompanyingPeriodWorkEvaluation) {
|
if (!$object instanceof AccompanyingPeriodWorkEvaluation) {
|
||||||
return null;
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluation::class, $object->getId());
|
return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluation::class, $object->getId());
|
||||||
|
@ -128,10 +128,10 @@ class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInte
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findByRelatedEntity(object $object): ?EntityWorkflow
|
public function findByRelatedEntity(object $object): array
|
||||||
{
|
{
|
||||||
if (!$object instanceof AccompanyingPeriodWork) {
|
if (!$object instanceof AccompanyingPeriodWork) {
|
||||||
return null;
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWork::class, $object->getId());
|
return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWork::class, $object->getId());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user