src/Controller/Mvc/mapsearchController.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mvc;
  3. use App\Service\Entry\MapService;
  4. use App\Utils\TargetChoiceUtil;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. /**
  11.  * @Route("/map_search")
  12.  */
  13. class mapsearchController extends AbstractController
  14. {
  15.     /**
  16.      * @Route ("/", name="map_search_index", methods={"GET"})
  17.      */
  18.     public function index(
  19.         MapService $service
  20.     ) {
  21.         return $this->render('pages/map_search/index.html.twig', [
  22.             "counts" => $service->getCount()
  23.         ]);
  24.     }
  25.     /**
  26.      * @Route("/api", name="map_search_api", methods={"GET"})
  27.      */
  28.     public function api(
  29.         Request $request,
  30.         MapService $service,
  31.         UrlGeneratorInterface $urlGenerator
  32.     ): Response {
  33.         $err = [];
  34.         if(!$request->query->has('north')) $err[] = "north";
  35.         if(!$request->query->has('south')) $err[] = "south";
  36.         if(!$request->query->has('east')) $err[] = "east";
  37.         if(!$request->query->has('west')) $err[] = "west";
  38.         if(count($err)) return $this->invalid("Invalid parameter. "implode(","$err). " wasn't given.");
  39.         $north floatval$request->query->get('north'));
  40.         $south floatval$request->query->get('south'));
  41.         $east floatval$request->query->get('east'));
  42.         $west floatval$request->query->get('west'));
  43.         $err = [];
  44.         if(!$north$err[] = "north";
  45.         if(!$south$err[] = "south";
  46.         if(!$east$err[] = "east";
  47.         if(!$west$err[] = "west";
  48.         if(count($err)) return $this->invalid('Invalid parameter. 'implode(","$err). " is not digits.");
  49.         $category $request->query->has('category') ? $request->query->get('category'): "";
  50.         $entries $service->getMarkers(
  51.             $north,
  52.             $south,
  53.             $east,
  54.             $west,
  55.             explode(","$category)
  56.         );
  57.         $markerData = [];
  58.         foreach($entries as $entry) {
  59.             switch($entry->getCategory()) {
  60.                 case TargetChoiceUtil::HOTEL:
  61.                     $url $urlGenerator->generate('facility_detail', ["id" => $entry->getId()]);
  62.                     break;
  63.                 case TargetChoiceUtil::WORKSPACE:
  64.                     $url $urlGenerator->generate('workspace_detail', ["id" => $entry->getId()]);
  65.                     break;
  66.                 case TargetChoiceUtil::ACTIVITY:
  67.                 case TargetChoiceUtil::MOBILITY:
  68.                     $url $urlGenerator->generate('activity_detail', ["id" => $entry->getId()]);
  69.                     break;
  70.             }
  71.             $geolocation $entry->getGeolocation();
  72.             $markerData[] = [
  73.                 "id" => $entry->getId(),
  74.                 "category_id" => $entry->getCategory(),
  75.                 "category" => TargetChoiceUtil::localeName($entry->getCategory(), $request->getLocale()),
  76.                 "title" => $entry->titleLocale($request->getLocale()),
  77.                 "link" => $url,
  78.                 "lat" => $geolocation->getLat(),
  79.                 "lng" => $geolocation->getLng()
  80.             ];
  81.         }
  82.         $listHtml $this->renderView("pages/map_search/_list.html.twig", [
  83.             "entries" => $entries
  84.         ]);
  85.         return $this->json([
  86.             "status" => 200,
  87.             "marker" => $markerData,
  88.             "list" => $listHtml
  89.         ]);
  90.     }
  91.     private function invalid(string $message): Response
  92.     {
  93.         return $this->json([
  94.             "status" => 400,
  95.             "message" => $message
  96.         ]);
  97.     }
  98. }