src/EventListener/PostValidate/ContactNotePostValidateTransformer.php line 61

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