src/EventListener/SitemapSubscriber.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Service\AppServices;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  6. use Presta\SitemapBundle\Event\SitemapPopulateEvent;
  7. use Presta\SitemapBundle\Service\UrlContainerInterface;
  8. use Presta\SitemapBundle\Sitemap\Url\UrlConcrete;
  9. use Presta\SitemapBundle\Sitemap\Url\GoogleMultilangUrlDecorator;
  10. class SitemapSubscriber implements EventSubscriberInterface {
  11.     /**
  12.      * @var UrlGeneratorInterface
  13.      */
  14.     private $urlGenerator;
  15.     /**
  16.      * @var AppServices
  17.      */
  18.     private $services;
  19.     /**
  20.      * @param UrlGeneratorInterface $urlGenerator
  21.      * @param AppServices    $services
  22.      */
  23.     public function __construct(UrlGeneratorInterface $urlGeneratorAppServices $services) {
  24.         $this->urlGenerator $urlGenerator;
  25.         $this->services $services;
  26.     }
  27.     /**
  28.      * @inheritdoc
  29.      */
  30.     public static function getSubscribedEvents() {
  31.         return [
  32.             SitemapPopulateEvent::ON_SITEMAP_POPULATE => 'populate',
  33.         ];
  34.     }
  35.     /**
  36.      * @param SitemapPopulateEvent $event
  37.      */
  38.     public function populate(SitemapPopulateEvent $event): void {
  39.         $this->registerUrls($event->getUrlContainer());
  40.     }
  41.     /**
  42.      * @param UrlContainerInterface $urls
  43.      */
  44.     public function registerUrls(UrlContainerInterface $urls): void {
  45.         // Register static pages urls
  46.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('homepage', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  47.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('categories', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  48.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('fos_user_security_login', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  49.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('fos_user_resetting_request', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  50.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('fos_user_registration_register_attendee', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  51.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('fos_user_registration_register_organizer', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  52.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('contact', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  53.         // Register blog posts urls
  54.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('blog', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  55.         $blogPosts $this->services->getBlogPosts(array())->getQuery()->getResult();
  56.         foreach ($blogPosts as $blogPost) {
  57.             $url = new UrlConcrete($this->urlGenerator->generate('blog_article', ['slug' => $blogPost->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  58.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  59.             //$decoratedUrl->addLink($this->urlGenerator->generate('blog_article', ['slug' => $blogPost->getSlug(), '_locale' => 'fr'], UrlGeneratorInterface::ABSOLUTE_URL), 'fr');
  60.             $urls->addUrl($decoratedUrl'default');
  61.         }
  62.         // Register events urls
  63.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('events', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  64.         $events $this->services->getEvents(array())->getQuery()->getResult();
  65.         foreach ($events as $event) {
  66.             $url = new UrlConcrete($this->urlGenerator->generate('event', ['slug' => $event->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  67.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  68.             $urls->addUrl($decoratedUrl'default');
  69.         }
  70.         // Register help center urls
  71.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('help_center', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  72.         $helpCenterCategories $this->services->getHelpCenterCategories(array())->getQuery()->getResult();
  73.         foreach ($helpCenterCategories as $helpCenterCategory) {
  74.             $url = new UrlConcrete($this->urlGenerator->generate('help_center_category', ['slug' => $helpCenterCategory->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  75.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  76.             $urls->addUrl($decoratedUrl'default');
  77.         }
  78.         $helpCenterArticles $this->services->getHelpCenterArticles(array())->getQuery()->getResult();
  79.         foreach ($helpCenterArticles as $helpCenterArticle) {
  80.             $url = new UrlConcrete($this->urlGenerator->generate('help_center_article', ['slug' => $helpCenterArticle->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  81.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  82.             $urls->addUrl($decoratedUrl'default');
  83.         }
  84.         // Register organizers urls
  85.         $organizers $this->services->getUsers(array('role' => 'organizer'))->getQuery()->getResult();
  86.         foreach ($organizers as $organizer) {
  87.             $url = new UrlConcrete($this->urlGenerator->generate('organizer', ['slug' => $organizer->getOrganizer()->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  88.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  89.             $urls->addUrl($decoratedUrl'default');
  90.         }
  91.         // Register pages urls
  92.         $pages $this->services->getPages(array())->getQuery()->getResult();
  93.         foreach ($pages as $page) {
  94.             $url = new UrlConcrete($this->urlGenerator->generate('page', ['slug' => $page->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  95.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  96.             $urls->addUrl($decoratedUrl'default');
  97.         }
  98.         // Register venues urls
  99.         $urls->addUrl(new UrlConcrete($this->urlGenerator->generate('venues', [], UrlGeneratorInterface::ABSOLUTE_URL)), 'default');
  100.         $venues $this->services->getVenues(array('directory' => true))->getQuery()->getResult();
  101.         foreach ($venues as $venue) {
  102.             $url = new UrlConcrete($this->urlGenerator->generate('venue', ['slug' => $venue->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL));
  103.             $decoratedUrl = new GoogleMultilangUrlDecorator($url);
  104.             $urls->addUrl($decoratedUrl'default');
  105.         }
  106.     }
  107. }