src/Controller/SpecieslistController.php line 211

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Knp\Component\Pager\PaginatorInterface;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. use App\Form\SpecieslistSearchFormType;
  11. use App\Repository\TaxanomyRepository;
  12. use App\Repository\LocationsFossilRepository;
  13. use App\Repository\StratigraphyUnitsRepository;
  14. Use App\Entity\LocationsFossil;
  15. Use App\Entity\StratigraphyUnits;
  16. Use App\Entity\Taxanomy;
  17. class SpecieslistController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/specieslist/", name="specieslist")
  21.      */
  22.     public function specieslist(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  23.     {
  24.         /*
  25.         ToDo-Ante: Index voor soortenlijst. Zie:
  26.             https://paleontica.org/id_system/species_list.php
  27.             https://paleontica.org/id_system/species_list_stratigraphy.php
  28.         */
  29.         if($_ENV['DISABLE_FORMS'] == "true") { return $this->render('maintenance_form_disabled.html.twig'); }
  30.         $filter = array( 'location' => '[""]''era' => '[""]''epoch' => '[""]''stage' => '[""]');
  31.         $form $this->createForm(SpecieslistSearchFormType::class);
  32.         $form->handleRequest($request);
  33.         if ($form->isSubmitted() && $form->isValid()){
  34.             $fossil $form->getData();
  35.             if(!is_null($fossil['location_fossil'])) {
  36.                 $location_fossil json_decode($fossil['location_fossil'])[0]->id;
  37.             } else {
  38.                 $location_fossil=null;
  39.             }
  40.             if(!is_null($fossil['era'])) {
  41.                 $era json_decode($fossil['era'])[0]->id;
  42.             } else {
  43.                 $era=null;
  44.             }
  45.             if(!is_null($fossil['epoch'])) {
  46.                 $epoch json_decode($fossil['epoch'])[0]->id;
  47.             } else {
  48.                 $epoch=null;
  49.             }
  50.             if(!is_null($fossil['stage'])) {
  51.                 $stage json_decode($fossil['stage'])[0]->id;
  52.             } else {
  53.                 $stage=null;
  54.             }
  55.             if(!is_null($fossil['formation'])) {
  56.                 $formation json_decode($fossil['formation'])[0]->id;
  57.             } else {
  58.                 $formation=null;
  59.             }
  60.             if(!is_null($fossil['member'])) {
  61.                 $member json_decode($fossil['member'])[0]->id;
  62.             } else {
  63.                 $member=null;
  64.             }
  65.             if($location_fossil && is_null($era) && is_null($epoch) && is_null($stage) && is_null($formation) && is_null($member)) {
  66.                 $type 'location';
  67.                 $id $location_fossil;
  68.             }
  69.             elseif(is_null($location_fossil) && $era && is_null($epoch) && is_null($stage) && is_null($formation) && is_null($member)) {
  70.                 $type 'era';
  71.                 $id $era;
  72.             }
  73.             elseif(is_null($location_fossil) && $era && $epoch && is_null($stage) && is_null($formation) && is_null($member)) {
  74.                 $type 'epoch';
  75.                 $id $epoch;
  76.             }
  77.             elseif(is_null($location_fossil) && $era && $epoch && $stage && is_null($formation) && is_null($member)) {
  78.                 $type 'stage';
  79.                 $id $stage;
  80.             }
  81.             elseif(is_null($location_fossil) && is_null($era) && is_null($epoch) && is_null($stage) && $formation && is_null($member)) {
  82.                 $type 'formation';
  83.                 $id $formation;
  84.             }
  85.             elseif(is_null($location_fossil) && is_null($era) && is_null($epoch) && is_null($stage) && $formation && $member) {
  86.                 $type 'member';
  87.                 $id $member;
  88.             }
  89.             else {
  90.                 return $this->render('error_message.html.twig', [
  91.                     'error_title' => $translator->trans("Fout"),
  92.                     'error_message' => $translator->trans("Selecteer of een locatie of een tijdperk of een formatie."),
  93.                 ]);
  94.             }
  95.             return $this->redirectToRoute('specieslist_item', [ 'type' => $type'id' => $id]);
  96.         }
  97.         return $this->render('specieslist_search.html.twig', [
  98.             'filter' => $filter,
  99.             'formname' => 'specieslist_search_form',
  100.             'title' => $translator->trans("Soortenlijst openen"),
  101.             'form' => $form->createView()
  102.         ]);
  103.     }
  104.     /**
  105.      * @Route("/specieslist/{type}/{id}", name="specieslist_item")
  106.      */
  107.     public function specieslist_item(string $typeint $idEntityManagerInterface $em)
  108.     {
  109.         if($type == 'location') {
  110.             $repository $this->getDoctrine()->getRepository(LocationsFossil::class);
  111.             $title $repository->findOneBy(array('id' => $id));
  112.         } else {
  113.             $repository $this->getDoctrine()->getRepository(StratigraphyUnits::class);
  114.             $title $repository->findOneBy(array('type' => $type'id' => $id));
  115.         }
  116.         $parents=array();
  117.         if($type == 'era') {
  118.             $periodename strtolower($title->getNameEn());
  119.         } elseif($type == 'epoch' || $type == 'stage') {
  120.             $qb $em->createQueryBuilder('s')
  121.                 ->from('App\Entity\StratigraphyUnits''s')
  122.                 ->addSelect('s')
  123.                 ->andWhere("s.type = 'era'")
  124.                 ->andWhere("s.age_start <= (:start)")
  125.                 ->andWhere("s.age_end >= (:end)")
  126.                 ->setParameter('start'$title->getAgeStart())
  127.                 ->setParameter('end'$title->getAgeEnd())
  128.                 ->setMaxResults(1)
  129.             ;
  130.             $db_result $qb->getQuery()->getOneOrNullResult();
  131.             $periodename strtolower($db_result->getNameEn());
  132.             $parents[]=$db_result;
  133.             if($type == 'stage') {
  134.                 $qb $em->createQueryBuilder('s')
  135.                     ->from('App\Entity\StratigraphyUnits''s')
  136.                     ->addSelect('s')
  137.                     ->andWhere("s.type = 'epoch'")
  138.                     ->andWhere("s.age_start <= (:start)")
  139.                     ->andWhere("s.age_end >= (:end)")
  140.                     ->setParameter('start'$title->getAgeStart())
  141.                     ->setParameter('end'$title->getAgeEnd())
  142.                     ->setMaxResults(1)
  143.                 ;
  144.                 $db_result $qb->getQuery()->getOneOrNullResult();
  145.                 $parents[]=$db_result;
  146.             }
  147.         } else {
  148.             $periodename null;
  149.         }
  150.         if($type == 'location') {
  151.             $query $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.location_fossil = (:location) GROUP BY f.taxanomy')
  152.                     ->setParameter('location'$id);
  153.         } elseif($type == 'era') {
  154.             $query $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.era = (:id) GROUP BY f.taxanomy')
  155.                     ->setParameter('id'$id);
  156.         } elseif($type == 'epoch') {
  157.             $query $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.epoch = (:id) GROUP BY f.taxanomy')
  158.                         ->setParameter('id'$id);
  159.         } elseif($type == 'stage') {
  160.             $query $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.stage = (:id) GROUP BY f.taxanomy')
  161.                         ->setParameter('id'$id);
  162.         } elseif($type == 'formation') {
  163.             $query $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.formation = (:title) GROUP BY f.taxanomy')
  164.                         ->setParameter('title'$id);
  165.         } elseif($type == 'member') {
  166.             $query $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.member = (:title) GROUP BY f.taxanomy')
  167.                         ->setParameter('title'$id);
  168.         }
  169.         $taxanomy_group_result $query->getResult();
  170.         $i=0;
  171.         $taxonomies=array();
  172.         return $this->render('specieslist_item.html.twig', [
  173.             'taxonomies' => $taxanomy_group_result,
  174.             'title' => $title,
  175.             'type' => $type,
  176.             'id' => $id,
  177.             'periodname' => $periodename,
  178.             'parents' => $parents,
  179.         ]);
  180.     }
  181.     /**
  182.      * @Route("/specieslist/{type}/{id}/{taxanomyid}", name="specieslist_species")
  183.      */
  184.     public function specieslist_species(string $typeint $idint $taxanomyidEntityManagerInterface $emRequest $requestPaginatorInterface $paginator)
  185.     {
  186.         if($type == 'location') {
  187.             $repository $this->getDoctrine()->getRepository(LocationsFossil::class);
  188.             $title $repository->findOneBy(array('id' => $id));
  189.         } else {
  190.             $repository $this->getDoctrine()->getRepository(StratigraphyUnits::class);
  191.             $title $repository->findOneBy(array('type' => $type'id' => $id));
  192.             //dd($title->getNameEn());
  193.         }
  194.         if($taxanomyid == 0) {
  195.             $taxanomyid null;
  196.         }
  197.         if($type == 'location') {
  198.             $query $em->createQuery('SELECT DISTINCT f.genus,f.species FROM App\Entity\FossildbFossil f WHERE f.location_fossil = (:location) AND f.taxanomy = (:taxanomy) ORDER BY f.genus,f.species');
  199.             $query->setParameter('location'$id);
  200.         }
  201.         elseif($type == 'era') {
  202.             $query $em->createQuery('SELECT DISTINCT f.genus,f.species FROM App\Entity\FossildbFossil f WHERE f.era = (:era) AND f.taxanomy = (:taxanomy) ORDER BY f.genus,f.species');
  203.             $query->setParameter('era'$id);
  204.         }
  205.         elseif($type == 'epoch') {
  206.             $query $em->createQuery('SELECT DISTINCT f.genus,f.species FROM App\Entity\FossildbFossil f WHERE f.epoch = (:epoch) AND f.taxanomy = (:taxanomy) ORDER BY f.genus,f.species');
  207.             $query->setParameter('epoch'$id);
  208.         }
  209.         elseif($type == 'stage') {
  210.             $query $em->createQuery('SELECT DISTINCT f.genus,f.species FROM App\Entity\FossildbFossil f WHERE f.stage = (:stage) AND f.taxanomy = (:taxanomy) ORDER BY f.genus,f.species');
  211.             $query->setParameter('stage'$id);
  212.         }
  213.         elseif($type == 'formation') {
  214.             $query $em->createQuery('SELECT DISTINCT f.genus,f.species FROM App\Entity\FossildbFossil f WHERE f.formation = (:formation) AND f.taxanomy = (:taxanomy) ORDER BY f.genus,f.species');
  215.             $query->setParameter('formation'$id);
  216.         }
  217.         elseif($type == 'member') {
  218.             $query $em->createQuery('SELECT DISTINCT f.genus,f.species FROM App\Entity\FossildbFossil f WHERE f.member = (:member) AND f.taxanomy = (:taxanomy) ORDER BY f.genus,f.species');
  219.             $query->setParameter('member'$id);
  220.         }
  221.         $query->setParameter('taxanomy'$taxanomyid);
  222.         $fossils $query->getResult();
  223.         if(is_null($taxanomyid)) {
  224.             $queryglossary $em->createQuery("SELECT g FROM App\Entity\Glossaries g WHERE g.url = 'Incertae-sedis'" );
  225.             $glossarytype $queryglossary->getResult()[0];
  226.             $taxanomytype = array(
  227.                 'namenl' => "Incerta Sedis (Onbekend)",
  228.                 'nameen' => "Incerta Sedis (Unknown)",
  229.                 'namescientific' => "incertae sedis",
  230.                 'namescientificclarification' => null,
  231.                 'glossary' => $glossarytype,
  232.             );
  233.         } else {
  234.             $querytaxanomy $em->createQuery('SELECT t FROM App\Entity\Taxanomy t WHERE t.id = (:taxanomy)');
  235.             $querytaxanomy->setParameter('taxanomy'$taxanomyid);
  236.             $taxanomytype $querytaxanomy->getResult()[0];
  237.         }
  238.         foreach ($fossils as $i => $fossil) {
  239.             if($type == 'location') {
  240.                 $fossilsquery $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.location_fossil = (:id) AND f.taxanomy = (:taxanomy) AND f.genus = (:genus) AND f.species = (:species)');
  241.             } elseif($type == 'era') {
  242.                 $fossilsquery $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.era = (:id) AND f.taxanomy = (:taxanomy) AND f.genus = (:genus) AND f.species = (:species)');
  243.             } elseif($type == 'epoch') {
  244.                 $fossilsquery $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.epoch = (:id) AND f.taxanomy = (:taxanomy) AND f.genus = (:genus) AND f.species = (:species)');
  245.             } elseif($type == 'stage') {
  246.                 $fossilsquery $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.stage = (:id) AND f.taxanomy = (:taxanomy) AND f.genus = (:genus) AND f.species = (:species)');
  247.             } elseif($type == 'formation') {
  248.                 $fossilsquery $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.formation = (:id) AND f.taxanomy = (:taxanomy) AND f.genus = (:genus) AND f.species = (:species)');
  249.             } elseif($type == 'member') {
  250.                 $fossilsquery $em->createQuery('SELECT f FROM App\Entity\FossildbFossil f WHERE f.member = (:id) AND f.taxanomy = (:taxanomy) AND f.genus = (:genus) AND f.species = (:species)');
  251.             }
  252.             $fossilsquery->setParameter('id'$id);
  253.             $fossilsquery->setParameter('taxanomy'$taxanomyid);
  254.             $fossilsquery->setParameter('genus'$fossil['genus']);
  255.             $fossilsquery->setParameter('species'$fossil['species']);
  256.             $fossils[$i]['fossils'] = $fossilsquery->getResult();
  257.             foreach ($fossils[$i]['fossils'] as $j => $fossil) {
  258.                 if($fossil->getPublication() != "") {
  259.                     $fossils[$i]['publication'] = $fossil->getPublication();
  260.                 }
  261.             }
  262.         }
  263.         $fossilspagnation $paginator->paginate(
  264.             $fossils,
  265.             $request->query->getInt('page'1),
  266.             10
  267.         );
  268.         return $this->render('specieslist_species.html.twig', [
  269.             'fossils' => $fossilspagnation,
  270.             'taxanomytype' => $taxanomytype,
  271.             'title' => $title,
  272.             'type' => $type,
  273.             'id' => $id,
  274.         ]);
  275.     }
  276. }