custom/plugins/SmsBecoTechnicTheme/src/Subscriber/MailSubscriber.php line 34

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace SmsBecoTechnicTheme\Subscriber;
  3. use Shopware\Core\Checkout\Customer\CustomerEntity;
  4. use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
  5. use Shopware\Core\Content\MailTemplate\Service\Event\MailBeforeValidateEvent;
  6. use Shopware\Core\Framework\Context;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class MailSubscriber implements EventSubscriberInterface
  12. {
  13.     private EntityRepository $customerRepository;
  14.     private EntityRepository $mailTemplateRepository;
  15.     public function __construct(
  16.         EntityRepository $customerRepository,
  17.         EntityRepository $mailTemplateRepository
  18.     )
  19.     {
  20.         $this->customerRepository $customerRepository;
  21.         $this->mailTemplateRepository $mailTemplateRepository;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             MailBeforeValidateEvent::class => 'onMailBeforeValidateEvent',
  27.         ];
  28.     }
  29.     public function onMailBeforeValidateEvent(MailBeforeValidateEvent $event)
  30.     {
  31.         //Get the keys of the recipients in data array
  32.         $recipients array_keys($event->getData()['recipients']);
  33.         foreach ($recipients as $recipient) {
  34.             $criteria = new Criteria();
  35.             $criteria->addFilter(new EqualsFilter('email'$recipient));
  36.             /** @var CustomerEntity|null $customer */
  37.             $customer $this->customerRepository->search($criteria$event->getContext())->first();
  38.             if (!is_null($customer) && $event->getContext()->getLanguageId() !== $customer->getLanguageId()) {
  39.                 $context = new Context(
  40.                     $event->getContext()->getSource(),
  41.                     $event->getContext()->getRuleIds(),
  42.                     $event->getContext()->getCurrencyId(),
  43.                     [$customer->getLanguageId()],
  44.                     $event->getContext()->getVersionId(),
  45.                     $event->getContext()->getCurrencyFactor(),
  46.                     $event->getContext()->considerInheritance(),
  47.                     $event->getContext()->getTaxState(),
  48.                     $event->getContext()->getRounding()
  49.                 );
  50.                 $mailTemplateCriteria = new Criteria([$event->getData()['templateId']]);
  51.                 /** @var MailTemplateEntity $mailTemplate */
  52.                 $mailTemplate $this->mailTemplateRepository->search($mailTemplateCriteria$context)->first();
  53.                 $data $event->getData();
  54.                 $data['contentHtml'] = $mailTemplate->getContentHtml();
  55.                 $data['subject'] = $mailTemplate->getSubject();
  56.                 $event->setData($data);
  57.             }
  58.         }
  59.     }
  60. }