custom/static-plugins/FroshPlatformTemplateMail/src/Subscriber/MailTemplateSubscriber.php line 56

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 Frosh\TemplateMail\Services\MailLoader\TwigLoader;
  7. use Shopware\Core\Content\MailTemplate\Aggregate\MailTemplateType\MailTemplateTypeCollection;
  8. use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
  9. use Shopware\Core\Content\MailTemplate\MailTemplateEvents;
  10. use Shopware\Core\Content\MailTemplate\Service\Event\MailBeforeSentEvent;
  11. use Shopware\Core\Defaults;
  12. use Shopware\Core\Framework\Api\Context\SalesChannelApiSource;
  13. use Shopware\Core\Framework\Context;
  14. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  15. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  16. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  17. use Shopware\Core\Framework\Struct\ArrayStruct;
  18. use Shopware\Core\System\SystemConfig\SystemConfigService;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\Mime\Part\DataPart;
  21. class MailTemplateSubscriber implements EventSubscriberInterface
  22. {
  23.     /**
  24.      * @var EntityRepositoryInterface
  25.      */
  26.     private $mailTemplateTypeRepository;
  27.     /**
  28.      * @var MailFinderServiceInterface
  29.      */
  30.     private $mailFinderService;
  31.     private SystemConfigService $config;
  32.     public function __construct(
  33.         EntityRepositoryInterface $mailTemplateTypeRepository,
  34.         MailFinderServiceInterface $mailFinderService,
  35.         SystemConfigService $config
  36.     ) {
  37.         $this->mailTemplateTypeRepository $mailTemplateTypeRepository;
  38.         $this->mailFinderService $mailFinderService;
  39.         $this->config $config;
  40.     }
  41.     public static function getSubscribedEvents(): array
  42.     {
  43.         return [
  44.             MailTemplateEvents::MAIL_TEMPLATE_LOADED_EVENT => 'onMailTemplatesLoaded',
  45.             MailBeforeSentEvent::class => "addAttachments"
  46.         ];
  47.     }
  48.     public function onMailTemplatesLoaded(EntityLoadedEvent $event): void
  49.     {
  50.         $twig = new TwigLoader();
  51.         $source $event->getContext()->getSource();
  52.         $salesChannelId Defaults::SALES_CHANNEL;
  53.         if ($source instanceof SalesChannelApiSource) {
  54.             $salesChannelId $source->getSalesChannelId();
  55.         }
  56.         $businessEvent = new TemplateMailBusinessEvent($salesChannelId$event->getContext());
  57.         $context Context::createDefaultContext();
  58.         /** @var MailTemplateTypeCollection $mailTemplateTypes */
  59.         $mailTemplateTypes $this->mailTemplateTypeRepository->search(new Criteria(), $context)->getEntities();
  60.         /** @var MailTemplateEntity $mailTemplateEntity */
  61.         foreach ($event->getEntities() as $mailTemplateEntity) {
  62.             $mailTemplateType $mailTemplateTypes->get($mailTemplateEntity->getMailTemplateTypeId());
  63.             if($mailTemplateType === null) {
  64.                 continue;
  65.             }
  66.             $technicalName $mailTemplateType->getTechnicalName();
  67.             $html $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_HTML$technicalName$businessEventfalse);
  68.             $plain $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_PLAIN$technicalName$businessEventfalse);
  69.             $subject $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_SUBJECT$technicalName$businessEventfalse);
  70.             $mailTemplateEntity->addExtension(
  71.                 'froshTemplateMail',
  72.                 new ArrayStruct([
  73.                     'html' => $html,
  74.                     'plain' => $plain,
  75.                     'subject' => $subject,
  76.                     'technicalName' => $technicalName
  77.                 ]));
  78.         }
  79.     }
  80.     public function addAttachments(MailBeforeSentEvent $event){
  81.         $mail $event->getMessage();
  82.         $images = [];
  83.         $images[] = ["SamsonLogo"$this->config->get('FroshPlatformTemplateMail.config.Base64Logo')];
  84.         $images[] = ["Facebook"$this->config->get('FroshPlatformTemplateMail.config.Base64Facebook')];
  85.         $images[] = ["Instagram"$this->config->get('FroshPlatformTemplateMail.config.Base64Instagram')];
  86.         $images[] = ["Pinterest"$this->config->get('FroshPlatformTemplateMail.config.Base64Pinterest')];
  87.         $images[] = ["LinkedIn"$this->config->get('FroshPlatformTemplateMail.config.Base64LinkedIn')];
  88.         foreach ($images as $image){
  89.             $mail->embed(base64_decode($image[1]), $image[0], "image/png");
  90.         }
  91.     }
  92. }