src/Controller/TaskController.php line 266

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Task;
  4. use App\Form\TaskType;
  5. use App\Notification\MaillingNotification;
  6. use App\Repository\LeadRepository;
  7. use App\Repository\NotificationRepository;
  8. use App\Repository\TaskRepository;
  9. use App\Repository\UserRepository;
  10. use App\Service\Calendar;
  11. use App\Service\IntervalDate;
  12. use DateInterval;
  13. use DateTime;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. /**
  21.  * @Route("/task")
  22.  */
  23. class TaskController extends AbstractController
  24. {
  25.     public $maillingNotification;
  26.     public function __construct(MaillingNotification $maillingNotification)
  27.     {
  28.         $this->maillingNotification $maillingNotification;
  29.         date_default_timezone_set('Europe/Paris');
  30.     }
  31.     /**
  32.      * @Route("/", name="task.index", methods={"GET", "POST"})
  33.      */
  34.     public function index(Request $requestEntityManagerInterface $entityManagerTaskRepository $taskRepositoryUserRepository $userRepository): Response
  35.     {
  36.         if ($request->getSession()->get('userPossess') == 'all') {
  37.             $request->getSession()->set('userPossess'$this->getUser());
  38.         }
  39.         $user $userRepository->find($request->getSession()->get('userPossess')->getId());
  40.         $tasks = [];
  41.         foreach ($user->getTasksActor() as $tasksActor) {
  42.             $tasks[] = $tasksActor;
  43.         }
  44.         $task = new Task();
  45.         $task->setUser($this->getUser());
  46.         $form $this->createForm(TaskType::class, $task, ['action' => $this->generateUrl('task.new')]);
  47.         return $this->render('task/index.html.twig', [
  48.             'tasks' => $tasks,
  49.             'form' => $form->createView(),
  50.             'current_page' => 'task'
  51.         ]);
  52.     }
  53.     /**
  54.      * @Route("/new/{page}", name="task.new", methods={"GET", "POST"}, defaults={"page"=""})
  55.      */
  56.     public function new(string $page ''Request $requestEntityManagerInterface $entityManagerLeadRepository $leadRepositoryIntervalDate $intervalDate): Response
  57.     {
  58.         $task = new Task();
  59.         $task->setUser($this->getUser());
  60.         if ($request->request->get('task') != null) {
  61.             $due_day_custom '';
  62.             if ($request->request->get('task')['due_day_custom'] != '') {
  63.                 $due_day_custom str_replace('/''-'$request->request->get('task')['due_day_custom']);
  64.             }
  65.             if ($request->request->get('task')['due_day_custom'] == '' && $request->request->get('task')['due_day'] === '0') {
  66.                 $due_day_custom = new DateTime('today midnight');
  67.                 $due_day_custom $due_day_custom->getTimestamp();
  68.             }
  69.             if ($due_day_custom == '') {
  70.                 $task->setDueDate($intervalDate->getTimeDay($request->request->get('task')['due_day']), $request->request->get('task')['due_hour']);
  71.             } else {
  72.                 $task->setDueDate(strtotime($due_day_custom), $request->request->get('task')['due_hour']);
  73.             }
  74.             if (!empty($request->request->get('task')['lead_id'])) {
  75.                 $task->setLead($leadRepository->find($request->request->get('task')['lead_id']));
  76.             }
  77.         }
  78.         if ($task->getLead() != null && $task->getLead()->getUser() != null) {
  79.             $task->setUserAction($task->getLead()->getUser());
  80.         }
  81.         $form $this->createForm(TaskType::class, $task);
  82.         $form->handleRequest($request);
  83.         if ($request->request->get('task')['reminder_interval'] != '0') {
  84.             $reminder = new DateTime($task->getDueDate()->format('Y-m-d H:i:s'));
  85.             $reminder->sub(new DateInterval($request->request->get('task')['reminder_interval']));
  86.             $task->setReminderDate($reminder);
  87.         }
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             if ($this->isCsrfTokenValid('edit-task' $this->getUser()->getId(), $request->get('_token'))) {
  90.                 $entityManager->persist($task);
  91.                 $entityManager->flush();
  92.                 $calendar = new Calendar($this->getUser(), $entityManager);
  93.                 $calendar->createEvent($task);
  94.                 if ($this->getUser() != $task->getUserAction()) {
  95.                     $this->maillingNotification->notification($task->getId(), 0);
  96.                 }
  97.                 if ($request->isXmlHttpRequest()) {
  98.                     if ($page == "lead") {
  99.                         $tasks $task->getLead()->getTasks();
  100.                     } else {
  101.                         $tasks $this->getUser()->getTasksActor();
  102.                     }
  103.                     return new JsonResponse([
  104.                         'tasks' => $this->renderView('task/list_task.html.twig', ['tasks' => $tasks]),
  105.                     ]);
  106.                 }
  107.             } else {
  108.                 if ($request->isXmlHttpRequest()) {
  109.                     return new JsonResponse([
  110.                         'error' => 'Token non valide'
  111.                     ]);
  112.                 }
  113.             }
  114.         }
  115.     }
  116.     /**
  117.      * @Route("/{id}/edit/{page}", name="task.edit", methods={"GET", "POST"}, defaults={"page"=""})
  118.      */
  119.     public function edit(string $page ''Request $requestTask $taskEntityManagerInterface $entityManagerNotificationRepository $notificationRepositoryTaskRepository $taskRepositoryIntervalDate $intervalDate): Response
  120.     {
  121.         $current_page 'task';
  122.         if ($request->request->get('task') != null) {
  123.             $request->request->get('task')['user'] = $task->getuser();
  124.             $request->request->get('task')['reminder_date'] = $task->getuser();
  125.             $due_day str_replace('/''-'$request->request->get('task')['due_day']);
  126.             $task->setDueDate(strtotime($due_day), $request->request->get('task')['due_hour']);
  127.             if ($request->request->get('task')['reminder_interval'] != '0') {
  128.                 $reminder = new DateTime($task->getDueDate()->format('Y-m-d H:i:s'));
  129.                 $reminder->sub(new DateInterval($request->request->get('task')['reminder_interval']));
  130.                 $task->setReminderDate($reminder);
  131.             } else {
  132.                 $task->setReminderDate(null);
  133.             }
  134.         }
  135.         $notification $notificationRepository->findByItemIdAndType($task->getId(), 0);
  136.         if ($notification) {
  137.             $notification $notification[0];
  138.             if ($notification->getUser() == $this->getUser()) {
  139.                 // $notification->setIsSeen(1);
  140.                 $entityManager->remove($notification);
  141.                 $entityManager->flush($notification);
  142.             }
  143.         }
  144.         $form $this->createForm(TaskType::class, $task, ['action' => $this->generateUrl('task.edit', ['id' => $task->getId()])]);
  145.         $form->handleRequest($request);
  146.         if ($form->isSubmitted() && $form->isValid()) {
  147.             if ($this->isCsrfTokenValid('edit-task' $this->getUser()->getId(), $request->get('_token'))) {
  148.                 $entityManager->flush();
  149.                 $calendar = new Calendar($this->getUser(), $entityManager);
  150.                 $calendar->createEvent($task);
  151.                 if ($request->isXmlHttpRequest()) {
  152.                     if ($page == 'lead') {
  153.                         $current_page 'lead';
  154.                         $tasks $taskRepository->findAllTaskIP($task->getLead());
  155.                     } else {
  156.                         $tasks $this->getUser()->getTasksActor();
  157.                         $current_page 'task';
  158.                     }
  159.                     return new JsonResponse([
  160.                         'tasks' => $this->renderView('task/list_task.html.twig', ['tasks' => $tasks]),
  161.                     ]);
  162.                 }
  163.             } else {
  164.                 if ($request->isXmlHttpRequest()) {
  165.                     return new JsonResponse([
  166.                         'error' => 'Token non valide'
  167.                     ]);
  168.                 }
  169.             }
  170.         }
  171.         if ($request->isXmlHttpRequest()) {
  172.             $param '';
  173.             if ($page == 'task'$param '_task_page';
  174.             return new JsonResponse([
  175.                 'form' => $this->renderView('task/_form_modal' $param '.html.twig', ['form' => $form->createView(), 'id' => 'edit-task''lead' => $task->getLead(), 'taskId' => $task->getId()]),
  176.                 'sidebar' => $this->renderView('layout/sidebar.html.twig', ['current_page' => $current_page]),
  177.                 'navbar' => $this->renderView('layout/navbar.html.twig'),
  178.             ]);
  179.         }
  180.         return new Response();
  181.     }
  182.     /**
  183.      * @Route("/archive/{id}", name="task.archive", methods={"get"})
  184.      */
  185.     public function setArchive(int $idRequest $requestEntityManagerInterface $entityManagerTaskRepository $taskRepositoryNotificationRepository $notificationRepository)
  186.     {
  187.         $task $taskRepository->find($id);
  188.         if ($this->getUser() != $task->getUser() && $this->getUser() != $task->getUserAction()) {
  189.             return $this->redirectToRoute('lead.index', [], Response::HTTP_SEE_OTHER);
  190.         }
  191.         $task->setArchive(true);
  192.         $task->setDateArchive(new DateTime('now'));
  193.         $entityManager->flush($task);
  194.         $calendar = new Calendar($this->getUser(), $entityManager);
  195.         $calendar->delete($task);
  196.         $notification $notificationRepository->findByItemIdAndType($task->getId(), 0);
  197.         if ($notification) {
  198.             $notification $notification[0];
  199.             if ($notification->getUser() == $this->getUser()) {
  200.                 $entityManager->remove($notification);
  201.                 $entityManager->flush($notification);
  202.             }
  203.         }
  204.         $referer explode('/'$request->headers->get('referer'));
  205.         if ($request->isXmlHttpRequest()) {
  206.             return new JsonResponse([
  207.                 'success' => 'true',
  208.                 'sidebar' => $this->renderView('layout/sidebar.html.twig', ['current_page' => $referer[count($referer) - 2]]),
  209.                 'navbar' => $this->renderView('layout/navbar.html.twig'),
  210.             ]);
  211.         }
  212.     }
  213.     /**
  214.      * @Route("/nonarchive/{id}", name="task.nonarchive", methods={"get"})
  215.      */
  216.     public function setNonArchive(int $idRequest $requestEntityManagerInterface $entityManagerTaskRepository $taskRepositoryNotificationRepository $notificationRepository)
  217.     {
  218.         $task $taskRepository->find($id);
  219.         if ($this->getUser() != $task->getUser() && $this->getUser() != $task->getUserAction()) {
  220.             return $this->redirectToRoute('lead.index', [], Response::HTTP_SEE_OTHER);
  221.         }
  222.         $task->setArchive(false);
  223.         $task->setDateArchive(null);
  224.         $entityManager->flush($task);
  225.         $calendar = new Calendar($this->getUser(), $entityManager);
  226.         $calendar->createEvent($task);
  227.         $notification $notificationRepository->findByItemIdAndType($task->getId(), 0);
  228.         if ($notification) {
  229.             $notification $notification[0];
  230.             if ($notification->getUser() == $this->getUser()) {
  231.                 $entityManager->remove($notification);
  232.                 $entityManager->flush($notification);
  233.             }
  234.         }
  235.         $referer explode('/'$request->headers->get('referer'));
  236.         if ($request->isXmlHttpRequest()) {
  237.             return new JsonResponse([
  238.                 'success' => 'true',
  239.                 'sidebar' => $this->renderView('layout/sidebar.html.twig', ['current_page' => $referer[count($referer) - 2]]),
  240.                 'navbar' => $this->renderView('layout/navbar.html.twig'),
  241.             ]);
  242.         }
  243.     }
  244.     public static function getFormErrorMessages($form)
  245.     {
  246.         $errors = [];
  247.         foreach ($form->getErrors(truetrue) as $error) {
  248.             $errors[] = $error;
  249.         }
  250.         return $errors;
  251.     }
  252.     /**
  253.      * @Route("/delete/{id}/{page}", name="task.delete", methods={"POST"}, defaults={"page"=""})
  254.      */
  255.     public function delete(string $page ''Request $requestTask $taskEntityManagerInterface $entityManager): Response
  256.     {
  257.         $remove_id $task->getId();
  258.         if ($page == 'task') {
  259.             $tasks $task->getUserAction();
  260.         } else {
  261.             $tasks $task->getLead();
  262.         }
  263.         if ($this->isCsrfTokenValid('delete' $remove_id$request->request->get('_token'))) {
  264.             $calendar = new Calendar($this->getUser(), $entityManager);
  265.             $calendar->delete($task);
  266.             $entityManager->remove($task);
  267.             $entityManager->flush();
  268.         }
  269.         if ($request->isXmlHttpRequest()) {
  270.             return new JsonResponse([
  271.                 'tasks' => $this->renderView('task/list_task.html.twig', ['tasks' => $tasks->getTasks()]),
  272.             ]);
  273.         }
  274.         return $this->redirectToRoute('task.index', [], Response::HTTP_SEE_OTHER);
  275.     }
  276. }