src/Controller/EducController.php line 2500

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\Date_time;
  8. use App\Service\Functions;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. use TheatreCore\Entity\Contents;
  14. use TheatreCore\Entity\Multimedias;
  15. use TheatreCore\Entity\Persons;
  16. use TheatreCore\Entity\Spectacles;
  17. use TheatreCore\Entity\Texts;
  18. use TheatreCore\Entity\Typesstructures;
  19. class EducController extends TheatreController
  20. {
  21.     // l'objet spectacle
  22.     protected $spectacles;
  23.     // l'objet texts
  24.     protected $texts;
  25.     // ids de spectacles educ
  26.     protected $ids_spectacle_educ;
  27.     // ids de spectacles piece demontee
  28.     protected $ids_spectacle_piece_demontee;
  29.     // ids de spectacles avignon
  30.     protected $ids_spectacle_avignon;
  31.     // ids de spectacles minute pedagogique
  32.     protected $ids_spectacle_minute_pedagogique;
  33.     // ids de spectacles theatre en acte
  34.     protected $ids_spectacle_theatre_en_acte;
  35.     // ids de textes educ
  36.     protected $ids_text_educ;
  37.     // ids de textes educ
  38.     protected $ids_text_theatre_en_acte;
  39.     // résultat par page
  40.     protected $perPage 30;
  41.     // version de la carte
  42.     protected $carte_version 'svg';
  43.     // précision fil d'arianne
  44.     protected $locate null;
  45.     // aside
  46.     protected $asides "";
  47.     // {{{ _construct()
  48.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorTokenStorageInterface $tokenStorageFunctions $functionAbonnements $abonnements)
  49.     {
  50.         parent::__construct($translator$tokenStorage);
  51.         $GLOBALS['rub_courante'] = 'educ';
  52.         $this->context['controller'] = $this->view->controller 'educ';
  53.         $this->view->area '';
  54.         $this->em $em;
  55.         $this->function $function;
  56.         $this->spectacles $em->getRepository(Spectacles::class);
  57.         $this->asides = new asides();
  58.         $this->getCarteVersion();
  59.         $this->serviceAbonnements $abonnements;
  60.     }
  61.     // }}}
  62.     // {{{ finalizeAction()
  63.     /** Code exécuté après chaque action
  64.      *
  65.      *
  66.      * @access protected
  67.      * @return void
  68.      */
  69.     protected function finalizeAction()
  70.     {
  71.         if (preg_match("/theatre-en-acte/i"$this->view->action)) {
  72.             $this->buildMenuEduc();
  73.         }
  74.         else{
  75.             $this->buildMenu();
  76.         }
  77.         // aside
  78.         $this->view->aside $this->asides->view($this->view);
  79.         // fil d'arianne
  80.         $this->view->locate $this->getLocate();
  81.     }
  82.     // }}}
  83.     public function buildMenuEduc()
  84.     {
  85.         $this->context['view']->menu_theatreenacte = array(
  86.             'theatre-en-acte-accueil' => array('name' => 'Accueil'),
  87.             'theatre-en-acte-presentation' => array('name' => 'Présentation'),
  88.             'theatre-en-acte-auteurs' => array('name' => 'Auteurs'),
  89.             'theatre-en-acte-textes' => array('name' => 'Textes'),
  90.             'theatre-en-acte-enscene' => array('name' => 'En scène'),
  91.             'theatre-en-acte-preparation' => array('name' => 'En préparation'),
  92.         );
  93.         foreach($this->context['view']->menu_theatreenacte as $k=>$v) {
  94.             if($k==$this->context['action']) {
  95.                 $this->context['view']->menu_theatreenacte[$k]['active'] = 'on';
  96.             }
  97.         }
  98.     }
  99.     public function buildMenu()
  100.     {
  101.         $this->context['view']->menu_piecedemontee = array(
  102.             'piece-demontee' => array('name' => 'Auteurs'),
  103.             'piece-demontee-spectacle' => array('name' => 'Spectacles'),
  104.             'piece-demontee-metteurs' => array('name' => 'Metteurs en scène'),
  105.             'piece-demontee-bientot' => array('name' => 'En préparation'),
  106.         );
  107.         foreach($this->context['view']->menu_piecedemontee as $k=>$v) {
  108.             if($k==$this->context['action']) {
  109.                 $this->context['view']->menu_piecedemontee[$k]['active'] = 'on';
  110.             }
  111.         }
  112.     }
  113.     // {{{ action_view()
  114.     /** Présentation
  115.      *
  116.      * @Route("/educ/", name="educ_view")
  117.      *
  118.      */
  119.     public function action_view()
  120.     {
  121.         $this->context['action'] = $this->view->action 'view';
  122.         // situation et titre meta
  123.         $this->locate = array(
  124.             '/educ/' => 'Éduc',
  125.             => 'Présentation'
  126.         );
  127.         $this->title_page 'Présentation du projet Éduc';
  128.         return $this->view('educ/view.html.twig');
  129.     }
  130.     // }}}
  131.     // {{{ action_spectacles()
  132.     /** Spectacles bénéficiants d'un contenu éduc
  133.      *
  134.      * @Route("/educ/spectacles", name="educ_spectacles")
  135.      * @Route("/educ/spectacles/area/{p_area}", name="educ_spectacles_area")
  136.      * @Route("/educ/spectacles/type/{p_type}/area/{p_area}", name="educ_spectacles_area_type")
  137.      * @Route("/educ/spectacles/type/{p_type}", name="educ_spectacles_type")
  138.      *
  139.      */
  140.     public function action_spectacles($p_type null$p_area null)
  141.     {
  142.         $this->context['params']['area'] = $p_area;
  143.         $this->context['params']['type'] = $p_type;
  144.         $this->context['action'] = $this->view->action 'spectacles';
  145.         //le menu pour l'aside
  146.         $spec_affiche = array(
  147.             'prochains' => array(
  148.                 'name' => 'Spectacles à venir',
  149.                 'key_filtre' => 'prochains'
  150.             ),
  151.             'tous' => array(
  152.                 'name' => 'Tous les spectacles',
  153.                 'key_filtre' => 'tous'
  154.             )
  155.         );
  156.         // Condition pour afficher le titre
  157.         if(!empty($this->context['params']['type']) && $this->context['params']['type'] == 'prochains'){
  158.             $this->context['view']->prochains_spec true;
  159.         }
  160.         else{
  161.             $this->context['view']->tous_spec true;
  162.         }
  163.         //paramètre par défault pour la pagination
  164.         $params = array('perPage' => array('limit' => 20'url_custom' => '/educ/spectacles/'));
  165.         //on récupère le choix de l'utilisateur
  166.         if(!empty($this->context['params']['type']) && !empty($spec_affiche[$this->context['params']['type']])) {
  167.             $this->context['view']->type_spectacle $this->context['params']['type'];
  168.         } else {
  169.             $this->context['view']->type_spectacle 'tous';
  170.         }
  171.         //on applique un filtre
  172.         $params['get_date_creation'] = true//on récupère les dates de créations
  173.         $params['tri_date_creation'] = true//on tri par dates de créations
  174.         $this->context['view']->noshow false;
  175.         if($this->context['view']->type_spectacle == 'prochains'){
  176.             $params['prochains'] = 720//on récupère les spectacles dans les prochains 720 jours
  177.             $params['get_date_creation'] = false//on désactive les dates de créations
  178.             $params['tri_date_creation'] = false//on désactive le tri par dates de créations
  179.         }
  180.         //on récupère les spectacles
  181.         $this->getActionSpectaclesClassification(
  182.             $this->getListSpectaclesEduc(),
  183.             'educ',
  184.             null,
  185.             false,
  186.             false,
  187.             $params //on applique les filtres
  188.         );
  189.         if(!empty($this->context['view']->idtypestructure)){
  190.             $this->context['view']->custom_menu_structure true;
  191.             $this->context['view']->custom_aside_top true;
  192.             $asides_top = new asides();
  193.             $asides_top->load(['aside_top' => array(
  194.                 'php' => array(
  195.                     'method' => 'asidesUrlListsMenuCDN',
  196.                 )
  197.             )
  198.             ]);
  199.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  200.         }
  201.         else if(!empty($this->context['view']->area)){
  202.             $this->context['view']->custom_menu_area true;
  203.             $this->context['view']->custom_aside_top true;
  204.             $asides_top = new asides();
  205.             $asides_top->load(['aside_top' => array(
  206.                 'php' => array(
  207.                     'method' => 'asidesUrlRegions',
  208.                 )
  209.             )
  210.             ]);
  211.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  212.         }
  213.         foreach($this->context['view']->spectacles as $k=>$v) {
  214.             $this->context['view']->spectacles[$k]['footer_contact'] = true;
  215.             $this->context['view']->spectacles[$v['idspectacle']]['carrer'] = $this->spectacles->getObjectsCarrerDetails($v['idspectacle']);
  216.             if(!empty($params['get_date_creation'])){
  217.                 $this->context['view']->spectacles[$v['idspectacle']]['display']['affiche_date_creation'] = true;
  218.                 if((!empty($v['creation_date']))){
  219.                     $this->context['view']->spectacles[$v['idspectacle']]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($v['creation_date'], '%Y'true); //%a %d/%m/%Y
  220.                 }
  221.                 unset($this->context['view']->spectacles[$v['idspectacle']]['contact']);
  222.             }
  223.         }
  224.         $this->asides->load(['url_lists'=> array(
  225.             'exec' => [
  226.                 'htmlstart' => true,
  227.                 'htmlend' => ($this->context['view']->type_spectacle == 'prochains') ? true false
  228.             ],
  229.             'title' => html_entity_decode('&Agrave; l\'affiche'),
  230.             'php' => array(
  231.                 'method' => 'asidesUrlLists',
  232.                 'urls' => $spec_affiche,
  233.                 'url' => '/educ/spectacles/type/key_filtre/area/key_area/generate_params',
  234.                 'params' => array(
  235.                     'activate' => $this->context['view']->type_spectacle,
  236.                     'key_area' => $this->context['view']->area,
  237.                 ),
  238.                 'structure' => array(
  239.                     'structure_classic' => array(
  240.                         'idtypestructure' => 'v_idtypestructure'
  241.                     )
  242.                 )
  243.             )
  244.         )]);
  245.         if($this->context['view']->type_spectacle != 'prochains'){
  246.             $this->asides->load(['par_saison' => array(
  247.                 'exec' => ['htmlend' => true],
  248.                 'php' => array(
  249.                     'url' => '/educ/spectacles/generate_params',
  250.                     'method' => 'asidesUrlListsForms',
  251.                     'structure' => array(
  252.                         'type' => $this->context['view']->type_spectacle,
  253.                         'area' => $this->context['view']->area,
  254.                         'structure_classic' => array(
  255.                             's' => 'v_saison',
  256.                         )
  257.                     )
  258.                 ),
  259.                 'title' => 'Recherche par période'
  260.             )]);
  261.         }
  262.         $this->asides->load(['url_lists_alone,tn_cdn_sn' => array(
  263.             'php' => [
  264.                 'method' => 'tn_cdn_sn',
  265.                 'url' => '/educ/spectacles/generate_params',
  266.                 'params' => array(
  267.                     'activate' => (isset($this->context['view']->idtypestructure)) ? $this->context['view']->idtypestructure 'ALL'
  268.                 ),
  269.                 'structure' => array(
  270.                     'type' => $this->context['view']->type_spectacle,
  271.                     'area' => $this->context['view']->area,
  272.                     'structure_classic' => array(
  273.                         'd' => 'v_days',
  274.                         'type' => 'v_type',
  275.                         's' => 'v_saison',
  276.                         'y' => 'v_year',
  277.                         'dateend' => 'v_dateend',
  278.                         'datestart' => 'v_datestart',
  279.                         'idtypestructure' => 'key_structure'
  280.                     )
  281.                 )
  282.             ],
  283.             'title' => 'Voir dans'
  284.         )]);
  285.         $this->asides->load(['common_carrer_informations' => [
  286.             'color' => 'educ'
  287.         ]]);
  288.         //Chargement de la pub par région
  289.         asides::setEntityManager($this->em);
  290.         asides::loadaside('Publicite')->addWithRegion($this->asides, ['region' => $this->context['view']->area]); //$this->area
  291.         $this->asides->load(['common_carte' => array(
  292.             'url' => '/educ/spectacles/area/get_id?carte_version=svg'
  293.         )]);
  294.         $this->asides->load('educ_lettre_info');
  295.         $this->locate = array(
  296.             '/educ/' => 'Éduc',
  297.             => 'Spectacles'
  298.         );
  299.         $this->view->title_page 'Spectacles à contenus pédagogiques';
  300.         return $this->view('educ/spectacles.html.twig');
  301.     }
  302.     // }}}
  303.     // {{{ action_spectacles_bientot()
  304.     /** Spectacles qui bénéficieront prochainement d'un contenu éduc
  305.      *
  306.      *
  307.      */
  308.     public function action_spectacles_bientot()
  309.     {
  310.         $this->context['action'] = $this->view->action 'spectacles-bientot';
  311.         $this->getCommonInfos();
  312.         // rechercher les coproductions
  313.         $params_sql = array(
  314.             'special' => array(
  315.                 'by_classification' => 176// class_educ_attente
  316.                 'join' => true,
  317.                 'plus_proche' => true,
  318.             ),
  319.             'dbg' => array('spectacles_bientot''Spectacles avec la classification éduc à venir')
  320.         );
  321.         $this->context['view']->nb_spectacles_total $this->spectacles->countListSpectacles($params_sql);
  322.         $params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  323.         $this->context['view']->spectacles $this->spectacles->getListSpectacles($params_sql);
  324.         $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total);
  325.         $this->asides->load('educ_piece_demontee');
  326.         $this->asides->load('educ_lettre_info');
  327.         $this->asides->load('common_carrer_informations');
  328.     }
  329.     // }}}
  330.     // {{{ action_textes()
  331.     /** Textes bénéficiants d'un contenu éduc
  332.      *
  333.      * @Route("/educ/textes/", name="educ_textes")
  334.      * @Route("/educ/textes/area/{p_area}", name="educ_textes_area")
  335.      *
  336.      */
  337.     public function action_textes($p_area null)
  338.     {
  339.         $this->context['action'] = $this->view->action 'textes';
  340.         $this->context['view']->area $this->context['params']['area'] = $p_area;
  341.         $this->context['view']->textes true// faire afficher le H1 dans l'html
  342.         // trouver les textes disposants d'un contenu éduc
  343.         $this->getActionSpectaclesClassification($this->getListSpectaclesEduc(125,'ids_spectacle_educ',true),'educ',null,true);
  344.         $this->context['view']->spectacles false// faire afficher le H1 dans l'html
  345.         if(!empty($this->context['view']->area)){
  346.             $this->context['view']->custom_menu_area true;
  347.             $this->context['view']->custom_aside_top true;
  348.             $asides_top = new asides();
  349.             $asides_top->load(['aside_top' => array(
  350.                 'php' => array(
  351.                     'method' => 'asidesUrlRegions',
  352.                 )
  353.             )
  354.             ]);
  355.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  356.         }
  357.         $this->getCommonInfos();
  358.         $nav_texts = array(
  359.             array(
  360.                 'name' => 'Tous les textes',
  361.             ),
  362.         );
  363.         $this->asides->load(['url_lists' => array(
  364.             'exec' => array(
  365.                 'htmlstart' => true
  366.             ),
  367.             'php' => array(
  368.                 'method' => 'asidesUrlLists',
  369.                 'urls' => $nav_texts,
  370.                 'url' => '/educ/textes',
  371.                 'params' => array(
  372.                     'activate' => (empty($_REQUEST['s']))
  373.                 )
  374.             ),
  375.             'title' => 'Voir'
  376.         )]);
  377.         $this->asides->load(['par_saison' => array(
  378.             'exec' => array(
  379.                 'htmlend' => true
  380.             ),
  381.             'php' => array(
  382.                 'method' => 'asidesUrlListsForms',
  383.                 'url' => '/educ/textes/area/key_area/',
  384.                 'params' => array(
  385.                     'key_area' => $this->context['view']->area,
  386.                 )
  387.             ),
  388.             'title' => 'Recherche par période',
  389.             'marge' => true
  390.         )]);
  391.         $this->asides->load(['common_carte' => array(
  392.             'url' => '/educ/textes/area/get_id?carte_version=svg'
  393.         )]);
  394.         $this->asides->load('educ_lettre_info');
  395.         $this->locate = array(
  396.             '/educ/' => 'Éduc',
  397.             => 'Textes'
  398.         );
  399.         $this->view->title_page 'Textes à contenus pédagogiques';
  400.         return $this->view('educ/textes.html.twig');
  401.     }
  402.     // }}}
  403.     // {{{ action_piece_demontee_spectacle()
  404.     /** Spectacles bénéficiants d'un contenu pièce démontée
  405.      *
  406.      * @Route("/educ/piece-demontee-spectacle/", name="educ_piece_demontee_spectacle")*
  407.      * @Route("/educ/piece-demontee-spectacle/area/{p_area}", name="educ_piece_demontee_spectacle_area")*
  408.      *
  409.      *
  410.      */
  411.     public function action_piece_demontee_spectacle($p_area null)
  412.     {
  413.         $this->context['params']['area'] = $p_area;
  414.         $this->context['action'] = $this->view->action 'piece-demontee-spectacle';
  415.         $params['perPage'] = 20;
  416.         //on désactive la saison, si l'utilisateur n'en a pas fait le choix
  417.         if(!isset($_GET['s']) && empty($_GET['s'])){
  418.             $params['saison_desactive'] = true;
  419.             $params['prochains'] = 720;
  420.         }
  421.         $this->getActionSpectaclesClassification(
  422.             $this->getListSpectaclesPieceDemontee(),
  423.             'piece-demontee',
  424.             null,
  425.             false,
  426.             true,
  427.             $params
  428.         );
  429.         foreach($this->context['view']->spectacles as $k=>$v) {
  430.             $this->context['view']->spectacles[$k]['carrer'] = $this->spectacles->getObjectsCarrerDetails($k);
  431.             $this->context['view']->spectacles[$k]['footer_contact'] = true;
  432.         }
  433.         //asides
  434.         $spectacle_demontee_nav = array(
  435.             array(
  436.                 'name' => 'Tous les spectacles à venir',
  437.             ),
  438.         );
  439.         //asides
  440.         $this->asides->load(['url_lists' => array(
  441.             'exec' => array(
  442.                 'htmlstart' => true
  443.             ),
  444.             'php' => array(
  445.                 'method' => 'asidesUrlLists',
  446.                 'urls' => $spectacle_demontee_nav,
  447.                 'url' => '/educ/piece-demontee-spectacle',
  448.                 'params' => array(
  449.                     'activate' => true
  450.                 )
  451.             ),
  452.             'title' => 'Voir'
  453.         )]);
  454.         $this->asides->load(['par_saison' => array(
  455.             'exec' => array(
  456.                 'htmlend' => true
  457.             ),
  458.             'php' => array(
  459.                 'method' => 'asidesUrlListsForms',
  460.                 'url' => '/educ/piece-demontee-spectacle/area/key_area/',
  461.                 'params' => array(
  462.                     'key_area' => $this->context['view']->area,
  463.                 )
  464.             ),
  465.             'title' => 'Recherche par période'
  466.         )]);
  467.         $this->asides->load('common_carrer_informations');
  468.         $this->asides->load(['common_carte' => array(
  469.             'url' => '/educ/piece-demontee-spectacle/area/get_id/'
  470.         )]);
  471.         $this->asides->load('educ_piece_demontee');
  472.         $this->asides->load('educ_lettre_info');
  473.         // situation et titre meta
  474.         $this->locate = array(
  475.             '/educ/' => 'Éduc',
  476.             '/educ/piece-demontee/' => 'Pièce (dé)montée',
  477.             => 'Spectacles'
  478.         );
  479.         return $this->view('educ/piece-demontee-spectacle.html.twig');
  480.     }
  481.     // }}}
  482.     // {{{ action_theatre_en_acte_accueil()
  483.     /** Spectacles en preparation bénéficiants d'un théâtre en acte
  484.      *
  485.      * @Route("/educ/theatre-en-acte/", name="educ_theatre_en_acte")
  486.      * @Route("/educ/theatre-en-acte-accueil/", name="educ_theatre_en_acte_accueil")
  487.      *
  488.      */
  489.     public function action_theatre_en_acte_accueil()
  490.     {
  491.         $this->context['action'] = $this->view->action 'theatre-en-acte-accueil';
  492.         // Textes à l'affiche
  493.         $this->spectacles $this->em->getRepository(Spectacles::class);
  494.         $this->texts $this->em->getRepository(Texts::class);
  495.         if($idtexts $this->getListTextsCommon(207,'ids_text_theatre_en_acte')){
  496.             foreach($idtexts AS $value){
  497.                 $itexts[] = $value['idtext'];
  498.             }
  499.             $params_sql = array(
  500.                 'special' => array(
  501.                     'idtext' => $itexts,
  502.                     'prochains' => 365
  503.                 ),
  504.                 'params' => array(
  505.                     // TODO pas les adaptations =>pour avoir le MEME nombre dans les deux cas
  506.                     'where' => ' AND s.title IS NULL ',
  507.                     'groupby' => ' t.idtext ',
  508.                     'limit' => array(0,4)
  509.                 ),
  510.                 'dbg' => array('list_spectacles_texts''Liste des textes theatre-en-acte'),
  511.             );
  512.             $list_spectacles $this->spectacles->getListSpectacles($params_sqlnullfalse, array('carrer_couleurs' => true));
  513.             $this->context['view']->texts $this->texts->getTextsFromSpectacles($list_spectacles, array());
  514.             // $vignette_format,false,true,$params_row
  515.             $vignette_format = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
  516.             foreach($this->context['view']->texts AS $key => $val){
  517.                 $this->context['view']->texts[$key]['vignette'] = $this->em->getRepository(Texts::class)->getVignetteText($val['idtext'], $vignette_format);
  518.             }
  519.         }
  520.         // Mise en scene à l'affiche
  521.         $params = [
  522.             'prochains' => 365,
  523.             'limit' => [0,4]
  524.         ];
  525.         $this->getActionSpectaclesClassification($this->getListSpectaclesTheatreEnActe(),'educ',nullfalsefalse$params);
  526.         foreach($this->context['view']->spectacles AS $k => $v){
  527.             $this->view->spectacles[$k]['display']['affiche_date_creation'] = true;
  528.             $this->view->spectacles[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['creation_date'], '%Y'true); //%a %d/%m/%Y
  529.             $this->view->spectacles[$k]['carrer'] = $this->spectacles->getObjectsCarrerDetails($k);
  530.             $content_array $this->em->getRepository(Contents::class)->getAssociateContents($v['idspectacle'],'spectacles','class_theatre_en_acte');
  531.             $content reset($content_array['fr']);
  532.             $this->view->spectacles[$k]['url_custom'] = '/spectacles/'.$v['url_clean'].'/contenus-pedagogiques/idcontent/'.$content['idcontent'];
  533.         }
  534.         // aside
  535.         $this->asides->load('educ_canope_enacte');
  536.         $this->asides->load('common_carrer_informations');
  537.         $this->asides->load('educ_lettre_info');
  538.         // situation et titre meta
  539.         $this->locate = array(
  540.             '/educ/' => 'Éduc',
  541.             '/educ/piece-demontee/' => 'Théâtre en acte',
  542.             => 'Accueil'
  543.         );
  544.         $this->title_page 'Théâtre en acte - accueil';
  545.         return $this->view('educ/theatre-en-acte-accueil.html.twig');
  546.     }
  547.     // }}}
  548.     // {{{ action_theatre_en_acte_presentation()
  549.     /** Spectacles en preparation bénéficiants d'un théâtre en acte
  550.      *
  551.      * @Route("/educ/theatre-en-acte-presentation", name="educ_theatre_en_acte_presentation")
  552.      *
  553.      */
  554.     public function action_theatre_en_acte_presentation()
  555.     {
  556.         $this->context['action'] = $this->view->action 'theatre-en-acte-presentation';
  557.         // aside
  558.         $this->asides->load('educ_canope_enacte');
  559.         $this->asides->load('educ_lettre_info');
  560.         // situation et titre meta
  561.         $this->locate = array(
  562.             '/educ/' => 'Éduc',
  563.             '/educ/piece-demontee/' => 'Théâtre en acte',
  564.             => 'Présentation'
  565.         );
  566.         $this->title_page 'Théâtre en acte - présentation';
  567.         return $this->view('educ/theatre-en-acte-presentation.html.twig');
  568.     }
  569.     // }}}
  570.     // {{{ action_theatre_en_acte_auteurs()
  571.     /** Spectacles en preparation bénéficiants d'un théâtre en acte
  572.      *
  573.      * @Route("/educ/theatre-en-acte-auteurs", name="educ_theatre_en_acte_auteurs")
  574.      * @Route("/educ/theatre-en-acte-auteurs/type/{type}", name="educ_theatre_en_acte_auteurs_type")
  575.      *
  576.      */
  577.     public function action_theatre_en_acte_auteurs($type null)
  578.     {
  579.         $this->context['params']['type'] = $type;
  580.         $this->context['action'] = $this->view->action 'theatre-en-acte-auteurs';
  581.         $asidenav = array(
  582.             'tous' => array( 'name' => 'Tous les auteurs' )
  583.         );
  584.         $this->getCommonPersons('authors'$this->getListSpectaclesCommon(207'ids_spectacle_theatre_en_acte'));
  585.         foreach($this->context['view']->authors AS $k => $auteur){
  586.             if($content $this->em->getRepository(Contents::class)->getAssociateContents($auteur['idperson'],'persons','class_theatre_en_acte')){
  587.                 $this->context['view']->authors[$k]['idcontent'] = reset($content['fr'])['idcontent'];
  588.             }
  589.         }
  590.         // getListSpectaclesTheatreEnActe
  591.         $this->asides->load(['url_lists_alone' => array(
  592.             'php' => array(
  593.                 'method' => 'asidesUrlLists',
  594.                 'urls' => $asidenav,
  595.                 'url' => '/educ/theatre-en-acte-auteurs/type/params_1',
  596.                 'params' => array(
  597. //                     'activate' => $selected,
  598.                     'params_1' => 'auto_key'
  599.                 )
  600.             ),
  601.             'title' => 'Voir'
  602.         )]);
  603.         // aside
  604.         $this->asides->load('educ_lettre_info');
  605.         // situation et titre meta
  606.         $this->locate = array(
  607.             '/educ/' => 'Éduc',
  608.             '/educ/piece-demontee/' => 'Théâtre en acte',
  609.             => 'Auteurs'
  610.         );
  611.         $this->title_page 'Théâtre en acte - auteurs';
  612.         return $this->view('educ/theatre-en-acte-auteurs.html.twig');
  613.     }
  614.     // {{{ action_theatre_en_acte_textes()
  615.     /** Spectacles en preparation bénéficiants d'un théâtre en acte
  616.      *
  617.      * @Route("/educ/theatre-en-acte-textes", name="educ_theatre_en_acte_textes")
  618.      * @Route("/educ/theatre-en-acte-textes/type/{type}", name="educ_theatre_en_acte_textes_type")
  619.      *
  620.      */
  621.     public function action_theatre_en_acte_textes($type null)
  622.     {
  623.         $this->context['params']['type'] = $type;
  624.         $this->context['action'] = $this->view->action 'theatre-en-acte-textes';
  625.         $asidenav = array(
  626.             'tous' => array(
  627.                 'name' => 'Tous les textes',
  628.                 'key' => 'tous'
  629.             ),
  630.             'prochains' => array(
  631.                 'name' => 'Tous les textes à l\'affiche',
  632.                 'key' => 'prochains'
  633.             )
  634.         );
  635.         $selected 'tous';
  636.         if(isset($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $asidenav)){
  637.             $selected $this->context['params']['type'];
  638.         }
  639.         $this->texts $this->em->getRepository(Texts::class);
  640.         if($idtexts $this->getListTextsCommon(207,'ids_text_theatre_en_acte')){
  641.             // $vignette_format,false,true,$params_row
  642.             $vignette_format = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
  643.             //Les textes à l'affiche
  644.             if($selected == 'prochains'){
  645.                 foreach($idtexts AS $value){
  646.                     $itexts[] = $value['idtext'];
  647.                 }
  648.                 $params_sql = array(
  649.                     'special' => array(
  650.                         'idtext' => $itexts,
  651.                         'prochains' => 365
  652.                     ),
  653.                     'params' => array(
  654.                         // TODO pas les adaptations =>pour avoir le MEME nombre dans les deux cas
  655.                         'where' => ' AND s.title IS NULL ',
  656.                         'groupby' => ' t.idtext ',
  657.                         'limit' => array(0,4)
  658.                     ),
  659.                     'dbg' => array('list_spectacles_texts''Liste des spectacles avec textes non fictifs'),
  660.                 );
  661.                 $list_spectacles $this->spectacles->getListSpectacles($params_sql);
  662.                 $this->context['view']->texts $this->texts->getTextsFromSpectacles($list_spectacles, array());
  663.                 foreach($this->context['view']->texts AS $key => $val){
  664.                     $this->context['view']->texts[$key]['vignette'] = $this->em->getRepository(Texts::class)->getVignetteText($val['idtext'], $vignette_format);
  665.                 }
  666.             }
  667.             //Tous les textes
  668.             else{
  669.                 foreach($idtexts AS $key => $val){
  670.                     $idtext $val['idtext'];
  671.                     $text_content $this->em->getRepository(Texts::class)->getInfosText($idtext);
  672.                     $this->context['view']->texts[$idtext] = $text_content;
  673.                     $this->context['view']->texts[$idtext]['vignette'] = $this->em->getRepository(Texts::class)->getVignetteText($idtext$vignette_format);
  674.                     $this->context['view']->texts[$idtext]['publisher_first'] = true;
  675.                     $this->context['view']->texts[$idtext]['url_custom'] = '/textes/'.$text_content['url_clean'].'/contenus-pedagogiques/idcontent/'.$val['idcontent'];
  676.                 }
  677.             }
  678.         }
  679.         $this->asides->load(['url_lists_alone' => array(
  680.             'php' => array(
  681.                 'method' => 'asidesUrlLists',
  682.                 'urls' => $asidenav,
  683.                 'url' => '/educ/theatre-en-acte-textes/type/params_1',
  684.                 'params' => array(
  685.                     'activate' => $selected,
  686.                     'params_1' => 'auto_key'
  687.                 )
  688.             ),
  689.             'title' => 'Voir'
  690.         )]);
  691.         $this->asides->load('educ_lettre_info');
  692.         // situation et titre meta
  693.         $this->locate = array(
  694.             '/educ/' => 'Éduc',
  695.             '/educ/piece-demontee/' => 'Théâtre en acte',
  696.             => 'Textes'
  697.         );
  698.         $this->title_page 'Théâtre en acte - textes';
  699.         return $this->view('educ/theatre-en-acte-textes.html.twig');
  700.     }
  701.     // }}}
  702.     // {{{ action_theatre_en_acte_enscene()
  703.     /** Spectacles en preparation bénéficiants d'un théâtre en acte
  704.      *
  705.      * @Route("/educ/theatre-en-acte-enscene", name="educ_theatre_en_acte_enscene")
  706.      * @Route("/educ/theatre-en-acte-enscene/type/{type}", name="educ_theatre_en_acte_enscene_prochain")
  707.      *
  708.      */
  709.     public function action_theatre_en_acte_enscene($type null)
  710.     {
  711.         $this->context['params']['type'] = $type;
  712.         $this->context['action'] = $this->view->action 'theatre-en-acte-enscene';
  713.         $asidenav = array(
  714.             'tous' => array( 'name' => 'Toutes les mises en scène''key' => 'tous' ),
  715.             'prochains' => array( 'name' => 'Prochaines mises en scène''key' => 'prochains' )
  716.         );
  717.         $params = array(
  718.             'tous' => ['order' => ['creation_date''DESC']],
  719.             'prochains' => ['prochains' => 365],
  720.         );
  721.         if(empty($this->context['params']['type'])){
  722.             $this->context['params']['type'] = 'tous';
  723.         }
  724.         $this->getActionSpectaclesClassification($this->getListSpectaclesTheatreEnActe(),'educ',null,truefalse$params[$this->context['params']['type']]);
  725.         foreach($this->context['view']->spectacles AS $k => $v){
  726.             $this->view->spectacles[$k]['display']['affiche_date_creation'] = true;
  727.             $this->view->spectacles[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['creation_date'], '%Y'true); //%a %d/%m/%Y
  728.             $this->view->spectacles[$k]['carrer'] = $this->spectacles->getObjectsCarrerDetails($k);
  729.             $content_array $this->em->getRepository(Contents::class)->getAssociateContents($v['idspectacle'],'spectacles','class_theatre_en_acte');
  730.             $content reset($content_array['fr']);
  731.             $this->view->spectacles[$k]['url_custom'] = '/spectacles/'.$v['url_clean'].'/contenus-pedagogiques/idcontent/'.$content['idcontent'];
  732.         }
  733.         // aside
  734.         $this->asides->load(['url_lists_alone' => array(
  735.             'php' => array(
  736.                 'method' => 'asidesUrlLists',
  737.                 'urls' => $asidenav,
  738.                 'url' => '/educ/theatre-en-acte-enscene/type/params_1',
  739.                 'params' => array(
  740.                     'activate' => $this->context['params']['type'],
  741.                     'params_1' => 'auto_key'
  742.                 )
  743.             ),
  744.             'title' => 'Voir'
  745.         )]);
  746.         $this->asides->load('common_carrer_informations');
  747.         $this->asides->load('educ_lettre_info');
  748.         // situation et titre meta
  749.         $this->locate = array(
  750.             '/educ/' => 'Éduc',
  751.             '/educ/piece-demontee/' => 'Théâtre en acte',
  752.             => 'En scène'
  753.         );
  754.         $this->title_page 'Théâtre en acte - en scène';
  755.         return $this->view('educ/theatre-en-acte-enscene.html.twig');
  756.     }
  757.     // }}}
  758.     // {{{ action_theatre_en_acte_preparation()
  759.     /** Spectacles en preparation bénéficiants d'un théâtre en acte
  760.      *
  761.      * @Route("/educ/theatre-en-acte-preparation/", name="educ_theatre_en_acte_preparation")
  762.      * @Route("/educ/theatre-en-acte-preparation/type/{type}", name="educ_theatre_en_acte_preparation_type")
  763.      *
  764.      */
  765.     public function action_theatre_en_acte_preparation($type null)
  766.     {
  767.         $this->context['params']['type'] = $type;
  768.         $this->context['action'] = $this->view->action 'theatre-en-acte-preparation';
  769.         //sous menu principal de la page
  770.         $spectacle_demontee_nav = array(
  771.             'spectacles' => array(
  772.                 'name' => ' Les spectacles',
  773.                 'key' => 'spectacles'
  774.             ),
  775.             'textes' => array(
  776.                 'name' => ' Les textes',
  777.                 'key' => 'textes'
  778.             ),
  779.             'auteurs' => array(
  780.                 'name' => ' Les auteurs',
  781.                 'key' => 'auteurs'
  782.             )
  783.         );
  784.         $selected 'spectacles';
  785.         if(isset($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $spectacle_demontee_nav)){
  786.             $selected $this->context['params']['type'];
  787.         }
  788.         $this->context['view']->subtitle $selected;
  789.         //l'utiisateur sélectionne les spectacles
  790.         if(in_array($selected,['spectacles'])){
  791.             $params_sql = array(
  792.                 'params' => array(
  793.                     'order' => ['creation_date''DESC']
  794.                 ),
  795.                 'special' => array(
  796.                     'by_classification' => 188// class_piece_demontee_attente
  797.                     'plus_proche' => true,
  798.                 ),
  799.                 'dbg' => array('piece_demontee_bientot''Spectacles avec la classification pièce démontée à venir')
  800.             );
  801.             $this->context['view']->nb_spectacles_total $this->spectacles->countListSpectacles($params_sql);
  802.             $params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  803.             if($this->context['view']->spectacles $this->spectacles->getListSpectacles($params_sql, array(), false, array('allauthors' => true'affiche_date_creation' => true))){
  804.                 $this->context['view']->data true;
  805.             }
  806.             $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total);
  807.             foreach($this->context['view']->spectacles AS $k => $v){
  808.                 $this->view->spectacles[$k]['display']['affiche_date_creation'] = true;
  809.                 $this->view->spectacles[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['creation_date'], '%Y'true); //%a %d/%m/%Y
  810.             }
  811.         }
  812.         //l'utiisateur sélectionne les textes
  813.         else if(in_array($selected,['textes'])){
  814.             $this->context['view']->noshow_detail_periode true//on cache les détails des dates de spectacle
  815.             $this->context['view']->detail_orga true//on affiche l'éditeur de publication
  816.             $this->context['view']->detail_date true//on affiche la date de publication
  817.             $this->context['view']->noshow_spectacle_directors true//on affiche pas le metteur m'éditeur enscène
  818.             $this->getCommonSearch(array(
  819.                 // 'saisons_annees' => $this->getListSeasonsYears(Theatre::factory('playlists')->getSpectaclesAnneesSaisons($idclassifications)),
  820.                 'nb_days' => 3650,
  821.             ));
  822.             $params_sql_spectacles = array(
  823.                 'params' => array(
  824.                     'limit' => 'all'//all7
  825.                     'groupby' => 't.idtext'
  826.                 ),
  827.                 'special' => array(
  828.                     'by_classification_texts' => 195// edutheque tx
  829.                     // 'textfictif' => 0,
  830.                     // 'plus_proche' => true,
  831.                     // 'prochains' => 365,
  832.                 ),
  833.                 'dbg' => array('spectacles_auteurs_affiche','Texte par l\'auteur à l\'affiche')
  834.             );
  835.             $this->context['view']->nb_textes_total $this->spectacles->countListSpectacles($params_sql_spectacles);
  836.             // $params_sql_spectacles['params']['limit'] = $limit_query;
  837.             $list_spectacles $this->spectacles->getListSpectacles($params_sql_spectacles);
  838.             //taille des vignettes
  839.             $params_display['vignette_format'] = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
  840.             //on récupère les textes en provencanes des pectacles
  841.             if($this->context['view']->texts $this->em->getRepository(Texts::class)->getTextsFromSpectacles($list_spectacles,array(),$params_display)){
  842.                 $this->context['view']->data true;
  843.             }
  844.             //on s'occupe de la pagination de tout ça !
  845.             $this->context['view']->pagination $this->getPagination($this->context['view']->nb_textes_total);
  846.             $this->context['view']->pagination['texte'] = true;
  847.             $this->context['view']->text_title_center true;
  848.         }
  849.         //l'utiisateur sélectionne les auteurs
  850.         else if(in_array($selected,['auteurs'])){
  851.             $persons $this->em->getRepository(Persons::class);
  852.             $params_persons = array(
  853.                 'params' => array(
  854.                     'limit' => 'all',
  855.                 ),
  856.                 'special' => array(
  857.                     'publish' => 1,
  858.                     // 'count_only' => true,
  859.                     'idclassification' => 196
  860.                 ),
  861.                 'dbg' => array('persons','liste des personnes')
  862.             );
  863.             if($this->context['view']->persons $persons->getListPersons($params_persons)){
  864.                 $this->context['view']->data true;
  865.             }
  866.         }
  867.         // asides
  868.         $this->asides->load(['url_lists_alone' => array(
  869.             'php' => array(
  870.                 'method' => 'asidesUrlLists',
  871.                 'urls' => $spectacle_demontee_nav,
  872.                 'url' => '/educ/theatre-en-acte-preparation/type/params_1',
  873.                 'params' => array(
  874.                     'activate' => $selected,
  875.                     'params_1' => 'auto_key'
  876.                 )
  877.             ),
  878.             'title' => 'Voir'
  879.         )]);
  880.         // $this->asides->load('educ_theatre_en_acte');
  881.         $this->asides->load('educ_lettre_info');
  882.         // situation et titre meta
  883.         $this->locate = array(
  884.             '/educ/' => 'Éduc',
  885.             '/educ/piece-demontee/' => 'Théâtre en acte',
  886.             => 'En préparation'
  887.         );
  888.         $this->title_page 'Théâtre en acte - en préparation';
  889.         return $this->view('educ/theatre-en-acte-preparation.html.twig');
  890.     }
  891.     // }}}
  892.     // {{{ action_piece_demontee_bientot()
  893.     /** Spectacles qui bénéficieront prochainement d'un contenu pièce démontée
  894.      *
  895.      * @Route("/educ/piece-demontee-bientot", name="educ_peice_demontee_bientot")
  896.      *
  897.      */
  898.     public function action_piece_demontee_bientot()
  899.     {
  900.         $this->context['action'] = $this->view->action 'piece-demontee-bientot';
  901.         // rechercher les coproductions
  902.         $params_sql = array(
  903.             'special' => array(
  904.                 'by_classification' => 160// class_piece_demontee_attente
  905.                 'plus_proche' => true,
  906.             ),
  907.             'dbg' => array('piece_demontee_bientot''Spectacles avec la classification pièce démontée à venir')
  908.         );
  909.         $this->context['view']->nb_spectacles_total $this->spectacles->countListSpectacles($params_sql);
  910.         $params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  911.         $params_display = array('allauthors' => true'carrer_couleurs' => true);
  912.         $this->context['view']->spectacles $this->spectacles->getListSpectacles($params_sql, array(), false$params_display);
  913.         $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total);
  914.         foreach($this->context['view']->spectacles as $k=>$v) {
  915.             $this->context['view']->spectacles[$k]['footer_contact'] = true;
  916.         }
  917.         $this->asides->load('educ_piece_demontee');
  918.         $this->asides->load('educ_lettre_info');
  919.         $this->asides->load(['common_carrer_informations' => [
  920.             'color' => 'educ'
  921.         ]]);
  922.         // situation et titre meta
  923.         $this->locate = array(
  924.             '/educ/' => 'Éduc',
  925.             '/educ/piece-demontee/' => 'Pièce (dé)montée',
  926.             => 'À venir'
  927.         );
  928.         return $this->view('educ/piece-demontee-bientot.html.twig');
  929.     }
  930.     // }}}
  931.     // {{{ action_xml()
  932.     /** les régions en XML
  933.      *
  934.      */
  935.     public function action_xml()
  936.     {
  937.         if(!empty($this->context['params']['page'])) {
  938.             $this->context['view']->page $this->context['params']['page'];
  939.         } else {
  940.             $this->context['view']->page 'spectacles';
  941.         }
  942.         $this->getCommonXmlCarte($this->context['view']->page);
  943.     }
  944.     // }}}
  945.     // {{{ action_auteurs()
  946.     /** les auteurs
  947.      *
  948.      * @Route("/educ/auteurs/", name="educ_auteurs")
  949.      * @Route("/educ/auteurs/periode/{p_periode}", name="educ_auteurs_periode")
  950.      * @Route("/educ/auteurs/periode/{p_periode}/area/{p_area}", name="educ_auteurs_periode_area")
  951.      * @Route("/educ/auteurs/area/{p_area}", name="educ_auteurs_area")
  952.      *
  953.      */
  954.     public function action_auteurs($p_periode null$p_area null)
  955.     {
  956.         $this->view->action $this->context['action'] = 'auteurs';
  957.         $this->context['params']['periode'] = $p_periode;
  958.         $this->context['params']['area'] = $p_area;
  959.         $idspectacles $this->getListSpectaclesEduc();
  960.         $persons $this->em->getRepository(Persons::class);
  961.         $where_search null;
  962.         // recherche une saison
  963.         $saison $this->getSaison();
  964.         $listdates $this->getSpectaclesDatesCommon($idspectacles);
  965.         // récupérer la liste des années et des saisons et générer les listes déroulantes
  966.         if(!empty($listdates)) {
  967.             $annees_saisons $this->getListSeasonsYears($listdates,null,true);
  968.             // liste des saisons
  969.             $this->view->saisons $annees_saisons['saisons'];
  970.             $this->getCommonSearch([
  971.                 'saisons_annees' => [
  972.                     'saisons' => $annees_saisons['saisons']
  973.                 ]
  974.             ]);
  975.             $this->getCommonSearchView();
  976.         }
  977.         // recherche par saison
  978.         if(!empty($saison)) {
  979.             $annees_saison explode('-'$saison);
  980.             if(count($annees_saison)==2) {
  981.                 $datestart Date_time::getSaisonDatestart((int)$annees_saison[0]);
  982.                 $dateend Date_time::getSaisonDateend((int)$annees_saison[1]);
  983.             }
  984.             // saison de recherche
  985.             $this->view->saison $saison;
  986.             // saison précédente / suivante
  987.             $this->view->saisons_nav $this->getSaisonsNav($annees_saisons['saisons'],$saison);
  988.         }
  989.         // recherche période
  990.         if(!empty($datestart) && !empty($dateend)) {
  991.             $where_search .= ' AND sc.`date` BETWEEN \''.$datestart.'\' AND \''.$dateend.'\' ';
  992.         }
  993.         // recherche par type d'auteurs
  994.         $periodes = array(
  995.             'vivant' => 'vivants',
  996.             'contemporain' => 'contemporains',
  997.             'public' => 'du domaine public',
  998.         );
  999.         if(!empty($this->context['params']['periode']) && array_key_exists($this->context['params']['periode'],$periodes)) {
  1000.             $periode trim(htmlspecialchars(strip_tags($this->context['params']['periode'])));
  1001.             $this->context['view']->periode $periodes[$periode];
  1002.         } else {
  1003.             $this->context['view']->periode '';
  1004.             $periode '';
  1005.         }
  1006.         $params_spectacles = array(
  1007.             'special' => array(
  1008.                 'idspectacle' => $idspectacles,
  1009.                 //'plus_proche' => true,
  1010.             ),
  1011.             'params' => array(
  1012.                 'limit' => array(0,2000),
  1013.             ),
  1014.             'dbg' => array('list_spectacles''Liste des spectacles avec un contenu Educ'),
  1015.         );
  1016.         if(!empty($where_search)) {
  1017.             $params_spectacles['params']['where'] = $where_search;
  1018.         }
  1019.         // une région en particulier ?
  1020.         $params_spectacles $this->setAreaRecherche($params_spectacles);
  1021.         $spectacles_list $this->spectacles->getListSpectacles($params_spectacles);
  1022.         if(!empty($spectacles_list)) {
  1023.             foreach($spectacles_list as $s) {
  1024.                 // les auteurs
  1025.                 foreach($s['allauthors'] as $k=>$v) {
  1026.                     if(empty($authors[$v['lastname'].'_'.$v['firstname']])) {
  1027.                         // exclure de la recheche suivante
  1028.                         $idpersons_exclude[$v['idperson']] = $v['idperson'];
  1029.                         //infos
  1030.                         $authors[$v['lastname'].'_'.$v['firstname']] = array(
  1031.                             'idperson' => $v['idperson'],
  1032.                             'lastname' => $v['lastname'],
  1033.                             'firstname' => $v['firstname'],
  1034.                             'url_clean' => $v['url_clean'],
  1035.                             'spectacles' => array($s),
  1036.                         );
  1037.                         if($s['textfictif']==0) {
  1038.                             $authors[$v['lastname'].'_'.$v['firstname']]['textreel'] = 1;
  1039.                         }
  1040.                         // vignette
  1041.                         $thumbnail $persons->getVignettePerson($v['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
  1042.                         if(strpos($thumbnail'normal-def')===false) {
  1043.                             $authors[$v['lastname'].'_'.$v['firstname']]['photo'] = $thumbnail;
  1044.                         }
  1045.                     } else {
  1046.                         if($s['textfictif']==0) {
  1047.                             $authors[$v['lastname'].'_'.$v['firstname']]['textreel'] = 1;
  1048.                         }
  1049.                         $authors[$v['lastname'].'_'.$v['firstname']]['spectacles'][] = $s;
  1050.                     }
  1051.                 }
  1052.             }
  1053.         }
  1054.         if(empty($saison)) {
  1055.             // trouver également les texts qui ont un contenus associés pédagogique en excluant les spectacles
  1056.             $params_texts = array(
  1057.                 'special' => array(
  1058.                     'idclassification' => array(125),
  1059.                     //'authors' => array('NOT IN', $idpersons_exclude),
  1060.                     'join' => true,
  1061.                 ),
  1062.                 'params' => array(
  1063.                     'limit' => array(0,2000),
  1064.                 ),
  1065.                 'dbg' => array('list_texts''Liste des texts avec un contenu Educ'),
  1066.             );
  1067.             $texts_list $this->em->getRepository(Texts::class)->getListTexts($params_texts);
  1068.             if(!empty($texts_list)) {
  1069.                 foreach($texts_list as $s) {
  1070.                     // les auteurs
  1071.                     foreach($s['allauthors'] as $k=>$v) {
  1072.                         if(empty($authors[$v['lastname'].'_'.$v['firstname']])) {
  1073.                             if (!isset($v['idperson'])) {
  1074.                                 $v['idperson'] = null;
  1075.                             }
  1076.                             if (!isset($v['url_clean'])) {
  1077.                                 $v['url_clean'] = null;
  1078.                             }
  1079.                             $authors[$v['lastname'].'_'.$v['firstname']] = array(
  1080.                                 'idperson' => $v['idperson'],
  1081.                                 'lastname' => $v['lastname'],
  1082.                                 'firstname' => $v['firstname'],
  1083.                                 'url_clean' => $v['url_clean'],
  1084.                                 'texts' => array($s),
  1085.                             );
  1086.                             if (isset($v['idperson'])) {
  1087.                                 $authors[$v['lastname'].'_'.$v['firstname']][] = ['idperson' => $v['idperson']];
  1088.                             } else {
  1089.                                 $authors[$v['lastname'].'_'.$v['firstname']][] = ['idperson' => null];
  1090.                             }
  1091.                             if (isset($v['url_clean'])) {
  1092.                                 $authors[$v['lastname'].'_'.$v['firstname']][] = ['url_clean' => $v['url_clean']];
  1093.                             } else {
  1094.                                 $authors[$v['lastname'].'_'.$v['firstname']][] = ['url_clean' => null];
  1095.                             }
  1096.                             if($s['textfictif']==0) {
  1097.                                 $authors[$v['lastname'].'_'.$v['firstname']]['textreel'] = 1;
  1098.                             }
  1099.                             $thumbnail $persons->getVignettePerson($v['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
  1100.                             if(strpos($thumbnail'normal-def')===false) {
  1101.                                 $authors[$v['lastname'].'_'.$v['firstname']]['photo'] = $thumbnail;
  1102.                             }
  1103.                         } else {
  1104.                             if($s['textfictif']==0) {
  1105.                                 $authors[$v['lastname'].'_'.$v['firstname']]['textreel'] = 1;
  1106.                             }
  1107.                             $authors[$v['lastname'].'_'.$v['firstname']]['texts'][] = $s;
  1108.                         }
  1109.                     }
  1110.                 }
  1111.             }
  1112.         }
  1113.         // récupèrer également les dates de l'auteur dans le cas d'une recherche par période
  1114.         foreach($authors as $k=>$v) {
  1115.             // suprimer les auteurs qui n'ont que des textes fictifs
  1116.             if(empty($v['textreel'])) {
  1117.                 unset($authors[$k]);
  1118.                 continue;
  1119.             }
  1120.             if (isset($v['idperson'])) {
  1121.                 $infos $this->em->getRepository(Persons::class)->getInfosPerson($v['idperson']);
  1122.             }
  1123.             else {
  1124.                 $infos null;
  1125.             }
  1126.             // les contemporains
  1127.             if(!empty($infos['dateend'])) {
  1128.                 if($infos['dateend']<0) {
  1129.                     $infos['dateend'] = str_replace('-'''$infos['dateend']);
  1130.                     $infos['dateend'] = str_pad($infos['dateend'], 4'0'STR_PAD_LEFT);
  1131.                     $infos['dateend'] = '-'.$infos['dateend'];
  1132.                 } else {
  1133.                     $infos['dateend'] = str_pad($infos['dateend'], 4'0'STR_PAD_LEFT);
  1134.                 }
  1135.                 $today = new \DateTime(date('Y-m-d'));
  1136.                 $dateend = new \DateTime($infos['dateend'].'-01-01');
  1137.                 $interval $dateend->diff($today);
  1138.                 if($interval->format('%Y')>70) {
  1139.                     $periode_person 'public';
  1140.                 } else {
  1141.                     $periode_person 'contemporain';
  1142.                 }
  1143.             } else {
  1144.                 $periode_person 'vivant';
  1145.             }
  1146.             $authors[$k]['periode'] = $periode_person;
  1147.         }
  1148.         // tri periode
  1149.         if(!empty($periode)) {
  1150.             foreach($authors as $k=>$v) {
  1151.                 // pour les contemporains
  1152.                 if($periode=='contemporain' && $v['periode']=='vivant') {
  1153.                     continue;
  1154.                 }
  1155.                 if($v['periode']!=$periode) {
  1156.                     unset($authors[$k]);
  1157.                 }
  1158.             }
  1159.         }
  1160.         ksort($authors);
  1161.         $this->context['view']->authors $authors;
  1162.         if(!empty($saison) || !empty($this->context['view']->area) || !empty($periode)) {
  1163.             $this->context['view']->search_mode true;
  1164.         }
  1165.         if(!empty($this->context['view']->area)){
  1166.             $this->context['view']->custom_menu_area true;
  1167.             $this->context['view']->custom_aside_top true;
  1168.             $asides_top = new asides();
  1169.             $asides_top->load(['aside_top' => array(
  1170.                 'php' => array(
  1171.                     'method' => 'asidesUrlRegions',
  1172.                 )
  1173.             )
  1174.             ]);
  1175.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  1176.         }
  1177.         $this->getCommonInfos();
  1178.         $educ_menu_root = array(
  1179.             array(
  1180.                 'name' => 'Tous',
  1181.                 'key_url' => '/educ/auteurs/',
  1182.                 'key_active' => 'all'
  1183.             ),
  1184.             array(
  1185.                 'name' => 'Contemporains',
  1186.                 'key_url' => '/educ/auteurs/periode/contemporain',
  1187.                 'key_active' => 'contemporain'
  1188.             ),
  1189.             array(
  1190.                 'name' => 'Vivants',
  1191.                 'key_url' => '/educ/auteurs/periode/vivant',
  1192.                 'key_active' => 'vivant'
  1193.             ),
  1194.             array(
  1195.                 'name' => 'Du domaine public',
  1196.                 'key_url' => '/educ/auteurs/periode/public',
  1197.                 'key_active' => 'public'
  1198.             ),
  1199.         );
  1200.         //asides
  1201.         $this->asides->load(['url_lists' => array(
  1202.             'exec' => array(
  1203.                 'htmlstart' => true,
  1204. //                'root' => true
  1205.             ),
  1206.             'php' => array(
  1207.                 'method' => 'asidesUrlLists',
  1208.                 'urls' => $educ_menu_root,
  1209.                 'url' => 'key_url',
  1210.                 'params' => [
  1211. //                    'activate' => (!empty($_GET['s'])) ? '' : (empty($periode)) ? 'all' : $periode
  1212.                 ]
  1213.             ),
  1214.             'title' => 'Auteurs'
  1215.         )]);
  1216.         $this->asides->load(['par_saison' => array(
  1217.             'exec' => array(
  1218.                 'htmlend' => true,
  1219. //                'root' => true
  1220.             ),
  1221.             'action' => '/educ/auteurs/',
  1222.             'title' => 'Rechercher par',
  1223.             'marge' => true
  1224.         )]);
  1225.         $this->asides->load(['common_carte' => array(
  1226.             'url' => '/educ/auteurs/area/get_id?carte_version=svg'
  1227.         )]);
  1228.         $this->asides->load('ecoles_modifier');
  1229.         $this->asides->load('educ_lettre_info');
  1230.         return $this->view('educ/auteurs.html.twig');
  1231.     }
  1232.     // }}}
  1233.     // {{{ action_minute_pedagogique()
  1234.     /** les auteurs
  1235.      *
  1236.      * @Route("/educ/minute-pedagogique/", name="educ_minute_pedagogique")
  1237.      * @Route("/educ/minute-pedagogique/type/{p_type}", name="educ_minute_pedagogique_type")
  1238.      *
  1239.      */
  1240.     public function action_minute_pedagogique($p_type 'prochains')
  1241.     {
  1242.         $this->context['action'] = $this->view->action 'minute-pedagogique';
  1243.         $this->context['params']['type'] = $p_type;
  1244.         $menu_minutepeda = array(
  1245.             'prochains' => array('name' => 'Spectacles à venir''key' => 'prochains'),
  1246.             'tous' => array('name' => 'Tous les spectacles''key' => 'tous'),
  1247.         );
  1248.         $selected $default_choice "prochains";
  1249.         if(!empty($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $menu_minutepeda)){
  1250.             $selected $this->context['params']['type'];
  1251.         }
  1252.         if($this->context['params']['type'] == 'tous'){
  1253.             $this->context['view']->all_spec true;
  1254.         }
  1255.         $this->context['view']->show_title true;
  1256.         $multimedias $this->em->getRepository(Multimedias::class);
  1257.         // recherche de base
  1258.         $params_query_affiches = array(
  1259.             //valeur par default pour éviter des erreurs
  1260.             'affiche' => array(
  1261.                 'datestart' => '1999-01-01'//la date du jour
  1262.                 'dateend' => '2030-01-01',
  1263.             ),
  1264.             'order' => array(
  1265.                 'creation_date DESC'
  1266.             ),
  1267.             'idclassification' => 145,
  1268.             'limit' => array(0,100),
  1269.             'dbg' => array('affiche','Vidéos de minutes pédagogiques'),
  1270.         );
  1271.         //Les prochains spectacles
  1272.         if($selected == 'prochains'){
  1273.             $params_query_affiches['affiche'] = array(
  1274.                 'datestart' => date('Y-m-d'), //la date du jour
  1275.                 'dateend' => '2030-01-01',
  1276.             );
  1277.         }
  1278.         //Tous les spectacles, recheche par saison
  1279.         else{
  1280.             // recherche une saison
  1281.             $saison $this->getSaison();
  1282.             $listdates $this->getSpectaclesDatesCommon($this->getListSpectaclesMinutePedagogique());
  1283.             // récupérer la liste des années et des saisons et générer les listes déroulantes
  1284.             if(!empty($listdates)) {
  1285.                 $annees_saisons $this->getListSeasonsYears($listdates,null,true);
  1286.                 // liste des saisons
  1287.                 $this->context['view']->saisons $annees_saisons['saisons'];
  1288.                 $this->getCommonSearch([
  1289.                     'saisons_annees' => array(
  1290.                         'saisons' => $annees_saisons['saisons'],
  1291.                     )
  1292.                 ]);
  1293.                 $this->getCommonSearchView();
  1294.             }
  1295.             if(!empty($saison)) {
  1296.                 $annees_saison explode('-'$saison);
  1297.                 if(count($annees_saison)==2) {
  1298.                     $params_query_affiches['affiche'] = array(
  1299.                         'datestart' => Date_time::getSaisonDatestart((int)$annees_saison[0]),
  1300.                         'dateend' => Date_time::getSaisonDateend((int)$annees_saison[1]),
  1301.                     );
  1302.                 }
  1303.                 // saison de recherche
  1304.                 $this->context['view']->saison $saison;
  1305.                 // saison précédente / suivante
  1306.                 $this->context['view']->saisons_nav $this->getSaisonsNav($annees_saisons['saisons'],$saison);
  1307.             }
  1308.         }
  1309.         $this->context['view']->contactsvideos true;
  1310.         $this->context['view']->videos $multimedias->getListMultimedias($params_query_affiches,array(),array('get_schedule' => 'plus_proche'));
  1311.         //on affiche la date de création
  1312.         if($selected != 'prochains'){
  1313.             foreach($this->context['view']->videos AS $idvideos => $video){
  1314.                 $this->context['view']->videos[$idvideos]['spectacle']['footer_creation_date'] = true;
  1315.                 // $this->context['view']->videos[$idvideos]['spectacle'] = $this->>em->$this->getRepository(Spectacles::class)->clearSpectaclesAddAllPersons($this->context['view']->videos[$idvideos]['spectacle']);
  1316.             }
  1317.         }
  1318.         $this->asides->load(['url_lists' => array(
  1319.             'exec' => [
  1320.                 'htmlstart' => true,
  1321.                 'htmlend' => ($selected == 'prochains') ? true false
  1322.             ],
  1323.             'php' => array(
  1324.                 'method' => 'asidesUrlLists',
  1325.                 'urls' => $menu_minutepeda,
  1326.                 'url' => '/educ/minute-pedagogique/type/key_test',
  1327.                 'params' => array(
  1328.                     'activate' => $selected,
  1329.                     'key_test' => 'auto_key'
  1330.                 )
  1331.             ),
  1332.             'title' => html_entity_decode('&Agrave; l\'affiche')
  1333.         )]);
  1334.         if($selected != 'prochains'){
  1335.             $this->asides->load(['par_saison' => array(
  1336.                 'exec' => [
  1337.                     'htmlend' => true
  1338.                 ],
  1339.                 'action' => '/educ/minute-pedagogique/type/'.$selected
  1340.             )]);
  1341.         }
  1342.         $this->asides->load(['common_participer' => array(
  1343.             'php' => array(
  1344.                 'method' => 'asidesUrlLists_Ajoutez'
  1345.             )
  1346.         )]);
  1347.         return $this->view('educ/minute-pedagogique.html.twig');
  1348.     }
  1349.     // }}}
  1350.     // {{{ action_jeunes_critiques()
  1351.     /** les auteurs
  1352.      *
  1353.      */
  1354.     public function action_jeunes_critiques()
  1355.     {
  1356.         $multimedias $this->em->getRepository(Multimedias::class);
  1357.         // recherche de base
  1358.         $params_query_affiches = array(
  1359.             'affiche' => array(
  1360.                 'datestart' => '1999-01-01',
  1361.                 'dateend' => '2030-01-01',
  1362.             ),
  1363.             'idclassification' => 156// jeunes critiques
  1364.             'limit' => array(0,100),
  1365.             'dbg' => array('affiche','Vidéos de jeunes critiques'),
  1366.         );
  1367.         $this->context['view']->videos $multimedias->getListMultimedias($params_query_affiches,array(),array('get_schedule' => 'plus_proche'));
  1368.     }
  1369.     // }}}
  1370.     // {{{ action_piece_demontee()
  1371.     /** les pieces demontées auteurs
  1372.      *
  1373.      * @Route("/educ/piece-demontee", name="educ_peice_demontee")
  1374.      *
  1375.      */
  1376.     public function action_piece_demontee()
  1377.     {
  1378.         $this->context['action'] = $this->view->action 'piece-demontee';
  1379.         $this->getPieceDemonteePersons('authors');
  1380.         $educ_menu_root = array(
  1381.             array(
  1382.                 'name' => 'Tous',
  1383.                 'key_url' => '/educ/piece-demontee/'
  1384.             ),
  1385.             array(
  1386.                 'name' => 'Contemporains',
  1387.                 'key_url' => '/educ/piece-demontee/periode/contemporain'
  1388.             ),
  1389.             array(
  1390.                 'name' => 'Vivants',
  1391.                 'key_url' => '/educ/piece-demontee/periode/vivant'
  1392.             ),
  1393.             array(
  1394.                 'name' => 'Du domaine public',
  1395.                 'key_url' => '/educ/piece-demontee/periode/public'
  1396.             ),
  1397.         );
  1398.         //asides
  1399.         $this->asides->load(['url_lists_alone,isroot' => array(
  1400.             'exec' => array(
  1401.                 'htmlstart' => true,
  1402.                 'root' => true
  1403.             ),
  1404.             'php' => array(
  1405.                 'method' => 'asidesUrlLists',
  1406.                 'urls' => $educ_menu_root,
  1407.                 'url' => 'key_url',
  1408.             ),
  1409.             'title' => 'Auteurs'
  1410.         )]);
  1411.         $this->asides->load('educ_piece_demontee');
  1412.         $this->asides->load('educ_lettre_info');
  1413.         // situation et titre meta
  1414.         $this->locate = array(
  1415.             '/educ/' => 'Éduc',
  1416.             '/educ/piece-demontee/' => 'Pièce (dé)montée',
  1417.             => 'Auteurs'
  1418.         );
  1419.         return $this->view('educ/piece-demontee.html.twig');
  1420.     }
  1421.     // }}}
  1422.     // {{{ action_piece_demontee_metteurs()
  1423.     /** les pieces demontées metteurs en scène
  1424.      *
  1425.      * @Route("/educ/piece-demontee-metteurs", name="educ_peice_demontee_metteurs")
  1426.      *
  1427.      */
  1428.     public function action_piece_demontee_metteurs()
  1429.     {
  1430.         $this->context['action'] = $this->view->action 'piece-demontee-metteurs';
  1431.         $this->getPieceDemonteePersons('directors');
  1432.         $this->asides->load('educ_piece_demontee');
  1433.         $this->asides->load('educ_lettre_info');
  1434.         $this->locate = array(
  1435.             '/educ/' => 'Éduc',
  1436.             '/educ/piece-demontee/' => 'Pièce (dé)montée',
  1437.             => 'Metteurs en scène'
  1438.         );
  1439.         return $this->view('educ/piece-demontee-metteurs.html.twig');
  1440.     }
  1441.     // }}}
  1442.     // {{{ action_belle_saison()
  1443.     /** les auteurs et textes de la belle saison
  1444.      *
  1445.      */
  1446.     public function action_belle_saison()
  1447.     {
  1448.         $this->texts $this->em->getRepository(Texts::class);
  1449.         $texts_list $this->texts->getListTexts(array(
  1450.             'special' => array(
  1451.                 'by_classification' => array(153), // Text "Belle saison"
  1452.                 'join' => true,
  1453.             ),
  1454.             'params' => array(
  1455.                 'limit' => array(0,200)
  1456.             ),
  1457.             'dbg' => array('list_texts_bs''Liste des texts belle saison'),
  1458.         ));
  1459.         $persons $this->em->getRepository(Persons::class);
  1460.         // recherche par type d'auteurs
  1461.         $periodes = array(
  1462.             'vivant' => 'vivants',
  1463.             'contemporain' => 'contemporains',
  1464.             'public' => 'du domaine public',
  1465.         );
  1466.         if(!empty($this->context['params']['periode']) && array_key_exists($this->context['params']['periode'],$periodes)) {
  1467.             $periode trim(htmlspecialchars(strip_tags($this->context['params']['periode'])));
  1468.             $this->context['view']->periode $periodes[$periode];
  1469.         } else {
  1470.             $this->context['view']->periode '';
  1471.         }
  1472.         if(!empty($texts_list)) {
  1473.             foreach($texts_list as $t) {
  1474.                 // les auteurs
  1475.                 foreach($t['allauthors'] as $k=>$v) {
  1476.                     if(empty($results[$v['lastname'].'_'.$v['firstname']])) {
  1477.                         $results[$v['lastname'].'_'.$v['firstname']] = array(
  1478.                             'lastname' => $v['lastname'],
  1479.                             'firstname' => $v['firstname'],
  1480.                             'url_clean' => $v['url_clean'],
  1481.                             'idperson' => $v['idperson'],
  1482.                             'texts' => array(
  1483.                                 $t
  1484.                             ),
  1485.                         );
  1486.                         $thumbnail $persons->getVignettePerson($v['idperson'],array('width'=>100,'height'=>100,'direction'=>'crop'));
  1487.                         if(strpos($thumbnail'normal-def')===false) {
  1488.                             $results[$v['lastname'].'_'.$v['firstname']]['photo'] = $thumbnail;
  1489.                         }
  1490.                     } else {
  1491.                         $results[$v['lastname'].'_'.$v['firstname']]['texts'][] = $t;
  1492.                     }
  1493.                 }
  1494.             }
  1495.         }
  1496.         foreach($results as $k=>$v) {
  1497.             if(count($v['texts'])>4) {
  1498.                 $results[$k]['is_list'] = true;
  1499.             }
  1500.         }
  1501.         // récupèrer également les dates de l'auteur dans le cas d'une recherche par période
  1502.         foreach($results as $k=>$v) {
  1503.             $infos $this->em->getRepository(Persons::class)->getInfosPerson($v['idperson']);
  1504.             // les contemporains
  1505.             if(!empty($infos['dateend'])) {
  1506.                 if($infos['dateend']<0) {
  1507.                     $infos['dateend'] = str_replace('-'''$infos['dateend']);
  1508.                     $infos['dateend'] = str_pad($infos['dateend'], 4'0'STR_PAD_LEFT);
  1509.                     $infos['dateend'] = '-'.$infos['dateend'];
  1510.                 } else {
  1511.                     $infos['dateend'] = str_pad($infos['dateend'], 4'0'STR_PAD_LEFT);
  1512.                 }
  1513.                 $today = new \DateTime(date('Y-m-d'));
  1514.                 $dateend = new \DateTime($infos['dateend'].'-01-01');
  1515.                 $interval $dateend->diff($today);
  1516.                 if($interval->format('%Y')>70) {
  1517.                     $periode_person 'public';
  1518.                 } else {
  1519.                     $periode_person 'contemporain';
  1520.                 }
  1521.             } else {
  1522.                 $periode_person 'vivant';
  1523.             }
  1524.             $results[$k]['periode'] = $periode_person;
  1525.         }
  1526.         // tri periode
  1527.         if(!empty($periode)) {
  1528.             foreach($results as $k=>$v) {
  1529.                 // pour les contemporains
  1530.                 if($periode=='contemporain' && $v['periode']=='vivant') {
  1531.                     continue;
  1532.                 }
  1533.                 if($v['periode']!=$periode) {
  1534.                     unset($results[$k]);
  1535.                 }
  1536.             }
  1537.         }
  1538.         ksort($results);
  1539.         $this->context['view']->authors $results;
  1540.         $this->asides->load('educ_belle_saison');
  1541.         $this->asides->load('ecoles_modifier');
  1542.     }
  1543.     // }}}
  1544.     // {{{ action_theatrales()
  1545.     /** les contenus théâtrales éditions (idclassification = 146)
  1546.      *
  1547.      * @Route("/educ/theatrales", name="educ_theatrales")
  1548.      *
  1549.      */
  1550.     public function action_theatrales()
  1551.     {
  1552.         $this->context['action'] = $this->view->action 'theatrales';
  1553.         $texts $this->em->getRepository(Texts::class);
  1554.         $persons $this->em->getRepository(Persons::class);
  1555.         // recherche de base
  1556.         $params_query_texts = array(
  1557.             'params' => array(
  1558.                 'limit' => array(0,100),
  1559.             ),
  1560.             'dbg' => array('theatrales','Auteurs théâtrales contenu éduc et contenu carnet péda (146)'),
  1561.             'special' => array(
  1562.                 'idclassification' => array(146),
  1563.             ),
  1564.         );
  1565.         $texts_list $texts->getListTexts($params_query_texts);
  1566.         if(!empty($texts_list)) {
  1567.             foreach($texts_list as $s) {
  1568.                 // les auteurs
  1569.                 foreach($s['allauthors'] as $k=>$v) {
  1570.                     if(empty($authors[$v['lastname'].'_'.$v['firstname']])) {
  1571.                         $authors[$v['lastname'].'_'.$v['firstname']] = array(
  1572.                             'lastname' => $v['lastname'],
  1573.                             'firstname' => $v['firstname'],
  1574.                             'url_clean' => $v['url_clean'],
  1575.                         );
  1576.                         if(!empty($t)) {
  1577.                             $authors[$v['lastname'].'_'.$v['firstname']]['texts'] = array(
  1578.                                 $t
  1579.                             );
  1580.                         }
  1581.                         $thumbnail $persons->getVignettePerson($v['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
  1582.                         if(strpos($thumbnail'normal-def')===false) {
  1583.                             $authors[$v['lastname'].'_'.$v['firstname']]['photo'] = $thumbnail;
  1584.                         }
  1585.                     } else {
  1586.                         $authors[$v['lastname'].'_'.$v['firstname']]['spectacles'][] = $s;
  1587.                     }
  1588.                 }
  1589.             }
  1590.         }
  1591.         ksort($authors);
  1592.         $this->context['view']->authors $authors;
  1593.         // situation et titre meta
  1594.         $this->locate = array(
  1595.             '/educ/' => 'Éduc',
  1596.             => 'Auteurs bénéficiant d\'un carnet artistique et pédagogique'
  1597.         );
  1598.         $this->view->title_page 'Auteurs bénéficiant d\'un carnet artistique et pédagogique';
  1599.         $this->rub_courante 'educ';
  1600.         $this->asides->load('educ_note_intention');
  1601.         $this->asides->load('educ_lettre_info');
  1602.         return $this->view('educ/theatrales.html.twig');
  1603.     }
  1604.     // }}}
  1605.     // {{{ action_biographie_langagière()
  1606.     /** Biographie langagière
  1607.      *
  1608.      * @Route("/educ/biographie-langagiere", name="educ_biographie_langagiere")
  1609.      * @Route("/educ/biographie-langagiere-argumentaire", name="educ_biographie_langagiere_argumentaire")
  1610.      * @Route("/educ/biographie-langagiere-bilingue", name="educ_biographie_langagiere_bilingue")
  1611.      * @Route("/educ/biographie-langagiere-mots", name="educ_biographie_langagiere_mots")
  1612.      * @Route("/educ/biographie-langagiere-ressources", name="educ_biographie_langagiere_ressources")
  1613.      */
  1614.     public function action_biographie_langagiere()
  1615.     {
  1616.         // On récupère la route demandée
  1617.         $uri $_SERVER['REQUEST_URI'];
  1618.         $uriArray explode('/'$uri);
  1619.         // Ici $wanted page prend comme valeur la route demandée (sans le /)
  1620.         $wantedPage end($uriArray);
  1621.         $this->context['action'] = $this->view->action $wantedPage;
  1622.         // Récupère les spectacles qui ont des contenus bio lang => 137
  1623.         $this->context['view']->spectacles_list $this->getBioLangSpectacles();
  1624.         // Récupère les textes associés
  1625.         $this->context['view']->texts_list $this->getBioLangTexts();
  1626.         // menu pour bio lang
  1627.         $this->view->menu_biolang = [
  1628.             'biographie-langagiere' => ['name' => 'Présentation'],
  1629.             'biographie-langagiere-argumentaire' => ['name' => 'Argumentaire'],
  1630.             'biographie-langagiere-bilingue' => ['name' => 'Être bilingue'],
  1631.             'biographie-langagiere-mots' => ['name' => 'Mots clés'],
  1632.             'biographie-langagiere-ressources' => ['name' => 'Ressources']
  1633.         ];
  1634.         foreach($this->view->menu_biolang as $k => $v) {
  1635.             if ($k == $this->context['action']) {
  1636.                 $this->view->menu_biolang[$k]['active'] = 'on';
  1637.             }
  1638.         }
  1639.         $this->context['view']->addthis true;
  1640.         // asides
  1641.         $this->asides->load('educ_spectacle_list');
  1642.         $this->asides->load('educ_langagiere');
  1643.         $this->asides->load('educ_lettre_info');
  1644.         // Situation et titre meta
  1645.         $wantedPageArray explode('-'$wantedPage);
  1646.         $wantedPageSuffix end($wantedPageArray);
  1647.         switch($wantedPageSuffix) {
  1648.             case 'argumentaire':
  1649.                 $suffix 'Argumentaire';
  1650.                 break;
  1651.             case 'bilingue':
  1652.                 $suffix 'Être bilingue, devenir plurilingue';
  1653.                 break;
  1654.             case 'mots':
  1655.                 $suffix 'Mots clés';
  1656.                 break;
  1657.             case 'ressources':
  1658.                 $suffix 'Ressources';
  1659.                 break;
  1660.             default:
  1661.                 $suffix '';
  1662.         }
  1663.         $this->title_page 'Biographie langagière';
  1664.         if ($suffix === '') {
  1665.             $this->locate = [=> 'Biographie langagière'];
  1666.         } else {
  1667.             $this->locate = [
  1668.                 '/educ/biographie-langagiere' => 'Biographie langagière',
  1669.                 => $suffix
  1670.             ];
  1671.             $this->title_page .= ' - ' $suffix;
  1672.         }
  1673.         return $this->view('educ/' $wantedPage '.html.twig');
  1674.     }
  1675.     // }}}
  1676.     // {{{ action_avignon()
  1677.     /** les spectacles avignon auteurs
  1678.      *
  1679.      */
  1680.     public function action_avignon() {
  1681.         $this->getAvignonPersons('authors');
  1682.         $festival_avignon = array(
  1683.             array(
  1684.                 'name' => '+ d\'infos',
  1685.                 'key_url' => '/contacts/Festival-Avignon/'
  1686.             )
  1687.         );
  1688.         //asides
  1689.         $this->asides->load(['url_lists_alone' => array(
  1690.             'php' => array(
  1691.                 'method' => 'asidesUrlLists',
  1692.                 'urls' => $festival_avignon,
  1693.                 'url' => 'key_url'
  1694.             ),
  1695.             'title' => 'Festival d\'Avignon'
  1696.         )]);
  1697.     }
  1698.     // }}}
  1699.     // {{{ action_avignon_metteurs()
  1700.     /** metteurs en scène des spectacles d'avignon
  1701.      *
  1702.      */
  1703.     public function action_avignon_metteurs() {
  1704.         $this->getAvignonPersons('directors');
  1705.         $festival_avignon = array(
  1706.             array(
  1707.                 'name' => '+ d\'infos',
  1708.                 'key_url' => '/contacts/Festival-Avignon/'
  1709.             )
  1710.         );
  1711.         //asides
  1712.         $this->asides->load(['url_lists_alone' => array(
  1713.             'php' => array(
  1714.                 'method' => 'asidesUrlLists',
  1715.                 'urls' => $festival_avignon,
  1716.                 'url' => 'key_url'
  1717.             ),
  1718.             'title' => 'Festival d\'Avignon'
  1719.         )]);
  1720.     }
  1721.     // }}}
  1722.     // {{{ action_avignon_spectacle()
  1723.     /** Spectacles bénéficiants d'un contenu pièce démontée
  1724.      *
  1725.      */
  1726.     public function action_avignon_spectacle() {
  1727.         $this->getActionSpectaclesClassification($this->getListSpectaclesAvignon(),'avignon',233);
  1728.         $festival_avignon = array(
  1729.             array(
  1730.                 'name' => '+ d\'infos',
  1731.                 'key_url' => '/contacts/Festival-Avignon/'
  1732.             )
  1733.         );
  1734.         //asides
  1735.         $this->asides->load(['par_saison_alone' => array(
  1736.             'action' => '/educ/avignon-spectacle/{v_area_view}'
  1737.         )]);
  1738.         $this->asides->load(['url_lists_alone' => array(
  1739.             'php' => array(
  1740.                 'method' => 'asidesUrlLists',
  1741.                 'urls' => $festival_avignon,
  1742.                 'url' => 'key_url'
  1743.             ),
  1744.             'title' => 'Festival d\'Avignon'
  1745.         )]);
  1746.     }
  1747.     // }}}
  1748.     // {{{ action_eduscol()
  1749.     /** éduscol
  1750.      *
  1751.      */
  1752.     public function action_eduscol() {
  1753.         $type_person 'authors';
  1754.         // trouver également les texts qui ont un contenus associés pédagogique en excluant les spectacles
  1755.         $params_texts = array(
  1756.             'special' => array(
  1757.                 'idclassification' => array(139),
  1758.                 'join' => true,
  1759.             ),
  1760.             'params' => array(
  1761.                 'limit' => array(0,2000),
  1762.             ),
  1763.             'dbg' => array('list_texts''Liste des texts avec un contenu Eduscol'),
  1764.         );
  1765.         $texts_list $this->em->getRepository(Texts::class)->getListTexts($params_texts);
  1766.         if(!empty($texts_list)) {
  1767.             // les spectacles par auteurs / piècé demontée
  1768.             $persons $this->em->getRepository(Persons::class);
  1769.             foreach($texts_list as $s) {
  1770.                 // les auteurs
  1771.                 foreach($s['allauthors'] as $k=>$v) {
  1772.                     if(empty($results[$v['lastname'].'_'.$v['firstname']])) {
  1773.                         $results[$v['lastname'].'_'.$v['firstname']] = array(
  1774.                             'idperson' => $v['idperson'],
  1775.                             'lastname' => $v['lastname'],
  1776.                             'firstname' => $v['firstname'],
  1777.                             'url_clean' => $v['url_clean'],
  1778.                             'texts' => array($s),
  1779.                         );
  1780.                         $thumbnail $persons->getVignettePerson($v['idperson'],array('width'=>100,'height'=>100,'direction'=>'crop'));
  1781.                         if(strpos($thumbnail'normal-def')===false) {
  1782.                             $results[$v['lastname'].'_'.$v['firstname']]['photo'] = $thumbnail;
  1783.                         }
  1784.                     } else {
  1785.                         $results[$v['lastname'].'_'.$v['firstname']]['texts'][] = $s;
  1786.                     }
  1787.                 }
  1788.             }
  1789.         }
  1790.         foreach($results as $k=>$v) {
  1791.             if(count($v['texts'])>4) {
  1792.                 $results[$k]['is_list'] = true;
  1793.             }
  1794.         }
  1795.         ksort($results);
  1796.         $this->context['view']->$type_person $results;
  1797.         $eduscol_infos = array(
  1798.             array(
  1799.                 'name' => '+ d\'infos',
  1800.                 'key_url' => 'http://eduscol.education.fr/'
  1801.             )
  1802.         );
  1803.         //asides
  1804.         $this->asides->load(['url_lists_alone' => array(
  1805.             'php' => array(
  1806.                 'method' => 'asidesUrlLists',
  1807.                 'urls' => $eduscol_infos,
  1808.                 'url' => 'key_url'
  1809.             ),
  1810.             'title' => 'Éduscol'
  1811.         )]);
  1812.     }
  1813.     // }}}
  1814.     // {{{ action_ajouter()
  1815.     /** Ajouter un contenu pédagogique
  1816.      *
  1817.      */
  1818.     public function action_ajouter() {}
  1819.     // }}}
  1820.     // {{{ getPieceDemonteePersons()
  1821.     /** les auteurs ou metteurs en scène avec des pièces démontées
  1822.      *
  1823.      */
  1824.     public function getPieceDemonteePersons($type_person='authors') { $this->getCommonPersons($type_person,$this->getListSpectaclesPieceDemontee()); }
  1825.     // }}}
  1826.     // {{{ getListSpectaclesEduc()
  1827.     /**  Liste des spectacles dans le lieu
  1828.      *
  1829.      * @return array
  1830.      */
  1831.     protected function getListSpectaclesEduc($idclassification=125,$type_result='ids_spectacle_educ',$with_text=false) {
  1832.         return $this->getListSpectaclesCommon($idclassification,$type_result,$with_text);
  1833.     }
  1834.     // }}}
  1835.     // {{{ getListSpectaclesPieceDemontee()
  1836.     /**  Liste des spectacles avec pièce démontée
  1837.      *
  1838.      * @return array
  1839.      */
  1840.     protected function getListSpectaclesPieceDemontee() { return $this->getListSpectaclesCommon(82,'ids_spectacle_piece_demontee'); }
  1841.     // }}}
  1842.     // {{{ getListSpectaclesTheatreEnActe()
  1843.     /**  Liste des spectacles avec pièce démontée
  1844.      *
  1845.      * @return array
  1846.      */
  1847.     protected function getListSpectaclesTheatreEnActe() { return $this->getListSpectaclesCommon(207'ids_spectacle_theatre_en_acte'); }
  1848.     // }}}
  1849.     // {{{ getListSpectaclesAvignon()
  1850.     /**  Liste des spectacles avec pièce démontée
  1851.      *
  1852.      * @return array
  1853.      */
  1854.     protected function getListSpectaclesAvignon() {
  1855.         $idcontact 233;
  1856.         $idclassification 125;
  1857.         $type_result 'ids_spectacle_avignon';
  1858.         // trouver les spectacles qui ont des contenus éduc => 125 et qui sont joués à avignon
  1859.         $sql 'SELECT s.`idspectacle` FROM spectacles s
  1860.                     JOIN object_content oc  ON oc.`idobject`=s.`idspectacle`
  1861.                     JOIN contents c ON c.`idcontent`=oc.`idcontent`
  1862.                     JOIN content_classification cc ON cc.`idcontent`=c.`idcontent`
  1863.                     JOIN schedules sc ON sc.`idspectacle`=s.`idspectacle`
  1864.                 WHERE c.publish=1
  1865.                     AND oc.object=\'spectacles\'
  1866.                     AND cc.idclassification='.(int)$idclassification.'
  1867.                     AND sc.idcontact='.(int)$idcontact.'
  1868.                     AND s.`publish`=1 AND s.`valid`=1';
  1869.         $idspectacles $this->spectacles->queryCol($sql);
  1870.         $this->{$type_result} = $idspectacles;
  1871.         return $idspectacles;
  1872.     }
  1873.     // }}}
  1874.     // {{{ getListSpectaclesMinutePedagogique()
  1875.     /**  Liste des spectacles avec minute pedagogique
  1876.      *
  1877.      * @return array
  1878.      */
  1879.     protected function getListSpectaclesMinutePedagogique() {
  1880.         $idclassification 145;
  1881.         $type_result 'ids_spectacle_minute_pedagogique';
  1882.         $sql 'SELECT spectacles.`idspectacle`
  1883.                 FROM
  1884.                     `object_multimedia` ,
  1885.                     `schedules` ,
  1886.                     `spectacles` ,
  1887.                     `contacts` ,
  1888.                     `multimedias` ,
  1889.                     `multimedia_classification`
  1890.                 WHERE  multimedias.`publish`=1
  1891.                 AND object_multimedia.`object`="spectacles"
  1892.                 AND object_multimedia.`idrole` IS NULL
  1893.                 AND multimedia_classification.`idclassification`='.(int)$idclassification.'
  1894.                 AND multimedias.`idmultimedia`=object_multimedia.`idmultimedia`
  1895.                 AND schedules.`idspectacle`=spectacles.`idspectacle`
  1896.                 AND spectacles.`idspectacle`=object_multimedia.`idobject`
  1897.                 AND contacts.`idcontact`=schedules.`idcontact`
  1898.                 AND multimedias.`idmultimedia`=multimedia_classification.`idmultimedia`
  1899.                 GROUP BY object_multimedia.`idobject`';
  1900.         $idspectacles $this->spectacles->queryCol($sql);
  1901.         $this->{$type_result} = $idspectacles;
  1902.         return $idspectacles;
  1903.     }
  1904.     // }}}
  1905.     // {{{ getAvignonPersons()
  1906.     /** les auteurs ou metteurs en scène avec des spectacles avignon
  1907.      *
  1908.      */
  1909.     public function getAvignonPersons($type_person='authors') { $this->getCommonPersons($type_person,$this->getListSpectaclesAvignon()); }
  1910.     // }}}
  1911.     // {{{ getCommonPersons()
  1912.     /** les auteurs ou metteurs en scène
  1913.      *
  1914.      */
  1915.     public function getCommonPersons($type_person='authors',$idspectacles)
  1916.     {
  1917.         $spectacles_list $this->spectacles->getListSpectacles(array(
  1918.             'special' => array(
  1919.                 'idspectacle' => $idspectacles,
  1920.             ),
  1921.             'params' => array(
  1922.                 'limit' => array(0,200)
  1923.             ),
  1924.             'dbg' => array('list_spectacles_'.$type_person'Liste des spectacles'),
  1925.         ));
  1926.         // les spectacles par auteurs / piècé demontée
  1927.         $persons $this->em->getRepository(Persons::class);
  1928.         // recherche par type d'auteurs
  1929.         $periodes = array(
  1930.             'vivant' => 'vivants',
  1931.             'contemporain' => 'contemporains',
  1932.             'public' => 'du domaine public',
  1933.         );
  1934.         if(!empty($this->context['params']['periode']) && array_key_exists($this->context['params']['periode'],$periodes)) {
  1935.             $periode trim(htmlspecialchars(strip_tags($this->context['params']['periode'])));
  1936.             $this->context['view']->periode $periodes[$periode];
  1937.         } else {
  1938.             $this->context['view']->periode '';
  1939.         }
  1940.         if(!empty($spectacles_list)) {
  1941.             foreach($spectacles_list as $s) {
  1942.                 // les auteurs
  1943.                 foreach($s['all'.$type_person] as $k=>$v) {
  1944.                     if(empty($results[$v['lastname'].'_'.$v['firstname']])) {
  1945.                         $results[$v['lastname'].'_'.$v['firstname']] = array(
  1946.                             'lastname' => $v['lastname'],
  1947.                             'firstname' => $v['firstname'],
  1948.                             'idperson' => $v['idperson'],
  1949.                             'url_clean' => $v['url_clean'],
  1950.                             'spectacles' => array(
  1951.                                 $s
  1952.                             ),
  1953.                         );
  1954.                         if($s['textfictif']==0) {
  1955.                             $results[$v['lastname'].'_'.$v['firstname']]['textreel'] = 1;
  1956.                         }
  1957.                         $thumbnail $persons->getVignettePerson($v['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
  1958.                         if(strpos($thumbnail'normal-def')===false) {
  1959.                             $results[$v['lastname'].'_'.$v['firstname']]['photo'] = $thumbnail;
  1960.                         }
  1961.                     } else {
  1962.                         if($s['textfictif']==0) {
  1963.                             $results[$v['lastname'].'_'.$v['firstname']]['textreel'] = 1;
  1964.                         }
  1965.                         $results[$v['lastname'].'_'.$v['firstname']]['spectacles'][] = $s;
  1966.                     }
  1967.                 }
  1968.             }
  1969.         }
  1970.         foreach($results as $k=>$v) {
  1971.             // suprimer les auteurs qui n'ont que des textes fictifs
  1972.             if(empty($v['textreel']) && $type_person=='authors') {
  1973.                 unset($results[$k]);
  1974.                 continue;
  1975.             }
  1976.             if(count($v['spectacles'])>4) {
  1977.                 $results[$k]['is_list'] = true;
  1978.             }
  1979.         }
  1980.         if($type_person=='authors') {
  1981.             // récupèrer également les dates de l'auteur dans le cas d'une recherche par période
  1982.             foreach($results as $k=>$v) {
  1983.                 $infos $this->em->getRepository(Persons::class)->getInfosPerson($v['idperson']);
  1984.                 // les contemporains
  1985.                 if(!empty($infos['dateend'])) {
  1986.                     if($infos['dateend']<0) {
  1987.                         $infos['dateend'] = str_replace('-'''$infos['dateend']);
  1988.                         $infos['dateend'] = str_pad($infos['dateend'], 4'0'STR_PAD_LEFT);
  1989.                         $infos['dateend'] = '-'.$infos['dateend'];
  1990.                     } else {
  1991.                         $infos['dateend'] = str_pad($infos['dateend'], 4'0'STR_PAD_LEFT);
  1992.                     }
  1993.                     $today = new \DateTime(date('Y-m-d'));
  1994.                     $dateend = new \DateTime($infos['dateend'].'-01-01');
  1995.                     $interval $dateend->diff($today);
  1996.                     if($interval->format('%Y')>70) {
  1997.                         $periode_person 'public';
  1998.                     } else {
  1999.                         $periode_person 'contemporain';
  2000.                     }
  2001.                 } else {
  2002.                     $periode_person 'vivant';
  2003.                 }
  2004.                 $results[$k]['periode'] = $periode_person;
  2005.             }
  2006.             // tri periode
  2007.             if(!empty($periode)) {
  2008.                 foreach($results as $k=>$v) {
  2009.                     // pour les contemporains
  2010.                     if($periode=='contemporain' && $v['periode']=='vivant') {
  2011.                         continue;
  2012.                     }
  2013.                     if($v['periode']!=$periode) {
  2014.                         unset($results[$k]);
  2015.                     }
  2016.                 }
  2017.             }
  2018.         } // fin période
  2019.         ksort($results);
  2020.         $this->context['view']->$type_person $results;
  2021.     }
  2022.     // }}}
  2023.     // {{{ getActionSpectaclesClassification()
  2024.     /** Spectacles bénéficiants d'un contenu specifique
  2025.      *
  2026.      */
  2027.     protected function getActionSpectaclesClassification($idspectacles,$name='educ',$idcontact=null,$get_texts=false,$next_by_default=false,$params=array())
  2028.     {
  2029.         // recherche une année ?
  2030.         $saison $this->getSaison();
  2031.         // les dates des spectacles de tous les spectacles
  2032.         $listdates $this->getSpectaclesDatesCommon($idspectacles);
  2033.         // récupérer la liste des années et des saisons et générer les listes déroulantes
  2034.         $annees_saisons $this->getListSeasonsYears($listdates,null,true);
  2035.         // liste des saisons
  2036.         $this->getCommonSearch(array(
  2037.             'saisons_annees' => [
  2038.                 'saisons' => $annees_saisons['saisons']
  2039.             ]
  2040.         ));
  2041.         $this->getCommonSearchView();
  2042.         //Si on ne veux pas les prochains spectacles
  2043.         if(!empty($listdates) && empty($params['prochains'])) {
  2044.             $this->view->saisons $annees_saisons['saisons'];
  2045.         }
  2046.         if($next_by_default) {
  2047.             // si aucune recherche par person, par année ou par saison => recherche par saison
  2048.             if(empty($saison) && empty($idperson_director) && empty($idperson_author) && empty($params['prochains'])){
  2049.                 // prendre la dernière saison
  2050.                 $saison Date_time::getLastSaison($annees_saisons['saisons']);
  2051.             }
  2052.         }
  2053.         // recherche par saison
  2054.         if(!empty($saison) && empty($params['prochains']) && empty($params['saison_desactive'])){
  2055.             $annees_saison explode('-'$saison);
  2056.             if(count($annees_saison)==2) {
  2057.                 $datestart Date_time::getSaisonDatestart((int)$annees_saison[0]);
  2058.                 $dateend Date_time::getSaisonDateend((int)$annees_saison[1]);
  2059.             }
  2060.             // saison de recherche
  2061.             $this->view->saison $saison;
  2062.             // saison précédente / suivante
  2063.             $this->view->saisons_nav $this->getSaisonsNav($annees_saisons['saisons'],$saison);
  2064.         }
  2065.         $choix_type = array('SN','TN','CDN','SC');
  2066.         // les types de structure
  2067.         $typesstructure_list $this->em->getRepository(Typesstructures::class)->getTypeStructureList(true,true,$choix_type);
  2068.         // type de structure recherchée
  2069.         if(!empty($_REQUEST['idtypestructure']) && array_key_exists($_REQUEST['idtypestructure'], $typesstructure_list)) {
  2070.             $this->context['view']->idtypestructure filter_var($_REQUEST['idtypestructure'], FILTER_SANITIZE_STRING);
  2071.             foreach(array('typestructure','typestructure_pluriel') as $s) {
  2072.                 $typesstructure_list_simple[$s] = strtolower($typesstructure_list[$this->context['view']->idtypestructure][$s]);
  2073.             }
  2074.             $typesstructure_list_simple['idtypestructure'] = $this->context['view']->idtypestructure;
  2075.             $this->context['view']->typestructure $typesstructure_list_simple;
  2076.         }
  2077.         // recherche période
  2078.         if(!empty($datestart) && !empty($dateend)) {
  2079.             $where_search ' AND sc.`date` BETWEEN \''.$datestart.'\' AND \''.$dateend.'\' ';
  2080.         }
  2081.         // recherche dans un lieu précis (Avignon Style)
  2082.         if(!empty($idcontact)) {
  2083.             $where_idcontact ' AND c.`idcontact`='.(int)$idcontact.' ';
  2084.             $where_search .= $where_idcontact;
  2085.         }
  2086.         $params_spectacles = array(
  2087.             'special' => array(
  2088.                 'idspectacle' => $idspectacles,
  2089. //                'plus_proche' => true
  2090.             ),
  2091.             'params' => array(
  2092.                 'limit' => 'all',
  2093.             ),
  2094.             'dbg' => array('list_spectacles_'.$name'Liste des spectacles avec un contenu '.$name),
  2095.         );
  2096.         if(!empty($where_search)) {
  2097.             $params_spectacles['params']['where'] = $where_search;
  2098.         }
  2099.         if($next_by_default && empty($datestart) && empty($dateend) && empty($saison)) {
  2100.             $params_spectacles['special']['prochains'] = 'all';
  2101.             $this->context['view']->prochains true;
  2102.         }
  2103.         //on récupère les prochains spectacles hors saison et hors date prochains/à venir
  2104.         if(!empty($params['order'])){
  2105.             $params_spectacles['params']['order'] = $params['order'];
  2106.         }
  2107.         //on récupère les prochains spectacles hors saison et hors date prochains/à venir
  2108.         if(!empty($params['prochains'])){
  2109.             $params_spectacles['special']['prochains'] = $params['prochains'].'';
  2110.         }
  2111.         if(!empty($params['tri_date_creation'])){
  2112.             $params_spectacles['params']['order'] = ['creation_date''DESC'];
  2113.         }
  2114.         if(!empty($params['limit'])){
  2115.             $params_spectacles['params']['limit'] = $params['limit'];
  2116.         }
  2117.         // une région en particulier ?
  2118.         $params_spectacles $this->setAreaRecherche($params_spectacles);
  2119.         if(array_key_exists('idtypestructure', (array)$this->context['view'])){
  2120.             $params_spectacles['special']['structures_specifiques'] = true;
  2121.             $params_spectacles['special']['idtypestructure'] = $this->context['view']->idtypestructure;
  2122.         }
  2123.         if(array_key_exists('perPage'$params)){
  2124.             $url_custom '/educ/'.$this->context['action'];
  2125.             if(is_numeric($params['perPage'])){
  2126.                 $this->perPage $params['perPage'];
  2127.             }
  2128.             elseif(is_array($params['perPage'])){
  2129.                 if(array_key_exists('limit'$params['perPage'])){
  2130.                     $this->perPage $params['perPage']['limit'];
  2131.                 }
  2132.                 if(array_key_exists('url_custom'$params['perPage'])){
  2133.                     $urlpagination = new asidesUrlPagination(
  2134.                         $params['perPage']['url_custom'].'generate_params',
  2135.                         array(
  2136.                             'area' => $this->context['view']->area,
  2137.                             'saison' => (!empty($this->context['view']->saison)) ? $this->context['view']->saison false,
  2138.                         ),
  2139.                         $this->context
  2140.                     );
  2141.                     $url_custom $urlpagination->url_pagination();
  2142.                 }
  2143.             }
  2144.             $this->context['view']->nb_spectacles_total $this->spectacles->countListSpectacles($params_spectacles);
  2145.             $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total10);
  2146.             $params_spectacles['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  2147.             // $this->context['view']->pagination['url_custom'] = $url_custom;
  2148.             $this->context['view']->pagination['spectacle'] = true;
  2149.         }
  2150.         $allauthors = array('allauthors' => true);
  2151.         $this->context['view']->spectacles $this->spectacles->getListSpectacles($params_spectacles,array(),false,$allauthors);
  2152.         $i 0;
  2153.         foreach($this->context['view']->spectacles as $k=>$v) {
  2154.             $this->context['view']->spectacles[$k]['url_clean_more'] = 'contenus-pedagogiques/';
  2155.             // retrouver des textes
  2156.             if(!empty($get_texts) && !empty($v['idtext']) && $v['textfictif']==0) {
  2157.                 $idtexts[$v['idtext']] = $v['idtext'];
  2158.             }
  2159.             if($v['textfictif']==0) {
  2160.                 $i++;
  2161.             }
  2162.         }
  2163.         if(!empty($idtexts)) {
  2164.             $this->context['view']->texts $this->em->getRepository(Texts::class)->getListTexts(
  2165.                 array(
  2166.                     'params' => array(
  2167.                         'limit' => 'all',
  2168.                     ),
  2169.                     'special' => array(
  2170.                         'idtext' => array('IN'$idtexts),
  2171.                     ),
  2172.                     'dbg' => array('texts_educ','Textes avec contenus pédagogiques'),
  2173.                 ),
  2174.                 array(
  2175.                     'stylemore' => array('imagep' => 'width:75px;''desctxt' => 'width:190px;'),
  2176.                     'vignette_format' => array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb')
  2177.                 )
  2178.             );
  2179.             if(!empty($this->context['view']->texts)) {
  2180.                 foreach($this->context['view']->texts as $k=>$v) {
  2181.                     $this->context['view']->texts[$k]['url_clean_more'] = 'contenus-pedagogiques/';
  2182.                 }
  2183.             }
  2184.         }
  2185.     }
  2186.     // }}}
  2187.     // {{{ getListSpectaclesCommon()
  2188.     /**  Liste des spectacles avec classification spécifique
  2189.      *
  2190.      * @return array
  2191.      */
  2192.     protected function getListSpectaclesCommon($idclassification,$type_result='ids_spectacle_educ',$with_text=false)
  2193.     {
  2194.         // trouver les spectacles qui ont des contenus éduc => 125
  2195.         $sql 'SELECT s.`idspectacle` FROM spectacles s
  2196.                     JOIN object_content oc  ON oc.`idobject`=s.`idspectacle`
  2197.                     JOIN contents c ON c.`idcontent`=oc.`idcontent`
  2198.                     JOIN content_classification cc ON cc.`idcontent`=c.`idcontent`
  2199.                 WHERE c.publish=1
  2200.                     AND oc.object=\'spectacles\'
  2201.                     AND cc.idclassification='.(int)$idclassification.'
  2202.                     AND s.`publish`=1 AND s.`valid`=1';
  2203.         $idspectacles_from_spectacles $this->spectacles->queryCol($sql);
  2204.         if(!empty($idspectacles_from_spectacles)) {
  2205.             foreach($idspectacles_from_spectacles as $k=>$v) {
  2206.                 $ids[$v] = $v;
  2207.             }
  2208.         }
  2209.         // si pas de contenu associé éduc sur le spectacle
  2210.         if($with_text) {
  2211.             // trouver les spectacles de texte qui ont des contenus éduc
  2212.             $sql 'SELECT ts.`idspectacle` FROM texts t
  2213.                         JOIN text_spectacle ts  ON ts.`idtext`=t.`idtext`
  2214.                         JOIN object_content oc  ON oc.`idobject`=t.`idtext`
  2215.                         JOIN contents c ON c.`idcontent`=oc.`idcontent`
  2216.                         JOIN content_classification cc ON cc.`idcontent`=c.`idcontent`
  2217.                     WHERE c.publish=1
  2218.                         AND oc.object=\'texts\'
  2219.                         AND cc.idclassification='.(int)$idclassification.'
  2220.                         AND t.`publish`=1 AND t.`valid`=1';
  2221.             $idspectacles_from_texts $this->spectacles->queryCol($sql);
  2222.             if(!empty($idspectacles_from_texts)) {
  2223.                 foreach($idspectacles_from_texts as $k=>$v) {
  2224.                     $ids[$v] = $v;
  2225.                 }
  2226.             }
  2227.         }
  2228.         if(isset($ids)){
  2229.             $this->{$type_result} = $ids;
  2230.             return $ids;
  2231.         }
  2232.         else{
  2233.             return array();
  2234.         }
  2235.     }
  2236.     // }}}
  2237.     // {{{ getListTextsCommon()
  2238.     /**  Liste des textes avec classification spécifique
  2239.      *
  2240.      * @return array
  2241.      */
  2242.     protected function getListTextsCommon($idclassification,$type_result='ids_text_educ')
  2243.     {
  2244.         // trouver les textes qui ont des contenus éduc => 125 par exemple
  2245.         $sql 'SELECT t.`idtext`, c.`idcontent` FROM texts t
  2246.                     JOIN object_content oc  ON oc.`idobject`=t.`idtext`
  2247.                     JOIN contents c ON c.`idcontent`=oc.`idcontent`
  2248.                     JOIN content_classification cc ON cc.`idcontent`=c.`idcontent`
  2249.                 WHERE c.publish=1
  2250.                     AND oc.object=\'texts\'
  2251.                     AND cc.idclassification='.(int)$idclassification.'
  2252.                     AND t.`publish`=1 AND t.`valid`=1';
  2253.         $idtexts $this->texts->queryAll($sql);
  2254.         $this->{$type_result} = $idtexts;
  2255.         return $idtexts;
  2256.     }
  2257.     // }}}
  2258.     // {{{ getSpectaclesDatesCommon()
  2259.     /** Récupere  la liste des dates des spectacles à partir de la liste de tous les spectacles
  2260.      *
  2261.      * @return array
  2262.      */
  2263.     public function getSpectaclesDatesCommon($ids_spectacle=array(),$ids_text=array())
  2264.     {
  2265.         if(!empty($ids_spectacle)) {
  2266.             $sql_annees '
  2267.                 SELECT schedules.`date`, YEAR(schedules.`date`) as annee
  2268.                 FROM schedules, spectacles
  2269.                 WHERE schedules.`idspectacle`=spectacles.`idspectacle`
  2270.                 AND spectacles.`publish`=1
  2271.                 AND schedules.`idspectacle` IN ('.join(','$ids_spectacle).')
  2272.                 ORDER BY schedules.`date`';
  2273.         }
  2274.         if(!empty($ids_text)) {
  2275.             $sql_annees '
  2276.                 SELECT schedules.`date`, YEAR(schedules.`date`) as annee
  2277.                 FROM schedules, spectacles
  2278.                     JOIN text_spectacle ON spectacles.`idspectacle`=text_spectacle.`idtext`
  2279.                 WHERE schedules.`idspectacle`=spectacles.`idspectacle`
  2280.                 AND spectacles.`publish`=1
  2281.                 AND text_spectacle.`idtext` IN ('.join(','$ids_text).')
  2282.                 ORDER BY schedules.`date`';
  2283.         }
  2284.         //si $sql_annees n'existe pas
  2285.         if(!isset($sql_annees)){
  2286.             return array();
  2287.         }
  2288.         $listdates $this->spectacles->queryAll($sql_annees);
  2289.         // liste des saisons et des années
  2290.         if(empty($listdates)) {
  2291.             //echo $listdates->getDebugInfos();
  2292.             return array();
  2293.         } else {
  2294.             return $listdates;
  2295.         }
  2296.     }
  2297.     // }}}
  2298.     // {{{ getCommonInfos()
  2299.     /** Récupere des infos pour les menus auteurs, textes, spectacles
  2300.      *
  2301.      * @return void
  2302.      */
  2303.     protected function getCommonInfos()
  2304.     {
  2305.         // menu pour piece demontee
  2306.         $this->context['view']->menu_contents = array(
  2307.             'auteurs' => array('name' => 'Auteurs'),
  2308.             'textes' => array('name' => 'Textes'),
  2309.             'spectacles' => array('name' => 'Spectacles'),
  2310.         );
  2311.         if(!empty($this->context['view']->custom_menu_area)){
  2312.             $this->asides->load(['url_lists,menu_' => array(
  2313.                 'exec' => array(
  2314.                     'htmlstart' => true,
  2315.                     'htmlend' => true
  2316.                 ),
  2317.                 'php' => array(
  2318.                     'method' => 'asidesUrlLists',
  2319.                     'url' => '/educ/key_page/generate_params',
  2320.                     'urls' => $this->context['view']->menu_contents,
  2321.                     'params' => array(
  2322.                         'key_page' => 'auto_key',
  2323.                         'activate' => $this->context['action']
  2324.                     ),
  2325.                     'structure' => array(
  2326.                         'area' => $this->context['view']->area
  2327.                     )
  2328.                 ),
  2329.                 'title' => 'Navigation'
  2330.             )]);
  2331.         }
  2332.         // ajouter masonery
  2333.         $this->context['view']->js_more[] = 'jquery.masonry.min.js';
  2334.         // style en plus
  2335.         $this->context['view']->style_more = array(
  2336.             'dossier',
  2337.             'rubrique',
  2338.             'pageregion'
  2339.         );
  2340.     }
  2341.     // }}}
  2342.     // {{{ getLocate()
  2343.     /** Ou se trouve t'on (getter)
  2344.      *
  2345.      */
  2346.     public function getLocate() { return $this->locate; }
  2347.     // }}}
  2348.     // {{{ getBioLangSpectacles()
  2349.     /** Récupère les spectacles qui ont des contenus bio lang => 137
  2350.      *
  2351.      */
  2352.     public function getBioLangSpectacles() {
  2353.         $sql 'SELECT s.`idspectacle` FROM spectacles s
  2354.                     JOIN object_content oc ON oc.`idobject` = s.`idspectacle`
  2355.                     JOIN contents c ON c.`idcontent` = oc.`idcontent`
  2356.                     JOIN content_classification cc ON cc.`idcontent` = c.`idcontent`
  2357.                 WHERE c.`publish` = 1
  2358.                     AND oc.`object` = \'spectacles\'
  2359.                     AND cc.`idclassification` = 245
  2360.                     AND s.`publish` = 1
  2361.                     AND s.`valid` = 1
  2362.         ';
  2363.         $idspectacles $this->spectacles->queryCol($sql);
  2364.         $params_spectacles = [
  2365.             'special' => [
  2366.                 'idspectacle' => $idspectacles
  2367.             ],
  2368.             'params' => [
  2369.                 'limit' => [0200]
  2370.             ],
  2371.             'dbg' => ['list_spectacles''Liste des spectacles avec une bio lang']
  2372.         ];
  2373.         $spectacles_list $this->spectacles->getListSpectacles($params_spectacles);
  2374.         if (!empty($spectacles_list)) {
  2375.             foreach($spectacles_list as $k => $v) {
  2376.                 $spectacles_list[$k]['url_clean_more'] = 'contenus-pedagogiques/';
  2377.             }
  2378.         }
  2379.         return $spectacles_list;
  2380.     }
  2381.     // }}}
  2382.     // {{{ getBioLangTexts()
  2383.     /** Récupère les textes pour les pages biographie langagière
  2384.      *
  2385.      */
  2386.     public function getBioLangTexts ()
  2387.     {
  2388.         $params_texts = [
  2389.             'special' => [
  2390.                 'idclassification' => [137]
  2391.             ],
  2392.             'params' => [
  2393.                 'limit' => [0200]
  2394.             ],
  2395.             'dbg' => ['list_textes''Liste des textes avec une bio lang']
  2396.         ];
  2397.         $texts_list $this->em->getRepository(Texts::class)->getListTexts($params_texts);
  2398.         if (!empty($texts_list)) {
  2399.             foreach ($texts_list as $k => $v) {
  2400.                 $texts_list[$k]['url_clean_more'] = 'contenus-pedagogiques/';
  2401.             }
  2402.         }
  2403.         return $texts_list;
  2404.     }
  2405. }