<?php
declare(strict_types=1);
namespace Harmonizely\User\EventSubscriber;
use Harmonizely\Core\Email\ListContainer\EmailListContainer;
use Harmonizely\Entity\Company\DeletionReasonEntity;
use Harmonizely\Mailer\InternalMailer;
use Harmonizely\Repository\Company\Contract\IDeletionReasonRepository;
use Harmonizely\User\UserDeletedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mime\Address;
class DeleteUserSubscriber implements EventSubscriberInterface
{
/**
* @var EmailListContainer
*/
private EmailListContainer $emailListContainer;
/**
* @var IDeletionReasonRepository
*/
private IDeletionReasonRepository $deletionReasonRepository;
/**
* @var InternalMailer
*/
private InternalMailer $internalMailer;
/**
* @param EmailListContainer $emailListContainer
* @param IDeletionReasonRepository $deletionReasonRepository
* @param InternalMailer $internalMailer
*/
public function __construct(
EmailListContainer $emailListContainer,
IDeletionReasonRepository $deletionReasonRepository,
InternalMailer $internalMailer
)
{
$this->emailListContainer = $emailListContainer;
$this->deletionReasonRepository = $deletionReasonRepository;
$this->internalMailer = $internalMailer;
}
public static function getSubscribedEvents(): array
{
return [
UserDeletedEvent::NAME => 'onUserDeleted',
];
}
public function onUserDeleted(UserDeletedEvent $event): void
{
$user = $event->getUser();
$this->deletionReasonRepository->save(new DeletionReasonEntity(
$user->getEmail(),
$event->getReason(),
$event->isDeleted()
));
$this->internalMailer->send(
'user_deleted.html.twig',
'Account has been deleted!',
[
$this->emailListContainer->get('main')->getEmail() => $this->emailListContainer->get('main')->getName(),
// 'victoria@notando.is' => 'Victoria',
// 'nicholas@notando.is' => 'Kolya',
// 'mykola.alias@gmail.com' => 'Kolya 2',
],
[
'username' => $user->getFullName(),
'emailCanonical' => $user->getEmailCanonical(),
'reason' => $event->getReason(),
'recipient' => $this->emailListContainer->get('main')->getEmail(),
],
'notification',
false
);
}
}