<?php
namespace App\EventSubscriber;
use App\Entity\DeathNoticeWishes;
use App\Entity\Security\User;
use Doctrine\ORM\EntityManagerInterface;
use Eckinox\RestApiBundle\Event\ApiGeneratorEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Address;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class ApiGeneratorSubscriber implements EventSubscriberInterface
{
public function __construct(
private MailerInterface $mailer,
private ParameterBagInterface $parameters,
private TranslatorInterface $translator,
private EntityManagerInterface $entityManager
) {}
public static function getSubscribedEvents(): array
{
return [
ApiGeneratorEvent::CREATED_ERROR => 'onCreateError',
ApiGeneratorEvent::CREATED_SUCCESS => 'onCreateSuccess',
];
}
public function onCreateError(ApiGeneratorEvent $event): void
{
return;
}
public function onCreateSuccess(ApiGeneratorEvent $event): void
{
$data = $event->getData();
$entityClass = $event->getEntityClass();
if ($entityClass == DeathNoticeWishes::class) {
// Vistor email
$email = (new TemplatedEmail())
->from(new Address($this->parameters->get('eckinox_security.sender_email'), $this->parameters->get('eckinox_security.sender_name')))
->to($data['email'])
->subject($this->translator->trans('death_notice_wishes.messages.your_wishes_has_been_receive'))
->embedFromPath('img/logo-email.png', 'logo')
->htmlTemplate('/email/wishes_received.html.twig')
;
$this->mailer->send($email);
// Admin email
$emailAdmin = (new TemplatedEmail())
->from(new Address($this->parameters->get('eckinox_security.sender_email'), $this->parameters->get('eckinox_security.sender_name')))
->subject($this->translator->trans('death_notice_wishes.messages.one_wish_need_approbation_title'))
->embedFromPath('img/logo-email.png', 'logo')
->htmlTemplate('/email/wishes_need_approbation.html.twig')
;
$allUsers = $this->entityManager->getRepository(User::class)->findAll();
foreach ($allUsers as $user) {
if ($user->hasPrivilege('DEATH_NOTICE_WISHES_NOTIFICATION') && !$user->isArchived()) {
$emailAdmin->to($user->getEmail());
$this->mailer->send($emailAdmin);
}
}
}
}
}