<?php
namespace App\EventListener;
use App\Entity\Age;
use App\Entity\Article;
use App\Entity\Country;
use App\Entity\Saison;
use App\Entity\Sejour;
use App\Entity\Theme;
use App\Repository\BlogPostRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Presta\SitemapBundle\Event\SitemapPopulateEvent;
use Presta\SitemapBundle\Service\UrlContainerInterface;
use Presta\SitemapBundle\Sitemap\Url\UrlConcrete;
use Symfony\Component\String\Slugger\AsciiSlugger;
class SitemapSubscriber implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $em;
private $router;
private $slugger;
/**
* @param BlogPostRepository $blogPostRepository
*/
public function __construct(EntityManagerInterface $em,UrlGeneratorInterface $router)
{
$this->em = $em;
$this->router = $router;
}
/**
* @inheritdoc
*/
public static function getSubscribedEvents()
{
return [
SitemapPopulateEvent::class => 'populate',
];
}
/**
* @param SitemapPopulateEvent $event
*/
public function populate(SitemapPopulateEvent $event): void
{
$this->registerActualite($event->getUrlContainer());
$this->registerSejour($event->getUrlContainer());
$this->registerColonies($event->getUrlContainer());
}
/**
* @param UrlContainerInterface $urls
*/
public function registerActualite(UrlContainerInterface $urls,): void
{
$posts = $this->em->getRepository(Article::class)->findBy(['type'=>'article','isActive'=> true]);
$slugger = new AsciiSlugger();
foreach ($posts as $post) {
$urls->addUrl(
new UrlConcrete(
$this->router->generate(
'actualite',
['slug' => $slugger->slug(strtolower($post->getTitle()),'_'),
'id' => $post->getId()
],
UrlGeneratorInterface::ABSOLUTE_URL
)
),
'article'
);
}
}
/**
* @param UrlContainerInterface $urls
*/
public function registerSejour(UrlContainerInterface $urls,): void
{
$posts = $this->em->getRepository(Sejour::class)->findBy(['isActive'=> true]);
$slugger = new AsciiSlugger();
foreach ($posts as $post) {
$urls->addUrl(
new UrlConcrete(
$this->router->generate(
'frontend_colonie-detail',
['slug' => $slugger->slug(strtolower($post->getTitle()),'-'),
'id' => $post->getId()
],
UrlGeneratorInterface::ABSOLUTE_URL
)
),
'sejour'
);
}
}
/**
* @param UrlContainerInterface $urls
*/
public function registerCOlonies(UrlContainerInterface $urls,): void
{
$posts = $this->em->getRepository(Saison::class)->findBy([]);
$slugger = new AsciiSlugger();
foreach ($posts as $post) {
$urls->addUrl(
new UrlConcrete(
$this->router->generate(
'frontend_resa_dynamique_liste_colonies',
['path' =>$post->getSlug(),
],
UrlGeneratorInterface::ABSOLUTE_URL
)
),
'colonies'
);
}
$posts = $this->em->getRepository(Theme::class)->findBy(['isActive'=> true]);
foreach ($posts as $post) {
$urls->addUrl(
new UrlConcrete(
$this->router->generate(
'frontend_resa_dynamique_liste_colonies',
['path' => $slugger->slug(strtolower($post->getTitle()),'_'),
],
UrlGeneratorInterface::ABSOLUTE_URL
)
),
'colonies'
);
}
$posts = $this->em->getRepository(Age::class)->findBy([]);
foreach ($posts as $post) {
$urls->addUrl(
new UrlConcrete(
$this->router->generate(
'frontend_resa_dynamique_liste_colonies',
['path' => $slugger->slug(strtolower($post->getTitle()),'-'),
],
UrlGeneratorInterface::ABSOLUTE_URL
)
),
'colonies'
);
}
$posts = $this->em->getRepository(Country::class)->findBy([]);
foreach ($posts as $post) {
$urls->addUrl(
new UrlConcrete(
$this->router->generate(
'frontend_resa_dynamique_liste_colonies',
['path' => $post->getSlug(),
],
UrlGeneratorInterface::ABSOLUTE_URL
)
),
'colonies'
);
}
}
}