src/Controller/TextesController.php line 85

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 App\Validator\Relations;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\Form\Extension\Core\Type\FormType;
  12. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. use TheatreCore\Entity\Persons;
  19. use TheatreCore\Entity\Playlists;
  20. use TheatreCore\Entity\Spectacles;
  21. use TheatreCore\Entity\Texts;
  22. use TheatreCore\Entity\Typesstructures;
  23. use TheatreCore\Form\Type\RelationsType;
  24. class TextesController extends TheatreController
  25. {
  26.     // l'objet texts
  27.     protected $texts;
  28.     // l'objet spectacles
  29.     protected $spectacles;
  30.     // par page
  31.     protected $perPage 20;
  32.     // version de la carte
  33.     protected $carte_version 'svg';
  34.     // {{{ _construct()
  35.     /** constructeur hérité
  36.      *
  37.      */
  38.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorTokenStorageInterface $tokenStorageFunctions $funcAbonnements $abonnements)
  39.     {
  40.         parent::__construct($translator$tokenStorage);
  41.         $this->context['controller'] = $this->view->controller 'textes';
  42.         $GLOBALS['rub_courante'] = 'textes';
  43.         $this->em $em;
  44.         $this->func $func;
  45.         $this->texts $em->getRepository(Texts::class);
  46.         $this->spectacles $em->getRepository(Spectacles::class);
  47.         $this->getCarteVersion();
  48.         $this->serviceAbonnements $abonnements;
  49.     }
  50.     // }}}
  51.     // {{{ action_affiche()
  52.     /**
  53.      * @Route("/textes/{type}/affiche", name="textes_affiches")
  54.      * @Route("/textes/{type}/affiche/area/{p_area}", name="textes_affiches_area")
  55.      * @Route("/textes/{type}/affiche/type/{p_type}", name="textes_affiches_type")
  56.      * @Route("/textes/{type}/affiche/type/{p_type}/area/{p_area}", name="textes_affiches_type_area")
  57.      * @Route("/textes/{type}/affiche/area/{p_area}/type/{p_type}", name="textes_affiches_area_type")
  58.      * @Route("/textes/{type}/affiche/area//type/{p_type}", name="textes_affiches_area_type_empty")
  59.      *
  60.      * Textes contemporains à l'affiche
  61.      *
  62.      */
  63.     public function action_affiche($p_type null$p_area null)
  64.     {
  65.         $this->context['params']['area'] = $p_area;
  66.         $this->context['params']['type'] = $p_type;
  67.         $this->context['action'] = $this->view->action 'affiche';
  68.         // les types de structure
  69.         $typesstructure_list $this->em->getRepository(Typesstructures::class)->getTypeStructureList(true,true,array('SN','TN','CDN','SC'));
  70.         // type de structure recherchée
  71.         $typesstructure_list_simple['idtypestructure'] = null;
  72.         if(!empty($_REQUEST['idtypestructure']) && array_key_exists($_REQUEST['idtypestructure'], $typesstructure_list)) {
  73.             $this->context['view']->idtypestructure filter_var($_REQUEST['idtypestructure'], FILTER_SANITIZE_STRING);
  74.             foreach(array('typestructure','typestructure_pluriel') as $s) {
  75.                 $typesstructure_list_simple[$s] = strtolower($typesstructure_list[$this->context['view']->idtypestructure][$s]);
  76.             }
  77.             $typesstructure_list_simple['idtypestructure'] = $this->context['view']->idtypestructure;
  78.             $this->context['view']->typestructure $typesstructure_list_simple;
  79.         }
  80.         $this->context['view']->menu_content_tri = array(
  81.             'contemporains/affiche' => array('name' => 'Tous les textes contemporains''label' => 'all'),
  82.             // 'editions/auteurs-spectacles' => array('name' => 'Les textes par l\'auteurs', 'label' => 'auteurs-spectacles'),
  83.         );
  84.         $this->context['view']->menu_content = array(
  85.             // 'all' => array('name' => 'Tous les textes (en attente)', 'label' => 'all'),
  86.             // 'affiche' => array('name' => 'Les textes édités (en attente)', 'label' => 'textes édités'),
  87.             // 'contemporains' => array('name' => 'Tous', 'label' => 'contemporains'),
  88.             'contemporains-edites' => array('name' => 'Édités''label' => 'contemporains-edites'),
  89.             'jeunesses' => array('name' => 'Jeunesse''label' => 'jeunesses'),
  90.             'francophones' => array('name' => 'Francophones''label' => 'francophones'),
  91.             'etrangers' => array('name' => 'En langue étrangère''label' => 'en langue étrangère'),
  92.             // 'public' => array('name' => 'Du domaine public (en attente)', 'label' => 'du domaine public'),
  93.         );
  94.         if(empty($this->context['params']['type']) || !array_key_exists($this->context['params']['type'], $this->context['view']->menu_content)) {
  95.             $this->context['view']->type 'contemporains';
  96.         } else {
  97.             $this->context['view']->type $this->context['params']['type'];
  98.             if($this->context['view']->type == "all"){
  99.                 $this->context['view']->type_all_show true;
  100.             }
  101.             $this->context['view']->type_title $this->context['view']->menu_content[$this->context['view']->type]['label'];
  102.         }
  103.         $this->context['view']->menu_jours = array(
  104.             => array('name' => '3 prochains jours'),
  105.             => array('name' => '7 prochains jours'),
  106.             30 => array('name' => '30 prochains jours'),
  107.             365 => array('name' => '12 prochains mois'),
  108.         );
  109.         if(!empty($this->context['params']['area'])) {
  110.             $nb_days_default 30;
  111.         } else {
  112.             $nb_days_default 365;
  113.         }
  114.         $this->getCommonSearch(array(
  115.             'saisons_annees' => Date_time::getListSaisons(2000,(date('Y')+1)),
  116.             'nb_days' => $nb_days_default,
  117.         ));
  118.         // formulaire de saisie recherche par titre
  119.         $this->context['formAsideSearch']->add('title'TextType::class, [
  120.             'label' => 'Mots du titre',
  121.             'attr' => [
  122.                 'size' => '35',
  123.                 'placeholder' =>'Rechercher un texte'
  124.             ]
  125.         ]);
  126.         $this->context['formAsideSearch']->add('search'SubmitType::class, [
  127.             'label' => 'OK',
  128.             'attr' => [
  129.                 'class'=>'boutform'
  130.             ]
  131.         ]);
  132.         $this->getCommonSearchView();
  133.         // les spectacles à l'affiche avec des textes nonfictif
  134.         $params_sql $this->setCommonSearchSpectacles(array(
  135.             'special' => array(
  136.                 'textfictif' => 0,
  137.                 'count_only_distinct' => 't.idtext',
  138.                 // 'plus_proche' => true,
  139.                 'text' => array(
  140.                     'type' => array(0,1), // original et traduction uniquement
  141.                     'person' => array(
  142.                         'periode' => 'contemporain',
  143.                     ),
  144.                 ),
  145.             ),
  146.             'params' => array(
  147.                 // TODO pas les adaptations =>pour avoir le MEME nombre dans les deux cas
  148.                 'where' => ' s.title IS NULL ',
  149.                 'groupby' => ' t.idtext ',
  150.             ),
  151.             'dbg' => array('list_spectacles_texts''Liste des spectacles avec textes non fictifs'),
  152.         ));
  153.         if(!empty($this->context['view']->idtypestructure)){
  154.             $params_sql['special']['idtypestructure'] = $this->context['view']->idtypestructure;
  155.         }
  156.         // types
  157.         if($this->context['view']->type=='francophones') {
  158.             $params_sql['special']['text']['language'] = 'fr';
  159.             $params_sql['special']['text']['type'] = array(0);
  160.         }
  161.         if($this->context['view']->type=='contemporains-edites') {
  162.             $params_sql['special']['text']['is_published'] = true;
  163.         }
  164.         if($this->context['view']->type=='jeunesses') {
  165.             $params_sql['special']['text']['idgenretext'] = 9;
  166.         }
  167.         if($this->context['view']->type=='etrangers') {
  168.             $params_sql['special']['text']['language'] = array('NOT IN' => array('fr'));
  169.         }
  170.         if(!empty($params_sql['special']['area'])) {
  171.             $this->context['view']->area_active true;
  172.             $this->spectacles->setZoneRecherche($this->getZoneRecherche($params_sql['special']['area'])); // définir la zone de recherche
  173.         }
  174.         $this->context['view']->nb_textes_total $this->spectacles->countListSpectacles($params_sql);
  175.         $params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  176.         $vignette = array('vignette_format' =>
  177.             array('height'=>$_ENV['VIGN_TEXT_HEIGHT'],'width'=>$_ENV['VIGN_TEXT_WIDTH'],'direction'=>'thumb')
  178.         );
  179.         $list_spectacles $this->spectacles->getListSpectacles($params_sql);
  180.         //on supprime les peridoes des spectacles si on sélectionne une année
  181.         if($this->context['view']->year){
  182.             foreach($list_spectacles as $k => $v){
  183.                 unset($v['periode']);
  184.                 unset($v['prochdate']);
  185.                 unset($v['city']);
  186.                 $list_spectacles[$k] = $v;
  187.             }
  188.         }
  189.         $this->context['view']->texts $this->texts->getTextsFromSpectacles($list_spectacles, array(), $vignette);
  190.         $urlpagination = new asidesUrlPagination(
  191.             '/textes/contemporains/affiche/type/key_type',
  192.             array(
  193.                 'params' => array(
  194.                     'key_type' => $this->context['view']->type
  195.                 ),
  196.                 'day' => $this->context['view']->days,
  197.                 'area' => (!empty($params_sql['special']['area'])) ? $params_sql['special']['area'] : null,
  198.                 'datestart' => $this->context['view']->datestart,
  199.                 'dateend' => $this->context['view']->dateend,
  200.                 'annee' => $this->context['view']->year,
  201.                 'structure' => $typesstructure_list_simple['idtypestructure']
  202.             ),
  203.             $this->context
  204.         );
  205.         $pagination_url_custom $urlpagination->url_pagination();
  206.         $this->context['view']->pagination $this->getPagination($this->context['view']->nb_textes_total10, array('url_custom' => $pagination_url_custom));
  207.         // $this->context['view']->pagination = $this->getPagination($this->context['view']->nb_textes_total);
  208.         $this->context['view']->pagination['texte'] = true;
  209.         //On n'affiche pas les lieu dans ce block sur cette page
  210.         $this->context['view']->noshow_detail_periode true;
  211.         $this->context['view']->text_title_center true;
  212.         $asides_top = new asides();
  213.         $asides_top->load(['aside_top' => array(
  214.             'php' => array(
  215.                 'method' => 'asidesUrlRegions',
  216.                 'url' => '/key_url/',
  217.                 'params' => array(
  218.                     'activate' => $this->context['action']
  219.                 )
  220.             )
  221.         )
  222.         ]);
  223.         $this->context['view']->aside_top $asides_top->view($this->context['view']);
  224.         $asides = new asides();
  225.         $asides->load(['recherche_texte.inc' => array(
  226.             'exec' => ['htmlstart' => true'color'=>'context'],
  227.             'action' => '/textes/contemporain/recherche',
  228.             'title' => 'Rechercher'
  229.         )]);
  230.         $asides->load(['url_lists,menu_content_tri' => array(
  231.             'exec' => array(
  232.                 'alone' => false,
  233.             ),
  234.             'php' => array(
  235.                 'method' => 'asidesUrlLists',
  236.                 'urls' => $this->context['view']->menu_content_tri,
  237.                 'url' => '/textes/key_action/generate_params',
  238.                 'params' => array(
  239.                     'key_action' => 'auto_key',
  240.                     'activate' => ($this->context['view']->type == "contemporains") ? true false
  241.                 )
  242.             ),
  243.             'title' => html_entity_decode('&Agrave; l\'affiche')
  244.         )]);
  245.         $asides->load(['url_lists,affiche_a_venir' => array(
  246.             'exec' => array(
  247.                 'alone' => false
  248.             ),
  249.             'php' => array(
  250.                 'method' => 'asidesUrlLists',
  251.                 'urls' => $this->context['view']->menu_content,
  252.                 'url' => '/textes/contemporains/affiche/generate_params',
  253.                 'params' => array(
  254.                     'activate' => (isset($this->context['view']->type)) ? $this->context['view']->type false,
  255.                     'key_type' => 'auto_key',
  256.                     'key_day' => $this->context['view']->days,
  257.                     'key_area' => $p_area,
  258.                 ),
  259.                 'structure' => array(
  260.                     'type' => 'key_type',
  261.                     'area' => 'key_area',
  262.                     'structure_classic' => array(
  263.                         'd' => 'key_day'
  264.                     )
  265.                 )
  266.             ),
  267.             'title' => 'Trier'
  268.         )]);
  269.         $asides->load(['url_lists,textes_a_venir' => array(
  270.             'exec' => array(
  271.                 'alone' => false
  272.             ),
  273.             'php' => array(
  274.                 'method' => 'asidesUrlLists',
  275.                 'urls' => $this->context['view']->menu_jours,
  276.                 'url' => '/textes/contemporains/affiche/generate_params',
  277.                 'params' => [
  278.                     'key_area' => $p_area,
  279.                     'key_type' => $p_type,
  280.                     'key_day' => 'auto_key',
  281.                 ],
  282.                 'structure' => [
  283.                     'area' => 'key_area',
  284.                     'type' => 'key_type',
  285.                     'structure_classic' => array(
  286.                         'd' => 'key_day'
  287.                     )
  288.                 ]
  289.             ),
  290.             'title' => 'Recherche par période'
  291.         )]);
  292.         $asides->load(['recherche_par_periode' => array(
  293.             'exec' => array(
  294.                 'alone' => false
  295.             ),
  296.             'php' => array(
  297.                 'method' => 'asidesUrlListsForms',
  298.                 'action' => '/textes/contemporains/affiche/generate_params',
  299.                 'params' => array(
  300.                     'activate' => $this->context['view']->days,
  301.                 ),
  302.                 'structure' => array(
  303.                     'area' => 'v_area',
  304.                     'structure_classic' => array(
  305.                         'type' => 'v_type',
  306.                         'idtypestructure' => 'v_idtypestructure'
  307.                     )
  308.                 )
  309.             ),
  310.         )]);
  311.         $asides->load(['par_annee' => array(
  312.             'exec' => array(
  313.                 'alone' => false
  314.             ),
  315.             'php' => array(
  316.                 'method' => 'asidesUrlListsForms',
  317.                 'action' => '/textes/contemporains/affiche/generate_params',
  318.                 'params' => array(
  319.                     'activate' => $this->context['view']->days,
  320.                 ),
  321.                 'structure' => array(
  322.                     'area' => 'v_area',
  323.                     'structure_classic' => array(
  324.                         'type' => 'v_type',
  325.                         'idtypestructure' => 'v_idtypestructure'
  326.                     )
  327.                 )
  328.             ),
  329.         )]);
  330.         $asides->load(['url_lists,tn_cdn_sn' => array(
  331.             'exec' => ['htmlend' => true],
  332.             'php' => [
  333.                 'method' => 'tn_cdn_sn',
  334.                 'url' => '/textes/contemporain/affiche/generate_params',
  335.                 'params' => array(
  336.                     'activate' => (isset($this->context['view']->idtypestructure) && !empty($this->context['view']->idtypestructure)) ? $this->context['view']->idtypestructure 'ALL',
  337.                     'get_area' => $p_area,
  338.                     'key_type' => $p_type,
  339.                     'key_day' => $this->context['view']->days
  340.                 ),
  341.                 'structure' => array(
  342.                     'area' => 'get_area',
  343.                     'type' => 'key_type',
  344.                     'structure_classic' => array(
  345.                         'd' 'key_day',
  346.                         'idtypestructure' => 'key_structure'
  347.                     )
  348.                 )
  349.             ],
  350.             'title' => 'Recherche par label'
  351.         )]);
  352.         $asides->load(['common_carte' => array(
  353.             'exec' => ['alone' => true],
  354.             'php' => array(
  355.                 'method' => 'asidesUrlLists',
  356.                 'url' => '/textes/contemporain/affiche/generate_params',
  357.                 'params' => array(
  358.                     'get_id' => 'get_id',
  359.                     'key_type' => $p_type,
  360.                     'key_day' => $this->context['view']->days
  361.                 ),
  362.                 'structure' => array(
  363.                     'area' => 'get_id',
  364.                     'type' => 'key_type',
  365.                     'structure_classic' => array(
  366.                         'd' => 'key_day'
  367.                     )
  368.                 )
  369.             )
  370.         )]);
  371.         //Chargement de la pub par région
  372.         asides::setEntityManager($this->em);
  373.         asides::loadaside('Publicite')->addWithRegion($asides, ['region' => $p_area]); //$this->area
  374.         asides::loadaside('Publicite')->addWithNational($asides); //$this->area
  375.         $asides->load(['common_participer' => array(
  376.             'php' => array(
  377.                 'method' => 'asidesUrlLists_Ajoutez'
  378.             )
  379.         )]);
  380.         $this->context['view']->aside $asides->view($this->context['view']);
  381.         return $this->view('textes/affiche.html.twig');
  382.     }
  383.     // }}}
  384.     // {{{ action_parution()
  385.     /** Vient de paraître
  386.      *
  387.      * @Route("/textes/edition/parution/", name="textes_edition_parution")
  388.      * @Route("/textes/editions/parution/", name="textes_editions_parution")
  389.      * @Route("/textes/editions/parution/genre/{genre}", name="textes_editions_parution_genre")
  390.      * @Route("/textes/editions/parution/mois/{mois}/genre/{genre}", name="textes_editions_parution_mois_genre")
  391.      *
  392.      */
  393.     public function action_parution($mois null$genre null)
  394.     {
  395.         $this->context['params']['genre'] = $genre;
  396.         $this->context['params']['mois'] = $mois;
  397.         $this->context['view']->menu_mois = array(
  398.             => array('name' => 'du mois en cours'),
  399.             => array('name' => 'des 3 derniers mois'),
  400.             => array('name' => 'des 6 derniers mois'),
  401.         );
  402.         // les genres
  403.         $genres[] = array(
  404.             'name' => 'Tous',
  405.             'code' => 'tous',
  406.         );
  407.         if($this->isGranted('IS_AUTHENTICATED_REMEMBERED') && $this->context['session']->getIdExtranetuser()) {
  408.             $genres += $this->texts->getGenretextList(null,array(0,1),true);
  409.         } else {
  410.             $genres += $this->texts->getGenretextList(null,array(1),true);
  411.             $genres[] = array(
  412.                 'name' => 'Autre',
  413.                 'code' => 'autre',
  414.             );
  415.         }
  416.         $this->context['view']->menu_genretexts $genres;
  417.         // si pas de genre précisé, on prend tous
  418.         if(isset($this->context['params']['genre']) && $this->context['params']['genre']!='tous') {
  419.             foreach($genres as $k=>$v) {
  420.                 if($this->context['params']['genre']==$v['code']) {
  421.                     $idgenretext = array($k);
  422.                     $this->context['view']->menu_genretexts[$k]['active'] = 'on';
  423.                     $this->context['view']->genre $v;
  424.                 }
  425.             }
  426.         } else {
  427.             $this->context['view']->menu_genretexts[0]['active'] = 'on';
  428.             $this->context['params']['genre'] = 'tous';
  429.         }
  430.         $this->getCommonSearch(array(
  431.             'saisons_annees' => Date_time::getListSaisons(2000,(date('Y')+1)),
  432.         ));
  433.         $this->getCommonSearchView();
  434.         // rechercher les textes
  435.         $params_sql_texts = array(
  436.             'params' => array(
  437.                 'limit' => 'all',
  438.                 'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
  439.                 'classement' => 'DESC',
  440.             ),
  441.             'special' => array(
  442.                 'avec_couverture' => true,
  443.             ),
  444.             'dbg' => array('texts_parution','Vient de paraître'),
  445.         );
  446.         if(!empty($this->context['view']->year)) { // recherche par année
  447.             $params_sql_texts['special']['year'] = $this->context['view']->year;
  448.         } elseif(!empty($this->context['view']->datestart) && !empty($this->context['view']->dateend)) { // par période
  449.             $params_sql_texts['special']['periode'] = array(
  450.                 'datestart' => substr($this->context['view']->datestart0, -2).'00',
  451.                 'dateend' => substr($this->context['view']->dateend0, -2).'00',
  452.             );
  453.         } else { // prochains jours
  454.             // si pas de jour précisé, on prend un mois
  455.             if(!isset($this->context['params']['mois']) || empty($this->context['view']->menu_mois[$this->context['params']['mois']])) {
  456.                 $this->context['params']['mois'] = 3;
  457.             }
  458.             $this->context['view']->menu_mois[$this->context['params']['mois']]['active'] = 'on';
  459.             $this->context['view']->mois $this->context['view']->menu_mois[$this->context['params']['mois']]['name'];
  460.             $params_sql_texts['special']['periode'] = Date_time::getPeriod(array('months_ago' => $this->context['params']['mois']),'Y-m-00');
  461.         }
  462.         if(!empty($idgenretext)) {
  463.             // dans le cas du genre autre
  464.             if($this->context['params']['genre']==='autre') {
  465.                 $exclude_genre = array('theatre','theatre_jeune_public');
  466.                 $idgenretext = array();
  467.                 foreach($this->texts->getGenretextList(null,array(0,1),true) as $k=>$v) {
  468.                     if(!in_array($v['code'], $exclude_genre)) {
  469.                         $idgenretext[$k] = $k;
  470.                     }
  471.                 }
  472.             }
  473.             $params_sql_texts['special']['genretext'] = $idgenretext;
  474.         }
  475.         $this->context['view']->nb_texts_total $this->texts->countListTexts($params_sql_texts);
  476.         $params_sql_texts['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  477.         $list_texts $this->texts->getListTexts($params_sql_texts, array(
  478.             'stylemore' => array('imagep' => 'width:75px;''desctxt' => 'width:190px;'),
  479.             'publisher_first_inverse' => true
  480.         ));
  481.         foreach($list_texts as $k=>$v) {
  482.             $list_texts[$k]['publisher_first'] = true;
  483.             foreach($v['publisher'] as $publisher) {
  484.                 $list_texts[$k]['publisher'] = $publisher;
  485.             }
  486.         }
  487.         $this->context['view']->texts $list_texts;
  488.         $this->context['view']->pagination $this->getPagination($this->context['view']->nb_texts_total);
  489.         // situation et titre meta
  490.         $this->view->locate = array(
  491.             '/editions/' => 'Textes',
  492.             => 'Vient de paraître',
  493.         );
  494.         $this->context['view']->js_more[] = 'jquery.masonry.min.js';
  495.         // jajascript
  496.         $this->context['view']->jquery_flash true;
  497.         $this->context['view']->js_more[] = 'jquery.masonry.min.js';
  498.         $this->context['view']->jquery_cal 'datepicker';
  499.         $this->context['view']->use_addthis true;
  500.         $asides = new asides();
  501.         $asides->load(['recherche_par_genre' => array(
  502.             'exec' => array(
  503.                 'htmlstart' => true),
  504.             'title' => html_entity_decode('&Agrave; l\'affiche'),
  505.             'subtitle' => html_entity_decode('Par genre')
  506.         )]);
  507.         $asides->load(['url_lists,textes_a_venir' => array(
  508.             'exec' => array(
  509.                 'alone' => false
  510.             ),
  511.             'php' => array(
  512.                 'method' => 'asidesUrlLists',
  513.                 'urls' => $this->context['view']->menu_mois,
  514.                 'url' => '/textes/editions/parution/mois/key_month/genre/key_genre',
  515.                 'params' => array(
  516.                     'key_month' => 'auto_key',
  517.                     'key_genre' => $this->context['params']['genre']
  518.                 )
  519.             ),
  520.             'title' => html_entity_decode('Parutions')
  521.         )]);
  522.         $asides->load(['par_annee' => array(
  523.             'exec' => array(
  524.                 'alone' => false
  525.             )
  526.         )]);
  527.         $asides->load(['recherche_par_periode' => array(
  528.             'exec' => array(
  529.                 'htmlend' => true
  530.             ),
  531.             'action' => '/textes/editions/parution/genre/'.$this->context['params']['genre'],
  532.         )]);
  533.         $this->context['view']->aside $asides->view($this->view);
  534.         return $this->view('textes/parution.html.twig');
  535.     }
  536.     // }}}
  537.     // {{{ action_auteurs()
  538.     /** Textes par l'auteur
  539.      *
  540.      * @Route("/textes/edition/auteurs", name="textes_auteurs")
  541.      *
  542.      */
  543.     public function action_auteurs()
  544.     {
  545.         $this->view->action $this->context['action'] = 'auteurs';
  546.         $this->getCommonAuteurs();
  547.         $playlists $this->em->getRepository(Playlists::class);
  548.         $persons $this->em->getRepository(Persons::class);
  549.         // récupèrter les auteurs
  550.         $this->context['view']->persons $playlists->getAuthors();
  551.         $idclassifications = array(144);
  552.         // trouver les auteurs
  553.         $params_sql_persons = array(
  554.             'fields' => array('idperson'),
  555.             'special' => array(
  556.                 'idclassifications' => $idclassifications,
  557.                 'persons' => array(
  558.                     'group' => array('persons' => 'idperson')
  559.                 )
  560.             ),
  561.             'count_disctint_by' => array('persons' => 'idperson'),
  562.             'dbg' => array('persons_playlists','Auteurs des playlist par l\'auteur'),
  563.         );
  564.         if(!empty($_GET['auteur'])) {
  565.             $url_clean_person filter_var($_GET['auteur'], FILTER_SANITIZE_STRING);
  566.             $idperson $persons->getIdByUrl($url_clean_person);
  567.             if(!empty($idperson)) {
  568.                 $this->context['view']->person $persons->getInfosPerson($idperson);
  569.                 $params_sql_persons['special']['persons']['idperson'] = $idperson;
  570.             }
  571.         }
  572.         $this->context['view']->nb_persons_total $playlists->countListPlaylists($params_sql_persons);
  573. //        $params_sql_persons['limit'] = array($this->getLimitStart(),$this->perPage);
  574.         $params_sql_persons['limit'] = array($this->getLimitStart(), 1000);
  575.         $results $playlists->getListPlaylists($params_sql_persons);
  576.         foreach($results as $k=>$v) {
  577.             $idpersons[$v['idperson']] = $v['idperson'];
  578.         }
  579.         // trouver les playlists
  580.         if(!empty($idpersons)) {
  581.             $params_sql_playlists = array(
  582.                 'special' => array(
  583.                     'idclassifications' => $idclassifications,
  584.                     'idpersons' => $idpersons,
  585.                 ),
  586.                 'limit' => array(0,1000),
  587.                 'dbg' => array('texts_playlists','Playlists le texte par l\'auteur'),
  588.             );
  589.             $list $playlists->getListPlaylists($params_sql_playlists);
  590.             if(!empty($list)) {
  591.                 foreach($list as $playlist) {
  592.                     if(!empty($playlist['idperson'])) {
  593.                         foreach($playlist['idperson'] as $idperson=>$author) {
  594.                             if(empty($authors[$author['idperson']])) {
  595.                                 $authors[$author['idperson']] = $author;
  596.                                 $thumbnail $persons->getVignettePerson($author['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
  597.                                 if(strpos($thumbnail'normal-def')===false) {
  598.                                     $authors[$author['idperson']]['photo'] = $thumbnail;
  599.                                 }
  600.                             }
  601.                         }
  602.                         foreach($playlist['idtext'] as $idtext=>$text) {
  603.                             $authors[$author['idperson']]['texts'][$idtext] = $text;
  604.                             $authors[$author['idperson']]['texts'][$idtext]['url_clean_playlist'] = $playlist['urlClean'];
  605.                         }
  606.                         if (isset($authors[$author['idperson']]['texts'])) {
  607.                         if(count($authors[$author['idperson']]['texts'])>4) {
  608.                             $authors[$author['idperson']]['is_list'] = true;
  609.                         }
  610.                         }
  611.                     }
  612.                 }
  613.             }
  614.             if(!empty($authors)) {
  615.                 $this->context['view']->authors $authors;
  616.             }
  617.         }
  618. //        $this->context['view']->pagination = $this->getPagination($this->context['view']->nb_persons_total);
  619.         $this->context['view']->is_auteurs_spectacles true;
  620.         $asides_top = new asides();
  621.         $asides_top->load(['aside_top' => array(
  622.             'php' => array(
  623.                 'method' => 'asidesUrlListMenuVideos',
  624.             )
  625.         )
  626.         ]);
  627.         $this->context['view']->aside_top $asides_top->view($this->context['view']);
  628.         $nav_texte_parauteurs = array(
  629.             array(
  630.                 'name' => 'Les textes à l\'affiche',
  631.                 'key_action' => 'auteurs-spectacles'
  632.             ),
  633.             array(
  634.                 'name' => 'Tous les textes par leurs auteurs',
  635.                 'key_action' => 'auteurs'
  636.             ),
  637.         );
  638.         $asides = new asides();
  639.         $asides->load(['url_lists' => array(
  640.             'exec' => array(
  641.                 'htmlstart' => true
  642.             ),
  643.             'php' => array(
  644.                 'method' => 'asidesUrlLists',
  645.                 'urls' => $nav_texte_parauteurs,
  646.                 'url' => '/textes/edition/key_action',
  647.                 'params' => array(
  648.                     'activate' =>  'auteurs'
  649.                 )
  650.             ),
  651.             'title' => 'Voir'
  652.         )]);
  653.         $asides->load(['textes_select_auteurs' => array(
  654.             'exec' => array(
  655.                 'htmlend' => true
  656.             ),
  657.             'title' => 'Sélectionnez un auteur'
  658.         )]);
  659.         $asides->load('textes_auteurs_infosplus');
  660.         $this->context['view']->aside $asides->view($this->context['view']);
  661.         return $this->view('textes/auteurs.html.twig');
  662.     }
  663.     // }}}
  664.     // {{{ action_auteurs_spectacles()
  665.     /**
  666.      * Textes par l'auteur à l'affiche
  667.      *
  668.      * @Route("/textes/{p_obsolete_value}/auteurs-spectacles", name="textes_auteurs_spectacles")
  669.      * @Route("/textes/{p_obsolete_value}/auteurs-spectacles/area/{p_area}", name="textes_auteurs_spectacles_area")
  670.      * @Route("/textes/{p_obsolete_value}/auteurs-spectacles/periode/{params_periode}", name="textes_auteurs_spectacles_periode")
  671.      *
  672.      */
  673.     public function action_auteurs_spectacles($p_obsolete_value null$p_area null$params_periode null)
  674.     {
  675.         $this->context['params']['periode'] = $params_periode;
  676.         $this->context['params']['area'] = $p_area;
  677.         $this->view->action $this->context['action'] = 'auteurs-spectacles';
  678.         $this->getTextByAuteurs([
  679.             'idclassifications' => [
  680.                 144//par l'auteur
  681.                 178 //par le traducteur
  682.             ]
  683.         ]);
  684.         $this->context['view']->is_auteurs_spectacles true;
  685.         $asides_top = new asides();
  686.         $asides_top->load(['aside_top' => array(
  687.             'php' => array(
  688.                 'method' => 'asidesUrlListMenuVideos',
  689.             )
  690.         )
  691.         ]);
  692.         $this->context['view']->aside_top $asides_top->view($this->context['view']);
  693.         if(isset($this->context['view']->area)){
  694.             $asides_top = new asides();
  695.             $asides_top->load(['aside_top' => array(
  696.                 'php' => array(
  697.                     'method' => 'asidesUrlRegions',
  698.                 )
  699.             )
  700.             ]);
  701.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  702.         }
  703.         $asides = new asides();
  704.         $asides->load(['url_lists' => array(
  705.             'exec' => array(
  706.                 'htmlstart' => true,
  707.                 'color' => 'videos'
  708.             ),
  709.             'php' => array(
  710.                 'method' => 'asidesUrlLists',
  711.                 'urls' => $this->context['view']->menu_content,
  712.                 'url' => '/textes/edition/key_action/generate_params',
  713.                 'params' => array(
  714.                     'activate' =>  'auteurs-spectacles',
  715.                     'key_action' => 'auto_key',
  716.                     'key_day' => $this->context['view']->days
  717.                 ),
  718.                 'structure' => array(
  719.                     'area' => (!empty($this->context['view']->area)) ? $this->context['view']->area '',
  720.                     'structure_classic' => array(
  721.                         'day' => 'key_day'
  722.                     )
  723.                 )
  724.             ),
  725.             'title' => 'Voir'
  726.         )]);
  727.         $asides->load(['url_lists,navigation_textes_avenir' => array(
  728.             'exec' => array(
  729.                 'htmlend' => true
  730.             ),
  731.             'php' => array(
  732.                 'method' => 'asidesUrlLists',
  733.                 'urls' => $this->context['view']->menu_jours,
  734.                 'url' => '/textes/edition/auteurs-spectacles/generate_params',
  735.                 'params' => array(
  736.                     'activate' => $this->context['view']->days,
  737.                 ),
  738.                 'structure' => array(
  739.                     'area' => (!empty($this->context['view']->area)) ? $this->context['view']->area '',
  740.                     'structure_classic' => array(
  741.                         'd' => 'key_day'
  742.                     )
  743.                 )
  744.             ),
  745.             'subtitle' => 'Recherche par période',
  746.         )]);
  747.         // $asides->load(['recherche_par_periode' => array(
  748.         //         'exec' => array(
  749.         //             'alone' => false
  750.         //         ),
  751.         //         'action' => '/textes/edition/auteurs-spectacles/periode/'
  752.         // )]);
  753.         //
  754.         // $asides->load(['par_saison' => array(
  755.         //     'exec' => array(
  756.         //         'htmlend' => true
  757.         //     ),
  758.         //     'action' => '/textes/edition/auteurs-spectacles/area/{v_area}?',
  759.         // )]);
  760.         $asides->load(['common_carte' => array(
  761.             'exec' => ['color' => 'videos'],
  762.             'url' => '/textes/edition/auteurs-spectacles/area/get_id?d=365'
  763.         )]);
  764.         $menu = array(
  765.             array(
  766.                 'name' => 'Mes videos favorites',
  767.                 'key_sub' => 'videos',
  768.             ),
  769.             array(
  770.                 'name' => 'Mes videos modifiables',
  771.                 'key_sub' => 'mesvideos',
  772.             ),
  773.         );
  774.         $asides->load(['url_lists_alone' => array(
  775.             'exec' => ['color' => 'index'],
  776.             'php' => [
  777.                 'method' => 'asidesUrlLists',
  778.                 'urls' => $menu,
  779.                 'url' => '/montheatre/key_sub'
  780.             ],
  781.             'title' => 'Mon théâtre'
  782.         )]);
  783.         $this->context['view']->aside $asides->view($this->context['view']);
  784.         //On affiche la publicité google
  785.         $asides_publicite = new asides();
  786.         asides::setEntityManager($this->em);
  787.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  788.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  789.         // situation et titre meta
  790.         $this->view->locate = array(
  791.             '/editions/' => 'Textes',
  792.             => 'Le texte par leurs auteurs - À l\'affiche',
  793.         );
  794.         $this->view->title_page 'Le texte par leurs auteurs - À l\'affiche';
  795.         return $this->view('textes/auteurs-spectacles.html.twig');
  796.     }
  797.     // }}}
  798.     // {{{ action_recherche()
  799.     /** Textes recherche
  800.      *
  801.      * @Route("/textes/contemporain/recherche", name="textes_contemporain_recherche")
  802.      *
  803.      */
  804.     public function action_recherche(Request $request)
  805.     {
  806.         $this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder(''FormType::class);
  807.         // formulaire de saisie recherche par titre
  808.         $this->context['formAsideSearch']->add('title'TextType::class, [
  809.             'label' => 'Mots du titre',
  810.             'attr' => [
  811.                 'size' => '35',
  812.                 'placeholder' =>'Rechercher un texte'
  813.             ]
  814.         ]);
  815.         $this->context['formAsideSearch']->add('search'SubmitType::class, [
  816.             'label' => 'OK',
  817.             'attr' => [
  818.                 'class'=>'boutform'
  819.             ]
  820.         ]);
  821.         $this->getCommonSearchView($request);
  822.         if($this->context['formAsideSearch']->isSubmitted() || isset($_GET['start'])) {
  823.             $title $this->context['formAsideSearch']->get('title')->getData();
  824.             if(empty($title) && isset($_GET['title'])) {
  825.                 $title $_GET['title'];
  826.             }
  827.             // objet texts
  828.             $texts $this->em->getRepository(Texts::class);
  829.             $sql_count 'SELECT COUNT(DISTINCT(t.idtext)';
  830.             $sql_normal 'SELECT st.idtext, t.textorder, t.title, t.url_clean, t.type, c.url_clean as url_clean_publisher, c.organisation ';
  831.             $sql null;
  832.             if(!empty($title)) {
  833.                 //$title = trim(htmlspecialchars($title, ENT_COMPAT));
  834.                 $sql_normal .= ', MATCH(st.title) AGAINST (\''.$texts->escape($title).'\') AS cpt';
  835.                 $sql_count .= ', MATCH(st.title) AGAINST (\''.$texts->escape($title).'\')';
  836.             }
  837.             $sql_count .= ') as total ';
  838.             // from
  839.             $sql .= ' FROM searchs_texts st, texts t
  840.                         LEFT JOIN contacts c ON c.idcontact=t.idcontact_publisher';
  841.             // conditions
  842.             $sql .= ' WHERE t.idtext=st.idtext AND t.textfictif=0';
  843.             if (!empty($title)) {
  844.                 // on match directement
  845.                 $sql .= ' AND (MATCH(st.title) AGAINST (\''.$texts->escape($title).'\' IN BOOLEAN MODE))';
  846.             }
  847.             $this->view->title $title;
  848.             // nb resultat par page
  849.             $pagerOptions['perPage'] = 20;
  850.             // nombre d'enregistrement
  851.             $totalItems $texts->queryOne($sql_count.$sql);
  852.             //echo $sql_count.$sql;
  853.             if(!empty($totalItems) && $totalItems>0) {
  854.                 //La pagination
  855.                 $urlpagination = new asidesUrlPagination(
  856.                     '',
  857.                     array(
  858.                         'title' => $title
  859.                     ),
  860.                     $this->context
  861.                 );
  862.                 $pagination_url_custom $urlpagination->url_pagination();
  863.                 $this->context['view']->pagination $this->getPagination($totalItems10, array('url_custom' => $pagination_url_custom));
  864.                 $this->context['view']->pagination['totalItems'] = $totalItems;
  865.                 $this->context['view']->pagination['textes'] = true;
  866.                 // ajout des criteres de tri apres avoir fait le count
  867.                 if(isset($tri)) {
  868.                     $sql .= $tri;
  869.                 }
  870.                 //limite
  871.                 $limit $texts->dbLimit($this->perPage$this->getLimitStart());
  872.                 // executer la requete et mettre en forme chaque reponse
  873.                 $texts->query($sql_normal.$sql.$limit);
  874.                 $format $format_flou = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
  875.                 $format_flou['blur'] = true;
  876.                 while($data $texts->fetch()) {
  877.                     $texts->loadResult($texts);
  878.                     $idtext $texts->idtext;
  879.                     $liste_texts[$idtext] = $texts->getInfosTextRow();
  880.                     $liste_texts[$idtext]['publisher_first'] = true;
  881.                     $liste_texts[$idtext]['vignette'] = $texts->getVignetteText($idtext,$format);
  882.                     $liste_texts[$idtext]['vignette_flou'] = $texts->getVignetteText($idtext,$format_flou);
  883.                 }
  884.                 if(!empty($liste_texts)){
  885.                     $this->view->liste_texts $liste_texts;
  886.                 }
  887.             }
  888.         }
  889.         $asides = new asides();
  890.         $asides->load(['recherche_texte.inc' => array(
  891.             'exec' => ['htmlstart' => true'htmlend' => true'color'=>'context'],
  892.             'action' => '/textes/contemporain/recherche',
  893.             'title' => 'Recherche'
  894.         )]);
  895.         $asides->load(['common_carte' => array(
  896.             'exec' => ['alone' => true],
  897.             'php' => array(
  898.                 'method' => 'asidesUrlLists',
  899.                 'url' => '/textes/contemporain/affiche/generate_params',
  900.                 'params' => array(
  901.                     'get_id' => 'get_id',
  902.                 ),
  903.                 'structure' => array(
  904.                     'area' => 'get_id'
  905.                 )
  906.             )
  907.         )]);
  908.         $this->context['view']->aside $asides->view();
  909.         // Fil d'ariane
  910.         $this->view->locate = [
  911.             '/editions' => 'Textes',
  912.             => 'Rechercher des textes'
  913.         ];
  914.         return $this->view('textes/recherche.html.twig');
  915.     }
  916.     // }}}
  917.     // {{{ action_ajout_aides()
  918.     /** Ajout aides
  919.      *
  920.      * @Route("/textes/aides/ajout-aides/type/{p_type}", name="textes_aides_ajout_aide")
  921.      *
  922.      */
  923.     public function action_ajout_aides($p_type nullRequest $request)
  924.     {
  925.         $this->context['params']['type'] = $p_type;
  926.         $params = [
  927.             'selections' => [
  928.                 'url' => 'selections-etape',
  929.                 'label' => 'une sélection'
  930.             ],
  931.             'soutiens' => [
  932.                 'url' => 'aides-etape',
  933.                 'label' => 'un soutien'
  934.             ]
  935.         ];
  936.         $type null;
  937.         if(!empty($this->context['params']['type'])){
  938.             $type $this->context['params']['type'];
  939.         }
  940.         if(!array_key_exists($type$params)){
  941.             return $this->redirectToRoute('index');
  942.         }
  943.         $this->context['view']->params_url $type;
  944.         $this->context['view']->params_label $params[$type]['label'];
  945.         $formFactory $this->get('form.factory')->createBuilder(FormType::class, null, [
  946.             'attr' => [
  947.                 'id' => 'masterform'
  948.             ]
  949.         ]);
  950.         $formFactory->add('idtext',RelationsType::class, [
  951.             'label' => 'Choisissez une structure',
  952.             'relat'=>'simple',
  953.             'type_object' => 'form',
  954.             'type_dbdo'=>'texts',
  955.             'type' => 'idtext',
  956.             'constraints' => [
  957.                 new Relations(['message' => 'Texte : veuillez choisir un texte'])
  958.             ]
  959.         ]);
  960.         $formFactory->add('validation'SubmitType::class, [
  961.             'label' => 'Continuer',
  962.             'attr' => [
  963.                 'class'=>'boutform boutbig'
  964.             ]
  965.         ]);
  966.         $form $formFactory->getForm();
  967.         $form->handleRequest($request);
  968.         if($form->isSubmitted() && $form->isValid())
  969.         {
  970.             // filtrer
  971. //            $this->context['form']->applyFilter('__ALL__', 'strip_and_trim');
  972.             // id de contact ?
  973.             $idtext $form->get('idtext')->getViewData();
  974.             if(!empty($idtext)) {
  975.                 $infos_text$this->em->getRepository(Texts::class)->getInfosText($idtext);
  976.                 // direction le contact
  977.                 if(!empty($infos_text['url_clean'])) {
  978.                     return $this->redirect('/textes/'.$infos_text['url_clean'].'/'.$params[$type]['url']);
  979.                 } else {
  980.                     $this->context['error']['contact_inconnu'] = 'Impossible de trouver le texte';
  981.                 }
  982.             } else {
  983.                 $this->context['error']['contact_inconnu'] = 'Impossible de trouver le texte';
  984.             }
  985.         }
  986.         $asides = new asides();
  987.         $asides->load('common_participer_contacts');
  988.         $this->context['view']->aside $asides->view();
  989.         $this->view->js_more = array(
  990.             'ajax.relation.js',
  991.         );
  992.         return $this->view('textes/ajout-aides.html.twig', [
  993.             'form' => $form->createView()
  994.         ]);
  995.     }
  996.     // }}}
  997.     // {{{ action_xml_affiche()
  998.     /** Cartes de France
  999.      *
  1000.      */
  1001.     public function action_xml_affiche()
  1002.     {
  1003.         // regions
  1004.         $regions $this->em->getRepository('TheatreCore\Entity\\'.ucfirst($this->getCarteVersion()));
  1005.         $regions_list = ($regions->getArea(false,false,false));
  1006.         // affiche la région en surbrillance
  1007.         if(!empty($this->context['params']['area']) &&
  1008.             ($this->func->my_is_int($this->context['params']['area']) || strlen($this->context['params']['area'])==2)) {
  1009.             $this->context['view']->area_view 'area/'.$this->context['params']['area'].'/';
  1010.             $this->context['view']->area $this->context['params']['area'];
  1011.         } else {
  1012.             $this->context['view']->area_view '';
  1013.             $this->context['view']->area null;
  1014.         }
  1015.         if(!empty($this->context['params']['type'])) {
  1016.             $this->context['view']->page 'affiche/type/'.$this->context['params']['type'];
  1017.         } else {
  1018.             $this->context['view']->page 'affiche';
  1019.         }
  1020.         foreach(array('s','y','datestart','dateend','d') as $f) {
  1021.             if(!empty($_GET[$f])) {
  1022.                 $this->context['view']->$f $_GET[$f];
  1023.             }
  1024.         }
  1025.         // classement en fonction du xml
  1026.         foreach($regions->getXmlClassement() as $k=>$v) {
  1027.             $regions_final[$k] = array(
  1028.                 'id' => $v,
  1029.                 'name' => $regions_list[$v],
  1030.             );
  1031.             if(!empty($this->context['view']->area) && $v==$this->context['view']->area) {
  1032.                 $regions_final[$k]['selected'] = 1;
  1033.             } else {
  1034.                 $regions_final[$k]['selected'] = 0;
  1035.             }
  1036.         }
  1037.         foreach(array('BE','CH','LU') as $k=>$v) {
  1038.             if(!empty($this->context['view']->area) && $v==$this->context['view']->area) {
  1039.                 $this->context['view']->{'selected_'.$v} = 1;
  1040.             } else {
  1041.                 $this->context['view']->{'selected_'.$v} = 0;
  1042.             }
  1043.         }
  1044.         $this->context['view']->regions $regions_final;
  1045.     }
  1046.     // }}}
  1047.     // {{{ action_xml_auteurs_spectacles()
  1048.     /** Cartes de France pour auteurs-spectacles
  1049.      *
  1050.      */
  1051.     public function action_xml_auteurs_spectacles() { $this->getCommonXmlCarte('auteurs-spectacles'); }
  1052.     // }}}
  1053.     // {{{ getCommonAuteurs()
  1054.     /** menu générique pour texte par l'auteur
  1055.      *
  1056.      */
  1057.     public function getCommonAuteurs()
  1058.     {
  1059.         if(isset($this->context['params']['area']) && $this->context['action'] == 'auteurs-spectacles'){
  1060.             $this->context['view']->menu_content = array(
  1061.                 'spectacles-region-videos' => array(
  1062.                     'name' => 'Spectacles avec vidéos',
  1063.                     'label' => 'Spectacle avec vidéos',
  1064.                     'url' => '/spectacles/theatre/region-videos/generate_params'
  1065.                 ),
  1066.                 'auteurs-spectacles' => array(
  1067.                     'name' => 'Les textes par leurs auteurs',
  1068.                     'label' => 'Les textes par leurs auteurs'
  1069.                 ),
  1070.             );
  1071.         }
  1072.         else{
  1073.             $this->context['view']->menu_content = array(
  1074.                 'auteurs' => array('name' => 'Tous les textes''label' => 'tous'),
  1075.                 'auteurs-spectacles' => array('name' => 'À l\'affiche''label' => 'à l\'affiche'),
  1076.             );
  1077.         }
  1078.         $this->context['view']->menu_content[$this->context['action']]['active'] = 'on';
  1079.     }
  1080.     // }}}
  1081.     // {{{ getTextByAuteurs()
  1082.     /** menu générique pour texte par l'auteur
  1083.      *
  1084.      */
  1085.     public function getTextByAuteurs($params = array())
  1086.     {
  1087.         $default_days 365;
  1088.         $this->context['view']->menu_jours = array(
  1089.             => array('name' => '3 prochains jours''key_day' => 3),
  1090.             => array('name' => '7 prochains jours''key_day' => 7),
  1091.             30 => array('name' => '30 prochains jours''key_day' => 30),
  1092.             90 => array('name' => '3 prochains mois''key_day' => 90),
  1093.             365 => array('name' => '12 prochains mois''key_day' => 365),
  1094.         );
  1095.         $limit_query = array($this->getLimitStart(),$this->perPage);
  1096.         if(!empty($params['limit_query'])){
  1097.             $limit_query $params['limit_query'];
  1098.         }
  1099.         $spectacles $this->em->getRepository(Spectacles::class);
  1100.         $idclassifications = array(144);
  1101.         if(!empty($params['idclassifications'])){
  1102.             $idclassifications $params['idclassifications'];
  1103.         }
  1104.         $this->context['view']->menu_periodes = array(
  1105.             'all' => array(
  1106.                 'name' => 'Tous à l\'affiche',
  1107.             ),
  1108.             'affiche' => array(
  1109.                 'name' => 'À venir',
  1110.                 'is_simple' => true,
  1111.             )
  1112.         );
  1113.         // tous les spectacles ou ceux à l'affiche
  1114.         if(!empty($this->context['params']['periode']) && !empty($this->context['view']->menu_periodes[$this->context['params']['periode']])) {
  1115.             $this->context['view']->periode_spectacle $this->context['params']['periode'];
  1116.         } else {
  1117.             $this->context['view']->periode_spectacle 'affiche';
  1118.         }
  1119.         $this->context['view']->{'periode_'.$this->context['view']->periode_spectacle} = true;
  1120.         $this->context['view']->zone_carte true;
  1121.         $this->getCommonSearch(array(
  1122.             'saisons_annees' => $this->getListSeasonsYears($this->em->getRepository(Playlists::class)->getSpectaclesAnneesSaisons($idclassifications)),
  1123.             'nb_days' => $default_days,
  1124.         ));
  1125.         $this->getCommonAuteurs();
  1126.         // les spectacles à l'affiche avec des textes nonfictif
  1127.         //$params_sql = $this->setCommonSearchSpectacles(array(
  1128.         $params_sql_spectacles $this->setCommonSearchSpectacles(array(
  1129.             'params' => array(
  1130.                 'limit' => 'all',
  1131.             ),
  1132.             'special' => array(
  1133.                 'playlists' => array(
  1134.                     'text' => true,
  1135.                     'idclassifications' => $idclassifications// par l'auteur
  1136.                 ),
  1137.                 'textfictif' => 0,
  1138.                 'plus_proche' => true,
  1139.             ),
  1140.             'dbg' => array('spectacles_auteurs_affiche','Texte par l\'auteur à l\'affiche'),
  1141.         ));
  1142.         if($this->context['view']->periode_spectacle=='affiche') {
  1143.             unset($params_sql_spectacles['special']['saison']);
  1144.             $params_sql_spectacles['special']['prochains'] = $this->context['view']->days;
  1145.             unset($params_sql_spectacles['special']['plus_proche']);
  1146.         }
  1147.         //on recherche les dates dans la zone de la région
  1148.         if(!empty($this->context['params']['area'])){
  1149.             $params_sql_spectacles['special']['get_schedule_ville'] = $this->context['params']['area'];
  1150.         }
  1151.         $this->context['view']->nb_spectacles_total $this->spectacles->countListSpectacles($params_sql_spectacles);
  1152.         $list_spectacles $spectacles->getListSpectacles($params_sql_spectacles);
  1153.         //$this->context['view']->spectacles = $list_spectacles;
  1154.         $params_list_texts['limit'] = $limit_query;
  1155.         $this->context['view']->texts $this->texts->getTextsFromSpectacles($list_spectacles$params_list_texts);
  1156.         // on doit trouver la playlist le texte par l'auteur
  1157.         if(isset($this->context['view']->texts)) {
  1158.             foreach ($this->context['view']->texts as $k => $v) {
  1159.                 // voir s'il y a des contenus le texte par l'auteur
  1160.                 if ($this->em->getRepository(Playlists::class)->countPlaylists('texts'$v['idtext'], ['class_texte_parauteur''class_texte_par_traducteur']) > 0) {
  1161.                     $playlist $this->em->getRepository(Playlists::class)->getByClassification('texts'$v['idtext'], ['class_texte_parauteur''class_texte_par_traducteur']);
  1162.                     $this->context['view']->texts[$k]['url_clean_more'] = 'playlist/id/' $playlist['urlClean'];
  1163.                     $playlists $this->em->getRepository(Playlists::class);
  1164.                     $sql 'SELECT DISTINCT p.idplaylist
  1165.                           FROM playlists p
  1166.                           LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
  1167.                           WHERE pc.idclassification IN ('.implode(','$idclassifications).') AND p.idtext = '.$v['idtext'].'
  1168.                           GROUP BY p.idtext';
  1169.                     $x $playlists->queryOne($sql);
  1170.                     $pl $playlists->getInfosPlaylist(
  1171.                         $x,
  1172.                         array(
  1173.                             'all' => true,
  1174.                             'multimedias' => true,
  1175.                             'format_vignette' => array('width'=>325,'height'=>162,'fleche'=>'none''ratio' => '169'//'direction'=>'crop'
  1176.                         ),
  1177.                         array('format_vignette' => true)
  1178.                     );
  1179.                     $video = (array_shift($pl['multimedias']));
  1180.                     $this->context['view']->texts[$k]['playlist']['vignette'] = $video['vignette'];
  1181.                     $this->context['view']->texts[$k]['playlist']['vignette_flou'] = $video['vignette_flou'];
  1182.                     $this->context['view']->texts[$k]['playlist']['thtv'] = true;
  1183.                     $this->context['view']->texts[$k]['playlist']['thtv_permalink'] = $video['permalink'];
  1184.                     $this->context['view']->texts[$k]['playlist']['url_clean_video'] = $playlist['urlClean'];
  1185.                     $this->context['view']->texts[$k]['playlist']['idperson'] = $playlist['idperson'];
  1186.                 }
  1187.             }
  1188.         }
  1189.         $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total);
  1190.         $this->context['view']->pagination['texte'] = true;
  1191.     }
  1192.     // }}}
  1193. }