src/Controller/DefaultController.php line 271

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Articulo;
  4. use App\Entity\Autor;
  5. use App\Entity\PalabraClave;
  6. use App\Entity\Seccion;
  7. use App\Entity\Volumen;
  8. use App\FileUploader;
  9. use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  10. use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Throwable;
  16. class DefaultController extends AbstractController
  17. {
  18.     /**
  19.      * @Route("/home2", name="home2")
  20.      */
  21.     public function index()
  22.     {
  23.         $em $this->getDoctrine()->getManager();
  24.         $volumen $em->getRepository('App:Volumen')->findBy(['isActive' => true], ['volumen' => 'DESC''numero' => 'DESC'], 5);
  25.         return $this->render('default/home.html.twig', [
  26.             'volumen' => $volumen,
  27.         ]);
  28.     }
  29.     /**
  30.      * @Route("/buscar", name="search")
  31.      */
  32.     public function buscar()
  33.     {
  34.         $em $this->getDoctrine()->getManager();
  35.         $volumen $em->getRepository('App:Volumen')->findBy(['isActive' => true], ['volumen' => 'DESC''numero' => 'DESC']);
  36.         return $this->render('default/index.html.twig', [
  37.             'volumen' => $volumen
  38.         ]);
  39.     }
  40.     /**
  41.      * @Route("/recent", name="recent")
  42.      */
  43.     public function recent()
  44.     {
  45.         $em $this->getDoctrine()->getManager();
  46.         $articulos $em->getRepository('App:Articulo')->findBy([], ['volumenRel' => 'DESC''articulo' => 'DESC'], 3);
  47.         return $this->render('default/recent.html.twig', [
  48.             'articulos' => $articulos
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("admin/import", name="import", methods={"POST"})
  53.      */
  54.     public function import(Request $request)
  55.     {
  56.         $em $this->getDoctrine()->getManager();
  57.         $file $request->files->get('file');
  58.         $fileUploader = new FileUploader('%kernel.root_dir%/public/uploads/');
  59.         $filename $fileUploader->upload($file);
  60.         $reader = new Xlsx();
  61.         $spreadsheet $reader->load($fileUploader->getTargetDirectory() . $filename);
  62.         $em->getConnection()->beginTransaction(); // suspend auto-commit
  63.         $error = array();
  64.         try {
  65.             $worksheet $spreadsheet->getSheet(0);
  66.             $highestRow $worksheet->getHighestRow();
  67.             $highestColumn $worksheet->getHighestColumn();
  68.             $highestColumnIndex Coordinate::columnIndexFromString($highestColumn);
  69.             $headingsArray $worksheet->rangeToArray('A1:' $highestColumn '1'nulltruetruetrue);
  70.             $headingsArray $headingsArray[1];
  71.             $r = -1;
  72.             for ($row 6$row <= $highestRow; ++$row) {
  73.                 $dataRow $worksheet->rangeToArray('A' $row ':' $highestColumn $rownulltruetruetrue);
  74.                 if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
  75.                     ++$r;
  76.                     foreach ($headingsArray as $columnKey => $columnHeading) {
  77.                         $namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
  78.                     } //endforeach
  79.                 //endif
  80.             }
  81.             foreach ($namedDataArray as $value) {
  82.                 set_time_limit(-1);
  83.                 ini_set('memory_limit', -1);
  84.                 ini_set('max_execution_time', -1);
  85.                 $vol $value['volumen'];
  86.                 $num $value['numero'];
  87.                 $year $value['año'];
  88.                 $volumen $this->volumen($vol$num$year);
  89.                 $articulo $value['articulo'];
  90.                 $seccion $this->seccion($value['seccion']);
  91.                 $titulo_es $value['titulo'];
  92.                 $titulo_en $value['title'];
  93.                 $pagina_in $value['paginai'];
  94.                 $pagina_fn $value['paginaf'];
  95.                 $archivo $value['archivo'];
  96.                 $ruta $value['link'];
  97.                 $doi $value['doi'];
  98.                 $autores $this->autores($value['autores']);
  99.                 $palabras $this->keywords($value['keywords']);
  100.                 $new $em->getRepository(Articulo::class)->findOneBy(['articulo' => $articulo'volumenRel' => $volumen]);
  101.                 if (!$new) {
  102.                     $new = new Articulo();
  103.                     $new->setArticulo($articulo);
  104.                     $new->setImagen('https://revcolcard.org/wp-content/uploads/2020/06/Portada-Vol.-27-N-2.jpeg');
  105.                     $new->setVolumenRel($volumen);
  106.                 } else {
  107.                     foreach ($new->getAutor() as $autor) {
  108.                         $new->removeAutor($autor);
  109.                     }
  110.                     foreach ($new->getPalabraClave() as $palabraClave) {
  111.                         $new->removePalabraClave($palabraClave);
  112.                     }
  113.                 }
  114.                 $new->setSeccionRel($seccion);
  115.                 $new->setDoi($doi);
  116.                 $new->setNombreArchivo($archivo);
  117.                 $new->setRutaArchivo($ruta);
  118.                 $new->setPaginasEs($pagina_in);
  119.                 $new->setPaginasEn($pagina_fn);
  120.                 $new->setTituloEs($titulo_es);
  121.                 $new->setTituloEn($titulo_en);
  122.                 if (count($autores) > 0) {
  123.                     foreach ($autores as $autor) {
  124.                         $new->addAutor($autor);
  125.                     }
  126.                 }
  127.                 if (count($palabras) > 0) {
  128.                     foreach ($palabras as $palabra) {
  129.                         $new->addPalabraClave($palabra);
  130.                     }
  131.                 }
  132.                 $em->persist($new);
  133.             }
  134.             $em->flush();
  135.             $em->getConnection()->commit();
  136.             $this->addFlash('sonata_flash_success''Importado con exito');
  137.         } catch (Throwable $e) {
  138.             $em->getConnection()->rollBack();
  139.             $this->addFlash('sonata_flash_error''Error: ' $e->getMessage());
  140.         }
  141.         return $this->redirectToRoute('importador');
  142.     }
  143.     private function volumen($vol$num$year): Volumen
  144.     {
  145.         $em $this->getDoctrine()->getManager();
  146.         $volumen $em->getRepository('App:Volumen')->findOneBy(['volumen' => $vol'numero' => $num]);
  147.         if (!$volumen) {
  148.             $imagen 'https://revcolcard.org/wp-content/uploads/2020/06/Portada-Vol.-27-N-2.jpeg';
  149.             $volumen = new Volumen();
  150.             $volumen->setIsActive(true);
  151.             $volumen->setImage($imagen);
  152.             $volumen->setNumero($num);
  153.             $volumen->setVolumen($vol);
  154.         }
  155.         $volumen->setPublicationYear($year);
  156.         $em->persist($volumen);
  157.         $em->flush();
  158.         return $volumen;
  159.     }
  160.     private function seccion($sec): Seccion
  161.     {
  162.         $em $this->getDoctrine()->getManager();
  163.         $seccion $em->getRepository('App:Seccion')->findOneBy(['uid' => $sec]);
  164.         if (!$seccion) {
  165.             throw new NotFoundHttpException('Seccion no encontrada');
  166.         }
  167.         return $seccion;
  168.     }
  169.     private function autores($autores): array
  170.     {
  171.         $em $this->getDoctrine()->getManager();
  172.         $array = [];
  173.         $listas explode(';'$autores);
  174.         foreach ($listas as $lista) {
  175.             $autor $em->getRepository('App:Autor')->findOneBy(['nombre' => $lista]);
  176.             if (!$autor) {
  177.                 $autor = new Autor();
  178.                 $autor->setNombre($lista);
  179.                 $em->persist($autor);
  180.                 $em->flush();
  181.             }
  182.             $array[] = $autor;
  183.         }
  184.         return $array;
  185.     }
  186.     private function keywords($keywords): array
  187.     {
  188.         $em $this->getDoctrine()->getManager();
  189.         $array = [];
  190.         $listas explode(';'$keywords);
  191.         foreach ($listas as $lista) {
  192.             $palabra $em->getRepository('App:PalabraClave')->findOneBy(['palabra' => $lista]);
  193.             if (!$palabra) {
  194.                 $palabra = new PalabraClave();
  195.                 $palabra->setPalabra($lista);
  196.                 $palabra->setIdioma('ES');
  197.                 $em->persist($palabra);
  198.                 $em->flush();
  199.             }
  200.             $array[] = $palabra;
  201.         }
  202.         return $array;
  203.     }
  204.     /**
  205.      * @Route("/searching", name="searhing", methods={"POST"})
  206.      */
  207.     public function searching(Request $request)
  208.     {
  209.         $em $this->getDoctrine()->getManager();
  210.         $search $request->get('search');
  211.         $articulos $em->getRepository('App:Articulo')->findSearching($search);
  212.         return $this->render('default/recent.html.twig', [
  213.             'articulos' => $articulos
  214.         ]);
  215.     }
  216.     /**
  217.      * @Route("/?", name="search", methods={"GET"})
  218.      */
  219.     public function search(Request $request)
  220.     {
  221.         $em $this->getDoctrine()->getManager();
  222.         $search $request->get('search');
  223.         $resultado $em->getRepository('App:Articulo')->findSearchingGeneral($search);
  224.         return $this->render('default/_list.html.twig', [
  225.             'resultado' => $resultado
  226.         ]);
  227.     }
  228.     /**
  229.      * @Route("/numbers", name="numbers")
  230.      */
  231.     public function numeros()
  232.     {
  233.         $em $this->getDoctrine()->getManager();
  234.         $volumenes $em->getRepository('App:Volumen')->count(['isActive' => true]);
  235.         $articulos $em->getRepository('App:Articulo')->count([]);
  236.         $autores $em->getRepository('App:Autor')->count([]);
  237.         $palabra $em->getRepository('App:PalabraClave')->count([]);
  238.         return $this->render('default/numbers.html.twig', [
  239.             'conteovolumen' => $volumenes,
  240.             'conteoArticulos' => $articulos,
  241.             'conteoAutores' => $autores,
  242.             'conteoPalabra' => $palabra
  243.         ]);
  244.     }
  245.     /**
  246.      * @Route("/articulo/{id}", name="articulo")
  247.      */
  248.     public function articulo(Request $request)
  249.     {
  250.         $em $this->getDoctrine()->getManager();
  251.         $articulo $em->getRepository(Articulo::class)->find($request->get('id'));
  252.         return $this->render('default/articulo.html.twig', ['articulo' => $articulo]);
  253.     }
  254.     /**
  255.      * @Route("/admin/importador",name="importador", methods={"POST","GET"})
  256.      */
  257.     public function importador(Request $request)
  258.     {
  259.         return $this->render('default/import.html.twig', [
  260.         ]);
  261.     }
  262.     /**
  263.      * @Route("/about",name="about")
  264.      */
  265.     public function about(Request $request)
  266.     {
  267.         return $this->render('default/about.html.twig', [
  268.         ]);
  269.     }
  270.     /**
  271.      * @Route("/",name="years")
  272.      */
  273.     public function years(Request $request)
  274.     {
  275.         return $this->historicoContent(false);
  276.     }
  277.     private function historicoContent($tipo)
  278.     {
  279.         $em $this->getDoctrine()->getManager();
  280.         $years $em->getRepository(Volumen::class)->years($tipo);
  281.         $arr = [];
  282.         foreach ($years as $year) {
  283.             if ($year['conteo'] > 0) {
  284.                 $year $year['years'];
  285.                 $int intval($year 10);
  286.                 $arr[$int 10][] = $year;
  287.             }
  288.         }
  289.         return $this->render('default/years.html.twig', [
  290.             'years' => $arr,
  291.             'tipo' => ($tipo 'Suplemento' 'Articulo').'s'
  292.         ]);
  293.     }
  294.     /**
  295.      * @Route("/suplementos",name="suplementos")
  296.      */
  297.     public function suplem(Request $request)
  298.     {
  299.         return $this->historicoContent(true);
  300.     }
  301.     /**
  302.      * @Route("/historico/",name="historico_years", methods={"POST"})
  303.      */
  304.     public function historico(Request $request)
  305.     {
  306.         $em $this->getDoctrine()->getManager();
  307.         $suplemento $request->get('tipo') == "Suplementos"?true:false;
  308.         $volumenes $em->getRepository(Volumen::class)->findBy(
  309.             [
  310.                 'publicationYear' => $request->get('year'),
  311.                 'isActive' => true,
  312.                 'esSuplemento'=>$suplemento
  313.             ],
  314.             [
  315.                 'publicationYear' => 'DESC',
  316.                 'numero' => 'DESC'
  317.             ]
  318.         );
  319.         return $this->render('default/volumen_list.html.twig', [
  320.             'volumen' => $volumenes,
  321.             'year' => $request->get('year'),
  322.             'tipo' => $request->get('tipo')
  323.         ]);
  324.     }
  325.     /**
  326.      * @Route("/volumen/{volumen}/{numero}",name="volumen_view", methods={"GET"})
  327.      */
  328.     public function volumenView(Request $request)
  329.     {
  330.         $em $this->getDoctrine()->getManager();
  331.         $volumen $em->getRepository(Volumen::class)->findOneBy(
  332.             [
  333.                 'volumen' => $request->get('volumen'),
  334.                 'numero' => $request->get('numero'),
  335.             ]
  336.         );
  337.         return $this->render('default/volumen_view.html.twig', [
  338.             'vol' => $volumen
  339.         ]);
  340.     }
  341.     /**
  342.      * @Route("/home", name="home")
  343.      */
  344.     public function home2()
  345.     {
  346.         return $this->redirectToRoute('years');
  347.         $em $this->getDoctrine()->getManager();
  348.         $volumen $em->getRepository(Volumen::class)->findOneBy(['isActive' => true], ['volumen' => 'DESC']);
  349.         $articulo $em->getRepository(Articulo::class)->findBy(['volumenRel' => $volumen], [], 5);
  350.         return $this->render('home.html.twig',
  351.             [
  352.                 'reciente' => $articulo
  353.             ]);
  354.     }
  355. }