vendor/ibexa/workflow/src/lib/Event/Subscriber/WorkflowTransitionSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\Workflow\Event\Subscriber;
  8. use Ibexa\Contracts\Core\Repository\PermissionResolver;
  9. use Ibexa\Contracts\Workflow\Persistence\Handler\HandlerInterface;
  10. use Ibexa\Workflow\Registry\WorkflowRegistry;
  11. use Ibexa\Workflow\Value\Persistence\TransitionMetadataCreateStruct;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Workflow\Event\EnteredEvent;
  14. class WorkflowTransitionSubscriber implements EventSubscriberInterface
  15. {
  16.     /** @var \Ibexa\Contracts\Core\Repository\PermissionResolver */
  17.     private $permissionResolver;
  18.     /** @var \Ibexa\Contracts\Workflow\Persistence\Handler\HandlerInterface */
  19.     private $workflowHandler;
  20.     private WorkflowRegistry $workflowRegistry;
  21.     public function __construct(
  22.         PermissionResolver $permissionResolver,
  23.         HandlerInterface $workflowHandler,
  24.         WorkflowRegistry $workflowRegistry
  25.     ) {
  26.         $this->permissionResolver $permissionResolver;
  27.         $this->workflowHandler $workflowHandler;
  28.         $this->workflowRegistry $workflowRegistry;
  29.     }
  30.     public static function getSubscribedEvents(): array
  31.     {
  32.         return [
  33.             'workflow.entered' => ['onWorkflowEntered', -255],
  34.         ];
  35.     }
  36.     public function onWorkflowEntered(EnteredEvent $event): void
  37.     {
  38.         if (!$this->workflowRegistry->hasWorkflow($event->getWorkflow()->getName())) {
  39.             return;
  40.         }
  41.         $marking $event->getWorkflow()->getMarkingStore()->getMarking($event->getSubject());
  42.         if (!$event->getTransition()) {
  43.             return;
  44.         }
  45.         $context $marking->getContext() ?? [];
  46.         $createStruct = new TransitionMetadataCreateStruct();
  47.         $createStruct->name $event->getTransition()->getName();
  48.         $createStruct->message $context['message'];
  49.         $createStruct->userId $this->permissionResolver->getCurrentUserReference()->getUserId();
  50.         $createStruct->date time();
  51.         $this->workflowHandler->createTransitionMetadata($createStruct$context['workflowId']);
  52.     }
  53. }
  54. class_alias(WorkflowTransitionSubscriber::class, 'EzSystems\EzPlatformWorkflow\Event\Subscriber\WorkflowTransitionSubscriber');