query->getInt('person_id', null); if ($personId === null) { return new Response("You must provide a person_id", Response::HTTP_BAD_REQUEST); } $person = $this->getDoctrine()->getManager() ->getRepository(Person::class) ->find($personId); if ($person === null) { throw $this->createNotFoundException("Invalid person id"); } $task = (new SingleTask()) ->setPerson($person) ->setAssignee($this->getUser()) ->setType('task_default') ; $this->denyAccessUnlessGranted(TaskVoter::CREATE, $task, 'You are not ' . 'allowed to create this task'); $form = $this->createCreateForm($task); $form->handleRequest($request); if ($form->isSubmitted()) { if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($task); $em->flush(); $this->addFlash('success', "The task is created"); return $this->redirectToRoute('chill_task_task_list', [ 'personId' => $task->getPerson()->getId() ]); } else { $this->addFlash('error', "This form contains errors"); } } return $this->render('ChillTaskBundle:SingleTask:new.html.twig', array( 'form' => $form->createView(), 'task' => $task )); } /** * * @param SingleTask $task * @return \Symfony\Component\Form\FormInterface */ protected function createCreateForm(SingleTask $task) { $form = $this->createForm(SingleTaskType::class, $task, [ 'center' => $task->getCenter(), 'role' => new Role(TaskVoter::CREATE) ]); $form->add('submit', SubmitType::class); return $form; } /** * @Route( * "/{_locale}/task/task/list/person/{personId}", * name="chill_task_task_list" * ) */ public function listAction( Request $request, Person $personId, PaginatorFactory $paginatorFactory ) { $person = $personId; /* @var $taskRepository SingleTaskRepository */ $taskRepository = $this->get('chill_task.single_task_repository'); /* @var $viewParams array The parameters for the view */ $viewParams['person'] = $person; // collect parameters for filter $params['person'] = $person; if ($request->query->has('date_status')) { $statuses = $request->query->get('date_status'); $singleStatus = count($statuses) === 1; // check for invalid parameters $diff = \array_diff( $statuses, SingleTaskRepository::DATE_STATUSES) ; if (count($diff) > 0) { return new Response( 'date_status not allowed: '. \implode(', ', $diff), Response::HTTP_BAD_REQUEST ); } } foreach(SingleTaskRepository::DATE_STATUSES as $type) { if($request->query->has('date_status') && FALSE === \in_array($type, $statuses ?? [])) { continue; } $params['date_status'] = $type; $count = $taskRepository ->countByParameters($params, $this->getUser()) ; $paginator = $paginatorFactory->create($count); $viewParams['single_task_'.$type.'_count'] = $count; $viewParams['single_task_'.$type.'_paginator'] = $paginator; $viewParams['single_task_'.$type.'_tasks'] = $taskRepository ->findByParameters($params, $this->getUser(), $singleStatus ? $paginator->getCurrentPage()->getFirstItemNumber() : 0, $singleStatus ? $paginator->getItemsPerPage() : 10) ; } return $this->render('ChillTaskBundle:Task:index.html.twig', $viewParams); } protected function getPersonParam(Request $request, EntityManagerInterface $em) { $person = $em->getRepository(Person::class) ->find($request->query->getInt('person_id')) ; if (NULL === $person) { throw $this->createNotFoundException('person not found'); } $this->denyAccessUnlessGranted(PersonVoter::SEE, $person, "You are " . "not allowed to see this person"); return $person; } protected function getUserParam(Request $request, EntityManagerInterface $em) { $user = $em->getRepository(User::class) ->find($request->query->getInt('user_id')) ; if (NULL === $user) { throw $this->createNotFoundException('user not found'); } return $user; } }