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');