src/EventSubscriber/Task/TaskPostSerializerSubscriber.php line 52

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: SUSAN MEDINA
  5.  * Date: 21/03/2019
  6.  * Time: 08:12 PM
  7.  */
  8. namespace App\EventSubscriber\Task;
  9. use App\Entity\App\User;
  10. use App\Repository\App\Task\TaskRepository;
  11. use App\Repository\App\UserRepository;
  12. use App\Services\StatesService;
  13. use App\Services\UtilsService;
  14. use App\Services\WorkerBudgetService;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpKernel\Event\ViewEvent;
  17. use ApiPlatform\Core\EventListener\EventPriorities;
  18. use Symfony\Component\HttpKernel\KernelEvents;
  19. use App\Services\TaskService;
  20. class TaskPostSerializerSubscriber implements EventSubscriberInterface
  21. {
  22.     private $taskService;
  23.     private $utilsService;
  24.     private $statesService;
  25.     private $workerBudgetService;
  26.     private $userRepository;
  27.     private $taskRepository;
  28.     public function __construct(TaskService $taskService,
  29.         UtilsService $utilsService,
  30.         WorkerBudgetService $workerBudgetService,
  31.         StatesService $statesService,
  32.         UserRepository $userRepository,
  33.         TaskRepository $taskRepository
  34.     ) {
  35.         $this->taskService $taskService;
  36.         $this->utilsService $utilsService;
  37.         $this->statesService $statesService;
  38.         $this->workerBudgetService $workerBudgetService;
  39.         $this->userRepository $userRepository;
  40.         $this->taskRepository $taskRepository;
  41.     }
  42.     /**
  43.      * @param ViewEvent $event
  44.      * @throws \App\Exception\AccessDeniedException
  45.      * @throws \Doctrine\ORM\NonUniqueResultException
  46.      */
  47.     public function onKernelView(ViewEvent $event)
  48.     {
  49.         if ($this->utilsService->isAPublicRequest($event)) {
  50.             return;
  51.         }
  52.         $request $event->getRequest();
  53.         $taskResult $event->getControllerResult();
  54.         $routes = array(
  55.             'api_tasks_get_collection',
  56.             'api_tasks_post_collection',
  57.             'api_tasks_get_item',
  58.             'api_tasks_put_item',
  59.             'api_tickets_tasks_get_subresource',
  60.             'api_maintenance_elements_tasks_get_subresource',
  61.             'api_maintenance_elements_childrens_tasks_get_subresource',
  62.             'api_resources_tasks_get_subresource'
  63.         );
  64.         $routesCollection = array(
  65.             'api_tasks_get_collection',
  66.             'api_tickets_tasks_get_subresource',
  67.             'api_maintenance_elements_tasks_get_subresource',
  68.             'api_maintenance_elements_childrens_tasks_get_subresource',
  69.             'api_resources_tasks_get_subresource'
  70.         );
  71.         $route $request->attributes->get('_route');
  72.         if (!in_array($route$routes))
  73.             return;
  74.         $taskResult json_decode($taskResulttrue);
  75.         $orderByRole $request->query->get('orderByRole') ?? false;
  76.         if (in_array($route$routesCollection)) {
  77.             $listTask = [];
  78.             foreach ($taskResult as $key => &$task) {
  79.                 $listTask[] = $this->taskService->formatNormalize($task$route);
  80.             }
  81.             if ($orderByRole) {
  82.                 $listTask $this->orderByRole($listTask$orderByRole);
  83.             }
  84.             $taskResult json_encode($listTask);
  85.         } else {
  86.             $taskResult $this->taskService->formatNormalize($taskResult$route);
  87.             $taskResult json_encode($taskResult);
  88.         }
  89.         $event->setControllerResult($taskResult);
  90.     }
  91.     /**
  92.      * @param $array
  93.      * @param $role
  94.      * @return array
  95.      * @throws \Doctrine\ORM\NonUniqueResultException
  96.      */
  97.     protected function orderByRole($array$role)
  98.     {
  99.         $result = [];
  100.         $listWorker = [];
  101.         $listTask = [];
  102.         foreach ($array as $key => $task) {
  103.             if (isset($task['id'])) {
  104.                 $getTask $this->taskRepository->find($task['id']);
  105.                 if (isset($task[$role])) {
  106.                     $users $task[$role];
  107.                     $newTask $task;
  108.                     foreach ($users as $user) {
  109.                         if (isset($newTask['workerBudgets'])) {
  110.                             unset($newTask['workerBudgets']);
  111.                         }
  112.                         if (isset($newTask['operators'])) {
  113.                             unset($newTask['operators']);
  114.                         }
  115.                         if (isset($newTask['taskmasters'])) {
  116.                             unset($newTask['taskmasters']);
  117.                         }
  118.                         $listWorker[$user['id']] = $user;
  119.                         if ($role === 'operators') {
  120.                             $getUser $this->userRepository->find($user['id']);
  121.                             if ($getUser instanceof User) {
  122.                                 $newTask['workerBudgetState'] = $this->workerBudgetService->workerBudgetCurrentState(
  123.                                     $getUser,
  124.                                     $getTask,
  125.                                     true
  126.                                 );
  127.                                 if (isset($newTask['workerBudgetState']['name']) && !is_null(
  128.                                         $newTask['workerBudgetState']['name']
  129.                                     )) {
  130.                                     $newTask['nextStates'] = $this->statesService->getNextTaskState(
  131.                                         $newTask['workerBudgetState']['name'],
  132.                                         true
  133.                                     );
  134.                                 }
  135.                             }
  136.                         }
  137.                         $listTask[$user['id']][] = $newTask;
  138.                     }
  139.                 }
  140.             }
  141.         }
  142.         foreach ($listWorker as $key => &$worker) {
  143.             $worker['tasks'] = $listTask[$key];
  144.             $result[] = $worker;
  145.         }
  146.         return $result;
  147.     }
  148.     public static function getSubscribedEvents()
  149.     {
  150.         return [
  151.             KernelEvents::VIEW => ['onKernelView'EventPriorities::POST_SERIALIZE]
  152.         ];
  153.     }
  154. }