deblan.io-murph/src/EventSubscriber/Blog/CommentEventSubscriber.php

103 lines
4.1 KiB
PHP
Raw Normal View History

<?php
2022-03-10 21:52:14 +01:00
namespace App\EventSubscriber\Blog;
use App\Core\Entity\EntityInterface;
use App\Core\Event\EntityManager\EntityManagerEvent;
2022-03-10 21:52:14 +01:00
use App\Core\EventSubscriber\EntityManagerEventSubscriber;
use App\Core\Notification\MailNotifier;
2021-05-02 22:12:39 +02:00
use App\Core\Setting\SettingManager;
2022-02-06 19:36:10 +01:00
use App\Core\Site\SiteRequest;
2022-02-06 20:00:26 +01:00
use App\Entity\Blog\Comment;
use App\Repository\Blog\PostFollowRepositoryQuery;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* class CommentEventSubscriber.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class CommentEventSubscriber extends EntityManagerEventSubscriber
{
protected MailNotifier $notifier;
protected UrlGeneratorInterface $urlGenerator;
2021-05-02 22:12:39 +02:00
protected SettingManager $settingManager;
2022-02-06 19:36:10 +01:00
protected PostFollowRepository $postFollowRepository;
protected SiteRequest $siteRequest;
2022-02-06 19:36:10 +01:00
public function __construct(
MailNotifier $notifier,
UrlGeneratorInterface $urlGenerator,
SettingManager $settingManager,
PostFollowRepositoryQuery $postFollowRepositoryQuery,
SiteRequest $siteRequest
2022-02-06 20:00:26 +01:00
) {
$this->notifier = $notifier;
$this->urlGenerator = $urlGenerator;
2021-05-02 22:12:39 +02:00
$this->settingManager = $settingManager;
2022-02-06 19:36:10 +01:00
$this->postFollowRepositoryQuery = $postFollowRepositoryQuery;
$this->siteRequest = $siteRequest;
}
2022-04-25 16:36:25 +02:00
public function supports(EntityInterface $entity)
{
return $entity instanceof Comment;
}
public function onCreate(EntityManagerEvent $event)
{
2022-04-25 16:36:25 +02:00
if (!$this->supports($event->getEntity())) {
return;
}
$this->notifier
->init()
2021-05-02 22:12:39 +02:00
->setFrom($this->settingManager->get('email_sender')->getValue())
->addRecipient($this->settingManager->get('email_comment')->getValue())
->setSubject('[Deblan] Nouveau commentaire')
->notify('mail/comment.html.twig', [
'post' => $event->getEntity()->getPost(),
'links' => [
'post' => $this->urlGenerator->generate('blog_menu_post', [
'post' => $event->getEntity()->getPost()->getId(),
'slug' => $event->getEntity()->getPost()->getSlug(),
2022-02-06 19:36:10 +01:00
'_domain' => $this->siteRequest->getDomain(),
], UrlGeneratorInterface::ABSOLUTE_URL).'#review-'.$event->getEntity()->getId(),
],
], 'text/plain')
;
2022-02-06 19:36:10 +01:00
$postFollows = $this->postFollowRepositoryQuery->create()
->where('.post = :post')
->andWhere('.isEnabled = 1')
->setParameter(':post', $event->getEntity()->getPost()->getId())
2022-02-06 20:00:26 +01:00
->find()
;
2022-02-06 19:36:10 +01:00
foreach ($postFollows as $postFollow) {
if ($event->getEntity()->getEmail() !== $postFollow->getComment()->getEmail()) {
$this->notifier
->init()
->setFrom($this->settingManager->get('email_sender')->getValue())
->addRecipient($this->settingManager->get('email_comment')->getValue())
->setSubject('[Deblan] Nouveau commentaire')
->notify('mail/post_follow_comment.html.twig', [
'post' => $event->getEntity()->getPost(),
'links' => [
'post' => $this->urlGenerator->generate('blog_menu_post', [
'post' => $event->getEntity()->getPost()->getId(),
'slug' => $event->getEntity()->getPost()->getSlug(),
'_domain' => $this->siteRequest->getDomain(),
], UrlGeneratorInterface::ABSOLUTE_URL).'#review-'.$event->getEntity()->getId(),
'disable' => $this->urlGenerator->generate('blog_tech_follow_disable', [
'hash' => $postFollow->getHash(),
'_domain' => $this->siteRequest->getDomain(),
], UrlGeneratorInterface::ABSOLUTE_URL),
],
], 'text/plain')
;
}
}
}
}