custom/plugins/VioB2BLogin/src/Core/Checkout/Customer/Subscriber/EmployeeFlowEventsSubscriber.php line 46

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace VioB2BLogin\Core\Checkout\Customer\Subscriber;
  3. use Shopware\Core\Checkout\Customer\CustomerEntity;
  4. use Shopware\Core\Framework\Api\Context\SalesChannelApiSource;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
  6. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextRestorer;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  9. use VioB2BLogin\Core\Checkout\Customer\Event\EmployeeCreateEvent;
  10. use VioB2BLogin\Core\Services\EmployeeService;
  11. use VioB2BLogin\Core\System\SalesChannel\Context\SalesChannelContextFactory;
  12. use VioB2BLogin\Entity\Employee\EmployeeDefinition;
  13. use VioB2BLogin\Entity\Employee\EmployeeEntity;
  14. class EmployeeFlowEventsSubscriber implements EventSubscriberInterface
  15. {
  16.     private EventDispatcherInterface $dispatcher;
  17.     private SalesChannelContextRestorer $restorer;
  18.     private EmployeeService $employeeService;
  19.     /**
  20.      * @internal
  21.      */
  22.     public function __construct(
  23.         EventDispatcherInterface $dispatcher,
  24.         SalesChannelContextRestorer $restorer,
  25.         EmployeeService $employeeService
  26.     ) {
  27.         $this->dispatcher $dispatcher;
  28.         $this->restorer $restorer;
  29.         $this->employeeService $employeeService;
  30.     }
  31.     /**
  32.      * @return array<string, string|array{0: string, 1: int}|list<array{0: string, 1?: int}>>
  33.      */
  34.     public static function getSubscribedEvents(): array
  35.     {
  36.         return [
  37.             EmployeeDefinition::ENTITY_NAME.'.written' => 'onEmployeeWritten',
  38.         ];
  39.     }
  40.     public function onEmployeeWritten(EntityWrittenEvent $event): void
  41.     {
  42.         if ($event->getContext()->getSource() instanceof SalesChannelApiSource) {
  43.             return;
  44.         }
  45.         $payloads $event->getPayloads();
  46.         foreach ($payloads as $payload) {
  47.             if (!empty($payload['createdAt'])
  48.              && !empty($payload['id'])
  49.              && !empty($payload['customerId'])
  50.             ) {
  51.                 $this->dispatchEmployeeCreatedEvent($payload['id'], $payload['customerId'], $event);
  52.             }
  53.         }
  54.     }
  55.     private function dispatchEmployeeCreatedEvent(string $employeeIdstring $customerIdEntityWrittenEvent $event): void
  56.     {
  57.         $context $event->getContext();
  58.         $salesChannelContext $this->restorer->restoreByCustomer($customerId$context);
  59.         if (!($salesChannelContext->getCustomer() instanceof CustomerEntity) )  {
  60.             return;
  61.         }
  62.         $employee $this->employeeService->loadEmployeeById($employeeId$context);
  63.         if (!$employee instanceof EmployeeEntity) {
  64.             return;
  65.         }
  66.         $salesChannelContext->addExtension(SalesChannelContextFactory::EMPLOYEE_KEY$employee);
  67.         $customerCreated = new EmployeeCreateEvent(
  68.             $salesChannelContext,
  69.             $employee
  70.         );
  71.         $this->dispatcher->dispatch($customerCreated);
  72.     }
  73. }