src/EventListener/SitemapPageSubscriber.php line 61

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Route;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Flagception\Manager\FeatureManagerInterface;
  6. use Presta\SitemapBundle\Service\UrlContainerInterface;
  7. use Presta\SitemapBundle\Sitemap\Url\UrlConcrete;
  8. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  9. class SitemapPageSubscriber extends AbstractSitemapSubscriber
  10. {
  11.     private FeatureManagerInterface $featureManager;
  12.     public function __construct(
  13.         UrlGeneratorInterface $urlGenerator,
  14.         ManagerRegistry $doctrine,
  15.         FeatureManagerInterface $featureManager
  16.     ) {
  17.         parent::__construct($urlGenerator$doctrine);
  18.         $this->featureManager $featureManager;
  19.     }
  20.     public function registerUrls(UrlContainerInterface $urls): void
  21.     {
  22.         /** @var Route[] $routes */
  23.         $routes $this->doctrine->getRepository(Route::class)->findAll();
  24.         foreach ($routes as $route) {
  25.             try {
  26.                 if (!$this->isRouteValidForSiteMap($route)) {
  27.                     continue;
  28.                 }
  29.                 $urls->addUrl(
  30.                     new UrlConcrete(
  31.                         $this->urlGenerator->generate(
  32.                             $route->getName(),
  33.                             [],
  34.                             UrlGeneratorInterface::ABSOLUTE_URL
  35.                         )
  36.                     ),
  37.                     'page'
  38.                 );
  39.             } catch (\Exception $e) {
  40.                 continue;
  41.             }
  42.         }
  43.     }
  44.     private function isRouteValidForSiteMap(Route $route): bool
  45.     {
  46.         if ($route->getVariablePattern()) {
  47.             return false;
  48.         }
  49.         if (!$route->getPage()) {
  50.             return false;
  51.         }
  52.         if ($route->getPage()->isConcept()) {
  53.             return false;
  54.         }
  55.         if ($route->getPage()->getFeature() && !$this->featureManager->isActive($route->getPage()->getFeature())) {
  56.             return false;
  57.         }
  58.         return true;
  59.     }
  60. }