handlers as $handler) { if ($handler->supports($entityWorkflow, $options)) { return $handler; } } throw new HandlerNotFoundException(); } public function getSupportedWorkflows(EntityWorkflow $entityWorkflow): array { return $this->registry->all($entityWorkflow); } public function getAssociatedStoredObject(EntityWorkflow $entityWorkflow): ?StoredObject { foreach ($this->handlers as $handler) { if ($handler instanceof EntityWorkflowWithStoredObjectHandlerInterface && $handler->supports($entityWorkflow)) { return $handler->getAssociatedStoredObject($entityWorkflow); } } return null; } /** * @return list */ public function findByRelatedEntity(object $object): array { foreach ($this->handlers as $handler) { if ([] !== $workflows = $handler->findByRelatedEntity($object)) { return $workflows; } } return []; } /** * Renders the public view for the given entity workflow send. * * @param EntityWorkflowSend $entityWorkflowSend the entity workflow send object * * @return string the rendered public view * * @throws HandlerWithPublicViewNotFoundException if no handler with public view is found */ public function renderPublicView(EntityWorkflowSend $entityWorkflowSend, EntityWorkflowViewMetadataDTO $metadata): string { $entityWorkflow = $entityWorkflowSend->getEntityWorkflowStep()->getEntityWorkflow(); foreach ($this->handlers as $handler) { if ($handler instanceof EntityWorkflowWithPublicViewInterface && $handler->supports($entityWorkflow)) { return $handler->renderPublicView($entityWorkflowSend, $metadata); } } throw new HandlerWithPublicViewNotFoundException(); } /** * @return list */ public function getSuggestedUsers(EntityWorkflow $entityWorkflow, bool $addUsersInvolved = true): array { $users = []; if ($addUsersInvolved) { foreach ($entityWorkflow->getUsersInvolved() as $user) { $users[] = $user; } } foreach ($this->getHandler($entityWorkflow)->getSuggestedUsers($entityWorkflow) as $user) { $users[] = $user; } return array_values( // filter objects to remove duplicates array_filter( $users, fn ($o, $k) => array_search($o, $users, true) === $k, ARRAY_FILTER_USE_BOTH ) ); } /** * @return list */ public function getSuggestedPersons(EntityWorkflow $entityWorkflow): array { return $this->getHandler($entityWorkflow)->getSuggestedPersons($entityWorkflow); } /** * @return list */ public function getSuggestedThirdParties(EntityWorkflow $entityWorkflow): array { return $this->getHandler($entityWorkflow)->getSuggestedThirdParties($entityWorkflow); } }