src/Controller/TaskController.php line 198

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