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. { 
  19.     private $request;
  20.     private $storage;
  21.     private $em;
  22.     public function __construct(RequestStack $request, EntityManagerInterface $em, TokenStorageInterface $storage)
  23.     {
  24.         $this->request = $request->getCurrentRequest(); 
  25.         $this->storage = $storage;
  26.         $this->em = $em;
  27.     }
  28.     public function onPreCreate(GenericEvent $event)
  29.     {  
  30.         $entity = $event->getSubject();  
  31.         Assert::isInstanceOf($entity, Message::class);
  32.     
  33.         $thread = $this->em->getRepository('App:Messaging\Thread')->find($this->request->query->get('thread')); 
  34.         $replyTo = $this->em->getRepository('App:Messaging\Message')->find($this->request->query->get('reply_to')); 
  35.         
  36.         $entity->setThread($thread);
  37.         $entity->setReplyTo($replyTo);
  38.         $entity->setType('admin');
  39.         $message = new AdminMessage();
  40.         $message->setAdmin($this->storage->getToken()->getUser());  
  41.         $message->setCustomer($thread->getOwner()->getCustomer());
  42.         
  43.         $entity->setAdminMessage($message);
  44.     }   
  45.     public function onPreUpdate(GenericEvent $event)
  46.     {  
  47.         $entity = $event->getSubject();  
  48.         Assert::isInstanceOf($entity, Message::class);
  49.      
  50.         
  51.         $entity->getThread()->setUpdatedAt(new \Datetime('now')); 
  52.     }   
  53.     public static function getSubscribedEvents()
  54.     {
  55.         return [
  56.            'app.message.pre_create' => 'onPreCreate',  
  57.            'app.message.pre_update' => 'onPreUpdate',   
  58.         ];
  59.     }
  60. }