entityWorkflowManager->findByRelatedEntity($entity); $currentUser = $this->security->getUser(); $usersInvolved = []; $entityWorkflowsNotFinalizedPositive = []; foreach ($entityWorkflows as $entityWorkflow) { // as soon as there is one signatured applyied, we are not able to // edit the document any more foreach ($entityWorkflow->getSteps() as $step) { foreach ($step->getSignatures() as $signature) { if (EntityWorkflowSignatureStateEnum::SIGNED === $signature->getState()) { return false; } } } if ($entityWorkflow->isFinal()) { $workflow = $this->registry->get($entityWorkflow, $entityWorkflow->getWorkflowName()); $marking = $workflow->getMarkingStore()->getMarking($entityWorkflow); foreach ($marking->getPlaces() as $place => $active) { $metadata = $workflow->getMetadataStore()->getPlaceMetadata($place); if ($metadata['isFinalPositive'] ?? true) { return false; } } } else { $entityWorkflowsNotFinalizedPositive[] = $entityWorkflow; foreach ($entityWorkflow->getSteps() as $step) { foreach ($step->getAllDestUser()->toArray() as $user) { $usersInvolved[] = $user; } } } } // if there isn't any user, but a workflow, blocked if ([] !== $entityWorkflowsNotFinalizedPositive) { if ([] === $usersInvolved) { return false; } return in_array($currentUser, $usersInvolved, true); } return true; } }