<?php
namespace ProxaEmployee\Subscribers;
use ProxaEmployee\Services\ConfigService;
use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
use Shopware\Core\Content\MailTemplate\Service\Event\MailBeforeValidateEvent;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class MailSubscriber implements EventSubscriberInterface
{
/**
* @var RequestStack
*/
private RequestStack $requestStack;
/**
* @var EntityRepositoryInterface
*/
private EntityRepositoryInterface $repositoryMailTemplate;
/**
* @var ConfigService
*/
private ConfigService $configService;
/**
* @param RequestStack $requestStack
* @param EntityRepositoryInterface $repositoryMailTemplate
* @param ConfigService $configService
*/
public function __construct(
RequestStack $requestStack,
EntityRepositoryInterface $repositoryMailTemplate,
ConfigService $configService
)
{
$this->requestStack = $requestStack;
$this->repositoryMailTemplate = $repositoryMailTemplate;
$this->configService = $configService;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array
{
return [
MailBeforeValidateEvent::class => 'onMailBeforeValidate',
];
}
/**
* @param MailBeforeValidateEvent $event
* @return void
*/
public function onMailBeforeValidate(MailBeforeValidateEvent $event)
{
if (!$request = $this->requestStack->getCurrentRequest()) {
return;
}
$routeName = $request->get('_route');
$mitarbeiterID = $request->get('mitarbeiterID');
$templateId = $event->getData()['templateId'] ?? null;
if (
$routeName !== 'frontend.account.register.save'
|| !$mitarbeiterID
|| $templateId !== $this->configService->getDefaultCustomerRegisterMailTemplateId()
) {
return;
}
$mailTemplate = $this->getMailTemplate($event->getContext());
if (!$mailTemplate) {
return;
}
$data = $event->getData();
$data['templateId'] = $mailTemplate->getId();
$data['contentHtml'] = $mailTemplate->getContentHtml();
$data['contentPlain'] = $mailTemplate->getContentPlain();
$data['subject'] = $mailTemplate->getSubject();
$event->setData($data);
}
/**
* @param Context $context
* @return MailTemplateEntity|null
*/
private function getMailTemplate(Context $context): ?MailTemplateEntity
{
$templateId = $this->configService->getCustomerMailTemplateID();
if (!$templateId) {
return null;
}
$criteria = new Criteria([$templateId]);
$criteria->addAssociation('media.media');
$criteria->setLimit(1);
return $this->repositoryMailTemplate
->search($criteria, $context)
->first();
}
}