src/Subscriber/UserGroups/UserGroupInviteSubscriber.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\UserGroups;
  3. use App\Event\UserGroups\GroupScoreUpdateEvent;
  4. use App\Event\UserGroups\UserGroupInviteEvent;
  5. use App\Service\Messenger\MessengerService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  8. class UserGroupInviteSubscriber implements EventSubscriberInterface
  9. {
  10.     /**
  11.      * @var EventDispatcherInterface
  12.      */
  13.     protected $dispatcher;
  14.     /**
  15.      * @var MessengerService
  16.      */
  17.     protected $messenger;
  18.     /**
  19.      * UserGroupInviteSubscriber constructor.
  20.      */
  21.     public function __construct(EventDispatcherInterface $dispatcherMessengerService $messenger)
  22.     {
  23.         $this->dispatcher $dispatcher;
  24.         $this->messenger $messenger;
  25.     }
  26.     protected function getDispatcher(): EventDispatcherInterface
  27.     {
  28.         return $this->dispatcher;
  29.     }
  30.     protected function getMessenger(): MessengerService
  31.     {
  32.         return $this->messenger;
  33.     }
  34.     public static function getSubscribedEvents(): array
  35.     {
  36.         return [
  37.             UserGroupInviteEvent::class => [
  38.                 ['onGroupInviteSendDirectMessage'0],
  39.             ],
  40.         ];
  41.     }
  42.     /**
  43.      * @throws \Doctrine\ORM\ORMException
  44.      * @throws \Doctrine\ORM\OptimisticLockException
  45.      */
  46.     public function onGroupInviteSendDirectMessage(UserGroupInviteEvent $event): bool
  47.     {
  48.         $invite $event->getEntity();
  49.         $group $invite->getUserGroup();
  50.         $target $invite->getMember();
  51.         $creator $invite->getCreatedMember();
  52.         $message sprintf($this->getMessageFormat(), $target->getUsername(), $group->getName());
  53.         $this->getMessenger()->sendDirectMessage($creator$target$message);
  54.         $event = new GroupScoreUpdateEvent($group$event->getScore());
  55.         $this->getDispatcher()->dispatch($event);
  56.         return true;
  57.     }
  58.     protected function getMessageFormat(): string
  59.     {
  60.         return 'Hallo %s! Ich lade dich ein, der Gruppe %s beizutreten. Um die Einladung anzunehmen, '.
  61.             'klicke bitte oben auf "Gruppen" und beachte den Hinweis.';
  62.     }
  63. }