src/Controller/Frontend/SitemapController.php line 73

Open in your IDE?
  1. <?php
  2. /**
  3.  * User: remmel
  4.  * Date: 16/03/17
  5.  * Time: 09:29
  6.  */
  7. namespace App\Controller\Frontend;
  8. use App\Repository\BlockRepository;
  9. use App\Repository\RouteRepository;
  10. use App\Repository\StopRepository;
  11. use App\Service\BlockPathService;
  12. use App\Service\UrlRewrite;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Routing\RouterInterface;
  17. class SitemapController extends AbstractController {
  18.     // https://docs.google.com/spreadsheets/d/148-fwmN3X-mHVoAs2crSos-B2Vf6UcwPxkuK0bCqZa8/edit#gid=1807861344
  19.     // select to index / indexed to copy paste columns transportation/locale/departure_id/arrival_id
  20.     //http://remmel.github.io/tools/spreadsheet-to-array.html
  21.     private static $TOP = [["bus","fr","10","409"],["bus","fr","10","412"],["bus","fr","10","415"],["bus","fr","10","414"],["train","fr","3","4"],["train","fr","347","10"],["train","fr","347","353"],["train","fr","296","1260"],["train","fr","296","10"],["train","fr","296","334"],["train","fr","2571","306"],["train","fr","2571","344"],["train","fr","300","704"],["train","fr","300","326"],["train","fr","300","10"],["train","fr","306","2571"],["train","fr","306","10"],["train","fr","306","344"],["train","fr","306","2378"],["train","fr","306","357"],["train","fr","307","10"],["train","fr","4","6"],["train","fr","4","704"],["train","fr","4","360"],["train","fr","1259","336"],["train","fr","1259","10"],["train","fr","308","10"],["train","fr","309","10"],["train","fr","2644","10"],["train","fr","333","10"],["train","fr","2942","10"],["train","fr","337","704"],["train","fr","337","330"],["train","fr","337","10"],["train","fr","337","360"],["train","fr","339","10"],["train","fr","2611","349"],["train","fr","1005","10"],["train","fr","6","3"],["train","fr","6","4"],["train","fr","6","704"],["train","fr","6","10"],["train","fr","1260","296"],["train","fr","1260","704"],["train","fr","1260","10"],["train","fr","1260","348"],["train","fr","1260","334"],["train","fr","2365","348"],["train","fr","704","300"],["train","fr","704","4"],["train","fr","704","337"],["train","fr","704","6"],["train","fr","704","330"],["train","fr","704","326"],["train","fr","704","10"],["train","fr","704","360"],["train","fr","332","2697"],["train","fr","330","304"],["train","fr","330","337"],["train","fr","330","704"],["train","fr","330","10"],["train","fr","330","360"],["train","fr","330","335"],["train","fr","326","300"],["train","fr","326","704"],["train","fr","326","10"],["train","fr","327","10"],["train","fr","336","300"],["train","fr","336","1259"],["train","fr","336","10"],["train","fr","336","355"],["train","fr","336","3066"],["train","fr","336","2395"],["train","fr","10","347"],["train","fr","10","296"],["train","fr","10","2571"],["train","fr","10","300"],["train","fr","10","306"],["train","fr","10","307"],["train","fr","10","1259"],["train","fr","10","308"],["train","fr","10","2644"],["train","fr","10","316"],["train","fr","10","333"],["train","fr","10","2942"],["train","fr","10","337"],["train","fr","10","2255"],["train","fr","10","339"],["train","fr","10","2611"],["train","fr","10","1005"],["train","fr","10","6"],["train","fr","10","1260"],["train","fr","10","2385"],["train","fr","10","2365"],["train","fr","10","704"],["train","fr","10","330"],["train","fr","10","326"],["train","fr","10","336"],["train","fr","10","338"],["train","fr","10","2762"],["train","fr","10","344"],["train","fr","10","303"],["train","fr","10","2734"],["train","fr","10","322"],["train","fr","10","348"],["train","fr","10","2393"],["train","fr","10","353"],["train","fr","10","355"],["train","fr","10","334"],["train","fr","10","2612"],["train","fr","10","349"],["train","fr","10","360"],["train","fr","10","2399"],["train","fr","10","2735"],["train","fr","10","3066"],["train","fr","10","2378"],["train","fr","10","357"],["train","fr","10","2369"],["train","fr","10","2263"],["train","fr","344","2571"],["train","fr","344","306"],["train","fr","344","10"],["train","fr","2734","10"],["train","fr","348","1260"],["train","fr","348","2365"],["train","fr","348","10"],["train","fr","353","10"],["bus","de","205","191"],["bus","de","1181","191"],["bus","de","1160","191"],["bus","de","191","205"],["bus","de","191","1181"],["bus","de","1160","1181"],["bus","de","191","1160"],["bus","de","1181","1160"],["bus","de","195","205"],["bus","de","202","205"],["bus","de","179","193"],["bus","de","179","1203"],["bus","de","205","195"],["bus","de","205","202"],["bus","de","193","179"],["bus","de","1203","179"],["bus","de","928","203"],["bus","de","1181","175"],["bus","de","195","175"],["bus","de","202","175"],["bus","de","1180","1"],["bus","de","1180","1455"],["bus","de","179","436"],["bus","de","179","440"],["bus","de","179","463"],["bus","de","179","212"],["bus","de","205","175"],["bus","de","193","1"],["bus","de","193","1455"],["bus","de","193","422"],["bus","de","193","212"],["bus","de","183","1"],["bus","de","183","1455"],["bus","de","179","436"],["bus","de","179","440"],["bus","de","179","463"],["bus","de","194","1"],["bus","de","194","422"],["bus","de","203","175"],["bus","de","203","3375"],["bus","de","203","9"],["bus","de","203","823"],["bus","de","203","164"],["bus","de","188","7"],["bus","de","188","420"],["bus","de","188","2872"],["bus","de","188","2350"],["bus","de","188","6"],["bus","de","188","146"],["bus","de","188","149"],["bus","de","188","147"],["bus","de","189","7"],["bus","de","189","420"],["bus","de","189","146"],["bus","de","1203","212"],["bus","de","928","175"],["bus","de","179","436"],["bus","de","179","440"],["bus","de","179","463"],["bus","de","1196","1"],["bus","de","1196","1455"],["bus","de","1","179"],["bus","de","179","1"],["bus","en","16","72"],["bus","en","16","12"],["bus","en","16","67"],["bus","en","53","18"],["bus","en","53","72"],["bus","en","53","16"],["bus","en","72","16"],["bus","en","72","67"],["bus","en","72","69"],["bus","de","179","186"],["bus","de","193","194"],["bus","de","203","130"],["bus","en","421","1"],["bus","en","419","10"],["bus","en","419","3"],["bus","en","419","146"],["bus","pt","523","8"],["bus","pt","506","275"],["bus","pt","557","8"],["bus","pt","557","287"],["bus","de","164","10"],["bus","fr","164","10"],["bus","de","164","704"],["bus","fr","164","9"],["bus","de","164","203"],["bus","de","164","175"],["bus","de","164","208"],["bus","fr","2996","10"],["bus","fr","2996","332"],["bus","fr","2996","10"],["bus","en","2996","10"],["bus","de","2996","203"],["bus","fr","167","10"],["bus","fr","167","704"],["bus","fr","167","9"],["bus","de","130","682"],["bus","en","175","380"],["bus","en","380","175"],["bus","en","682","380"],["bus","en","380","682"],["bus","de","130","380"],["bus","en","175","130"],["bus","en","380","130"]];
  22.     /** @required */
  23.     public UrlRewrite $urlRewriteService;
  24.     /** @required */
  25.     public BlockPathService $blockPathService;
  26.     /** @required */
  27.     public RouterInterface $router;
  28.     /** @required */
  29.     public StopRepository $stopRepo;
  30.     /** @required */
  31.     public BlockRepository $blockRepo;
  32.     /**
  33.      *
  34.      * @Route("/sitemap.xml", name="sitemap", defaults={"_format"="xml"}, options={"i18n"=false})
  35.      */
  36.     public function homepageAction(RouteRepository $routeRepo) {
  37.         $routesNationales $routeRepo->findNational('fr');
  38.         $linkRoutesNationales $this->urlRewriteService->createRoutesLink($routesNationalesfalse);
  39.         $links array_merge(
  40. //            Utils::extractValuesFromMethod($linkRoutesNationales, 'getUrl'), //national fr bus
  41.             array_map(function(Link $l) { return $l->url;}, $linkRoutesNationales), //national fr bus
  42.             self::createLinksFromIds(self::$TOP), //manual ids
  43.             ['https://www.comparabus.com/fr/pays/bus-France-Maroc-fr-ma'], //maroc
  44.             $this->getLinksFromBlock()
  45.         );
  46.         $response = new Response($this->generateXML($links));
  47.         $response->headers->set('Content-Type''application/xml; charset=utf-8');
  48.         return $response;
  49.     }
  50.     protected function generateXML(array $links) {
  51.         $urls "";
  52.         foreach ($links as $link) {
  53.             $urls .= "\n" '<url><loc>' $link '</loc></url>';
  54.         }
  55.         return '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' $urls "\n" '</urlset>';
  56.     }
  57.     protected function createLinksFromIds(array $routeIds) {
  58.         $links = [];
  59.         foreach ($routeIds as $routeId) {
  60.             $links[] = $this->createLink($routeId[0], $routeId[2], $routeId[3], $routeId[1]);
  61.         }
  62.         return $links;
  63.     }
  64.     public function createLink($conveyance$depStopId$arrStopId$locale): string {
  65.         //load stop
  66.         $depStop $this->stopRepo->find($depStopId);
  67.         $arrStop $this->stopRepo->find($arrStopId);
  68.         $this->translatesStop($depStop$arrStop$locale);
  69.         return $this->urlRewriteService->generateFromAtoBUrlWithoutDate($depStop$arrStopfalse$locale$conveyance);
  70.     }
  71.     public function getLinksFromBlock() {
  72.         $links = [];
  73.         $blocks $this->blockRepo->findAllByMetaSitemapIsTrue();
  74.         $context $this->router->getContext();
  75.         $schemeHostBase $context->getScheme() . '://' $context->getHost() . $context->getBaseUrl();
  76.         foreach ($blocks as $block) {
  77.             $decoded $this->blockPathService->decodeUrl($block->getPath());
  78.             if ($decoded['path']) {
  79.                 $links[] = $schemeHostBase $decoded['path'];
  80.             } else {
  81.                 $links[] = self::createLink(
  82.                     $decoded['conveyance'],
  83.                     $decoded['depStopId'],
  84.                     $decoded['arrStopId'],
  85.                     $decoded['locale']
  86.                 );
  87.             }
  88.         }
  89.         return $links;
  90.     }
  91. }