src/Controller/BiographiesController.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\ClassTheatre\aside\asidesUrlPagination;
  4. use App\ClassTheatre\asides;
  5. use App\ClassTheatre\TheatreController;
  6. use App\Service\Abonnements\Abonnements;
  7. use App\Service\Functions;
  8. use App\Validator\Relations;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\Cache\Adapter\AdapterInterface;
  11. use Symfony\Component\Form\Extension\Core\Type\FormType;
  12. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. use Symfony\Component\Validator\Constraints\Length;
  19. use Symfony\Component\Validator\Constraints\NotBlank;
  20. use TheatreCore\Entity\Bigregions;
  21. use TheatreCore\Entity\Extranetusers;
  22. use TheatreCore\Entity\Persons;
  23. use TheatreCore\Entity\Playlists;
  24. use TheatreCore\Entity\Spectacles;
  25. use TheatreCore\Form\Type\RelationsType;
  26. class BiographiesController extends TheatreController
  27. {
  28.     private $spectacles;
  29.     private $serviceAbonnements;
  30.     private $context_spectacles;
  31.     private $title_page;
  32.     private ?AdapterInterface $cache;
  33.     // {{{ _construct()
  34.     public function __construct(
  35.         EntityManagerInterface $em,
  36.         TranslatorInterface $translator,
  37.         TokenStorageInterface $tokenStorage,
  38.         Abonnements $abonnements,
  39.         AdapterInterface $cache
  40.     )
  41.     {
  42.         parent::__construct($translator$tokenStorage);
  43.         $this->context['controller'] = $this->view->controller 'biographies';
  44.         $this->em $em;
  45.         $this->cache $cache;
  46.         $this->spectacles $em->getRepository(Spectacles::class);
  47.         $this->serviceAbonnements $abonnements;
  48.     }
  49.     /**
  50.      *
  51.      * @Route("/biographies/", name="biographies")
  52.      *
  53.      * @Route("/{type}/biographies", name="biographies_filtre", requirements={
  54.      *     "type": "auteurs|metteurs-en-scene|acteurs|traducteurs"
  55.      * })
  56.      *
  57.      */
  58.     public function action_index($type 'tous'Functions $functionsRequest $request)
  59.     {
  60.         // classe person
  61.         $persons $this->em->getRepository(Persons::class);
  62.         $navigation_toutes_biographie = array(
  63.             array(
  64.                 'name' => 'Toutes les biographies',
  65.                 'key' => 'biographies'
  66.             ),
  67.         );
  68.         $navigation_biographie = array(
  69.             array(
  70.                 'name' => $this->context['tr']->trans('Auteurs'),
  71.                 'key_genre' => 'auteurs'
  72.             ),
  73.             array(
  74.                 'name' => $this->context['tr']->trans('metteurs_en_scene'),
  75.                 'key_genre' => 'metteurs-en-scene'
  76.             ),
  77.             array(
  78.                 'name' => $this->context['tr']->trans('acteurs'),
  79.                 'key_genre' => 'acteurs'
  80.             ),
  81.             array(
  82.                 'name' => $this->context['tr']->trans('traducteurs'),
  83.                 'key_genre' => 'traducteurs'
  84.             )
  85.         );
  86.         $type_persons = array(
  87.             'auteurs' => array(
  88.                 'standard' => 'auteurs',
  89.                 'standard_singulier' => 'auteur',
  90.                 'type_name' => 'authors',
  91.                 'title_page' =>  'Les auteurs de pièces de théâtre',
  92.                 'locate' => array(=> 'Auteurs'),
  93.                 'infview' => 'aut',
  94.                 'special' => array('author' => true),
  95.             ),
  96.             'ensavoirplus' => array(
  97.                 'standard' => 'en savoir +',
  98.                 'standard_singulier' => 'en savoir +',
  99.             ),
  100.             'metteurs-en-scene' => array(
  101.                 'standard' => 'metteurs en scène',
  102.                 'standard_singulier' => 'metteur en scène',
  103.                 'type_name' => 'directors',
  104.                 'title_page' =>  'Les metteurs en scène de pièces de théâtre',
  105.                 'locate' => array(=> 'Metteurs en sc&egrave;ne'),
  106.                 'infview' => 'met',
  107.                 'special' => array('idrole' => 'role_director'),
  108.             ),
  109.             'traducteurs' => array(
  110.                 'standard' => 'traducteurs',
  111.                 'standard_singulier' => 'traducteur',
  112.                 'type_name' => 'translators',
  113.                 'title_page' =>  'Les traducteurs de textes de théâtre',
  114.                 'locate' => array(=> 'Traducteurs'),
  115.                 'infview' => 'trad',
  116.                 'special' => array('translator' => true),
  117.             ),
  118.             'acteurs' => array(
  119.                 'standard' => 'acteurs',
  120.                 'standard_singulier' => 'acteur',
  121.                 'type_name' => 'actors',
  122.                 'title_page' =>  'Les acteurs de théâtre',
  123.                 'locate' => array(=> 'Acteurs'),
  124.                 'infview' => 'act',
  125.                 'special' => array('idrole' => 'role_comedien'),
  126.             ),
  127.             'tous' => array(
  128.                 'title_page' => 'Les biographies d\'auteurs, de metteurs en scène, d\'acteurs et de traducteurs de théâtre',
  129.                 'locate' => array(=> 'Biographies'),
  130.                 'infview' => 'bio',
  131.                 'type_name' => null,
  132.                 'standard_singulier' => null,
  133.                 'standard' => 'biographies',
  134.             ),
  135.         );
  136.         $standard $type_persons[$type]['standard'];
  137.         $standard_singulier $type_persons[$type]['standard_singulier'];
  138.         // url
  139.         if($type=='tous') {
  140.             $this->view->url_page_bios '/biographies/';
  141.         } else {
  142.             $this->view->url_page_bios '/'.$type.'/biographies';
  143.             $this->view->typeperson $type;
  144.         }
  145.         $this->rub_courante $type;
  146.         $this->view->$type true;
  147.         $this->view->standard $standard;
  148.         $this->view->standard_singulier $standard_singulier;
  149.         // recherche alphabétique ou une lettre au hasard
  150.         if(isset($_GET['lettre']) && strlen($_GET['lettre'])==1) {
  151.             $alpha strtoupper($_GET['lettre']);
  152.         } else {
  153.             $alpha strtoupper(array_rand($functions->getAlphaUpper()));
  154.         }
  155.         // liste alpha et alpha
  156.         $this->view->alphabet $functions->getAlphaList($alpha);
  157.         $this->view->alpha strtoupper($alpha);
  158.         $this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder(''FormType::class);
  159.         // formulaire de recherche avec case à cocher des types
  160.         $this->context['formAsideSearch']->add('lastname'TextType::class, [
  161.             'label' => 'Nom',
  162.             'constraints' => [
  163.                 new NotBlank([
  164.                     'message' => 'Veuillez saisir au moins deux lettres du nom'
  165.                 ]),
  166.                 new Length([
  167.                     'min' => 2,
  168.                     'minMessage' => 'Veuillez saisir au moins deux lettres du nom',
  169.                     'max' => 50,
  170.                     'maxMessage' => 'Veuillez saisir au maximum 50 caractères du nom'
  171.                 ])
  172.             ],
  173.             'attr' => [
  174.                 'size' => '28',
  175.                 'id' => 'lastname',
  176.                 'placeholder' => 'Rechercher une personne'
  177.             ]
  178.         ]);
  179.         $this->context['formAsideSearch']->add('search'SubmitType::class, [
  180.             'label' => 'OK',
  181.             'attr' => [
  182.                 'class'=>'boutform'
  183.             ]
  184.         ]);
  185.         $this->getCommonSearchView($request);
  186.         $params_persons = array(
  187.             'params' => array(
  188.                 'limit' => 'all',
  189.             ),
  190.             'special' => array(
  191.                 'publish' => 1,
  192.                 'count_only' => true
  193.             ),
  194.             'dbg' => array('persons','liste des personnes')
  195.         );
  196.         $cacheKey "biographies_index_getListPersons_{$type}_";
  197.         // conditions
  198.         if(!empty($type_persons[$type]['special'])) {
  199.             $params_persons['special'] = $type_persons[$type]['special'];
  200.             $specialkeys array_keys($type_persons[$type]['special']);
  201.             $cacheKey .= array_pop($specialkeys);
  202.         }
  203.         // si recherche alphabétique
  204.         if(!empty($alpha)) {
  205.             $params_persons['special']['alpha'] = $alpha;
  206.             $cacheKey .= "_$alpha";
  207.         }
  208.         // nb total
  209.         $total $persons->countPersons($type_persons[$type]['type_name']);
  210.         $this->view->nb_total number_format($total0""" ");
  211.         $params_persons['special']['count_only'] = true;
  212.         $cacheItem $this->cache->getItem("nb_total_filter_$cacheKey");
  213.         if (! $cacheItem->isHit()) {
  214.             $res $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
  215.             $cacheItem->set($res)
  216.                 ->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
  217.             $this->cache->save($cacheItem);
  218.         }
  219.         $this->view->nb_total_filter $cacheItem->get();
  220. //        $pagerOptions['perPage'] = 62;
  221.         $pagerOptions['perPage'] = 402;
  222.         $this->view->pagination $this->getPagination($this->view->nb_total_filter$pagerOptions['perPage']);
  223.         $this->view->pagination['custom_params'] = 'lettre='.$alpha;
  224.         $params_persons['params']['limit'] = array($this->getLimitStart(), $pagerOptions['perPage']);
  225.         unset($params_persons['special']['count_only']);
  226.         $this->view->resultat false;
  227.         // affichage si recherche par lettre (ou par defaut) (pas de recherche par nom/pays)
  228.         if ($this->context['formAsideSearch']->isSubmitted())  {
  229.             $lastname $this->context['formAsideSearch']->get('lastname')->getData();
  230.             $this->view->lastname $lastname;
  231.             $this->view->resultat true;
  232.             $params_persons['special']['search'] = $lastname;
  233.             $cacheKey .= "_$lastname";
  234.             unset($params_persons['special']['alpha']);
  235.         }
  236.         // générer la liste
  237.         $cacheItem $this->cache->getItem("getListPersons_$cacheKey");
  238.         if (! $cacheItem->isHit()) {
  239.             $res $persons->getListPersons($params_persons);
  240.             $cacheItem->set($res)
  241.                 ->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
  242.             $this->cache->save($cacheItem);
  243.         }
  244.         $this->view->liste $cacheItem->get();
  245.         // si c'était une recherche et qu'il n'y a pas de résultat, rechercher sans le type
  246.         if(!empty($lastname) && empty($this->view->liste) && !empty($params_persons['special'])) {
  247.             unset($params_persons['special']);
  248.             $params_persons['special']['search'] = $lastname;
  249.             $params_persons['special']['publish'] = 1;
  250.             $this->view->liste_autres $persons->getListPersons($params_persons);
  251.         }
  252.         $this->view->title_page $type_persons[$type]['title_page'];
  253.         $this->view->locate $type_persons[$type]['locate'];
  254.         $this->view->type_persons[$type]['infview'] = true;
  255.         // tous les types
  256.         $this->view->type_persons $type_persons;
  257.         // swfobject
  258.         $this->view->jquery_flash true;
  259.         $this->context['view']->use_addthis true;
  260.         $this->context['view']->is_alphabet true;
  261.         //On affiche la publicité google
  262.         $asides_publicite = new asides();
  263.         asides::setEntityManager($this->em);
  264.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  265.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  266.         $asides = new asides();
  267.         $asides->load(['recherche_personne' => array(
  268.             'exec' => ['alone' => true'color' => 'alternative'],
  269.             'action' => '/biographies/'
  270.         )]);
  271.         // On n'affiche pas si recherche patronymique
  272.         if (!$this->view->resultat) {
  273.             $asides->load(['url_lists' => array(
  274.                 'exec' => array(
  275.                     'htmlstart' => true
  276.                 ),
  277.                 'php' => array(
  278.                     'method' => 'asidesUrlLists',
  279.                     'urls' => $navigation_toutes_biographie,
  280.                     'url' => '/biographies?lettre={{v_alpha}}',
  281.                     'params' => array(
  282.                         'activate' => $standard
  283.                     )
  284.                 ),
  285.                 'title' => html_entity_decode('Voir'),
  286.             )]);
  287.             $asides->load(['url_lists,filtrer-par' => array(
  288.                 'exec' => array(
  289.                     'htmlend' => true
  290.                 ),
  291.                 'php' => array(
  292.                     'method' => 'asidesUrlLists',
  293.                     'urls' => $navigation_biographie,
  294.                     'url' => '/key_genre/biographies?lettre={{v_alpha}}',
  295.                     'params' => array(
  296.                         'activate' => $type,
  297.                         //key_lettre' => $alpha
  298.                     )
  299.                 ),
  300.                 'title' => html_entity_decode('Filtrer par'),
  301.             )]);
  302.         }
  303.         $asides->load('bio_maj_v2');
  304.         asides::setEntityManager($this->em);
  305.         asides::loadaside('Publicite')->addWithNational($asides); //$this->area
  306.         $this->context['view']->aside $asides->view($this->context['view']);
  307.         return $this->view('biographies/view.html.twig');
  308.     }
  309.     /**
  310.      *
  311.      * @Route("/biographies/videos/decouverte-auteurs", name="biographies_decouverte_auteurs")
  312.      *
  313.      */
  314.     public function DecouverteAuteurs()
  315.     {
  316.         // récupération des playlists l'auteur par lui même
  317.         $playlists $this->em->getRepository(Playlists::class);
  318.         // playlist
  319.         $list_playlists $playlists->getListPlaylists(array(
  320.             'special' => array('idclassifications' => array(
  321.                 116,
  322.             )),
  323.             'limit' => array(0,200),
  324.             'dbg' => array('playlists_auteurs','Les auteurs par eux même'),
  325.         ));
  326.         foreach($list_playlists as $k=>$v) {
  327.             foreach($v['idperson'] as $p) {
  328.                 $list_playlists_new[$p['lastname'].$k] = $v;
  329.             }
  330.         }
  331.         ksort($list_playlists_new);
  332.         $this->context['view']->list_playlists $list_playlists_new;
  333.         $this->view->locate = array(
  334.             '/biographies/' => 'Biographies',
  335.             => 'Les auteurs par eux-même'
  336.         );
  337.         $this->context['view']->use_addthis true;
  338.         $this->view->title_page 'Les auteurs par eux-même';
  339.         $asides = new asides();
  340.         $asides->load('bio_video_decouverte-auteurs');
  341.         $asides->load('educ_lettre_info');
  342.         $this->context['view']->aside $asides->view($this->context['view']);
  343.         return $this->view('biographies/decouverte-auteurs.html.twig');
  344.     }
  345.     /**
  346.      *
  347.      * @Route("/biographies/spectacles/affiche/", name="biographies_decouverte_auteurs")
  348.      * @Route("/biographies/spectacles/affiche/filtre/{p_filtre}/periode/{p_periode}", name="biographies_decouverte_auteurs_filtre_periode")
  349.      * @Route("/biographies/spectacles/affiche/periode/{p_periode}/area/{p_area}", name="biographies_decouverte_auteurs_filtre_periode_area")
  350.      * @Route("/biographies/spectacles/affiche/periode/{p_periode}/type/{p_type}", name="biographies_decouverte_auteurs_periode_type")
  351.      * @Route("/biographies/spectacles/affiche/filtre/{p_filtre}/periode/{p_periode}/area/{p_area}", name="biographies_decouverte_auteurs_periode_area")
  352.      *
  353.      * @Route("/biographies/spectacles/affiche/area/{p_area}/periode/{p_periode}", name="biographies_decouverte_auteurs_filtre_area_periode")
  354.      * @Route("/biographies/spectacles/affiche/filtre/{p_filtre}/area/{p_area}/periode/{p_periode}", name="biographies_decouverte_auteurs_area_periode")
  355.      *
  356.      */
  357.     public function action_affiche($p_filtre null$p_periode null$p_area null$p_type null)
  358.     {
  359.         $this->view->action 'spectacles';
  360.         $this->context['params']['filtre'] = $p_filtre;
  361.         $this->context['params']['periode'] = $p_periode;
  362.         $this->context['params']['area'] = $p_area;
  363.         $this->context['params']['type'] = $p_type;
  364.         //Nombre de jour par défaut
  365.         $this->context['view']->nb_jour 30;
  366.         //Le format par des vignettes des auteurs
  367.         $params_display['vignette_format'] = array('width'=>154,'height'=>154,'direction'=>'crop');
  368.         //Menu affichant les periodes des auteurs
  369.         $auteurs_menu_genre = array(
  370.             array(
  371.                 'name' => 'Tous les auteurs',
  372.                 'key_genre' => 'all'
  373.             ),
  374.             array(
  375.                 'name' => 'Contemporains',
  376.                 'key_genre' => 'contemporain'
  377.             ),
  378.             array(
  379.                 'name' => 'Contemporains édités',
  380.                 'key_genre' => 'contemporain-edite'
  381.             ),
  382.             array(
  383.                 'name' => 'Vivants',
  384.                 'key_genre' => 'vivant'
  385.             ),
  386.             array(
  387.                 'name' => 'Vivants édités',
  388.                 'key_genre' => 'vivant-edite'
  389.             ),
  390.             array(
  391.                 'name' => 'Du domaine public',
  392.                 'key_genre' => 'public'
  393.             )
  394.         );
  395.         //avec photos :
  396.         $filtre_photos = array(
  397.             "all" => array(
  398.                 'name' => 'Tous',
  399.                 'key_filtre' => 'all',
  400.             ),
  401.             "photos" => array(
  402.                 'name' => 'Avec photos',
  403.                 'key_filtre' => 'photos'
  404.             )
  405.         );
  406.         //Liste des périodes possibles en base de données
  407.         $periodes = array(
  408.             'contemporain-edite' => 'contemporains édités',
  409.             'contemporain' => 'contemporains',
  410.             'vivant-edite' => 'vivants édités',
  411.             'vivant' => 'vivants',
  412.             'public' => 'du domaine public',
  413.             'francophone' => 'francophones',
  414.             'non-francophone' => 'non francophones',
  415.             'all' => '',
  416.         );
  417.         //Gestion des recherche par date fixe dans l'aside
  418.         $auteurs_menu_periodes = array(
  419.             array(
  420.                 'name' => '5 prochains jours',
  421.                 'key_day' => 5// TODO:  fixe v2
  422.             ),
  423.             array(
  424.                 'name' => '10 prochains jour',
  425.                 'key_day' => 10// TODO:  fixe v2
  426.             ),
  427.             array(
  428.                 'name' => '30 prochains jours',
  429.                 'key_day' => 30// TODO:  fixe v2
  430.             ),
  431.             array(
  432.                 'name' => '12 prochains mois',
  433.                 'key_day' => 365// TODO:  fixe v2
  434.             )
  435.         );
  436.         $day_all false;
  437.         if(!empty($_REQUEST['d'])){
  438.             if(in_array($_REQUEST['d'], array_column($auteurs_menu_periodes'key_day'))){
  439.                 $this->context['view']->nb_jour $_REQUEST['d'];
  440.                 if(!is_numeric($this->context['view']->nb_jour)){
  441.                     $day_all true;
  442.                 }
  443.             }
  444.         }
  445.         $types_person = array(
  446.             'author' => 'auteurs',
  447.             'director' => 'metteurs en scène',
  448.             'actor' => 'acteurs',
  449.         );
  450.         if(empty($this->context['params']['type']) || !array_key_exists($this->context['params']['type'], $types_person)) {
  451.             $type_person 'author';
  452.         } else {
  453.             $type_person $this->context['params']['type'];
  454.         }
  455.         $filtre_photo true//par défault avec photo
  456.         $filtre_photos_seleted "photos";
  457.         if(!empty($this->context['params']['filtre']) && array_key_exists($this->context['params']['filtre'], $filtre_photos)){
  458.             $filtre_photos_seleted $this->context['params']['filtre'];
  459.             //si le filtre all est sélectionnéo on désactive le filtre par photo
  460.             if($filtre_photos_seleted == 'all'){
  461.                 $filtre_photo false;
  462.             }
  463.         }
  464.         $this->context['view']->with_photos $filtre_photos_seleted;
  465.         $this->context['view']->$type_person true;
  466.         $this->context['view']->type_person $type_person;
  467.         if(empty($this->context['params']['periode']) || !array_key_exists($this->context['params']['periode'], $periodes)) {
  468.             $periode 'contemporain-edite';
  469.         } else {
  470.             $periode $this->context['params']['periode'];
  471.         }
  472.         $this->context['view']->periode $periode;
  473.         $this->context['view']->periode_title $periodes[$periode];
  474.         $persons $this->em->getRepository(Persons::class);
  475.         /* paramètre sans les dates customs */
  476.         $params_sql = array(
  477.             'special' => array(
  478.                 'count_only' => true//pour calculer le nombre total de personne
  479.                 'spectacle' => array(
  480.                     'type' => $type_person,
  481.                 )
  482.             ),
  483.             'params' => array(
  484.                 'limit' => array(0,4),
  485.             ),
  486.             'dbg' => array('affiche','Les personnes à l\'affiche')
  487.         );
  488.         if(!$day_all){
  489.             $params_sql['special']['spectacle']['prochains'] = $this->context['view']->nb_jour.'D';
  490.         }
  491.         if($filtre_photo){
  492.             $params_sql['special']['with_photo'] = true;
  493.         }
  494.         if($periode!='all') {
  495.             if($periode=='francophone') {
  496.                 $params_sql['special']['is_francophone'] = true;
  497.             } elseif($periode=='non-francophone') {
  498.                 $params_sql['special']['is_non_francophone'] = true;
  499.             } elseif($periode=='contemporain-edite') {
  500.                 $params_sql['special']['spectacle']['person_periode'] = 'contemporain';
  501.                 $params_sql['special']['spectacle']['text_edite'] = true;
  502.             } elseif($periode=='vivant-edite') {
  503.                 $params_sql['special']['spectacle']['person_periode'] = 'vivant';
  504.                 $params_sql['special']['spectacle']['text_edite'] = true;
  505.             } else {
  506.                 $params_sql['special']['spectacle']['person_periode'] = $periode;
  507.             }
  508.         }
  509.         $area = (!empty($this->context['params']['area'])) ? $this->context['params']['area'] : false;
  510.         if($area){
  511.             $regions $this->em->getRepository(Bigregions::class);
  512.             $list_regions $regions->getRegionName($area);
  513.             if ($regions->getZipCode($area)) {
  514.                 $sql_area ' AND '.$regions->getZipCode($area);
  515.             } else {
  516.                 $sql_area false;
  517.             }
  518.             // if($periode=='contemporain-edite') {
  519.             if(is_array($list_regions) && key_exists($area$list_regions)){
  520.                 $params_sql['special']['spectacle']['country'] = $area;
  521.                 $this->context['view']->country_name $regions->getNameCountry($area);
  522.             }
  523.             else{
  524.                 $params_sql['special']['spectacle']['country'] = 'FR';
  525.                 $this->context['view']->region_name $regions->getRegionName($area);
  526.             }
  527.             if ($sql_area) {
  528.                 $params_sql['params']['where'] = $sql_area;
  529.             }
  530.             // }
  531.             $this->context['view']->area true;
  532.         }
  533.         //input et données du formulaire pour les dates customs, choisi par l'utilisateur
  534. //        $form->addElement('text', 'datestart', 'Entre', array('size'=>'7','id'=>'datestart','placeholder' => 'Début'));
  535. //        $form->addElement('text', 'dateend', 'et', array('size'=>'7','id'=>'dateend','placeholder' => 'Fin'));
  536.         if(!empty($_REQUEST['datestart']) && strlen($_REQUEST['datestart'])!=6) {
  537.             $datestart $_REQUEST['datestart'];
  538.         }
  539.         if(!empty($_REQUEST['dateend']) && strlen($_REQUEST['dateend'])!=6) {
  540.             $dateend $_REQUEST['dateend'];
  541.         }
  542.         if(!empty($datestart) && !empty($dateend)) {
  543.             $this->context['view']->datestart $datestart;
  544.             $this->context['view']->dateend $dateend;
  545.             // pour le array
  546.             $params_sql['special']['spectacle']['periode']['start'] = $datestart;
  547.             $params_sql['special']['spectacle']['periode']['end'] = $dateend;
  548.         }
  549.         //nombre total
  550.         $totalItems $persons->queryOne($persons->getSQLPersons($params_sql['params'],$params_sql['special']));
  551.         //nombre total d'élément pour la création des pages
  552.         if($totalItems>0) {
  553.             $this->context['view']->result true;
  554.         }
  555.         $pagerOptions['totalItems'] = $totalItems;
  556.         $this->perPage 50;
  557.         $this->view->pagination $this->getPagination($totalItems$this->perPage);
  558.         $this->view->pagination['totalItems'] = $totalItems;
  559.         $this->view->pagination['custom'] = true;
  560.         $this->view->pagination['custom_name'] = 'biographies';
  561.         unset($params_sql['special']['count_only']);
  562.         $params_sql['params']['limit'] = array($this->getLimitStart(), $this->perPage);
  563.         $this->context['view']->persons $persons->getListPersons($params_sql,$params_display);
  564.         $this->context['view']->pagination['url_custom'] = '/biographies/spectacles/affiche/periode/'.$periode.'/?d='.$this->context['view']->nb_jour;
  565.         // ajouter masonery
  566.         $this->context['view']->js_more[] = 'jquery.masonry.min.js';
  567.         $this->context['view']->jquery_cal 'datepicker';
  568.         $this->context['view']->use_addthis true;
  569.         /*
  570.         *
  571.         *   ASIDE
  572.         *
  573.         */
  574.         if($area){
  575.             $asides_top = new asides();
  576.             $asides_top->load(['aside_top' => array(
  577.                 'php' => array(
  578.                     'method' => 'asidesUrlRegions',
  579.                 )
  580.             )
  581.             ]);
  582.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  583.         }
  584.         /* après !*/
  585.         $asides = new asides();
  586.         $asides->load(['url_lists,with_photo' => array(
  587.             'exec' => array(
  588.                 'htmlstart' => true
  589.             ),
  590.             'php' => array(
  591.                 'method' => 'asidesUrlLists',
  592.                 'urls' => $filtre_photos,
  593.                 'url' => '/biographies/spectacles/affiche/filtre/key_filtre/generate_params?d={v_nb_jour}',
  594.                 'params' => array(
  595.                     'activate' => $filtre_photos_seleted,
  596.                 ),
  597.                 'structure' => array(
  598.                     'area' => $area,
  599.                     'periode' => $periode
  600.                 )
  601.             ),
  602.             'title' => html_entity_decode('&Agrave; l\'affiche'),
  603.         )]);
  604.         $asides->load(['url_lists,auteurs_genre' => array(
  605.             'exec' => array(
  606.                 'alone' => false
  607.             ),
  608.             'php' => array(
  609.                 'method' => 'asidesUrlLists',
  610.                 'urls' => $auteurs_menu_genre,
  611.                 'url' => '/biographies/spectacles/affiche/generate_params?d={v_nb_jour}',
  612.                 'params' => array(
  613.                     'activate' => $periode,
  614.                 ),
  615.                 'structure' => array(
  616.                     'filtre' => $filtre_photos_seleted,
  617.                     'area' => $area,
  618.                     'periode' => 'key_genre'
  619.                 )
  620.             ),
  621.             'title' => 'Trier'
  622.         )]);
  623.         $asides->load(['url_lists,textes_a_venir' => array(
  624.             'exec' => array(
  625.                 'htmlend' => true
  626.             ),
  627.             'php' => array(
  628.                 'method' => 'asidesUrlLists',
  629.                 'urls' => $auteurs_menu_periodes,
  630.                 'url' => '/biographies/spectacles/affiche/generate_params?d=key_day'//critiques/spectacles/{area_view}?d={k}',
  631.                 'params' => array(
  632.                     'activate' => $this->context['view']->nb_jour,
  633.                 ),
  634.                 'structure' => array(
  635.                     'filtre' => $filtre_photos_seleted,
  636.                     'area' => $area,
  637.                     'periode' => $periode
  638.                 )
  639.             ),
  640.             'title' => html_entity_decode('Recherche par période'),
  641.         )]);
  642.         // $asides->load(['recherche_par_periode' => array(
  643.         //     'exec' => array(
  644.         //         'htmlend' => true
  645.         //     ),
  646.         //     'php' => array(
  647.         //         'method' => 'asidesUrlForm',
  648.         //         'action' => '/biographies/spectacles/affiche/periode/type/filtre/{v_with_photos}/?d={v_nb_jour}',
  649.         //     )
  650.         // )]);
  651.         $this->context['view']->area $area ?? null;
  652.         $asides->load(['common_carte' => array(
  653.             'url' => '/biographies/spectacles/affiche/periode/contemporain-edite/area/get_id?carte_version=svg'
  654.         )]);
  655.         //Chargement de la pub par région
  656.         asides::setEntityManager($this->em);
  657.         asides::loadaside('Publicite')->addWithNational($asides); //$this->area
  658.         asides::loadaside('Publicite')->addWithRegion($asides, ['region' => $area]); //$this->area
  659.         $asides->load(['bio_plusinfo' => array(
  660.             'exec' => ['color' => 'biographies']
  661.         )]);
  662.         $asides->load('common_participer_personne');
  663.         $this->context['view']->aside $asides->view($this->context['view']);
  664.         // situation et titre meta
  665.         $this->view->locate = array(
  666.             '/biographies/' => 'Biographies',
  667.             => ucfirst($types_person[$type_person]).' '.$this->context['view']->periode_title.' à l\'affiche'
  668.         );
  669.         $this->view->title_page ucfirst($types_person[$type_person]).' '.$this->context['view']->periode_title.' à l\'affiche';
  670.         return $this->view('biographies/affiche.html.twig');
  671.     }
  672.     /**
  673.      *
  674.      * @Route("/biographies/videos/decouverte-auteurs/", name="biographies_videos_decouverte_auteurs")
  675.      *
  676.      **/
  677.     public function decouverte_auteurs()
  678.     {
  679.         $playlists $this->em->getRepository(Playlists::class);
  680.         // playlist
  681.         $list_playlists $playlists->getListPlaylists(array(
  682.             'special' => array('idclassifications' => array(
  683.                 116,
  684.             )),
  685.             'limit' => array(0,200),
  686.             'dbg' => array('playlists_auteurs','Les auteurs par eux même'),
  687.         ));
  688.         foreach($list_playlists as $k=>$v) {
  689.             foreach($v['idperson'] as $p) {
  690.                 $list_playlists_new[$p['lastname'].$k] = $v;
  691.             }
  692.         }
  693.         ksort($list_playlists_new);
  694.         $this->context['view']->list_playlists $list_playlists_new;
  695.         $this->view->locate = array(
  696.             '/biographies/' => 'Biographies',
  697.             => 'Les auteurs par eux-même'
  698.         );
  699.         $this->context['view']->use_addthis true;
  700.         $this->view->title_page 'Les auteurs par eux-même';
  701.         $asides = new asides();
  702.         $asides->load('bio_video_decouverte-auteurs');
  703.         $asides->load('educ_lettre_info');
  704.         $this->context['view']->aside $asides->view($this->context['view']);
  705.         return $this->view('biographies/decouverte-auteurs.html.twig');
  706.     }
  707.     /**
  708.      *
  709.      * @Route("/biographies/modifier/recherche-biographie", name="biographies_modifier_recherche_biographie")
  710.      *
  711.      **/
  712.     public function action_action_recheche_biographie(Request $request)
  713.     {
  714.         // js en plus
  715.         $this->view->js_more = array(
  716.             'ajax.relation.js',
  717.         );
  718.         $this->title_page 'Ajouter un article';
  719.         $this->view->locate = array('/critiques/' => 'Espace critique'=> 'Ajouter');
  720.         $this->rub_courante 'critiques';
  721.         return $this->view('biographies/recherche-biographie.html.twig');
  722.     }
  723. }