src/Controller/Front/StorePageController.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Store;
  4. use App\Repository\OrlOfficeRepository;
  5. use App\Repository\StoreRepository;
  6. use App\Service\GmapsService;
  7. use App\Service\GooglePlaceService;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class StorePageController extends AbstractController
  15. {
  16.     private array $location;
  17.     private array $departmentsList;
  18.     public function __construct(array $location, array $departmentsList) {
  19.         $this->location $location;
  20.         $this->departmentsList $departmentsList;
  21.     }
  22.     /**
  23.      * List all store with store page
  24.      * @Route("/centre-auditif", name="index_store_page")
  25.      */
  26.     public function listStorePages(
  27.         StoreRepository $storeRepository,
  28.         PaginatorInterface $paginator,
  29.         Request $request
  30.     ): Response
  31.     {
  32.         // get all stores with store page
  33.        $stores $storeRepository->findStoresWithStorePage();
  34.         // sort store by departments
  35.         $result = [];
  36.         foreach ($stores as $store) {
  37.             $cp $store->getZipCode();
  38.             $department substr($cp02);
  39.             if (!isset($result[$department])) {
  40.                 $result[$department] = [
  41.                     'name_department' => $this->departmentsList[$department] ?? 'Autres',
  42.                     'stores' => [],
  43.                 ];
  44.             }
  45.             $result[$department]['stores'][] = $store;
  46.         }
  47.         $pagination $paginator->paginate(
  48.             $result,
  49.             $request->query->getInt('page'1),
  50.             5,
  51.             ['wrap-queries' => true]
  52.         );
  53.         $breadcrumbs = [
  54.             ['name' => 'Accueil''url' => $this->generateUrl('home')],
  55.             ['name' => 'Centre Auditif''url' => $this->generateUrl('index_store_page')],
  56.         ];
  57.         return $this->render('front_v4/mca/store/list.html.twig', [
  58.             'pagination' => $pagination,
  59.             'stores' => $result,
  60.             'breadcrumbs' => $breadcrumbs
  61.         ]);
  62.     }
  63.     /**
  64.      * Show page details for store
  65.      *
  66.      * @Route("/centre-auditif/{slug}", name="show_store_page")
  67.      * @param Request $request
  68.      * @param Store $store
  69.      * @param LoggerInterface $logger
  70.      * @param GooglePlaceService $googlePlaceService
  71.      * @param OrlOfficeRepository $orlOfficeRepository
  72.      * @return Response
  73.      */
  74.     public function showStorePage(
  75.         Request $request,
  76.         Store $store,
  77.         LoggerInterface $logger,
  78.         GmapsService $gmapsService,
  79.         OrlOfficeRepository $orlOfficeRepository
  80.     ): Response
  81.     {
  82.         $logger->info('Display Store page ' $store->getId());
  83.         $storePlaceData $gmapsService->fetchGooglePlaceDataFromApi($store);
  84.         // get lat/long from finder
  85.         $coordinatesUsedInFinder $request->getSession()->get('finder_coordinates');
  86.         // check if store has lat/lon, if it does->search orl, else empty data
  87.         if ($store->hasLatitudeAndLongitude()) {
  88.             $orlOffices $orlOfficeRepository->findActiveOrlOfficesAroundLocation($store->getLatitude(), $store->getLongitude(), 203);
  89.         } else {
  90.             $orlOffices null;
  91.         }
  92.         $breadcrumbs = [
  93.             ['name' => 'Accueil''url' => $this->generateUrl('home')],
  94.         ];
  95.         return $this->render('front_v4/mca/store/single.html.twig', [
  96.             'orls' => $orlOffices,
  97.             'store' => $store,
  98.             'is_partner' => $store->isOpenedForProspect(),
  99.             // todo : fix this bug => return empty array
  100.             'employees' => [],
  101.             'store_page' => $store->getStorePage(),
  102.             'store_place_data' => $storePlaceData,
  103.             'coordinates_used_in_finder' => $coordinatesUsedInFinder,
  104.             'breadcrumbs' => $breadcrumbs
  105.         ]);
  106.     }
  107.     /**
  108.      * List store by region
  109.      * @Route("/centres-auditifs/regions", name="list_store_by_region")
  110.      */
  111.     public function listStoreByRegion(
  112.         StoreRepository $storeRepository,
  113.         PaginatorInterface $paginator,
  114.         Request $request
  115.     ): Response
  116.     {
  117.         // sort store by departments
  118.         $result = [];
  119.         foreach ($this->location['regions'] as $regionCode => $region) {
  120.             foreach($region['departments'] as $departmentCode => $department) {
  121.                 $stores $storeRepository->findStoreByDepartment($departmentCode5);
  122.                 if ($stores) {
  123.                     $result[$regionCode] = [
  124.                         'slug' => $regionCode,
  125.                         'name_category' => $region['name'],
  126.                         'stores' => $stores,
  127.                     ];
  128.                 }
  129.             }
  130.         }
  131.         $pagination $paginator->paginate(
  132.             $result,
  133.             $request->query->getInt('page'1),
  134.             5,
  135.             ['wrap-queries' => true]
  136.         );
  137.         $breadcrumbs = [
  138.             ['name' => 'Accueil''url' => $this->generateUrl('home')],
  139.             ['name' => 'Centres Auditifs''url' => $this->generateUrl('list_store_by_region')],
  140.         ];
  141.         return $this->render('front_v4/mca/store/list_location_hierarchy/index_region.html.twig', [
  142.             'pagination' => $pagination,
  143.             'stores' => $result,
  144.             'breadcrumbs' => $breadcrumbs
  145.         ]);
  146.     }
  147.     /**
  148.      * List all store by department in region
  149.      * @Route("/centres-auditifs/{region_slug}", name="list_store_by_department")
  150.      */
  151.     public function listStoreByDepartmentInRegion(
  152.         StoreRepository $storeRepository,
  153.         PaginatorInterface $paginator,
  154.         Request $request
  155.     ): Response
  156.     {
  157.         $region $this->location['regions'][$request->get('region_slug')];
  158.         // sort store by departments
  159.         $result = [];
  160.         foreach ($region['departments'] as $departmentCode => $department) {
  161.             $stores $storeRepository->findStoreByDepartment($departmentCode5);
  162.             if($stores) {
  163.                 $result[$departmentCode] = [
  164.                     'slug' => $department['slug'],
  165.                     'name_category' => $department['name'],
  166.                     'stores' => $stores,
  167.                 ];
  168.             }
  169.         }
  170.         $pagination $paginator->paginate(
  171.             $result,
  172.             $request->query->getInt('page'1),
  173.             5,
  174.             ['wrap-queries' => true]
  175.         );
  176.         $breadcrumbs = [
  177.             ['name' => 'Accueil''url' => $this->generateUrl('home')],
  178.             ['name' => 'Centres Auditifs''url' => $this->generateUrl('list_store_by_region')],
  179.             ['name' => $this->location['regions'][$request->get('region_slug')]['name'], 'url' => $this->generateUrl('list_store_by_department', ['region_slug' => $request->get('region_slug')])],
  180.         ];
  181.         return $this->render('front_v4/mca/store/list_location_hierarchy/index_department.html.twig', [
  182.             'pagination' => $pagination,
  183.             'stores' => $result,
  184.             'breadcrumbs' => $breadcrumbs,
  185.             'region_slug' => $request->get('region_slug'),
  186.         ]);
  187.     }
  188.     /**
  189.      * List all store by city in department
  190.      * @Route("/centres-auditifs/{region_slug}/{department_slug}", name="list_store_by_city")
  191.      */
  192.     public function listStoreByCityInDepartment(
  193.         StoreRepository $storeRepository,
  194.         PaginatorInterface $paginator,
  195.         Request $request
  196.     ): Response
  197.     {
  198.         $departments $this->location['regions'][$request->get('region_slug')]['departments'];
  199.         $dptName null;
  200.         // sort store by departments
  201.         $result = [];
  202.         foreach ($departments as $departmentCode => $department) {
  203.             if ($request->get('department_slug') == $department['slug']) {
  204.                 $stores $storeRepository->findStoreByCity((array)$departmentCode);
  205.                 $dptName $department['name'];
  206.                 foreach ($stores as $store) {
  207.                     $result[$store->getCity()] = [
  208.                         'name_category' => $store->getCity() ?? 'Autres',
  209.                         'stores' => $stores,
  210.                     ];
  211.                 }
  212.             }
  213.         }
  214.         if(isset($stores)) {
  215.             $result $stores;
  216.         }
  217.         $pagination $paginator->paginate(
  218.             $result,
  219.             $request->query->getInt('page'1),
  220.             5,
  221.             ['wrap-queries' => true]
  222.         );
  223.         $breadcrumbs = [
  224.             ['name' => 'Accueil''url' => $this->generateUrl('home')],
  225.             ['name' => 'Centres Auditifs''url' => $this->generateUrl('list_store_by_region')],
  226.             ['name' => $this->location['regions'][$request->get('region_slug')]['name'], 'url' => $this->generateUrl('list_store_by_department', ['region_slug' => $request->get('region_slug')])],
  227.             ['name' => $dptName'url' => $this->generateUrl('list_store_by_department', ['region_slug' => $request->get('region_slug')])],
  228.         ];
  229.         return $this->render('front_v4/mca/store/list_location_hierarchy/index_city.html.twig', [
  230.             'pagination' => $pagination,
  231.             'stores' => $result,
  232.             'breadcrumbs' => $breadcrumbs,
  233.         ]);
  234.     }
  235. }