src/Nolimit/Task/Controller/TaskController.php line 103

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Nolimit\Task\Controller;
  4. use App\Entity\Project;
  5. use App\Entity\ProjectStatus;
  6. use App\Entity\Task;
  7. use App\Entity\TaskStatus;
  8. use App\Entity\TaskType;
  9. use App\Entity\User;
  10. use App\Nolimit\Task\Manager\TaskManager;
  11. use App\Nolimit\Task\Persister\TaskLogPersister;
  12. use App\Nolimit\Task\Persister\TaskPersister;
  13. use App\Nolimit\Task\Provider\TaskDatatableProvider;
  14. use App\Repository\ProjectRepository;
  15. use App\Repository\TaskLogRepository;
  16. use App\Repository\TaskRepository;
  17. use App\Repository\TaskStatusRepository;
  18. use App\Repository\TaskTypeRepository;
  19. use App\Repository\UserRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Sonata\AdminBundle\Controller\CRUDController;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. class TaskController extends CRUDController{
  29.     private EntityManagerInterface $entity;
  30.     private TaskDatatableProvider $datatableProvider;
  31.     private TranslatorInterface $translator;
  32.     private TaskManager $taskManager;
  33.     private TaskLogRepository $taskLogRepository;
  34.     private TaskRepository $taskRepository;
  35.     private TaskLogPersister $taskLogPersister;
  36.     private TaskPersister $taskPersister;
  37.     private TaskDatatableProvider $taskDatatableProvider;
  38.     private ProjectRepository $projectRepository;
  39.     private TaskTypeRepository $taskTypeRepository;
  40.     private TaskStatusRepository $taskStatusRepository;
  41.     private UserRepository $userRepository;
  42.     /**
  43.      * @var TokenStorageInterface
  44.      */
  45.     private $tokenStorage;
  46.     public function __construct(EntityManagerInterface $entity,
  47.                                 TaskDatatableProvider $datatableProvider,
  48.                                 TranslatorInterface $translator,
  49.                                 TaskManager $taskManager,TaskLogRepository $taskLogRepository,TaskRepository $taskRepository,TaskLogPersister $taskLogPersister,TaskPersister $taskPersister,TaskDatatableProvider $taskDatatableProvider,ProjectRepository $projectRepository,TaskTypeRepository $taskTypeRepository,TaskStatusRepository $taskStatusRepository,UserRepository $userRepository,TokenStorageInterface $tokenStorage)
  50.     {
  51.         $this->entity $entity;
  52.         $this->datatableProvider $datatableProvider;
  53.         $this->translator $translator;
  54.         $this->taskManager $taskManager;
  55.         $this->taskLogRepository $taskLogRepository;
  56.         $this->taskRepository $taskRepository;
  57.         $this->taskLogPersister $taskLogPersister;
  58.         $this->taskPersister $taskPersister;
  59.         $this->taskDatatableProvider $taskDatatableProvider;
  60.         $this->projectRepository $projectRepository;
  61.         $this->taskTypeRepository $taskTypeRepository;
  62.         $this->taskStatusRepository $taskStatusRepository;
  63.         $this->userRepository $userRepository;
  64.         $this->tokenStorage $tokenStorage;
  65.     }
  66.     public function listAction(Request $request): Response
  67.     {
  68. //        $notActiveProjetStatu=[ProjectStatus::PROJECT_STATUS_BEFEJEZETT, ProjectStatus::PROJECT_STATUS_FELFUGESZTETT, ProjectStatus::PROJECT_STATUS_VISSZAUTASITOTT];
  69. //        $projects=$this->projectRepository->getProjectByStatusNotIn($notActiveProjetStatu);
  70.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  71.         $projects=$this->projectRepository->findAll();
  72.         $taskTypes=$this->taskTypeRepository->findAll();
  73.         $taskStatus=$this->taskStatusRepository->findAll();
  74.         $selectedStatus=array(TaskStatus::TASK_STATUS_LETREHOZOTT,TaskStatus::TASK_STATUS_FEJLESZTESALATT);
  75.         $user_id=$this->tokenStorage->getToken()->getUser()->getId();
  76.         $users=$this->userRepository->findAll();
  77.         return $this->renderWithExtraParams('/task/task_view.html.twig', array(
  78.             'projects'=>$projects,
  79.             'taskTypes'=>$taskTypes,
  80.             'taskStatus'=>$taskStatus,
  81.             'selectedStatus'=>$selectedStatus,
  82.             'user_id'=>$user_id,
  83.             'users'=>$users
  84.         ));
  85.     }
  86.     /**
  87.      * @Route("/admin/app/task/task_list", name="task_list", methods={"POST"} )
  88.      */
  89.     public function taskListAction()
  90.     {
  91.         $user=$this->tokenStorage->getToken()->getUser();
  92.         $user_id=$user->getId();
  93.         $selectedStatus=[TaskStatus::TASK_STATUS_LETREHOZOTT,TaskStatus::TASK_STATUS_FEJLESZTESALATT];
  94.         $adata['data'] =$this->datatableProvider->datatableRow($selectedStatus,$user_id);
  95.         return $this->json($adata);
  96.     }
  97.     /**
  98.      * @Route("/admin/app/apv/task_filtered", name="task_filtered", methods={"POST"} )
  99.      */
  100.     public function taskFilteredAction(Request $request): Response
  101.     {
  102.         $adata['adata'] = $this->taskDatatableProvider->getFilteredData($request);
  103.         return $this->json($adata);
  104.     }
  105.     /**
  106.      * @Route("/admin/app/task/task_new", name="task_new", methods={"POST"} )
  107.      */
  108.     public function taskNewAction(Request $request): Response
  109.     {
  110.         if (!$this->isGranted('IS_AUTHENTICATED_FULLY')) {
  111.             // AJAX-kérés esetén 401-es válasz küldése
  112.             if ($request->isXmlHttpRequest()) {
  113.                 return new JsonResponse(['error' => 'Unauthorized'], 401);
  114.             }
  115.             // Nem AJAX-kérés esetén hozzáférés megtagadása
  116.             throw new AccessDeniedException('Hozzáférés megtagadva');
  117.         }
  118.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  119.         $projectStatus = [ProjectStatus::PROJECT_STATUS_BEFEJEZETT,ProjectStatus::PROJECT_STATUS_VISSZAUTASITOTT];
  120.         $project $this->entity->getRepository(Project::class)->getProjectByStatusNotIn($projectStatus);
  121.         $user $this->entity->getRepository(User::class)->findAll();
  122.         $taskType $this->entity->getRepository(TaskType::class)->findAll();
  123.         $taskStatus $this->entity->getRepository(TaskStatus::class)->findAll();
  124.         $lastWorkedDay $this->taskManager->getLastWorkedDay();
  125.         return $this->renderWithExtraParams('/task/task_new_edit.html.twig', array(
  126.             'project'=>$project,
  127.             'user'=>$user,
  128.             'taskType'=>$taskType,
  129.             'title'=>$this->translator->trans('New task'),
  130.             'edited'=>false,
  131.             'lastWorkedDay'=>$lastWorkedDay,
  132.             'taskStatus'=>$taskStatus
  133.         ));
  134.     }
  135.     /**
  136.      * @Route("/admin/app/task/task_edit", name="task_edit", methods={"POST"} )
  137.      */
  138.     public function taskEditAction(Request $request): Response
  139.     {
  140.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  141.         $id $request->get('id');
  142.         $task $this->entity->getRepository(Task::class)->find($id);
  143.         $projectStatus = [ProjectStatus::PROJECT_STATUS_BEFEJEZETT,ProjectStatus::PROJECT_STATUS_VISSZAUTASITOTT];
  144.         $project $this->entity->getRepository(Project::class)->getProjectByStatusNotIn($projectStatus);
  145.         $taskStatus $this->entity->getRepository(TaskStatus::class)->findAll();
  146.         $user $this->entity->getRepository(User::class)->findAll();
  147.         $taskType $this->entity->getRepository(TaskType::class)->findAll();
  148.         return $this->renderWithExtraParams('/task/task_new_edit.html.twig', array(
  149.             'project'=>$project,
  150.             'user'=>$user,
  151.             'task'=>$task,
  152.             'title'=>$this->translator->trans('Edit task'),
  153.             'taskStatus'=>$taskStatus,
  154.             'taskType'=>$taskType,
  155.             'edited'=>true
  156.         ));
  157.     }
  158.     /**
  159.      * @Route("/admin/app/task/task_save", name="task_save", methods={"POST"} )
  160.      */
  161.     public function taskSaveAction(Request $request): Response
  162.     {
  163.         $task $this->taskPersister->insertUpdateTask($request);
  164.         $data[] = $this->taskDatatableProvider->getRow($task);
  165.         return new JsonResponse(array('msg' => true,'datatableRow' =>$data[0]),  200);
  166.     }
  167.     /**
  168.      * @Route("/admin/app/task/task_new_log", name="task_new_log", methods={"POST"} )
  169.      */
  170.     public function taskNewLogAction(Request $request): Response
  171.     {
  172.         $id $request->get('id');
  173.         $task $this->entity->getRepository(Task::class)->find($id);
  174.         $lastWorkedDay $this->taskManager->getLastWorkedDay();
  175.         return $this->renderWithExtraParams('/task/task_new_edit_log.html.twig', array(
  176.             'task'=>$task,
  177.             'title'=>$this->translator->trans('New log'),
  178.             'edited'=>false,
  179.             'lastWorkedDay'=>$lastWorkedDay
  180.         ));
  181.     }
  182.     /**
  183.      * @Route("/admin/app/task/task_edit_log", name="task_edit_log", methods={"POST"} )
  184.      */
  185.     public function taskEditLogAction(Request $request): Response
  186.     {
  187.         $id $request->get('id');
  188.         $taskLog $this->taskLogRepository->find($id);
  189.         return $this->renderWithExtraParams('/task/task_new_edit_log.html.twig', array(
  190.             'task'=>$taskLog->getTask(),
  191.             'title'=>$this->translator->trans('Edit log'),
  192.             'taskLog'=>$taskLog,
  193.             'workedHourMin'=>$this->taskManager->convertMinInHourMin($taskLog->getWorkedMinutes()),
  194.             'edited'=>true
  195.         ));
  196.     }
  197.     /**
  198.      * @Route("/admin/app/task/task_save_log", name="task_save_log", methods={"POST"} )
  199.      */
  200.     public function taskSaveLogAction(Request $request): Response
  201.     {
  202.         $this->taskLogPersister->insertUpdateTaskLog($request);
  203.         $task $this->taskRepository->find($request->get('taskId'));
  204.         $data[] = $this->datatableProvider->getRow($task);
  205.         return new JsonResponse(array('msg' => true,'datatableRow' =>$data[0]),  200);
  206.     }
  207.     /**
  208.      * @Route("/admin/app/task/task_delete_log", name="task_delete_log", methods={"POST"} )
  209.      */
  210.     public function taskDeleteLogAction(Request $request): Response
  211.     {
  212.         $logId = (int)$request->get('logId');
  213.         $taskId = (int)$request->get('taskId');
  214.         $taskLog $this->taskLogRepository->find($logId);
  215.         $this->entity->remove($taskLog);
  216.         $this->entity->flush();
  217.         $task $this->taskRepository->find($taskId);
  218.         $data[] = $this->taskDatatableProvider->getRow($task);
  219.         return new JsonResponse(array('msg' => true,'datatableRow' =>$data[0]),  200);
  220.     }
  221.     /**
  222.      * @Route("/admin/app/task/task_delete", name="task_delete", methods={"POST"} )
  223.      */
  224.     public function taskDeleteAction(Request $request): Response
  225.     {
  226.         $id = (int)$request->get('id');
  227.         $task $this->taskRepository->find($id);
  228.         $this->entity->remove($task);
  229.         $this->entity->flush();
  230.         return new JsonResponse(array('msg' => true),  200);
  231.     }
  232. }