src/EventSubscriber/Release/ReleaseSubscriber.php line 37
<?phpnamespace App\EventSubscriber\Release;use ApiPlatform\Api\IriConverterInterface;use App\Entity\Message\Message;use App\Entity\Release\Release;use App\Entity\Text\LongText;use App\Service\TaggedTypesService;use Doctrine\Common\EventSubscriber;use Doctrine\ORM\Event\LifecycleEventArgs;use Doctrine\ORM\Event\PostRemoveEventArgs;use Doctrine\ORM\Event\PreRemoveEventArgs;use Doctrine\ORM\Events;use Doctrine\ORM\UnitOfWork;use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Security\Core\Security;class ReleaseSubscriber implements EventSubscriber{private TaggedTypesService $taggedTypesService;private string $supportsClass;private Security $security;public function __construct(TaggedTypesService $taggedTypesService, Security $security, MailerInterface $mailer, ParameterBagInterface $params, UrlGeneratorInterface $router, IriConverterInterface $iriConverter){$this->taggedTypesService = $taggedTypesService;$this->siteFromEmail = $params->get('site_from_email');$this->siteShortTitle = $params->get('site_short_title');$this->siteUi = $params->get('site_ui');$this->mailer = $mailer;$this->router = $router;$this->security = $security;$this->iriConverter = $iriConverter;$this->taggedTypesService = $taggedTypesService;$this->supportsClass = Release::class;}public function getSubscribedEvents(): array{return [Events::prePersist,Events::postRemove];}public function prePersist(LifecycleEventArgs $args): void{$entity = $args->getEntity();if (in_array(get_class($entity), $this->taggedTypesService->getCurrentOrChildEntitiesForEntity($this->supportsClass))) {if ($this->security->getuser()) {$entity->setCreator($this->security->getUser());}}}public function postRemove(PostRemoveEventArgs $args): void{$entity = $args->getEntity();if (in_array(get_class($entity), $this->taggedTypesService->getCurrentOrChildEntitiesForEntity($this->supportsClass))) {$newMessage = new Message();$newMessage->setCreator($entity->getCreator());$newMessage->setRecipient($entity->getRecipient());$newMessage->setPreventNotification(true);$newText = new LongText();$recipientUsername = $entity->getRecipient()->getUsername();// this can happen when you remove a release from the primitive side, it's removed before its accessed here$primitiveLabel = $entity->getPrimitive() ? $entity->getPrimitive()->getLabel() : $args->getEntityManager()->getUnitOfWork()->getEntityChangeSet($entity)['primitive'][0]->getLabel();$messageText = "<p>Kia ora $recipientUsername,</p>". "<p>You have lost access to $primitiveLabel, this is ether because your access has expired - or the owner has removed it.</p>". "<p>If you believe this is in error, please contact the owner again to request access reinstatement.</p>";$newText->setContent($messageText);$newMessage->setValue($newText);$args->getEntityManager()->persist($newMessage);$args->getEntityManager()->flush();if ($entity->getRecipient() && $entity->getRecipient()->getContact() && $entity->getRecipient()->getEmail()) {$email = (new Email())->from($this->siteFromEmail)->to($entity->getRecipient()->getEmail())->subject('You have lost access to ' . $primitiveLabel)->html($messageText);$this->mailer->send($email);}}}}