src/Controller/VideosController.php line 826

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\ClassTheatre\asides;
  4. use App\ClassTheatre\TheatreController;
  5. use App\Service\Abonnements\Abonnements;
  6. use App\Service\Functions;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\Form\Extension\Core\Type\FormType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use TheatreCore\Classes\Stats\Stats;
  16. use TheatreCore\Entity\Contacts;
  17. use TheatreCore\Entity\DvdPerson;
  18. use TheatreCore\Entity\Dvds;
  19. use TheatreCore\Entity\Multimedias;
  20. use TheatreCore\Entity\ObjectMultimedia;
  21. use TheatreCore\Entity\Persons;
  22. use TheatreCore\Entity\Playlists;
  23. use TheatreCore\Entity\Podcasts;
  24. use TheatreCore\Entity\Spectacles;
  25. use TheatreCore\Entity\Texts;
  26. use TheatreCore\Entity\Typesstructures;
  27. class VideosController extends TheatreController
  28. {
  29.     //dataobject des spectacles
  30.     protected $spectacles;
  31.     //pour les asides
  32.     protected $asides;
  33.     // par page
  34.     protected $perPage 20;
  35.     protected $videos_excludes = array();
  36.     private $functions;
  37.     // {{{ _construct()
  38.     /** constructeur hérité
  39.      *
  40.      */
  41.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorTokenStorageInterface $tokenStorageFunctions $functionsAbonnements $abonnements)
  42.     {
  43.         $GLOBALS['rub_courante'] = 'videos';
  44.         parent::__construct($translator$tokenStorage);
  45.         $this->em $em;
  46.         //on appel le dataobject des spectacles
  47.         $this->spectacles $this->em->getRepository(Spectacles::class);
  48.         //on init les asides
  49.         $this->asides = new asides();
  50.         $this->func $functions;
  51.         $this->serviceAbonnements $abonnements;
  52.         //Vidéos devant être exclus des listes 'vidéos populaires'
  53.         $this->videos_excludes = array(5126,6056,11808,11863,11868,11899,11895,11897,11901,2024,5328);
  54.     }
  55.     // }}}
  56.     // {{{ finalizeAction()
  57.     /** Appelez après les actions
  58.      *
  59.      */
  60.     protected function finalizeAction(){
  61.         // $this->getAsides();
  62.         $this->context['view']->aside $this->asides->view($this->context['view']);
  63.         $asides_top = new asides();
  64.         $asides_top->load(['aside_top' => array(
  65.             'php' => array(
  66.                 'method' => 'asidesUrlListMenuVideos',
  67.             )
  68.         )
  69.         ]);
  70.         $this->context['view']->aside_top $asides_top->view($this->context['view']);
  71.     }
  72.     // }}}
  73.     /** redirection video embed
  74.      *
  75.      *  @Route("/videos/actualites/embed/{code}", name="videos_embed")
  76.      */
  77.     public function embedRedirect(string $code): RedirectResponse
  78.     {
  79.         return $this->redirectToRoute('embed', [
  80.             'code' => $code
  81.         ]);
  82.     }
  83.     // {{{ action_actualites()
  84.     /** page d'accueil de la région
  85.      *
  86.      *  @Route("/videos/actualites", name="videos_index")
  87.      */
  88.     public function action_actualites(Stats $globalstats)
  89.     {
  90.         $this->view->action $this->context['action'] = 'actualites';
  91.         // objet
  92.         $multimedias $this->em->getRepository(Multimedias::class);
  93.         // Video à la une
  94.         // une vidéo d'un spectacle à l'affiche
  95.         $params_query_affiche = array(
  96.             //'affiche' => array('today' => 180),
  97.             'language' => 'fr',
  98.             'limit' => array(0,1),
  99.             'where' => array(array('multimedias''video_tete'1)),
  100.             'dbg' => array('tete','Vidéo de tête d\'un spectacle à l\'affiche'),
  101.         );
  102.         $video_tete_result $multimedias->getListMultimedias($params_query_affiche);
  103.         //Si une vidéo est sélectionné par un membre du STAFF thnet
  104.         if(!empty($video_tete_result)) {
  105.             foreach($video_tete_result as $k=>$v) {
  106.                 $video_tete $v;
  107.                 $idmultimedia_affiche $v['idmultimedia'];
  108.                 break;
  109.             }
  110.         }
  111.         //Sinon on prends la vidéo la plus populaire
  112.         else{
  113.             //Les fichiers multimedias que l'on ne souhaite pas voir afficher en page d'accueil
  114.             $multimedia_exclude $this->videos_excludes;
  115.             $plusvues $globalstats->getMostViewed(1,1,$multimedia_exclude);
  116.             if(!empty($plusvues)){
  117.                 $idmultimedia_affiche $plusvues[0]['idmultimedia'];
  118.                 $video_tete $multimedias->getInfosMultimedia($idmultimedia_affiche);
  119.             }
  120.         }
  121.         if(!empty($video_tete)){
  122.             //$set_format = (array('width'=>380,'height'=>330,'direction'=>'crop','fleche'=>'grand'));
  123.             $set_format = (array('width'=>445'direction'=>'thumb','fleche'=>'grand','ratio'=> 169));
  124.             $video_tete array_merge($video_tete, array(
  125.                 'vignette' => $multimedias->getVignetteMultimedia($video_tete['idmultimedia'],$set_format),
  126.                 'description_courte' => $multimedias->cutSentence($video_tete['description'],100),
  127.                 'langue' => $multimedias->getNameLanguage($video_tete['language'])
  128.             ));
  129.             $this->context['view']->video_tete = array($video_tete);
  130.         }
  131.         // les vidéos de spectacles à l'affiche
  132.         $params_videos_affiche = array(
  133.             // 'where' => array(array('multimedias', 'idmultimedia', $exclude_videos,'AND','NOT IN')),
  134.             'order' => array('RAND()'),
  135.             'affiche' => array('today' => 7),
  136.             'limit' => array(0,6),
  137.             'dbg' => array('affiche','Vidéos de spectacles à l\'affiche'),
  138.         );
  139.         $format_vignette_video = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none''ratio' => '169');
  140.         $this->context['view']->videos_affiche $multimedias->getListMultimedias($params_videos_affiche,
  141.             $format_vignette_video,
  142.             array('get_schedule' => true'format_vignette' => true));
  143.         $params_videos_dernieres = array(
  144.             // 'where' => array(array('multimedias', 'idmultimedia', $exclude_videos,'AND','NOT IN')),
  145.             // 'affiche' => array('today' => 7),
  146.             'limit' => array(0,8),
  147.             'dbg' => array('affiche','Vidéos de spectacles à l\'affiche'),
  148.         );
  149.         $this->context['view']->videos_dernieres $multimedias->getListMultimedias($params_videos_dernieres,
  150.             $format_vignette_video,
  151.             array('format_vignette' => true));
  152.         //Tous les textes par leurs auteurs
  153.         $this->action_textes(false, ['limit' => [04]]);
  154.         // NOTE: culturebox
  155.         $culturebox_params = array(
  156.             'limit' => array(0,1),
  157.             'random' => ' ',
  158.             'special' => array(
  159.                 'type_podcast' => 'culturebox',
  160.                 'current' => true,
  161.             ),
  162.             'dbg' => array('derniers_culturebox''Les derniers replay culturebox référencés'),
  163.         );
  164.         $format_vignette = array('width'=>480,'direction'=>'thumb');
  165.         $this->context['view']->derniers_culturebox $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params,$format_vignette);
  166.         // les vidéos les plus vues
  167.         // classe de stats
  168.         $multimedia_exclude $this->videos_excludes;
  169.         $plusvues $globalstats->getMostViewed(7,8,$multimedia_exclude);
  170.         if(!empty($plusvues)) {
  171.             foreach($plusvues as $k=>$v) {
  172.                 $idmultimedia_plusvues[] = $v["idmultimedia"];
  173.             }
  174.             if(!empty($idmultimedia_plusvues)) {
  175.                 $params_query_plusvues = array(
  176.                     'where' => array(array('multimedias''idmultimedia'$idmultimedia_plusvues)),
  177.                     'order' => array(array('multimedias','idmultimedia',$idmultimedia_plusvues)), // classement FIELD()
  178.                     'direction' => 'no',
  179.                     'dbg' => array('plusvues','Vidéos les plus vues'),
  180.                 );
  181.                 $this->context['view']->plusvues_videos $multimedias->getListMultimedias($params_query_plusvues);
  182.             }
  183.         }
  184.         // nb de vidéos
  185.         $this->context['view']->nb_videos $multimedias->countMultimedias();
  186.         // nb heure vidéo
  187.         $this->context['view']->nb_hours $multimedias->countHours();
  188.         // On supprime de l'affiche la date d'ajout pour les dernieres_videos
  189.         $this->context['view']->dernieres_videos true;
  190.         // Array pour le menu montheatre videos
  191.         $menu = array(
  192.             array(
  193.                 'name' => 'Mes videos favorites',
  194.                 'key_sub' => 'videos',
  195.             ),
  196.             array(
  197.                 'name' => 'Mes videos modifiables',
  198.                 'key_sub' => 'mesvideos',
  199.             ),
  200.         );
  201.         // asides
  202.         $this->asides->load(['common_carte' => array(
  203.             'url' => "/spectacles/theatre/region-videos/area/get_id"
  204.         )]);
  205.         $this->asides->load(['url_lists_alone' => array(
  206.             'exec' => ['color' => 'index'],
  207.             'php' => [
  208.                 'method' => 'asidesUrlLists',
  209.                 'urls' => $menu,
  210.                 'url' => '/montheatre/key_sub'
  211.             ],
  212.             'title' => 'Mon théâtre'
  213.         )]);
  214.         $this->asides->load(['common_culturebox' => [
  215.             'footer' => true
  216.         ]]);
  217.         asides::setEntityManager($this->em);
  218.         asides::loadaside('Publicite')->addWithNational($this->asides); //$this->area
  219.         $this->asides->load('videos_nb_vid');
  220.         $this->asides->load('common_facebook');
  221.         $this->asides->load('common_twitter');
  222.         $this->asides->load('common_participer_contacts');
  223.         $asides_publicite = new asides();
  224.         asides::setEntityManager($this->em);
  225.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  226.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  227.         return $this->view('videos/actualites.html.twig');
  228.     }
  229.     // }}}
  230.     // {{{ action_populaires()
  231.     /** page des viéos les plus populaires
  232.      *
  233.      *  @Route("/videos/populaires", name="videos_populaires")
  234.      *  @Route("/videos/populaires/day/{day}", name="videos_populaires_day")
  235.      *
  236.      * @access public
  237.      * @return void
  238.      */
  239.     public function action_populaires($day 30Stats $globalstats)
  240.     {
  241.         $this->context['params']['day'] = $day;
  242.         $this->view->action $this->context['action'] = 'populaires';
  243.         $this->perPage 50;
  244.         $menu_days = array(
  245.             => array(
  246.                 'name' => 'Hier',
  247.                 'key' => 1,
  248.                 'solo' => 'activate',
  249.             ),
  250.             => array(
  251.                 'name' => '7 derniers jours',
  252.                 'key' => 7,
  253.             ),
  254.             30 => array(
  255.                 'name' => '30 derniers jours',
  256.                 'key' => 30,
  257.             ),
  258.             // 365 => array(
  259.             //     'name' => '12 derniers mois',
  260.             //     'key' => 365,
  261.             // )
  262.         );
  263.         if(!empty($this->context['params']['day']) && array_key_exists($this->context['params']['day'], $menu_days))
  264.         {
  265.             $this->view->day $day = (int)$this->context['params']['day'];
  266.             $this->view->last_day false;
  267.             if(!empty($menu_days[$day]['solo'])){
  268.                 $this->view->last_day true;
  269.             }
  270.         }
  271.         $multimedias $this->em->getRepository(Multimedias::class);
  272.         //Les fichiers multimedias que l'on ne souhaite pas voir afficher en page d'accueil
  273.         $multimedia_exclude $this->videos_excludes;
  274.         $plusvues $globalstats->getMostViewed($day,51,$multimedia_exclude);
  275.         if(!empty($plusvues)) {
  276.             foreach($plusvues as $k=>$v) {
  277.                 $idmultimedia_plusvues[] = $v["idmultimedia"];
  278.             }
  279.             if(!empty($idmultimedia_plusvues)) {
  280.                 $params_query_plusvues = array(
  281.                     'limit' => array(0,50),
  282.                     'where' => array(array('multimedias''idmultimedia'$idmultimedia_plusvues)),
  283.                     'order' => array(array('multimedias','idmultimedia',$idmultimedia_plusvues)), // classement FIELD()
  284.                     'direction' => 'no',
  285.                     'dbg' => array('plusvues','Vidéos les plus vues'),
  286.                 );
  287.                 $plusvues $multimedias->getListMultimedias($params_query_plusvues);
  288.                 // remettre en forme
  289.                 // foreach($plusvues_videos as $k=>$v) {
  290.                 //     $plusvues[$k] = $v;
  291.                 // }
  292.                 // getRatingsAndComments($plusvues);
  293.                 $this->context['view']->plusvues_videos $plusvues;
  294.             }
  295.         }
  296.         $params_carte_common['url'] = '/spectacles/theatre/region-videos/area/get_id';
  297.         $this->asides->load(['url_lists_alone,menu_days' => array(
  298.             'exec' => ['color' => 'videos'],
  299.             'php' => [
  300.                 'method' => 'asidesUrlLists',
  301.                 'urls' => $menu_days,
  302.                 'url' => '/videos/populaires/day/key',
  303.                 'params' => array(
  304.                     'activate' => $day
  305.                 )
  306.             ],
  307.             'title' => 'Par période'
  308.         )]);
  309.         $this->asides->load(['common_carte' => $params_carte_common]);
  310.         $menu_montheatre_videos = array(
  311.             array(
  312.                 'name' => 'Mes videos favorites',
  313.                 'key_sub' => 'videos',
  314.             ),
  315.             array(
  316.                 'name' => 'Mes videos modifiables',
  317.                 'key_sub' => 'mesvideos',
  318.             ),
  319.         );
  320.         $this->asides->load(['url_lists_alone' => array(
  321.             'exec' => ['color' => 'index'],
  322.             'php' => [
  323.                 'method' => 'asidesUrlLists',
  324.                 'urls' => $menu_montheatre_videos,
  325.                 'url' => '/montheatre/key_sub'
  326.             ],
  327.             'title' => 'Mon théâtre'
  328.         )]);
  329.         asides::setEntityManager($this->em);
  330.         asides::loadaside('Publicite')->addWithNational($this->asides); //$this->area
  331.         $this->asides->load('common_participer_contacts');
  332.         $this->asides->load('common_facebook');
  333.         $this->asides->load('common_twitter');
  334.         //On affiche la publicité google
  335.         $asides_publicite = new asides();
  336.         asides::setEntityManager($this->em);
  337.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  338.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  339.         return $this->view('videos/populaires.html.twig');
  340.     }
  341.     // }}}
  342.     // {{{ action_spectacles()
  343.     /** page d'accueil de la région
  344.      *
  345.      *
  346.      * @access public
  347.      * @return void
  348.      */
  349.     public function action_spectacles(){
  350.         $spectacles $this->em->getRepository(Spectacles::class);
  351.         $params_spectacles = array(
  352.             'special' => array(
  353.                 'prochains' => true,
  354.                 'contenus_associes_multimedias' => true
  355.             )
  356.         );
  357.         $this->context['view']->spectacles_videos $spectacles->getListSpectacles($params_spectacles);
  358.         // Array pour le 1er URL LIST
  359.         $spec_affiche_video = array(
  360.             array(
  361.                 'name' => 'Les spectacles à l\'affiche avec vidéos',
  362.                 'key_url' => ''
  363.             )
  364.         );
  365.         // Second array pour le 2e url list
  366.         $spec_video_recherche = array(
  367.             array(
  368.                 'name' => 'Un spectacle',
  369.                 'key_url' => ''
  370.             )
  371.         );
  372.         $this->asides->load(['url_lists_alone' => array(
  373.             'php' => array(
  374.                 'method' => 'asidesUrlLists',
  375.                 'urls' => $spec_affiche_video,
  376.             ),
  377.             'title' => 'Voir'
  378.         )]);
  379.         $this->asides->load(['url_lists_alone,spec_video_recherche' => array(
  380.             'php' => array(
  381.                 'method' => 'asidesUrlLists',
  382.                 'urls' => $spec_video_recherche,
  383.             ),
  384.             'title' => 'Rechercher'
  385.         )]);
  386.         $this->asides->load(['common_participer' => array(
  387.             'php' => array(
  388.                 'method' => 'asidesUrlLists_Ajoutez',
  389.                 'loadcustom' => array(
  390.                     'video',
  391.                     'spectacle',
  392.                 )
  393.             )
  394.         )]);
  395.     }
  396.     // }}}
  397.     // {{{ action_textes()
  398.     /** page textes par leurs auteurs
  399.      *
  400.      *
  401.      * @access public
  402.      * @return void
  403.      */
  404.     public function action_textes($asides true$params = array()){
  405.         $textes $this->em->getRepository(Texts::class);
  406.         $params_sql_spectacles = array(
  407.             'params' => array(
  408.                 'limit' => 'all',
  409.             ),
  410.             'special' => array(
  411.                 'playlists' => array(
  412.                     'text' => true,
  413.                     'idclassifications' => array(144), // par l'auteur
  414.                 ),
  415.                 'textfictif' => 0,
  416.                 'prochains' => '150',
  417.                 'plus_proche' => true,
  418.             ),
  419.             'dbg' => array('spectacles_auteurs_affiche','Texte par l\'auteur à l\'affiche'),
  420.         );
  421.         if(!empty($params['limit'])) {
  422.             $params_sql_texts['limit'] = $params['limit'];
  423.         }
  424.         $list_spectacles $this->spectacles->getListSpectacles($params_sql_spectacles);
  425.         $this->context['view']->textes_par_auteurs $x $textes->getTextsFromSpectacles($list_spectacles$params_sql_texts);
  426.         if(isset($this->context['view']->textes_par_auteurs)) {
  427.             foreach ($this->context['view']->textes_par_auteurs as $k => $v) {
  428.                 // voir s'il y a des contenus le texte par l'auteur
  429.                 if ($this->em->getRepository(Playlists::class)->countPlaylists('texts'$v['idtext'], 'class_texte_parauteur') > 0) {
  430.                     $playlist $this->em->getRepository(Playlists::class)->getByClassification('texts'$v['idtext'], 'class_texte_parauteur');
  431.                     $this->context['view']->textes_par_auteurs[$k]['url_clean_more'] = 'playlist/id/'.$playlist['urlClean'];
  432.                     $playlists $this->em->getRepository(Playlists::class);
  433.                     $sql 'SELECT p.idplaylist
  434.                           FROM playlists p
  435.                           LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
  436.                           WHERE pc.idclassification = 144 AND p.idtext = '.$v['idtext'].'
  437.                           GROUP BY p.idtext';
  438.                     $x $playlists->queryOne($sql);
  439.                     $pl $playlists->getInfosPlaylist(
  440.                         $x,
  441.                         array(
  442.                             'all' => true,
  443.                             'multimedias' => true,
  444.                             'format_vignette' => array('width'=>325,'height'=>162,'fleche'=>'none''ratio' => '169'//'direction'=>'crop'
  445.                         ),
  446.                         array('format_vignette' => true)
  447.                     );
  448.                     $video = (array_shift($pl['multimedias']));
  449.                     $this->context['view']->textes_par_auteurs[$k]['playlist']['vignette'] = $video['vignette'];
  450.                     $this->context['view']->textes_par_auteurs[$k]['playlist']['vignette_flou'] = $video['vignette_flou'];
  451.                     $this->context['view']->textes_par_auteurs[$k]['playlist']['thtv'] = true;
  452.                     $this->context['view']->textes_par_auteurs[$k]['playlist']['thtv_permalink'] = $video['permalink'];
  453.                     // TODO à remettre la ligne en dessous
  454. //                    $this->context['view']->textes_par_auteurs[$k]['playlist']['url_clean_video'] = $playlist['url_clean'];
  455.                 }
  456.             }
  457.         }
  458.         if($asides) {
  459.             // Array aside a laffiche
  460.             $texte_affiche = array(
  461.                 array(
  462.                     'name' => html_entity_decode('&Agrave; l\'affiche'),
  463.                     'key_url' => ''
  464.                 )
  465.             );
  466.             $texte_affiche_recherche = array(
  467.                 array(
  468.                     'name' => 'Un texte',
  469.                     'key_url' => ''
  470.                 )
  471.             );
  472.             $this->asides->load(['url_lists_alone' => array(
  473.                 'php' => array(
  474.                     'method' => 'asidesUrlLists',
  475.                     'urls' => $texte_affiche
  476.                 ),
  477.                 'title' => 'Voir'
  478.             )]);
  479.             $this->asides->load(['url_lists_alone,texte_affiche_recherche' => array(
  480.                 'php' => array(
  481.                     'method' => 'asidesUrlLists',
  482.                     'urls' => $texte_affiche_recherche
  483.                 ),
  484.                 'title' => 'Rechercher'
  485.             )]);
  486.         }
  487.     }
  488.     // }}}
  489.     // {{{ action_biographies()
  490.     /** page d'accueil de la région
  491.      *
  492.      *
  493.      * @access public
  494.      * @return void
  495.      */
  496.     public function action_biographies(){
  497.     }
  498.     // }}}
  499.     // {{{ action_entretiens()
  500.     /** page d'accueil de la région
  501.      *
  502.      *
  503.      * @access public
  504.      * @return void
  505.      */
  506.     public function action_entretiens(){
  507.         $multimedias $this->em->getRepository(Multimedias::class);
  508.         $object_multimedia $this->em->getRepository(ObjectMultimedia::class);
  509.         // trouver les videos en fonction du type
  510.         $videos = array();
  511.         $sql 'SELECT *
  512.                 FROM '.$object_multimedia->__table.' om, '.$multimedias->__table.' m
  513.                 WHERE om.idmultimedia=m.idmultimedia
  514.                 AND m.audio_video=2
  515.                 AND m.publish=1
  516.                 AND m.type IN (1,7)'//voir la page thtv:entretiens pour d'autres type de contenu possible
  517.         // $sql .= $extra_sql;
  518.         $sql .= ' GROUP BY m.idmultimedia
  519.                   ORDER BY dateinsert DESC LIMIT 0,30';
  520.         //echo $sql
  521.         $multimedias->query($sql);
  522.         $set_format = (array('width'=>130,'height'=>110,'direction'=>'crop','fleche'=>'moyen'));
  523.         while($multimedias->fetch()) {
  524.             $idmultimedia $multimedias->idmultimedia;
  525.             $videos[$idmultimedia] = $multimedias->getInfosMultimedia($idmultimedia,false,false,array('vignette' => $set_format,'tableau'=>true));
  526.             $videos[$idmultimedia]['description'] = $multimedias->description;
  527.             $videos[$idmultimedia]['description_courte'] = $multimedias->cutSentence($multimedias->description,100);
  528.             $videos[$idmultimedia]['quality'] = $multimedias->quality;
  529.         }
  530.         if (empty($recherche)) {
  531.             // on mélange la liste des vidéos
  532.             function scmp($a$b) {
  533.                 return rand(-1,1);
  534.             }
  535.             uasort($videos'scmp' );
  536.         }
  537.         //on passe les données à la vue
  538.         $this->context['view']->entretiens $videos;
  539.         // aside
  540.         $this->asides->load('videos_entretiens_search');
  541.     }
  542.     // }}}
  543.     // {{{ action_rencontres()
  544.     /** page d'accueil de la région
  545.      *
  546.      *
  547.      * @access public
  548.      * @return void
  549.      */
  550.     public function action_rencontres(){
  551.         $this->action_entretiens();
  552.     }
  553.     // }}}
  554.     // {{{ action_chaines()
  555.     /** page des chaines de la région
  556.      *
  557.      *  @Route("/videos/chaines", name="videos_chaines")
  558.      *
  559.      * @access public
  560.      * @return void
  561.      */
  562.     public function action_chaines(){
  563.         $this->view->action $this->context['action'] = 'chaines';
  564.         //On appel l'action des partenaires...
  565.         //Je réfléchis à supprimer totalement l'action partenaires et à en faire une redirection définitive.
  566.         $this->action_partenaires(false);
  567.         $asides_publicite = new asides();
  568.         asides::setEntityManager($this->em);
  569.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  570.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  571.         return $this->view('videos/chaines.html.twig');
  572.     }
  573.     // }}}
  574.     // {{{ action_partenaires()
  575.     /** page chaines de la région (anciennement partenaires)
  576.      *
  577.      *  @Route("/videos/partenaires", name="videos_partenaires")
  578.      *
  579.      * @access public
  580.      * @return void
  581.      */
  582.     public function action_partenaires($execute true){
  583.         if($execute){
  584.             $this->view->action $this->context['action'] = 'partenaires';
  585.         }
  586.         $list_structures = array();
  587.         $url_url 'videos';
  588.         //On récupère les principaux contacts partenaires vidéos
  589.         $this->context['view']->partenaires $this->em->getRepository(Contacts::class)->getListContacts(array(
  590.             /*'where' => array(
  591.                 array('contacts', 'idcontact', array(233,309,2519))
  592.             ),*/
  593.             'limit' => [0,200],
  594.             'idclassification' => array(111),
  595.             'dbg' => array('partenaires','Partenaires'),
  596.         ),
  597.             array(),
  598.             array('get_profile_picture' => true)
  599.         );
  600.         //On récupères tous les contacts possédant des vieos en partenariat
  601.         $sql_partenaires '
  602.             SELECT DISTINCT c.`idcontact`, c.`organisation`, c.`url_clean`, c.`idtypestructure`
  603.             FROM object_multimedia om, contacts c, multimedias m, typesstructures ts
  604.             WHERE om.`object`=\'contacts\'
  605.             AND om.`idmultimedia`=m.`idmultimedia`
  606.             AND om.`idobject`=c.`idcontact`
  607.             AND c.`idtypestructure`=ts.`idtypestructure`
  608.             AND om.`idrole`=23
  609.             AND c.`country`=\'FR\'
  610.             AND m.`publish`=1
  611.             AND c.`idtypestructure` IS NOT NULL
  612.             ORDER BY ts.`order_view`,  c.`organisation` ASC';
  613.         $partenaires $this->em->getRepository(Multimedias::class)->queryAll($sql_partenaires);
  614.         $typesstructure_list $this->em->getRepository(Typesstructures::class)->getTypeStructureList(true,true);
  615.         $this->context['view']->typesstructure_list $typesstructure_list;
  616.         // liste simple
  617.         foreach($partenaires as $p) {
  618.             if(!empty($typesstructure_list[$p['idtypestructure']])) {
  619.                 if(empty($list_structures[$p['idtypestructure']])) {
  620.                     $list_structures[$p['idtypestructure']]['type'] = $typesstructure_list[$p['idtypestructure']];
  621.                 }
  622.                 // grouper par type de tructure
  623.                 $list_structures[$p['idtypestructure']]['datas'][$p['idcontact']] = $p;
  624.                 if(array_key_exists($p['idtypestructure'],$typesstructure_list)) {
  625.                     $liste_selected_types[$p['idtypestructure']] = $typesstructure_list[$p['idtypestructure']];
  626.                 }
  627.             }
  628.         }
  629.         $this->context['view']->liste_selected_types $liste_selected_types;
  630.         $this->context['view']->list_structures $list_structures;
  631.         //affichage des partenaires dans l'aside
  632.         $this->asides->load(['url_lists' => array(
  633.             'exec' => ['htmlstart' => true],
  634.             'php' => array(
  635.                 'method' => 'asidesUrlLists',
  636.                 'urls' => array(
  637.                     'partenariat' => array(
  638.                         'name' => 'Principales chaînes',
  639.                         'key_url' => 'videos/'.$url_url.'/',
  640.                         'activate' => true
  641.                         // 'spectacle_anciens' => array('anciens' => true),
  642.                         // 'count' => $this->context['view']->nb_spectacles_coprod
  643.                     ),
  644.                 )
  645.             ),
  646.             'title' => 'Chaînes'
  647.         )]);
  648.         $this->asides->load(['videos_partenaires' => array(
  649.             'exec' => ['htmlend' => true]
  650.         )]);
  651.         $menu = array(
  652.             array(
  653.                 'name' => 'Mes videos favorites',
  654.                 'key_sub' => 'videos',
  655.             ),
  656.             array(
  657.                 'name' => 'Mes videos modifiables',
  658.                 'key_sub' => 'mesvideos',
  659.             ),
  660.         );
  661.         $this->asides->load(['url_lists_alone' => array(
  662.             'exec' => ['color' => 'index'],
  663.             'php' => [
  664.                 'method' => 'asidesUrlLists',
  665.                 'urls' => $menu,
  666.                 'url' => '/montheatre/key_sub'
  667.             ],
  668.             'title' => 'Mon théâtre'
  669.         )]);
  670.         if($execute){
  671.             return $this->view('videos/partenaires.html.twig');
  672.         }
  673.     }
  674.     // }}}
  675.     // {{{ action_dvd()
  676.     /** Page dvd
  677.      *
  678.      *  @Route("/videos/dvd", name="videos_dvd")
  679.      *  @Route("/videos/dvd/type/{type}", name="videos_dvd_type")
  680.      *
  681.      * @access public
  682.      * @return void
  683.      */
  684.     public function action_dvd($type nullStats $globalstatsRequest $request)
  685.     {
  686.         $this->view->action $this->context['action'] = 'dvd';
  687.         $this->context['params']['type'] = $type;
  688.         // contacts
  689.         $dvds $this->em->getRepository(Dvds::class);
  690.         $dvd_person $this->em->getRepository(DvdPerson::class);
  691.         $persons $this->em->getRepository(Persons::class);
  692.         $menu_page = array(
  693.             'populaires' => array(
  694.                 'name' => 'Les plus vus',
  695.                 'key' => 'populaires'
  696.             ),
  697.             'derniers' => array(
  698.                 'name' => 'Les derniers référencés',
  699.                 'key' => 'derniers'
  700.             ),
  701.             'tous' => array(
  702.                 'name' => 'Tous les DVD',
  703.                 'key' => 'tous'
  704.             )
  705.         );
  706.         $type "populaires";
  707.         if(isset($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $menu_page)){
  708.             $type $this->context['params']['type'];
  709.         }
  710.         $types_persons = array(
  711.             'artistes' => array(
  712.                 'idrole' => null,
  713.                 'titre_page' => 'Tous les DVD',
  714.                 'type_person' => 'Artistes (tous)',
  715.                 'type_person_simple' => 'artiste',
  716.                 'type_liste' => 'artistes',
  717.             ),
  718.             'auteurs' => array(
  719.                 'idrole' => 21,
  720.                 'titre_page' => 'DVD d\'auteurs',
  721.                 'type_person' => 'Auteurs',
  722.                 'type_person_simple' => 'auteur',
  723.                 'type_liste' => 'auteurs',
  724.             ),
  725.             'metteurs-en-scene' => array(
  726.                 'idrole' => 1,
  727.                 'titre_page' => 'DVD de metteurs en scène',
  728.                 'type_person' => 'Metteurs en scène',
  729.                 'type_person_simple' => 'metteur en scène',
  730.                 'type_liste' => 'metteurs',
  731.             ),
  732.             'acteurs' => array(
  733.                 'idrole' => 5,
  734.                 'titre_page' => 'DVD d\'acteurs',
  735.                 'type_person' => 'Acteurs',
  736.                 'type_person_simple' => 'acteur',
  737.                 'type_liste' => 'acteurs',
  738.             ),
  739.             'realisateurs' => array(
  740.                 'idrole' => 26,
  741.                 'titre_page' => 'DVD de réalisateurs',
  742.                 'type_person' => 'Réalisateurs',
  743.                 'type_person_simple' => 'réalisateur',
  744.                 'type_liste' => 'réalisateurs',
  745.             ),
  746.         );
  747.         // compter le nb de DVD
  748.         $this->view->nb_dvds $dvds->countDvds();
  749.         //Les différents filtres de recherches
  750.         if(!empty($_GET['type_recherche']) && array_key_exists($_GET['type_recherche'], $types_persons)) {
  751.             $type_recherche $_GET['type_recherche'];
  752.         } else {
  753.             $type_recherche 'artistes';
  754.         }
  755.         foreach($types_persons as $k=>$v) {
  756.             if($k==$type_recherche) {
  757.                 $types_persons[$k]['on'] = true;
  758.             }
  759.         }
  760.         // lettre au hasard
  761.         $sql_letters '
  762.             SELECT DISTINCT(UPPER(LEFT(p.`lastname`, 1))) as letter
  763.             FROM '.$dvd_person->__table.' dp, '.$persons->__table.' p, dvds d
  764.             WHERE dp.`idperson`=p.`idperson` AND d.`iddvd`=dp.`iddvd` ';
  765.         // filtrer par rôle
  766.         if($type_recherche!='artistes') {
  767.             $sql_letters .= ' AND dp.`idrole`='.$types_persons[$type_recherche]['idrole'].' ';
  768.         }
  769.         $sql_letters .= '
  770.             AND d.`publish`=1
  771.             GROUP BY p.`lastname`
  772.             ORDER BY letter';
  773.         $valid_letters $persons->queryCol($sql_letters);
  774.         $view $this->view;
  775.         if(empty($_REQUEST['title']) && $type == 'tous'){
  776.             $alpha_rand true;
  777.         }
  778.         $this->getAlpha();
  779.         //Si l'utilsiateur sélectionné 'tou les DVD'
  780.         if($type == 'tous'){
  781.             // recherche ou page classique
  782.             if(!empty($_REQUEST['title'])) {
  783.                 $type "recherche";
  784.                 // filtrer
  785.                 $title trim(filter_var($_REQUEST['title'], FILTER_SANITIZE_STRINGFILTER_FLAG_NO_ENCODE_QUOTES));
  786.                 $list $dvds->splitKeywords($title);
  787.                 if($list) {
  788.                     if(!empty($list[$dvds->IDSTR])) {
  789.                         // mots clés
  790.                         foreach($list[$dvds->IDSTR] as $s) {
  791.                             if(strlen($s)>2) {
  792.                                 $sql_more_name[] = 'title LIKE \'%'.$s.'%\'';
  793.                             }
  794.                         }
  795.                         if (!empty($sql_more_name)) {
  796.                             $sql_where_keywords '('.join(' OR '$sql_more_name).')';
  797.                         }
  798.                     }
  799.                 }
  800.                 $sql 'SELECT '.$dvds->__idtable.'
  801.                         FROM '.$dvds->__table.'
  802.                         WHERE publish=1
  803.                         AND title LIKE '.$dvds->quote('%'.$title.'%');
  804.                 if (!empty($sql_where_keywords)) {
  805.                     $sql .= ' OR '.$sql_where_keywords;
  806.                 }
  807.                 $iddvds $dvds->queryCol($sql);
  808.                 if(!empty($iddvds)) {
  809.                     $params_sql_search = array(
  810.                         'limit' => array(02000),
  811.                         'dbg' => array('dvds_lettre''Les dvds'),
  812.                         'where' => array(
  813.                             array('dvds','iddvd',$iddvds)
  814.                         )
  815.                     );
  816.                     $this->view->list_search_dvds $dvds->getListDvds($params_sql_search);
  817.                     $this->view->nb_list_search_dvds count($this->view->list_search_dvds);
  818.                 }
  819.                 $this->view->search_dvds $title;
  820.             }
  821.             else{
  822.                 // trouver tous les personnes qui sont liés à une vidéo
  823.                 $sql_persons '
  824.                     SELECT DISTINCT(p.`idperson`),p.`lastname`,p.`firstname`,p.`url_clean`
  825.                     FROM '.$dvd_person->__table.' dp, '.$persons->__table.' p, dvds d
  826.                     WHERE dp.`idperson`=p.`idperson` AND d.`iddvd`=dp.`iddvd` ';
  827.                 if($type_recherche!='artistes') {
  828.                     $sql_persons .= ' AND dp.`idrole`='.$types_persons[$type_recherche]['idrole'].' ';
  829.                 }
  830.                 $sql_persons .= '
  831.                     AND d.`publish`=1
  832.                     AND p.`lastname` REGEXP \'^'.$this->context['alpha'].'\'
  833.                     ORDER BY p.`lastname`';
  834.                 $persons_liste $persons->queryAll($sql_persons);
  835.                 // les identifiants
  836.                 foreach($persons_liste as $k=>$v) {
  837.                     $idpersons[] = $v['idperson'];
  838.                 }
  839.                 $this->view->persons $persons_liste;
  840.                 // infos sur le type
  841.                 $this->view->infos_type $types_persons[$type_recherche];
  842.                 $this->view->{$types_persons[$type_recherche]['type_liste']} = true;
  843.                 $this->view->type_recherche $type_recherche;
  844.                 $this->view->types_persons $types_persons;
  845.                 $params_sql = array(
  846.                     'limit' => array(02000),
  847.                     'dbg' => array('dvds_lettre''Les dvds'),
  848.                     'special' => array(
  849.                         'idpersons' => $idpersons,
  850.                         'idrole_person' => $types_persons[$type_recherche]['idrole']
  851.                     )
  852.                 );
  853.                 $this->view->list_dvds $dvds->getListDvds($params_sql);
  854.             }
  855.         }
  856.         //Si l'utilisateur sélectionne les dvds les plus populaires
  857.         else if($type == 'populaires')
  858.         {
  859.             // les dvds les plus vus => on va chercher les documents multimédias les plus vus qui ont on un DVD
  860.             // classe de stats
  861.             $plusvues $globalstats->getMostDvdViewed(30,7);
  862.             if(!empty($plusvues)) {
  863.                 foreach($plusvues as $k=>$v) {
  864.                     $idmultimedia_plusvues[] = $v["idmultimedia"];
  865.                 }
  866.                 $params_sql_plusvus = array(
  867.                     'limit' => array(020),
  868.                     'dbg' => array('dvds_plusvus''Les dvds plus vus'),
  869.                     'special' => array(
  870.                         'idmultimedias' => $idmultimedia_plusvues,
  871.                     )
  872.                 );
  873.                 $this->view->list_plusvus $dvds->getListDvds($params_sql_plusvus);
  874.             }
  875.         }
  876.         //si l'utilisateur sélectionne les derniers dvd
  877.         else if($type == 'derniers')
  878.         {
  879.             // les nouveaux DVD
  880.             $params_sql_nouveaux = array(
  881.                 'limit' => array(020),
  882.                 'dbg' => array('dvds_nouveaux''Les dvds nouveaux'),
  883.                 'order' => array('dateinsert'),
  884.             );
  885.             $this->view->list_dvds_nouveaux $dvds->getListDvds($params_sql_nouveaux);
  886.         }
  887.         // Placeholder du champ de recherche des dvd
  888. //        $form->addElement('text', 'title', '', );
  889.         $this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder(''FormType::class);
  890.         $this->context['formAsideSearch']->add('title'TextType::class, [
  891.             'attr' => [
  892.                 'id'=>'dvd',
  893.                 'placeholder' => 'Rechercher'
  894.             ]
  895.         ]);
  896.         $this->getCommonSearchView($request);
  897.         // asides
  898.         $this->asides->load(['url_lists_alone' => array(
  899.             'php' => [
  900.                 'method' => 'asidesUrlLists',
  901.                 'urls' => $menu_page,
  902.                 'url' => '/videos/dvd/type/key/',
  903.                 'params' => array(
  904.                     'activate' => $type
  905.                 )
  906.             ],
  907.             'title' => 'Voir'
  908.         )]);
  909.         $this->asides->load('dvd_search');
  910.         $asides_publicite = new asides();
  911.         asides::setEntityManager($this->em);
  912.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  913.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  914.         return $this->view('videos/dvd.html.twig');
  915.     }
  916.     // }}}
  917.     public function getAlpha()
  918.     {
  919.         $alphabet $this->func->getAlphaUpper();
  920.         if (empty($valid_letters)) $valid_letters $alphabet;
  921.         // recherche par lettre soit on a le parametre,
  922.         // soit une lettre au hasard
  923.         if(isset($_GET['lettre']) && strlen($_GET['lettre'])==&& in_array(strtoupper($_GET['lettre']), $valid_letters)) {
  924.             $this->context['alpha'] = $alpha strtoupper($_GET['lettre']);
  925.         } else {
  926.             if (!empty($alpha_rand)) {
  927.                 $count 0;
  928.                 do {
  929.                     $alpha strtoupper(array_rand($alphabet));
  930.                     $count++;
  931.                 } while (!in_array($alpha$valid_letters) && $count 10);
  932.                 if ($count 10) {
  933.                     return $this->redirect($_SERVER['REQUEST_URI'].'?lettre='.$alpha);
  934.                 } else {
  935.                     $alpha null;
  936.                 }
  937.             } else {
  938.                 $alpha null;
  939.             }
  940.             $this->context['alpha'] = $alpha;
  941.         }
  942.         // alphabet
  943.         foreach($alphabet as $l => $upperl) {
  944.             $alphabet_tab[$l]['nom'] = $upperl;
  945.             if($upperl==$alpha) {
  946.                 $alphabet_tab[$l]['active'] = 'active';
  947.             }
  948.             $alphabet_tab[$l]['ok'] = false;
  949.         }
  950.         foreach($valid_letters as $L) {
  951.             $l strtolower($L);
  952.             if (!empty($alphabet_tab[$l])) {
  953.                 $alphabet_tab[$l]['ok'] = true;
  954.             }
  955.         }
  956.         $this->view->alphabet $alphabet_tab;
  957.         $this->view->alpha $alpha;
  958.     }
  959. }