custom/plugins/CioOrderExportPerMail/src/Subscriber/OrderSubscriber.php line 79

Open in your IDE?
  1. <?php
  2. namespace CioOrderExportPerMail\Subscriber;
  3. use CioPromotionalOfficeApi\Event\CreateSearchOrderSyncCriteriaEvent;
  4. use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity;
  5. use Shopware\Core\Checkout\Order\Event\OrderStateMachineStateChangeEvent;
  6. use Shopware\Core\Content\Mail\Service\AbstractMailService;
  7. use Shopware\Core\Content\MailTemplate\Aggregate\MailTemplateType\MailTemplateTypeEntity;
  8. use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
  9. use Shopware\Core\Content\MailTemplate\MailTemplateTypes;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpFoundation\ParameterBag;
  15. class OrderSubscriber implements EventSubscriberInterface
  16. {
  17.     private AbstractMailService $mailService;
  18.     private EntityRepositoryInterface $mailTemplateRepository;
  19.     private EntityRepositoryInterface $mailTemplateTypeRepository;
  20.     public function __construct(
  21.         AbstractMailService       $mailService,
  22.         EntityRepositoryInterface $mailTemplateRepository,
  23.         EntityRepositoryInterface $mailTemplateTypeRepository
  24.     ){
  25.         $this->mailService $mailService;
  26.         $this->mailTemplateRepository $mailTemplateRepository;
  27.         $this->mailTemplateTypeRepository $mailTemplateTypeRepository;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             'state_leave.order.state.waiting_for_release' => 'onCheckoutOrderPlacedEvent',
  33.             CreateSearchOrderSyncCriteriaEvent::class => 'onCreateSearchOrderSyncCriteriaEvent'
  34.         ];
  35.     }
  36.     public function onCheckoutOrderPlacedEvent(OrderStateMachineStateChangeEvent $event)
  37.     {
  38.         $order $event->getOrder();
  39.         $manufacturerMails = [];
  40.         /** @var OrderLineItemEntity $lineItem */
  41.         foreach ($order->getLineItems() as $lineItem) {
  42.             if ($payload $lineItem->getPayload()) {
  43.                 if (array_key_exists('exportMail'$payload)) {
  44.                     $exportMail $payload['exportMail'];
  45.                     // valid email address?
  46.                     if (filter_var($exportMailFILTER_VALIDATE_EMAIL)) {
  47.                         $manufacturerMails[$exportMail] = $exportMail;
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.         if (count($manufacturerMails)) {
  53.             /** @var MailTemplateTypeEntity $mailTemplateType */
  54.             $mailTemplateType $this->mailTemplateTypeRepository->search((new Criteria())->addFilter(new EqualsFilter('technicalName'MailTemplateTypes::MAILTYPE_ORDER_CONFIRM)), $event->getContext())->first();
  55.             /** @var MailTemplateEntity $mailTemplate */
  56.             $mailTemplate $this->mailTemplateRepository->search((new Criteria())->addFilter(new EqualsFilter('mailTemplateTypeId'$mailTemplateType->getId())), $event->getContext())->first();
  57.             $mailData = new ParameterBag();
  58.             $mailData->set('salesChannelId'$order->getSalesChannelId());
  59.             $mailData->set('recipients'$manufacturerMails);
  60.             $mailData->set('senderName'$mailTemplate->getTranslation('senderName'));
  61.             $mailData->set('subject'$mailTemplate->getSubject());
  62.             $mailData->set('contentHtml'$mailTemplate->getContentHtml());
  63.             $mailData->set('contentPlain'$mailTemplate->getContentPlain());
  64.             $this->mailService->send($mailData->all(), $event->getContext(), ['order' => $order]);
  65.         }
  66.     }
  67.     public function onCreateSearchOrderSyncCriteriaEvent(CreateSearchOrderSyncCriteriaEvent $event)
  68.     {
  69.         $criteria $event->getCriteria();
  70.         // filter payload
  71.         $criteria->addAssociation('lineItems');
  72.         $criteria->addFilter(new EqualsFilter('lineItems.payload.exportMail'null));
  73.         $event->setCriteria($criteria);
  74.     }
  75. }