src/Subscriber/Messenger/RouteSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Messenger;
  3. use App\Dictionary\ConversationMessageType;
  4. use App\Event\Messenger\NewMessageEvent;
  5. use App\Event\User\MemberBlockedEvent;
  6. use App\Service\Messenger\RouteService;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. class RouteSubscriber implements EventSubscriberInterface
  9. {
  10.     protected RouteService $routeService;
  11.     /**
  12.      * RouteSubscriber constructor.
  13.      */
  14.     public function __construct(RouteService $routeService)
  15.     {
  16.         $this->routeService $routeService;
  17.     }
  18.     protected function getRouteService(): RouteService
  19.     {
  20.         return $this->routeService;
  21.     }
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [
  25.             NewMessageEvent::class => [
  26.                 ['onNewMessageUpdateRoute'100],
  27.                 ['onNewMessageUnhideRoutes'101],
  28.                 ['onNewMessageUpdateCoinValue'102],
  29.             ],
  30.             MemberBlockedEvent::class => [
  31.                 ['onMemberBlockedHideRoute'100],
  32.             ],
  33.         ];
  34.     }
  35.     /**
  36.      * @throws \Exception
  37.      */
  38.     public function onMemberBlockedHideRoute(MemberBlockedEvent $event)
  39.     {
  40.         $entity $event->getMemberBlocked();
  41.         $service $this->getRouteService();
  42.         $route $service->getRouteBySenderAndRecipient($entity->getTarget(), $entity->getOwner(), false);
  43.         if ($route) {
  44.             $service->hideRoute($route);
  45.         }
  46.     }
  47.     /**
  48.      * @throws \Doctrine\ORM\ORMException
  49.      * @throws \Doctrine\ORM\OptimisticLockException
  50.      */
  51.     public function onNewMessageUpdateRoute(NewMessageEvent $event)
  52.     {
  53.         $message $event->getEntity();
  54.         $conversation $message->getConversation();
  55.         $routes $conversation->getRoutes();
  56.         $routesToUpdate $routes;
  57.         if (ConversationMessageType::CONTENT_PURCHASE == $message->getType()) {
  58.             $routesToUpdate = [];
  59.             foreach ($routes as $route) {
  60.                 if ($route->getFromMember()->getId() == $event->getSender()->getId()) {
  61.                     $routesToUpdate[] = $route;
  62.                 }
  63.             }
  64.         }
  65.         foreach ($routesToUpdate as $route) {
  66.             $this->getRouteService()->updateLastMessage($route$messagefalse);
  67.         }
  68.         $this->getRouteService()->delayedFlush();
  69.     }
  70.     public function onNewMessageUnhideRoutes(NewMessageEvent $event)
  71.     {
  72.         $sender $event->getSender();
  73.         $conversation $event->getEntity()->getConversation();
  74.         $manager $this->getRouteService();
  75.         $recipientRoute $manager->getRouteByRecipient($conversation$sender);
  76.         if ($recipientRoute) {
  77.             if ($recipientRoute->getHidden()) {
  78.                 // additionally to unhide the route, we have to reset the hidden_at date, which will lead
  79.                 // to -all- messages in that conversation being visible again.
  80.                 // came up with the trash filter.
  81.                 $recipientRoute->setHiddenAt(null);
  82.             }
  83.             $manager->unhideRoute($recipientRoute);
  84.         }
  85.         $senderRoute $manager->getRouteBySender($conversation$sender);
  86.         if ($senderRoute) {
  87.             $manager->unhideRoute($senderRoute);
  88.         }
  89.     }
  90.     /**
  91.      * @throws \Doctrine\ORM\ORMException
  92.      * @throws \Doctrine\ORM\OptimisticLockException
  93.      */
  94.     public function onNewMessageUpdateCoinValue(NewMessageEvent $event)
  95.     {
  96.         $msg $event->getEntity();
  97.         if (!$msg->getCoins()) {
  98.             return;
  99.         }
  100.         $conversation $msg->getConversation();
  101.         $sender $event->getSender();
  102.         $routeService $this->getRouteService();
  103.         $route $routeService->getRouteBySender($conversation$sender);
  104.         if ($route) {
  105.             $route->increaseCoinValue($msg->getCoins());
  106.             $routeService->storeEntity($route);
  107.         }
  108.     }
  109. }