<?php
namespace App\Controller;
use App\Enum\Sitemap\ChangeFreq;
use App\Service\WordpressAPIService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SitemapController extends AbstractController
{
#[Route('/sitemap.xml', name: 'sitemap', methods: ['GET', 'HEAD'])]
public function sitemap(Request $request)
{
$hostname = $request->getSchemeAndHttpHost();
$urls = [];
// aggiungo gli URL statici
// Home
$urls[] = $this->generateEntry($this->generateUrl('home'), ChangeFreq::DAILY, 1.0);
// Chi siamo
$urls[] = $this->generateEntry($this->generateUrl('polo-sanitario-moderno'), ChangeFreq::MONTHLY, 0.8);
$urls[] = $this->generateEntry($this->generateUrl('fondatore'), ChangeFreq::MONTHLY, 0.8);
$urls[] = $this->generateEntry($this->generateUrl('universo-salute'), ChangeFreq::MONTHLY, 0.8);
// Servizi sanitari
$urls[] = $this->generateEntry($this->generateUrl('assistenza-ospedaliera-per-acuti'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('riabilitazione-intensiva-ospedaliera'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('riabilitazione-intensiva-extra-ospedaliera'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('riabilitazioni-estensive-di-mantenimento'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('uo-riabilitazione-alzheimer'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('centro-disturbi-cognitivi-demenze'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('residenze-sanitarie-assistenziali'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('hospice'), ChangeFreq::MONTHLY, 0.5);
// Tutela dei cittadini
$urls[] = $this->generateEntry($this->generateUrl('strumenti-di-tutela'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('diritti-doveri-cittadino'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('rapporti-con-associazioni-volontariato'), ChangeFreq::MONTHLY, 0.5);
// Servizi al paziente
$urls[] = $this->generateEntry($this->generateUrl('servizi-al-paziente'), ChangeFreq::MONTHLY, 0.5);
// Strutture assistenziali
$urls[] = $this->generateEntry($this->generateUrl('sede-di-bisceglie'), ChangeFreq::MONTHLY, 0.8);
$urls[] = $this->generateEntry($this->generateUrl('sede-di-foggia'), ChangeFreq::MONTHLY, 0.8);
$urls[] = $this->generateEntry($this->generateUrl('sede-di-potenza'), ChangeFreq::MONTHLY, 0.8);
// Galleria
$urls[] = $this->generateEntry($this->generateUrl('galleria-bisceglie'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('galleria-foggia'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('galleria-potenza'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('galleria-video'), ChangeFreq::WEEKLY, 0.7);
// Press Area
$urls[] = $this->generateEntry($this->generateUrl('notizie'), ChangeFreq::DAILY, 0.8);
$urls[] = $this->generateEntry($this->generateUrl('ufficio-stampa'), ChangeFreq::MONTHLY, 0.5);
// Contatti
$urls[] = $this->generateEntry($this->generateUrl('contatti'), ChangeFreq::MONTHLY, 0.6);
$urls[] = $this->generateEntry($this->generateUrl('lavora-con-noi'), ChangeFreq::MONTHLY, 0.6);
// Policy
$urls[] = $this->generateEntry($this->generateUrl('privacy-policy'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('cookie-policy'), ChangeFreq::MONTHLY, 0.5);
// Link
$urls[] = $this->generateEntry($this->generateUrl('amministrazione-trasparente'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('faq'), ChangeFreq::MONTHLY, 0.6);
$urls[] = $this->generateEntry($this->generateUrl('area-download'), ChangeFreq::MONTHLY, 0.5);
// Biblioteca
$urls[] = $this->generateEntry($this->generateUrl('biblioteca'), ChangeFreq::MONTHLY, 0.5);
$urls[] = $this->generateEntry($this->generateUrl('biblioteca-galleria'), ChangeFreq::MONTHLY, 0.5);
foreach (BibliotecaController::getGalleries() as $slug => $gallery) {
$urls[] = $this->generateEntry($this->generateUrl('biblioteca-galleria-slug', [ 'slug' => $slug ]), ChangeFreq::MONTHLY, 0.5);
}
// Articoli
$wordpressAPIService = new WordpressAPIService();
$page = 1;
do {
$q1 = $wordpressAPIService->getArticles($page, 100);
$totPages = $q1['totPages'] ?? -1;
$articles = $q1['articles'] ?? [];
foreach ($articles as $a) {
$urls[] = $this->generateEntry($this->generateUrl('articolo', [ 'slug' => $a['slug'] ?? "" ]), ChangeFreq::WEEKLY, 0.8);
}
$page++;
} while ($page <= $totPages);
/**/
// buildo il template XML
$response = new Response(
$this->renderView('pages/sitemap.html.twig', [
'urls' => $urls,
'hostname' => $hostname
]),
200
);
$response->headers->set('Content-Type', 'text/xml');
return $response;
}
// METODO che genera la entry da inserire nella sitemap
private function generateEntry(string $url, ChangeFreq $changefreq, float $priority=0.5, ?string $lastmod=null): array {
$priority = max(0.0, min(1.0, $priority)); // priorità compresa tra 0.0 e 1.0 inclusi
return [
'loc' => $url,
'changefreq' => $changefreq->value,
'priority' => $priority,
'lastmod' => $lastmod,
];
}
}