<?php
namespace App\Controller;
use App\Repository\ArticlesRepository;
use App\Repository\GlossariesRepository;
use App\Repository\TaxanomyRepository;
use App\Repository\LocationsFossilRepository;
use App\Repository\StratigraphyUnitsRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
#use Doctrine\ORM\EntityManagerInterface;
class URLRedirectorController extends AbstractController
{
private $router;
private $articlesRepository;
private $glossariesRepository;
private $taxanomyRepository;
private $locationsFossilRepository;
private $stratigraphyUnitsRepository;
private $translator;
public function __construct(
UrlGeneratorInterface $router,
ArticlesRepository $articlesRepository,
GlossariesRepository $glossariesRepository,
TaxanomyRepository $taxanomyRepository,
LocationsFossilRepository $locationsFossilRepository,
StratigraphyUnitsRepository $stratigraphyUnitsRepository,
TranslatorInterface $translator
) {
$this->router = $router;
$this->articlesRepository = $articlesRepository;
$this->glossariesRepository = $glossariesRepository;
$this->taxanomyRepository = $taxanomyRepository;
$this->locationsFossilRepository = $locationsFossilRepository;
$this->stratigraphyUnitsRepository = $stratigraphyUnitsRepository;
$this->translator = $translator;
}
/**
* @Route("/id_system")
* @Route("/id_system/{page}")
*/
public function id_system(string $page = null, Request $request, TranslatorInterface $translator)
{
if($page == 'fossil_id_search.php') {
if($request->query->get('cat')) {
if($request->query->get('pagina')) {
$page = $request->query->get('pagina');
} else {
$page = '1';
}
if($request->query->get('tijdperk')) {
$era_item = $this->stratigraphyUnitsRepository->findById($request->query->get('tijdperk'))[0];
$era = '[{"id":'.$era_item->getId().',"age_start":'.$era_item->getAgeStart().',"age_end":'.$era_item->getAgeEnd().',"value":"'.$era_item->getNameNl().'","name_en":"'.$era_item->getnameEn().'","color":"'.$era_item->getColor().'"}]';
} else {
$era = '[""]';
}
if($request->query->get('vindpl_id')) {
$location_item = $this->locationsFossilRepository->find($request->query->get('vindpl_id'));
$location = '[{"id":'.$location_item->getId().',"value":"'.$location_item->getNameNl().'","name_en":"'.$location_item->getNameEn().'","location":"'.$location_item->getLocation().'"}]';
} else {
$location = '[""]';
}
$taxanomy = $this->taxanomyRepository->findOldCategory($request->query->get('cat'))[0];
if($translator->getLocale() == 'nl') {
$name = $taxanomy->getNameNl();
} else {
$name = $taxanomy->getNameEn();
}
return new RedirectResponse($this->router->generate('fossildb', [ 'page' => $page, 'filter[era]' => $era, 'filter[location]' => $location, 'filter[taxanomy]' => '[{"id":'.$taxanomy->getId().',"value":"'.$name.' ('.$taxanomy->getNameScientific().')","filename":"'.strtolower($taxanomy->getNameScientific().$taxanomy->getNameScientificClarification()).'"}]', ]));
} else {
return new RedirectResponse($this->router->generate('fossildb'));
}
} else {
return new RedirectResponse($this->router->generate('fossildb'));
}
}
/**
* @Route("/sites/{page}")
*/
public function sites(string $page = null, Request $request)
{
#ToDo-Ante: deze pagina's bestaan niet op de nieuwe site.
# /sites/stratigraphic_column.php
# ToDo-Ante: https://www.paleontica.org/sites/fossil_site_category.php?cat=35
if($page == 'all_sites_overview.php' || $page == 'fossil_site_overview.php' || $page == 'geology_site_overview.php' || $page == 'museum_site_overview.php' || $page == 'society_site_overview.php') {
if($request->query->get('landselect')) {
return new RedirectResponse($this->router->generate('locations_gis', [ 'country' => $request->query->get('landselect') ]));
} else {
return new RedirectResponse($this->router->generate('locations_gis'));
}
}
elseif($page == 'fossil_site.php') {
if($request->query->get('plaats')) {
return new RedirectResponse($this->router->generate('locations_fossil', [ 'id' => $request->query->get('plaats') ]));
} else {
return new RedirectResponse($this->router->generate('locations_gis'));
}
}
elseif($page == 'geology_site.php') {
if($request->query->get('plaats')) {
return new RedirectResponse($this->router->generate('locations_geology', [ 'id' => $request->query->get('plaats') ]));
} else {
return new RedirectResponse($this->router->generate('locations_gis'));
}
}
elseif($page == 'museum_site.php') {
if($request->query->get('plaats')) {
return new RedirectResponse($this->router->generate('locations_museum', [ 'id' => $request->query->get('plaats') ]));
} else {
return new RedirectResponse($this->router->generate('locations_gis'));
}
}
elseif($page == 'society_site.php') {
if($request->query->get('plaats')) {
return new RedirectResponse($this->router->generate('locations_society', [ 'id' => $request->query->get('plaats') ]));
} else {
return new RedirectResponse($this->router->generate('locations_gis'));
}
}
elseif($page == 'geology_maps.php') {
return new RedirectResponse($this->router->generate('geologic_maps'));
}
}
/**
* @Route("/information/{page}")
*/
public function information(string $page = null, Request $request)
{
if($page == 'links.php') {
return new RedirectResponse($this->router->generate('links'));
}
if($page == 'geologic_timescale.php') {
return new RedirectResponse($this->router->generate('geologic_timescale'));
}
elseif($page == 'article.php') {
$article = $this->articlesRepository->find($request->query->get('id'));
if(!is_null($article)) {
return new RedirectResponse($this->router->generate('article', ['id' => $article->getId(), 'url' => $article->getUrl()]));
}
elseif(is_null($article)) {
$article = $this->glossariesRepository->find($request->query->get('id'));
return new RedirectResponse($this->router->generate('glossary', ['id' => $article->getId(), 'url' => $article->getUrl()]));
}
}
}
}