X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FController%2FPersonController.php;h=92447dc521be481656beab25e31bac2ec2fc0e5e;hb=4885c7cf77a7e48e2abe4c97a2b404d0dd55f47e;hp=49c456d999609bbcb0a6f89cdf7b2eff89ea50b8;hpb=c4fba949ce8e98cadb9222a202b9e24b52dcb7f8;p=Project_proches_de_moi-server.git diff --git a/src/Controller/PersonController.php b/src/Controller/PersonController.php index 49c456d..92447dc 100644 --- a/src/Controller/PersonController.php +++ b/src/Controller/PersonController.php @@ -9,6 +9,7 @@ use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Controller\Annotations as Rest; use FOS\RestBundle\View\ViewHandler; use FOS\RestBundle\View\View; +use FOS\RestBundle\Request\ParamFetcherInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -38,7 +39,10 @@ class PersonController extends FOSRestController $em->persist($person); $em->flush(); - return $this->view($person, Response::HTTP_CREATED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]); + return $this->view($person, Response::HTTP_CREATED, + ['Location' => $this->generateUrl('show_person', + ['id' => $person->getId(), + UrlGeneratorInterface::ABSOLUTE_URL])]); } /** @@ -106,7 +110,10 @@ class PersonController extends FOSRestController $em->merge($person); $em->flush(); - return $this->view($person, Response::HTTP_CREATED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]); + return $this->view($person, Response::HTTP_CREATED, + ['Location' => $this->generateUrl('show_person', + ['id' => $person->getId(), + UrlGeneratorInterface::ABSOLUTE_URL])]); } /** @@ -128,7 +135,10 @@ class PersonController extends FOSRestController if ($request->get('password') != $person->getPassword()) { return $this->PersonWrongPassword(); } else { - return $this->view($person, Response::HTTP_ACCEPTED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]); + return $this->view($person, Response::HTTP_ACCEPTED, + ['Location' => $this->generateUrl('show_person', + ['id' => $person->getId(), + UrlGeneratorInterface::ABSOLUTE_URL])]); } } @@ -177,9 +187,15 @@ class PersonController extends FOSRestController } private function getLastLocalisation($em, $id) { - $query = $em->createQuery("SELECT l1 FROM App\Entity\Localisation l1 WHERE l1.person = :person and l1.timestamp = (SELECT MAX(l2.timestamp) FROM App\Entity\Localisation l2 WHERE l2.person = l1.person)"); + $query = $em->createQuery("SELECT l1 FROM App\Entity\Localisation l1 + WHERE l1.person = :person and l1.timestamp = + (SELECT MAX(l2.timestamp) FROM App\Entity\Localisation l2 + WHERE l2.person = l1.person)"); $query->setParameter('person', $id); - return $query->getResult()[0]; + $result = $query->getResult(); + if (!empty($result)) { + return $result[0]; + } } /** @@ -339,7 +355,9 @@ class PersonController extends FOSRestController return $this->PersonNotFound(); } - return $person->getFriendsWithMe(); + $friends_with_me = $person->getFriendsWithMe(); + + return $friends_with_me; } /** @@ -407,6 +425,31 @@ class PersonController extends FOSRestController $em->flush(); } + /** + * @Rest\Get( + * path = "/api/person/search", + * name = "search_person" + * ) + * @Rest\QueryParam(name="keyword") + * @Rest\View() + */ + public function searchPerson(ParamFetcherInterface $paramFetcher) + { + $em = $this->getDoctrine()->getManager(); + $query = $em->createQuery("SELECT DISTINCT p FROM App\Entity\Person p WHERE + p.firstname LIKE :keyword OR + p.lastname LIKE :keyword OR + p.email LIKE :keyword"); + $query->setParameter('keyword', '%'.$paramFetcher->get('keyword').'%'); + $persons = $query->getResult(); + + if (empty($persons)) { + return $this->PersonsNotFound(); + } + + return $persons; + } + private function PersonNotFound() { return View::create(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); }