vendor/frosh/frosh-platform-template-mail/src/Subscriber/MailTemplateSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. namespace Frosh\TemplateMail\Subscriber;
  3. use Frosh\TemplateMail\Event\TemplateMailBusinessEvent;
  4. use Frosh\TemplateMail\Services\MailFinderService;
  5. use Frosh\TemplateMail\Services\MailFinderServiceInterface;
  6. use Shopware\Core\Content\MailTemplate\Aggregate\MailTemplateType\MailTemplateTypeCollection;
  7. use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
  8. use Shopware\Core\Content\MailTemplate\MailTemplateEvents;
  9. use Shopware\Core\Defaults;
  10. use Shopware\Core\Framework\Api\Context\SalesChannelApiSource;
  11. use Shopware\Core\Framework\Context;
  12. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  14. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  15. use Shopware\Core\Framework\Struct\ArrayStruct;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. class MailTemplateSubscriber implements EventSubscriberInterface
  18. {
  19.     /**
  20.      * @var EntityRepositoryInterface
  21.      */
  22.     private $mailTemplateTypeRepository;
  23.     /**
  24.      * @var MailFinderServiceInterface
  25.      */
  26.     private $mailFinderService;
  27.     public function __construct(
  28.         EntityRepositoryInterface $mailTemplateTypeRepository,
  29.         MailFinderServiceInterface $mailFinderService
  30.     ) {
  31.         $this->mailTemplateTypeRepository $mailTemplateTypeRepository;
  32.         $this->mailFinderService $mailFinderService;
  33.     }
  34.     public static function getSubscribedEvents(): array
  35.     {
  36.         return [
  37.             MailTemplateEvents::MAIL_TEMPLATE_LOADED_EVENT => 'onMailTemplatesLoaded',
  38.         ];
  39.     }
  40.     public function onMailTemplatesLoaded(EntityLoadedEvent $event): void
  41.     {
  42.         $source $event->getContext()->getSource();
  43.         $salesChannelId Defaults::SALES_CHANNEL;
  44.         if ($source instanceof SalesChannelApiSource) {
  45.             $salesChannelId $source->getSalesChannelId();
  46.         }
  47.         $businessEvent = new TemplateMailBusinessEvent($salesChannelId$event->getContext());
  48.         $context Context::createDefaultContext();
  49.         /** @var MailTemplateTypeCollection $mailTemplateTypes */
  50.         $mailTemplateTypes $this->mailTemplateTypeRepository->search(new Criteria(), $context)->getEntities();
  51.         /** @var MailTemplateEntity $mailTemplateEntity */
  52.         foreach ($event->getEntities() as $mailTemplateEntity) {
  53.             $mailTemplateType $mailTemplateTypes->get($mailTemplateEntity->getMailTemplateTypeId());
  54.             if($mailTemplateType === null) {
  55.                 continue;
  56.             }
  57.             $technicalName $mailTemplateType->getTechnicalName();
  58.             $html $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_HTML$technicalName$businessEventtrue);
  59.             $plain $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_PLAIN$technicalName$businessEventtrue);
  60.             $subject $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_SUBJECT$technicalName$businessEventtrue);
  61.             $mailTemplateEntity->addExtension(
  62.                 'froshTemplateMail',
  63.                 new ArrayStruct([
  64.                     'html' => $html,
  65.                     'plain' => $plain,
  66.                     'subject' => $subject,
  67.                     'technicalName' => $technicalName,
  68.                 ]));
  69.         }
  70.     }
  71. }