<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use App\Service\Abonnements\Abonnements;
use App\Service\Functions;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Classes\Stats\Stats;
use TheatreCore\Entity\Contacts;
use TheatreCore\Entity\DvdPerson;
use TheatreCore\Entity\Dvds;
use TheatreCore\Entity\Multimedias;
use TheatreCore\Entity\ObjectMultimedia;
use TheatreCore\Entity\Persons;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Podcasts;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Texts;
use TheatreCore\Entity\Typesstructures;
class VideosController extends TheatreController
{
//dataobject des spectacles
protected $spectacles;
//pour les asides
protected $asides;
// par page
protected $perPage = 20;
protected $videos_excludes = array();
private $functions;
// {{{ _construct()
/** constructeur hérité
*
*/
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, TokenStorageInterface $tokenStorage, Functions $functions, Abonnements $abonnements)
{
$GLOBALS['rub_courante'] = 'videos';
parent::__construct($translator, $tokenStorage);
$this->em = $em;
//on appel le dataobject des spectacles
$this->spectacles = $this->em->getRepository(Spectacles::class);
//on init les asides
$this->asides = new asides();
$this->func = $functions;
$this->serviceAbonnements = $abonnements;
//Vidéos devant être exclus des listes 'vidéos populaires'
$this->videos_excludes = array(5126,6056,11808,11863,11868,11899,11895,11897,11901,2024,5328);
}
// }}}
// {{{ finalizeAction()
/** Appelez après les actions
*
*/
protected function finalizeAction(){
// $this->getAsides();
$this->context['view']->aside = $this->asides->view($this->context['view']);
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlListMenuVideos',
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
}
// }}}
/** redirection video embed
*
* @Route("/videos/actualites/embed/{code}", name="videos_embed")
*/
public function embedRedirect(string $code): RedirectResponse
{
return $this->redirectToRoute('embed', [
'code' => $code
]);
}
// {{{ action_actualites()
/** page d'accueil de la région
*
* @Route("/videos/actualites", name="videos_index")
*/
public function action_actualites(Stats $globalstats)
{
$this->view->action = $this->context['action'] = 'actualites';
// objet
$multimedias = $this->em->getRepository(Multimedias::class);
// Video à la une
// une vidéo d'un spectacle à l'affiche
$params_query_affiche = array(
//'affiche' => array('today' => 180),
'language' => 'fr',
'limit' => array(0,1),
'where' => array(array('multimedias', 'video_tete', 1)),
'dbg' => array('tete','Vidéo de tête d\'un spectacle à l\'affiche'),
);
$video_tete_result = $multimedias->getListMultimedias($params_query_affiche);
//Si une vidéo est sélectionné par un membre du STAFF thnet
if(!empty($video_tete_result)) {
foreach($video_tete_result as $k=>$v) {
$video_tete = $v;
$idmultimedia_affiche = $v['idmultimedia'];
break;
}
}
//Sinon on prends la vidéo la plus populaire
else{
//Les fichiers multimedias que l'on ne souhaite pas voir afficher en page d'accueil
$multimedia_exclude = $this->videos_excludes;
$plusvues = $globalstats->getMostViewed(1,1,$multimedia_exclude);
if(!empty($plusvues)){
$idmultimedia_affiche = $plusvues[0]['idmultimedia'];
$video_tete = $multimedias->getInfosMultimedia($idmultimedia_affiche);
}
}
if(!empty($video_tete)){
//$set_format = (array('width'=>380,'height'=>330,'direction'=>'crop','fleche'=>'grand'));
$set_format = (array('width'=>445, 'direction'=>'thumb','fleche'=>'grand','ratio'=> 169));
$video_tete = array_merge($video_tete, array(
'vignette' => $multimedias->getVignetteMultimedia($video_tete['idmultimedia'],$set_format),
'description_courte' => $multimedias->cutSentence($video_tete['description'],100),
'langue' => $multimedias->getNameLanguage($video_tete['language'])
));
$this->context['view']->video_tete = array($video_tete);
}
// les vidéos de spectacles à l'affiche
$params_videos_affiche = array(
// 'where' => array(array('multimedias', 'idmultimedia', $exclude_videos,'AND','NOT IN')),
'order' => array('RAND()'),
'affiche' => array('today' => 7),
'limit' => array(0,6),
'dbg' => array('affiche','Vidéos de spectacles à l\'affiche'),
);
$format_vignette_video = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none', 'ratio' => '169');
$this->context['view']->videos_affiche = $multimedias->getListMultimedias($params_videos_affiche,
$format_vignette_video,
array('get_schedule' => true, 'format_vignette' => true));
$params_videos_dernieres = array(
// 'where' => array(array('multimedias', 'idmultimedia', $exclude_videos,'AND','NOT IN')),
// 'affiche' => array('today' => 7),
'limit' => array(0,8),
'dbg' => array('affiche','Vidéos de spectacles à l\'affiche'),
);
$this->context['view']->videos_dernieres = $multimedias->getListMultimedias($params_videos_dernieres,
$format_vignette_video,
array('format_vignette' => true));
//Tous les textes par leurs auteurs
$this->action_textes(false, ['limit' => [0, 4]]);
// NOTE: culturebox
$culturebox_params = array(
'limit' => array(0,1),
'random' => ' ',
'special' => array(
'type_podcast' => 'culturebox',
'current' => true,
),
'dbg' => array('derniers_culturebox', 'Les derniers replay culturebox référencés'),
);
$format_vignette = array('width'=>480,'direction'=>'thumb');
$this->context['view']->derniers_culturebox = $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params,$format_vignette);
// les vidéos les plus vues
// classe de stats
$multimedia_exclude = $this->videos_excludes;
$plusvues = $globalstats->getMostViewed(7,8,$multimedia_exclude);
if(!empty($plusvues)) {
foreach($plusvues as $k=>$v) {
$idmultimedia_plusvues[] = $v["idmultimedia"];
}
if(!empty($idmultimedia_plusvues)) {
$params_query_plusvues = array(
'where' => array(array('multimedias', 'idmultimedia', $idmultimedia_plusvues)),
'order' => array(array('multimedias','idmultimedia',$idmultimedia_plusvues)), // classement FIELD()
'direction' => 'no',
'dbg' => array('plusvues','Vidéos les plus vues'),
);
$this->context['view']->plusvues_videos = $multimedias->getListMultimedias($params_query_plusvues);
}
}
// nb de vidéos
$this->context['view']->nb_videos = $multimedias->countMultimedias();
// nb heure vidéo
$this->context['view']->nb_hours = $multimedias->countHours();
// On supprime de l'affiche la date d'ajout pour les dernieres_videos
$this->context['view']->dernieres_videos = true;
// Array pour le menu montheatre videos
$menu = array(
array(
'name' => 'Mes videos favorites',
'key_sub' => 'videos',
),
array(
'name' => 'Mes videos modifiables',
'key_sub' => 'mesvideos',
),
);
// asides
$this->asides->load(['common_carte' => array(
'url' => "/spectacles/theatre/region-videos/area/get_id"
)]);
$this->asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'index'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu,
'url' => '/montheatre/key_sub'
],
'title' => 'Mon théâtre'
)]);
$this->asides->load(['common_culturebox' => [
'footer' => true
]]);
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addWithNational($this->asides); //$this->area
$this->asides->load('videos_nb_vid');
$this->asides->load('common_facebook');
$this->asides->load('common_twitter');
$this->asides->load('common_participer_contacts');
$asides_publicite = new asides();
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addGoogle($asides_publicite, $this->serviceAbonnements);
$this->context['view']->asides_publicite = $asides_publicite->view($this->context['view']);
return $this->view('videos/actualites.html.twig');
}
// }}}
// {{{ action_populaires()
/** page des viéos les plus populaires
*
* @Route("/videos/populaires", name="videos_populaires")
* @Route("/videos/populaires/day/{day}", name="videos_populaires_day")
*
* @access public
* @return void
*/
public function action_populaires($day = 30, Stats $globalstats)
{
$this->context['params']['day'] = $day;
$this->view->action = $this->context['action'] = 'populaires';
$this->perPage = 50;
$menu_days = array(
1 => array(
'name' => 'Hier',
'key' => 1,
'solo' => 'activate',
),
7 => array(
'name' => '7 derniers jours',
'key' => 7,
),
30 => array(
'name' => '30 derniers jours',
'key' => 30,
),
// 365 => array(
// 'name' => '12 derniers mois',
// 'key' => 365,
// )
);
if(!empty($this->context['params']['day']) && array_key_exists($this->context['params']['day'], $menu_days))
{
$this->view->day = $day = (int)$this->context['params']['day'];
$this->view->last_day = false;
if(!empty($menu_days[$day]['solo'])){
$this->view->last_day = true;
}
}
$multimedias = $this->em->getRepository(Multimedias::class);
//Les fichiers multimedias que l'on ne souhaite pas voir afficher en page d'accueil
$multimedia_exclude = $this->videos_excludes;
$plusvues = $globalstats->getMostViewed($day,51,$multimedia_exclude);
if(!empty($plusvues)) {
foreach($plusvues as $k=>$v) {
$idmultimedia_plusvues[] = $v["idmultimedia"];
}
if(!empty($idmultimedia_plusvues)) {
$params_query_plusvues = array(
'limit' => array(0,50),
'where' => array(array('multimedias', 'idmultimedia', $idmultimedia_plusvues)),
'order' => array(array('multimedias','idmultimedia',$idmultimedia_plusvues)), // classement FIELD()
'direction' => 'no',
'dbg' => array('plusvues','Vidéos les plus vues'),
);
$plusvues = $multimedias->getListMultimedias($params_query_plusvues);
// remettre en forme
// foreach($plusvues_videos as $k=>$v) {
// $plusvues[$k] = $v;
// }
// getRatingsAndComments($plusvues);
$this->context['view']->plusvues_videos = $plusvues;
}
}
$params_carte_common['url'] = '/spectacles/theatre/region-videos/area/get_id';
$this->asides->load(['url_lists_alone,menu_days' => array(
'exec' => ['color' => 'videos'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu_days,
'url' => '/videos/populaires/day/key',
'params' => array(
'activate' => $day
)
],
'title' => 'Par période'
)]);
$this->asides->load(['common_carte' => $params_carte_common]);
$menu_montheatre_videos = array(
array(
'name' => 'Mes videos favorites',
'key_sub' => 'videos',
),
array(
'name' => 'Mes videos modifiables',
'key_sub' => 'mesvideos',
),
);
$this->asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'index'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu_montheatre_videos,
'url' => '/montheatre/key_sub'
],
'title' => 'Mon théâtre'
)]);
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addWithNational($this->asides); //$this->area
$this->asides->load('common_participer_contacts');
$this->asides->load('common_facebook');
$this->asides->load('common_twitter');
//On affiche la publicité google
$asides_publicite = new asides();
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addGoogle($asides_publicite, $this->serviceAbonnements);
$this->context['view']->asides_publicite = $asides_publicite->view($this->context['view']);
return $this->view('videos/populaires.html.twig');
}
// }}}
// {{{ action_spectacles()
/** page d'accueil de la région
*
*
* @access public
* @return void
*/
public function action_spectacles(){
$spectacles = $this->em->getRepository(Spectacles::class);
$params_spectacles = array(
'special' => array(
'prochains' => true,
'contenus_associes_multimedias' => true
)
);
$this->context['view']->spectacles_videos = $spectacles->getListSpectacles($params_spectacles);
// Array pour le 1er URL LIST
$spec_affiche_video = array(
array(
'name' => 'Les spectacles à l\'affiche avec vidéos',
'key_url' => ''
)
);
// Second array pour le 2e url list
$spec_video_recherche = array(
array(
'name' => 'Un spectacle',
'key_url' => ''
)
);
$this->asides->load(['url_lists_alone' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $spec_affiche_video,
),
'title' => 'Voir'
)]);
$this->asides->load(['url_lists_alone,spec_video_recherche' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $spec_video_recherche,
),
'title' => 'Rechercher'
)]);
$this->asides->load(['common_participer' => array(
'php' => array(
'method' => 'asidesUrlLists_Ajoutez',
'loadcustom' => array(
'video',
'spectacle',
)
)
)]);
}
// }}}
// {{{ action_textes()
/** page textes par leurs auteurs
*
*
* @access public
* @return void
*/
public function action_textes($asides = true, $params = array()){
$textes = $this->em->getRepository(Texts::class);
$params_sql_spectacles = array(
'params' => array(
'limit' => 'all',
),
'special' => array(
'playlists' => array(
'text' => true,
'idclassifications' => array(144), // par l'auteur
),
'textfictif' => 0,
'prochains' => '150',
'plus_proche' => true,
),
'dbg' => array('spectacles_auteurs_affiche','Texte par l\'auteur à l\'affiche'),
);
if(!empty($params['limit'])) {
$params_sql_texts['limit'] = $params['limit'];
}
$list_spectacles = $this->spectacles->getListSpectacles($params_sql_spectacles);
$this->context['view']->textes_par_auteurs = $x = $textes->getTextsFromSpectacles($list_spectacles, $params_sql_texts);
if(isset($this->context['view']->textes_par_auteurs)) {
foreach ($this->context['view']->textes_par_auteurs as $k => $v) {
// voir s'il y a des contenus le texte par l'auteur
if ($this->em->getRepository(Playlists::class)->countPlaylists('texts', $v['idtext'], 'class_texte_parauteur') > 0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('texts', $v['idtext'], 'class_texte_parauteur');
$this->context['view']->textes_par_auteurs[$k]['url_clean_more'] = 'playlist/id/'.$playlist['urlClean'];
$playlists = $this->em->getRepository(Playlists::class);
$sql = 'SELECT p.idplaylist
FROM playlists p
LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
WHERE pc.idclassification = 144 AND p.idtext = '.$v['idtext'].'
GROUP BY p.idtext';
$x = $playlists->queryOne($sql);
$pl = $playlists->getInfosPlaylist(
$x,
array(
'all' => true,
'multimedias' => true,
'format_vignette' => array('width'=>325,'height'=>162,'fleche'=>'none', 'ratio' => '169') //'direction'=>'crop'
),
array('format_vignette' => true)
);
$video = (array_shift($pl['multimedias']));
$this->context['view']->textes_par_auteurs[$k]['playlist']['vignette'] = $video['vignette'];
$this->context['view']->textes_par_auteurs[$k]['playlist']['vignette_flou'] = $video['vignette_flou'];
$this->context['view']->textes_par_auteurs[$k]['playlist']['thtv'] = true;
$this->context['view']->textes_par_auteurs[$k]['playlist']['thtv_permalink'] = $video['permalink'];
// TODO à remettre la ligne en dessous
// $this->context['view']->textes_par_auteurs[$k]['playlist']['url_clean_video'] = $playlist['url_clean'];
}
}
}
if($asides) {
// Array aside a laffiche
$texte_affiche = array(
array(
'name' => html_entity_decode('À l\'affiche'),
'key_url' => ''
)
);
$texte_affiche_recherche = array(
array(
'name' => 'Un texte',
'key_url' => ''
)
);
$this->asides->load(['url_lists_alone' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $texte_affiche
),
'title' => 'Voir'
)]);
$this->asides->load(['url_lists_alone,texte_affiche_recherche' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $texte_affiche_recherche
),
'title' => 'Rechercher'
)]);
}
}
// }}}
// {{{ action_biographies()
/** page d'accueil de la région
*
*
* @access public
* @return void
*/
public function action_biographies(){
}
// }}}
// {{{ action_entretiens()
/** page d'accueil de la région
*
*
* @access public
* @return void
*/
public function action_entretiens(){
$multimedias = $this->em->getRepository(Multimedias::class);
$object_multimedia = $this->em->getRepository(ObjectMultimedia::class);
// trouver les videos en fonction du type
$videos = array();
$sql = 'SELECT *
FROM '.$object_multimedia->__table.' om, '.$multimedias->__table.' m
WHERE om.idmultimedia=m.idmultimedia
AND m.audio_video=2
AND m.publish=1
AND m.type IN (1,7)'; //voir la page thtv:entretiens pour d'autres type de contenu possible
// $sql .= $extra_sql;
$sql .= ' GROUP BY m.idmultimedia
ORDER BY dateinsert DESC LIMIT 0,30';
//echo $sql
$multimedias->query($sql);
$set_format = (array('width'=>130,'height'=>110,'direction'=>'crop','fleche'=>'moyen'));
while($multimedias->fetch()) {
$idmultimedia = $multimedias->idmultimedia;
$videos[$idmultimedia] = $multimedias->getInfosMultimedia($idmultimedia,false,false,array('vignette' => $set_format,'tableau'=>true));
$videos[$idmultimedia]['description'] = $multimedias->description;
$videos[$idmultimedia]['description_courte'] = $multimedias->cutSentence($multimedias->description,100);
$videos[$idmultimedia]['quality'] = $multimedias->quality;
}
if (empty($recherche)) {
// on mélange la liste des vidéos
function scmp($a, $b) {
return rand(-1,1);
}
uasort($videos, 'scmp' );
}
//on passe les données à la vue
$this->context['view']->entretiens = $videos;
// aside
$this->asides->load('videos_entretiens_search');
}
// }}}
// {{{ action_rencontres()
/** page d'accueil de la région
*
*
* @access public
* @return void
*/
public function action_rencontres(){
$this->action_entretiens();
}
// }}}
// {{{ action_chaines()
/** page des chaines de la région
*
* @Route("/videos/chaines", name="videos_chaines")
*
* @access public
* @return void
*/
public function action_chaines(){
$this->view->action = $this->context['action'] = 'chaines';
//On appel l'action des partenaires...
//Je réfléchis à supprimer totalement l'action partenaires et à en faire une redirection définitive.
$this->action_partenaires(false);
$asides_publicite = new asides();
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addGoogle($asides_publicite, $this->serviceAbonnements);
$this->context['view']->asides_publicite = $asides_publicite->view($this->context['view']);
return $this->view('videos/chaines.html.twig');
}
// }}}
// {{{ action_partenaires()
/** page chaines de la région (anciennement partenaires)
*
* @Route("/videos/partenaires", name="videos_partenaires")
*
* @access public
* @return void
*/
public function action_partenaires($execute = true){
if($execute){
$this->view->action = $this->context['action'] = 'partenaires';
}
$list_structures = array();
$url_url = 'videos';
//On récupère les principaux contacts partenaires vidéos
$this->context['view']->partenaires = $this->em->getRepository(Contacts::class)->getListContacts(array(
/*'where' => array(
array('contacts', 'idcontact', array(233,309,2519))
),*/
'limit' => [0,200],
'idclassification' => array(111),
'dbg' => array('partenaires','Partenaires'),
),
array(),
array('get_profile_picture' => true)
);
//On récupères tous les contacts possédant des vieos en partenariat
$sql_partenaires = '
SELECT DISTINCT c.`idcontact`, c.`organisation`, c.`url_clean`, c.`idtypestructure`
FROM object_multimedia om, contacts c, multimedias m, typesstructures ts
WHERE om.`object`=\'contacts\'
AND om.`idmultimedia`=m.`idmultimedia`
AND om.`idobject`=c.`idcontact`
AND c.`idtypestructure`=ts.`idtypestructure`
AND om.`idrole`=23
AND c.`country`=\'FR\'
AND m.`publish`=1
AND c.`idtypestructure` IS NOT NULL
ORDER BY ts.`order_view`, c.`organisation` ASC';
$partenaires = $this->em->getRepository(Multimedias::class)->queryAll($sql_partenaires);
$typesstructure_list = $this->em->getRepository(Typesstructures::class)->getTypeStructureList(true,true);
$this->context['view']->typesstructure_list = $typesstructure_list;
// liste simple
foreach($partenaires as $p) {
if(!empty($typesstructure_list[$p['idtypestructure']])) {
if(empty($list_structures[$p['idtypestructure']])) {
$list_structures[$p['idtypestructure']]['type'] = $typesstructure_list[$p['idtypestructure']];
}
// grouper par type de tructure
$list_structures[$p['idtypestructure']]['datas'][$p['idcontact']] = $p;
if(array_key_exists($p['idtypestructure'],$typesstructure_list)) {
$liste_selected_types[$p['idtypestructure']] = $typesstructure_list[$p['idtypestructure']];
}
}
}
$this->context['view']->liste_selected_types = $liste_selected_types;
$this->context['view']->list_structures = $list_structures;
//affichage des partenaires dans l'aside
$this->asides->load(['url_lists' => array(
'exec' => ['htmlstart' => true],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => array(
'partenariat' => array(
'name' => 'Principales chaînes',
'key_url' => 'videos/'.$url_url.'/',
'activate' => true
// 'spectacle_anciens' => array('anciens' => true),
// 'count' => $this->context['view']->nb_spectacles_coprod
),
)
),
'title' => 'Chaînes'
)]);
$this->asides->load(['videos_partenaires' => array(
'exec' => ['htmlend' => true]
)]);
$menu = array(
array(
'name' => 'Mes videos favorites',
'key_sub' => 'videos',
),
array(
'name' => 'Mes videos modifiables',
'key_sub' => 'mesvideos',
),
);
$this->asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'index'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu,
'url' => '/montheatre/key_sub'
],
'title' => 'Mon théâtre'
)]);
if($execute){
return $this->view('videos/partenaires.html.twig');
}
}
// }}}
// {{{ action_dvd()
/** Page dvd
*
* @Route("/videos/dvd", name="videos_dvd")
* @Route("/videos/dvd/type/{type}", name="videos_dvd_type")
*
* @access public
* @return void
*/
public function action_dvd($type = null, Stats $globalstats, Request $request)
{
$this->view->action = $this->context['action'] = 'dvd';
$this->context['params']['type'] = $type;
// contacts
$dvds = $this->em->getRepository(Dvds::class);
$dvd_person = $this->em->getRepository(DvdPerson::class);
$persons = $this->em->getRepository(Persons::class);
$menu_page = array(
'populaires' => array(
'name' => 'Les plus vus',
'key' => 'populaires'
),
'derniers' => array(
'name' => 'Les derniers référencés',
'key' => 'derniers'
),
'tous' => array(
'name' => 'Tous les DVD',
'key' => 'tous'
)
);
$type = "populaires";
if(isset($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $menu_page)){
$type = $this->context['params']['type'];
}
$types_persons = array(
'artistes' => array(
'idrole' => null,
'titre_page' => 'Tous les DVD',
'type_person' => 'Artistes (tous)',
'type_person_simple' => 'artiste',
'type_liste' => 'artistes',
),
'auteurs' => array(
'idrole' => 21,
'titre_page' => 'DVD d\'auteurs',
'type_person' => 'Auteurs',
'type_person_simple' => 'auteur',
'type_liste' => 'auteurs',
),
'metteurs-en-scene' => array(
'idrole' => 1,
'titre_page' => 'DVD de metteurs en scène',
'type_person' => 'Metteurs en scène',
'type_person_simple' => 'metteur en scène',
'type_liste' => 'metteurs',
),
'acteurs' => array(
'idrole' => 5,
'titre_page' => 'DVD d\'acteurs',
'type_person' => 'Acteurs',
'type_person_simple' => 'acteur',
'type_liste' => 'acteurs',
),
'realisateurs' => array(
'idrole' => 26,
'titre_page' => 'DVD de réalisateurs',
'type_person' => 'Réalisateurs',
'type_person_simple' => 'réalisateur',
'type_liste' => 'réalisateurs',
),
);
// compter le nb de DVD
$this->view->nb_dvds = $dvds->countDvds();
//Les différents filtres de recherches
if(!empty($_GET['type_recherche']) && array_key_exists($_GET['type_recherche'], $types_persons)) {
$type_recherche = $_GET['type_recherche'];
} else {
$type_recherche = 'artistes';
}
foreach($types_persons as $k=>$v) {
if($k==$type_recherche) {
$types_persons[$k]['on'] = true;
}
}
// lettre au hasard
$sql_letters = '
SELECT DISTINCT(UPPER(LEFT(p.`lastname`, 1))) as letter
FROM '.$dvd_person->__table.' dp, '.$persons->__table.' p, dvds d
WHERE dp.`idperson`=p.`idperson` AND d.`iddvd`=dp.`iddvd` ';
// filtrer par rôle
if($type_recherche!='artistes') {
$sql_letters .= ' AND dp.`idrole`='.$types_persons[$type_recherche]['idrole'].' ';
}
$sql_letters .= '
AND d.`publish`=1
GROUP BY p.`lastname`
ORDER BY letter';
$valid_letters = $persons->queryCol($sql_letters);
$view = $this->view;
if(empty($_REQUEST['title']) && $type == 'tous'){
$alpha_rand = true;
}
$this->getAlpha();
//Si l'utilsiateur sélectionné 'tou les DVD'
if($type == 'tous'){
// recherche ou page classique
if(!empty($_REQUEST['title'])) {
$type = "recherche";
// filtrer
$title = trim(filter_var($_REQUEST['title'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES));
$list = $dvds->splitKeywords($title);
if($list) {
if(!empty($list[$dvds->IDSTR])) {
// mots clés
foreach($list[$dvds->IDSTR] as $s) {
if(strlen($s)>2) {
$sql_more_name[] = 'title LIKE \'%'.$s.'%\'';
}
}
if (!empty($sql_more_name)) {
$sql_where_keywords = '('.join(' OR ', $sql_more_name).')';
}
}
}
$sql = 'SELECT '.$dvds->__idtable.'
FROM '.$dvds->__table.'
WHERE publish=1
AND title LIKE '.$dvds->quote('%'.$title.'%');
if (!empty($sql_where_keywords)) {
$sql .= ' OR '.$sql_where_keywords;
}
$iddvds = $dvds->queryCol($sql);
if(!empty($iddvds)) {
$params_sql_search = array(
'limit' => array(0, 2000),
'dbg' => array('dvds_lettre', 'Les dvds'),
'where' => array(
array('dvds','iddvd',$iddvds)
)
);
$this->view->list_search_dvds = $dvds->getListDvds($params_sql_search);
$this->view->nb_list_search_dvds = count($this->view->list_search_dvds);
}
$this->view->search_dvds = $title;
}
else{
// trouver tous les personnes qui sont liés à une vidéo
$sql_persons = '
SELECT DISTINCT(p.`idperson`),p.`lastname`,p.`firstname`,p.`url_clean`
FROM '.$dvd_person->__table.' dp, '.$persons->__table.' p, dvds d
WHERE dp.`idperson`=p.`idperson` AND d.`iddvd`=dp.`iddvd` ';
if($type_recherche!='artistes') {
$sql_persons .= ' AND dp.`idrole`='.$types_persons[$type_recherche]['idrole'].' ';
}
$sql_persons .= '
AND d.`publish`=1
AND p.`lastname` REGEXP \'^'.$this->context['alpha'].'\'
ORDER BY p.`lastname`';
$persons_liste = $persons->queryAll($sql_persons);
// les identifiants
foreach($persons_liste as $k=>$v) {
$idpersons[] = $v['idperson'];
}
$this->view->persons = $persons_liste;
// infos sur le type
$this->view->infos_type = $types_persons[$type_recherche];
$this->view->{$types_persons[$type_recherche]['type_liste']} = true;
$this->view->type_recherche = $type_recherche;
$this->view->types_persons = $types_persons;
$params_sql = array(
'limit' => array(0, 2000),
'dbg' => array('dvds_lettre', 'Les dvds'),
'special' => array(
'idpersons' => $idpersons,
'idrole_person' => $types_persons[$type_recherche]['idrole']
)
);
$this->view->list_dvds = $dvds->getListDvds($params_sql);
}
}
//Si l'utilisateur sélectionne les dvds les plus populaires
else if($type == 'populaires')
{
// les dvds les plus vus => on va chercher les documents multimédias les plus vus qui ont on un DVD
// classe de stats
$plusvues = $globalstats->getMostDvdViewed(30,7);
if(!empty($plusvues)) {
foreach($plusvues as $k=>$v) {
$idmultimedia_plusvues[] = $v["idmultimedia"];
}
$params_sql_plusvus = array(
'limit' => array(0, 20),
'dbg' => array('dvds_plusvus', 'Les dvds plus vus'),
'special' => array(
'idmultimedias' => $idmultimedia_plusvues,
)
);
$this->view->list_plusvus = $dvds->getListDvds($params_sql_plusvus);
}
}
//si l'utilisateur sélectionne les derniers dvd
else if($type == 'derniers')
{
// les nouveaux DVD
$params_sql_nouveaux = array(
'limit' => array(0, 20),
'dbg' => array('dvds_nouveaux', 'Les dvds nouveaux'),
'order' => array('dateinsert'),
);
$this->view->list_dvds_nouveaux = $dvds->getListDvds($params_sql_nouveaux);
}
// Placeholder du champ de recherche des dvd
// $form->addElement('text', 'title', '', );
$this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder('', FormType::class);
$this->context['formAsideSearch']->add('title', TextType::class, [
'attr' => [
'id'=>'dvd',
'placeholder' => 'Rechercher'
]
]);
$this->getCommonSearchView($request);
// asides
$this->asides->load(['url_lists_alone' => array(
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu_page,
'url' => '/videos/dvd/type/key/',
'params' => array(
'activate' => $type
)
],
'title' => 'Voir'
)]);
$this->asides->load('dvd_search');
$asides_publicite = new asides();
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addGoogle($asides_publicite, $this->serviceAbonnements);
$this->context['view']->asides_publicite = $asides_publicite->view($this->context['view']);
return $this->view('videos/dvd.html.twig');
}
// }}}
public function getAlpha()
{
$alphabet = $this->func->getAlphaUpper();
if (empty($valid_letters)) $valid_letters = $alphabet;
// recherche par lettre soit on a le parametre,
// soit une lettre au hasard
if(isset($_GET['lettre']) && strlen($_GET['lettre'])==1 && in_array(strtoupper($_GET['lettre']), $valid_letters)) {
$this->context['alpha'] = $alpha = strtoupper($_GET['lettre']);
} else {
if (!empty($alpha_rand)) {
$count = 0;
do {
$alpha = strtoupper(array_rand($alphabet));
$count++;
} while (!in_array($alpha, $valid_letters) && $count < 10);
if ($count < 10) {
return $this->redirect($_SERVER['REQUEST_URI'].'?lettre='.$alpha);
} else {
$alpha = null;
}
} else {
$alpha = null;
}
$this->context['alpha'] = $alpha;
}
// alphabet
foreach($alphabet as $l => $upperl) {
$alphabet_tab[$l]['nom'] = $upperl;
if($upperl==$alpha) {
$alphabet_tab[$l]['active'] = 'active';
}
$alphabet_tab[$l]['ok'] = false;
}
foreach($valid_letters as $L) {
$l = strtolower($L);
if (!empty($alphabet_tab[$l])) {
$alphabet_tab[$l]['ok'] = true;
}
}
$this->view->alphabet = $alphabet_tab;
$this->view->alpha = $alpha;
}
}