src/V4/Controller/Task/PostTaskSearchFormAction.php line 22

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\V4\Controller\Task;
  4. use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
  5. use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
  6. use App\DataProvider\AbstractCollectionDataProvider;
  7. use App\DataProvider\RequestDataProviderTrait;
  8. use App\Service\Form\FormUtils;
  9. use App\V4\Model\Task\Task;
  10. use App\V4\Service\Task\TaskFormHandler;
  11. use App\V4\Voters\TaskVoter;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Serializer\Serializer;
  17. use Symfony\Component\Serializer\SerializerInterface;
  18. class PostTaskSearchFormAction extends AbstractController
  19. {
  20.     use FormUtils;
  21.     use RequestDataProviderTrait;
  22.     /**
  23.      * @var TaskFormHandler
  24.      */
  25.     private $taskFormHandler;
  26.     /**
  27.      * @var CollectionDataProviderInterface
  28.      */
  29.     private $collectionDataProvider;
  30.     /**
  31.      * @var Serializer
  32.      */
  33.     private $serializer;
  34.     /**
  35.      * @param TaskFormHandler                 $taskFormHandler
  36.      * @param CollectionDataProviderInterface $collectionDataProvider
  37.      * @param Serializer                      $serializer
  38.      */
  39.     public function __construct(
  40.         TaskFormHandler $taskFormHandler,
  41.         CollectionDataProviderInterface $collectionDataProvider,
  42.         SerializerInterface $serializer
  43.     ) {
  44.         $this->taskFormHandler $taskFormHandler;
  45.         $this->collectionDataProvider $collectionDataProvider;
  46.         $this->serializer $serializer;
  47.     }
  48.     /**
  49.      * @param Request $request
  50.      *
  51.      * @return JsonResponse|iterable
  52.      *
  53.      * @throws ResourceClassNotSupportedException
  54.      */
  55.     public function __invoke(Request $request)
  56.     {
  57.         $this->denyAccessUnlessGranted(TaskVoter::TASK_SHOW_LIST);
  58.         $taskSearchForm $this->taskFormHandler->handleTaskSearchForm($request->getContent());
  59.         if (!$taskSearchForm->isSubmitted() || !$taskSearchForm->isValid()) {
  60.             return new JsonResponse([
  61.                 'code' => Response::HTTP_BAD_REQUEST,
  62.                 'data' => $this->convertFormErrorsToArray($taskSearchForm),
  63.                 'errorMessage' => 'task_form_search',
  64.             ], Response::HTTP_BAD_REQUEST);
  65.         }
  66.         $searchBody $this->completeSearchBodyFromRequest(
  67.             $request,
  68.             json_decode($this->serializer->serialize($taskSearchForm->getData(), 'json'), true)
  69.         );
  70.         $searchBody $this->replaceFormKeyToSearchKey($taskSearchForm$searchBody);
  71.         $transformResponse = !$request->query->get('disableTransformation'false);
  72.         $response $this
  73.             ->collectionDataProvider
  74.             ->getCollection(Task::class, null, [
  75.                 'filters' => $searchBody,
  76.                 AbstractCollectionDataProvider::CONTEXT_TAB => $request->query->get('tab'),
  77.                 'transformResponse' => $transformResponse,
  78.             ])
  79.         ;
  80.         if ($transformResponse) {
  81.             return new JsonResponse($response);
  82.         }
  83.         return $response;
  84.     }
  85. }