<?php
/**
* User: remmel
* Date: 16/03/17
* Time: 09:29
*/
namespace App\Controller\Frontend;
use App\Repository\BlockRepository;
use App\Repository\RouteRepository;
use App\Repository\StopRepository;
use App\Service\BlockPathService;
use App\Service\UrlRewrite;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
class SitemapController extends AbstractController {
// https://docs.google.com/spreadsheets/d/148-fwmN3X-mHVoAs2crSos-B2Vf6UcwPxkuK0bCqZa8/edit#gid=1807861344
// select to index / indexed to copy paste columns transportation/locale/departure_id/arrival_id
//http://remmel.github.io/tools/spreadsheet-to-array.html
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"]];
/** @required */
public UrlRewrite $urlRewriteService;
/** @required */
public BlockPathService $blockPathService;
/** @required */
public RouterInterface $router;
/** @required */
public StopRepository $stopRepo;
/** @required */
public BlockRepository $blockRepo;
/**
*
* @Route("/sitemap.xml", name="sitemap", defaults={"_format"="xml"}, options={"i18n"=false})
*/
public function homepageAction(RouteRepository $routeRepo) {
$routesNationales = $routeRepo->findNational('fr');
$linkRoutesNationales = $this->urlRewriteService->createRoutesLink($routesNationales, false);
$links = array_merge(
// Utils::extractValuesFromMethod($linkRoutesNationales, 'getUrl'), //national fr bus
array_map(function(Link $l) { return $l->url;}, $linkRoutesNationales), //national fr bus
self::createLinksFromIds(self::$TOP), //manual ids
['https://www.comparabus.com/fr/pays/bus-France-Maroc-fr-ma'], //maroc
$this->getLinksFromBlock()
);
$response = new Response($this->generateXML($links));
$response->headers->set('Content-Type', 'application/xml; charset=utf-8');
return $response;
}
protected function generateXML(array $links) {
$urls = "";
foreach ($links as $link) {
$urls .= "\n" . '<url><loc>' . $link . '</loc></url>';
}
return '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . $urls . "\n" . '</urlset>';
}
protected function createLinksFromIds(array $routeIds) {
$links = [];
foreach ($routeIds as $routeId) {
$links[] = $this->createLink($routeId[0], $routeId[2], $routeId[3], $routeId[1]);
}
return $links;
}
public function createLink($conveyance, $depStopId, $arrStopId, $locale): string {
//load stop
$depStop = $this->stopRepo->find($depStopId);
$arrStop = $this->stopRepo->find($arrStopId);
$this->translatesStop($depStop, $arrStop, $locale);
return $this->urlRewriteService->generateFromAtoBUrlWithoutDate($depStop, $arrStop, false, $locale, $conveyance);
}
public function getLinksFromBlock() {
$links = [];
$blocks = $this->blockRepo->findAllByMetaSitemapIsTrue();
$context = $this->router->getContext();
$schemeHostBase = $context->getScheme() . '://' . $context->getHost() . $context->getBaseUrl();
foreach ($blocks as $block) {
$decoded = $this->blockPathService->decodeUrl($block->getPath());
if ($decoded['path']) {
$links[] = $schemeHostBase . $decoded['path'];
} else {
$links[] = self::createLink(
$decoded['conveyance'],
$decoded['depStopId'],
$decoded['arrStopId'],
$decoded['locale']
);
}
}
return $links;
}
}