src/Controller/EditionController.php line 1152

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\ClassTheatre\asides;
  4. use App\ClassTheatre\TheatreController;
  5. use App\Exception\RedirectException;
  6. use App\Service\Date_time;
  7. use App\Service\EditUtils;
  8. use App\Service\Functions;
  9. use App\Service\TheatreMail\TheatreMail;
  10. use App\Service\UploadUtils;
  11. use App\Service\wiki2xhtml\wiki2xhtml;
  12. use App\Validator\CheckWebsite;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use League\HTMLToMarkdown\HtmlConverter;
  15. use Psr\Log\LoggerInterface;
  16. use Symfony\Component\Cache\Adapter\AdapterInterface;
  17. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  18. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  19. use Symfony\Component\Form\Extension\Core\Type\FormType;
  20. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  21. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  22. use Symfony\Component\Form\Extension\Core\Type\TextType;
  23. use Symfony\Component\HttpFoundation\RedirectResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. use Symfony\Component\Validator\Constraints\Email;
  29. use Symfony\Component\Validator\Constraints\NotBlank;
  30. use Symfony\Component\Validator\Constraints\Url;
  31. use TheatreCore\Classes\UtilsEdit;
  32. use TheatreCore\Entity\Aidecontacts;
  33. use TheatreCore\Entity\Aides;
  34. use TheatreCore\Entity\Bigregions;
  35. use TheatreCore\Entity\Classifications;
  36. use TheatreCore\Entity\Contacts;
  37. use TheatreCore\Entity\Contents;
  38. use TheatreCore\Entity\Extranetusers;
  39. use TheatreCore\Entity\Files;
  40. use TheatreCore\Entity\Multimedias;
  41. use TheatreCore\Entity\News;
  42. use TheatreCore\Entity\Persons;
  43. use TheatreCore\Entity\Playlists;
  44. use TheatreCore\Entity\Spectacles;
  45. use TheatreCore\Entity\Texts;
  46. use TheatreCore\Entity\Typesstructures;
  47. use TheatreCore\Form\Type\RelationsType;
  48. class EditionController extends TheatreController
  49. {
  50.     // id du contact
  51.     protected $idcontact;
  52.     // l'objet spectacle
  53.     protected $spectacles;
  54.     // l'objet texts
  55.     protected $texts;
  56.     // l'objet contacts
  57.     protected $contacts;
  58.     // données du contact
  59.     protected $infos;
  60.     // résultat par page
  61.     protected $perPage 30;
  62.     // aside
  63.     protected $asides "";
  64.     // titre de la page
  65.     protected $title_page null;
  66.     protected $extra_title '';
  67.     protected $extra_locate '';
  68.     protected $locate = array();
  69.     private ?LoggerInterface $logger null;
  70.     private ?AdapterInterface $cache null;
  71.     // {{{ _construct()
  72.     /** constructeur hérité
  73.      *
  74.      */
  75.     public function __construct(
  76.         EntityManagerInterface $em,
  77.         TranslatorInterface $translator,
  78.         TokenStorageInterface $tokenStorage,
  79.         Functions $func,
  80.         LoggerInterface $logger,
  81.         AdapterInterface $cache
  82.     )
  83.     {
  84.         // surbrillance du menu principal (thnet)
  85.         $GLOBALS['rub_courante'] = 'editions';
  86.         parent::__construct($translator$tokenStorage);
  87.         $this->em $em;
  88.         $this->asides = new asides();
  89.         $this->func $func;
  90.         $this->spectacles $em->getRepository(Spectacles::class);
  91.         $this->contacts $em->getRepository(Contacts::class);
  92.         //20 éléments maximum par page
  93.         $this->perPage 20;
  94.         $this->logger $logger;
  95.         $this->cache $cache;
  96.     }
  97.     public function InitController($slug null$action null)
  98.     {
  99.         $this->view->action $this->context['action'] = $action;
  100.         $this->RouterOptions($slug$action$GLOBALS['rub_courante']);
  101.         $this->view->controller $GLOBALS['rub_courante'];
  102.         $this->context['view']->main_custom_style "contacts";
  103.         $params['idcontact'] = $this->idcontact $this->id;
  104.         if(empty($params['idcontact'])){
  105.             throw new RedirectException('/editions/');
  106.         }
  107.         //Position
  108.         $this->locate['/editions/'] = 'editeurs';
  109.         $this->asides = new asides();
  110.         // on récupére l'enregistrement
  111.         $this->infos $this->contacts->getInfosContact($this->idcontact);
  112.         if(empty($this->infos['organisation'])) {
  113.             throw new RedirectException('/editions/');
  114.         }
  115.         // pays
  116.         $this->infos['country'] = $this->contacts->getNameCountry($this->infos['country']);
  117.         // tester si il y a un bandeau custom
  118.         // echo $this->view->bandeau = $this->contacts->getVignetteContact($this->idcontact,array('width' => 980, 'height' => 150),'class_bandeau_thtv');
  119.         $files $this->em->getRepository(Files::class);
  120.         $files->setPublishStatus(1);
  121.         $this->view->bandeau $files->getObjectFiles($this->idcontact,'contacts',100);
  122.         // tester si il y a une image de profile
  123.         $profilepicture $this->contacts->getVignetteContact($this->idcontact,array('width' => 90'height' => 90),'class_pp');
  124.         if(strpos($profilepicture'normal-def')===false) {
  125.             $this->view->profilepicture $profilepicture;
  126.         }
  127.         // trouver les videos de l'espace vidéo
  128.         $this->context['view']->nb_multimedias $this->em->getRepository(Multimedias::class)->getMultimediasBy('contacts'$this->idcontact' AND m.audio_video=2','count');
  129.         // envoi au template
  130.         $this->view->count_ensavoirplus 0;
  131.         foreach($this->infos as $key=>$value) {
  132.             if($key=='comment') {
  133.                 if(!empty($value)){
  134.                     $this->view->count_ensavoirplus 1;
  135.                     $value $this->contacts->wikiTransform($value);
  136.                     if(strlen($value) > 302){
  137.                         $cut substr($value0302);
  138.                         $search = array('@<[\/\!]*?[^<>]*?>@si',          // suppression HTML tags
  139.                             '@[[:space:]\n\r]+@sm',           // suppression espaces et sauts de lignes
  140.                         );
  141.                         $text preg_replace($search' '$cut); // on remplace par des espaces
  142.                         $text preg_replace('@[[:space:]\n\r]+@sm'' '$text); // on ne conserve qu'un seul espace
  143.                         $text html_entity_decode(strip_tags($text), ENT_COMPAT'utf-8');
  144.                         $this->context['view']->{'comment_tiny'} = $text;
  145.                     }
  146.                 }
  147.             }
  148.             $this->context['view']->$key $value;
  149.         }
  150.         //On initie le menu de jours disponibles sur de nombreuses pages
  151.         $this->view->menu_jours = array(
  152.             => array('name' => '3 prochains jours''key_day' => 3),
  153.             => array('name' => '7 prochains jours''key_day' => 7),
  154.             30 => array('name' => '30 prochains jours''key_day' => 30),
  155.             90 => array('name' => '3 prochains mois''key_day' => 90),
  156.             365 => array('name' => '12 prochains mois''key_day' => 365),
  157.         );
  158.         $params_count = array(
  159.             'count' => true
  160.         );
  161.         $this->getSQLBiographies($params_count);
  162.         $this->getSQLTextes($params_count);
  163.         $this->getSQLEvenements($params_count);
  164.         $this->getSQLSpectacles($params_count);
  165.         $this->getSQLSpectacles(array(
  166.             'count' => true,
  167.             'get_spectacles_with_critiques' => true
  168.         ));
  169.         $this->getSQLSpectacles(array(
  170.             'count' => true,
  171.             'get_spectacles_with_multimedias' => true
  172.         ));
  173.         // voir si la maison d'édition est associé à un prix
  174.         $aides $this->em->getRepository(Aides::class);
  175.         $params_sql_aides = array(
  176.             'special' => array(
  177.                 'aides' => array(
  178.                     'idcontacts' => $this->idcontact,
  179.                 ),
  180.                 'type_aide' => 2// Prix et distinctions
  181.             ),
  182.             'dbg' => array('nombre_prix','Nombre de prix'),
  183.         );
  184.         $this->view->aides_count['laureats'] = $aides->countAides($params_sql_aides);
  185.         $params_sql_aides['special']['type_aide'] = 3// nominations
  186.         $params_sql_aides['dbg'] = array('nombre_nominations','Nombre de nominations');
  187.         $this->view->aides_count['nomination'] = $aides->countAides($params_sql_aides);
  188.         $params_sql_aides['special']['type_aide'] = 1// soutiens
  189.         $params_sql_aides['dbg'] = array('nombre_soutiens','Nombre de soutiens');
  190.         $this->view->aides_count['soutiens'] = $aides->countAides($params_sql_aides);
  191.         $params_sql_aides['special']['type_aide'] = 4// sélection
  192.         $params_sql_aides['dbg'] = array('nombre_selections','Nombre de sélections');
  193.         $this->view->aides_count['selections'] = $aides->countAides($params_sql_aides);
  194.         $this->context['view']->editions_pages true;
  195.         $this->getCarteVersion();
  196.     }
  197.     // }}}
  198.     // {{{ finalizeAction()
  199.     /** Code exécuté après chaque action
  200.      *
  201.      *
  202.      * @access protected
  203.      * @return void
  204.      */
  205.     protected function finalizeAction()
  206.     {
  207.         if (!empty($this->extra_title)) {
  208.             $this->title_page .= $this->extra_title.' - '.$this->infos['fullname'];
  209.         } else if (!empty($this->current['title'])){
  210.             $this->title_page .= $this->current['title'];
  211.         } else {
  212.             $this->title_page .= $this->infos['fullname'];
  213.         }
  214.         // titre de la page
  215.         $this->title_page .= ', éditeur de textes théâtraux - tous ses textes, mises en scène, activités';
  216.         $this->context['view']->nb_files $this->countTelechargements();
  217.         $asides_top = new asides();
  218.         $asides_top->load(['aside_top' => array(
  219.             'php' => array(
  220.                 'method' => 'asidesUrlEditions',
  221.             )
  222.         )
  223.         ]);
  224.         // aside
  225.         if($this->context['action'] == 'details'){
  226.             $this->view->info_theatre true//on permet l'affichage du texte dans l'aside expliquant qu'il est possible de modifier l'éditeur
  227.         }
  228.         $this->context['view']->aside $this->asides->view($this->context['view']);
  229.         $this->context['view']->aside_top $asides_top->view($this->context['view']);
  230.         $this->view->locate $this->locate;
  231.     }
  232.     // }}}
  233.     // {{{ action_details()
  234.     /** Accueil pour un éditeur
  235.      *
  236.      * @Route("/editions/{slug}/", name="edition_view")
  237.      *
  238.      */
  239.     public function action_details($slug)
  240.     {
  241.         $this->InitController($slug'details');
  242.         $this->setLocate(nullfalse);
  243.         $this->view->data_object $this->infos;
  244.         $this->extra_locate $this->extra_title 'Actualités';
  245.         // On récupère la liste des 4 derniers textes
  246.         $textes explode(','$this->get_textes_originaux());
  247.         $params_sql = array(
  248.             'params' => array(
  249.                 'limit' => array(0,4),
  250.                 'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
  251.                 'where' => ' AND T1.`idcontact_publisher` = '$this->idcontact.' '
  252.             ),
  253.             'special' => array(
  254.                 'idcontact' => $this->idcontact,
  255.                 // 'idtext' => array('IN', $textes),
  256.                 'join' => true
  257.             ),
  258.             'dbg' => array('texts_affiche_'.uniqid(''true),'Textes des spectacles à l\'affiche')
  259.         );
  260.         $list_texts $this->em->getRepository(Texts::class)->getListTexts($params_sql,array('publisher_first_inverse' => true));
  261.         foreach($list_texts as $k=>$v) {
  262.             $list_texts[$k]['publisher_first'] = true;
  263.             foreach($v['publisher'] as $publisher) {
  264.                 $list_texts[$k]['publisher'] = $publisher;
  265.             }
  266.         }
  267.         $this->view->list_texts $list_texts;
  268.         // On récupère la liste des 4 derniers spectacles
  269.         $where_idcontact ' AND t.idcontact_publisher='.((int)$this->idcontact);
  270.         $params_sql_affiche = array(
  271.             'params' => array(
  272.                 'where' => $where_idcontact,
  273.                 'limit' => array(0,4)
  274.             ),
  275.             'special' => array(
  276.                 'publish_valid' => 1// uniquement les spectacles en ligne et validés
  277.                 'prochains' => 365
  278.             ),
  279.             'dbg' => array('texts_affiche''Textes à l\'affiche')
  280.         );
  281.         $this->view->spectacles_affiche $this->spectacles->getListSpectacles($params_sql_affiche,null,false);
  282.         foreach($this->view->spectacles_affiche as $k => $v){
  283.             $this->view->spectacles_affiche[$k]['footer_contact'] = true;
  284.         }
  285.         //On récupère les 4 prochaines vidéos
  286.         $this->getSQLSpectacles([
  287.             'get_spectacles_with_multimedias' => true,
  288.             'stop_redirect' => true
  289.         ]);
  290.         $format_vignette = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
  291.         foreach($this->view->spectacles AS $idspectacle => $spectacle){
  292.             $idmultimedia $spectacle['idmultimedia'];
  293.             $multimedia[$idmultimedia] = $this->em->getRepository(Multimedias::class)->getInfosMultimedia($idmultimedia,true,false,array('vignette' => $format_vignette));
  294.             $multimedia[$idmultimedia]['spectacle'] = $spectacle;
  295.             if(in_array($this->context['view']->type, ['prod''tous'])){
  296.                 $multimedia[$idmultimedia]['spectacle']['footer_creation_date'] = true;
  297.             }
  298.             else{
  299.                 $multimedia[$idmultimedia]['spectacle']['schedule'] = $this->em->getRepository(Spectacles::class)->getProchDateLieu(
  300.                     array('prochains' => true),
  301.                     $spectacle['idspectacle'],
  302.                     $this->idcontact
  303.                 );
  304.             }
  305.             if(count($multimedia) == 4){
  306.                 break;
  307.             }
  308.         }
  309.         if(!empty($multimedia)){
  310.             $this->context['view']->videos_affiches $multimedia;
  311.             $this->context['view']->contactsvideos true;
  312.         }
  313.         $news $this->em->getRepository(News::class);
  314.         // trouver 7 prochains évènements
  315.         // si pas de 7 prochains, trouver 7 anciens
  316.         foreach(array('news') as $t) {
  317.             $news_list = array();
  318.             $news_params['special']['type_news'] = $t;
  319.             $news_params['special']['by_object'] = array('idcontact' => (int)$this->idcontact);
  320.             foreach(array('prochains','anciens') as $d) {
  321.                 $news_params['dbg'] = array('news_'.$d'Liste des news '.$d);
  322.                 $news_params['special'][$d] = true;
  323.                 if(!empty($exclude_news)) {
  324.                     $news_params['params']['where'] = ' AND T1.idnew NOT IN ('.join(','$exclude_news).') ';
  325.                 }
  326.                 if($d=='anciens') {
  327.                     $news_params['params']['limit'] = array(0,3);
  328.                 } else {
  329.                     $news_params['params']['limit'] = array(0,3);
  330.                 }
  331.                 $news_list[$d] = $this->em->getRepository(News::class)->getListNews($news_params);
  332.                 if(!empty($news_list[$d])) {
  333.                     // liste d'exclusion => pas de en cours dans les anciens
  334.                     foreach($news_list[$d] as $k=>$v) {
  335.                         $exclude_news[$k] = $v['idnew'];
  336.                     }
  337.                     $this->view->{'is_news_list_'.$t} = true;
  338.                 }
  339.                 unset($news_params['special'][$d]);
  340.             }
  341.             $this->view->{'news_list_'.$t} = $news_list;
  342.         }
  343.         // trouver les contenus associés 101 et les classer par date (critiques)
  344.         $params_sql_critiques = array(
  345.             'special' => array(
  346.                 'publish' => 1// les critiques publiées,
  347.                 'get_critiques_publisher' => $this->idcontact
  348.             ),
  349.             'sql' => array(
  350.                 'limit' => array(0,6),
  351.                 'order' => ' ct.`date_article` DESC'// classement,
  352.             ),
  353.             'dbg' => array('critiques','Liste des critiques'),
  354.         );
  355.         $cacheItem $this->cache->getItem("edition_details_{$this->idcontact}");
  356.         if (! $cacheItem->isHit()) {
  357.             $res $this->em->getRepository(Contents::class)->getListContents($params_sql_critiques,array('get_critiques' => true'shorten_title' => true));
  358.             $cacheItem->set($res)
  359.                 ->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
  360.             $this->cache->save($cacheItem);
  361.         }
  362.         $this->context['view']->dernieres_critiques $cacheItem->get();
  363.         //Les vidéos en partenartiat
  364.         $params_query_commun = array(
  365.             'object' => array($this->idcontact => ['contacts']),
  366.             'where' => array(array('multimedias','audio_video',2)),
  367.             'order' => array('multimedias.date'),
  368.             'limit' => array(0,4),
  369.             'dbg' => array('last_listes','Vidéo en partenariat du contact - liste des multimedias'),
  370.         );
  371.         $params_videos = array(
  372.             'alldata' => true,
  373.             'display' => array(
  374.                 'no_footer' => true,
  375.                 'videos_169_format' => true
  376.             )
  377.         );
  378.         $this->view->videos_last_publish $this->em->getRepository(Multimedias::class)->getListMultimedias($params_query_commun, array(), $params_videos);
  379.         //aside
  380.         $this->asides->load('editions_adresse');
  381.         $this->asides->load(['common_prochain_evenement' => array(
  382.             'url_custom' => '/editions/'.$this->context['view']->url_clean.'/evenements/'
  383.         )]);
  384.         $this->asides->load(['common_participer_contacts' => array(
  385.             'exec' => ['color' => 'contacts'],
  386.             'url_custom_edit' => '/editions/'.$this->context['view']->url_clean.'/infos-generales/',
  387.             'editions' => true
  388.         )]);
  389.         if(!empty($this->context['view']->facebook)){
  390.             $this->asides->load(['common_facebook' => array(
  391.                 'url_custom' => $this->context['view']->facebook
  392.             )]);
  393.         }
  394.         if(!empty($this->context['view']->twitter)){
  395.             $this->asides->load(['common_twitter' => array(
  396.                 'url_custom' => $this->context['view']->twitter
  397.             )]);
  398.         }
  399.         return $this->view('editions/details.html.twig');
  400.     }
  401.     // }}}
  402.     // {{{ action_ensavoirplus()
  403.     /** Accueil pour un éditeur
  404.      *
  405.      * @Route("/editions/{slug}/ensavoirplus/", name="edition_ensavoirplus")
  406.      *
  407.      */
  408.     public function action_ensavoirplus($slug null)
  409.     {
  410.         $this->InitController($slug'ensavoirplus');
  411.         $this->setLocate([=> 'En savoir +']);
  412.         $this->extra_locate $this->extra_title 'En savoir +';
  413.         $type 'presentation';
  414.         if(!empty($this->context['params']['type'])){
  415.             $type $this->context['params']['type'];
  416.         }
  417.         $this->view->{'select_'.$type} = true;
  418.         $menu_textes = array(
  419.             'tous' => array(
  420.                 'name' => 'Présentation',
  421.                 'key_filtre' => 'presentation',
  422.             )
  423.         );
  424.         $this->asides->load(['url_lists_alone' => array(
  425.             'exec' => ['color' => 'contacts'],
  426.             'php' => array(
  427.                 'method' => 'asidesUrlLists',
  428.                 'urls' => $menu_textes,
  429.                 'url' => '/editions/{v_url_clean}/ensavoirplus/type/key_filtre',
  430.                 'params' => array(
  431.                     'activate' => $type
  432.                 )
  433.             ),
  434.             'title' => 'Voir aussi'
  435.         )
  436.         ]);
  437.         $this->get_asides_common('contacts');
  438.         return $this->view('editions/ensavoirplus.html.twig');
  439.     }
  440.     // }}}
  441.     // {{{ action_biographies()
  442.     /** Page des biographies
  443.      *
  444.      * @Route("/editions/{slug}/biographies/", name="edition_biographies")
  445.      *
  446.      */
  447.     public function action_biographies($slug null)
  448.     {
  449.         $this->InitController($slug'biographies');
  450.         $this->setLocate([=> 'Les Biographies']);
  451.         // $this->countBiographies();
  452.         $resultats $this->getSQLBiographies(array(
  453.             'default' => 'auteurs'
  454.         ));
  455.         foreach($resultats AS $key => $value){
  456.             $this->view->$key $value;
  457.         }
  458.         $this->get_asides_biographies();
  459.         return $this->view('editions/biographies.html.twig');
  460.     }
  461.     // }}}
  462.     // {{{ action_auteurs()
  463.     /** Page des auteurs
  464.      *
  465.      */
  466.     public function action_auteurs(){
  467.         $this->setLocate([=> 'Les auteurs']);
  468.         $persons $this->em->getRepository(Persons::class);
  469.         $type 'auteurs';
  470.         if(!empty($this->context['params']['type'])){
  471.             $type $this->context['params']['type'];
  472.         }
  473.         $this->view->type $type.'_affiche';
  474.         $this->view->menu_jours_auteurs true;
  475.         $nb_day_default 365;
  476.         $this->getCommonSearch(array(
  477.             'nb_days' => $nb_day_default,
  478.         ));
  479.         $this->getCommonSearchView();
  480.         //Si la valeur existe bien dans le menu
  481.         if(!in_array($this->context['view']->daysarray_column($this->view->menu_jours'key_day'))){
  482.             $this->context['view']->days $nb_day_default;
  483.         }
  484.         $params_sql = array(
  485.             'special' => array(
  486.                 // 'count_only' => true, //pour calculer le nombre total de personne
  487.                 'spectacle' => array(
  488.                     'type' => 'author',
  489.                     'prochains' => $this->context['view']->days.'D'
  490.                 ),
  491.                 'contacts' => array(
  492.                     'desactive_jointure_author' => true,
  493.                     'publishers' => [$this->idcontact]
  494.                 )
  495.             ),
  496.             'params' => array(
  497.                 // 'limit' => array(0,4),
  498.             ),
  499.             'dbg' => array('affiche','Les personnes à l\'affiche')
  500.         );
  501.         // echo $persons->getSQLPersons($params_sql);
  502.         $params_display['vignette_format'] = array('width'=>154,'height'=>154,'direction'=>'crop');
  503.         $persons_data $persons->getListPersons($params_sql,$params_display);
  504.         $name 'texte_filtre_'.$type;
  505.         $this->context['view']->$name true;
  506.         $this->context['view']->auteurs $persons_data;
  507.         $this->get_asides_biographies();
  508.     }
  509.     // }}}
  510.     // {{{ action_emissions()
  511.     /** Podcasts de la page contact
  512.      *
  513.      *
  514.      * @access public
  515.      * @return void
  516.      */
  517.     public function action_emissions()
  518.     {
  519. //        $this->getSQLSpectacles(['default' => 'tous']);
  520.         $this->getSQLSpectacles(['get_spectacles_with_audios' => true]);
  521.         $arrays_type_podcasts = [
  522.             'podcasts-spectacles' => 'spectacles',
  523.             'podcasts-spectacles-tous' => 'spectacles',
  524.             'podcasts-spectacles-anciens' => 'spectacles',
  525.             'podcasts-spectacles-coprod' => 'spectacles',
  526.             'podcasts-textes' => 'textes'
  527.         ];
  528.         $cat 'podcasts-spectacles';
  529.         if(isset($this->context['params']['cat']) && array_key_exists($this->context['params']['cat'], $arrays_type_podcasts)){
  530.             $cat $this->context['params']['cat'];
  531.         }
  532.         $this->view->cat $cat;
  533.         $type 'in';
  534.         if(isset($this->context['params']['type'])){
  535.             $type $this->context['params']['type'];
  536.         }
  537.         $this->context['view']->podcasts_content true;
  538.         $this->context['view']->type_content $type_content $arrays_type_podcasts[$cat];
  539.         $params_sql $this->setCommonSearchSpectacles(array(
  540.             'special' => array(
  541.                 'textfictif' => 0,
  542.                 'prochains' => true
  543.             ),
  544.             'dbg' => array('list_textes_affiche''Liste des spectacles avec textes non fictifs qui ont un podcast'),
  545.         ));
  546.         if(!empty($this->context['params']['type']) && $this->context['params']['type'] == 'prod' && in_array($this->idobject, [595,5222])){
  547.             unset($params_sql['special']['prochains']);
  548.         }
  549.         $spectacles $this->em->getRepository(Spectacles::class);
  550.         $textes $this->em->getRepository(Texts::class);
  551.         $display_spectacle = [];
  552.         $format_vignette = [];
  553.         //Spectacles
  554.         if($type_content == 'spectacles'){
  555.             //Si c'est France Culture
  556.             if(in_array($this->idobject, [595,5222])){
  557.                 $params_sql['special']['podcasts'] = [
  558.                     'type_podcast' => 'franceculture',
  559.                     'publish' => 1
  560.                 ];
  561.                 $params_sql['special']['type_franceinter'] = null;
  562.                 if($this->idobject == 5222){
  563.                     $params_sql['special']['type_franceinter'] = 1;
  564.                 }
  565.                 $display_spectacle = ['carrer_couleurs' => true'allauthors' => true];
  566.                 if($type == 'podcasts-spectacles-tous'){
  567.                     $format_vignette['display'] = ['affiche_date_creation' => true];
  568.                     $params_sql['params']['order'] = ['creation_date''DESC'];
  569.                 }
  570.             }
  571.             else{
  572.                 $this->getSQLSpectacles(['get_spectacles_with_audios' => true]);
  573.             }
  574.         }
  575.         //Textes
  576.         else{
  577.             $params_sql['count_only_distinct'] = 't.`idtext`';
  578.         }
  579.         $this->context['view']->nb_spectacles_total $spectacles->countListSpectacles($params_sql);
  580.         $params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  581.         $list_spectacles $spectacles->getListSpectacles($params_sql$format_vignettefalse$display_spectacle);
  582.         //Les spectacles et si c'est france culture
  583.         if($type_content == 'spectacles' && in_array($this->idobject, [595,5222])){
  584.             $this->context['view']->spectacles $list_spectacles;
  585.             $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total10);
  586.             $this->context['view']->pagination['spectacle'] = true;
  587.             if($type == 'podcasts-spectacles-tous' || $type == 'podcasts-spectacles') {
  588.                 foreach ($this->context['view']->spectacles AS $idspectacle => $spectacle) {
  589.                     if (!empty($spectacle['creation_date']) && $type == 'podcasts-spectacles-tous') {
  590.                         $this->context['view']->spectacles[$idspectacle]['annee_creation'] = $spectacles->getFormeDate($spectacle['creation_date'], '%Y'true);
  591.                         unset($this->context['view']->spectacles[$idspectacle]['contact_creation']);
  592.                     }
  593.                     if ($type == 'podcasts-spectacles') {
  594.                         $this->context['view']->spectacles[$idspectacle]['footer_contact'] = true;
  595. //                            unset($this->context['view']->spectacles[$idspectacle]['contact_creation']);
  596.                     }
  597.                 }
  598.             }
  599.         }
  600.         //Les textes
  601.         else if($type_content == 'textes'){
  602.             foreach($list_spectacles as $k=>$v) {
  603.                 if(!empty($v['idtext'])) {
  604.                     $idtexts[$v['idtext']] = $v['idtext'];
  605.                 }
  606.             }
  607.             $params_sql_texts['special'] = array(
  608.                 'idtext' => array('IN'$idtexts),
  609.                 'join' => true,
  610.             );
  611.             $params_sql_texts['special']['podcasts'] = [
  612.                 'type_podcast' => 'franceculture'
  613.             ];
  614.             $vignette = array(
  615.                 'vignette_format' =>
  616.                     array(
  617.                         'height'=>$_ENV['VIGN_TEXT_HEIGHT'],
  618.                         'width'=>$_ENV['VIGN_TEXT_WIDTH'],
  619.                         'direction'=>'thumb'
  620.                     )
  621.             );
  622.             $this->context['view']->texts $textes->getTextsFromSpectacles($list_spectacles$params_sql_texts$vignette);
  623.         }
  624.         if(!empty($this->context['view']->texts) || !empty($this->context['view']->spectacles)){
  625.             $this->context['view']->contents true;
  626.         }
  627.         $totalSpectaclesPodcasts 0;
  628.         $spectacles_counts $this->view->spectacle_counts['spectacles_audios'];
  629.         $this->asides->load(['url_lists_alone,emissions' => [
  630.             'exec' => array(
  631.                 'color' => 'spectacles',
  632.             ),
  633.             'php' => array(
  634.                 'method' => 'asidesUrlLists',
  635.                 'urls' => [
  636.                     //                     'podcasts-textes '=> array(
  637.                     //                         'name' => 'Textes à l\'affiche',
  638.                     //                         'key_type' => 'podcasts-textes',
  639.                     //                     ),
  640.                     'podcasts-spectacles'=> array(
  641.                         'name' => 'Spectacles à venir',
  642.                         'key_cat' => 'podcasts-spectacles',
  643.                         'key_type' => 'in',
  644.                         'count' => ($spectacles_counts['prochains'] + $totalSpectaclesPodcasts)
  645.                     ),
  646. //                    'podcasts-spectacles-tous'=> array(
  647. //                        'name' => 'Toutes avec critiques',
  648. //                        'key_cat' => 'podcasts-spectacles-critiques',
  649. //                        'key_type' => 'critiques',
  650. //                        'count' => ($spectacles_counts['critiques'] + $totalSpectaclesPodcasts)
  651. //                    )
  652.                 ],
  653.                 'url' => '/editions/{v_url_clean}/key_action/cat/key_cat/type/key_type',
  654.                 'params' => array(
  655.                     'key_action' => 'emissions',
  656.                     'activate' => (!empty($this->context['view']->cat)) ? $this->context['view']->cat ''
  657.                 ),
  658.             ),
  659.             'title' => 'ÉMISSIONS ASSOCIÉES'
  660.         ]]);
  661.         $this->asides->load(['common_carrer_informations' => [
  662.             'exec' => ['color' => 'spectacles'],
  663.         ]]);
  664.         $this->asides->load(['common_participer_contacts' => array(
  665.             'exec' => ['color' => 'spectacles'],
  666.         )]);
  667.     }
  668.     // }}}
  669.     // {{{ action_spectacles()
  670.     /** Liste des spectacles pour un éditeur
  671.      *
  672.      * @Route("/editions/{slug}/spectacles/", name="edition_spectacles")
  673.      * @Route("/editions/{slug}/spectacles/type/{p_type}", name="edition_spectacles_type")
  674.      * @Route("/editions/{slug}/spectacles/area/{p_area}", name="edition_spectacles_area")
  675.      * @Route("/editions/{slug}/spectacles/type/{p_type}/area/{p_area}", name="edition_spectacles_type_area")
  676.      *
  677.      */
  678.     public function action_spectacles($slug null$params_action = array(), $p_type null$p_area null)
  679.     {
  680.         if(empty($params_action)){
  681.             $this->InitController($slug'spectacles');
  682.         }
  683.         $this->context['params']['type'] = $p_type;
  684.         $this->context['params']['area'] = $p_area;
  685.         $this->extra_locate $this->extra_title 'Spectacles';
  686.         $this->getSQLSpectacles(['default' => 'tous']);
  687.         $type $this->view->type;
  688.         // On affiche tous les lieux dans les footer et on suppr la mention de mise en scene
  689.         foreach($this->view->spectacles as $k => $v){
  690.             if($type == 'critiques'){
  691.                 $this->view->spectacles[$k]['footer_critique'] = true;
  692.                 $this->view->spectacles[$k]['nombre_critique'] = $this->em->getRepository(Contents::class)->countAssociateContent('spectacles',$v['idspectacle'],'class_critique',array('publish_valid' => 1));
  693.                 $this->view->spectacles[$k]['url_clean_more'] = 'critiques/';
  694.             }
  695.             else{
  696.                 $this->view->spectacles[$k]['footer_contact'] = true;
  697.             }
  698.             if($type == 'tous'){
  699.                 if(!empty($this->view->spectacles[$k]['spectacle'])){
  700.                     $this->view->spectacles[$k]['spectacle']['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['spectacle']['creation_date'], '%Y'true); //%a %d/%m/%Y;
  701.                 }
  702.                 else{
  703.                     $this->view->spectacles[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['creation_date'], '%Y'true); //%a %d/%m/%Y;
  704.                 }
  705.                 $this->view->spectacles[$k]['display']['affiche_date_creation'] = true;
  706.             }
  707.         }
  708.         if(empty($params_action)){
  709.             $voir_videos = array(
  710.                 'prochains' => array(
  711.                     'name' => 'Textes à l\'affiche',
  712.                     'key_filtre' => 'prochains',
  713.                     'count' => $this->view->spectacle_counts['spectacles']['prochains']
  714.                 ),
  715.                 'tous' => array(
  716.                     'name' => 'Tous les textes en scène',
  717.                     'key_filtre' => 'tous',
  718.                     'count' => $this->view->spectacle_counts['spectacles']['tous']
  719.                 )
  720.             );
  721.             $this->asides->load(['url_lists' => array(
  722.                 'exec' => [
  723.                     'color' => 'spectacles',
  724.                     'htmlstart' => true,
  725.                     'htmlend' => false
  726.                 ],
  727.                 'php' => array(
  728.                     'method' => 'asidesUrlLists',
  729.                     'urls' => $voir_videos,
  730.                     'url' => '/editions/{v_url_clean}/spectacles/type/key_filtre/generate_params',
  731.                     'params' => array(
  732.                         'activate' => (!empty($this->view->saison)) ? null $type,
  733.                     ),
  734.                     'structure' => array(
  735.                         'structure_classic' => array(
  736.                             'd' => 'v_days',
  737.                         )
  738.                     )
  739.                 ),
  740.                 'title' => 'Voir aussi'
  741.             )
  742.             ]);
  743.             if($type == 'prochains'){
  744.                 $this->asides->load(['url_lists,jours_filtres' => array(
  745.                     'exec' => array(
  746.                         // 'alone' => false
  747.                         'htmlend' => true
  748.                     ),
  749.                     'php' => array(
  750.                         'method' => 'asidesUrlLists',
  751.                         'urls' => $this->view->menu_jours,
  752.                         'url' => '/editions/{v_url_clean}/spectacles/type/v_filtres/generate_params',
  753.                         'params' => array(
  754.                             'v_filtres' => $type,
  755.                         ),
  756.                         'structure' => array(
  757.                             'structure_classic' => array(
  758.                                 'd' => 'key_day',
  759.                             )
  760.                         )
  761.                     ),
  762.                     'title' => html_entity_decode('Recherche par période')
  763.                 )]);
  764.             }
  765.             if($type == 'tous'){
  766.                 $this->asides->load(['par_saison' => array(
  767.                     'exec' => ['htmlend' => true],
  768.                     'php' => array(
  769.                         'url' => '/editions/{v_url_clean}/spectacles/generate_params',
  770.                         'method' => 'asidesUrlListsForms',
  771.                         'structure' => array(
  772.                             'type' => $type,
  773.                             'area' => (isset($this->context['view']->area)) ? $this->context['view']->area null,
  774.                             'structure_classic' => array(
  775.                                 's' => 'v_saison',
  776.                             )
  777.                         )
  778.                     ),
  779.                     'title' => 'Recherche par période'
  780.                 )]);
  781.             }
  782.             $params = array(
  783.                 'carte_url_custom' => '/editions/'.$this->context['view']->url_clean.'/spectacles/type/'.$type.'/area/get_id',
  784.                 'no_show_map' => ($type == 'prochains') ? true false
  785.             );
  786.             $this->get_asides_common('spectacles'$params);
  787.             return $this->view('editions/spectacles.html.twig');
  788.         }
  789.     }
  790.     // }}}
  791.     // {{{ action_videos()
  792.     /**
  793.      * @Route("/editions/{slug}/videos/", name="edition_videos")
  794.      * @Route("/editions/{slug}/videos/type/{p_type}/", name="edition_videos_type")
  795.      */
  796.     public function action_videos($slug null$p_type null)
  797.     {
  798.         $this->InitController($slug'videos');
  799.         $this->context['params']['type'] = $p_type;
  800.         $multimedias $this->em->getRepository(Multimedias::class);
  801.         $format_vignette = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
  802.         //Nombres total de vidéos en partenariat
  803.         $nb_videos_partenariats $multimedias->getMultimediasBy('contacts'$this->idcontact' AND m.audio_video=2','count');
  804.         $this->context['view']->videos_blocks true;
  805.         $this->context['view']->spectacles_videos true;
  806.         // $this->action_spectacles(['get_spectacles_with_multimedias' => true]);
  807.         $this->getSQLSpectacles([
  808.             'get_spectacles_with_multimedias' => true,
  809.             'stop_redirect' => ($nb_videos_partenariats 0) ? true false
  810.         ]);
  811.         // On récupère les vidéos en partenariat spécifique à l'action des vidéos
  812.         if(isset($this->context['params']['type']) && in_array($this->context['params']['type'], ['partenariat'])){
  813.             $this->context['view']->type_spectacle 'partenariat';
  814.             //paramètre commun utile à plusieurs requêtes
  815.             $params_query_commun = array(
  816.                 'object' => array($this->idcontact => ['contacts']),
  817.                 'where' => array(array('multimedias','audio_video',2)),
  818.                 'order' => array('multimedias.date'),
  819.                 'limit' => array('all'),
  820.                 'dbg' => array('last_commun','Vidéos en partenariat du contact'),
  821.             );
  822.             // On récupère la liste des dates pour les saisons et les années
  823.             $params_query_get_dates array_merge($params_query_commun, array(
  824.                 'select' => array('multimedias.`date`''YEAR(multimedias.`date`) as annee'),
  825.                 'count_only_spectacles' => true,
  826.                 'dbg' => array('last_dates','Vidéo en partenariat du contact - liste des dates'),
  827.             ));
  828.             $sql_dates_multimedias $this->em->getRepository(Multimedias::class)->getSQLMultimedias($params_query_get_datesfalse);
  829.             $listdates $multimedias->queryAll($sql_dates_multimedias);
  830.             // On génère les formulaires les saisons
  831.             if(!empty($listdates)) {
  832.                 foreach($listdates as $a) {
  833.                     if($a['date']>date('Y-m-d'mktime(0,0,0,8,31,$a['annee'])) ) {
  834.                         $s $a['annee'].'-'.($a['annee']+1);
  835.                     } else {
  836.                         $s = ($a['annee']-1).'-'.$a['annee'];
  837.                     }
  838.                     $saisons[$s] = $s;
  839.                     $saisons_key[] = $s;
  840.                     $annees[$a['annee']] = $a['annee'];
  841.                 }
  842.                 if(!empty($saisons)){
  843.                     // liste des saisons des spectacles
  844.                     $this->view->saisons $saisons;
  845.                     if(!empty($saisons)) {
  846. //                        $this->context['form']->addElement('select', 's', 'Saisons', array_merge(array('' => 'une saison'),$saisons), array('id' => 'saisons'));
  847.                     }
  848.                     // dernière saison
  849.                     foreach($saisons as $s) {
  850.                         $this->view->current_saison $s;
  851.                         break;
  852.                     }
  853.                 }
  854.             }
  855.             // recherche par saison
  856.             if(!empty($_REQUEST['s'])) {
  857.                 $saison filter_var($_REQUEST['s'], FILTER_SANITIZE_URL);
  858.             } else {
  859.                 $saison null;
  860.             }
  861.             $annees_saison explode('-'$saison);
  862.             if(count($annees_saison)==2) {
  863.                 $datestart Date_time::getSaisonDatestart((int)$annees_saison[0]);
  864.                 $dateend Date_time::getSaisonDateend((int)$annees_saison[1]);
  865.             }
  866.             // On ajout le paramètre des dates à la requête commune
  867.             if(!empty($datestart) && !empty($dateend)) {
  868.                 $params_query_commun['where_date_multimedias'] = array(
  869.                     'datestart' => $datestart,
  870.                     'dateend' => $dateend
  871.                 );
  872.             }
  873.             //On récupère le nombre total de multimédias
  874.             $params_query_total array_merge($params_query_commun, array(
  875.                 'select' => array(),
  876.                 'dbg' => array('last_total','Vidéo en partenariat du contact - liste totales des vidéos'),
  877.             ));
  878.             $sql_dates_multimedias $this->em->getRepository(Multimedias::class)->getSQLMultimedias($params_query_totalfalse);
  879.             $total $this->em->getRepository(Multimedias::class)->queryAll($sql_dates_multimedias);
  880.             $nb_videos_partenariats count($total);
  881.             //On s'ocucpe de la pagination
  882.             $this->context['view']->pagination $this->getPagination($nb_videos_partenariats);
  883.             $this->context['view']->pagination['totalItems'] = $nb_videos_partenariats;
  884.             $this->context['view']->pagination['custom'] = true;
  885.             $this->context['view']->pagination['custom_name'] = "vidéos";
  886.             // Récupération de la liste des dernières videos du contact
  887.             $params_query_last array_merge($params_query_commun, array(
  888.                 'limit' => array($this->getLimitStart(),$this->perPage),
  889.                 'dbg' => array('last_listes','Vidéo en partenariat du contact - liste des multimedias'),
  890.             ));
  891.             $videos_listes_partenariats $this->em->getRepository(Multimedias::class)->getListMultimedias($params_query_last, array(), ['alldata' => true]);
  892.         }
  893.         //Si nous récupérons des vidéos en provenance en partenariat
  894.         if(!empty($videos_listes_partenariats)){
  895.             $this->context['view']->videos_classic true;
  896.             // $multimedia ;
  897.             foreach($videos_listes_partenariats AS $idmultimedia => $v){
  898.                 $multimedia[$idmultimedia] = $this->em->getRepository(Multimedias::class)->getInfosMultimedia($idmultimedia,true,false,array('vignette' => $format_vignette));
  899.                 if($idspectacle key($v['spectacles'])){
  900.                     $multimedia[$idmultimedia]['spectacle'] = $this->em->getRepository(Spectacles::class)->getInfosSpectacle($idspectacle);
  901.                 }
  902.             }
  903.         }
  904.         else if(!empty($this->context['view']->spectacles)){
  905.             //Nous affichons des données différent en fonction des filtres de l'utilisateur
  906.             //Par dérfault les prochains spectacles
  907.             $params_schedule = array('prochains' => true);
  908.             if(in_array($this->context['view']->type, ['anciens'])){
  909.                 //Les anciens spectacles
  910.                 $params_schedule = array('anciens' => true);
  911.             }
  912.             $idobject $this->idcontact;
  913.             if(in_array($this->context['view']->type, ['coprod'])){
  914.                 $idobject null;
  915.             }
  916.             //on traite les données pour pouvoir les afficher comme convenus
  917.             $format_vignette = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
  918.             foreach($this->context['view']->spectacles AS $idspectacle => $spectacle){
  919.                 $idmultimedia $spectacle['idmultimedia'];
  920.                 $multimedia[$idmultimedia] = $this->em->getRepository(Multimedias::class)->getInfosMultimedia($idmultimedia,true,false,array('vignette' => $format_vignette));
  921.                 $multimedia[$idmultimedia]['spectacle'] = $spectacle;
  922.                 if(in_array($this->context['view']->type, ['prod''tous'])){
  923.                     $multimedia[$idmultimedia]['spectacle']['footer_creation_date'] = true;
  924.                 }
  925.                 else{
  926.                     $multimedia[$idmultimedia]['spectacle']['schedule'] = $this->em->getRepository(Spectacles::class)->getProchDateLieu(
  927.                         $params_schedule,
  928.                         $spectacle['idspectacle'],
  929.                         $idobject
  930.                     );
  931.                 }
  932.             }
  933.             $this->context['view']->spectacles $multimedia;
  934.             $this->context['view']->contactsvideos true;
  935.         }
  936.         else{
  937.             if($nb_videos_partenariats 0){
  938.                 return $this->redirectToRoute('edition_videos_type', ['slug' => $this->context['view']->url_clean'p_type' => 'partenariat']);
  939.             }
  940.         }
  941.         $this->context['view']->spectacles $multimedia;
  942.         $this->context['view']->contactsvideos true;
  943.         $this->get_asides_videos();
  944.         return $this->view('editions/videos.html.twig');
  945.     }
  946.     // }}}
  947.     // {{{ action_decouvert_auteurs()
  948.     /**
  949.      * @Route("/editions/{slug}/decouverte-auteurs/", name="edition_decouverte_auteurs")
  950.      */
  951.     public function action_decouverte_auteurs($slug null)
  952.     {
  953.         $this->InitController($slug'decouverte-auteurs');
  954.         $playlists $this->em->getRepository(Playlists::class);
  955.         $persons $this->em->getRepository(Persons::class);
  956.         $x explode(","$this->get_textes_originaux());
  957.         $params_persons = array(
  958.             'params' => array(
  959.                 'limit' => 'all',
  960.             ),
  961.             'special' => array(
  962.                 'publish' => 1,
  963.                 'contacts' => array(
  964.                     'publishers' => $this->idcontact
  965.                 )
  966.             ),
  967.             'dbg' => array('persons','liste des personnes')
  968.         );
  969.         // On prépare la requête pour récupérer la liste des biographies
  970.         $lists_persons $persons->queryAll($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
  971.         //On ne récupère que l'ID
  972.         foreach($lists_persons AS $value){
  973.             $id_persons[] = $value['idperson'];
  974.         }
  975.         // playlist
  976.         $list_playlists $playlists->getListPlaylists(array(
  977.             'special' => array(
  978.                 'idclassifications' => array(116),
  979.                 'idpersons' => $id_persons
  980.             ),
  981.             'limit' => array(0,200),
  982.             'dbg' => array('playlists_auteurs','Les auteurs par eux même'),
  983.         ));
  984.         foreach($list_playlists as $k=>$v) {
  985.             foreach($v['idperson'] as $p) {
  986.                 $list_playlists_new[$p['lastname'].$k] = $v;
  987.             }
  988.         }
  989.         if(!empty($list_playlists_new)){
  990.             ksort($list_playlists_new);
  991.             $this->view->list_playlists $list_playlists_new;
  992.         }
  993.         $this->get_asides_videos();
  994.         return $this->view('editions/decouverte-auteurs.html.twig');
  995.     }
  996.     // }}}
  997.     // {{{ action_critiques()
  998.     /**
  999.      *
  1000.      * @Route("/editions/{slug}/critiques/", name="edition_critiques")
  1001.      * @Route("/editions/{slug}/critiques/type/{p_type}", name="edition_critiques_type")
  1002.      *
  1003.      * @param array $params
  1004.      */
  1005.     public function action_critiques($slug null$p_type null)
  1006.     {
  1007.         $this->InitController($slug'critiques');
  1008.         $this->context['params']['type'] = $p_type;
  1009.         $this->getSQLSpectacles([
  1010.             'get_spectacles_with_critiques' => true
  1011.         ]);
  1012.         $type $this->view->type;
  1013.         $spectacles_counts $this->view->spectacle_counts;
  1014.         if (!empty($this->view->spectacles)) {
  1015.             foreach($this->view->spectacles as $k => $v){
  1016.                 $this->view->spectacles[$k]['footer_critique'] = true;
  1017.                 $this->view->spectacles[$k]['nombre_critique'] = $this->em->getRepository(Contents::class)->countAssociateContent('spectacles',$v['idspectacle'],'class_critique',array('publish_valid' => 1));
  1018.                 $this->view->spectacles[$k]['url_clean_more'] = 'critiques/';
  1019.             }
  1020.         }
  1021.         $this->context['view']->no_lieu true;
  1022.         if(empty($params['show_no_aside'])){
  1023.             $menu_critiques = array(
  1024.                 'prochains' => array(
  1025.                     'name' => 'Spectacles à l\'affiche',
  1026.                     'key_filtre' => 'prochains',
  1027.                     'count' => $spectacles_counts['spectacles_critiques']['prochains']
  1028.                 ),
  1029.                 'tous' => array(
  1030.                     'name' => 'Tous les spectacles',
  1031.                     'key_filtre' => 'tous',
  1032.                     'count' => $spectacles_counts['spectacles_critiques']['tous']
  1033.                 )
  1034.             );
  1035.             $this->asides->load(['url_lists' => array(
  1036.                 'exec' => [
  1037.                     'color' => 'critiques',
  1038.                     'htmlstart' => true,
  1039.                     'htmlend' => ($type == 'prochains') ? false true
  1040.                 ],
  1041.                 'php' => array(
  1042.                     'method' => 'asidesUrlLists',
  1043.                     'urls' => $menu_critiques,
  1044.                     'url' => '/editions/{v_url_clean}/critiques/type/key_filtre/generate_params',
  1045.                     'params' => array(
  1046.                         'activate' => $type,
  1047.                     ),
  1048.                     'structure' => array(
  1049.                         'structure_classic' => array(
  1050.                             'd' => 'v_days',
  1051.                         )
  1052.                     )
  1053.                 ),
  1054.                 'title' => 'Voir aussi'
  1055.             )
  1056.             ]);
  1057.             if($type == 'prochains'){
  1058.                 $this->asides->load(['url_lists,jours_filtres' => array(
  1059.                     'exec' => array(
  1060.                         // 'alone' => false
  1061.                         'htmlend' => true
  1062.                     ),
  1063.                     'php' => array(
  1064.                         'method' => 'asidesUrlLists',
  1065.                         'urls' => $this->view->menu_jours,
  1066.                         'url' => '/editions/{v_url_clean}/critiques/type/v_filtres/generate_params',
  1067.                         'params' => array(
  1068.                             'v_filtres' => $type,
  1069.                         ),
  1070.                         'structure' => array(
  1071.                             'structure_classic' => array(
  1072.                                 'd' => 'key_day',
  1073.                             )
  1074.                         )
  1075.                     ),
  1076.                     'title' => html_entity_decode('Recherche par période')
  1077.                 )]);
  1078.             }
  1079.             $this->get_asides_common('spectacles');
  1080.         }
  1081.         return $this->view('editions/critiques.html.twig');
  1082.     }
  1083.     // }}}
  1084.     // {{{ action_textes()
  1085.     /** Liste des textes pour un éditeur
  1086.      *
  1087.      * @Route("/editions/{slug}/textes", name="edition_textes")
  1088.      * @Route("/editions/{slug}/textes/area/{p_area}", name="edition_textes_area")
  1089.      *
  1090.      */
  1091.     public function action_textes($slug null$p_area null)
  1092.     {
  1093.         $this->InitController($slug'textes');
  1094.         $this->context['params']['area'] = $p_area;
  1095.         $this->setLocate([=> 'Tous les textes']);
  1096.         $this->extra_locate $this->extra_title 'Textes';
  1097.         $this->getSQLTextes(array(
  1098.             'default' => 'all'
  1099.         ));
  1100.         //On s'occupe des asides et des différents menus
  1101.         $this->get_asides_textes('tous');
  1102.         $this->get_asides_common('editions');
  1103.         return $this->view('editions/textes.html.twig');
  1104.     }
  1105.     // }}}
  1106.     // {{{ action_soutiens()
  1107.     /** Sélection de quelques choses
  1108.      *
  1109.      *
  1110.      * @access public
  1111.      * @return void
  1112.      */
  1113.     public function action_soutiens()
  1114.     {
  1115.         // $tthis->conetext['view']->type_object
  1116.         //on supprime l'affichage de la date et de la ville
  1117.         $this->context['view']->noshow true;
  1118.         $this->context['view']->current_page 'soutiens';
  1119.         $this->perPage 20;
  1120.         $this->getContactAides(array(1));
  1121.         if(!empty($this->context['view']->filtres_aides_categories[$this->context['view']->params_filtre])){
  1122.             $this->context['view']->aside_aide_contact_soutiens $this->em->getRepository(Aides::class)->getListAides([
  1123.                 'special' => array(
  1124.                     'aides' => array(
  1125.                         'idcontacts' => $this->idcontact
  1126.                     ),
  1127.                     'idaidecontact' => $this->context['view']->filtres_aides_categories[$this->context['view']->params_filtre],
  1128.                     'type_aide' => 1
  1129.                 )
  1130.             ]);
  1131.         }
  1132.         $this->context['view']->title_type 'Soutien';
  1133.         $this->context['view']->menu_title_type 'soutenus';
  1134.         $this->asides->load(['url_lists' => array(
  1135.             'exec' => array(
  1136.                 'htmlstart' => true,
  1137.             ),
  1138.             'php' => array(
  1139.                 'method' => 'asidesUrlLists',
  1140.                 'urls' => $this->context['view']->menu_types_object,
  1141.                 'url' => '/contacts/{v_url_clean}/{v_current_page}/type/key_type',
  1142.                 'params'=> array(
  1143.                     'key_type' => 'auto_key'
  1144.                 )
  1145.             ),
  1146.             'title' => 'Voir'
  1147.         )]);
  1148.         $this->asides->load(['par_annee' => array(
  1149.             'exec' => array(
  1150.                 'htmlend' => true,
  1151.                 'color' => ($this->context['action'] == 'selections') ? 'textes' 'context',
  1152.             ),
  1153.             'php' => array(
  1154.                 'method' => 'asidesUrlListsForms',
  1155.                 'url' => '/contacts/{v_url_clean}/{v_current_page}'
  1156.             ),
  1157.             'title' => 'Recherche par periode'
  1158.         )]);
  1159.         $this->asides->load('contact_list_aidecontacts');
  1160.         $this->asides->load('contact_chartreuse');
  1161.     }
  1162.     // }}}
  1163.     // {{{ action_selections()
  1164.     /** Sélection de quelques choses
  1165.      *
  1166.      * @Route("/editions/{slug}/selections", name="edition_selections")
  1167.      * @Route("/editions/{slug}/selections/type/{p_type}/idaide/{p_idaide}", name="edition_selections_type_idaide")
  1168.      *
  1169.      * @access public
  1170.      * @return void
  1171.      */
  1172.     public function action_selections($slug null$p_type null$p_idaide null)
  1173.     {
  1174.         $this->InitController($slug'selections');
  1175.         $this->context['params']['type'] = $p_type;
  1176.         $this->context['params']['idaide'] = $p_idaide;
  1177.         $this->context['view']->current_page 'selections';
  1178.         $this->getContactAides(array(4));
  1179.         $this->context['view']->title_type 'Sélection';
  1180.         $this->context['view']->menu_title_type 'sélectionnés';
  1181.         // $this->getAsideContent();
  1182.         $this->asides->load(['url_lists' => array(
  1183.             'exec' => array(
  1184.                 'htmlstart' => true,
  1185.                 'color' => ($this->context['action'] == 'selections') ? 'textes' 'context',
  1186.             ),
  1187.             'php' => array(
  1188.                 'method' => 'asidesUrlLists',
  1189.                 'urls' => $this->context['view']->menu_types_object,
  1190.                 'url' => '/editions/{v_url_clean}/{v_current_page}/type/key_type?y={v_year}',
  1191.                 'params'=> array(
  1192.                     'key_type' => 'auto_key'
  1193.                 )
  1194.             ),
  1195.             'title' => 'Voir'
  1196.         )]);
  1197.         $this->asides->load(['par_annee' => array(
  1198.             'exec' => array(
  1199.                 'htmlend' => true,
  1200.                 'color' => ($this->context['action'] == 'selections') ? 'textes' 'context',
  1201.             ),
  1202.             'php' => array(
  1203.                 'method' => 'asidesUrlListsForms',
  1204.                 'url' => '/editions/{v_url_clean}/{v_current_page}'
  1205.             ),
  1206.             'title' => 'Recherche par periode'
  1207.         )]);
  1208.         $this->asides->load(['contact_list_aidecontacts' => array(
  1209.             'exec' => ['color' => 'textes']
  1210.         )]);
  1211.         $this->asides->load('laureat_signaler');
  1212.         $this->asides->load('contact_chartreuse');
  1213.         return $this->view('editions/selections.html.twig');
  1214.     }
  1215.     // }}}
  1216.     // {{{ action_videos_auteurs()
  1217.     /** Tous les auteurs avec une vidéos
  1218.      *
  1219.      * @Route("/editions/{slug}/videos-auteurs/", name="edition_videos_auteurs")
  1220.      *
  1221.      */
  1222.     public function action_videos_auteurs($slug null)
  1223.     {
  1224.         $this->InitController($slug'videos');
  1225.         $playlists $this->em->getRepository(Playlists::class);
  1226.         $persons $this->em->getRepository(Persons::class);
  1227.         // récupèrter les auteurs
  1228.         $this->context['view']->persons $playlists->getAuthors();
  1229.         $idclassifications = array(144);
  1230.         // trouver les auteurs
  1231.         $params_sql_persons = array(
  1232.             'fields' => array('idperson'),
  1233.             'special' => array(
  1234.                 'idclassifications' => $idclassifications,
  1235.                 'persons' => array(
  1236.                     'group' => array('persons' => 'idperson')
  1237.                 )
  1238.             ),
  1239.             'count_disctint_by' => array('persons' => 'idperson'),
  1240.             'dbg' => array('persons_playlists','Auteurs des playlist par l\'auteur'),
  1241.         );
  1242.         $this->context['view']->nb_persons_total $playlists->countListPlaylists($params_sql_persons);
  1243.         $params_sql_persons['limit'] = array($this->getLimitStart(),$this->perPage);
  1244.         $results $playlists->getListPlaylists($params_sql_persons);
  1245.         foreach($results as $k=>$v) {
  1246.             $idpersons[$v['idperson']] = $v['idperson'];
  1247.         }
  1248.         // trouver les playlists
  1249.         if(!empty($idpersons)) {
  1250.             $params_sql_playlists = array(
  1251.                 'special' => array(
  1252.                     'idclassifications' => $idclassifications,
  1253.                     'idpersons' => $idpersons,
  1254.                 ),
  1255.                 'limit' => array(0,1000),
  1256.                 'dbg' => array('texts_playlists','Playlists le texte par l\'auteur'),
  1257.             );
  1258.             $list $playlists->getListPlaylists($params_sql_playlists);
  1259.             if(!empty($list)) {
  1260.                 foreach($list as $playlist) {
  1261.                     if(!empty($playlist['idperson'])) {
  1262.                         foreach($playlist['idperson'] as $idperson=>$author) {
  1263.                             if(empty($authors[$author['idperson']])) {
  1264.                                 $authors[$author['idperson']] = $author;
  1265.                                 $thumbnail $persons->getVignettePerson($author['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
  1266.                                 $thumbnail_flou $persons->getVignettePerson($author['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop''blur' => true));
  1267.                                 if(strpos($thumbnail'normal-def')===false) {
  1268.                                     $authors[$author['idperson']]['photo'] = $thumbnail;
  1269.                                     $authors[$author['idperson']]['photo_flou'] = $thumbnail_flou;
  1270.                                 }
  1271.                             }
  1272.                         }
  1273.                         foreach($playlist['idtext'] as $idtext=>$text) {
  1274.                             $authors[$author['idperson']]['texts'][$idtext] = $text;
  1275.                             $authors[$author['idperson']]['texts'][$idtext]['url_clean_playlist'] = $playlist['urlClean'];
  1276.                         }
  1277.                         if(count($authors[$author['idperson']]['texts'])>4) {
  1278.                             $authors[$author['idperson']]['is_list'] = true;
  1279.                         }
  1280.                     }
  1281.                 }
  1282.             }
  1283.             if(!empty($authors)) {
  1284.                 $this->context['view']->authors $authors;
  1285.             }
  1286.         }
  1287.         $this->context['view']->pagination $this->getPagination($this->context['view']->nb_persons_total);
  1288.         return $this->view('editions/videos.html.twig');
  1289.     }
  1290.     // {{{ action_textes_auteurs()
  1291.     /** Textes par leur auteur
  1292.      *
  1293.      * @Route("/editions/{slug}/textes-auteurs/", name="edition_textes_auters")
  1294.      *
  1295.      */
  1296.     public function action_textes_auteurs($slug null$params = array())
  1297.     {
  1298.         if(!is_null($slug)){
  1299.             $this->InitController($slug'videos');
  1300.         }
  1301.         else if(empty($params)){
  1302.             return null;
  1303.         }
  1304.         $execute true;
  1305.         if(!empty($params['count_only'])){
  1306.             $execute false;
  1307.         }
  1308.         if($execute){
  1309.             $this->setLocate([=> 'Textes par leurs auteur(e)s']);
  1310.             $this->action_spectacles(null, [
  1311.                 'get_spectacles_with_multimedias' => true,
  1312.                 'stop_redirect' => true
  1313.             ]);
  1314.             $this->context['view']->type 'textes-auteurs';
  1315.         }
  1316.         $default_days 365;
  1317.         $idclassifications = array(144);
  1318.         $limit_query = array($this->getLimitStart(),$this->perPage);
  1319.         $this->context['view']->menu_periodes = array(
  1320.             'all' => array(
  1321.                 'unset' => array('saison''prochains')
  1322.             ),
  1323.             'affiche' => array(
  1324.                 'unset' => array('saison''plus_proche')
  1325.             )
  1326.         );
  1327.         // tous les spectacles ou ceux à l'affiche
  1328.         $this->context['view']->periode_spectacle 'affiche';
  1329.         if(!empty($this->context['params']['periode']) && !empty($this->context['view']->menu_periodes[$this->context['params']['periode']])) {
  1330.             $this->context['view']->periode_spectacle $this->context['params']['periode'];
  1331.         }
  1332.         //Nous indiquons à la vue le filtre actif de l'utilisateur
  1333.         $this->context['view']->{'periode_'.$this->context['view']->periode_spectacle} = true;
  1334.         //Nous utilisons les filtres par defauts
  1335.         $this->getCommonSearch(array(
  1336.             'saisons_annees' => $this->getListSeasonsYears($this->em->getRepository(Playlists::class)->getSpectaclesAnneesSaisons($idclassifications)),
  1337.             'nb_days' => $default_days,
  1338.         ));
  1339.         $this->getCommonSearchView();
  1340.         //Nous préparons le where pour indiquer à la requête que nous souhaitons des résultats en lien avec les contacts
  1341.         $where_idcontact ' AND t.idcontact_publisher='.((int)$this->idcontact);
  1342.         // les spectacles à l'affiche avec des textes nonfictif
  1343.         $params_sql_spectacles $this->setCommonSearchSpectacles(array(
  1344.             'params' => array(
  1345.                 'where' => $where_idcontact,
  1346.                 'limit' => 'all',
  1347.                 'groupby' => 't.idtext'
  1348.             ),
  1349.             'special' => array(
  1350.                 'count_only_distinct' => 't.idtext',
  1351.                 'playlists' => array(
  1352.                     'text' => true,
  1353.                     'idclassifications' => $idclassifications// par l'auteur
  1354.                 ),
  1355.                 'textfictif' => 0,
  1356.                 'plus_proche' => true,
  1357.             ),
  1358.             'dbg' => array('spectacles_auteurs_affiche','Texte par l\'auteur à l\'affiche'),
  1359.         ));
  1360.         //Nous structurons les requêtes avec les différents liens possibles.
  1361.         // all => unset > saison, prochains
  1362.         // affiche => unset > saison, plus_proche
  1363.         foreach($this->context['view']->menu_periodes AS $k => $value){
  1364.             $params_sql_spectacles_count $params_sql_spectacles;
  1365.             foreach($value['unset'] AS $unset){
  1366.                 unset($params_sql_spectacles_count['special'][$unset]);
  1367.                 if($this->context['view']->periode_spectacle==$k) {
  1368.                     unset($params_sql_spectacles['special'][$unset]);
  1369.                 }
  1370.             }
  1371.             //Si l'utilisateur à sélectionné une région
  1372.             if(!empty($this->context['params']['area'])){
  1373.                 $params_sql_spectacles_count['special']['get_schedule_ville'] = $this->context['params']['area'];
  1374.                 $params_sql_spectacles['special']['get_schedule_ville'] = $this->context['params']['area'];
  1375.             }
  1376.             //On compte et stockons le nombre de résultats des différents filtres possibles
  1377.             $this->context['view']->nb_spectacles_total[$k] = $this->spectacles->countListSpectacles($params_sql_spectacles_count);
  1378.         }
  1379.         if($execute){
  1380.             if($this->context['view']->periode_spectacle=='affiche') {
  1381.                 $params_sql_spectacles['special']['prochains'] = $this->context['view']->days;
  1382.             }
  1383.             //Nous limitons le nombre de résultat
  1384.             $params_sql_spectacles['params']['limit'] = $limit_query;
  1385.             //Nous executons la requête
  1386.             $list_spectacles $this->spectacles->getListSpectacles($params_sql_spectacles);
  1387.             //Nous récupérons les textes en lien avec les différents spectacles précédemment récupérés
  1388.             $this->context['view']->texts $this->em->getRepository(Texts::class)->getTextsFromSpectacles($list_spectacles);
  1389.             // on doit trouver la playlist le texte par l'auteur
  1390.             if(isset($this->context['view']->texts)) {
  1391.                 foreach ($this->context['view']->texts as $k => $v) {
  1392.                     // voir s'il y a des contenus le texte par l'auteur
  1393.                     if ($this->em->getRepository(Playlists::class)->countPlaylists('texts'$v['idtext'], 'class_texte_parauteur') > 0) {
  1394.                         $playlist $this->em->getRepository(Playlists::class)->getByClassification('texts'$v['idtext'], 'class_texte_parauteur');
  1395.                         $this->context['view']->texts[$k]['url_clean_more'] = 'playlist/id/' $playlist['urlClean'];
  1396.                         $playlists $this->em->getRepository(Playlists::class);
  1397.                         $sql 'SELECT p.idplaylist
  1398.                             FROM playlists p
  1399.                             LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
  1400.                             WHERE pc.idclassification = 144 AND p.idtext = '.$v['idtext'].'
  1401.                             GROUP BY p.idtext';
  1402.                         $x $playlists->queryOne($sql);
  1403.                         $pl $playlists->getInfosPlaylist(
  1404.                             $x,
  1405.                             array(
  1406.                                 'all' => true,
  1407.                                 'multimedias' => true,
  1408.                             ),
  1409.                             array('format_vignette' => true)
  1410.                         );
  1411.                         $video = (array_shift($pl['multimedias']));
  1412.                         $this->context['view']->texts[$k]['playlist']['vignette'] = $video['vignette'];
  1413.                         $this->context['view']->texts[$k]['playlist']['vignette_flou'] = $video['vignette_flou'];
  1414.                         $this->context['view']->texts[$k]['playlist']['thtv'] = true;
  1415.                         $this->context['view']->texts[$k]['playlist']['thtv_permalink'] = $video['permalink'];
  1416.                         $this->context['view']->texts[$k]['playlist']['url_clean_video'] = $playlist['urlClean'];
  1417.                     }
  1418.                 }
  1419.             }
  1420.             //On préparation la pagination
  1421.             $this->context['view']->pagination $this->getPagination($this->context['view']->nb_spectacles_total[$this->context['view']->periode_spectacle]);
  1422.             $this->context['view']->pagination['texte'] = true;
  1423.             $this->get_asides_videos();
  1424.             $this->get_asides_common('textes');
  1425.         }
  1426.         return $this->view('editions/textes-auteurs.html.twig');
  1427.     }
  1428.     // }}}
  1429.     // {{{ action_evenements()
  1430.     /** Page qui rassemble tous les évènements
  1431.      *
  1432.      * @Route("/editions/{slug}/evenements/", name="edition_evenements")
  1433.      *
  1434.      */
  1435.     public function action_evenements($slug null)
  1436.     {
  1437.         $this->InitController($slug'evenements');
  1438.         $title_sub_evenements html_entity_decode('&Eacute;vènements');
  1439.         $this->setLocate([=> $title_sub_evenements]);
  1440.         $this->extra_locate $this->extra_title $title_sub_evenements;
  1441.         $this->getSQLEvenements();
  1442.         if($this->view->evenements_counts['total'] == 0){
  1443.             return $this->redirectToRoute('edition_view', ['slug' => $this->context['view']->url_clean]);
  1444.         }
  1445.         // on affiche les descriptions sur les evenements
  1446.         $this->context['view']->is_description true;
  1447.         $this->get_asides_common('evenements', ['carte_url_custom' => '/editions/'.$this->context['view']->url_clean.'/evenements/area/get_id']);
  1448.         return $this->view('editions/evenements.html.twig');
  1449.     }
  1450.     // }}}
  1451.     // {{{ action_telechargements()
  1452.     /** Accueil pour un éditeur
  1453.      *
  1454.      * @Route("/editions/{slug}/telechargements/", name="edition_telechargements")
  1455.      *
  1456.      */
  1457.     public function action_telechargements($slug null)
  1458.     {
  1459.         $this->InitController($slug'telechargements');
  1460.         $title_sub_evenements html_entity_decode('&Eacute;V&Egrave;NEMENTS');
  1461.         $this->setLocate([=> $title_sub_evenements]);
  1462.         $files $this->em->getRepository(Files::class);
  1463.         $classifications $this->em->getRepository(Classifications::class);
  1464.         // classifications des spectacles
  1465.         $classifications_list $classifications->getClassificationList('files','contacts',null,array(1),'get_value');
  1466.         // liste des fichiers
  1467.         $params_object_files = array(
  1468.             'valid' => 1,
  1469.             'publish' => 1,
  1470.             'force_mode' => 'file',
  1471.             'vignette_width' => 250,
  1472.             'debug_sql_associate' => false,
  1473.         );
  1474.         $object_files $files->getObjectFiles($this->idcontact,'contacts',$classifications_list,$params_object_files);
  1475.         if(!empty($object_files)) {
  1476.             foreach($object_files as $k=>$v) {
  1477.                 if(!empty($v['saison'])) {
  1478.                     $saisons[$v['saison']] = $v['saison'];
  1479.                     // trouver kles autres associations
  1480.                     $v['objects'] = $files->getObjects($v['idfile'],array('object' => 'contacts''idobject' => $this->idcontact));
  1481.                     if(!empty($v['objects'])) {
  1482.                         foreach($v['objects'] as $kb=>$vb) {
  1483.                             $v['objects'][$vb['object']][$vb['idobject']] = $vb;
  1484.                         }
  1485.                     }
  1486.                     $this->context['view']->files['general'][$k] = $v;
  1487.                 }
  1488.             }
  1489.             $this->context['view']->is_file true;
  1490.             if(!empty($saisons)) {
  1491.                 //setDebug($saisons);
  1492.             }
  1493.         }
  1494.         return $this->view('editions/telechargements.html.twig');
  1495.     }
  1496.     // }}}
  1497.     // {{{ action_infos_generales()
  1498.     /** action permettant la modification des informations générales à l'édition
  1499.      *
  1500.      * @Route("/editions/{slug}/infos-generales", name="edition_infos_generales")
  1501.      *
  1502.      * @access public
  1503.      */
  1504.     public function action_infos_generales($slug nullRequest $requestTheatreMail $TheatreMailEditUtils $editUtils)
  1505.     {
  1506.         $this->InitController($slug'infos-generales');
  1507.         $this->extra_locate $this->extra_title 'Modifier vos informations';
  1508.         $idcontact $this->idcontact;
  1509.         // si connecté, instancier la classe utilitaires d'édition
  1510.         if($this->getUser() instanceof Extranetusers) {
  1511.             // paramètre d'instanciation
  1512.             $params_edit = array(
  1513.                 'idobject' => $idcontact,
  1514.                 'object' => 'contacts',
  1515.                 'em' => $this->em
  1516.             );
  1517.             $url_redirect '/editions/'.$this->context['view']->url_clean.'/';
  1518.             $object_fields = array(
  1519.                 'url',
  1520.                 'facebook',
  1521.                 'twitter',
  1522.                 'instagram',
  1523.                 'organisation',
  1524.                 'nom_suite',
  1525.                 'idtypestructure',
  1526.                 'license',
  1527.                 'address1',
  1528.                 'address2',
  1529.                 'zip',
  1530.                 'city',
  1531.                 'country',
  1532.                 'phone1',
  1533.                 'phone2',
  1534.                 'fax',
  1535.                 'email1',
  1536.                 'email1_online',
  1537.             );
  1538.             // controlleur pour l'edition
  1539.             $editUtils->setParams($this->context,$params_edit);
  1540.             // les droits
  1541.             $object_rights $editUtils->checkObjectRights();
  1542.             // checker si la personne connectée à les droits sur cette fiche
  1543.             if(!empty($object_rights['update'])){
  1544.                 $data $this->infos;
  1545.                 $GLOBALS['from_id'] = $data['idmultimedia'];
  1546.                 // les champs
  1547.                 $fields = array('text','link','facebook','twitter','instagram');
  1548.                 $form $this->get('form.factory')->createBuilder(FormType::class, $this->infos, [
  1549.                     'attr' => [
  1550.                         'id' => 'masterform'
  1551.                     ]
  1552.                 ]);
  1553.                 $form->add('organisation',TextType::class, [
  1554.                     'label' => 'Nom court',
  1555.                     'constraints' => [
  1556.                         new NotBlank([
  1557.                             'message' => 'Nom court : veuillez préciser le nom de votre structure'
  1558.                         ])
  1559.                     ],
  1560.                     'attr' => [
  1561.                         'size'=>'45',
  1562.                         'id' => 'organisation'
  1563.                     ]
  1564.                 ]);
  1565.                 $form->add('nom_suite',TextType::class, [
  1566.                     'label' => 'Nom complet',
  1567.                     'required' => false,
  1568.                     'attr' => [
  1569.                         'size'=>'45',
  1570.                         'id' => 'nom_suite'
  1571.                     ]
  1572.                 ]);
  1573.                 // select type structure
  1574.                 $typesstructures $this->em->getRepository(Typesstructures::class);
  1575.                 $typestructure_list $typesstructures->getTypeStructureList(true);
  1576.                 $typestructure_list[] = 'Choisissez dans la liste';
  1577.                 $form->add'idtypestructure'ChoiceType::class, [
  1578.                     'label' => 'Type de structure',
  1579.                     'choices' => array_flip($typestructure_list),
  1580.                     'required' => false,
  1581.                     'attr' => [
  1582.                         'class'=>'select_typestructure',
  1583.                         'id' => 'idtypestructure'
  1584.                     ]
  1585.                 ]);
  1586.                 $form->add('license',TextType::class, [
  1587.                     'label' => 'Licence de spectacle',
  1588.                     'required' => false,
  1589.                     'attr' => [
  1590.                         'size'=>'45',
  1591.                         'id' => 'license'
  1592.                     ]
  1593.                 ]);
  1594.                 $form->add('address1',TextType::class, [
  1595.                     'label' => 'Adresse',
  1596.                     'constraints' => [
  1597.                         new NotBlank([
  1598.                             'message' => 'Adresse : veuillez préciser l\'adresse'
  1599.                         ])
  1600.                     ],
  1601.                     'attr' => [
  1602.                         'size' => '45',
  1603.                         'id' => 'address1'
  1604.                     ]
  1605.                 ]);
  1606.                 $form->add('address2',TextType::class, [
  1607.                     'label' => 'Adresse suite',
  1608.                     'required' => false,
  1609.                     'attr' => [
  1610.                         'size'=>'45',
  1611.                         'id' => 'address2'
  1612.                     ]
  1613.                 ]);
  1614.                 $form->add('zip'TextType::class, [
  1615.                     'label' => 'Code postal',
  1616.                     'constraints' => [
  1617.                         new NotBlank([
  1618.                             'message' => 'Code postal : veuillez préciser le code postal'
  1619.                         ])
  1620.                     ],
  1621.                     'attr' => [
  1622.                         'size'=>'45',
  1623.                         'id' => 'zip'
  1624.                     ]
  1625.                 ]);
  1626.                 $form->add('city'TextType::class, [
  1627.                     'label' => 'Ville',
  1628.                     'constraints' => [
  1629.                         new NotBlank([
  1630.                             'message' => 'Ville : veuillez préciser la ville'
  1631.                         ])
  1632.                     ],
  1633.                     'attr' => [
  1634.                         'size'=>'45',
  1635.                         'id' => 'city'
  1636.                     ]
  1637.                 ]);
  1638.                 $form->add('country',ChoiceType::class, [
  1639.                     'label'=> 'Pays',
  1640.                     'choices' => $this->em->getRepository(Contacts::class)->getCountryList(),
  1641.                     'constraints' => [
  1642.                         new NotBlank([
  1643.                             'message' => 'Pays : veuillez préciser le pays'
  1644.                         ])
  1645.                     ],
  1646.                     'attr' => [
  1647.                         'id' => 'country'
  1648.                     ]
  1649.                 ]);
  1650.                 $form->add('phone1',TextType::class, [
  1651.                     'label' => 'Téléphone général',
  1652.                     'required' => false,
  1653.                     'attr' => [
  1654.                         'size'=>'45',
  1655.                         'id' => 'phone1'
  1656.                     ]
  1657.                 ]);
  1658.                 $form->add('phone2',TextType::class, [
  1659.                     'label' => 'Téléphone location',
  1660.                     'required' => false,
  1661.                     'attr' => [
  1662.                         'size'=>'45',
  1663.                         'id' => 'phone2'
  1664.                     ]
  1665.                 ]);
  1666.                 $form->add('fax',TextType::class, [
  1667.                     'label' => 'Télécopie',
  1668.                     'required' => false,
  1669.                     'attr' => [
  1670.                         'size'=>'45',
  1671.                         'id' => 'fax'
  1672.                     ]
  1673.                 ]);
  1674.                 $form->add('email1',TextType::class, [
  1675.                     'label' => 'Email général',
  1676.                     'required' => false,
  1677.                     'constraints' => [
  1678. //                        new NotBlank([
  1679. //                            'message' => 'Email : veuillez préciser un email'
  1680. //                        ]),
  1681.                         New Email([
  1682.                             'message' => 'Email général : l\'adresse email principale semble incorrecte'
  1683.                         ])
  1684.                     ],
  1685.                     'attr' => [
  1686.                         'size'=>'45',
  1687.                         'id' => 'email1'
  1688.                     ]
  1689.                 ]);
  1690.                 // masquer les adresses ?
  1691.                 // masquer les adresses ?
  1692.                 $form->add('email1_online'ChoiceType::class, [
  1693.                     'placeholder' => false,
  1694.                     'label' => 'Email général visible',
  1695.                     'expanded' => true,
  1696.                     'multiple' => false,
  1697.                     'choices' => [
  1698.                         'oui' => 1,
  1699.                         'non' => 0
  1700.                     ],
  1701.                     'required' => false,
  1702.                 ]);
  1703.                 $form->add('url'TextType::class, [
  1704.                     'label' => 'Site internet',
  1705.                     'required' => false,
  1706.                     'constraints' => [
  1707.                         New Url([
  1708.                             'protocols' => ['http''https'],
  1709.                             'message' => 'Site internet : l\'adresse du site semble incorrecte (elle doit commencer par https://)'
  1710.                         ]),
  1711.                         new CheckWebsite([
  1712.                             'message' => 'Site Internet : le site Internet que vous avez précisé ne semble pas disponible ! Vérifiez qu\'il s\'agit bien de la bonne adresse'
  1713.                         ])
  1714.                     ],
  1715.                     'attr' => [
  1716.                         'size'=>'45',
  1717.                         'id' => 'link'
  1718.                     ]
  1719.                 ]);
  1720.                 $form->add('facebook'TextType::class, [
  1721.                     'label' => 'Profil Facebook',
  1722.                     'required' => false,
  1723.                     'constraints' => [
  1724.                         New Url([
  1725.                             'protocols' => ['http''https'],
  1726.                             'message' => 'Profil Facebook : l\'adresse du profil facebook semble incorrecte (elle doit commencer par httpss://)'
  1727.                         ])
  1728.                     ],
  1729.                     'attr' => [
  1730.                         'size'=>'45',
  1731.                         'id' => 'facebook'
  1732.                     ]
  1733.                 ]);
  1734.                 $form->add('twitter'TextType::class, [
  1735.                     'label' => 'Profil Twitter',
  1736.                     'required' => false,
  1737.                     'constraints' => [
  1738.                         New Url([
  1739.                             'protocols' => ['http''https'],
  1740.                             'message' => 'Profil Twitter : l\'adresse du profil twitter semble incorrecte (elle doit commencer par httpss://)'
  1741.                         ])
  1742.                     ],
  1743.                     'attr' => [
  1744.                         'size'=>'45',
  1745.                         'id' => 'twitter'
  1746.                     ]
  1747.                 ]);
  1748.                 $form->add('instagram'TextType::class, [
  1749.                     'label' => 'Profil Instagram',
  1750.                     'required' => false,
  1751.                     'constraints' => [
  1752.                         New Url([
  1753.                             'protocols' => ['http''https'],
  1754.                             'message' => 'Profil Instagram : l\'adresse du profil instagram semble incorrecte (elle doit commencer par httpss://)'
  1755.                         ])
  1756.                     ],
  1757.                     'attr' => [
  1758.                         'size'=>'45',
  1759.                         'id' => 'instagram'
  1760.                     ]
  1761.                 ]);
  1762.                 // choix de la vidéo de tête
  1763.                 $form->add('idmultimedia'RelationsType::class, [
  1764.                     'label' => 'Vidéo de tête',
  1765.                     'type_object' => 'form',
  1766.                     'type_dbdo'=>'multimedias',
  1767.                     'dbdo' => 'contacts',
  1768.                     'relat' => 'simple'
  1769.                 ]);
  1770.                 $form->add('validation'SubmitType::class, [
  1771.                     'label' => 'Enregistrer les informations',
  1772.                     'attr' => [
  1773.                         'class'=>'boutform boutbig'
  1774.                     ]
  1775.                 ]); // validation
  1776.                 $form $form->getForm();
  1777.                 $form->handleRequest($request);
  1778.                 // enregistrement des informations
  1779.                 if($form->isSubmitted() && $form->isValid()) {
  1780.                     foreach($object_fields as $f) {
  1781.                         if($form->has($f)) {
  1782.                             $values[$f] = $form->get($f)->getData();
  1783.                         }
  1784.                     }
  1785.                     // enregistrer la dernière version validée par un administrateur (fige)
  1786.                     // les versions intermédiaires ne seront pas enregistrées
  1787.                     if(!empty($data['valid_version'])) {
  1788.                         $values['other_versions'] = serialize($data);
  1789.                         $values['valid_version']= 0;// remettre à zero la valid version
  1790.                     }
  1791.                     // un multimedia sélectionné ?
  1792.                     $idmultimedia $form->get('idmultimedia')->getViewData();
  1793.                     $values['idmultimedia'] = 0;
  1794.                     if(!empty($idmultimedia)){
  1795.                         $values['idmultimedia'] = $idmultimedia;
  1796.                     }
  1797.                     // enregistrer les nouvelles versions
  1798.                     $editUtils->obj->setUpdateFields($values);
  1799.                     if($editUtils->obj->setData($idcontact)) {
  1800.                         // envoyer un mail à l'admin
  1801.                         $editUtils->sendAlerte($idcontact,'update','Mise à jour des informations générales'$TheatreMail);
  1802. //                        UtilsEdit::logAction($idcontact,null,'contacts',$this->context['session']->getValue('idextranetuser'));
  1803.                         // prévenir du success
  1804.                         $reponse['save_ok'] = 'Vos informations ont bien été enregistrées';
  1805.                         return $this->redirect('/editions/'.$data['url_clean'].'/infos-generales?update_success');
  1806.                         // les nouvelles valeurs
  1807.                         $data $values;
  1808.                         // pour le pays
  1809.                         $data['country_code'] = $data['country'];
  1810.                     } else {
  1811.                         $this->logger->error('Pb pendant l\'enregistrement d\'un contact');
  1812.                     }
  1813.                 }
  1814.                 // récupérer les infos
  1815.                 if(!$form->isSubmitted()) {
  1816. //                    $form->setDefaults($data);
  1817.                     $form->get('email1_online')->setData(0);
  1818.                     if ($this->infos['email1Online']) {
  1819.                         $form->get('email1_online')->setData($data['email1Online']);
  1820.                     }
  1821.                     if (empty($data['country_code'])) {
  1822.                         $form->setData(array('country' => 'FR'));
  1823.                     } else {
  1824.                         $form->setData(array('country' => strtoupper($data['country_code'])));
  1825.                     }
  1826.                     if (empty($data['idtypestructure'])) {
  1827.                         $form->setData(array('idtypestructure' => 0));
  1828.                     }
  1829.                 }
  1830.             }
  1831.             // la personne n'a pas les droits => renvoi sur le formulaire de demande
  1832.             else
  1833.             {
  1834.                 return $this->redirect($url_redirect.'autorisation/');
  1835.             }
  1836.         } else { // personne non loguée
  1837.             // rediriger vers montheatre/connexion
  1838.             return $this->redirect('/montheatre/connexion?urifrom=/editions/'.$this->context['view']->url_clean.'/infos-generales&entete_connexion=editions');
  1839.         }
  1840.         $this->get_asides_admin();
  1841.         $this->view->js_more[] = 'ajax.relation.js';
  1842.         return $this->view('editions/infos-generales.html.twig', [
  1843.             'form' => $form->createView()
  1844.         ]);
  1845.     }
  1846.     // }}}
  1847.     // {{{ action_autorisation()
  1848.     /** Demander à l'utilisateur s'il possède l'autorisation de modifier la page contact
  1849.      *
  1850.      * @Route("/editions/{slug}/autorisation", name="edition_autorisation")
  1851.      *
  1852.      */
  1853.     public function action_autorisation($slug nullUploadUtils $editUtilsFilesController $files_utilsRequest $request)
  1854.     {
  1855.         return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
  1856.     }
  1857.     // }}}
  1858.     /** FOrmulaire d'édition de présentation du contact
  1859.      *
  1860.      * @Route("/editions/{slug}/presentation-edit", name="edition_presentation_edit")
  1861.      *
  1862.      */
  1863.     public function action_presentation_edit($slug nullUploadUtils $uploadUtilsRequest $requestTheatreMail $TheatreMailUtilsEdit $utilsEditEditUtils $editUtils)
  1864.     {
  1865.         return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
  1866.     }
  1867.     // }}}
  1868.     // {{{ action_bandeau()
  1869.     /** Textes action_bandeau
  1870.      *
  1871.      * @Route("/editions/{slug}/bandeau/", name="edition_bandeau")
  1872.      *
  1873.      */
  1874.     public function action_bandeau($slug nullUploadUtils $editUtilsFilesController $files_utilsRequest $request)
  1875.     {
  1876.         $GLOBALS['rub_courante'] = 'contacts';
  1877.         $this->InitController($slug'bandeau');
  1878.         $session $this->context['session'];
  1879.         $idcontact $this->idcontact;
  1880.         // si connecté, instancier la classe utilitaires d'édition
  1881.         if($this->getUser() instanceof Extranetusers) {
  1882.             // paramètre d'instanciation
  1883.             $params_edit = array(
  1884.                 'idobject' => $idcontact,
  1885.                 'object' => 'contacts',
  1886.             );
  1887.             $url_redirect '/editions/'.$this->context['view']->url_clean.'/';
  1888.             // controlleur pour l'edition
  1889.             $editUtils->load($this->context,$params_edit);
  1890.             // les droits
  1891.             $this->view->object_rights $object_rights $editUtils->checkObjectRights();
  1892.             // checker si la personne connectée à les droits sur cette fiche
  1893.             if(empty($object_rights['update'])) {
  1894.                 return $this->redirect($url_redirect.'autorisation/');
  1895.             }
  1896.         } else { // personne non loguée
  1897.             // rediriger vers montheatre/connexion
  1898.             return $this->redirectToRoute('app_login', ['urifrom' => '/editions/'.$this->context['view']->url_clean.'/bandeau''entete_connexion' => 'editions']);
  1899.         }
  1900.         $this->extra_locate $this->extra_title 'Bandeau';
  1901.         $this->style_more[] = array(
  1902.             '/navigation/js/Jcrop/css/jquery.Jcrop.css',
  1903.             '/navigation/js/upload/fineuploader.css'
  1904.         );
  1905.         $this->js_more[] = '/Jcrop/js/jquery.Jcrop.min.js';
  1906.         $this->js_more[] = 'upload/jquery.fineuploader-3.0.min.js';
  1907.         $this->get_asides_admin();
  1908.         return $this->view('editions/bandeau.html.twig');
  1909.     }
  1910.     // }}}
  1911.     // {{{ get_textes_originaux()
  1912.     /** Textes originaux de l'éditeur
  1913.      *
  1914.      */
  1915.     public function get_textes_originaux() {
  1916.         $persons $this->em->getRepository(Persons::class);
  1917.         $idcontact $this->idcontact;
  1918.         // text originaux d'un editeur
  1919.         $sql_originaux 'SELECT idtext, idgenretext FROM texts WHERE type=0 AND idcontact_publisher='.$idcontact;
  1920.         $texts_originaux $persons->queryAll($sql_originaux);
  1921.         if(!empty($texts_originaux)) {
  1922.             foreach($texts_originaux as $k=>$v) {
  1923.                 // nb de texte
  1924.                 $this->view->nb_textes count($texts_originaux);
  1925.                 if($v['idgenretext']==|| $v['idgenretext']==NULL) {
  1926.                     $array_texts_theatre[] = $v['idtext'];
  1927.                 } else {
  1928.                     $array_texts_autres[] = $v['idtext'];
  1929.                 }
  1930.                 $array_texts_tous[] = $v['idtext'];
  1931.             }
  1932.             if(!empty($array_texts_theatre)) {
  1933.                 $liste_texts_theatre join(','$array_texts_theatre);
  1934.             } else { // on sort tous car par de texte de théâtre !
  1935.                 $liste_texts_theatre join(','$array_texts_tous);
  1936.             }
  1937.         } else {
  1938.             $liste_texts_theatre null;
  1939.         }
  1940.         return $liste_texts_theatre;
  1941.     }
  1942.     // }}}
  1943.     // {{{ action_documents()
  1944.     /** Page qui listes les documents PDF
  1945.      *
  1946.      * @Route("/editions/{slug}/documents/", name="edition_documents")
  1947.      *
  1948.      * @access public
  1949.      * @return void
  1950.      *
  1951.      */
  1952.     public function action_documents($slug nullUploadUtils $editUtilsFilesController $files_utilsRequest $request)
  1953.     {
  1954.         $GLOBALS['rub_courante'] = 'contacts';
  1955.         $this->InitController($slug'documents');
  1956.         // paramètre d'instanciation
  1957.         $params_edit = array(
  1958.             'idobject' => $this->idcontact,
  1959.             'object' => 'contacts',
  1960.         );
  1961.         // si connecté, instancier la classe utilitaires d'édition
  1962.         if($this->getUser() instanceof Extranetusers) {
  1963.             // controlleur pour l'edition
  1964.             $editUtils->load($this->context,$params_edit);
  1965.             // les droits
  1966.             $object_rights $editUtils->checkObjectRights();
  1967.             // checker si la personne connectée à les droits sur cette fiche
  1968.             if(!empty($object_rights['update'])) {
  1969.                 $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  1970.                     'attr' => [
  1971.                         'id' => 'masterform',
  1972.                         'novalidate' => true
  1973.                     ]
  1974.                 ]);
  1975.                 // pour la gestion des fichiers
  1976.                 $files_utils->InitFilesController($this->context,$params_edit);
  1977.                 $files_utils->documents($request);
  1978.                 $this->view->form $files_utils->context['form']->createView();
  1979.             } else { // la personne n'a pas les droits => renvoi sur le formulaire de demande
  1980.                 return $this->redirect($this->context['view']->url_clean.'/autorisation/');
  1981.             }
  1982.         } else { // personne non loguée
  1983.             // rediriger vers montheatre/connexion
  1984.             return $this->redirectToRoute('app_login', ['urifrom' => $this->context['view']->url_clean.'/documents''entete_connexion' => $params_edit['object']]);
  1985.         }
  1986.         $this->get_asides_admin();
  1987.         /* géré par Files_edit */
  1988.         $this->extra_locate $this->extra_title 'Documents associés';
  1989.         // style et js en plus pour les champs de relation
  1990.         $this->view->style_more[] = 'relat';
  1991.         $this->view->js_more[] = 'ajax.relation.js';
  1992.         return $this->view('editions/documents.html.twig');
  1993.     }
  1994.     // }}}
  1995.     // {{{ action_documents_edit()
  1996.     /** Ajouter des documents à la structure
  1997.      *
  1998.      * @Route("/editions/{slug}/documents-edit/", name="edition_documents_edit")
  1999.      *
  2000.      * @access public
  2001.      * @return void
  2002.      */
  2003.     public function action_documents_edit($slug nullUploadUtils $uploadUtilsFilesController $files_utilsRequest $requestEditUtils $editUtils)
  2004.     {
  2005.         $GLOBALS['rub_courante'] = 'contacts';
  2006.         $this->InitController($slug'documents');
  2007.         $url_folder $this->context['view']->data_object['url_folder'] = '/editions/'.$this->context['view']->url_clean;
  2008.         $this->context['view']->data_object['url_folder_full'] = $url_folder;
  2009.         $session $this->context['session'];
  2010.         // paramètre d'instanciation
  2011.         $params_edit = array(
  2012.             'idobject' => $this->idcontact,
  2013.             'object' => 'contacts',
  2014.             'page' => 'editions',
  2015.         );
  2016.         // si connecté, instancier la classe utilitaires d'édition
  2017.         if($this->getUser() instanceof Extranetusers) {
  2018.             // controlleur pour l'edition
  2019.             $uploadUtils->load($this->context,$params_edit);
  2020.             // les droits
  2021.             $object_rights $editUtils->checkObjectRights();
  2022.             $this->view->object_rights $object_rights;
  2023.             // checker si la personne connectée à les droits sur cette fiche
  2024.             if(!empty($object_rights['update'])) {
  2025.                 // pour la gestion des fichiers
  2026.                 $files_utils->InitFilesController($this->context,$params_edit);
  2027.                 $response $files_utils->documents_edit($request$editUtils);
  2028.                 if($response instanceof RedirectResponse){
  2029.                     return $response;
  2030.                 }
  2031.             } else { // la personne n'a pas les droits => renvoi sur le formulaire de demande
  2032.                 return $this->redirect($url_folder.'/autorisation/');
  2033.             }
  2034.         } else { // personne non loguée
  2035.             // rediriger vers montheatre/connexion
  2036.             return $this->redirectToRoute('app_login', ['urifrom' => $url_folder.'/documents-edit''entete_connexion' => $params_edit['object']]);
  2037.         }
  2038.         $this->get_asides_admin();
  2039.         /* géré par Files_edit */
  2040.         $this->extra_locate $this->extra_title 'Ajouter/modifier un document';
  2041.         $this->view->style_more[] = '/navigation/js/upload/fineuploader.css';
  2042.         $this->view->js_more[] = 'upload/jquery.fineuploader-3.0.min.js';
  2043.         // style et js en plus pour les champs de relation
  2044.         $this->view->style_more[] = 'relat.css';
  2045.         $this->view->js_more[] = 'ajax.relation.js';
  2046.         $this->context['view']->jquery_cal 'datepicker';
  2047.         return $this->view('editions/documents-edit.html.twig', [
  2048.             'form' => $files_utils->context['form']->createView()
  2049.         ]);
  2050.     }
  2051.     // }}}
  2052.     // {{{ get_textes_traduits()
  2053.     /** Textes traduits de l'éditeur
  2054.      *
  2055.      */
  2056.     public function get_textes_traduits() {
  2057.         $persons $this->em->getRepository(Persons::class);
  2058.         $idcontact $this->idcontact;
  2059.         $sql_traductions 'SELECT idtext FROM texts WHERE type=1 AND idcontact_publisher='.$idcontact;
  2060.         $texts_traductions $persons->queryAll($sql_traductions);
  2061.         if(!empty($texts_traductions)) {
  2062.             // nb de traductions
  2063.             $this->view->nb_traductions count($texts_traductions);
  2064.             foreach($texts_traductions as $k=>$v) {
  2065.                 $array_texts_traductions[] = $v['idtext'];
  2066.             }
  2067.             $liste_traductions join(',',$array_texts_traductions);
  2068.             // traductions de texte de theatre par un editeurs
  2069.             $sql_traductions_theatre 'SELECT tt.idtext FROM text_traduction tt, texts t
  2070.                                         WHERE t.idtext=tt.idtext
  2071.                                         AND (t.idgenretext=1 OR t.idgenretext IS NULL)
  2072.                                         AND tt.idtexttraduction IN ('.$liste_traductions.')';
  2073.             $traductions_theatre $persons->queryAll($sql_traductions_theatre);
  2074.             if(!empty($traductions_theatre)) {
  2075.                 foreach($traductions_theatre as $k=>$v) {
  2076.                     $array_traductions_theatre[] = $v['idtext'];
  2077.                 }
  2078.                 $liste_traductions_theatre join(','$array_traductions_theatre);
  2079.             } else {
  2080.                 $liste_traductions_theatre null;
  2081.             }
  2082.         } else {
  2083.             $liste_traductions null;
  2084.             $liste_traductions_theatre null;
  2085.         }
  2086.         return array(
  2087.             'liste_traductions' => $liste_traductions,
  2088.             'liste_traductions_theatre' => $liste_traductions_theatre
  2089.         );
  2090.     }
  2091.     // }}}
  2092.     /** Les asides communs aux pages biographies
  2093.      *
  2094.      */
  2095.     public function get_asides_biographies($type_page 'tous')
  2096.     {
  2097.         $menu_biographies = array(
  2098.             'auteurs' => array(
  2099.                 'name' => 'Tous les auteurs',
  2100.                 'key_filtre' => 'auteurs',
  2101.                 // 'count' => $spectacles_counts['prochains']
  2102.             ),
  2103.             // 'traducteurs' => array(
  2104.             //     'name' => 'Tous les traducteurs',
  2105.             //     'key_filtre' => 'traducteurs',
  2106.             //     // 'count' => $spectacles_counts['prochains']
  2107.             // ),
  2108.             // 'auteurs-affiche' => array(
  2109.             //     'name' => 'Les auteurs à l\'affiche',
  2110.             //     'key_filtre' => 'auteurs_affiche',
  2111.             //     'url' => '/editions/{v_url_clean}/auteurs/type/key_filtre/generate_params'
  2112.             //     // 'count' => $spectacles_counts['tous']
  2113.             // ),
  2114.             'decouverte-auteurs' => array(
  2115.                 'name' => 'Les auteurs par eux-mêmes',
  2116.                 'key_filtre' => 'decouverte-auteurs',
  2117.                 'url' => '/editions/{v_url_clean}/decouverte-auteurs',
  2118.             ),
  2119.         );
  2120.         //Tous les menus
  2121.         $this->asides->load(['url_lists' => array(
  2122.             'exec' => [
  2123.                 'color' => 'biographies',
  2124.                 'htmlstart' => true,
  2125.                 'htmlend' => (isset($this->view->menu_jours_auteurs)) ? false true
  2126.             ],
  2127.             'php' => array(
  2128.                 'method' => 'asidesUrlLists',
  2129.                 'urls' => $menu_biographies,
  2130.                 'url' => '/editions/{v_url_clean}/biographies/type/key_filtre/generate_params',
  2131.                 'params' => array(
  2132.                     'activate' => $this->view->type,
  2133.                 ),
  2134.                 'structure' => array(
  2135.                     'structure_classic' => array(
  2136.                         'd' => 'v_days',
  2137.                     )
  2138.                 )
  2139.             ),
  2140.             'title' => 'Voir'
  2141.         )]);
  2142.         if(isset($this->view->menu_jours_auteurs)){
  2143.             $this->asides->load(['url_lists,menu_days' => array(
  2144.                 'exec' => [
  2145.                     'color' => 'biographies',
  2146.                     'htmlend' => true
  2147.                 ],
  2148.                 'php' => array(
  2149.                     'method' => 'asidesUrlLists',
  2150.                     'urls' => $this->view->menu_jours,
  2151.                     'url' => '/editions/{v_url_clean}/auteurs/type/key_filtre/generate_params',
  2152.                     'params' => array(
  2153.                         'key_filtre' => $this->view->type,
  2154.                         'activate' => $this->context['view']->days
  2155.                     ),
  2156.                     'structure' => array(
  2157.                         'structure_classic' => array(
  2158.                             'd' => 'key_day',
  2159.                         )
  2160.                     )
  2161.                 ),
  2162.                 'title' => 'Recherche par période'
  2163.             )]);
  2164.         }
  2165.         // $this->asides->load(['recherche_texte.inc' => array(
  2166.         //     'exec' => ['htmlstart' => true, 'color'=>'biographies'],
  2167.         //     'action' => '/editions/editeurs'
  2168.         // )]);
  2169.         if(!empty($this->view->alphabet)){
  2170.             $this->asides->load(['recherche_alphabetique' => array(
  2171.                 'exec' => array(
  2172.                     'htmlstart' => true,
  2173.                     'htmlend' => true,
  2174.                     'color'=>'biographies'
  2175.                 ),
  2176.                 'php' => array(
  2177.                     'method' => 'asidesUrlLists',
  2178.                     'urls' => $this->view->alphabet,
  2179.                     'url' => '/editions/{v_url_clean}/biographies?lettre=key_letter',
  2180.                     'params' => [
  2181.                         'key_letter' => 'auto_key'
  2182.                     ]
  2183.                 ),
  2184.                 'title_seconds' => 'Recherche alphabétique'
  2185.             )]);
  2186.         }
  2187.         $this->get_asides_common('biographies');
  2188.     }
  2189.     // }}}
  2190.     /** Les asides communs aux pages textes
  2191.      *
  2192.      */
  2193.     public function get_asides_textes($type_page 'tous')
  2194.     {
  2195.         $menu_textes = array(
  2196.             'tous' => array(
  2197.                 'name' => 'Tous les textes',
  2198. //                'key_filtre' => 'tous',
  2199.                 'url' => '/editions/{v_url_clean}/textes/' //type/key_filtre
  2200.                 // 'count' => $spectacles_counts['prochains']
  2201.             )
  2202.             // 'traduits' => array(
  2203.             //     'name' => 'Textes traduits',
  2204.             //     'key_filtre' => 'traduits',
  2205.             //     // 'count' => $spectacles_counts['tous']
  2206.             // )
  2207.         );
  2208.         $this->asides->load(['url_lists' => array(
  2209.             'exec' => [
  2210.                 'color' => 'editions',
  2211.                 'htmlstart' => true,
  2212.                 'htmlend' => ($type_page == 'textes-auteurs') ? true false
  2213.             ],
  2214.             'php' => array(
  2215.                 'method' => 'asidesUrlLists',
  2216.                 'urls' => $menu_textes,
  2217.                 'params' => array(
  2218.                     'activate' => $type_page
  2219.                 )
  2220.             ),
  2221.             'title' => 'Voir'
  2222.         )
  2223.         ]);
  2224.         $this->asides->load(['par_annee' => array(
  2225.             'exec' => array(
  2226.                 'htmlend' => true,
  2227.             ),
  2228.             'php' => array(
  2229.                 'method' => 'asidesUrlListsForms',
  2230.                 'action' => '/editions/{v_url_clean}/textes/generate_params',
  2231.                 'params' => array(
  2232.                     'activate' => $this->context['view']->days,
  2233.                 ),
  2234.                 'structure' => array(
  2235.                     'area' => 'v_area',
  2236.                     'structure_classic' => array(
  2237.                         'type' => 'v_type',
  2238.                         'idtypestructure' => 'v_idtypestructure'
  2239.                     )
  2240.                 )
  2241.             ),
  2242.             'title' => 'Recherche par période'
  2243.         )]);
  2244.     }
  2245.     // }}}
  2246.     /** Les asides communs aux pages de modifications
  2247.      *
  2248.      */
  2249.     public function get_asides_admin(){
  2250.         $menu_admin = array(
  2251. //            'presentation' => array(
  2252. //                'name' => 'Présentation',
  2253. //                'key' => 'presentation-edit'
  2254. //            ),
  2255.             'infos' => array(
  2256.                 'name' => 'Infos générales',
  2257.                 'key' => 'infos-generales'
  2258.             ),
  2259.             'bandeau' => array(
  2260.                 'name' => 'Bandeau',
  2261.                 'key' => 'bandeau'
  2262.             ),
  2263.             'pdf' => array(
  2264.                 'name' => 'Documents PDF',
  2265.                 'key' => 'documents',
  2266.                 'key_2' => 'documents-edit'
  2267.             )
  2268.         );
  2269.         $this->asides->load(['url_lists_alone' => array(
  2270.             'php' => array(
  2271.                 'method' => 'asidesUrlLists',
  2272.                 'urls' => $menu_admin,
  2273.                 'url' => '/editions/{v_url_clean}/key',
  2274.                 'params' => array(
  2275.                     'activate' => $this->context['action']
  2276.                 )
  2277.             ),
  2278.             'title' => 'Modifier'
  2279.         )
  2280.         ]);
  2281.     }
  2282.     // }}}
  2283.     /** Les asides communs à toutes les plusieurs pages
  2284.      *
  2285.      */
  2286.     public function get_asides_common($color 'editions'$params_asides = array()){
  2287.         $params_carte_common = array(
  2288.             'exec' => ['color' => $color],
  2289.         );
  2290.         if(!empty($params_asides['carte_url_custom'])){
  2291.             $params_carte_common['url'] = $params_asides['carte_url_custom'];
  2292.         }
  2293.         if(!in_array($this->context['action'], array('textes''biographies')) && (!empty($params_asides['no_show_map']) && $params_asides['no_show_map'])){
  2294.             $this->asides->load(['common_carte' => $params_carte_common]);
  2295.         }
  2296.         $this->asides->load(['common_participer_contacts' => array(
  2297.             'url_custom_edit' => '/editions/'.$this->view->url_clean.'/infos-generales'
  2298.         )]);
  2299.     }
  2300.     // }}}
  2301.     // {{{ get_asides_videos()
  2302.     public function get_asides_videos(){
  2303.         $spectacles_counts $this->view->spectacle_counts['spectacles_multimedias'];
  2304.         //On réutilise les actions pour pour compter les nombres des spectacles etc.
  2305.         if(empty($this->context['view']->nb_spectacles_total['affiche'])){
  2306.             $this->action_textes_auteurs(null, ['count_only' => true]);        }
  2307.         $type $this->context['view']->type;
  2308.         $menu_videos = array(
  2309.             'prochains' => array(
  2310.                 'name' => 'Spectacles à l\'affiche',
  2311.                 'key_filtre' => 'prochains',
  2312.                 'count' => $spectacles_counts['prochains']
  2313.             ),
  2314.             'tous' => array(
  2315.                 'name' => 'Tous les spectacles',
  2316.                 'key_filtre' => 'tous',
  2317.                 'count' => $spectacles_counts['tous']
  2318.             ),
  2319.             'partenariat' => array(
  2320.                 'name' => 'Toutes les vidéos en partenariat',
  2321.                 'key_url' => 'contacts/{v_url_clean}/videos/type/key_type',
  2322.                 'key_type' => 'partenariat',
  2323.                 'key_filtre' => 'null',
  2324.                 // 'spectacle_anciens' => array('anciens' => true),
  2325.                 'count' => $this->em->getRepository(Multimedias::class)->getMultimediasBy('contacts'$this->idcontact' AND m.audio_video=2','count')
  2326.             ),
  2327.             'textes-auteurs-affiche' => array(
  2328.                 'name' => 'Les textes par leurs auteur(e)s à l\'affiche',
  2329.                 'key_filtre' => 'textes-auteurs',
  2330.                 'key_filtre_2' => 'affiche',
  2331.                 'url' => '/editions/{v_url_clean}/textes-auteurs/',
  2332.                 'count' => $this->context['view']->nb_spectacles_total['affiche']
  2333.             ),
  2334.             // 'textes-auteurs' => array(
  2335.             //     'name' => 'Les textes par leurs auteur(e)s',
  2336.             //     'key_filtre' => 'textes-auteurs-affiche',
  2337.             //     'key_filtre_2' => 'all',
  2338.             //     'url' => '/editions/{v_url_clean}/textes-auteurs/periode/all',
  2339.             //     'count' => $this->context['view']->nb_spectacles_total['all']
  2340.             // ),
  2341.             'decouverte-auteurs' => array(
  2342.                 'name' => 'Les auteurs par eux-mêmes',
  2343.                 'key_filtre' => 'decouverte-auteurs',
  2344.                 'url' => '/editions/{v_url_clean}/decouverte-auteurs',
  2345.             ),
  2346.         );
  2347.         $activate_menu $type;
  2348.         if($this->context['action'] == 'textes-auteurs'){
  2349.             $activate_menu $this->context['view']->periode_spectacle;
  2350.         }
  2351.         else if($this->context['action'] == 'decouverte-auteurs'){
  2352.             $activate_menu 'decouverte-auteurs';
  2353.         }
  2354.         $this->asides->load(['url_lists' => array(
  2355.             'exec' => [
  2356.                 'color' => 'videos',
  2357.                 'htmlstart' => true,
  2358.                 'htmlend' => true
  2359.             ],
  2360.             'php' => array(
  2361.                 'method' => 'asidesUrlLists',
  2362.                 'urls' => $menu_videos,
  2363.                 'url' => '/editions/{v_url_clean}/videos/type/key_filtre/generate_params',
  2364.                 'params' => array(
  2365.                     'activate' => $activate_menu
  2366.                 ),
  2367.                 'structure' => array(
  2368.                     'structure_classic' => array(
  2369.                         'd' => 'v_days',
  2370.                     )
  2371.                 )
  2372.             ),
  2373.             'title' => 'Voir aussi'
  2374.         )
  2375.         ]);
  2376.     }
  2377.     // }}}
  2378.     // {{{ getSpectaclesDatesCommon()
  2379.     /** Récupere  la liste des dates des spectacles à partir de la liste de tous les spectacles
  2380.      *
  2381.      * @return array
  2382.      */
  2383.     public function getSpectaclesDatesCommon($ids_spectacle=array(),$ids_text=array())
  2384.     {
  2385.         if(!empty($ids_spectacle)) {
  2386.             $sql_annees '
  2387.                 SELECT schedules.`date`, YEAR(schedules.`date`) as annee
  2388.                 FROM schedules, spectacles
  2389.                 WHERE schedules.`idspectacle`=spectacles.`idspectacle`
  2390.                 AND spectacles.`publish`=1
  2391.                 AND schedules.`idspectacle` IN ('.join(','$ids_spectacle).')
  2392.                 ORDER BY schedules.`date`';
  2393.         }
  2394.         else if(!empty($ids_text)) {
  2395.             $sql_annees '
  2396.                 SELECT schedules.`date`, YEAR(schedules.`date`) as annee
  2397.                 FROM schedules, spectacles
  2398.                     JOIN text_spectacle ON spectacles.`idspectacle`=text_spectacle.`idtext`
  2399.                     JOIN texts ON texts.idtext = text_spectacle.idtext
  2400.                 WHERE schedules.`idspectacle`=spectacles.`idspectacle`
  2401.                 AND spectacles.`publish`=1
  2402.                 AND text_spectacle.`idtext` IN ('.join(','$ids_text).')
  2403.                 AND texts.`idcontact_publisher`='.$this->idcontact.'
  2404.                 ORDER BY schedules.`date`';
  2405.         }
  2406.         else{
  2407.             $sql_annees '
  2408.             SELECT schedules.`date`, YEAR(schedules.`date`) as annee
  2409.             FROM schedules, spectacles
  2410.                 JOIN text_spectacle ON spectacles.`idspectacle`=text_spectacle.`idtext`
  2411.                 JOIN texts ON texts.idtext = text_spectacle.idtext
  2412.             WHERE schedules.`idspectacle`=spectacles.`idspectacle`
  2413.             AND spectacles.`publish`=1
  2414.             AND texts.`idcontact_publisher`='.$this->idcontact.'
  2415.             ORDER BY schedules.`date`';
  2416.         }
  2417.         //si $sql_annees n'existe pas
  2418.         if(!isset($sql_annees)){
  2419.             return array();
  2420.         }
  2421.         $listdates $this->spectacles->queryAll($sql_annees);
  2422.         // liste des saisons et des années
  2423.         if(empty($listdates)) {
  2424.             //echo $listdates->getDebugInfos();
  2425.             return array();
  2426.         } else {
  2427.             return $listdates;
  2428.         }
  2429.     }
  2430.     // }}}
  2431.     // {{{ getTitlePage()
  2432.     /** Titre de la page (getter)
  2433.      *
  2434.      */
  2435.     public function getTitlePage() { return $this->title_page; }
  2436.     // }}}
  2437.     // {{{ getSQLTextes()
  2438.     /** Les requêtes nécessaires pour les textes
  2439.      *
  2440.      * @return int
  2441.      *
  2442.      */
  2443.     public function getSQLTextes($params = array()){
  2444.         $count = (!empty($params['count'])) ? true false;
  2445.         $type $type_default = (!empty($params['default'])) ? $params['default'] : 'tous';
  2446.         $where_idcontact ' AND T1.idcontact_publisher='.((int)$this->idcontact).' ';
  2447.         $ids_textes_originaux $this->get_textes_originaux();
  2448.         $ids_textes_traduits $this->get_textes_traduits()['liste_traductions'];
  2449.         //On transforme le tableau en une chaine de caractère
  2450.         $textes = array(
  2451.             'tous' => explode(','$ids_textes_originaux),
  2452.             'traduits' => explode(','$ids_textes_traduits),
  2453.             'all' => null
  2454.         );
  2455.         if(!empty($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $textes)){
  2456.             $type $this->context['params']['type'];
  2457.         }
  2458.         $listes_saisons Date_time::getListSaisons(2000,(date('Y')+1));
  2459.         $listes_saisons['annees'] = array_reverse($listes_saisons['annees'], true);
  2460.         if(!$count){
  2461.             $this->getCommonSearch(array(
  2462.                 'saisons_annees' => $listes_saisons,
  2463.             ));
  2464.             $this->getCommonSearchView();
  2465.         }
  2466.         //Les comptes totaux
  2467.         if($count) {
  2468.             $this->view->textes_counts_total 0;
  2469.             foreach ($textes AS $key => $v) {
  2470.                 $params_sql_counts = array();
  2471.                 if (!empty($textes[$key][0]) && !is_null($textes[$key][0])) {
  2472.                     $params_sql_counts['special'] = array(
  2473.                         'idtext' => array('IN'$textes[$key]),
  2474.                         'join' => true,
  2475.                     );
  2476.                     $this->view->textes_counts[$key] = $this->em->getRepository(Texts::class)->countListTexts($params_sql_countsfalse);
  2477.                     $this->view->textes_counts_total += $this->view->textes_counts[$key];
  2478.                 }
  2479.                 else{
  2480.                     $params_sql_counts['params']['where'] = $where_idcontact;
  2481.                 }
  2482.                 $this->view->textes_counts[$key] = $this->em->getRepository(Texts::class)->countListTexts($params_sql_countsfalse);
  2483.                 $this->view->textes_counts_total += $this->view->textes_counts[$key];
  2484.             }
  2485.             $params_sql_counts['dbg'] = array('texts_affiche_' $key '_' uniqid(''true), 'Total des textes ' $key);
  2486.         }
  2487.         //Executions du code pour la page et son contenu
  2488.         else{
  2489.             //Nous incluons la chaine contenant les ID des textes dans la requête
  2490.             $params_sql['params'] = array(
  2491.                 'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
  2492.             );
  2493.             $params_sql['params']['where'] = $where_idcontact;
  2494.             $params_sql['special'] = array(
  2495.                 'join' => true,
  2496.             );
  2497.             if(!empty($textes[$type][0]) && !is_null($textes[$type][0])){
  2498.                 $params_sql['special']['idtext'] = array('IN'$textes[$type]);
  2499.             }
  2500.             $params_sql['dbg'] = array('texts_affiche_'.uniqid(''true), 'Textes des spectacles à l\'affiche');
  2501.             // recherche par année
  2502.             if(!empty($this->context['view']->year))
  2503.             {
  2504.                 $params_sql['special']['year'] = $this->context['view']->year;
  2505.             }
  2506.             // recheche par période
  2507.             elseif(!empty($this->context['view']->datestart) && !empty($this->context['view']->dateend))
  2508.             {
  2509.                 $params_sql['special']['periode'] = array(
  2510.                     'datestart' => substr($this->context['view']->datestart0, -2).'00',
  2511.                     'dateend' => substr($this->context['view']->dateend0, -2).'00',
  2512.                 );
  2513.             }
  2514.             //On compte les textes courants suivant la requête construite pour la pagination
  2515.             $count_textes $this->em->getRepository(Texts::class)->countListTexts($params_sql,false);
  2516.             //On applique la limite de résultat au corps de page
  2517.             $params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  2518.             //On génère la pagination
  2519.             $this->context['view']->pagination $this->getPagination($count_textes);
  2520.             $this->context['view']->pagination['totalItems'] = $count_textes;
  2521.             $this->context['view']->pagination['texte'] = true;
  2522.             //On récupère la liste des textes
  2523.             $list_texts $this->em->getRepository(Texts::class)->getListTexts($params_sql,array('publisher_first_inverse' => true));
  2524.             //On indique la liste des textes à la vue pour l'afficher dans le template
  2525.             $this->context['view']->texts $list_texts;
  2526.         }
  2527.     }
  2528.     // {{{ getSQLSpectacles()
  2529.     /** Les requêtes nécessaires pour les spectacles
  2530.      *
  2531.      * @return array
  2532.      *
  2533.      */
  2534.     public function getSQLSpectacles($params = array()){
  2535.         $count = (!empty($params['count'])) ? true false;
  2536.         $type_default = (!empty($params['default'])) ? $params['default'] : 'prochains';
  2537.         $days_default = (!empty($params['days_default'])) ? $params['days_default'] : 365;
  2538.         //Si on souhaite un nombre de résultat spécifique
  2539.         $limit = (!empty($params['limit'])) ? $params['limit'] : false;
  2540.         //Si on recherche des Spectacles avec critiques
  2541.         $with_critiques = (!empty($params['get_spectacles_with_critiques'])) ? true false;
  2542.         //Si on recherche des Spectacles avec audios
  2543.         $with_audios = (!empty($params['get_spectacles_with_audios'])) ? true false;
  2544.         //Si on recherche des Spectacles avec vidéos
  2545.         $with_multimedias = (!empty($params['get_spectacles_with_multimedias'])) ? true false;
  2546.         $action_selected 'spectacles';
  2547.         //Sélection par nombres de jours
  2548.         //Si la valeur existe bien dans le menu
  2549.         if(isset($this->context['view']->days) && !in_array($this->context['view']->daysarray_column($this->view->menu_jours'key_day'))){
  2550.             $this->context['view']->days $days_default;
  2551.         }
  2552.         //Sélection par saisons
  2553.         if(!$count){
  2554.             $listdates $this->getSpectaclesDatesCommon();
  2555.             $annees_saisons $this->getListSeasonsYears($listdates,null,true);
  2556.             $this->getCommonSearch(array(
  2557.                 'saisons_annees' => $annees_saisons,
  2558.                 'nb_days' => $days_default,
  2559.             ));
  2560. //            if(!empty($annees_saisons)){
  2561. //                $this->context['form']->addElement('select', 's', 'Saisons', array_merge(array('' => 'Choisissez une saison...'),$annees_saisons['saisons']), array('id' => 'saisons'));
  2562. //            }
  2563.             $this->getCommonSearchView();
  2564.         }
  2565.         if(!empty($this->view->saison)) {
  2566.             $saison $this->view->saison;
  2567.             $annees_saison explode('-'$saison);
  2568.             if(count($annees_saison)==2) {
  2569.                 $datestart Date_time::getSaisonDatestart((int)$annees_saison[0]);
  2570.                 $dateend Date_time::getSaisonDateend((int)$annees_saison[1]);
  2571.             }
  2572.             // saison précédente / suivante
  2573.             $this->view->saisons_nav $this->getSaisonsNav($annees_saisons['saisons'],$saison);
  2574.         }
  2575.         //Construction de la requête du corps de page
  2576.         $type $this->view->type $type_default;
  2577.         if(!empty($this->context['params']['type'])){
  2578.             $type $this->view->type $this->context['params']['type'];
  2579.         }
  2580.         // requete sql pour les ciblés les spectacles en lien avec les textes édités chez le contact
  2581.         $where_idcontact ' AND t.idcontact_publisher='.((int)$this->idcontact);
  2582.         //Les premières paramètres de la requête pour getListSpectacles
  2583.         $params_sql_affiche = array(
  2584.             'params' => array(
  2585.                 'where' => $where_idcontact,
  2586.                 'limit' => 'all',
  2587.             ),
  2588.             'special' => array(
  2589.                 'publish_valid' => 1// uniquement les spectacles en ligne et validés
  2590.             ),
  2591.             'dbg' => array('texts_affiche''Textes à l\'affiche')
  2592.         );
  2593.         if(!$count){
  2594.             if(!empty($this->view->saison)) {
  2595.                 $params_sql_affiche['special']['saison'] = $this->view->saison;
  2596.             }
  2597.             //Si l'utilisateur sélectionne une région
  2598.             if(!empty($this->context['params']['area'])){
  2599.                 $area $this->view->area $this->context['params']['area'];
  2600.                 $params_sql_affiche['special']['area'] = $area// condition géographique
  2601.                 $params_sql_affiche['special']['carte_version'] = 'bigregions';
  2602.                 $params_sql_affiche['special']['get_schedule_ville'] = $area;
  2603.                 if(is_numeric($area)){
  2604.                     $this->context['view']->region_name $this->em->getRepository(Bigregions::class)->getRegionName($area);
  2605.                 } else {
  2606.                     $this->context['view']->country_name $this->spectacles->getNameCountry($area);
  2607.                 }
  2608.             }
  2609.         }
  2610.         //Si on réclame les spectacles avec critiques
  2611.         if($with_critiques){
  2612.             $action_selected 'spectacles_critiques';
  2613.             $params_sql_affiche['special']['idclassification'] = 101;
  2614.             $params_sql_affiche['params']['groupby'] = 's.idspectacle';
  2615.         }
  2616.         //Si on réclame les spectacles avec des fichiers multimedias (vidéos)
  2617.         if($with_multimedias){
  2618.             $action_selected 'spectacles_multimedias';
  2619.             $params_sql_affiche['special']['multimedias_videos_associes'] = true;
  2620.         }
  2621.         $filtre_sup '';
  2622.         if($with_audios){
  2623.             $action_selected 'spectacles_audios';
  2624.             $params_sql_affiche['special']['podcasts'] = [
  2625.                 'type_podcast' => 'franceculture',
  2626.                 'publish' => 1
  2627.             ];
  2628.         }
  2629.         //On compte tous les spectacles
  2630.         $params_sql_count $params_sql_affiche;
  2631.         if(!$count){
  2632.             $params_sql_count['special']['prochains'] = $this->context['view']->days;
  2633.         }
  2634.         else{
  2635.             $params_sql_count['special']['prochains'] = 365;
  2636.         }
  2637.         $spectacles_counts['prochains'] = $this->spectacles->countListSpectacles($params_sql_count);
  2638.         //On remet à l'état initial le tableau params_sql_count
  2639.         //compter tous les spectacles avec critiques
  2640.         $params_sql_count $params_sql_affiche;
  2641.         $params_sql_count['special']['idclassification'] = 101;
  2642.         $spectacles_counts['critiques'] = $this->spectacles->countListSpectacles($params_sql_count);
  2643.         //On remet à l'état initial le tableau params_sql_count
  2644.         //compter tous les spectacles à l'affiche
  2645.         $params_sql_count $params_sql_affiche;
  2646.         $spectacles_counts['tous'] = $this->spectacles->countListSpectacles($params_sql_count);
  2647.         //On assigne la variable à la vue
  2648.         $this->view->spectacle_counts[$action_selected] = $spectacles_counts;
  2649.         if(!$count){
  2650.             //On finalise à mettre en place les paramètres pour getListSpectacles
  2651.             if($type == 'prochains' && $spectacles_counts['prochains'] > 0){
  2652.                 $params_sql_affiche['special']['prochains'] = $this->context['view']->days;
  2653.             }
  2654.             else if($spectacles_counts['tous'] > 0){
  2655.                 $params_sql_affiche['anciens'] = 'all';
  2656.                 $params_sql_affiche['params']['order'] = ['creation_date''DESC'];
  2657.                 $type 'tous';
  2658.             }
  2659.             else{
  2660.                 if(empty($params['stop_redirect'])){
  2661.                     return $this->redirect("/editions/".$this->context['view']->url_clean);
  2662.                 }
  2663.             }
  2664.             //Si on à choisi un nombre limite custom
  2665.             if($limit){
  2666.                 $params_sql_affiche['params']['limit'] = array($this->getLimitStart(),$limit);
  2667.             }
  2668.             else{
  2669.                 //On place la limite des paginations aux paramètres de la requête
  2670.                 $params_sql_affiche['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  2671.                 //On créer la pagination
  2672.                 if(!empty($spectacles_counts[$type])){
  2673.                     $this->context['view']->pagination $this->getPagination($spectacles_counts[$type]);
  2674.                 }
  2675.                 else{
  2676.                     $this->context['view']->pagination $this->getPagination($this->view->nb_multimedias);
  2677.                 }
  2678.                 $this->context['view']->pagination['spectacle'] = true;
  2679.             }
  2680.             //On récupère la liste des spectacles
  2681.             $spectacles_affiche $this->spectacles->getListSpectacles($params_sql_affiche,null,false,['allauthors' => true]);
  2682.             $this->view->{'spectacles_'.$type} = true;
  2683.             $this->view->spectacles $spectacles_affiche;
  2684.         }
  2685.         return array();
  2686.     }
  2687.     // }}}
  2688.     // {{{ getSQLBiographies()
  2689.     /** Les requêtes nécessaires pour les biographies
  2690.      *
  2691.      * @return array
  2692.      *
  2693.      */
  2694.     public function getSQLBiographies($params = array()){
  2695.         $persons $this->em->getRepository(Persons::class);
  2696.         $count = (!empty($params['count'])) ? true false;
  2697.         $type_default = (!empty($params['default'])) ? $params['default'] : 'auteurs';
  2698.         $type_persons = array(
  2699.             'auteurs' => array(
  2700.                 'standard' => 'auteurs',
  2701.                 'standard_singulier' => 'auteur',
  2702.                 'type_name' => 'authors',
  2703.                 'title_page' =>  'Les auteurs de pièces de théâtre',
  2704.                 'locate' => array(=> 'Auteurs'),
  2705.                 'infview' => 'aut',
  2706.                 'special' => array('author' => true),
  2707.             ),
  2708.             'traducteurs' => array(
  2709.                 'standard' => 'traducteurs',
  2710.                 'standard_singulier' => 'traducteur',
  2711.                 'type_name' => 'translators',
  2712.                 'title_page' =>  'Les traducteurs de textes de théâtre',
  2713.                 'locate' => array(=> 'Traducteurs'),
  2714.                 'infview' => 'trad',
  2715.                 'special' => array('translator' => true),
  2716.             ),
  2717.         );
  2718.         $type_selected $type_default;
  2719.         if(isset($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $type_persons)){
  2720.             $type_selected $this->context['params']['type'];
  2721.         }
  2722.         $this->view->type $type_selected;
  2723.         $this->view->standard $type_persons[$type_selected]['standard'];
  2724.         $params_persons = array(
  2725.             'params' => array(
  2726.                 'limit' => 'all',
  2727.             ),
  2728.             'special' => array(
  2729.                 'publish' => 1,
  2730.             ),
  2731.             'dbg' => array('persons','liste des personnes')
  2732.         );
  2733.         // conditions spécifique à la demande
  2734.         $this->view->biographies_counts_total 0;
  2735.         // foreach($type_persons AS $key => $type){
  2736.         // $params_persons['special'] = $type_persons[$key]['special'];
  2737.         $params_persons['special']['contacts'] = array(
  2738.             'publishers' => $this->idcontact
  2739.         );
  2740.         if(!$count){
  2741.             $params_persons_request $params_persons;
  2742.             $params_persons_request_letter $params_persons;
  2743.         }
  2744.         $params_persons['special']['count_only'] = true;
  2745.         // $this->view->biographies_counts[$key] = $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
  2746.         // $this->view->biographies_counts_total += $this->view->biographies_counts[$key];
  2747.         $this->view->biographies_counts_total $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
  2748.         // }
  2749.         //Si nous souhaitons éxecuter la page
  2750.         if(!$count && $params_persons_request){
  2751.             $params_persons_request_letter['special']['firstname_only'] = true;
  2752.             // On prépare la requête firstname_only
  2753.             $sql_firstname_only $persons->getSQLPersons($params_persons_request_letter['params'], $params_persons_request_letter['special']);
  2754.             $alphabet_results $this->em->getRepository(Spectacles::class)->queryAll($sql_firstname_only);
  2755.             // recherche alphabétique
  2756.             $alpha null;
  2757.             if(isset($_GET['lettre']) && !empty($_GET['lettre']) && strlen($_GET['lettre'])==1) {
  2758.                 $alpha strtoupper($_GET['lettre']);
  2759.             }
  2760.             // liste alpha
  2761.             $alphabet $this->func->getAlphaList($alpha);
  2762.             foreach($alphabet_results as $L){
  2763.                 $l strtolower($L['letter']);
  2764.                 if($l==$alpha) {
  2765.                     $alphabet_tab[$l]['active'] = 'active';
  2766.                 }
  2767.                 $alphabet_tab[$l] = $alphabet[$l];
  2768.                 $alphabet_tab[$l]['ok'] = true;
  2769.             }
  2770.             // si recherche alphabétique
  2771.             if(!empty($alpha) && !is_null($alpha)){
  2772.                 $this->view->alpha strtoupper($alpha);
  2773.                 $params_persons_request['special']['alpha'] = $alpha;
  2774.             }
  2775.             $params_persons_request['special']['count_only'] = true;
  2776.             //Nous comptons le nombre total de résultat avec les filtres
  2777.             $results_count $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
  2778.             //On unset le count_only qui ne nous servira plus
  2779.             unset($params_persons_request['special']['count_only']);
  2780.             /* la pagination */
  2781.             $this->perPage 62;
  2782.             $pagerOptions['url_custom'] = (!is_null($alpha)) ? '?lettre='.$alpha '';
  2783.             //On génère la pagination
  2784.             $pagination $this->getPagination($results_count,$this->perPage,$pagerOptions);
  2785.             //On instaure une limite du jeu de donnée en lien avec la pagination
  2786.             $params_persons_request['params']['limit'] = array($this->getLimitStart(),$this->perPage);
  2787.             // générer les résultats
  2788.             $results $persons->getListPersons($params_persons_request);
  2789.             return array(
  2790.                 'pagination' => $pagination,
  2791.                 'results' => $results,
  2792.                 'alphabet' => $alphabet_tab
  2793.             );
  2794.         }
  2795.         return 0;
  2796.     }
  2797.     // }}}
  2798.     // {{{ getSQLEvenements()
  2799.     /** Les requêtes nécessaires pour les evenements
  2800.      *
  2801.      * @return array
  2802.      *
  2803.      */
  2804.     public function getSQLEvenements($params = array()){
  2805.         $count = (!empty($params['count'])) ? true false;
  2806.         $type_default = (!empty($params['default'])) ? $params['default'] : 'prochains';
  2807.         $news $this->em->getRepository(News::class);
  2808.         $type $type_default;
  2809.         if(!empty($this->context['params']['type'])){
  2810.             $type $this->context['params']['type'];
  2811.         }
  2812.         $news_params = array(
  2813.             'params' => array(
  2814.                 'limit' => 'all',
  2815.             ),
  2816.             'special' => array(
  2817.                 'publish_valid' => true,
  2818.                 'by_object' => array('idcontact' => (int)$this->idcontact),
  2819.                 // 'type_news' => 'news',
  2820.             )
  2821.         );
  2822.         $this->view->evenements_counts['total'] = 0;
  2823.         $news_params_boucle $news_params;
  2824.         foreach(['prochains''anciens'] AS $value){
  2825.             $news_params_boucle $news_params;
  2826.             $news_params_boucle['special'][$value] = true;
  2827.             $this->view->evenements_counts[$value] = $news->countNews($news_params_boucle);
  2828.             $this->view->evenements_counts['total'] += $this->view->evenements_counts[$value];
  2829.         }
  2830.         if(!$count){
  2831.             if(!empty($this->context['params']['area'])){
  2832.                 $this->context['view']->tri_region true;
  2833.                 $news_params['special']['idbigregion'] = $this->context['params']['area'];
  2834.             }
  2835.             foreach(array('news','spectacles') as $t) {
  2836.                 $news_list = array();
  2837.                 $news_params['special']['type_news'] = $t;
  2838.                 foreach(array('prochains','anciens') as $d) {
  2839.                     $news_params['dbg'] = array('news_'.$d'Liste des news '.$d);
  2840.                     $news_params['special'][$d] = true;
  2841.                     if(!empty($exclude_news)) {
  2842.                         $news_params['params']['where'] = ' AND T1.idnew NOT IN ('.join(','$exclude_news).') ';
  2843.                     }
  2844.                     $news_list[$d] = $news->getListNews($news_params);
  2845.                     if(!empty($news_list[$d])) {
  2846.                         // liste d'exclusion => pas de en cours dans les anciens
  2847.                         foreach($news_list[$d] as $k=>$v) {
  2848.                             $exclude_news[$k] = $v['idnew'];
  2849.                         }
  2850.                         $this->view->{'is_news_list_'.$t} = true;
  2851.                     }
  2852.                     unset($news_params['special'][$d]);
  2853.                 }
  2854.                 $this->view->{'news_list_'.$t} = $news_list;
  2855.             }
  2856.         }
  2857.     }
  2858.     // }}}
  2859.     // {{{ countTelechargements()
  2860.     /** compter les fichiers
  2861.      *
  2862.      * @return int
  2863.      *
  2864.      */
  2865.     public function countTelechargements()
  2866.     {
  2867.         return $this->em->getRepository(Files::class)->countObjectFiles(
  2868.             $this->idcontact,'contacts',
  2869.             $this->em->getRepository(Classifications::class)->getClassificationList('files','contacts',null,array(1),'get_value'),
  2870.             array(
  2871.                 'valid' => 1,
  2872.                 'publish' => 1,
  2873.                 'force_mode' => 'file',
  2874.             )
  2875.         );
  2876.     }
  2877.     // }}}
  2878.     // {{{ getContactAides()
  2879.     /** Récupérer les laureats et nominations et les soutiens et les sélections
  2880.      *
  2881.      *
  2882.      * @access public
  2883.      * @return void
  2884.      * @param $type_aide int
  2885.      */
  2886.     public function getContactAides($type_aide$params = array())
  2887.     {
  2888.         $show_url_text_by_author false;
  2889.         if(!empty($this->context['view']->current_page)){
  2890.             $this->context['view']->{'page_'.$this->context['view']->current_page} = true;
  2891.         }
  2892.         // menu type
  2893.         $this->context['view']->menu_types_object = array(
  2894.             //'tous' =>   array('name' => 'Tous les lauréats'),
  2895.             'text' =>  array('name' => 'Tous les textes'),
  2896.             'spectacle' => array('name' => 'Tous les spectacles'),
  2897.             'person' =>   array('name' => 'Tous les artistes'),
  2898.             'contact' =>   array('name' => 'Toutes les structures')
  2899.         );
  2900.         $this->context['view']->filtres_aides_categories = array(
  2901.             'spectacle' => 107//résident de création
  2902.             'text' => 106 //résident d'écriture
  2903.         );
  2904.         // chercher une aide précise
  2905.         if(!empty($this->context['params']['idaide'])) {
  2906.             $idaide = (int)$this->context['params']['idaide'];
  2907.         }
  2908.         if(!empty($this->context['params']['type']) && !empty($this->context['view']->menu_types_object[$this->context['params']['type']])) {
  2909.             $type_object $this->context['params']['type'];
  2910.         } else {
  2911.             $type_object 'text';
  2912.         }
  2913.         foreach($this->context['view']->menu_types_object as $t=>$v) {
  2914.             // récupèrer les prix associés au contact
  2915.             $object_aide $this->em->getRepository('TheatreCore\Entity\\'.ucfirst($t).'Aide');
  2916.             if(!is_array($type_aide)) {
  2917.                 $type_aide = array($type_aide);
  2918.             }
  2919.             //playlists table
  2920.             //idperson = 7051
  2921.             //idtext =     24291
  2922.             $params_sql_aide = array(
  2923.                 'special' => array(
  2924.                     'aides' => array(
  2925.                         'idcontacts' => $this->idcontact,
  2926.                         'type_aides' => $type_aide,
  2927.                     ),
  2928.                 ),
  2929.                 'dbg' => array($t.'_aide_count','Nombre de '.$t.' lauréats'),
  2930.             );
  2931.             // compter le nombre total de lauréats
  2932.             $this->context['view']->menu_types_object[$t]['nb'] = $object_aide->{'countList'.ucfirst($t).'Aide'}($params_sql_aide);
  2933.             if($this->context['view']->menu_types_object[$t]['nb']==0) {
  2934.                 unset($this->context['view']->menu_types_object[$t]);
  2935.             } else {
  2936.                 $this->context['view']->menu_types_object[$t]['params_sql'] = $params_sql_aide;
  2937.                 $this->context['view']->menu_types_object[$t]['object_aide'] = $object_aide;
  2938.             }
  2939.         }
  2940.         if(!empty($this->context['view']->menu_types_object)) {
  2941.             // si type_object est vide, chercher un autre
  2942.             if(!isset($this->context['view']->menu_types_object[$type_object])) {
  2943.                 foreach($this->context['view']->menu_types_object as $t=>$v) {
  2944.                     $type_object $t;
  2945.                     break;
  2946.                 }
  2947.             }
  2948.             if(empty($this->context['params']['idaide'])){
  2949.                 $this->context['view']->menu_types_object[$type_object]['active'] = 'on';
  2950.             }
  2951.             $this->context['view']->params_filtre $type_object;
  2952.             if($type_object=='contact') {
  2953.                 $this->perPage 50;
  2954.             }
  2955.             $aidecontacts $this->em->getRepository(Aidecontacts::class);
  2956.             $this->context['view']->aide_type_object $type_object;
  2957.             foreach($this->context['view']->menu_types_object as $t=>$v) {
  2958.                 // si on est dans le contexte
  2959.                 if($type_object==$t) {
  2960.                     // il faut retrouver les différents aidecontact
  2961.                     $params_sql_aidecontact = array(
  2962.                         'special' => array(
  2963.                             'object' => $t,
  2964.                             'aides' => array(
  2965.                                 'idcontacts' => $this->idcontact,
  2966.                                 'no_empty' => true,
  2967.                                 'type_aides' => $type_aide,
  2968.                             ),
  2969.                         ),
  2970.                         'limit' => array(0,100),
  2971.                         'dbg' => array('list_aidecontacts_'.$t,'Liste des catégories d\'aide pour '.$t),
  2972.                     );
  2973.                     $this->context['view']->list_aidecontacts $aidecontacts->getListAidecontacts($params_sql_aidecontact);
  2974.                     if(count($this->context['view']->list_aidecontacts)==1) {
  2975.                         foreach($this->context['view']->list_aidecontacts as $k=>$v) {
  2976.                             $this->context['view']->categorie_aidecontact $v;
  2977.                         }
  2978.                     }
  2979.                     $object_aide $this->context['view']->menu_types_object[$t]['object_aide'];
  2980.                     $params_sql_aide $this->context['view']->menu_types_object[$t]['params_sql'];
  2981.                     // trouver les années où il y a eu des lauréats pour toutes les aides
  2982.                     $this->getCommonSearch(array(
  2983.                             'saisons_annees' => array(
  2984.                                 'annees' => $object_aide->getYears($params_sql_aide),
  2985.                             )
  2986.                         )
  2987.                     );
  2988.                     $this->getCommonSearchView();
  2989.                     if(!empty($this->context['view']->year)) {
  2990.                         $params_sql_aide['special']['period']['year'] = $this->context['view']->year;
  2991.                     }
  2992.                     // cherche une aide précise
  2993.                     if(!empty($idaide)) {
  2994.                         $params_sql_aide['special']['aides']['idaide'] = $idaide;
  2995.                         // par courir les aides et marquer l'active
  2996.                         foreach($this->context['view']->list_aidecontacts as $k=>$v) {
  2997.                             foreach($v['aides'] as $kb=>$vb) {
  2998.                                 if(empty($vb[''])){
  2999.                                     $this->context['view']->list_aidecontacts[$k]['aides'][$kb]['mention_contacts'] = $aidecontacts->wikiTransform($vb['mention_contacts']);
  3000.                                 }
  3001.                                 if($vb['idaide']==$idaide) {
  3002.                                     $this->context['view']->list_aidecontacts[$k]['aides'][$kb]['active'] = true;
  3003.                                     $this->context['view']->list_aidecontacts[$k]['active'] = true;
  3004.                                 }
  3005.                             }
  3006.                         }
  3007.                     }
  3008.                     $params_display = array();
  3009.                     // texte style
  3010.                     if($type_object == 'text') {
  3011.                         $params_display['vignette_format'] = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>$_ENV['VIGN_TEXT_DIRECT']);
  3012.                         //suppression de la condition qui n'est utile que pour la V1
  3013.                         $params_display['stylemore'] = array('imagep' => 'width:60px;''desctxt' => 'width:210px;');
  3014.                         $params_display['publisher_first_inverse'] = true;
  3015.                         $params_sql_aide['get_texts_with_aides'] = true;
  3016.                     }
  3017.                     // pour les contacts
  3018.                     if($type_object == 'contact') {
  3019.                         $params_sql_aide['get_contacts_with_aides'] = true;
  3020.                     }
  3021.                     // pour les spectacles
  3022.                     if($type_object == 'spectacle') {
  3023.                         $params_sql_aide['get_spectacles_with_aides'] = true;
  3024.                     }
  3025.                     $this->context['view']->{'nb_list_aides_'.$t} = $object_aide->{'countList'.ucfirst($t).'Aide'}($params_sql_aide);
  3026.                     if(!empty($params['limit'])){
  3027.                         $params_sql_aide['limit'] = array($params['limit'][0],$params['limit'][1]);
  3028.                     }
  3029.                     else{
  3030.                         $params_sql_aide['limit'] = array($this->getLimitStart(),$this->perPage);
  3031.                     }
  3032.                     $params_sql_aide['dbg'] = array($t.'_aide_list','Les '.$t.' lauréats');
  3033.                     $list $object_aide->{'getList'.ucfirst($t).'Aide'}($params_sql_aide,$params_display);
  3034.                     $this->context['view']->noshow false;
  3035.                     //on récupère les playlists pour la page 'texts par l'auteur'
  3036.                     if($type_object == 'text' && ($this->context['action'] == 'auteurs'  || !empty($params['vignette_video'])) || ($this->context['action'] == 'nominations' && !$show_url_text_by_author)) {
  3037.                         $first_boucle false;
  3038.                         foreach ($list AS $key => $val) {
  3039.                             foreach ($val['texts'] as $skey => $sval) {
  3040.                                 $sql 'SELECT p.idplaylist
  3041.                                       FROM playlists p
  3042.                                       LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
  3043.                                       WHERE pc.idclassification = 144 AND p.idtext = '.$sval['idtext'].'
  3044.                                       GROUP BY p.idtext';
  3045.                                 if($type_object == 'text' && ($this->context['action'] == 'auteurs' || !empty($params['vignette_video']))) {
  3046.                                     if(!$first_boucle){
  3047.                                         $this->context['view']->{'nb_list_aides_'.$t} = 0;
  3048.                                         $first_boucle true;
  3049.                                     }
  3050.                                     if($x $this->obj->queryOne($sql)){
  3051.                                         $playlists $this->em->getRepository(Playlists::class);
  3052.                                         $playlist $playlists->getInfosPlaylist(
  3053.                                             $x,
  3054.                                             array(
  3055.                                                 'all' => true,
  3056.                                                 'multimedias' => true,
  3057.                                                 'format_vignette' => array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169')
  3058.                                             ),
  3059.                                             array('format_vignette' => true)
  3060.                                         );
  3061.                                         $video = (array_shift($playlist['multimedias']));
  3062.                                         $list[$key]['texts'][$sval['idtext']]['vignette'] = $video['image_media'];
  3063.                                         $list[$key]['texts'][$sval['idtext']]['thtv'] = true;
  3064.                                         $list[$key]['texts'][$sval['idtext']]['thtv_permalink'] = $video['permalink'];
  3065.                                         $list[$key]['texts'][$sval['idtext']]['url_clean_video'] = $playlist['url_clean'];
  3066.                                         $this->context['view']->{'nb_list_aides_'.$t} ++;
  3067.                                     } else {
  3068.                                         unset($list[$key]['texts'][$skey]);
  3069.                                     }
  3070.                                 }
  3071.                                 else{
  3072.                                     $show_url_text_by_author true;
  3073.                                     $this->context['view']->tag_text_by_author 1;
  3074.                                 }
  3075.                             }
  3076.                         }
  3077.                     }
  3078.                     if(!empty($this->context['view']->list_aidecontacts)) {
  3079.                         $nb_aidecontacts 0;
  3080.                         foreach($this->context['view']->list_aidecontacts as $k=>$v) {
  3081.                             if(empty($v['aides'])) {
  3082.                                 $nb_aidecontacts $nb_aidecontacts+count($v['aides']);
  3083.                             }
  3084.                         }
  3085.                     }
  3086.                     // si pas de sous-catégorie/aide, afficher la catégorie/aidecontact
  3087.                     if(empty($this->context['view']->list_aidecontacts) || $nb_aidecontacts==1) {
  3088.                         if(!empty($nb_aide) && $nb_aide==1) {
  3089.                             unset($this->context['view']->list_aidecontacts);
  3090.                         }
  3091.                         foreach($list as $k=>$v) {
  3092.                             $this->context['view']->aidecontact $v['aide']['aidecontact'];
  3093.                             break;
  3094.                         }
  3095.                     }
  3096.                     // groupement par année
  3097.                     $list_by_year = array();
  3098.                     if(empty($params['no_year_array'])){
  3099.                         foreach($list as $k=>$v) {
  3100.                             if (!empty($v[$t 's'])) {
  3101.                                 $list_by_year[$v['year_start']][$v['idaide']]['description'] = $v['aide'];
  3102.                                 foreach ($v[$t 's'] as $kb => $vb) {
  3103.                                     $list_by_year[$v['year_start']][$v['idaide']][$t 's'][] = $vb;
  3104.                                 }
  3105.                             }
  3106.                         }
  3107.                         // dans les années, groupement par type d'aide
  3108.                         $this->context['view']->{'list_aides_'.$t} = $list_by_year;
  3109.                     }
  3110.                     // aucun groupement par année, array simple, textes
  3111.                     else{
  3112.                         foreach($list AS $k => $value){
  3113.                             if(!empty($value['texts'])){
  3114.                                 $idtext key($value['texts']);
  3115.                                 $list_texts[$idtext] = reset($value['texts']);
  3116.                                 $list_texts[$idtext]['aides'] = $value['aide'];
  3117.                             }
  3118.                         }
  3119.                         $this->context['view']->{'list_aides_'.$t} = $list_texts;
  3120.                     }
  3121.                     $this->context['view']->pagination $this->getPagination($this->context['view']->{'nb_list_aides_'.$t});
  3122.                 }
  3123.             }
  3124.         }
  3125.         // ajouter masonery
  3126.         //$this->context['view']->js_more[] = 'jquery.masonry.min.js';
  3127.     }
  3128.     // {{{ setLocate()
  3129.     /** On set le fil d'ariane de la page
  3130.      *
  3131.      *
  3132.      *
  3133.      */
  3134.     public function setLocate($params$multiples true){
  3135.         $title_onglet $this->infos['fullname'];
  3136.         if (!empty($this->extra_title))
  3137.         {
  3138.             $title_onglet $this->extra_title.' - '.$this->infos['fullname'];
  3139.         }
  3140.         else if (!empty($this->current['title']))
  3141.         {
  3142.             $title_onglet $this->current['title'];
  3143.         }
  3144.         if($multiples && is_array($params)){
  3145.             $url_clean $this->view->url_clean;
  3146.             $this->locate['/editions/'.$url_clean] = $title_onglet;
  3147.             foreach($params AS $k => $v){
  3148.                 $this->locate[$k] = $v;
  3149.             }
  3150.         }
  3151.         else{
  3152.             $this->locate[0] = $title_onglet;
  3153.         }
  3154.     }
  3155.     // }}}
  3156.     // {{{ getLocate()
  3157.     /** On récupère le fil d'ariane de la page
  3158.      *
  3159.      * @return array
  3160.      *
  3161.      */
  3162.     public function getLocate(){
  3163.         return $this->locate;
  3164.     }
  3165.     // }}}
  3166. }