custom/plugins/ProxaEmployee/src/Subscribers/MailSubscriber.php line 59

Open in your IDE?
  1. <?php
  2. namespace ProxaEmployee\Subscribers;
  3. use ProxaEmployee\Services\ConfigService;
  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\EntityRepositoryInterface;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. class MailSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var RequestStack
  15.      */
  16.     private RequestStack $requestStack;
  17.     /**
  18.      * @var EntityRepositoryInterface
  19.      */
  20.     private EntityRepositoryInterface $repositoryMailTemplate;
  21.     /**
  22.      * @var ConfigService
  23.      */
  24.     private ConfigService $configService;
  25.     /**
  26.      * @param RequestStack $requestStack
  27.      * @param EntityRepositoryInterface $repositoryMailTemplate
  28.      * @param ConfigService $configService
  29.      */
  30.     public function __construct(
  31.         RequestStack              $requestStack,
  32.         EntityRepositoryInterface $repositoryMailTemplate,
  33.         ConfigService             $configService
  34.     )
  35.     {
  36.         $this->requestStack $requestStack;
  37.         $this->repositoryMailTemplate $repositoryMailTemplate;
  38.         $this->configService $configService;
  39.     }
  40.     /**
  41.      * @return string[]
  42.      */
  43.     public static function getSubscribedEvents(): array
  44.     {
  45.         return [
  46.             MailBeforeValidateEvent::class => 'onMailBeforeValidate',
  47.         ];
  48.     }
  49.     /**
  50.      * @param MailBeforeValidateEvent $event
  51.      * @return void
  52.      */
  53.     public function onMailBeforeValidate(MailBeforeValidateEvent $event)
  54.     {
  55.         if (!$request $this->requestStack->getCurrentRequest()) {
  56.             return;
  57.         }
  58.         $routeName $request->get('_route');
  59.         $mitarbeiterID $request->get('mitarbeiterID');
  60.         $templateId $event->getData()['templateId'] ?? null;
  61.         if (
  62.             $routeName !== 'frontend.account.register.save'
  63.             || !$mitarbeiterID
  64.             || $templateId !== $this->configService->getDefaultCustomerRegisterMailTemplateId()
  65.         ) {
  66.             return;
  67.         }
  68.         $mailTemplate $this->getMailTemplate($event->getContext());
  69.         if (!$mailTemplate) {
  70.             return;
  71.         }
  72.         $data $event->getData();
  73.         $data['templateId'] = $mailTemplate->getId();
  74.         $data['contentHtml'] = $mailTemplate->getContentHtml();
  75.         $data['contentPlain'] = $mailTemplate->getContentPlain();
  76.         $data['subject'] = $mailTemplate->getSubject();
  77.         $event->setData($data);
  78.     }
  79.     /**
  80.      * @param Context $context
  81.      * @return MailTemplateEntity|null
  82.      */
  83.     private function getMailTemplate(Context $context): ?MailTemplateEntity
  84.     {
  85.         $templateId $this->configService->getCustomerMailTemplateID();
  86.         if (!$templateId) {
  87.             return null;
  88.         }
  89.         $criteria = new Criteria([$templateId]);
  90.         $criteria->addAssociation('media.media');
  91.         $criteria->setLimit(1);
  92.         return $this->repositoryMailTemplate
  93.             ->search($criteria$context)
  94.             ->first();
  95.     }
  96. }