*/ class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityWorkflowWithStoredObjectHandlerInterface { public function __construct( private readonly AccompanyingPeriodWorkEvaluationDocumentRepository $repository, private readonly EntityWorkflowRepository $workflowRepository, private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly TranslatorInterface $translator ) {} public function getDeletionRoles(): array { return [ '_', ]; } public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array { $doc = $this->getRelatedEntity($entityWorkflow); if (null === $doc) { return [ 'persons' => [], ]; } return [ 'persons' => $doc->getAccompanyingPeriodWorkEvaluation() ->getAccompanyingPeriodWork()->getPersons(), ]; } public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string { $doc = $this->getRelatedEntity($entityWorkflow); if (null === $doc) { return $this->translator->trans('workflow.doc for evaluation deleted'); } return $this->translator->trans( 'workflow.Doc for evaluation (n°%eval%)', ['%eval%' => $entityWorkflow->getRelatedEntityId()] ).' ('.$this->translatableStringHelper->localize($doc->getAccompanyingPeriodWorkEvaluation() ->getEvaluation()->getTitle()).') '.$doc->getTitle(); } public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?AccompanyingPeriodWorkEvaluationDocument { return $this->repository->find($entityWorkflow->getRelatedEntityId()); } /** * @return array[] */ public function getRelatedObjects(object $object): array { return [ ['entityClass' => AccompanyingPeriodWorkEvaluationDocument::class, $object->getId()], ]; } public function getRoleShow(EntityWorkflow $entityWorkflow): ?string { return AccompanyingPeriodWorkEvaluationDocumentVoter::SEE; } public function getSuggestedUsers(EntityWorkflow $entityWorkflow): array { $suggestedUsers = $entityWorkflow->getUsersInvolved(); $referrer = $this->getRelatedEntity($entityWorkflow) ->getAccompanyingPeriodWorkEvaluation() ->getAccompanyingPeriodWork() ->getAccompanyingPeriod() ->getUser(); $suggestedUsers[spl_object_hash($referrer)] = $referrer; return $suggestedUsers; } public function getTemplate(EntityWorkflow $entityWorkflow, array $options = []): string { return '@ChillPerson/Workflow/_evaluation_document.html.twig'; } public function getTemplateData(EntityWorkflow $entityWorkflow, array $options = []): array { $doc = $this->getRelatedEntity($entityWorkflow); return [ 'entity_workflow' => $entityWorkflow, 'evaluation' => null !== $doc ? $doc->getAccompanyingPeriodWorkEvaluation() : $doc, 'doc' => $doc, ]; } public function isObjectSupported(object $object): bool { return $object instanceof AccompanyingPeriodWorkEvaluationDocument; } public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool { return AccompanyingPeriodWorkEvaluationDocument::class === $entityWorkflow->getRelatedEntityClass(); } public function getAssociatedStoredObject(EntityWorkflow $entityWorkflow): ?StoredObject { return $this->getRelatedEntity($entityWorkflow)?->getStoredObject(); } public function supportsFreeze(EntityWorkflow $entityWorkflow, array $options = []): bool { return false; } public function findByRelatedEntity(object $object): array { if (!$object instanceof AccompanyingPeriodWorkEvaluationDocument) { return []; } return $this->workflowRepository->findByRelatedEntity(AccompanyingPeriodWorkEvaluationDocument::class, $object->getId()); } }