src/EventListener/PostValidate/LeadNotePostValidateTransformation.php line 62

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\LeadNote\LeadNote;
  4. use App\Entity\Lead;
  5. use App\Entity\LeadNote as Entity;
  6. use App\Entity\User;
  7. use App\Repository\LeadRepository;
  8. use App\Service\AfterReadStorage;
  9. use App\Service\UserProvider;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpKernel\Event\ViewEvent;
  14. class LeadNotePostValidateTransformation implements EventSubscriberInterface
  15. {
  16.     private $leadRepository;
  17.     private $request;
  18.     private $afterReadStorage;
  19.     private $userProvider;
  20.     public function __construct(
  21.         LeadRepository $leadRepository,
  22.         RequestStack $requestStack,
  23.         AfterReadStorage $afterReadStorage,
  24.         UserProvider $userProvider
  25.     ) {
  26.         $this->leadRepository $leadRepository;
  27.         $this->request $requestStack->getCurrentRequest();
  28.         $this->afterReadStorage $afterReadStorage;
  29.         $this->userProvider $userProvider;
  30.     }
  31.     /**
  32.      * @return array
  33.      */
  34.     public static function getSubscribedEvents()
  35.     {
  36.         return [
  37.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  38.         ];
  39.     }
  40.     /**
  41.      * @param LeadNote $payload
  42.      *
  43.      * @return bool
  44.      */
  45.     public function supportTransformation($payload)
  46.     {
  47.         return $payload instanceof LeadNote;
  48.     }
  49.     /**
  50.      * @param ViewEvent $event
  51.      */
  52.     public function transform(ViewEvent $event)
  53.     {
  54.         /** @var LeadNote $payload */
  55.         $payload $event->getControllerResult();
  56.         if (!$this->supportTransformation($payload)) {
  57.             return;
  58.         }
  59.         /** @var Lead $lead */
  60.         $lead $this->leadRepository->find($this->request->get('lead_id'));
  61.         /** @var User $user */
  62.         $user $this->userProvider->getUser();
  63.         if ($event->getRequest()->isMethod(Request::METHOD_PUT)) {
  64.             /** @var Entity $note */
  65.             $note $this->afterReadStorage->getObject();
  66.             $note->update($payload->description$user);
  67.             $event->setControllerResult($note);
  68.         } elseif ($event->getRequest()->isMethod(Request::METHOD_POST)) {
  69.             /** @var Entity $note */
  70.             $note Entity::create($lead$payload->description$user);
  71.             $event->setControllerResult($note);
  72.         }
  73.     }
  74. }