src/Controller/DefaultController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Altro;
  4. use App\Entity\Opera;
  5. use App\Entity\Mostra;
  6. use App\Entity\Articolo;
  7. use App\Entity\Documento;
  8. use App\Entity\Tipoopera;
  9. use Doctrine\DBAL\Types\Type;
  10. use App\Entity\OperaMultimedia;
  11. use App\Entity\MostraMultimedia;
  12. use Symfony\Component\Form\Forms;
  13. use Symfony\Component\Form\FormEvent;
  14. use Symfony\Component\Form\FormEvents;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use Symfony\Component\Form\FormInterface;
  17. use Symfony\Component\HttpFoundation\Cookie;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  23. use Symfony\Component\Form\Extension\Core\Type\SearchType;
  24. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
  27. Type::overrideType('datetime''Doctrine\DBAL\Types\VarDateTimeType');
  28. Type::overrideType('datetimetz''Doctrine\DBAL\Types\VarDateTimeType');
  29. Type::overrideType('time''Doctrine\DBAL\Types\VarDateTimeType');
  30. class DefaultController extends AbstractController
  31. {
  32.     #[Route('/'name'homepage')]
  33.     public function index(): Response
  34.     {
  35.         return $this->render('frontend/homepage.html.twig');
  36.     }
  37.     #[Route("/notizie-biografiche"name"notizieBiografiche")]
  38.     public function notizieBiografiche(Request $request): Response
  39.     {
  40.         return $this->redirectToRoute('homepage');
  41.         // return $this->render('frontend/notiziebiografiche.html.twig');
  42.     }
  43.     // Pagina Archivio del sito pubblico
  44.     #[Route('/archivio'name'archivio')]
  45.     public function archivioPubblico(): Response
  46.     {
  47.         return $this->render('archivio/archivio-pubblico.html.twig');
  48.     }
  49.     // Homepage della nuova pagina Archivio che รจ come se fosse un sito separato
  50.     #[Route('/archivio-homepage'name'archivio-homepage')]
  51.     public function archivioHomepage(): Response
  52.     {
  53.         return $this->render('archivio/archivio-homepage.html.twig');
  54.     }
  55.     #[Route("/archivio-opere"name"archivio-opere")]
  56.     public function opereArchivio(Request $requestManagerRegistry $doctrine): Response
  57.     {
  58.         // Tipo opera
  59.         $selected_tipo_opera "S"// the default required value is Scultura
  60.         $selected_year "";
  61.         
  62.         $tipo_opera_repo $doctrine->getRepository(Tipoopera::class);
  63.         
  64.         $all_tipo_opera $tipo_opera_repo->findBy([], ['priority' => 'ASC']);
  65.         $choices_tipo_opera = array();
  66.                 
  67.         foreach ($all_tipo_opera as $tipo_opera) {
  68.             if(strcmp($tipo_opera->getSigla(), "L") != 0){
  69.                 $type $tipo_opera->getTipo();
  70.                 if(strcmp($tipo_opera->getSigla(), "D") == 0){
  71.                     $type strtoupper("$type - Collage");
  72.                 }
  73.                 $choices_tipo_opera[$type] = $tipo_opera->getSigla();
  74.             }
  75.         }
  76.         
  77.         $operas_repo $doctrine->getRepository(Opera::class);
  78.         
  79.         $query_opera_years $operas_repo->createQueryBuilder("opera")
  80.                             ->select("opera.anno")
  81.                             ->orderBy("opera.anno");
  82.         
  83.         $all_years $query_opera_years->getQuery()->getResult();
  84.         
  85.         $choices_year = array();
  86.         
  87.         foreach ($all_years as $year) {
  88.             $year_str $year['anno'];
  89.             if(strcmp("$year_str""") != 0){
  90.                 $choices_year["$year_str"] = "$year_str";
  91.             }
  92.         }
  93.         
  94.         $dynamicFormModifier = function (FormInterface $formstring $sigla_tipoopera nullstring $input_year null) use ($doctrine){
  95.             
  96.             if(!is_null($sigla_tipoopera)){
  97.             
  98.                 $operas_repo $doctrine->getRepository(Opera::class);
  99.                 $query_tipoopera_years $operas_repo->createQueryBuilder("opera")
  100.                                 ->select("opera.anno")
  101.                                 ->join("opera.multimedias""ms")
  102.                                 ->join("opera.idtipoopera""tipoopera")
  103.                                 ->join("ms.multimedia""m")
  104.                                 ->where("m.tipo='image'");
  105.                 if(strcmp($sigla_tipoopera"") != 0){
  106.                     $query_tipoopera_years $query_tipoopera_years->where("tipoopera.sigla = :sigla")->setParameter(":sigla"$sigla_tipoopera);
  107.                 }
  108.                 $query_tipoopera_years $query_tipoopera_years->orderBy("opera.anno");
  109.                 $subset_years $query_tipoopera_years->getQuery()->getResult();
  110.                 $choices_year = array();
  111.                 
  112.                 $previously_selected_year_contained FALSE;
  113.                 foreach ($subset_years as $year) {
  114.                     $year_str $year['anno'];
  115.                     if(strcmp("$year_str""") != 0){
  116.                         $choices_year["$year_str"] = "$year_str";
  117.                         // if we find out that the previously selected year is contained in the array of years
  118.                         if(strcmp($input_year$year_str) == 0){
  119.                             $previously_selected_year_contained TRUE;
  120.                         }
  121.                     }
  122.                 }
  123.                 
  124.                 $selected_year $input_year;
  125.                 
  126.                 if(!is_null($selected_year) && strcmp($selected_year"") != && $previously_selected_year_contained){
  127.                     
  128.                     $form->add('year'ChoiceType::class, array(
  129.                         'choices' => $choices_year,
  130.                         'attr' => array('onchange' => 'this.form.submit()'),
  131.                         'placeholder' => 'SELEZIONA ANNO',
  132.                         'data' => "$selected_year"
  133.                     ));
  134.                     
  135.                 }else{
  136.                     
  137.                     $form->add('year'ChoiceType::class, array(
  138.                         'choices' => $choices_year,
  139.                         'attr' => array('onchange' => 'this.form.submit()'),
  140.                         'placeholder' => 'SELEZIONA ANNO'
  141.                     ));
  142.                 }
  143.             }
  144.         };
  145.         
  146.         //Create a form builder for page number
  147.         $formFactory Forms::createFormFactory();
  148.         $form_operas_type_and_year $formFactory->createBuilder()
  149.             ->add('operas_type'ChoiceType::class, 
  150.                 array(
  151.                     'choices' => $choices_tipo_opera,
  152.                     'placeholder' => 'SELEZIONA TIPO',
  153.                     'attr' => array('onchange' => 'this.form.submit()')
  154.                 )
  155.             )
  156.             ->add('year'ChoiceType::class, 
  157.                 array(
  158.                     'choices' => $choices_year,
  159.                     'attr' => array('onchange' => 'this.form.submit()'),
  160.                     'placeholder' => 'SELEZIONA ANNO'
  161.                 )
  162.             )
  163.             ->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) use ($dynamicFormModifier)
  164.                 {
  165.                     $data $event->getData();
  166.                     $dynamicFormModifier($event->getForm(), $data['operas_type'], $data['year']);
  167.                 }
  168.             )
  169.             ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($doctrine)
  170.                 {
  171.                     $data $event->getData();
  172.                     $sigla_tipoopera $data['operas_type'];
  173.                     
  174.                     if(strcmp($sigla_tipoopera"") != 0){
  175.                         
  176.                         $operas_repo $doctrine->getRepository(Opera::class);
  177.                         $query_tipoopera_years $operas_repo->createQueryBuilder("opera")
  178.                             ->select("opera.anno")
  179.                             ->join("opera.multimedias""ms")
  180.                             ->join("opera.idtipoopera""tipoopera")
  181.                             ->join("ms.multimedia""m")
  182.                             ->where("m.tipo='image'")
  183.                             ->where("tipoopera.sigla = :sigla")->setParameter(":sigla"$sigla_tipoopera);
  184.                         $query_tipoopera_years $query_tipoopera_years->orderBy("opera.anno");
  185.                         $subset_years $query_tipoopera_years->getQuery()->getResult();
  186.                         
  187.                         $choices_year = array();
  188.                         foreach ($subset_years as $year) {
  189.                             $year_str $year['anno'];
  190.                             if(strcmp("$year_str""") != 0){
  191.                                 $choices_year[] = "$year_str";
  192.                             }
  193.                         }
  194.                         
  195.                         if(!in_array($data["year"], $choices_year)){
  196.                             $data["year"] = "";
  197.                             $event->setData($data);
  198.                         }
  199.                         
  200.                     }
  201.                 }
  202.             )
  203.             ->getForm();
  204.         
  205.         $form_operas_type_and_year->handleRequest();
  206.         
  207.         if($form_operas_type_and_year->isSubmitted() && $form_operas_type_and_year->isValid()){
  208.             $selected_tipo_opera $form_operas_type_and_year->getData()["operas_type"];
  209.             $selected_year $form_operas_type_and_year->getData()["year"];
  210.         }
  211.         
  212.         // get operas
  213.         $query_opere $operas_repo->createQueryBuilder("opera")
  214.                 ->distinct("opera.id")
  215.                 ->join("opera.multimedias""ms")
  216.                 ->join("ms.multimedia""m")
  217.                 ->join("opera.idtipoopera""tipoopera")
  218.                 ->where("m.tipo = 'image'")
  219.                 ->where("opera.visibile = true");
  220.         
  221.         // force NULL selection to Scultura
  222.         if(is_null($selected_tipo_opera)){
  223.             $selected_tipo_opera "S";
  224.         }
  225.         
  226.         // this if-statement should be removed 
  227.         if(strcmp($selected_tipo_opera"") != 0){
  228.             $query_opere $query_opere->andWhere("tipoopera.sigla = :sigla")->setParameter("sigla"$selected_tipo_opera);
  229.             // If the user selects DISEGNI we also want to add COLLAGE to the results
  230.             if(strcmp($selected_tipo_opera"D") == 0){
  231.                 $query_opere $query_opere->andWhere("tipoopera.sigla = :selected OR tipoopera.sigla = :collage")
  232.                         ->setParameter('selected'$selected_tipo_opera)
  233.                         ->setParameter("collage""L");
  234.             }
  235.         }
  236.         
  237.         if(!is_null($selected_year) && strcmp($selected_year"") != 0){
  238.             $query_opere $query_opere->andWhere("opera.anno = :anno")->setParameter("anno"$selected_year);
  239.         }
  240.         
  241.         // order operas by descendent year 1985 - 1984 ...
  242.         // $query_opere = $query_opere->orderBy("opera.anno", "DESC");
  243.         
  244.         // as required by the customer we want a special selection when TipoSculture = "S" and Y = 1985
  245.         // i.e. we want only operas with ids = 915/916/905/532 - 534/537/910/538
  246.         if(strcmp($selected_tipo_opera"S") == && (is_null($selected_year) || (!is_null($selected_year) && (strcmp($selected_year"1985") == 0) || strcmp($selected_year"") == 0))){
  247.             $special_ids = ["915""916""905""532""534""537""910""538"];
  248.             $query_opere $query_opere->andWhere("opera.id IN (:special_ids)")->setParameter("special_ids"$special_ids);
  249.             $query_opere $query_opere->orderBy("opera.datainserimento""ASC");
  250.         } else {
  251.             $query_opere $query_opere->addOrderBy("opera.anno","desc");
  252.             $query_opere $query_opere->addOrderBy("opera.numprogressivoanno","asc");
  253.         }
  254.         
  255.         $opere $query_opere->setMaxResults(20)->getQuery()->getResult();
  256.         
  257.         $cover_presence = [];
  258.         
  259.         foreach ($opere as $opera){
  260.             $id_opera $opera->getId();
  261.             foreach ($opera->getMultimedias() as $m ){
  262.                 if ($m->getCover())
  263.                     $cover_presence[$id_opera] = True;
  264.             }
  265.             if(!array_key_exists($id_opera$cover_presence))
  266.                 $cover_presence[$id_opera] = False;
  267.         }
  268.         
  269.         return $this->render('archivio/archivio-opere.html.twig'
  270.             array(
  271.                 "opere" => $opere,
  272.                 "cover_presence" => $cover_presence,
  273.                 "form_operas_type_and_year" => $form_operas_type_and_year->createView(),
  274.                 "selected_tipoopera" => $selected_tipo_opera,
  275.                 "selected_year" => $selected_year
  276.             ));
  277.     }
  278.     #[Route("/opere"name"opere")]
  279.     public function opere(Request $requestManagerRegistry $doctrine): Response
  280.     {
  281.         return $this->render('frontend/opere.html.twig', [
  282.         ]);
  283.     }
  284.     #[Route("/dettaglio-opere/{categoria?}"name"dettaglioOpere")]
  285.     public function dettaglioOpere(Request $requestManagerRegistry $doctrine$categoria): Response
  286.     {
  287.         
  288.         $tipo intval($_GET['tipo'] ?? 1);
  289.         if ($categoria != 'nel-tempo' and $categoria != 'nei-materiali') {
  290.             $categoria 'nel-tempo';
  291.         }
  292.         if ($categoria == 'nel-tempo') {
  293.             $tipi = [
  294.                 => ['label' => 'Esordi''id' => [4713629473110]], // Esordi
  295.                 => ['label' => 'Verso il figurativo indiretto''id' => [6122991607622559641]], // Verso il figurativo indiretto
  296.                 => ['label' => 'Figurativo indiretto''id' => [66829562995683684743698685761]], // Il figurativo indiretto
  297.                 => ['label' => 'Le foglie''id' => [765766411141165293100531537]], // Le foglie
  298.                 => ['label' => 'Il colore''id' => [9059159165349104119906985]] // Il colore
  299.             ];
  300.         } else {
  301.             $tipi = [
  302.                 => ['label' => 'Ulivo e tiglio''id' => [520519522511]], // Ulivo e tiglio
  303.                 => ['label' => 'Mogano, abete e cirmolo''id' => [5915936826816374121]], // Mogano e abete
  304.                 => ['label' => 'Onice e Alabastro''id' => [8352994842836841839837]], // Onice e Alabastro
  305.                 => ['label' => 'Trachite e pietra di Vicenza''id' => [848700658680]], // Trachite
  306.                 => ['label' => 'Ferro''id' => [5324969094975022955]], // Ferro
  307.                 => ['label' => 'Vetroresina, titanio e alluminio''id' => [6999609619624102614]] // Altri metalli
  308.             ];
  309.         }
  310.         $idOpere $tipi[$tipo] ?? $tipi[1];
  311.         $title $idOpere['label'] ?? '';
  312.         $opere = [];
  313.         foreach ($idOpere['id'] as $id) {
  314.             $opera $this->getDoctrine()->getRepository(Opera::class)->find($id);
  315.             $opere[$id] = $opera;
  316.         }
  317.         $categoriaTitle 'Nel tempo';
  318.         if ($categoria == 'nei-materiali') {
  319.             $categoriaTitle 'Nei materiali';
  320.         }
  321.         return $this->render('frontend/opere-dettaglio.html.twig', [
  322.             'title' => $title,
  323.             'opere' => $opere,
  324.             'categoria' => $categoria,
  325.             'categoriaTitle' => $categoriaTitle,
  326.             'tipi' => $tipi,
  327.             'tipo' => $tipo
  328.         ]);
  329.     }
  330.     
  331.     #[Route("/monografie-cataloghi"name"monografieCataloghi")]
  332.     public function monografieCataloghi(Request $requestManagerRegistry $doctrine): Response
  333.     {
  334.         /**
  335.          * @since 2023-11-20
  336.          */
  337.         return $this->redirectToRoute('homepage');
  338.         $documents_repo $doctrine->getRepository(Documento::class);
  339.         
  340.         $monografie_query $documents_repo->createQueryBuilder("doc")
  341.                         ->where("doc.tipo = 'monografia'")
  342.                         ->orderBy("doc.anno""DESC");
  343.         $monografie $monografie_query->getQuery()->getResult();
  344.         
  345.         $cataloghi_query $documents_repo->createQueryBuilder("doc")
  346.                         ->where("doc.tipo = 'catalogo'")
  347.                         ->orderBy("doc.anno""DESC");
  348.         $cataloghi $cataloghi_query->getQuery()->getResult();
  349.         
  350.         $libri_query $documents_repo->createQueryBuilder("doc")
  351.                         ->where("doc.tipo = 'libro'")
  352.                         ->orderBy("doc.anno""DESC");
  353.         $libri $libri_query->getQuery()->getResult();
  354.         
  355.         return $this->render('frontend/monografiecataloghi.html.twig',
  356.                 array(
  357.                     "monografie" => $monografie,
  358.                     "cataloghi" => $cataloghi,
  359.                     "libri" => $libri
  360.                 ));
  361.     }
  362.     #[Route("/archivio-mostre"name"archivio-mostre")]
  363.     public function mostre(Request $requestManagerRegistry $doctrine): Response
  364.     {
  365.         /**
  366.          * @since 2023-11-20
  367.          */
  368.         // return $this->redirectToRoute('homepage');
  369.         $mostra_repo $doctrine->getRepository(Mostra::class);
  370.         $mostraMultimedia $doctrine->getRepository(MostraMultimedia::class);
  371.         
  372.         $mostre_personali $mostra_repo->createQueryBuilder("m")
  373.                             ->where("m.personale = TRUE")
  374.                             ->orderBy('m.numprogressivaanno''ASC')
  375.                             ->getQuery()->getResult();
  376.         
  377.         $mostre_collettive $mostra_repo->createQueryBuilder("m")
  378.                             ->where("m.collettiva = TRUE")
  379.                             ->getQuery()->getResult();
  380.         $anniMostrePersonali = [];
  381.         $i 0;
  382.         foreach ($mostre_personali as $mostraPersonale) {
  383.             if (!isset($anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()])) {
  384.                 $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['mostra'] = $mostraPersonale;
  385.                 
  386.                 $idEsposizione $mostraPersonale->getId();
  387.     
  388.                 $queryImmagine $mostraMultimedia->createQueryBuilder('mm')
  389.                     ->join('mm.multimedia''file')
  390.                     ->select('file.fileref, file.estensione')
  391.                     ->where("mm.mostra = {$idEsposizione} AND file.estensione = 'pdf'")
  392.                     ->orderBy('mm.id''ASC')
  393.                     ->setMaxResults(1)
  394.                     ->getQuery();
  395.                 if (!empty($queryImmagine->getResult()[0])) {
  396.                     $immagineEsposizione $queryImmagine->getResult()[0];
  397.                     $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['fileref'] = str_replace('-'''$immagineEsposizione['fileref']);
  398.                     $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['estensione'] = $immagineEsposizione['estensione'];
  399.                 }
  400.             }
  401.             $i++;
  402.         }
  403.         ksort($anniMostrePersonali);
  404.         $anniMostreCollettive = [];
  405.         $i 0;
  406.         foreach ($mostre_collettive as $mostraCollettiva) {
  407.             if (!isset($anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()])) {
  408.                 $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['mostra'] = $mostraCollettiva;
  409.                 $idEsposizione $mostraCollettiva->getId();
  410.     
  411.                 $queryImmagine $mostraMultimedia->createQueryBuilder('mm')
  412.                     ->join('mm.multimedia''file')
  413.                     ->select('file.fileref, file.estensione')
  414.                     ->where("mm.mostra = {$idEsposizione} AND file.estensione = 'pdf'")
  415.                     ->orderBy('mm.id''ASC')
  416.                     ->setMaxResults(1)
  417.                     ->getQuery();
  418.                 if (!empty($queryImmagine->getResult()[0])) {
  419.                     $immagineEsposizione $queryImmagine->getResult()[0];
  420.                     $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['fileref'] = str_replace('-'''$immagineEsposizione['fileref']);
  421.                     $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['estensione'] = $immagineEsposizione['estensione'];
  422.                 }
  423.             }
  424.             
  425.             $i++;
  426.         }
  427.         ksort($anniMostreCollettive);
  428.         // return $this->render('frontend/mostre.html.twig', 
  429.         return $this->render(
  430.             'esposizioni/esposizioni-archivio.html.twig'
  431.             array(
  432.                 "mostre_personali" => $mostre_personali
  433.                 "mostre_collettive" => $mostre_collettive,
  434.                 "anniMostrePersonali" => $anniMostrePersonali,
  435.                 "anniMostreCollettive" => $anniMostreCollettive
  436.             )
  437.         );
  438.     }
  439.     #[Route("/emeroteca"name"emeroteca")]
  440.     public function emeroteca(Request $requestManagerRegistry $doctrine): Response
  441.     {
  442.         /**
  443.          * @since 2023-11-20
  444.          */
  445.         return $this->redirectToRoute('homepage');
  446.         $articles $doctrine->getRepository(Articolo::class)->findBy([], ["anno" => "DESC"]);
  447.         
  448.         return $this->render('frontend/emeroteca.html.twig',
  449.                 array(
  450.                     'articles' => $articles
  451.                 ));
  452.     }
  453.     #[Route("/altro"name"altro")]
  454.     public function altro(Request $request): Response
  455.     {
  456.         /**
  457.          * @since 2023-11-20
  458.          */
  459.         return $this->redirectToRoute('homepage');
  460.         $altro $this->getDoctrine()->getRepository(Altro::class)->findAll();
  461.         
  462.         return $this->render('frontend/altro.html.twig',
  463.                 array(
  464.                     "altro" => $altro
  465.                 ));
  466.     }
  467.     /**
  468.      * @since 2023-11-17
  469.      */
  470.     #[Route('/biografia'name'biografia'methods: ['GET'])]
  471.     public function showBiografia(Request $request): Response
  472.     {
  473.         return $this->render('biografia/biografia.html.twig', ['accordion' => '']);
  474.     }
  475.     #[Route('/interviste'name'interviste'methods: ['GET'])]
  476.     public function showInterviste(Request $request): Response
  477.     {
  478.         return $this->render('interviste/interviste.html.twig', ['accordion' => 'interviste']);
  479.     }
  480.     #[Route('/contatti'name'contatti'methods: ['GET'])]
  481.     public function showContatti(Request $request): Response
  482.     {
  483.         return $this->render('frontend/contatti.html.twig', []);
  484.     }
  485.     #[Route('/archivio-biografia'name'archivio-biografia'methods: ['GET'])]
  486.     public function showArchivioBiografia(Request $request): Response
  487.     {
  488.         return $this->render('archivio/archivio-biografia.html.twig');
  489.     }
  490.     #[Route('/archivio-bibliografia'name'archivio-bibliografia'methods: ['GET'])]
  491.     #[Route('/bibliografia'name'bibliografia'methods: ['GET'])]
  492.     public function showBibliografia(Request $requestManagerRegistry $doctrine, ?string $tipo): Response
  493.     {
  494.         return $this->render('bibliografia/bibliografia.html.twig', []);
  495.     }
  496.     /**
  497.      * @since 2023-11-17
  498.      */
  499.     #[Route('/bibliografia/{tipo?}'name'bibliografia-tipo'methods: ['GET'])]
  500.     public function showBibliografiaTipo(Request $requestManagerRegistry $doctrinestring $tipo): Response
  501.     {
  502.         if ($tipo != 'elenco' and $tipo != 'giornali' && $tipo != 'monografie' && $tipo != 'libri') {
  503.             $tipo 'elenco';
  504.         }
  505.         $tipoLabel '';
  506.         switch ($tipo) {
  507.             case 'elenco':
  508.                 $tipoLabel 'Elenco';
  509.                 break;
  510.             case 'giornali':
  511.                 $tipoLabel 'Giornali e riviste';
  512.                 break;
  513.             case 'monografie':
  514.                 $tipoLabel 'Monografie e cataloghi';
  515.                 break;
  516.             case 'libri':
  517.                 $tipoLabel 'Libri';
  518.                 break;
  519.             default:
  520.                 break;
  521.         }
  522.         $documents_repo $doctrine->getRepository(Documento::class);
  523.         $monografie_cataloghi $documents_repo->findBy(['tipo' => ['monografia''catalogo']], ['anno' => 'ASC''numero_progressivo' => 'ASC']);
  524.         $cataloghi $documents_repo->findBy(['tipo' => 'catalogo'], ['anno' => 'ASC''numero_progressivo' => 'ASC']);
  525.         $libri $documents_repo->findBy(['tipo' => 'libro'], ['anno' => 'ASC''numero_progressivo' => 'ASC']);
  526.         $riviste $documents_repo->findBy(['tipo' => 'rivista'], ['anno' => 'ASC''numero_progressivo' => 'ASC']);
  527.         $giornali $doctrine->getRepository(Articolo::class)->findBy([], ['anno' => 'ASC''mese' => 'ASC''giorno' => 'ASC']);
  528.         // $anni = [];
  529.         $anniMonografieCataloghi = [];
  530.         foreach ($monografie_cataloghi as $monografia_catalogo) {
  531.             $anno intval($monografia_catalogo->getAnno());
  532.             if ($anno != 0) {
  533.                 $anniMonografieCataloghi[$anno]['monografie_cataloghi'][$monografia_catalogo->getId()] = $monografia_catalogo;
  534.             }
  535.         }
  536.         $anniLibri = [];
  537.         foreach ($libri as $libro) {
  538.             $anno intval($libro->getAnno());
  539.             
  540.             if ($anno) {
  541.                 $anniLibri[$anno]['libri'][$libro->getId()] = $libro;
  542.             }
  543.         }
  544.         $anniGiornali = [];
  545.         foreach ($giornali as $giornale) {
  546.             $anno intval($giornale->getAnno());
  547.             
  548.             if ($anno) {
  549.                 // $anniGiornali[$anno]['giornali'][$giornale->getId()] = $giornale;
  550.                 $anniGiornaliRiviste[$anno][$giornale->getId()]['_tipo'] = 'giornale';
  551.                 $anniGiornaliRiviste[$anno][$giornale->getId()]['_object'] = $giornale;
  552.             }
  553.         }
  554.         // ksort($anniGiornali);
  555.         $anniRiviste = [];
  556.         foreach ($riviste as $rivista) {
  557.             $anno intval($rivista->getAnno());
  558.             
  559.             if ($anno) {
  560.                 // $anniRiviste[$anno]['riviste'][$rivista->getId()] = $rivista;
  561.                 $anniGiornaliRiviste[$anno][$rivista->getId()]['_tipo'] = 'rivista';
  562.                 $anniGiornaliRiviste[$anno][$rivista->getId()]['_object'] = $rivista;
  563.             }
  564.         }
  565.         // ksort($anniRiviste);
  566.         ksort($anniGiornaliRiviste);
  567.         return $this->render(
  568.             'bibliografia/bibliografia-tipo.html.twig',
  569.             [
  570.                 'monografie_cataloghi' => $monografie_cataloghi,
  571.                 'cataloghi' => $cataloghi,
  572.                 'libri' => $libri,
  573.                 'giornali' => $giornali,
  574.                 'anniMonografieCataloghi' => $anniMonografieCataloghi,
  575.                 'anniLibri' => $anniLibri,
  576.                 // 'anniGiornali' => $anniGiornali,
  577.                 // 'anniRiviste' => $anniRiviste
  578.                 'anniGiornaliRiviste' => $anniGiornaliRiviste,
  579.                 'tipoLabel' => $tipoLabel,
  580.                 'tipo' => $tipo
  581.             ]
  582.         );
  583.     }
  584.     #[Route('/esposizioni'name'esposizioni'methods: ['GET'])]
  585.     public function showEsposizioni(Request $request): Response
  586.     {
  587.         return $this->render('esposizioni/esposizioni.html.twig');
  588.     }
  589.     #[Route('/esposizioni/{tipo?}'name'esposizioni-tipo'methods: ['GET'])]
  590.     public function showEsposizioniTipo(Request $requestManagerRegistry $doctrinestring $tipo): Response
  591.     {
  592.         if ($tipo != 'personali' and $tipo != 'collettive') {
  593.             $tipo 'personali';
  594.         }
  595.         $tipoLabel 'Personali ed eventi';
  596.         if ($tipo == 'collettive') {
  597.             $tipoLabel 'Collettive';
  598.         }
  599.         $mostra_repo $doctrine->getRepository(Mostra::class);
  600.         $mostraMultimedia $doctrine->getRepository(MostraMultimedia::class);
  601.         
  602.         $mostre_personali $mostra_repo->createQueryBuilder("m")
  603.                             ->where("m.personale = TRUE")
  604.                             ->orderBy('m.numprogressivaanno''ASC')
  605.                             ->getQuery()->getResult();
  606.         
  607.         $mostre_collettive $mostra_repo->createQueryBuilder("m")
  608.                             ->where("m.collettiva = TRUE")
  609.                             ->getQuery()->getResult();
  610.         $anniMostrePersonali = [];
  611.         $i 0;
  612.         foreach ($mostre_personali as $mostraPersonale) {
  613.             if (!isset($anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()])) {
  614.                 $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['mostra'] = $mostraPersonale;
  615.                 
  616.                 $idEsposizione $mostraPersonale->getId();
  617.     
  618.                 $queryImmagine $mostraMultimedia->createQueryBuilder('mm')
  619.                     ->join('mm.multimedia''file')
  620.                     ->select('file.fileref, file.estensione')
  621.                     ->where("mm.mostra = {$idEsposizione} AND file.estensione = 'pdf'")
  622.                     ->orderBy('mm.id''ASC')
  623.                     ->setMaxResults(1)
  624.                     ->getQuery();
  625.                 if (!empty($queryImmagine->getResult()[0])) {
  626.                     $immagineEsposizione $queryImmagine->getResult()[0];
  627.                     $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['fileref'] = str_replace('-'''$immagineEsposizione['fileref']);
  628.                     $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['estensione'] = $immagineEsposizione['estensione'];
  629.                 }
  630.             }
  631.             $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['hasVisibleOperas'] = false;
  632.             foreach ($mostraPersonale->getIdopera() as $key => $opera) {
  633.                 if ($opera->getVisibile()) {
  634.                     $anniMostrePersonali[$mostraPersonale->getAnno()]['esposizioni'][$mostraPersonale->getId()]['hasVisibleOperas'] = true;
  635.                 }
  636.             }
  637.             $i++;
  638.         }
  639.         ksort($anniMostrePersonali);
  640.         $anniMostreCollettive = [];
  641.         $i 0;
  642.         foreach ($mostre_collettive as $mostraCollettiva) {
  643.             if (!isset($anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()])) {
  644.                 $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['mostra'] = $mostraCollettiva;
  645.                 $idEsposizione $mostraCollettiva->getId();
  646.     
  647.                 $queryImmagine $mostraMultimedia->createQueryBuilder('mm')
  648.                     ->join('mm.multimedia''file')
  649.                     ->select('file.fileref, file.estensione')
  650.                     ->where("mm.mostra = {$idEsposizione} AND file.estensione = 'pdf'")
  651.                     ->orderBy('mm.id''ASC')
  652.                     ->setMaxResults(1)
  653.                     ->getQuery();
  654.                 if (!empty($queryImmagine->getResult()[0])) {
  655.                     $immagineEsposizione $queryImmagine->getResult()[0];
  656.                     $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['fileref'] = str_replace('-'''$immagineEsposizione['fileref']);
  657.                     $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['estensione'] = $immagineEsposizione['estensione'];
  658.                 }
  659.             }
  660.             $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['hasVisibleOperas'] = false;
  661.             foreach ($mostraCollettiva->getIdopera() as $key => $opera) {
  662.                 if ($opera->getVisibile()) {
  663.                     $anniMostreCollettive[$mostraCollettiva->getAnno()]['esposizioni'][$mostraCollettiva->getId()]['hasVisibleOperas'] = true;
  664.                 }
  665.             }
  666.             
  667.             $i++;
  668.         }
  669.         ksort($anniMostreCollettive);
  670.         return $this->render('esposizioni/esposizioni-tipo.html.twig', [
  671.             'tipo' => $tipo,
  672.             'tipoLabel' => $tipoLabel,
  673.             "mostre_personali" => $mostre_personali
  674.             "mostre_collettive" => $mostre_collettive,
  675.             "anniMostrePersonali" => $anniMostrePersonali,
  676.             "anniMostreCollettive" => $anniMostreCollettive,
  677.         ]);
  678.     }
  679.     #[Route('/archivio-interviste'name'archivio-interviste'methods: ['GET'])]
  680.     public function showMultimedia(Request $request): Response
  681.     {
  682.         return $this->render('archivio/archivio-interviste.html.twig');
  683.     }
  684.     #[Route("/biografia-ragionata"name"biografiaRagionata")]
  685.     public function biografiaRagionata(Request $request): Response
  686.     {
  687.         /**
  688.          * @since 2023-11-20
  689.          */
  690.         return $this->redirectToRoute('homepage');
  691.         
  692.         // return $this->render('frontend/biografiaragionata.html.twig');
  693.     }
  694.     #[Route("/archivio-opere/ricerca-avanzata/"name"opereAdvancedSearch")]
  695.     public function opereAdvancedSearch(Request $requestManagerRegistry $doctrine): Response
  696.     {
  697.         // get tipoopera
  698.         $tipo_operas $this->getDoctrine()->getRepository(Tipoopera::class)->findAll();
  699.         $tipoopera_key_value_map = [];
  700.         
  701.         foreach ($tipo_operas as $tipo){
  702.             $tipoopera_key_value_map[$tipo->getTipo()] = $tipo->getSigla();
  703.         }
  704.         
  705.         // get opera years
  706.         $operas_repo $this->getDoctrine()->getRepository(Opera::class);
  707.         $query_opera_years $operas_repo->createQueryBuilder("opera")
  708.                             ->select("opera.anno")
  709.                             // ->orderBy("opera.anno");
  710.                             ->addOrderBy("opera.anno","desc")
  711.                             ->addOrderBy("opera.numprogressivoanno","asc")
  712.                             ->addOrderBy("opera.id","asc");
  713.         
  714.         $all_years $query_opera_years->getQuery()->getResult();
  715.         $choices_year = array();
  716.         
  717.         foreach ($all_years as $year) {
  718.             $year_str $year['anno'];
  719.             if(strcmp("$year_str""") != 0){
  720.                 $choices_year["$year_str"] = "$year_str";
  721.             }
  722.         }
  723.         
  724.         $formFactory Forms::createFormFactory();
  725.         $search_form $formFactory->createBuilder()
  726.                     ->add('titolo'SearchType::class, array('required' => false))
  727.                     ->add('anno'ChoiceType::class, array('required' => false'choices' => $choices_year'placeholder' => 'Seleziona Anno'))
  728.                     ->add('numprogressivoanno'IntegerType::class, array('required' => false))
  729.                     ->add('tipoopera'ChoiceType::class, array('required' => false'choices'  => $tipoopera_key_value_map'placeholder' => 'Seleziona un tipo di opera'))
  730.                     ->add('collezione'SearchType::class, array('required' => false))
  731.                     ->add('chiave'SearchType::class, array('required' => false))
  732.                     ->getForm();
  733.         
  734.         $search_form->handleRequest();
  735.         
  736.         $operas_results null;
  737.         $multimedias_look_up_table = [];
  738.         
  739.         $visible_operas = [];
  740.         
  741.         if($search_form->isSubmitted() && $search_form->isValid()){
  742.             
  743.             $data $search_form->getData();
  744.             
  745.             $title strtolower($data["titolo"]);
  746.             $year $data["anno"];
  747.             $npy $data["numprogressivoanno"];
  748.             $tipo_opera $data["tipoopera"];
  749.             $collezione strtolower($data["collezione"]);
  750.             $chiave strtolower($data["chiave"]);
  751.             
  752.             if(!((strcmp($title"") == 0) && is_null($year) && is_null($npy) && is_null($tipo_opera) && (strcmp($collezione"") == 0) && (strcmp($chiave"") == 0))){
  753.             
  754.                 $opera_repo $this->getDoctrine()->getRepository(Opera::class);
  755.                 $query $opera_repo->createQueryBuilder("op")
  756.                                 ->select("op.id, op.titolo, op.anno, op.numprogressivoanno, op.visibile, op.mat, "
  757.                                         "op.materiale, tipoopera.tipo, op.tecnica, op.x, op.y, op.z, op.collezione, op.chiavi")
  758.                                 ->join("op.idtipoopera""tipoopera")
  759.                                 ->addOrderBy("op.anno","desc")
  760.                                 ->addOrderBy("op.numprogressivoanno","asc")
  761.                                 ->addOrderBy("op.id","asc");
  762.                 
  763.                 if(strcmp($title"") != 0){
  764.                     $query $query->andWhere('LOWER(op.titolo) LIKE :title')->setParameter('title'"%$title%");
  765.                 }
  766.                 if(!is_null($year)){
  767.                     $query $query->andWhere('op.anno = :anno')->setParameter('anno'$year);
  768.                 }
  769.                 if(!is_null($npy)){
  770.                     $query $query->andWhere('op.numprogressivoanno = :numprogressivoanno')->setParameter('numprogressivoanno'$npy);
  771.                 }
  772.                 if(!is_null($tipo_opera)){
  773.                     $query $query->andWhere('tipoopera.sigla = :tipoopera')->setParameter('tipoopera'$tipo_opera);
  774.                 }
  775.                 if(strcmp($collezione"") != 0){
  776.                     $query $query->andWhere('LOWER(op.collezione) LIKE :collezione')->setParameter('collezione'"%$collezione%");
  777.                 }
  778.                 if(strcmp($chiave"") != 0){
  779.                     $query $query->andWhere('LOWER(op.chiavi) LIKE :chiave')->setParameter('chiave'"%$chiave%");
  780.                 }
  781.                 
  782.                 $query $query->distinct("op.id");
  783.                 
  784.                 $operas_results $query->getQuery()->getResult();
  785.                 
  786.                 // Get the multimedia files from the operas id
  787.                 foreach ($operas_results as $elem){
  788.                     $current_id $elem['id'];
  789.                     $multimedia_repo $doctrine->getRepository(OperaMultimedia::class);
  790.                     $multimedia_query $multimedia_repo->createQueryBuilder("om")
  791.                                 ->select("m.widthNormal, m.heightNormal, m.fileref, m.estensione, m.nome, m.tipo, om.cover")
  792.                                 ->join("om.opera""op")
  793.                                 ->join("om.multimedia""m")
  794.                                 ->where("op.id = :idopera AND m.tipo = 'image'")->setParameter('idopera'$current_id);
  795.                     $final_multimedia_query $multimedia_query->getQuery();
  796.                     $multimedia_results $final_multimedia_query->getResult();
  797.                     
  798.                     /**
  799.                      * Check if any cover image exists. If at least a cover
  800.                      * exits then set it as the only output multimedia for the
  801.                      * opera.
  802.                      */
  803.                     
  804.                     if(count($multimedia_results) > 1){
  805.                         $cover_found false;
  806.                         $cover_key NULL;
  807.                         foreach ($multimedia_results as $key => $result){
  808.                             if($result["cover"]){
  809.                                 $cover_found true;
  810.                                 $cover_key $key;
  811.                                 break;
  812.                             }
  813.                         }
  814.                         if($cover_found){
  815.                             $tmp_cover $multimedia_results[$cover_key];
  816.                             unset($multimedia_results);
  817.                             $multimedia_results = array();
  818.                             $multimedia_results[0] = $tmp_cover;
  819.                         }
  820.                     }
  821.                     
  822.                     $multimedias_look_up_table[$current_id] = $multimedia_results;
  823.                 }
  824.                 // end fetch
  825.                 
  826.                 // Remove the operas without any multimedia item from the search results
  827.                 foreach ($multimedias_look_up_table as $key => $value) {
  828.                     if(empty($value)){
  829.                         foreach ($operas_results as $operas_key => $operas_values) {
  830.                             if(strcmp($operas_values["id"], "$key") == 0){
  831.                                 unset($operas_results[$operas_key]);
  832.                             }
  833.                         }
  834.                     }
  835.                 }
  836.                 
  837.                 // check the opera's visibility property
  838.                 foreach ($operas_results as $key => $opera) {
  839.                     if ($opera["visibile"]){
  840.                         $visible_operas[$key] = $opera;
  841.                     }
  842.                 }
  843.                 
  844.                 // count the final number of visible operas
  845.                 $count_results count($visible_operas);
  846.                 
  847.                 $msg "";
  848.                 if($count_results == 1)
  849.                 {
  850.                     $msg "La tua ricerca ha prodotto 1 risultato";
  851.                 }else{
  852.                     $msg "La tua ricerca ha prodotto " $count_results " risultati";
  853.                 }
  854.                 $this->addFlash(
  855.                     'notice',
  856.                     $msg
  857.                 );
  858.                 
  859.             }else{
  860.                 // all form fields are empty
  861.                 $this->addFlash(
  862.                     "errors",
  863.                     "Errore: i campi del form sono tutti vuoti."
  864.                 );
  865.             }
  866.             
  867.         }
  868.         
  869.         return $this->render('frontend/opere.search.html.twig', array('form' => $search_form->createView(), 'opere' => $visible_operas'multimedias' => $multimedias_look_up_table));
  870.     }
  871.     #[Route("/archivio-opere/{idopera?}"name"archivio-opere-scheda")]
  872.     // , requirements: {"paginator"="\d+"}
  873.     public function opereSingleOpera(Request $request$idopera): Response
  874.     {
  875.         $opera $this->getDoctrine()->getRepository(Opera::class)->find($idopera);
  876.         
  877.         if(!$opera){
  878.             throw $this->createNotFoundException('Nessuna opera trovata con id '$opera);
  879.         }
  880.         
  881.         $cover_presence False;
  882.         
  883.         foreach ($opera->getMultimedias() as $m){
  884.             if ($m->getCover())
  885.                 $cover_presence True;
  886.         }
  887.         
  888.         // foreach ($opera->getIddocumento() as $documento) {
  889.         //     dd($documento);
  890.         // }
  891.         /**
  892.          * @since 2024-04-27 Vogliamo far apparire anche giornali e pubblicazioni delle mostre collegate [TICKET 8]
  893.          */
  894.         $pubblicazioni $giornali = [];
  895.         foreach ($opera->getIdmostra() as $mostra) {
  896.             if ($mostra->getIddocumento()) {
  897.                 foreach ($mostra->getIddocumento() as $pubblicazioneMostra) {
  898.                     if (!isset($pubblicazioni[$pubblicazioneMostra->getId()])) {
  899.                         $pubblicazioni[$pubblicazioneMostra->getId()] = $pubblicazioneMostra;
  900.                     }
  901.                 }
  902.             }
  903.             if ($mostra->getIdarticolo()) {
  904.                 foreach ($mostra->getIdarticolo() as $giornaleMostra) {
  905.                     if (!isset($giornali[$giornaleMostra->getId()])) {
  906.                         $giornali[$giornaleMostra->getId()] = $giornaleMostra;
  907.                     }
  908.                 }
  909.             }
  910.         }
  911.         # Proviamo ad eliminare i giornali duplicati presenti sia nelle mostre sia nell'opera, 
  912.         if ($opera->getIdarticolo()) {
  913.             foreach ($opera->getIdarticolo() as $giornaleOpera) {
  914.                 if (!isset($giornali[$giornaleOpera->getId()])) {
  915.                     $giornali[$giornaleOpera->getId()] = $giornaleOpera;
  916.                 }
  917.             }
  918.         }
  919.         # Idem per le pubblicazioni
  920.         if ($opera->getIddocumento()) {
  921.             foreach ($opera->getIddocumento() as $pubblicazioneOpera) {
  922.                 if (!isset($pubblicazioni[$pubblicazioneOpera->getId()])) {
  923.                     $pubblicazioni[$pubblicazioneOpera->getId()] = $pubblicazioneOpera;
  924.                 }
  925.             }
  926.         }
  927.         return $this->render('frontend/opera.html.twig', [
  928.             "opera" => $opera,
  929.             "cover_presence" => $cover_presence,
  930.             'pubblicazioni' => $pubblicazioni,
  931.             'giornali' => $giornali
  932.         ]);
  933.     }
  934.     #[Route("/opereAjax"name"opereAjax"methods: ["POST"])]
  935.     public function opereAjax(Request $request): Response
  936.     {
  937.         
  938.         $selected_operas $request->get('selected_operas');
  939.         $selected_year $request->get('selected_year');
  940.         $selected_sigla $request->get('selected_sigla');
  941.         
  942.         $opera_repo $this->getDoctrine()->getRepository(Opera::class);
  943.         
  944.         $query $opera_repo->createQueryBuilder("op")
  945.                 ->select("op.id AS idopera, op.anno, op.titolo, op.visibile, mt.fileref, mt.estensione, mts.cover, mt.id AS idmultimedia")
  946.                 ->join("op.multimedias""mts")
  947.                 ->join("mts.multimedia""mt")
  948.                 ->join("op.idtipoopera""topera")
  949.                 ->where("mt.tipo = 'image' AND op.id NOT IN (:array_of_ids)")->setParameter("array_of_ids"$selected_operas);
  950.         
  951.         if(!is_null($selected_sigla) && strcmp($selected_sigla"") != 0){
  952.             $query $query->andWhere("topera.sigla = :top")->setParameter('top'$selected_sigla);
  953.             // If the user selects DISEGNI we also want to add COLLAGEs to the results
  954.             if(strcmp($selected_sigla"D") == 0){
  955.                 $query $query->andWhere("topera.sigla = :selected OR topera.sigla = :collage")
  956.                         ->setParameter('selected'$selected_sigla)
  957.                         ->setParameter("collage""L");
  958.             }
  959.         }
  960.         
  961.         if(!is_null($selected_year) && strcmp($selected_year"") != 0){
  962.             $query $query->andWhere("op.anno = :anno")->setParameter('anno'$selected_year);
  963.         }
  964.         
  965.         $query $query->addOrderBy("op.anno","desc");
  966.         $query $query->addOrderBy("op.numprogressivoanno","asc");
  967.         $query $query->addOrderBy("op.id","asc");
  968.         $new_operas $query->getQuery()->getResult();
  969.                 
  970.         $visible_operas = [];
  971.         
  972.         foreach ($new_operas as $key => $opera) {
  973.             if ( $opera["visibile"] ){
  974.                 $visible_operas[$key] = $opera;
  975.             }
  976.         }
  977.                 
  978.         $remove_duplicated_operas = [];
  979.         
  980.         foreach ($visible_operas as $key => $opera) {
  981.             if(!array_key_exists($opera["idopera"], $remove_duplicated_operas)){
  982.                 $remove_duplicated_operas[$opera["idopera"]] = $visible_operas[$key];
  983.             }elseif($opera["cover"]){
  984.                 $remove_duplicated_operas[$opera["idopera"]] = $visible_operas[$key];
  985.             }
  986.             if(count($remove_duplicated_operas) == 10){
  987.                 break;
  988.             }
  989.         }
  990.         
  991.         $remove_duplicated_operas array_values($remove_duplicated_operas);
  992.         
  993.         return new JsonResponse(array("opere" => $remove_duplicated_operas));
  994.         
  995.     }
  996.     #[Route("/monografie-cataloghi/{iddocumento}/"name"documentoMonografieCataloghi")]
  997.     public function documento(Request $requestManagerRegistry $doctrine$iddocumento): Response
  998.     {
  999.         $document =$doctrine->getRepository(Documento::class)->find($iddocumento);
  1000.         
  1001.         if(!$document){
  1002.             throw $this->createNotFoundException('Nessuna documento trovato con id ' $iddocumento);
  1003.         }
  1004.         
  1005.         return $this->render('frontend/monografiecataloghi.documento.html.twig',
  1006.                 array(
  1007.                     "document" => $document
  1008.                 ));
  1009.     }
  1010.     #[Route("/altro/{idaltro}"name"altroSingleElement")]
  1011.     public function altroSingleElement(Request $requestManagerRegistry $doctrine$idaltro): Response
  1012.     {
  1013.         
  1014.         $altro $doctrine->getRepository(Altro::class)->find($idaltro);
  1015.         
  1016.         if(!$altro){
  1017.             throw $this->createNotFoundException('Nessuna elemento trovato con id ' $altro);
  1018.         }
  1019.         
  1020.         return $this->render('frontend/altro.singleelement.html.twig',
  1021.                 array(
  1022.                     "titolo" => $altro->getTitle(),
  1023.                     "altro" => $altro
  1024.                 ));
  1025.     }
  1026.     #[Route("/emeroteca/{idarticle}/"name"emerotecaArticle")]
  1027.     public function emerotecaArticle(Request $request$idarticle): Response
  1028.     {
  1029.         $article $this->getDoctrine()->getRepository(Articolo::class)->find($idarticle);
  1030.         
  1031.         if(!$article){
  1032.             throw $this->createNotFoundException('Nessuna articolo trovato con id '$idarticle);
  1033.         }
  1034.         
  1035.         return $this->render('frontend/emeroteca.articolo.html.twig',
  1036.                 array(
  1037.                     'article' => $article
  1038.                 ));
  1039.     }
  1040.     #[Route("/archivio-mostre/{idmostra?}"name"showMostra")]
  1041.     public function showMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1042.     {
  1043.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1044.         if (!$mostra){
  1045.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1046.         }
  1047.         $visible_operas = [];
  1048.                 
  1049.         foreach ($mostra->getIdopera() as $key => $opera) {
  1050.             if ( $opera->getVisibile() ){
  1051.                 $visible_operas[$key] = $opera;
  1052.             }
  1053.         }
  1054.         
  1055.         $cover_presence = [];
  1056.         
  1057.         foreach ($visible_operas as $opera){
  1058.             $id_opera $opera->getId();
  1059.             foreach ($opera->getMultimedias() as $m ){
  1060.                 if ($m->getCover())
  1061.                     $cover_presence[$id_opera] = True;
  1062.             }
  1063.             if(!array_key_exists($id_opera$cover_presence))
  1064.                 $cover_presence[$id_opera] = False;
  1065.         }
  1066.         return $this->render(
  1067.             'frontend/mostra.commonattachments.html.twig',
  1068.             array(
  1069.                 "titolo" => $mostra->getNome(),
  1070.                 "cover_presence" => $cover_presence,
  1071.                 "mostra" => $mostra,
  1072.                 "opere" => $visible_operas,
  1073.                 "cat" => "opere",
  1074.                 'isArchivio' => true
  1075.             )
  1076.         );
  1077.     }
  1078.     #[Route("/archivio-mostre/{idmostra?}/opere"name"opereMostra")]
  1079.     public function opereMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1080.     {
  1081.         
  1082.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1083.         
  1084.         if(!$mostra){
  1085.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1086.         }
  1087.         
  1088.         $visible_operas = [];
  1089.                 
  1090.         foreach ($mostra->getIdopera() as $key => $opera) {
  1091.             if ( $opera->getVisibile() ){
  1092.                 $visible_operas[$key] = $opera;
  1093.             }
  1094.         }
  1095.         
  1096.         $cover_presence = [];
  1097.         
  1098.         foreach ($visible_operas as $opera){
  1099.             $id_opera $opera->getId();
  1100.             foreach ($opera->getMultimedias() as $m ){
  1101.                 if ($m->getCover())
  1102.                     $cover_presence[$id_opera] = True;
  1103.             }
  1104.             if(!array_key_exists($id_opera$cover_presence))
  1105.                 $cover_presence[$id_opera] = False;
  1106.         }
  1107.         
  1108.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1109.                 array(
  1110.                     "titolo" => $mostra->getNome(),
  1111.                     "cover_presence" => $cover_presence,
  1112.                     "mostra" => $mostra,
  1113.                     "opere" => $visible_operas,
  1114.                     "cat" => "opere",
  1115.                     'isArchivio' => true
  1116.                 ));
  1117.         
  1118.     }
  1119.     
  1120.     #[Route("/archivio-mostre/{idmostra?}/allestimento"name"allestimentoMostra")]
  1121.     public function allestimentoMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1122.     {
  1123.         
  1124.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1125.         if(!$mostra){
  1126.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1127.         }
  1128.         $visible_operas = [];
  1129.                 
  1130.         foreach ($mostra->getIdopera() as $key => $opera) {
  1131.             if ( $opera->getVisibile() ){
  1132.                 $visible_operas[$key] = $opera;
  1133.             }
  1134.         }
  1135.         $allestimento = [];
  1136.         foreach ($mostra->getMultimedias() as $multimedia) {
  1137.             if ($multimedia->getTipo() != 'allestimento') {
  1138.                 continue;
  1139.             }
  1140.             $allestimento[] = $multimedia->getMultimedia();
  1141.         }
  1142.         
  1143.         usort($allestimento, function($a$b) {
  1144.             return strnatcmp($a->getNome(), $b->getNome());
  1145.         });
  1146.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1147.                 array(
  1148.                     "titolo" => $mostra->getNome(),
  1149.                     "mostra" => $mostra,
  1150.                     "cat" => "allestimento",
  1151.                     'allestimento' => $allestimento,
  1152.                     'opere' => $visible_operas,
  1153.                     'isArchivio' => true
  1154.                 ));
  1155.     }
  1156.     
  1157.     #[Route("/archivio-mostre/{idmostra?}/vernice"name"verniceMostra")]
  1158.     public function verniceMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1159.     {
  1160.         
  1161.         $mostra $this->getDoctrine()->getRepository(Mostra::class)->find($idmostra);
  1162.         
  1163.         if(!$mostra){
  1164.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1165.         }
  1166.         $visible_operas = [];
  1167.                 
  1168.         foreach ($mostra->getIdopera() as $key => $opera) {
  1169.             if ( $opera->getVisibile() ){
  1170.                 $visible_operas[$key] = $opera;
  1171.             }
  1172.         }
  1173.         
  1174.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1175.                 array(
  1176.                     "titolo" => $mostra->getNome(),
  1177.                     "mostra" => $mostra,
  1178.                     "cat" => "vernice",
  1179.                     'opere' => $visible_operas,
  1180.                     'isArchivio' => true
  1181.                 ));
  1182.     }
  1183.     
  1184.     #[Route("/archivio-mostre/{idmostra?}/video"name"videoMostra")]
  1185.     public function videoMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1186.     {
  1187.         
  1188.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1189.         
  1190.         if(!$mostra){
  1191.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1192.         }
  1193.         $visible_operas = [];
  1194.                 
  1195.         foreach ($mostra->getIdopera() as $key => $opera) {
  1196.             if ( $opera->getVisibile() ){
  1197.                 $visible_operas[$key] = $opera;
  1198.             }
  1199.         }
  1200.         
  1201.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1202.                 array(
  1203.                     "titolo" => $mostra->getNome(),
  1204.                     "mostra" => $mostra,
  1205.                     "cat" => "video",
  1206.                     'opere' => $visibile_operas,
  1207.                     'isArchivio' => true
  1208.                 ));
  1209.         
  1210.     }
  1211.     
  1212.     #[Route("/archivio-mostre/{idmostra?}/manifesto"name"manifestoMostra")]
  1213.     public function manifestoMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1214.     {
  1215.         
  1216.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1217.         
  1218.         if(!$mostra){
  1219.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1220.         }
  1221.         $visible_operas = [];
  1222.                 
  1223.         foreach ($mostra->getIdopera() as $key => $opera) {
  1224.             if ( $opera->getVisibile() ){
  1225.                 $visible_operas[$key] = $opera;
  1226.             }
  1227.         }
  1228.         
  1229.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1230.                 array(
  1231.                     "titolo" => $mostra->getNome(),
  1232.                     "mostra" => $mostra,
  1233.                     "cat" => "manifesto",
  1234.                     'opere' => $visible_operas,
  1235.                     'isArchivio' => true
  1236.                 ));
  1237.         
  1238.     }
  1239.     
  1240.     #[Route("/archivio-mostre/{idmostra?}/brochure"name"brochureMostra")]
  1241.     public function brochureMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1242.     {
  1243.         
  1244.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1245.         
  1246.         if(!$mostra){
  1247.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1248.         }
  1249.         $visible_operas = [];
  1250.                 
  1251.         foreach ($mostra->getIdopera() as $key => $opera) {
  1252.             if ( $opera->getVisibile() ){
  1253.                 $visible_operas[$key] = $opera;
  1254.             }
  1255.         }
  1256.         
  1257.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1258.                 array(
  1259.                     "titolo" => $mostra->getNome(),
  1260.                     "mostra" => $mostra,
  1261.                     "cat" => "brochure",
  1262.                     'opere' => $visible_operas,
  1263.                     'isArchivio' => true
  1264.                 ));
  1265.         
  1266.     }
  1267.     
  1268.     #[Route("/archivio-mostre/{idmostra?}/altro"name"altroMostra")]
  1269.     public function altroMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1270.     {
  1271.         
  1272.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1273.         
  1274.         if(!$mostra){
  1275.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1276.         }
  1277.         $visible_operas = [];
  1278.                 
  1279.         foreach ($mostra->getIdopera() as $key => $opera) {
  1280.             if ( $opera->getVisibile() ){
  1281.                 $visible_operas[$key] = $opera;
  1282.             }
  1283.         }
  1284.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1285.                 array(
  1286.                     "titolo" => $mostra->getNome(),
  1287.                     "mostra" => $mostra,
  1288.                     "cat" => "altro",
  1289.                     'opere' => $visible_operas,
  1290.                     'isArchivio' => true
  1291.                 ));
  1292.     }
  1293.     #[Route("/archivio-mostre/{idmostra?}/pubblicazioni"name"pubblicazioniMostra")]
  1294.     public function pubblicazioniMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1295.     {
  1296.         
  1297.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1298.         
  1299.         if(!$mostra){
  1300.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1301.         }
  1302.         $visible_operas = [];
  1303.                 
  1304.         foreach ($mostra->getIdopera() as $key => $opera) {
  1305.             if ( $opera->getVisibile() ){
  1306.                 $visible_operas[$key] = $opera;
  1307.             }
  1308.         }
  1309.         
  1310.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1311.                 array(
  1312.                     "titolo" => $mostra->getNome(),
  1313.                     "mostra" => $mostra,
  1314.                     "cat" => "pubblicazioni",
  1315.                     'opere' => $visible_operas,
  1316.                     'isArchivio' => true
  1317.                 ));
  1318.         
  1319.     }
  1320.     #[Route("/archivio-mostre/{idmostra?}/giornali"name"giornaliMostra")]
  1321.     public function giornaliMostra(Request $requestManagerRegistry $doctrine$idmostra): Response
  1322.     {
  1323.         
  1324.         $mostra $doctrine->getRepository(Mostra::class)->find($idmostra);
  1325.         
  1326.         if(!$mostra){
  1327.             throw $this->createNotFoundException('Nessuna mostra trovata con id '.$idmostra);
  1328.         }
  1329.         $visible_operas = [];
  1330.                 
  1331.         foreach ($mostra->getIdopera() as $key => $opera) {
  1332.             if ( $opera->getVisibile() ){
  1333.                 $visible_operas[$key] = $opera;
  1334.             }
  1335.         }
  1336.         
  1337.         return $this->render('frontend/mostra.commonattachments.html.twig',
  1338.                 array(
  1339.                     "titolo" => $mostra->getNome(),
  1340.                     "mostra" => $mostra,
  1341.                     "cat" => "giornali",
  1342.                     'opere' => $visible_operas,
  1343.                     'isArchivio' => true
  1344.                 ));
  1345.         
  1346.     }
  1347.     #[Route("/privacy-and-cookies-policy"name"privacyAndCookiesPolicy")]
  1348.     public function privacyAndCookiesPolicy(Request $request): Response
  1349.     {    
  1350.         return $this->render('frontend/policy.html.twig');
  1351.     }
  1352.     
  1353.     #[Route("/setup/cookie/"name"setupCookie")]
  1354.     public function setupCookieAction(Request $request){
  1355.         
  1356.         $cookie = new Cookie('privacyAndCookiesPolicy''accepted'time() + ( 365 24 60 60));
  1357.         
  1358.         $res = new Response();
  1359.         
  1360.         $res->headers->setCookie($cookie);
  1361.         
  1362.         $res->send();
  1363.         
  1364.         $status = array("success"=>"true");
  1365.         
  1366.         return new JsonResponse($status);
  1367.         
  1368.     }
  1369. }