vendor/frosh/frosh-platform-template-mail/src/Subscriber/FlowSubscriber.php line 46

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\Flow\Events\FlowSendMailActionEvent;
  7. use Shopware\Core\Content\MailTemplate\Aggregate\MailTemplateType\MailTemplateTypeEntity;
  8. use Shopware\Core\Defaults;
  9. use Shopware\Core\Framework\Context;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  12. use Shopware\Core\Framework\Event\BusinessEvent;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpFoundation\ParameterBag;
  15. class FlowSubscriber implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var EntityRepositoryInterface
  19.      */
  20.     private $mailTemplateTypeRepository;
  21.     /**
  22.      * @var MailFinderServiceInterface
  23.      */
  24.     private $mailFinderService;
  25.     public function __construct(EntityRepositoryInterface $mailTemplateTypeRepositoryMailFinderServiceInterface $mailFinderService)
  26.     {
  27.         $this->mailTemplateTypeRepository $mailTemplateTypeRepository;
  28.         $this->mailFinderService $mailFinderService;
  29.     }
  30.     public static function getSubscribedEvents()
  31.     {
  32.         if (!class_exists(FlowSendMailActionEvent::class)) {
  33.             return [];
  34.         }
  35.         return [
  36.             FlowSendMailActionEvent::class => 'sendMail'
  37.         ];
  38.     }
  39.     public function sendMail(FlowSendMailActionEvent $bagFilter)
  40.     {
  41.         /** @var MailTemplateTypeEntity $mailTemplateType */
  42.         $mailTemplateType $this->mailTemplateTypeRepository->search(new Criteria([$bagFilter->getMailTemplate()->getMailTemplateTypeId()]), Context::createDefaultContext()) ->first();
  43.         $technicalName $mailTemplateType->getTechnicalName();
  44.         $event $this->createBusinessEventFromBag($bagFilter->getDataBag(), $bagFilter->getContext());
  45.         $html $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_HTML$technicalName$event);
  46.         $plain $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_PLAIN$technicalName$event);
  47.         $subject $this->mailFinderService->findTemplateByTechnicalName(MailFinderService::TYPE_SUBJECT$technicalName$event);
  48.         if ($html) {
  49.             $bagFilter->getDataBag()->set('contentHtml'$html);
  50.         }
  51.         if ($plain) {
  52.             $bagFilter->getDataBag()->set('contentPlain'$plain);
  53.         }
  54.         if ($subject) {
  55.             $bagFilter->getDataBag()->set('subject'$subject);
  56.         }
  57.     }
  58.     private function createBusinessEventFromBag(ParameterBag $dataBagContext $context): BusinessEvent
  59.     {
  60.         return new TemplateMailBusinessEvent($dataBag->get('salesChannelId') ?? Defaults::SALES_CHANNEL$context);
  61.     }
  62. }