src/EventSubscriber/Messaging/MessageResourceSubscriber.php line 34

  1. <?php
  2. namespace App\EventSubscriber\Messaging;
  3. use Symfony\Component\HttpFoundation\RequestStack;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\EventDispatcher\GenericEvent;
  6. use Webmozart\Assert\Assert;
  7. use Sylius\Component\Customer\Model\CustomerInterface;
  8. use App\Repository\Customer\CustomerRepository;
  9. use App\Entity\Channel\ChannelEcodaAccountInfo;
  10. use App\Entity\Messaging\AdminMessage;
  11. use App\Repository\Channel\ChannelEcodaAccountInfoRepository;
  12. use App\Repository\Channel\ChannelEcodaAccountTypeRepository;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  15. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  16. use App\Entity\Messaging\Message
  17. class MessageResourceSubscriber  implements EventSubscriberInterface
  18.     private $request;
  19.     private $storage;
  20.     private $em;
  21.     public function __construct(RequestStack $requestEntityManagerInterface $emTokenStorageInterface $storage)
  22.     {
  23.         $this->request $request->getCurrentRequest(); 
  24.         $this->storage $storage;
  25.         $this->em $em;
  26.     }
  27.     public function onPreCreate(GenericEvent $event)
  28.     {  
  29.         $entity $event->getSubject();  
  30.         Assert::isInstanceOf($entityMessage::class);
  31.     
  32.         $thread $this->em->getRepository('App:Messaging\Thread')->find($this->request->query->get('thread')); 
  33.         $replyTo $this->em->getRepository('App:Messaging\Message')->find($this->request->query->get('reply_to')); 
  34.         
  35.         $entity->setThread($thread);
  36.         $entity->setReplyTo($replyTo);
  37.         $entity->setType('admin');
  38.         $message = new AdminMessage();
  39.         $message->setAdmin($this->storage->getToken()->getUser());  
  40.         $message->setCustomer($thread->getOwner()->getCustomer());
  41.         
  42.         $entity->setAdminMessage($message);
  43.     }   
  44.     public function onPreUpdate(GenericEvent $event)
  45.     {  
  46.         $entity $event->getSubject();  
  47.         Assert::isInstanceOf($entityMessage::class);
  48.      
  49.         
  50.         $entity->getThread()->setUpdatedAt(new \Datetime('now')); 
  51.     }   
  52.     public static function getSubscribedEvents()
  53.     {
  54.         return [
  55.            'app.message.pre_create' => 'onPreCreate',  
  56.            'app.message.pre_update' => 'onPreUpdate',   
  57.         ];
  58.     }
  59. }