src/EventListener/ForumPostListener.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Forum\GroupMember;
  4. use App\Entity\Notification;
  5. use App\Event\ForumPostEvent;
  6. use App\Service\NotificationCreator;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. class ForumPostListener
  12. {
  13.     public function __construct(
  14.         private EntityManagerInterface $em,
  15.         private NotificationCreator $notificationCreator,
  16.         private TokenStorageInterface $tokenStorage
  17.     ){}
  18.     public function onPostCreated(ForumPostEvent $event)
  19.     {
  20.         $post $event->getPost();
  21.         $group $post->getGroup();
  22.         $postedBy $post->getUser();
  23.         // todo : use messenger instead
  24.         if(!is_null($group)){
  25.             $groupMembers $this->em->getRepository(GroupMember::class)->findBy(['group' => $group]);
  26.             foreach ($groupMembers as $groupMember) {
  27.                 if ( $groupMember->getMember() == $this->tokenStorage->getToken()->getUser()){
  28.                     continue;
  29.                 }
  30.                 $arguments = [
  31.                     'actor' => $postedBy->getId(),
  32.                     'actor_name' => $postedBy->getName(),
  33.                     'receiver' => $groupMember->getMember()->getId(),
  34.                     'receiver_name' => $groupMember->getMember()->getName(),
  35.                     'post' => $post->getId(),
  36.                     'post_title' => $post->getTitle(),
  37.                     'group' => $group->getId(),
  38.                     'group_name' => $group->getName(),
  39.                 ];
  40.                 $this->notificationCreator->createNotification(Notification::NOTIFICATION_TYPE_NEW_POST_GROUP$arguments);
  41.             }
  42.         }
  43.     }
  44. }