<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Entity\Bigregions;
use TheatreCore\Entity\Podcasts;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Stats;
class AudiosController extends TheatreController
{
// object multimedias
protected $podcasts;
// précision fil d'arianne
protected $locate = null;
// titre de la page
protected $title_page = null;
// meta keywords et meta description
protected $meta_keywords = '';
protected $meta_description = '';
// taille maxi des vidéos
protected $other_dimensions = array();
// infos pour mon théâtre
protected $mtinfos = array();
// pour le menu principal
protected $rub_courante = null;
protected $extra_title = '';
protected $extra_locate = '';
protected $is_accueil = false;
// les asides
protected $asides = "";
// résultat par page
protected $perPage = 20;
// {{{ _construct()
/** constructeur hérité
*
*/
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, TokenStorageInterface $tokenStorage)
{
parent::__construct($translator, $tokenStorage);
$this->context['controller'] = $this->view->controller = 'audios';
$this->em = $em;
$this->asides = new asides();
$this->context['view']->audios = true;
/**
* Classe Multimedias
*/
$this->podcasts = $this->em->getRepository(Podcasts::class);
// seulement les données publiées
$GLOBALS['publish'] = 1;
}
// }}}
// {{{ buildMenu()
/** Construit le menu et l'envoie à la vue
*
*
* @access protected
* @return void
*/
protected function buildMenu()
{
$menu_audio = array();
// accueil avec l'actualite
$menu_audio['view'] = array('nom' => 'Actualités', 'title' => 'Actualités de ','icone' => 'info_24.png');
$menu_audio['emissions'] = array('nom' => 'émissions', 'title' => 'Actualités de ','icone' => 'info_24.png');
$menu_audio['spectacles'] = array('nom' => 'en scène', 'title' => 'Actualités de ','icone' => 'info_24.png');
$action = $this->context['action'];
if(!empty($menu_audio[$action])){
$menu_audio[$action]['active'] = true;
}
$arrays_key = array_keys($menu_audio);
$first = reset($arrays_key);
$menu_audio[$first]['first'] = true;
$this->view->menu_audio = $menu_audio;
}
// }}}
// {{{ finalizeAction()
/** Après l'action, construit le titre de page et le fil d'arianne
*
*
* @access protected
* @return void
*/
protected function finalizeAction()
{
// construction du menu
$this->buildMenu();
if (!empty($this->extra_title)) {
$this->title_page .= $this->extra_title.' - Audio';
} else if (!empty($this->current['title'])){
$this->title_page .= $this->current['title'];
} else {
$this->title_page .= 'Audio';
}
// titre de la page
$this->title_page .= ', actualités, textes, spectacles, vidéos, tous ses liens avec la scène';
// situation
$this->view->locate = array('/audios/' => 'Audio');
// rubrique (pour le menu principal)
$this->rub_courante = 'audios';
//Todo:: à revoir
// complément du fil d'arianne
if (empty($this->is_accueil)) {
if (empty($this->extra_locate) && !empty($this->current['nom'])) {
$this->extra_locate = $this->current['nom'];
}
// $this->view->locate[$this->url_folder.'/'] = $this->extra_locate;
$this->view->locate[0] = $this->extra_locate;
} else {
// à l'accueil, on ne précise pas la sous-rubrique
$this->view->locate[0] = $this->infosperson['fullname'];
$this->view->is_accueil = true;
}
// statistique de visite
//@TODO temporaire à supprimer pour la V2
if($_SERVER['SERVER_NAME'] == 'theatre-contemporain.net'){
if(!empty($this->idperson) && !$this->no_stats) {
$statsinfos = array(
'type' => 'article',
'module' => $this->context['module'],
'url' => $_SERVER['REQUEST_URI'],
'idcontent' => (int)$this->current['idcontent'],
'object' => 'persons',
'idobject' => $this->idperson,
'video' => (int)(!empty($this->view->detailarticle['display_media']))
);
$stats = $this->em->getRepository(Stats::class);
$stats->setStats($statsinfos, __FILE__.':'.__LINE__);
}
}
// pour les liens dans le template
$this->view->url_folder = $this->url_folder;
// aside
$this->view->aside = $this->asides->view($this->view);
}
// }}}
/**
* @Route("/audios", name="audios_index")
*/
public function action_view()
{
$this->extra_locate = 'actualités';
$this->context['action'] = 'view';
$params_sql = array(
'params' => array(
'limit' => [0,6],
'where' => ' AND s.publish=1 ',
'order' => ['sc.date', 'ASC'],
),
'special' => array(
'prochains' => true,
// 'plus_proche' => true,
'podcasts' => [
'type_podcast' => 'franceculture'
]
),
'dbg' => array('spectacles_in_list','Les spectacles à l\'affiche dans ce lieu')
);
$franceculture_params = array(
'limit' => array(0, 3),
'special' => array(
'type_podcast' => ['franceinter', 'soundcloud'],
),
'dbg' => array('derniers_franceculture', 'Les trois derniers podcasts france radio référencés'),
);
$display['display']['vignette'] = array('width'=>$_ENV['VIGN_SPECTACLE_WIDTH'],'height'=>$_ENV['VIGN_SPECTACLE_HEIGHT']);
$spectacles_prochains = $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql, $display, null, array('allauthors' => true, 'carrer_couleurs' => true));
foreach($spectacles_prochains as $key=>$val) {
$spectacles_prochains[$key]['footer_contact'] = true;
}
$this->context['view']->spectacles_prochains = $spectacles_prochains;
$api_derniers_franceculture = $this->podcasts->getListPodcasts($franceculture_params);
foreach ($api_derniers_franceculture AS $k => $v) {
$currentDate = $v['datePodcast']->format('Y-m-d');
if(empty($derniers_franceculture[$currentDate])) {
$derniers_franceculture[$currentDate]['date'] = $this->podcasts->getFormeDate($currentDate, '%a %d %B %Y', true); //%a %d/%m/%Y
}
$derniers_franceculture[$currentDate]['datas'][] = $v;
}
$this->context['view']->podcasts_par_date = $derniers_franceculture;
$culturebox_params = array(
'limit' => [0,3],
'direction' => 'DESC',
'special' => array(
'emission' => [ 'la-dispute','le-masque-et-la-plume' ]
),
'dbg' => array('derniers_culturebox_current', 'Les replay France Culture référencés'),
);
$list_captations_critiques = $this->podcasts->getListPodcasts($culturebox_params);
$derniers_franceculture_critiques = array();
foreach ($list_captations_critiques AS $k => $v) {
$currentDate = $v['datePodcast']->format('Y-m-d');
if(empty($derniers_franceculture_critiques[$currentDate])) {
$derniers_franceculture_critiques[$currentDate]['date'] = $this->podcasts->getFormeDate($currentDate, '%a %d %B %Y', true); //%a %d/%m/%Y
}
$derniers_franceculture_critiques[$currentDate]['datas'][] = $v;
}
$this->context['view']->derniers_franceculture_critiques = $derniers_franceculture_critiques;
//Les prochains spectacles par émission
$params_sql['params']['limit'] = [0,4];
$params_sql['special']['podcasts']['emission'] = ['la-dispute', 'le-masque-et-la-plume'];
$display_spectacles['carrer_couleurs'] = true;
$list_spectacles_emissions = $this->em->getRepository(Spectacles::class)->getListSpectacles( $params_sql, $display, null, array('allauthors' => true, 'carrer_couleurs' => true));
foreach($list_spectacles_emissions as $key=>$val) {
$list_spectacles_emissions[$key]['footer_contact'] = true;
}
$this->context['view']->list_spectacles_emissions = $list_spectacles_emissions;
$this->asides->load(['common_carte' => array(
'url' => "/audios/spectacles/area/get_id"
)]);
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addWithNational($this->asides); //$this->area
$this->asides->load('common_facebook');
$this->asides->load('common_twitter');
$this->asides->load('common_participer_contacts');
$this->asides->load('common_culturebox');
return $this->view('audios/view.html.twig');
}
/**
* @Route("/audios/emissions/", name="audios_emissions")
* @Route("/audios/emissions/emission/{emission}", name="audios_emissions_slug")
*/
public function action_emissions($emission = null)
{
$this->extra_locate = $this->context['view']->action = $this->context['action'] = 'emissions';
$types = ['spectacles', 'textes'];
$format_vignette = array('width' => 480, 'direction' => 'thumb');
// Culturebox => les derniers référencés
$culturebox_params = array(
'direction' => 'DESC',
'special' => array(
'type_podcast' => 'franceculture',
),
'dbg' => array('derniers_culturebox_current', 'Les replay France Culture référencés'),
);
// if($this->idobject == 5222){
// $culturebox_params['special']['type_franceinter'] = 1;
// }
$culturebox_params['special']['type_franceinter'] = null; //Pour France Culture
$countFranceCulture = $this->podcasts->countListPodcasts($culturebox_params);
$culturebox_params['special']['type_franceinter'] = 1;
$countFranceInter = $this->podcasts->countListPodcasts($culturebox_params);
unset($culturebox_params['special']['type_franceinter']);
$culturebox_params['special']['type_podcast'] = 'soundcloud';
$countSoundCloud = $this->podcasts->countListPodcasts($culturebox_params);
$filtres_emissions = [
'franceculture' => [
'name' => 'France Culture',
'count' => $countFranceCulture,
'params' => null,
'type' => 'franceculture'
],
'franceinter' => [
'name' => 'France Inter',
'count' => $countFranceInter,
'params' => 1,
'type' => 'franceinter'
],
'soundcloud' => [
'name' => 'Soundcloud',
'count' => $countSoundCloud,
'type' => 'soundcloud'
],
];
$curseur = null;
if(!is_null($emission) && array_key_exists($emission, $filtres_emissions)){
$curseur = $emission;
$culturebox_params['special']['type_podcast'] = 'franceculture';
if(array_key_exists('params', $filtres_emissions[$curseur])){
$culturebox_params['special']['type_franceinter'] = $filtres_emissions[$curseur]['params'];
}
else{
$culturebox_params['special']['type_podcast'] = 'soundcloud';
}
}
else{
unset($culturebox_params['special']['type_franceinter']);
$culturebox_params['special']['type_podcast'] = ['franceinter', 'soundcloud'];
}
$this->perPage = 10;
//Nombre total de podcasts
$total_podcasts = $this->podcasts->countListPodcasts($culturebox_params, $format_vignette);
$this->context['view']->pagination = $this->getPagination($total_podcasts);
$this->context['view']->pagination['totalItems'] = $total_podcasts;
$this->context['view']->pagination['custom'] = true;
$this->context['view']->pagination['custom_name'] = "émissions";
$culturebox_params['limit'] = array($this->getLimitStart(), $this->perPage);
//données renvoyées à la vue
$this->context['view']->list_captations = $this->podcasts->getListPodcasts($culturebox_params, $format_vignette);
$this->asides->load(['url_lists' => array(
'exec' => [
'htmlstart' => true,
'alone' => false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => [
[
'name' => 'Toutes les émissions',
'key' => 'emissions'
],
[
'name' => 'Émissions critiques',
'url' => '/critiques/audios/emission/'
]
],
'url' => '/audios/emissions/',
'params' => array(
'activate' => (is_null($curseur)) ? 'emissions' : false
)
),
'title' => 'écouter'
)]);
$this->asides->load(['url_lists,tst' => array(
'exec' => [
'htmlend' => true,
'alone' => false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $filtres_emissions,
'url' => '/audios/emissions/emission/key_type',
'params' => array(
'key_type' => 'auto_key',
'activate' => $curseur
)
),
'title' => 'Trier'
)]);
$this->asides->load([
'contact_franceculture_menu,soundcloud' => [
'php' => [
'method' => 'asidesPodcasts',
'params' => [
'station' => 'soundcloud',
'em' => $this->em
]
]
]
]);
if($countFranceCulture){
$this->asides->load([
'contact_franceculture_menu,franceculture' => [
'php' => [
'method' => 'asidesPodcasts',
'params' => [
'station' => 'franceculture',
'em' => $this->em
]
]
]
]);
}
//Pour France Inter
if($countFranceInter){
$this->asides->load([
'contact_franceculture_menu,franceinter' => [
'php' => [
'method' => 'asidesPodcasts',
'params' => [
'station' => 'franceinter',
'em' => $this->em
]
]
]
]);
}
return $this->view('audios/emissions.html.twig');
}
/**
* @Route("/audios/spectacles", name="audios_spectacles")
* @Route("/audios/spectacles/area/{area}", name="audios_spectacles_area")
* @Route("/audios/spectacles/type/{params_type}/", name="audios_spectacles_type")
* @Route("/audios/spectacles/type/{params_type}/area/{area}/", name="audios_spectacles_type_area")
* @Route("/audios/spectacles/area/{area}/type/{params_type}/", name="audios_spectacles_type_area_reverse")
*/
public function action_spectacles($params_type = null, $area = null)
{
$this->extra_locate = 'spectacles';
$this->context['params']['type'] = $params_type;
$this->context['params']['area'] = $area;
$this->context['action'] = $this->view->action = 'spectacles';
$obj = $this->em->getRepository(Spectacles::class);
$menu_jours = [
7 => array(
'name' => 'dans les 7 prochains jours',
'key_day' => '7',
),
30 => array(
'name' => 'dans les 30 prochains jours',
'key_day' => '30',
),
90 => array(
'name' => 'dans les 3 prochains mois',
'key_day' => '90',
),
365 => array(
'name' => 'dans les 12 prochains mois',
'key_day' => '365',
)
];
$day = 365;
if(!empty($_REQUEST['d']) && key_exists((int)$_REQUEST['d'], $menu_jours)){
$day = (int)$_REQUEST['d'];
}
$params_sql = array(
'params' => array(
'where' => ' AND s.publish=1 ',
'classement' => 'ASC', //$this->getOrder()
'groupby' => 's.idspectacle',
),
'special' => array(
'podcasts' => [
'type_podcast' => 'franceculture'
]
),
'dbg' => array('spectacles_in_list','Les spectacles à l\'affiche dans ce lieu')
);
$types_filtres = array(
'prochains' => [
'params' => [
'order' => ['sc.date', 'ASC']
],
'display' => [
'vignette' => array('width'=>$_ENV['VIGN_SPECTACLE_WIDTH'],'height'=>$_ENV['VIGN_SPECTACLE_HEIGHT']),
]
],
'anciens' => [
'params' => [
'order' => ['creation_date', 'DESC']
],
'display' => [
'vignette' => array('width'=>$_ENV['VIGN_SPECTACLE_WIDTH'],'height'=>$_ENV['VIGN_SPECTACLE_HEIGHT']),
'affiche_date_creation' => true
]
]
);
$type = 'prochains';
if(!empty($this->context['params']['type'])){
$type = $this->context['params']['type'];
}
if(array_key_exists($type, $types_filtres)){
$params_sql['special'][$type] = true;
$params_sql['params'] = array_merge($params_sql['params'], $types_filtres[$type]['params']);
$display['display'] = $types_filtres[$type]['display'];
}
$this->context['view']->{$type.'_prochains'} = $type;
if($type == 'prochains'){
$params_sql['special']['prochains'] = $day;
}
else{
$day = false;
}
//Par région
$regions = $this->em->getRepository(Bigregions::class);
if(!is_null($area) && (is_numeric($area) || strlen($area)<3)) {
$sql_area = $regions->getZipCode($area);
if (!$regions->my_is_int($area)) {
$country_name = $regions->getNameCountry($area);
$this->context['view']->other_country = true;
}
if(!empty($country_name)) {
$this->context['view']->country_name = $country_name;
} else {
$this->context['view']->region_name = $regions->getRegionName($area);
}
$this->context['view']->area = $area;
//SQL : si region, recherche des spectacles dans la région ou le pays
$params_sql['params']['where'] = $sql_area;
$params_sql['special']['get_schedule_ville'] = $area;
$this->context['view']->use_addthis = true;
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlRegions',
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
// @TODO arnaque temporaire pour avoir la bonne couleur en visuel
$this->context['view']->main_custom_style = 'spectacles';
}
$this->context['view']->nb_spectacles_total = $obj->countListSpectacles($params_sql);
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_spectacles_total, 20);
$this->context['view']->pagination['totalItems'] = $this->context['view']->nb_spectacles_total;
$this->context['view']->pagination['spectacle'] = true;
$params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
$spectacles = $obj->getListSpectacles($params_sql, $display, null, array('allauthors' => true, 'carrer_couleurs' => true));
if (!$spectacles) {
return $this->redirectToRoute("audios_spectacles");
}
foreach($spectacles AS $ks => $value_spectacle) {
$spectacles[$ks]['footer_contact'] = true;
if(!empty($display['display']['affiche_date_creation'])) {
$spectacles[$ks]['annee_creation'] = $obj->getFormeDate($spectacles[$ks]['creation_date'], '%Y', true); //%a %d/%m/%Y;
unset($spectacles[$ks]['contact_creation']);
}
}
$this->context['view']->spectacles = $spectacles;
$menu_filtres = [
'prochains' => [
'name' => 'prochains spectacles',
'key' => 'prochains'
],
'anciens' => [
'name' => 'anciens spectacles',
'key' => 'anciens'
]
];
$this->asides->load([
'url_lists' => [
'exec' => array(
'color' => 'spectacles',
'htmlstart' => true,
'htmlend' => ($type == 'prochains') ? false : true
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_filtres,
'url' => '/audios/spectacles/type/key_type/generate_params',
'structure' => array(
'area' => $area
),
'params' => array(
'key_type' => 'auto_key',
'activate' => $type
)
),
'title' => 'Voir'
]
]);
if($type == 'prochains'){
$this->asides->load([
'url_lists,prochains' => [
'exec' => array(
'color' => 'spectacles',
'htmlstart' => false,
'htmlend' => true,
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_jours,
'url' => '/audios/spectacles/type/key_type/generate_params',
'structure' => array(
'area' => $area,
'structure_classic' => array(
'd' => 'key_day',
)
),
'params' => array(
'key_type' => $type,
'activate' => $day
)
),
'title' => 'Recherche par période'
]
]);
}
$this->asides->load('common_carrer_informations');
$this->asides->load(['common_carte' => [
'php' => array(
'method' => 'asidesUrlLists',
'url' => "/audios/spectacles/generate_params",
'params' => array(
'get_id' => 'get_id',
'key_type' => $type,
'key_day' => $day
),
'structure' => array(
'area' => 'get_id',
'type' => 'key_type',
'structure_classic' => array(
'd' => 'key_day'
)
)
)
]]);
return $this->view('audios/spectacles.html.twig');
}
// {{{ getLocate()
/** Ou se trouve t'on (getter)
*
*/
public function getLocate() { return $this->locate; }
// }}}
// {{{ getTitlePage()
/** Titre de la page (getter)
*
*/
public function getTitlePage() { return $this->title_page; }
// }}}
// {{{ getStyleMore()
/** Style en plus (getter)
*
*/
public function getStyleMore() { return $this->style_more; }
// }}}
// {{{ getMetaKeywords()
/** Keywords (getter)
*
*/
public function getMetaKeywords() { return $this->meta_keywords; }
// }}}
// {{{ getMetaDescription()
/** Description (getter)
*
*/
public function getMetaDescription() { return $this->meta_description; }
// }}}
// {{{ getMtinfos()
/** Infos mon théâtre
*
*/
public function getMtinfos() { return $this->mtinfos; }
// }}}
// {{{ setOtherDimensions()
/** Taille maxi des vidéos
*
*/
public function setOtherDimensions($other_dimensions)
{
$this->other_dimensions = $other_dimensions;
}
// }}}
// {{{ getRubCourante()
/** Pour la rubrique courante
*
*/
public function getRubCourante() { return $this->rub_courante; }
// }}}
}