src/Controller/TaskController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Tasks;
  4. use App\Entity\Tag;
  5. use App\Entity\User;
  6. use App\Form\TaskSheetFilterType;
  7. use App\Form\TaskType;
  8. use App\Repository\TasksRepository;
  9. use Doctrine\ORM\Tools\Pagination\Paginator;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. /**
  17.  * @IsGranted("ROLE_USER")
  18.  */
  19. class TaskController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/", name="home")
  23.      * @Route("/task-sheet", name="task_sheet")
  24.      * @Route("/task-sheet/{user}", name="task_sheet_user")
  25.      */
  26.     public function index(Request $requestUser $user null): Response
  27.     {
  28.         $em $this->getDoctrine()->getManager();
  29.         
  30.         $statuses TasksRepository::getStatuses();
  31.         $priorities TasksRepository::getPriorities();
  32.         $qb $em->getRepository(Tasks::class)->createQueryBuilder('t');
  33.         //Data Table cols
  34.         $columns = [
  35.             => 'id',
  36.             => 'project',
  37.             => 'name',
  38.             => 'assignee',
  39.             => 'status',
  40.             => 'priority',
  41.             => 'due',
  42.             => 'createdAt',
  43.             => ''
  44.         ];
  45.         //Data table params
  46.         $dtAjax false;
  47.         $page 1;
  48.         $pageLength 10;
  49.         $searchString false;
  50.         $filterStatuses = array();
  51.         $orderCol 'id';
  52.         $orderDir 'desc';
  53.         if ($request->get('draw')) {
  54.             $dtAjax true;
  55.             $page $request->get('start');
  56.             $pageLength $request->get('length');
  57.             $searchString $request->get('search');
  58.             $filterStatuses $request->get('statuses');
  59.             $orderCol $request->get('order')[0]['column'];
  60.             $orderCol $columns[$orderCol];
  61.             $orderDir $request->get('order')[0]['dir'];
  62.             
  63.             if ($request->get('userId')) {
  64.                 $user $em->getRepository(User::class)
  65.                         ->find($request->get('userId'));
  66.             }
  67.         }
  68.         if ($user) {
  69.             $qb->where('t.assignee = :assignee')
  70.                 ->setParameter('assignee'$user->getName());
  71.         }
  72.         // Build query 
  73.         if (!empty($filterStatuses)) {
  74.             $qb->andWhere('t.status IN(:statuses)')
  75.                 ->setParameter('statuses'$filterStatuses);
  76.         }
  77.         $qb->orderBy('t.'.$orderCol$orderDir);
  78.     
  79.         $qb->setMaxResults($pageLength);
  80.         $qb->setFirstResult($page);
  81.         // $query = $qb->getQuery();
  82.         // dump($query->getSQL());
  83.         // exit;
  84.         // Init paginator
  85.         $paginator = new Paginator($qb);
  86.         $totalResults count($paginator);
  87.         // Build Results
  88.         if ($dtAjax) {
  89.             $response = new Response();
  90.             $data = [];
  91.             foreach($paginator as $key => $pd) {
  92.                 $data[$key][] = $pd->getId();
  93.                 $data[$key][] = $pd->getProject();
  94.                 $data[$key][] = $pd->getName();
  95.                 $data[$key][] = $pd->getAssignee();
  96.                 $data[$key][] = $pd->getStatus();
  97.                 $data[$key][] = $priorities[$pd->getPriority()];
  98.                 $data[$key][] = $pd->getDue() ? $pd->getDue()->format('Y-m-d') : '';
  99.                 $data[$key][] = $pd->getCreatedAt()->format('Y-m-d');
  100.                 $buttonHtml '<div class="btn-group float-right">
  101.                                     <a href="/task/edit/'.$pd->getId().'" class="btn btn-primary">Edit</a>
  102.                                     <a href="/task/archive/'.$pd->getId().'" class="btn btn-secondary">Archive</a>
  103.                                 </div>';
  104.                 $data[$key][] = $buttonHtml;
  105.             }
  106.             $response->setContent(json_encode(array(
  107.                 'data' => $data,
  108.                 'recordsTotal' => $totalResults,
  109.                 'recordsFiltered' => $totalResults
  110.             )));
  111.             $response->headers->set('Content-Type''application/json');
  112.             $response->send();
  113.             exit;
  114.         }
  115.         $users $em->getRepository(User::class)->findAll();
  116.         foreach ($users as $u) {
  117.             $options['users'][$u->getName()] = $u->getId();
  118.         }
  119.         $task = new Tasks();
  120.         $form $this->createForm(TaskSheetFilterType::class, $task$options);
  121.         $form->handleRequest($request);
  122.         if ($form->isSubmitted()) {
  123.             if ($form->isValid()) {
  124.                 $taskUser $task->getUser();
  125.                 $task->setAssignee($taskUser->getName());
  126.                 $task->setStatus('Assigned');
  127.                 $task->setCreatedAt(new \DateTime());
  128.         
  129.                 $em->persist($task);
  130.                 $em->flush();
  131.             }
  132.         }
  133.         return $this->render('task/index.html.twig', [
  134.             'tasks' => $paginator,
  135.             'statuses' => $statuses,
  136.             'form' => $form->createView(),
  137.             'user' => $user
  138.         ]);
  139.     }
  140.     /**
  141.      * @Route("/task/edit/{task}", name="task_edit")
  142.      */
  143.     public function edit(Request $requestTasks $task)
  144.     {
  145.         $em $this->getDoctrine()->getManager();
  146.         $tagRepo $em->getRepository(Tag::class);
  147.         $availableTags $em->getRepository(Tag::class)->fetchPairs();
  148.         $selectedTags $em->getRepository(Tag::class)->fetchPairs($task);
  149.         // dump($availableTags,$selectedTags); exit;
  150.         $form $this->createForm(TaskType::class, $task);
  151.         $form->handleRequest($request);
  152.         if ($form->isSubmitted()) {
  153.             if ($form->isValid()) {
  154.                 //Update legacy labels with true relations
  155.                 $task->setProject($task->getProjectNew()->getProjectName());
  156.                 $task->setAssignee($task->getUser()->getName());
  157.                 $task->setUpdatedAt(new \DateTime());
  158.                 $em->persist($task);
  159.                 $em->flush();
  160.                 $tagRepo->addTags($_POST['tagsNew'], $task);
  161.                 $this->addFlash('success''Task Updated');
  162.                 return $this->redirectToRoute('task_edit', ['task' => $task]);
  163.             }
  164.         }
  165.         return $this->render('task/edit.html.twig', [
  166.             'form' => $form->createView(),
  167.             'task' => $task,
  168.             'availableTags' => $availableTags,
  169.             'selectedTags' => $selectedTags
  170.         ]);
  171.     }
  172.     /**
  173.      * @Route("/task/order", name="task_order")
  174.      */
  175.     public function order(Request $request)
  176.     {
  177.         $em $this->getDoctrine()->getManager();
  178.         $taskIds $request->get('taskOrder');
  179.         $tasks $this->getUser()->getTasks();
  180.         $i 1;
  181.         foreach ($taskIds as $taskId) {
  182.             foreach ($tasks as $task) {
  183.                 if ($task->getId() == $taskId) {
  184.                     $task->setSortOrder($i);
  185.                     $em->persist($task);
  186.                     $i++;
  187.                 }
  188.             }
  189.         }
  190.         $em->flush();
  191.         return $this->json(['success' => true]);
  192.     }
  193.     /**
  194.      * @Route("/task/new", name="task_new")
  195.      */
  196.     public function new(Request $request)
  197.     {
  198.         $em $this->getDoctrine()->getManager();
  199.         $tagRepo $em->getRepository(Tag::class);
  200.         $availableTags $em->getRepository(Tag::class)->fetchPairs();
  201.         $selectedTags = [];
  202.         $task = new Tasks();
  203.         $form $this->createForm(TaskType::class, $task);
  204.         $form->handleRequest($request);
  205.         if ($form->isSubmitted()) {
  206.             if ($form->isValid()) {
  207.                 //Update legacy labels with true relations
  208.                 $task->setProject($task->getProjectNew()->getProjectName());
  209.                 $task->setAssignee($task->getUser()->getName());
  210.                 
  211.                 $task->setCreatedAt(new \DateTime());   
  212.                 $em->persist($task);
  213.                 $em->flush();
  214.                 $tagRepo->addTags($_POST['tagsNew'], $task);
  215.                 $this->addFlash('success''Task Created');
  216.                 return $this->redirectToRoute('task_edit', ['task' => $task]);
  217.             }
  218.         }
  219.         return $this->render('task/new.html.twig', [
  220.             'form' => $form->createView(),
  221.             'task' => $task,
  222.             'availableTags' => $availableTags,
  223.             'selectedTags' => $selectedTags
  224.         ]);
  225.     }
  226. }