<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use App\Exception\RedirectException;
use App\Service\Date_time;
use App\Service\EditUtils;
use App\Service\Functions;
use App\Service\TheatreMail\TheatreMail;
use App\Service\UploadUtils;
use App\Service\wiki2xhtml\wiki2xhtml;
use App\Validator\CheckWebsite;
use Doctrine\ORM\EntityManagerInterface;
use League\HTMLToMarkdown\HtmlConverter;
use Psr\Log\LoggerInterface;
use Symfony\Component\Cache\Adapter\AdapterInterface;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
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 Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Url;
use TheatreCore\Classes\UtilsEdit;
use TheatreCore\Entity\Aidecontacts;
use TheatreCore\Entity\Aides;
use TheatreCore\Entity\Bigregions;
use TheatreCore\Entity\Classifications;
use TheatreCore\Entity\Contacts;
use TheatreCore\Entity\Contents;
use TheatreCore\Entity\Extranetusers;
use TheatreCore\Entity\Files;
use TheatreCore\Entity\Multimedias;
use TheatreCore\Entity\News;
use TheatreCore\Entity\Persons;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Texts;
use TheatreCore\Entity\Typesstructures;
use TheatreCore\Form\Type\RelationsType;
class EditionController extends TheatreController
{
// id du contact
protected $idcontact;
// l'objet spectacle
protected $spectacles;
// l'objet texts
protected $texts;
// l'objet contacts
protected $contacts;
// données du contact
protected $infos;
// résultat par page
protected $perPage = 30;
// aside
protected $asides = "";
// titre de la page
protected $title_page = null;
protected $extra_title = '';
protected $extra_locate = '';
protected $locate = array();
private ?LoggerInterface $logger = null;
private ?AdapterInterface $cache = null;
// {{{ _construct()
/** constructeur hérité
*
*/
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
TokenStorageInterface $tokenStorage,
Functions $func,
LoggerInterface $logger,
AdapterInterface $cache
)
{
// surbrillance du menu principal (thnet)
$GLOBALS['rub_courante'] = 'editions';
parent::__construct($translator, $tokenStorage);
$this->em = $em;
$this->asides = new asides();
$this->func = $func;
$this->spectacles = $em->getRepository(Spectacles::class);
$this->contacts = $em->getRepository(Contacts::class);
//20 éléments maximum par page
$this->perPage = 20;
$this->logger = $logger;
$this->cache = $cache;
}
public function InitController($slug = null, $action = null)
{
$this->view->action = $this->context['action'] = $action;
$this->RouterOptions($slug, $action, $GLOBALS['rub_courante']);
$this->view->controller = $GLOBALS['rub_courante'];
$this->context['view']->main_custom_style = "contacts";
$params['idcontact'] = $this->idcontact = $this->id;
if(empty($params['idcontact'])){
throw new RedirectException('/editions/');
}
//Position
$this->locate['/editions/'] = 'editeurs';
$this->asides = new asides();
// on récupére l'enregistrement
$this->infos = $this->contacts->getInfosContact($this->idcontact);
if(empty($this->infos['organisation'])) {
throw new RedirectException('/editions/');
}
// pays
$this->infos['country'] = $this->contacts->getNameCountry($this->infos['country']);
// tester si il y a un bandeau custom
// echo $this->view->bandeau = $this->contacts->getVignetteContact($this->idcontact,array('width' => 980, 'height' => 150),'class_bandeau_thtv');
$files = $this->em->getRepository(Files::class);
$files->setPublishStatus(1);
$this->view->bandeau = $files->getObjectFiles($this->idcontact,'contacts',100);
// tester si il y a une image de profile
$profilepicture = $this->contacts->getVignetteContact($this->idcontact,array('width' => 90, 'height' => 90),'class_pp');
if(strpos($profilepicture, 'normal-def')===false) {
$this->view->profilepicture = $profilepicture;
}
// trouver les videos de l'espace vidéo
$this->context['view']->nb_multimedias = $this->em->getRepository(Multimedias::class)->getMultimediasBy('contacts', $this->idcontact, ' AND m.audio_video=2','count');
// envoi au template
$this->view->count_ensavoirplus = 0;
foreach($this->infos as $key=>$value) {
if($key=='comment') {
if(!empty($value)){
$this->view->count_ensavoirplus = 1;
$value = $this->contacts->wikiTransform($value);
if(strlen($value) > 302){
$cut = substr($value, 0, 302);
$search = array('@<[\/\!]*?[^<>]*?>@si', // suppression HTML tags
'@[[:space:]\n\r]+@sm', // suppression espaces et sauts de lignes
);
$text = preg_replace($search, ' ', $cut); // on remplace par des espaces
$text = preg_replace('@[[:space:]\n\r]+@sm', ' ', $text); // on ne conserve qu'un seul espace
$text = html_entity_decode(strip_tags($text), ENT_COMPAT, 'utf-8');
$this->context['view']->{'comment_tiny'} = $text;
}
}
}
$this->context['view']->$key = $value;
}
//On initie le menu de jours disponibles sur de nombreuses pages
$this->view->menu_jours = array(
3 => array('name' => '3 prochains jours', 'key_day' => 3),
7 => array('name' => '7 prochains jours', 'key_day' => 7),
30 => array('name' => '30 prochains jours', 'key_day' => 30),
90 => array('name' => '3 prochains mois', 'key_day' => 90),
365 => array('name' => '12 prochains mois', 'key_day' => 365),
);
$params_count = array(
'count' => true
);
$this->getSQLBiographies($params_count);
$this->getSQLTextes($params_count);
$this->getSQLEvenements($params_count);
$this->getSQLSpectacles($params_count);
$this->getSQLSpectacles(array(
'count' => true,
'get_spectacles_with_critiques' => true
));
$this->getSQLSpectacles(array(
'count' => true,
'get_spectacles_with_multimedias' => true
));
// voir si la maison d'édition est associé à un prix
$aides = $this->em->getRepository(Aides::class);
$params_sql_aides = array(
'special' => array(
'aides' => array(
'idcontacts' => $this->idcontact,
),
'type_aide' => 2, // Prix et distinctions
),
'dbg' => array('nombre_prix','Nombre de prix'),
);
$this->view->aides_count['laureats'] = $aides->countAides($params_sql_aides);
$params_sql_aides['special']['type_aide'] = 3; // nominations
$params_sql_aides['dbg'] = array('nombre_nominations','Nombre de nominations');
$this->view->aides_count['nomination'] = $aides->countAides($params_sql_aides);
$params_sql_aides['special']['type_aide'] = 1; // soutiens
$params_sql_aides['dbg'] = array('nombre_soutiens','Nombre de soutiens');
$this->view->aides_count['soutiens'] = $aides->countAides($params_sql_aides);
$params_sql_aides['special']['type_aide'] = 4; // sélection
$params_sql_aides['dbg'] = array('nombre_selections','Nombre de sélections');
$this->view->aides_count['selections'] = $aides->countAides($params_sql_aides);
$this->context['view']->editions_pages = true;
$this->getCarteVersion();
}
// }}}
// {{{ finalizeAction()
/** Code exécuté après chaque action
*
*
* @access protected
* @return void
*/
protected function finalizeAction()
{
if (!empty($this->extra_title)) {
$this->title_page .= $this->extra_title.' - '.$this->infos['fullname'];
} else if (!empty($this->current['title'])){
$this->title_page .= $this->current['title'];
} else {
$this->title_page .= $this->infos['fullname'];
}
// titre de la page
$this->title_page .= ', éditeur de textes théâtraux - tous ses textes, mises en scène, activités';
$this->context['view']->nb_files = $this->countTelechargements();
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlEditions',
)
)
]);
// aside
if($this->context['action'] == 'details'){
$this->view->info_theatre = true; //on permet l'affichage du texte dans l'aside expliquant qu'il est possible de modifier l'éditeur
}
$this->context['view']->aside = $this->asides->view($this->context['view']);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
$this->view->locate = $this->locate;
}
// }}}
// {{{ action_details()
/** Accueil pour un éditeur
*
* @Route("/editions/{slug}/", name="edition_view")
*
*/
public function action_details($slug)
{
$this->InitController($slug, 'details');
$this->setLocate(null, false);
$this->view->data_object = $this->infos;
$this->extra_locate = $this->extra_title = 'Actualités';
// On récupère la liste des 4 derniers textes
$textes = explode(',', $this->get_textes_originaux());
$params_sql = array(
'params' => array(
'limit' => array(0,4),
'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
'where' => ' AND T1.`idcontact_publisher` = '. $this->idcontact.' '
),
'special' => array(
'idcontact' => $this->idcontact,
// 'idtext' => array('IN', $textes),
'join' => true
),
'dbg' => array('texts_affiche_'.uniqid('', true),'Textes des spectacles à l\'affiche')
);
$list_texts = $this->em->getRepository(Texts::class)->getListTexts($params_sql,array('publisher_first_inverse' => true));
foreach($list_texts as $k=>$v) {
$list_texts[$k]['publisher_first'] = true;
foreach($v['publisher'] as $publisher) {
$list_texts[$k]['publisher'] = $publisher;
}
}
$this->view->list_texts = $list_texts;
// On récupère la liste des 4 derniers spectacles
$where_idcontact = ' AND t.idcontact_publisher='.((int)$this->idcontact);
$params_sql_affiche = array(
'params' => array(
'where' => $where_idcontact,
'limit' => array(0,4)
),
'special' => array(
'publish_valid' => 1, // uniquement les spectacles en ligne et validés
'prochains' => 365
),
'dbg' => array('texts_affiche', 'Textes à l\'affiche')
);
$this->view->spectacles_affiche = $this->spectacles->getListSpectacles($params_sql_affiche,null,false);
foreach($this->view->spectacles_affiche as $k => $v){
$this->view->spectacles_affiche[$k]['footer_contact'] = true;
}
//On récupère les 4 prochaines vidéos
$this->getSQLSpectacles([
'get_spectacles_with_multimedias' => true,
'stop_redirect' => true
]);
$format_vignette = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
foreach($this->view->spectacles AS $idspectacle => $spectacle){
$idmultimedia = $spectacle['idmultimedia'];
$multimedia[$idmultimedia] = $this->em->getRepository(Multimedias::class)->getInfosMultimedia($idmultimedia,true,false,array('vignette' => $format_vignette));
$multimedia[$idmultimedia]['spectacle'] = $spectacle;
if(in_array($this->context['view']->type, ['prod', 'tous'])){
$multimedia[$idmultimedia]['spectacle']['footer_creation_date'] = true;
}
else{
$multimedia[$idmultimedia]['spectacle']['schedule'] = $this->em->getRepository(Spectacles::class)->getProchDateLieu(
array('prochains' => true),
$spectacle['idspectacle'],
$this->idcontact
);
}
if(count($multimedia) == 4){
break;
}
}
if(!empty($multimedia)){
$this->context['view']->videos_affiches = $multimedia;
$this->context['view']->contactsvideos = true;
}
$news = $this->em->getRepository(News::class);
// trouver 7 prochains évènements
// si pas de 7 prochains, trouver 7 anciens
foreach(array('news') as $t) {
$news_list = array();
$news_params['special']['type_news'] = $t;
$news_params['special']['by_object'] = array('idcontact' => (int)$this->idcontact);
foreach(array('prochains','anciens') as $d) {
$news_params['dbg'] = array('news_'.$d, 'Liste des news '.$d);
$news_params['special'][$d] = true;
if(!empty($exclude_news)) {
$news_params['params']['where'] = ' AND T1.idnew NOT IN ('.join(',', $exclude_news).') ';
}
if($d=='anciens') {
$news_params['params']['limit'] = array(0,3);
} else {
$news_params['params']['limit'] = array(0,3);
}
$news_list[$d] = $this->em->getRepository(News::class)->getListNews($news_params);
if(!empty($news_list[$d])) {
// liste d'exclusion => pas de en cours dans les anciens
foreach($news_list[$d] as $k=>$v) {
$exclude_news[$k] = $v['idnew'];
}
$this->view->{'is_news_list_'.$t} = true;
}
unset($news_params['special'][$d]);
}
$this->view->{'news_list_'.$t} = $news_list;
}
// trouver les contenus associés 101 et les classer par date (critiques)
$params_sql_critiques = array(
'special' => array(
'publish' => 1, // les critiques publiées,
'get_critiques_publisher' => $this->idcontact
),
'sql' => array(
'limit' => array(0,6),
'order' => ' ct.`date_article` DESC', // classement,
),
'dbg' => array('critiques','Liste des critiques'),
);
$cacheItem = $this->cache->getItem("edition_details_{$this->idcontact}");
if (! $cacheItem->isHit()) {
$res = $this->em->getRepository(Contents::class)->getListContents($params_sql_critiques,array('get_critiques' => true, 'shorten_title' => true));
$cacheItem->set($res)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($cacheItem);
}
$this->context['view']->dernieres_critiques = $cacheItem->get();
//Les vidéos en partenartiat
$params_query_commun = array(
'object' => array($this->idcontact => ['contacts']),
'where' => array(array('multimedias','audio_video',2)),
'order' => array('multimedias.date'),
'limit' => array(0,4),
'dbg' => array('last_listes','Vidéo en partenariat du contact - liste des multimedias'),
);
$params_videos = array(
'alldata' => true,
'display' => array(
'no_footer' => true,
'videos_169_format' => true
)
);
$this->view->videos_last_publish = $this->em->getRepository(Multimedias::class)->getListMultimedias($params_query_commun, array(), $params_videos);
//aside
$this->asides->load('editions_adresse');
$this->asides->load(['common_prochain_evenement' => array(
'url_custom' => '/editions/'.$this->context['view']->url_clean.'/evenements/'
)]);
$this->asides->load(['common_participer_contacts' => array(
'exec' => ['color' => 'contacts'],
'url_custom_edit' => '/editions/'.$this->context['view']->url_clean.'/infos-generales/',
'editions' => true
)]);
if(!empty($this->context['view']->facebook)){
$this->asides->load(['common_facebook' => array(
'url_custom' => $this->context['view']->facebook
)]);
}
if(!empty($this->context['view']->twitter)){
$this->asides->load(['common_twitter' => array(
'url_custom' => $this->context['view']->twitter
)]);
}
return $this->view('editions/details.html.twig');
}
// }}}
// {{{ action_ensavoirplus()
/** Accueil pour un éditeur
*
* @Route("/editions/{slug}/ensavoirplus/", name="edition_ensavoirplus")
*
*/
public function action_ensavoirplus($slug = null)
{
$this->InitController($slug, 'ensavoirplus');
$this->setLocate([0 => 'En savoir +']);
$this->extra_locate = $this->extra_title = 'En savoir +';
$type = 'presentation';
if(!empty($this->context['params']['type'])){
$type = $this->context['params']['type'];
}
$this->view->{'select_'.$type} = true;
$menu_textes = array(
'tous' => array(
'name' => 'Présentation',
'key_filtre' => 'presentation',
)
);
$this->asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'contacts'],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes,
'url' => '/editions/{v_url_clean}/ensavoirplus/type/key_filtre',
'params' => array(
'activate' => $type
)
),
'title' => 'Voir aussi'
)
]);
$this->get_asides_common('contacts');
return $this->view('editions/ensavoirplus.html.twig');
}
// }}}
// {{{ action_biographies()
/** Page des biographies
*
* @Route("/editions/{slug}/biographies/", name="edition_biographies")
*
*/
public function action_biographies($slug = null)
{
$this->InitController($slug, 'biographies');
$this->setLocate([0 => 'Les Biographies']);
// $this->countBiographies();
$resultats = $this->getSQLBiographies(array(
'default' => 'auteurs'
));
foreach($resultats AS $key => $value){
$this->view->$key = $value;
}
$this->get_asides_biographies();
return $this->view('editions/biographies.html.twig');
}
// }}}
// {{{ action_auteurs()
/** Page des auteurs
*
*/
public function action_auteurs(){
$this->setLocate([0 => 'Les auteurs']);
$persons = $this->em->getRepository(Persons::class);
$type = 'auteurs';
if(!empty($this->context['params']['type'])){
$type = $this->context['params']['type'];
}
$this->view->type = $type.'_affiche';
$this->view->menu_jours_auteurs = true;
$nb_day_default = 365;
$this->getCommonSearch(array(
'nb_days' => $nb_day_default,
));
$this->getCommonSearchView();
//Si la valeur existe bien dans le menu
if(!in_array($this->context['view']->days, array_column($this->view->menu_jours, 'key_day'))){
$this->context['view']->days = $nb_day_default;
}
$params_sql = array(
'special' => array(
// 'count_only' => true, //pour calculer le nombre total de personne
'spectacle' => array(
'type' => 'author',
'prochains' => $this->context['view']->days.'D'
),
'contacts' => array(
'desactive_jointure_author' => true,
'publishers' => [$this->idcontact]
)
),
'params' => array(
// 'limit' => array(0,4),
),
'dbg' => array('affiche','Les personnes à l\'affiche')
);
// echo $persons->getSQLPersons($params_sql);
$params_display['vignette_format'] = array('width'=>154,'height'=>154,'direction'=>'crop');
$persons_data = $persons->getListPersons($params_sql,$params_display);
$name = 'texte_filtre_'.$type;
$this->context['view']->$name = true;
$this->context['view']->auteurs = $persons_data;
$this->get_asides_biographies();
}
// }}}
// {{{ action_emissions()
/** Podcasts de la page contact
*
*
* @access public
* @return void
*/
public function action_emissions()
{
// $this->getSQLSpectacles(['default' => 'tous']);
$this->getSQLSpectacles(['get_spectacles_with_audios' => true]);
$arrays_type_podcasts = [
'podcasts-spectacles' => 'spectacles',
'podcasts-spectacles-tous' => 'spectacles',
'podcasts-spectacles-anciens' => 'spectacles',
'podcasts-spectacles-coprod' => 'spectacles',
'podcasts-textes' => 'textes'
];
$cat = 'podcasts-spectacles';
if(isset($this->context['params']['cat']) && array_key_exists($this->context['params']['cat'], $arrays_type_podcasts)){
$cat = $this->context['params']['cat'];
}
$this->view->cat = $cat;
$type = 'in';
if(isset($this->context['params']['type'])){
$type = $this->context['params']['type'];
}
$this->context['view']->podcasts_content = true;
$this->context['view']->type_content = $type_content = $arrays_type_podcasts[$cat];
$params_sql = $this->setCommonSearchSpectacles(array(
'special' => array(
'textfictif' => 0,
'prochains' => true
),
'dbg' => array('list_textes_affiche', 'Liste des spectacles avec textes non fictifs qui ont un podcast'),
));
if(!empty($this->context['params']['type']) && $this->context['params']['type'] == 'prod' && in_array($this->idobject, [595,5222])){
unset($params_sql['special']['prochains']);
}
$spectacles = $this->em->getRepository(Spectacles::class);
$textes = $this->em->getRepository(Texts::class);
$display_spectacle = [];
$format_vignette = [];
//Spectacles
if($type_content == 'spectacles'){
//Si c'est France Culture
if(in_array($this->idobject, [595,5222])){
$params_sql['special']['podcasts'] = [
'type_podcast' => 'franceculture',
'publish' => 1
];
$params_sql['special']['type_franceinter'] = null;
if($this->idobject == 5222){
$params_sql['special']['type_franceinter'] = 1;
}
$display_spectacle = ['carrer_couleurs' => true, 'allauthors' => true];
if($type == 'podcasts-spectacles-tous'){
$format_vignette['display'] = ['affiche_date_creation' => true];
$params_sql['params']['order'] = ['creation_date', 'DESC'];
}
}
else{
$this->getSQLSpectacles(['get_spectacles_with_audios' => true]);
}
}
//Textes
else{
$params_sql['count_only_distinct'] = 't.`idtext`';
}
$this->context['view']->nb_spectacles_total = $spectacles->countListSpectacles($params_sql);
$params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
$list_spectacles = $spectacles->getListSpectacles($params_sql, $format_vignette, false, $display_spectacle);
//Les spectacles et si c'est france culture
if($type_content == 'spectacles' && in_array($this->idobject, [595,5222])){
$this->context['view']->spectacles = $list_spectacles;
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_spectacles_total, 10);
$this->context['view']->pagination['spectacle'] = true;
if($type == 'podcasts-spectacles-tous' || $type == 'podcasts-spectacles') {
foreach ($this->context['view']->spectacles AS $idspectacle => $spectacle) {
if (!empty($spectacle['creation_date']) && $type == 'podcasts-spectacles-tous') {
$this->context['view']->spectacles[$idspectacle]['annee_creation'] = $spectacles->getFormeDate($spectacle['creation_date'], '%Y', true);
unset($this->context['view']->spectacles[$idspectacle]['contact_creation']);
}
if ($type == 'podcasts-spectacles') {
$this->context['view']->spectacles[$idspectacle]['footer_contact'] = true;
// unset($this->context['view']->spectacles[$idspectacle]['contact_creation']);
}
}
}
}
//Les textes
else if($type_content == 'textes'){
foreach($list_spectacles as $k=>$v) {
if(!empty($v['idtext'])) {
$idtexts[$v['idtext']] = $v['idtext'];
}
}
$params_sql_texts['special'] = array(
'idtext' => array('IN', $idtexts),
'join' => true,
);
$params_sql_texts['special']['podcasts'] = [
'type_podcast' => 'franceculture'
];
$vignette = array(
'vignette_format' =>
array(
'height'=>$_ENV['VIGN_TEXT_HEIGHT'],
'width'=>$_ENV['VIGN_TEXT_WIDTH'],
'direction'=>'thumb'
)
);
$this->context['view']->texts = $textes->getTextsFromSpectacles($list_spectacles, $params_sql_texts, $vignette);
}
if(!empty($this->context['view']->texts) || !empty($this->context['view']->spectacles)){
$this->context['view']->contents = true;
}
$totalSpectaclesPodcasts = 0;
$spectacles_counts = $this->view->spectacle_counts['spectacles_audios'];
$this->asides->load(['url_lists_alone,emissions' => [
'exec' => array(
'color' => 'spectacles',
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => [
// 'podcasts-textes '=> array(
// 'name' => 'Textes à l\'affiche',
// 'key_type' => 'podcasts-textes',
// ),
'podcasts-spectacles'=> array(
'name' => 'Spectacles à venir',
'key_cat' => 'podcasts-spectacles',
'key_type' => 'in',
'count' => ($spectacles_counts['prochains'] + $totalSpectaclesPodcasts)
),
// 'podcasts-spectacles-tous'=> array(
// 'name' => 'Toutes avec critiques',
// 'key_cat' => 'podcasts-spectacles-critiques',
// 'key_type' => 'critiques',
// 'count' => ($spectacles_counts['critiques'] + $totalSpectaclesPodcasts)
// )
],
'url' => '/editions/{v_url_clean}/key_action/cat/key_cat/type/key_type',
'params' => array(
'key_action' => 'emissions',
'activate' => (!empty($this->context['view']->cat)) ? $this->context['view']->cat : ''
),
),
'title' => 'ÉMISSIONS ASSOCIÉES'
]]);
$this->asides->load(['common_carrer_informations' => [
'exec' => ['color' => 'spectacles'],
]]);
$this->asides->load(['common_participer_contacts' => array(
'exec' => ['color' => 'spectacles'],
)]);
}
// }}}
// {{{ action_spectacles()
/** Liste des spectacles pour un éditeur
*
* @Route("/editions/{slug}/spectacles/", name="edition_spectacles")
* @Route("/editions/{slug}/spectacles/type/{p_type}", name="edition_spectacles_type")
* @Route("/editions/{slug}/spectacles/area/{p_area}", name="edition_spectacles_area")
* @Route("/editions/{slug}/spectacles/type/{p_type}/area/{p_area}", name="edition_spectacles_type_area")
*
*/
public function action_spectacles($slug = null, $params_action = array(), $p_type = null, $p_area = null)
{
if(empty($params_action)){
$this->InitController($slug, 'spectacles');
}
$this->context['params']['type'] = $p_type;
$this->context['params']['area'] = $p_area;
$this->extra_locate = $this->extra_title = 'Spectacles';
$this->getSQLSpectacles(['default' => 'tous']);
$type = $this->view->type;
// On affiche tous les lieux dans les footer et on suppr la mention de mise en scene
foreach($this->view->spectacles as $k => $v){
if($type == 'critiques'){
$this->view->spectacles[$k]['footer_critique'] = true;
$this->view->spectacles[$k]['nombre_critique'] = $this->em->getRepository(Contents::class)->countAssociateContent('spectacles',$v['idspectacle'],'class_critique',array('publish_valid' => 1));
$this->view->spectacles[$k]['url_clean_more'] = 'critiques/';
}
else{
$this->view->spectacles[$k]['footer_contact'] = true;
}
if($type == 'tous'){
if(!empty($this->view->spectacles[$k]['spectacle'])){
$this->view->spectacles[$k]['spectacle']['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['spectacle']['creation_date'], '%Y', true); //%a %d/%m/%Y;
}
else{
$this->view->spectacles[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->view->spectacles[$k]['creation_date'], '%Y', true); //%a %d/%m/%Y;
}
$this->view->spectacles[$k]['display']['affiche_date_creation'] = true;
}
}
if(empty($params_action)){
$voir_videos = array(
'prochains' => array(
'name' => 'Textes à l\'affiche',
'key_filtre' => 'prochains',
'count' => $this->view->spectacle_counts['spectacles']['prochains']
),
'tous' => array(
'name' => 'Tous les textes en scène',
'key_filtre' => 'tous',
'count' => $this->view->spectacle_counts['spectacles']['tous']
)
);
$this->asides->load(['url_lists' => array(
'exec' => [
'color' => 'spectacles',
'htmlstart' => true,
'htmlend' => false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $voir_videos,
'url' => '/editions/{v_url_clean}/spectacles/type/key_filtre/generate_params',
'params' => array(
'activate' => (!empty($this->view->saison)) ? null : $type,
),
'structure' => array(
'structure_classic' => array(
'd' => 'v_days',
)
)
),
'title' => 'Voir aussi'
)
]);
if($type == 'prochains'){
$this->asides->load(['url_lists,jours_filtres' => array(
'exec' => array(
// 'alone' => false
'htmlend' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->view->menu_jours,
'url' => '/editions/{v_url_clean}/spectacles/type/v_filtres/generate_params',
'params' => array(
'v_filtres' => $type,
),
'structure' => array(
'structure_classic' => array(
'd' => 'key_day',
)
)
),
'title' => html_entity_decode('Recherche par période')
)]);
}
if($type == 'tous'){
$this->asides->load(['par_saison' => array(
'exec' => ['htmlend' => true],
'php' => array(
'url' => '/editions/{v_url_clean}/spectacles/generate_params',
'method' => 'asidesUrlListsForms',
'structure' => array(
'type' => $type,
'area' => (isset($this->context['view']->area)) ? $this->context['view']->area : null,
'structure_classic' => array(
's' => 'v_saison',
)
)
),
'title' => 'Recherche par période'
)]);
}
$params = array(
'carte_url_custom' => '/editions/'.$this->context['view']->url_clean.'/spectacles/type/'.$type.'/area/get_id',
'no_show_map' => ($type == 'prochains') ? true : false
);
$this->get_asides_common('spectacles', $params);
return $this->view('editions/spectacles.html.twig');
}
}
// }}}
// {{{ action_videos()
/**
* @Route("/editions/{slug}/videos/", name="edition_videos")
* @Route("/editions/{slug}/videos/type/{p_type}/", name="edition_videos_type")
*/
public function action_videos($slug = null, $p_type = null)
{
$this->InitController($slug, 'videos');
$this->context['params']['type'] = $p_type;
$multimedias = $this->em->getRepository(Multimedias::class);
$format_vignette = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
//Nombres total de vidéos en partenariat
$nb_videos_partenariats = $multimedias->getMultimediasBy('contacts', $this->idcontact, ' AND m.audio_video=2','count');
$this->context['view']->videos_blocks = true;
$this->context['view']->spectacles_videos = true;
// $this->action_spectacles(['get_spectacles_with_multimedias' => true]);
$this->getSQLSpectacles([
'get_spectacles_with_multimedias' => true,
'stop_redirect' => ($nb_videos_partenariats > 0) ? true : false
]);
// On récupère les vidéos en partenariat spécifique à l'action des vidéos
if(isset($this->context['params']['type']) && in_array($this->context['params']['type'], ['partenariat'])){
$this->context['view']->type_spectacle = 'partenariat';
//paramètre commun utile à plusieurs requêtes
$params_query_commun = array(
'object' => array($this->idcontact => ['contacts']),
'where' => array(array('multimedias','audio_video',2)),
'order' => array('multimedias.date'),
'limit' => array('all'),
'dbg' => array('last_commun','Vidéos en partenariat du contact'),
);
// On récupère la liste des dates pour les saisons et les années
$params_query_get_dates = array_merge($params_query_commun, array(
'select' => array('multimedias.`date`', 'YEAR(multimedias.`date`) as annee'),
'count_only_spectacles' => true,
'dbg' => array('last_dates','Vidéo en partenariat du contact - liste des dates'),
));
$sql_dates_multimedias = $this->em->getRepository(Multimedias::class)->getSQLMultimedias($params_query_get_dates, false);
$listdates = $multimedias->queryAll($sql_dates_multimedias);
// On génère les formulaires les saisons
if(!empty($listdates)) {
foreach($listdates as $a) {
if($a['date']>date('Y-m-d', mktime(0,0,0,8,31,$a['annee'])) ) {
$s = $a['annee'].'-'.($a['annee']+1);
} else {
$s = ($a['annee']-1).'-'.$a['annee'];
}
$saisons[$s] = $s;
$saisons_key[] = $s;
$annees[$a['annee']] = $a['annee'];
}
if(!empty($saisons)){
// liste des saisons des spectacles
$this->view->saisons = $saisons;
if(!empty($saisons)) {
// $this->context['form']->addElement('select', 's', 'Saisons', array_merge(array('' => 'une saison'),$saisons), array('id' => 'saisons'));
}
// dernière saison
foreach($saisons as $s) {
$this->view->current_saison = $s;
break;
}
}
}
// recherche par saison
if(!empty($_REQUEST['s'])) {
$saison = filter_var($_REQUEST['s'], FILTER_SANITIZE_URL);
} else {
$saison = null;
}
$annees_saison = explode('-', $saison);
if(count($annees_saison)==2) {
$datestart = Date_time::getSaisonDatestart((int)$annees_saison[0]);
$dateend = Date_time::getSaisonDateend((int)$annees_saison[1]);
}
// On ajout le paramètre des dates à la requête commune
if(!empty($datestart) && !empty($dateend)) {
$params_query_commun['where_date_multimedias'] = array(
'datestart' => $datestart,
'dateend' => $dateend
);
}
//On récupère le nombre total de multimédias
$params_query_total = array_merge($params_query_commun, array(
'select' => array(),
'dbg' => array('last_total','Vidéo en partenariat du contact - liste totales des vidéos'),
));
$sql_dates_multimedias = $this->em->getRepository(Multimedias::class)->getSQLMultimedias($params_query_total, false);
$total = $this->em->getRepository(Multimedias::class)->queryAll($sql_dates_multimedias);
$nb_videos_partenariats = count($total);
//On s'ocucpe de la pagination
$this->context['view']->pagination = $this->getPagination($nb_videos_partenariats);
$this->context['view']->pagination['totalItems'] = $nb_videos_partenariats;
$this->context['view']->pagination['custom'] = true;
$this->context['view']->pagination['custom_name'] = "vidéos";
// Récupération de la liste des dernières videos du contact
$params_query_last = array_merge($params_query_commun, array(
'limit' => array($this->getLimitStart(),$this->perPage),
'dbg' => array('last_listes','Vidéo en partenariat du contact - liste des multimedias'),
));
$videos_listes_partenariats = $this->em->getRepository(Multimedias::class)->getListMultimedias($params_query_last, array(), ['alldata' => true]);
}
//Si nous récupérons des vidéos en provenance en partenariat
if(!empty($videos_listes_partenariats)){
$this->context['view']->videos_classic = true;
// $multimedia ;
foreach($videos_listes_partenariats AS $idmultimedia => $v){
$multimedia[$idmultimedia] = $this->em->getRepository(Multimedias::class)->getInfosMultimedia($idmultimedia,true,false,array('vignette' => $format_vignette));
if($idspectacle = key($v['spectacles'])){
$multimedia[$idmultimedia]['spectacle'] = $this->em->getRepository(Spectacles::class)->getInfosSpectacle($idspectacle);
}
}
}
else if(!empty($this->context['view']->spectacles)){
//Nous affichons des données différent en fonction des filtres de l'utilisateur
//Par dérfault les prochains spectacles
$params_schedule = array('prochains' => true);
if(in_array($this->context['view']->type, ['anciens'])){
//Les anciens spectacles
$params_schedule = array('anciens' => true);
}
$idobject = $this->idcontact;
if(in_array($this->context['view']->type, ['coprod'])){
$idobject = null;
}
//on traite les données pour pouvoir les afficher comme convenus
$format_vignette = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
foreach($this->context['view']->spectacles AS $idspectacle => $spectacle){
$idmultimedia = $spectacle['idmultimedia'];
$multimedia[$idmultimedia] = $this->em->getRepository(Multimedias::class)->getInfosMultimedia($idmultimedia,true,false,array('vignette' => $format_vignette));
$multimedia[$idmultimedia]['spectacle'] = $spectacle;
if(in_array($this->context['view']->type, ['prod', 'tous'])){
$multimedia[$idmultimedia]['spectacle']['footer_creation_date'] = true;
}
else{
$multimedia[$idmultimedia]['spectacle']['schedule'] = $this->em->getRepository(Spectacles::class)->getProchDateLieu(
$params_schedule,
$spectacle['idspectacle'],
$idobject
);
}
}
$this->context['view']->spectacles = $multimedia;
$this->context['view']->contactsvideos = true;
}
else{
if($nb_videos_partenariats > 0){
return $this->redirectToRoute('edition_videos_type', ['slug' => $this->context['view']->url_clean, 'p_type' => 'partenariat']);
}
}
$this->context['view']->spectacles = $multimedia;
$this->context['view']->contactsvideos = true;
$this->get_asides_videos();
return $this->view('editions/videos.html.twig');
}
// }}}
// {{{ action_decouvert_auteurs()
/**
* @Route("/editions/{slug}/decouverte-auteurs/", name="edition_decouverte_auteurs")
*/
public function action_decouverte_auteurs($slug = null)
{
$this->InitController($slug, 'decouverte-auteurs');
$playlists = $this->em->getRepository(Playlists::class);
$persons = $this->em->getRepository(Persons::class);
$x = explode(",", $this->get_textes_originaux());
$params_persons = array(
'params' => array(
'limit' => 'all',
),
'special' => array(
'publish' => 1,
'contacts' => array(
'publishers' => $this->idcontact
)
),
'dbg' => array('persons','liste des personnes')
);
// On prépare la requête pour récupérer la liste des biographies
$lists_persons = $persons->queryAll($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
//On ne récupère que l'ID
foreach($lists_persons AS $value){
$id_persons[] = $value['idperson'];
}
// playlist
$list_playlists = $playlists->getListPlaylists(array(
'special' => array(
'idclassifications' => array(116),
'idpersons' => $id_persons
),
'limit' => array(0,200),
'dbg' => array('playlists_auteurs','Les auteurs par eux même'),
));
foreach($list_playlists as $k=>$v) {
foreach($v['idperson'] as $p) {
$list_playlists_new[$p['lastname'].$k] = $v;
}
}
if(!empty($list_playlists_new)){
ksort($list_playlists_new);
$this->view->list_playlists = $list_playlists_new;
}
$this->get_asides_videos();
return $this->view('editions/decouverte-auteurs.html.twig');
}
// }}}
// {{{ action_critiques()
/**
*
* @Route("/editions/{slug}/critiques/", name="edition_critiques")
* @Route("/editions/{slug}/critiques/type/{p_type}", name="edition_critiques_type")
*
* @param array $params
*/
public function action_critiques($slug = null, $p_type = null)
{
$this->InitController($slug, 'critiques');
$this->context['params']['type'] = $p_type;
$this->getSQLSpectacles([
'get_spectacles_with_critiques' => true
]);
$type = $this->view->type;
$spectacles_counts = $this->view->spectacle_counts;
if (!empty($this->view->spectacles)) {
foreach($this->view->spectacles as $k => $v){
$this->view->spectacles[$k]['footer_critique'] = true;
$this->view->spectacles[$k]['nombre_critique'] = $this->em->getRepository(Contents::class)->countAssociateContent('spectacles',$v['idspectacle'],'class_critique',array('publish_valid' => 1));
$this->view->spectacles[$k]['url_clean_more'] = 'critiques/';
}
}
$this->context['view']->no_lieu = true;
if(empty($params['show_no_aside'])){
$menu_critiques = array(
'prochains' => array(
'name' => 'Spectacles à l\'affiche',
'key_filtre' => 'prochains',
'count' => $spectacles_counts['spectacles_critiques']['prochains']
),
'tous' => array(
'name' => 'Tous les spectacles',
'key_filtre' => 'tous',
'count' => $spectacles_counts['spectacles_critiques']['tous']
)
);
$this->asides->load(['url_lists' => array(
'exec' => [
'color' => 'critiques',
'htmlstart' => true,
'htmlend' => ($type == 'prochains') ? false : true
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_critiques,
'url' => '/editions/{v_url_clean}/critiques/type/key_filtre/generate_params',
'params' => array(
'activate' => $type,
),
'structure' => array(
'structure_classic' => array(
'd' => 'v_days',
)
)
),
'title' => 'Voir aussi'
)
]);
if($type == 'prochains'){
$this->asides->load(['url_lists,jours_filtres' => array(
'exec' => array(
// 'alone' => false
'htmlend' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->view->menu_jours,
'url' => '/editions/{v_url_clean}/critiques/type/v_filtres/generate_params',
'params' => array(
'v_filtres' => $type,
),
'structure' => array(
'structure_classic' => array(
'd' => 'key_day',
)
)
),
'title' => html_entity_decode('Recherche par période')
)]);
}
$this->get_asides_common('spectacles');
}
return $this->view('editions/critiques.html.twig');
}
// }}}
// {{{ action_textes()
/** Liste des textes pour un éditeur
*
* @Route("/editions/{slug}/textes", name="edition_textes")
* @Route("/editions/{slug}/textes/area/{p_area}", name="edition_textes_area")
*
*/
public function action_textes($slug = null, $p_area = null)
{
$this->InitController($slug, 'textes');
$this->context['params']['area'] = $p_area;
$this->setLocate([0 => 'Tous les textes']);
$this->extra_locate = $this->extra_title = 'Textes';
$this->getSQLTextes(array(
'default' => 'all'
));
//On s'occupe des asides et des différents menus
$this->get_asides_textes('tous');
$this->get_asides_common('editions');
return $this->view('editions/textes.html.twig');
}
// }}}
// {{{ action_soutiens()
/** Sélection de quelques choses
*
*
* @access public
* @return void
*/
public function action_soutiens()
{
// $tthis->conetext['view']->type_object
//on supprime l'affichage de la date et de la ville
$this->context['view']->noshow = true;
$this->context['view']->current_page = 'soutiens';
$this->perPage = 20;
$this->getContactAides(array(1));
if(!empty($this->context['view']->filtres_aides_categories[$this->context['view']->params_filtre])){
$this->context['view']->aside_aide_contact_soutiens = $this->em->getRepository(Aides::class)->getListAides([
'special' => array(
'aides' => array(
'idcontacts' => $this->idcontact
),
'idaidecontact' => $this->context['view']->filtres_aides_categories[$this->context['view']->params_filtre],
'type_aide' => 1
)
]);
}
$this->context['view']->title_type = 'Soutien';
$this->context['view']->menu_title_type = 'soutenus';
$this->asides->load(['url_lists' => array(
'exec' => array(
'htmlstart' => true,
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_types_object,
'url' => '/contacts/{v_url_clean}/{v_current_page}/type/key_type',
'params'=> array(
'key_type' => 'auto_key'
)
),
'title' => 'Voir'
)]);
$this->asides->load(['par_annee' => array(
'exec' => array(
'htmlend' => true,
'color' => ($this->context['action'] == 'selections') ? 'textes' : 'context',
),
'php' => array(
'method' => 'asidesUrlListsForms',
'url' => '/contacts/{v_url_clean}/{v_current_page}'
),
'title' => 'Recherche par periode'
)]);
$this->asides->load('contact_list_aidecontacts');
$this->asides->load('contact_chartreuse');
}
// }}}
// {{{ action_selections()
/** Sélection de quelques choses
*
* @Route("/editions/{slug}/selections", name="edition_selections")
* @Route("/editions/{slug}/selections/type/{p_type}/idaide/{p_idaide}", name="edition_selections_type_idaide")
*
* @access public
* @return void
*/
public function action_selections($slug = null, $p_type = null, $p_idaide = null)
{
$this->InitController($slug, 'selections');
$this->context['params']['type'] = $p_type;
$this->context['params']['idaide'] = $p_idaide;
$this->context['view']->current_page = 'selections';
$this->getContactAides(array(4));
$this->context['view']->title_type = 'Sélection';
$this->context['view']->menu_title_type = 'sélectionnés';
// $this->getAsideContent();
$this->asides->load(['url_lists' => array(
'exec' => array(
'htmlstart' => true,
'color' => ($this->context['action'] == 'selections') ? 'textes' : 'context',
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_types_object,
'url' => '/editions/{v_url_clean}/{v_current_page}/type/key_type?y={v_year}',
'params'=> array(
'key_type' => 'auto_key'
)
),
'title' => 'Voir'
)]);
$this->asides->load(['par_annee' => array(
'exec' => array(
'htmlend' => true,
'color' => ($this->context['action'] == 'selections') ? 'textes' : 'context',
),
'php' => array(
'method' => 'asidesUrlListsForms',
'url' => '/editions/{v_url_clean}/{v_current_page}'
),
'title' => 'Recherche par periode'
)]);
$this->asides->load(['contact_list_aidecontacts' => array(
'exec' => ['color' => 'textes']
)]);
$this->asides->load('laureat_signaler');
$this->asides->load('contact_chartreuse');
return $this->view('editions/selections.html.twig');
}
// }}}
// {{{ action_videos_auteurs()
/** Tous les auteurs avec une vidéos
*
* @Route("/editions/{slug}/videos-auteurs/", name="edition_videos_auteurs")
*
*/
public function action_videos_auteurs($slug = null)
{
$this->InitController($slug, 'videos');
$playlists = $this->em->getRepository(Playlists::class);
$persons = $this->em->getRepository(Persons::class);
// récupèrter les auteurs
$this->context['view']->persons = $playlists->getAuthors();
$idclassifications = array(144);
// trouver les auteurs
$params_sql_persons = array(
'fields' => array('idperson'),
'special' => array(
'idclassifications' => $idclassifications,
'persons' => array(
'group' => array('persons' => 'idperson')
)
),
'count_disctint_by' => array('persons' => 'idperson'),
'dbg' => array('persons_playlists','Auteurs des playlist par l\'auteur'),
);
$this->context['view']->nb_persons_total = $playlists->countListPlaylists($params_sql_persons);
$params_sql_persons['limit'] = array($this->getLimitStart(),$this->perPage);
$results = $playlists->getListPlaylists($params_sql_persons);
foreach($results as $k=>$v) {
$idpersons[$v['idperson']] = $v['idperson'];
}
// trouver les playlists
if(!empty($idpersons)) {
$params_sql_playlists = array(
'special' => array(
'idclassifications' => $idclassifications,
'idpersons' => $idpersons,
),
'limit' => array(0,1000),
'dbg' => array('texts_playlists','Playlists le texte par l\'auteur'),
);
$list = $playlists->getListPlaylists($params_sql_playlists);
if(!empty($list)) {
foreach($list as $playlist) {
if(!empty($playlist['idperson'])) {
foreach($playlist['idperson'] as $idperson=>$author) {
if(empty($authors[$author['idperson']])) {
$authors[$author['idperson']] = $author;
$thumbnail = $persons->getVignettePerson($author['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop'));
$thumbnail_flou = $persons->getVignettePerson($author['idperson'],array('width'=>$_ENV['VIGN_PERSONS_WIDTH'],'height'=>$_ENV['VIGN_PERSONS_HEIGHT'],'direction'=>'crop', 'blur' => true));
if(strpos($thumbnail, 'normal-def')===false) {
$authors[$author['idperson']]['photo'] = $thumbnail;
$authors[$author['idperson']]['photo_flou'] = $thumbnail_flou;
}
}
}
foreach($playlist['idtext'] as $idtext=>$text) {
$authors[$author['idperson']]['texts'][$idtext] = $text;
$authors[$author['idperson']]['texts'][$idtext]['url_clean_playlist'] = $playlist['urlClean'];
}
if(count($authors[$author['idperson']]['texts'])>4) {
$authors[$author['idperson']]['is_list'] = true;
}
}
}
}
if(!empty($authors)) {
$this->context['view']->authors = $authors;
}
}
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_persons_total);
return $this->view('editions/videos.html.twig');
}
// {{{ action_textes_auteurs()
/** Textes par leur auteur
*
* @Route("/editions/{slug}/textes-auteurs/", name="edition_textes_auters")
*
*/
public function action_textes_auteurs($slug = null, $params = array())
{
if(!is_null($slug)){
$this->InitController($slug, 'videos');
}
else if(empty($params)){
return null;
}
$execute = true;
if(!empty($params['count_only'])){
$execute = false;
}
if($execute){
$this->setLocate([0 => 'Textes par leurs auteur(e)s']);
$this->action_spectacles(null, [
'get_spectacles_with_multimedias' => true,
'stop_redirect' => true
]);
$this->context['view']->type = 'textes-auteurs';
}
$default_days = 365;
$idclassifications = array(144);
$limit_query = array($this->getLimitStart(),$this->perPage);
$this->context['view']->menu_periodes = array(
'all' => array(
'unset' => array('saison', 'prochains')
),
'affiche' => array(
'unset' => array('saison', 'plus_proche')
)
);
// tous les spectacles ou ceux à l'affiche
$this->context['view']->periode_spectacle = 'affiche';
if(!empty($this->context['params']['periode']) && !empty($this->context['view']->menu_periodes[$this->context['params']['periode']])) {
$this->context['view']->periode_spectacle = $this->context['params']['periode'];
}
//Nous indiquons à la vue le filtre actif de l'utilisateur
$this->context['view']->{'periode_'.$this->context['view']->periode_spectacle} = true;
//Nous utilisons les filtres par defauts
$this->getCommonSearch(array(
'saisons_annees' => $this->getListSeasonsYears($this->em->getRepository(Playlists::class)->getSpectaclesAnneesSaisons($idclassifications)),
'nb_days' => $default_days,
));
$this->getCommonSearchView();
//Nous préparons le where pour indiquer à la requête que nous souhaitons des résultats en lien avec les contacts
$where_idcontact = ' AND t.idcontact_publisher='.((int)$this->idcontact);
// les spectacles à l'affiche avec des textes nonfictif
$params_sql_spectacles = $this->setCommonSearchSpectacles(array(
'params' => array(
'where' => $where_idcontact,
'limit' => 'all',
'groupby' => 't.idtext'
),
'special' => array(
'count_only_distinct' => 't.idtext',
'playlists' => array(
'text' => true,
'idclassifications' => $idclassifications, // par l'auteur
),
'textfictif' => 0,
'plus_proche' => true,
),
'dbg' => array('spectacles_auteurs_affiche','Texte par l\'auteur à l\'affiche'),
));
//Nous structurons les requêtes avec les différents liens possibles.
// all => unset > saison, prochains
// affiche => unset > saison, plus_proche
foreach($this->context['view']->menu_periodes AS $k => $value){
$params_sql_spectacles_count = $params_sql_spectacles;
foreach($value['unset'] AS $unset){
unset($params_sql_spectacles_count['special'][$unset]);
if($this->context['view']->periode_spectacle==$k) {
unset($params_sql_spectacles['special'][$unset]);
}
}
//Si l'utilisateur à sélectionné une région
if(!empty($this->context['params']['area'])){
$params_sql_spectacles_count['special']['get_schedule_ville'] = $this->context['params']['area'];
$params_sql_spectacles['special']['get_schedule_ville'] = $this->context['params']['area'];
}
//On compte et stockons le nombre de résultats des différents filtres possibles
$this->context['view']->nb_spectacles_total[$k] = $this->spectacles->countListSpectacles($params_sql_spectacles_count);
}
if($execute){
if($this->context['view']->periode_spectacle=='affiche') {
$params_sql_spectacles['special']['prochains'] = $this->context['view']->days;
}
//Nous limitons le nombre de résultat
$params_sql_spectacles['params']['limit'] = $limit_query;
//Nous executons la requête
$list_spectacles = $this->spectacles->getListSpectacles($params_sql_spectacles);
//Nous récupérons les textes en lien avec les différents spectacles précédemment récupérés
$this->context['view']->texts = $this->em->getRepository(Texts::class)->getTextsFromSpectacles($list_spectacles);
// on doit trouver la playlist le texte par l'auteur
if(isset($this->context['view']->texts)) {
foreach ($this->context['view']->texts 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']->texts[$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,
),
array('format_vignette' => true)
);
$video = (array_shift($pl['multimedias']));
$this->context['view']->texts[$k]['playlist']['vignette'] = $video['vignette'];
$this->context['view']->texts[$k]['playlist']['vignette_flou'] = $video['vignette_flou'];
$this->context['view']->texts[$k]['playlist']['thtv'] = true;
$this->context['view']->texts[$k]['playlist']['thtv_permalink'] = $video['permalink'];
$this->context['view']->texts[$k]['playlist']['url_clean_video'] = $playlist['urlClean'];
}
}
}
//On préparation la pagination
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_spectacles_total[$this->context['view']->periode_spectacle]);
$this->context['view']->pagination['texte'] = true;
$this->get_asides_videos();
$this->get_asides_common('textes');
}
return $this->view('editions/textes-auteurs.html.twig');
}
// }}}
// {{{ action_evenements()
/** Page qui rassemble tous les évènements
*
* @Route("/editions/{slug}/evenements/", name="edition_evenements")
*
*/
public function action_evenements($slug = null)
{
$this->InitController($slug, 'evenements');
$title_sub_evenements = html_entity_decode('Évènements');
$this->setLocate([0 => $title_sub_evenements]);
$this->extra_locate = $this->extra_title = $title_sub_evenements;
$this->getSQLEvenements();
if($this->view->evenements_counts['total'] == 0){
return $this->redirectToRoute('edition_view', ['slug' => $this->context['view']->url_clean]);
}
// on affiche les descriptions sur les evenements
$this->context['view']->is_description = true;
$this->get_asides_common('evenements', ['carte_url_custom' => '/editions/'.$this->context['view']->url_clean.'/evenements/area/get_id']);
return $this->view('editions/evenements.html.twig');
}
// }}}
// {{{ action_telechargements()
/** Accueil pour un éditeur
*
* @Route("/editions/{slug}/telechargements/", name="edition_telechargements")
*
*/
public function action_telechargements($slug = null)
{
$this->InitController($slug, 'telechargements');
$title_sub_evenements = html_entity_decode('ÉVÈNEMENTS');
$this->setLocate([0 => $title_sub_evenements]);
$files = $this->em->getRepository(Files::class);
$classifications = $this->em->getRepository(Classifications::class);
// classifications des spectacles
$classifications_list = $classifications->getClassificationList('files','contacts',null,array(1),'get_value');
// liste des fichiers
$params_object_files = array(
'valid' => 1,
'publish' => 1,
'force_mode' => 'file',
'vignette_width' => 250,
'debug_sql_associate' => false,
);
$object_files = $files->getObjectFiles($this->idcontact,'contacts',$classifications_list,$params_object_files);
if(!empty($object_files)) {
foreach($object_files as $k=>$v) {
if(!empty($v['saison'])) {
$saisons[$v['saison']] = $v['saison'];
// trouver kles autres associations
$v['objects'] = $files->getObjects($v['idfile'],array('object' => 'contacts', 'idobject' => $this->idcontact));
if(!empty($v['objects'])) {
foreach($v['objects'] as $kb=>$vb) {
$v['objects'][$vb['object']][$vb['idobject']] = $vb;
}
}
$this->context['view']->files['general'][$k] = $v;
}
}
$this->context['view']->is_file = true;
if(!empty($saisons)) {
//setDebug($saisons);
}
}
return $this->view('editions/telechargements.html.twig');
}
// }}}
// {{{ action_infos_generales()
/** action permettant la modification des informations générales à l'édition
*
* @Route("/editions/{slug}/infos-generales", name="edition_infos_generales")
*
* @access public
*/
public function action_infos_generales($slug = null, Request $request, TheatreMail $TheatreMail, EditUtils $editUtils)
{
$this->InitController($slug, 'infos-generales');
$this->extra_locate = $this->extra_title = 'Modifier vos informations';
$idcontact = $this->idcontact;
// si connecté, instancier la classe utilitaires d'édition
if($this->getUser() instanceof Extranetusers) {
// paramètre d'instanciation
$params_edit = array(
'idobject' => $idcontact,
'object' => 'contacts',
'em' => $this->em
);
$url_redirect = '/editions/'.$this->context['view']->url_clean.'/';
$object_fields = array(
'url',
'facebook',
'twitter',
'instagram',
'organisation',
'nom_suite',
'idtypestructure',
'license',
'address1',
'address2',
'zip',
'city',
'country',
'phone1',
'phone2',
'fax',
'email1',
'email1_online',
);
// controlleur pour l'edition
$editUtils->setParams($this->context,$params_edit);
// les droits
$object_rights = $editUtils->checkObjectRights();
// checker si la personne connectée à les droits sur cette fiche
if(!empty($object_rights['update'])){
$data = $this->infos;
$GLOBALS['from_id'] = $data['idmultimedia'];
// les champs
$fields = array('text','link','facebook','twitter','instagram');
$form = $this->get('form.factory')->createBuilder(FormType::class, $this->infos, [
'attr' => [
'id' => 'masterform'
]
]);
$form->add('organisation',TextType::class, [
'label' => 'Nom court',
'constraints' => [
new NotBlank([
'message' => 'Nom court : veuillez préciser le nom de votre structure'
])
],
'attr' => [
'size'=>'45',
'id' => 'organisation'
]
]);
$form->add('nom_suite',TextType::class, [
'label' => 'Nom complet',
'required' => false,
'attr' => [
'size'=>'45',
'id' => 'nom_suite'
]
]);
// select type structure
$typesstructures = $this->em->getRepository(Typesstructures::class);
$typestructure_list = $typesstructures->getTypeStructureList(true);
$typestructure_list[] = 'Choisissez dans la liste';
$form->add( 'idtypestructure', ChoiceType::class, [
'label' => 'Type de structure',
'choices' => array_flip($typestructure_list),
'required' => false,
'attr' => [
'class'=>'select_typestructure',
'id' => 'idtypestructure'
]
]);
$form->add('license',TextType::class, [
'label' => 'Licence de spectacle',
'required' => false,
'attr' => [
'size'=>'45',
'id' => 'license'
]
]);
$form->add('address1',TextType::class, [
'label' => 'Adresse',
'constraints' => [
new NotBlank([
'message' => 'Adresse : veuillez préciser l\'adresse'
])
],
'attr' => [
'size' => '45',
'id' => 'address1'
]
]);
$form->add('address2',TextType::class, [
'label' => 'Adresse suite',
'required' => false,
'attr' => [
'size'=>'45',
'id' => 'address2'
]
]);
$form->add('zip', TextType::class, [
'label' => 'Code postal',
'constraints' => [
new NotBlank([
'message' => 'Code postal : veuillez préciser le code postal'
])
],
'attr' => [
'size'=>'45',
'id' => 'zip'
]
]);
$form->add('city', TextType::class, [
'label' => 'Ville',
'constraints' => [
new NotBlank([
'message' => 'Ville : veuillez préciser la ville'
])
],
'attr' => [
'size'=>'45',
'id' => 'city'
]
]);
$form->add('country',ChoiceType::class, [
'label'=> 'Pays',
'choices' => $this->em->getRepository(Contacts::class)->getCountryList(),
'constraints' => [
new NotBlank([
'message' => 'Pays : veuillez préciser le pays'
])
],
'attr' => [
'id' => 'country'
]
]);
$form->add('phone1',TextType::class, [
'label' => 'Téléphone général',
'required' => false,
'attr' => [
'size'=>'45',
'id' => 'phone1'
]
]);
$form->add('phone2',TextType::class, [
'label' => 'Téléphone location',
'required' => false,
'attr' => [
'size'=>'45',
'id' => 'phone2'
]
]);
$form->add('fax',TextType::class, [
'label' => 'Télécopie',
'required' => false,
'attr' => [
'size'=>'45',
'id' => 'fax'
]
]);
$form->add('email1',TextType::class, [
'label' => 'Email général',
'required' => false,
'constraints' => [
// new NotBlank([
// 'message' => 'Email : veuillez préciser un email'
// ]),
New Email([
'message' => 'Email général : l\'adresse email principale semble incorrecte'
])
],
'attr' => [
'size'=>'45',
'id' => 'email1'
]
]);
// masquer les adresses ?
// masquer les adresses ?
$form->add('email1_online', ChoiceType::class, [
'placeholder' => false,
'label' => 'Email général visible',
'expanded' => true,
'multiple' => false,
'choices' => [
'oui' => 1,
'non' => 0
],
'required' => false,
]);
$form->add('url', TextType::class, [
'label' => 'Site internet',
'required' => false,
'constraints' => [
New Url([
'protocols' => ['http', 'https'],
'message' => 'Site internet : l\'adresse du site semble incorrecte (elle doit commencer par https://)'
]),
new CheckWebsite([
'message' => 'Site Internet : le site Internet que vous avez précisé ne semble pas disponible ! Vérifiez qu\'il s\'agit bien de la bonne adresse'
])
],
'attr' => [
'size'=>'45',
'id' => 'link'
]
]);
$form->add('facebook', TextType::class, [
'label' => 'Profil Facebook',
'required' => false,
'constraints' => [
New Url([
'protocols' => ['http', 'https'],
'message' => 'Profil Facebook : l\'adresse du profil facebook semble incorrecte (elle doit commencer par httpss://)'
])
],
'attr' => [
'size'=>'45',
'id' => 'facebook'
]
]);
$form->add('twitter', TextType::class, [
'label' => 'Profil Twitter',
'required' => false,
'constraints' => [
New Url([
'protocols' => ['http', 'https'],
'message' => 'Profil Twitter : l\'adresse du profil twitter semble incorrecte (elle doit commencer par httpss://)'
])
],
'attr' => [
'size'=>'45',
'id' => 'twitter'
]
]);
$form->add('instagram', TextType::class, [
'label' => 'Profil Instagram',
'required' => false,
'constraints' => [
New Url([
'protocols' => ['http', 'https'],
'message' => 'Profil Instagram : l\'adresse du profil instagram semble incorrecte (elle doit commencer par httpss://)'
])
],
'attr' => [
'size'=>'45',
'id' => 'instagram'
]
]);
// choix de la vidéo de tête
$form->add('idmultimedia', RelationsType::class, [
'label' => 'Vidéo de tête',
'type_object' => 'form',
'type_dbdo'=>'multimedias',
'dbdo' => 'contacts',
'relat' => 'simple'
]);
$form->add('validation', SubmitType::class, [
'label' => 'Enregistrer les informations',
'attr' => [
'class'=>'boutform boutbig'
]
]); // validation
$form = $form->getForm();
$form->handleRequest($request);
// enregistrement des informations
if($form->isSubmitted() && $form->isValid()) {
foreach($object_fields as $f) {
if($form->has($f)) {
$values[$f] = $form->get($f)->getData();
}
}
// enregistrer la dernière version validée par un administrateur (fige)
// les versions intermédiaires ne seront pas enregistrées
if(!empty($data['valid_version'])) {
$values['other_versions'] = serialize($data);
$values['valid_version']= 0;// remettre à zero la valid version
}
// un multimedia sélectionné ?
$idmultimedia = $form->get('idmultimedia')->getViewData();
$values['idmultimedia'] = 0;
if(!empty($idmultimedia)){
$values['idmultimedia'] = $idmultimedia;
}
// enregistrer les nouvelles versions
$editUtils->obj->setUpdateFields($values);
if($editUtils->obj->setData($idcontact)) {
// envoyer un mail à l'admin
$editUtils->sendAlerte($idcontact,'update','Mise à jour des informations générales', $TheatreMail);
// UtilsEdit::logAction($idcontact,null,'contacts',$this->context['session']->getValue('idextranetuser'));
// prévenir du success
$reponse['save_ok'] = 'Vos informations ont bien été enregistrées';
return $this->redirect('/editions/'.$data['url_clean'].'/infos-generales?update_success');
// les nouvelles valeurs
$data = $values;
// pour le pays
$data['country_code'] = $data['country'];
} else {
$this->logger->error('Pb pendant l\'enregistrement d\'un contact');
}
}
// récupérer les infos
if(!$form->isSubmitted()) {
// $form->setDefaults($data);
$form->get('email1_online')->setData(0);
if ($this->infos['email1Online']) {
$form->get('email1_online')->setData($data['email1Online']);
}
if (empty($data['country_code'])) {
$form->setData(array('country' => 'FR'));
} else {
$form->setData(array('country' => strtoupper($data['country_code'])));
}
if (empty($data['idtypestructure'])) {
$form->setData(array('idtypestructure' => 0));
}
}
}
// la personne n'a pas les droits => renvoi sur le formulaire de demande
else
{
return $this->redirect($url_redirect.'autorisation/');
}
} else { // personne non loguée
// rediriger vers montheatre/connexion
return $this->redirect('/montheatre/connexion?urifrom=/editions/'.$this->context['view']->url_clean.'/infos-generales&entete_connexion=editions');
}
$this->get_asides_admin();
$this->view->js_more[] = 'ajax.relation.js';
return $this->view('editions/infos-generales.html.twig', [
'form' => $form->createView()
]);
}
// }}}
// {{{ action_autorisation()
/** Demander à l'utilisateur s'il possède l'autorisation de modifier la page contact
*
* @Route("/editions/{slug}/autorisation", name="edition_autorisation")
*
*/
public function action_autorisation($slug = null, UploadUtils $editUtils, FilesController $files_utils, Request $request)
{
return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
}
// }}}
/** FOrmulaire d'édition de présentation du contact
*
* @Route("/editions/{slug}/presentation-edit", name="edition_presentation_edit")
*
*/
public function action_presentation_edit($slug = null, UploadUtils $uploadUtils, Request $request, TheatreMail $TheatreMail, UtilsEdit $utilsEdit, EditUtils $editUtils)
{
return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
}
// }}}
// {{{ action_bandeau()
/** Textes action_bandeau
*
* @Route("/editions/{slug}/bandeau/", name="edition_bandeau")
*
*/
public function action_bandeau($slug = null, UploadUtils $editUtils, FilesController $files_utils, Request $request)
{
$GLOBALS['rub_courante'] = 'contacts';
$this->InitController($slug, 'bandeau');
$session = $this->context['session'];
$idcontact = $this->idcontact;
// si connecté, instancier la classe utilitaires d'édition
if($this->getUser() instanceof Extranetusers) {
// paramètre d'instanciation
$params_edit = array(
'idobject' => $idcontact,
'object' => 'contacts',
);
$url_redirect = '/editions/'.$this->context['view']->url_clean.'/';
// controlleur pour l'edition
$editUtils->load($this->context,$params_edit);
// les droits
$this->view->object_rights = $object_rights = $editUtils->checkObjectRights();
// checker si la personne connectée à les droits sur cette fiche
if(empty($object_rights['update'])) {
return $this->redirect($url_redirect.'autorisation/');
}
} else { // personne non loguée
// rediriger vers montheatre/connexion
return $this->redirectToRoute('app_login', ['urifrom' => '/editions/'.$this->context['view']->url_clean.'/bandeau', 'entete_connexion' => 'editions']);
}
$this->extra_locate = $this->extra_title = 'Bandeau';
$this->style_more[] = array(
'/navigation/js/Jcrop/css/jquery.Jcrop.css',
'/navigation/js/upload/fineuploader.css'
);
$this->js_more[] = '/Jcrop/js/jquery.Jcrop.min.js';
$this->js_more[] = 'upload/jquery.fineuploader-3.0.min.js';
$this->get_asides_admin();
return $this->view('editions/bandeau.html.twig');
}
// }}}
// {{{ get_textes_originaux()
/** Textes originaux de l'éditeur
*
*/
public function get_textes_originaux() {
$persons = $this->em->getRepository(Persons::class);
$idcontact = $this->idcontact;
// text originaux d'un editeur
$sql_originaux = 'SELECT idtext, idgenretext FROM texts WHERE type=0 AND idcontact_publisher='.$idcontact;
$texts_originaux = $persons->queryAll($sql_originaux);
if(!empty($texts_originaux)) {
foreach($texts_originaux as $k=>$v) {
// nb de texte
$this->view->nb_textes = count($texts_originaux);
if($v['idgenretext']==1 || $v['idgenretext']==NULL) {
$array_texts_theatre[] = $v['idtext'];
} else {
$array_texts_autres[] = $v['idtext'];
}
$array_texts_tous[] = $v['idtext'];
}
if(!empty($array_texts_theatre)) {
$liste_texts_theatre = join(',', $array_texts_theatre);
} else { // on sort tous car par de texte de théâtre !
$liste_texts_theatre = join(',', $array_texts_tous);
}
} else {
$liste_texts_theatre = null;
}
return $liste_texts_theatre;
}
// }}}
// {{{ action_documents()
/** Page qui listes les documents PDF
*
* @Route("/editions/{slug}/documents/", name="edition_documents")
*
* @access public
* @return void
*
*/
public function action_documents($slug = null, UploadUtils $editUtils, FilesController $files_utils, Request $request)
{
$GLOBALS['rub_courante'] = 'contacts';
$this->InitController($slug, 'documents');
// paramètre d'instanciation
$params_edit = array(
'idobject' => $this->idcontact,
'object' => 'contacts',
);
// si connecté, instancier la classe utilitaires d'édition
if($this->getUser() instanceof Extranetusers) {
// controlleur pour l'edition
$editUtils->load($this->context,$params_edit);
// les droits
$object_rights = $editUtils->checkObjectRights();
// checker si la personne connectée à les droits sur cette fiche
if(!empty($object_rights['update'])) {
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform',
'novalidate' => true
]
]);
// pour la gestion des fichiers
$files_utils->InitFilesController($this->context,$params_edit);
$files_utils->documents($request);
$this->view->form = $files_utils->context['form']->createView();
} else { // la personne n'a pas les droits => renvoi sur le formulaire de demande
return $this->redirect($this->context['view']->url_clean.'/autorisation/');
}
} else { // personne non loguée
// rediriger vers montheatre/connexion
return $this->redirectToRoute('app_login', ['urifrom' => $this->context['view']->url_clean.'/documents', 'entete_connexion' => $params_edit['object']]);
}
$this->get_asides_admin();
/* géré par Files_edit */
$this->extra_locate = $this->extra_title = 'Documents associés';
// style et js en plus pour les champs de relation
$this->view->style_more[] = 'relat';
$this->view->js_more[] = 'ajax.relation.js';
return $this->view('editions/documents.html.twig');
}
// }}}
// {{{ action_documents_edit()
/** Ajouter des documents à la structure
*
* @Route("/editions/{slug}/documents-edit/", name="edition_documents_edit")
*
* @access public
* @return void
*/
public function action_documents_edit($slug = null, UploadUtils $uploadUtils, FilesController $files_utils, Request $request, EditUtils $editUtils)
{
$GLOBALS['rub_courante'] = 'contacts';
$this->InitController($slug, 'documents');
$url_folder = $this->context['view']->data_object['url_folder'] = '/editions/'.$this->context['view']->url_clean;
$this->context['view']->data_object['url_folder_full'] = $url_folder;
$session = $this->context['session'];
// paramètre d'instanciation
$params_edit = array(
'idobject' => $this->idcontact,
'object' => 'contacts',
'page' => 'editions',
);
// si connecté, instancier la classe utilitaires d'édition
if($this->getUser() instanceof Extranetusers) {
// controlleur pour l'edition
$uploadUtils->load($this->context,$params_edit);
// les droits
$object_rights = $editUtils->checkObjectRights();
$this->view->object_rights = $object_rights;
// checker si la personne connectée à les droits sur cette fiche
if(!empty($object_rights['update'])) {
// pour la gestion des fichiers
$files_utils->InitFilesController($this->context,$params_edit);
$response = $files_utils->documents_edit($request, $editUtils);
if($response instanceof RedirectResponse){
return $response;
}
} else { // la personne n'a pas les droits => renvoi sur le formulaire de demande
return $this->redirect($url_folder.'/autorisation/');
}
} else { // personne non loguée
// rediriger vers montheatre/connexion
return $this->redirectToRoute('app_login', ['urifrom' => $url_folder.'/documents-edit', 'entete_connexion' => $params_edit['object']]);
}
$this->get_asides_admin();
/* géré par Files_edit */
$this->extra_locate = $this->extra_title = 'Ajouter/modifier un document';
$this->view->style_more[] = '/navigation/js/upload/fineuploader.css';
$this->view->js_more[] = 'upload/jquery.fineuploader-3.0.min.js';
// style et js en plus pour les champs de relation
$this->view->style_more[] = 'relat.css';
$this->view->js_more[] = 'ajax.relation.js';
$this->context['view']->jquery_cal = 'datepicker';
return $this->view('editions/documents-edit.html.twig', [
'form' => $files_utils->context['form']->createView()
]);
}
// }}}
// {{{ get_textes_traduits()
/** Textes traduits de l'éditeur
*
*/
public function get_textes_traduits() {
$persons = $this->em->getRepository(Persons::class);
$idcontact = $this->idcontact;
$sql_traductions = 'SELECT idtext FROM texts WHERE type=1 AND idcontact_publisher='.$idcontact;
$texts_traductions = $persons->queryAll($sql_traductions);
if(!empty($texts_traductions)) {
// nb de traductions
$this->view->nb_traductions = count($texts_traductions);
foreach($texts_traductions as $k=>$v) {
$array_texts_traductions[] = $v['idtext'];
}
$liste_traductions = join(',',$array_texts_traductions);
// traductions de texte de theatre par un editeurs
$sql_traductions_theatre = 'SELECT tt.idtext FROM text_traduction tt, texts t
WHERE t.idtext=tt.idtext
AND (t.idgenretext=1 OR t.idgenretext IS NULL)
AND tt.idtexttraduction IN ('.$liste_traductions.')';
$traductions_theatre = $persons->queryAll($sql_traductions_theatre);
if(!empty($traductions_theatre)) {
foreach($traductions_theatre as $k=>$v) {
$array_traductions_theatre[] = $v['idtext'];
}
$liste_traductions_theatre = join(',', $array_traductions_theatre);
} else {
$liste_traductions_theatre = null;
}
} else {
$liste_traductions = null;
$liste_traductions_theatre = null;
}
return array(
'liste_traductions' => $liste_traductions,
'liste_traductions_theatre' => $liste_traductions_theatre
);
}
// }}}
/** Les asides communs aux pages biographies
*
*/
public function get_asides_biographies($type_page = 'tous')
{
$menu_biographies = array(
'auteurs' => array(
'name' => 'Tous les auteurs',
'key_filtre' => 'auteurs',
// 'count' => $spectacles_counts['prochains']
),
// 'traducteurs' => array(
// 'name' => 'Tous les traducteurs',
// 'key_filtre' => 'traducteurs',
// // 'count' => $spectacles_counts['prochains']
// ),
// 'auteurs-affiche' => array(
// 'name' => 'Les auteurs à l\'affiche',
// 'key_filtre' => 'auteurs_affiche',
// 'url' => '/editions/{v_url_clean}/auteurs/type/key_filtre/generate_params'
// // 'count' => $spectacles_counts['tous']
// ),
'decouverte-auteurs' => array(
'name' => 'Les auteurs par eux-mêmes',
'key_filtre' => 'decouverte-auteurs',
'url' => '/editions/{v_url_clean}/decouverte-auteurs',
),
);
//Tous les menus
$this->asides->load(['url_lists' => array(
'exec' => [
'color' => 'biographies',
'htmlstart' => true,
'htmlend' => (isset($this->view->menu_jours_auteurs)) ? false : true
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_biographies,
'url' => '/editions/{v_url_clean}/biographies/type/key_filtre/generate_params',
'params' => array(
'activate' => $this->view->type,
),
'structure' => array(
'structure_classic' => array(
'd' => 'v_days',
)
)
),
'title' => 'Voir'
)]);
if(isset($this->view->menu_jours_auteurs)){
$this->asides->load(['url_lists,menu_days' => array(
'exec' => [
'color' => 'biographies',
'htmlend' => true
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->view->menu_jours,
'url' => '/editions/{v_url_clean}/auteurs/type/key_filtre/generate_params',
'params' => array(
'key_filtre' => $this->view->type,
'activate' => $this->context['view']->days
),
'structure' => array(
'structure_classic' => array(
'd' => 'key_day',
)
)
),
'title' => 'Recherche par période'
)]);
}
// $this->asides->load(['recherche_texte.inc' => array(
// 'exec' => ['htmlstart' => true, 'color'=>'biographies'],
// 'action' => '/editions/editeurs'
// )]);
if(!empty($this->view->alphabet)){
$this->asides->load(['recherche_alphabetique' => array(
'exec' => array(
'htmlstart' => true,
'htmlend' => true,
'color'=>'biographies'
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->view->alphabet,
'url' => '/editions/{v_url_clean}/biographies?lettre=key_letter',
'params' => [
'key_letter' => 'auto_key'
]
),
'title_seconds' => 'Recherche alphabétique'
)]);
}
$this->get_asides_common('biographies');
}
// }}}
/** Les asides communs aux pages textes
*
*/
public function get_asides_textes($type_page = 'tous')
{
$menu_textes = array(
'tous' => array(
'name' => 'Tous les textes',
// 'key_filtre' => 'tous',
'url' => '/editions/{v_url_clean}/textes/' //type/key_filtre
// 'count' => $spectacles_counts['prochains']
)
// 'traduits' => array(
// 'name' => 'Textes traduits',
// 'key_filtre' => 'traduits',
// // 'count' => $spectacles_counts['tous']
// )
);
$this->asides->load(['url_lists' => array(
'exec' => [
'color' => 'editions',
'htmlstart' => true,
'htmlend' => ($type_page == 'textes-auteurs') ? true : false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes,
'params' => array(
'activate' => $type_page
)
),
'title' => 'Voir'
)
]);
$this->asides->load(['par_annee' => array(
'exec' => array(
'htmlend' => true,
),
'php' => array(
'method' => 'asidesUrlListsForms',
'action' => '/editions/{v_url_clean}/textes/generate_params',
'params' => array(
'activate' => $this->context['view']->days,
),
'structure' => array(
'area' => 'v_area',
'structure_classic' => array(
'type' => 'v_type',
'idtypestructure' => 'v_idtypestructure'
)
)
),
'title' => 'Recherche par période'
)]);
}
// }}}
/** Les asides communs aux pages de modifications
*
*/
public function get_asides_admin(){
$menu_admin = array(
// 'presentation' => array(
// 'name' => 'Présentation',
// 'key' => 'presentation-edit'
// ),
'infos' => array(
'name' => 'Infos générales',
'key' => 'infos-generales'
),
'bandeau' => array(
'name' => 'Bandeau',
'key' => 'bandeau'
),
'pdf' => array(
'name' => 'Documents PDF',
'key' => 'documents',
'key_2' => 'documents-edit'
)
);
$this->asides->load(['url_lists_alone' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_admin,
'url' => '/editions/{v_url_clean}/key',
'params' => array(
'activate' => $this->context['action']
)
),
'title' => 'Modifier'
)
]);
}
// }}}
/** Les asides communs à toutes les plusieurs pages
*
*/
public function get_asides_common($color = 'editions', $params_asides = array()){
$params_carte_common = array(
'exec' => ['color' => $color],
);
if(!empty($params_asides['carte_url_custom'])){
$params_carte_common['url'] = $params_asides['carte_url_custom'];
}
if(!in_array($this->context['action'], array('textes', 'biographies')) && (!empty($params_asides['no_show_map']) && $params_asides['no_show_map'])){
$this->asides->load(['common_carte' => $params_carte_common]);
}
$this->asides->load(['common_participer_contacts' => array(
'url_custom_edit' => '/editions/'.$this->view->url_clean.'/infos-generales'
)]);
}
// }}}
// {{{ get_asides_videos()
public function get_asides_videos(){
$spectacles_counts = $this->view->spectacle_counts['spectacles_multimedias'];
//On réutilise les actions pour pour compter les nombres des spectacles etc.
if(empty($this->context['view']->nb_spectacles_total['affiche'])){
$this->action_textes_auteurs(null, ['count_only' => true]); }
$type = $this->context['view']->type;
$menu_videos = array(
'prochains' => array(
'name' => 'Spectacles à l\'affiche',
'key_filtre' => 'prochains',
'count' => $spectacles_counts['prochains']
),
'tous' => array(
'name' => 'Tous les spectacles',
'key_filtre' => 'tous',
'count' => $spectacles_counts['tous']
),
'partenariat' => array(
'name' => 'Toutes les vidéos en partenariat',
'key_url' => 'contacts/{v_url_clean}/videos/type/key_type',
'key_type' => 'partenariat',
'key_filtre' => 'null',
// 'spectacle_anciens' => array('anciens' => true),
'count' => $this->em->getRepository(Multimedias::class)->getMultimediasBy('contacts', $this->idcontact, ' AND m.audio_video=2','count')
),
'textes-auteurs-affiche' => array(
'name' => 'Les textes par leurs auteur(e)s à l\'affiche',
'key_filtre' => 'textes-auteurs',
'key_filtre_2' => 'affiche',
'url' => '/editions/{v_url_clean}/textes-auteurs/',
'count' => $this->context['view']->nb_spectacles_total['affiche']
),
// 'textes-auteurs' => array(
// 'name' => 'Les textes par leurs auteur(e)s',
// 'key_filtre' => 'textes-auteurs-affiche',
// 'key_filtre_2' => 'all',
// 'url' => '/editions/{v_url_clean}/textes-auteurs/periode/all',
// 'count' => $this->context['view']->nb_spectacles_total['all']
// ),
'decouverte-auteurs' => array(
'name' => 'Les auteurs par eux-mêmes',
'key_filtre' => 'decouverte-auteurs',
'url' => '/editions/{v_url_clean}/decouverte-auteurs',
),
);
$activate_menu = $type;
if($this->context['action'] == 'textes-auteurs'){
$activate_menu = $this->context['view']->periode_spectacle;
}
else if($this->context['action'] == 'decouverte-auteurs'){
$activate_menu = 'decouverte-auteurs';
}
$this->asides->load(['url_lists' => array(
'exec' => [
'color' => 'videos',
'htmlstart' => true,
'htmlend' => true
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_videos,
'url' => '/editions/{v_url_clean}/videos/type/key_filtre/generate_params',
'params' => array(
'activate' => $activate_menu
),
'structure' => array(
'structure_classic' => array(
'd' => 'v_days',
)
)
),
'title' => 'Voir aussi'
)
]);
}
// }}}
// {{{ getSpectaclesDatesCommon()
/** Récupere la liste des dates des spectacles à partir de la liste de tous les spectacles
*
* @return array
*/
public function getSpectaclesDatesCommon($ids_spectacle=array(),$ids_text=array())
{
if(!empty($ids_spectacle)) {
$sql_annees = '
SELECT schedules.`date`, YEAR(schedules.`date`) as annee
FROM schedules, spectacles
WHERE schedules.`idspectacle`=spectacles.`idspectacle`
AND spectacles.`publish`=1
AND schedules.`idspectacle` IN ('.join(',', $ids_spectacle).')
ORDER BY schedules.`date`';
}
else if(!empty($ids_text)) {
$sql_annees = '
SELECT schedules.`date`, YEAR(schedules.`date`) as annee
FROM schedules, spectacles
JOIN text_spectacle ON spectacles.`idspectacle`=text_spectacle.`idtext`
JOIN texts ON texts.idtext = text_spectacle.idtext
WHERE schedules.`idspectacle`=spectacles.`idspectacle`
AND spectacles.`publish`=1
AND text_spectacle.`idtext` IN ('.join(',', $ids_text).')
AND texts.`idcontact_publisher`='.$this->idcontact.'
ORDER BY schedules.`date`';
}
else{
$sql_annees = '
SELECT schedules.`date`, YEAR(schedules.`date`) as annee
FROM schedules, spectacles
JOIN text_spectacle ON spectacles.`idspectacle`=text_spectacle.`idtext`
JOIN texts ON texts.idtext = text_spectacle.idtext
WHERE schedules.`idspectacle`=spectacles.`idspectacle`
AND spectacles.`publish`=1
AND texts.`idcontact_publisher`='.$this->idcontact.'
ORDER BY schedules.`date`';
}
//si $sql_annees n'existe pas
if(!isset($sql_annees)){
return array();
}
$listdates = $this->spectacles->queryAll($sql_annees);
// liste des saisons et des années
if(empty($listdates)) {
//echo $listdates->getDebugInfos();
return array();
} else {
return $listdates;
}
}
// }}}
// {{{ getTitlePage()
/** Titre de la page (getter)
*
*/
public function getTitlePage() { return $this->title_page; }
// }}}
// {{{ getSQLTextes()
/** Les requêtes nécessaires pour les textes
*
* @return int
*
*/
public function getSQLTextes($params = array()){
$count = (!empty($params['count'])) ? true : false;
$type = $type_default = (!empty($params['default'])) ? $params['default'] : 'tous';
$where_idcontact = ' AND T1.idcontact_publisher='.((int)$this->idcontact).' ';
$ids_textes_originaux = $this->get_textes_originaux();
$ids_textes_traduits = $this->get_textes_traduits()['liste_traductions'];
//On transforme le tableau en une chaine de caractère
$textes = array(
'tous' => explode(',', $ids_textes_originaux),
'traduits' => explode(',', $ids_textes_traduits),
'all' => null
);
if(!empty($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $textes)){
$type = $this->context['params']['type'];
}
$listes_saisons = Date_time::getListSaisons(2000,(date('Y')+1));
$listes_saisons['annees'] = array_reverse($listes_saisons['annees'], true);
if(!$count){
$this->getCommonSearch(array(
'saisons_annees' => $listes_saisons,
));
$this->getCommonSearchView();
}
//Les comptes totaux
if($count) {
$this->view->textes_counts_total = 0;
foreach ($textes AS $key => $v) {
$params_sql_counts = array();
if (!empty($textes[$key][0]) && !is_null($textes[$key][0])) {
$params_sql_counts['special'] = array(
'idtext' => array('IN', $textes[$key]),
'join' => true,
);
$this->view->textes_counts[$key] = $this->em->getRepository(Texts::class)->countListTexts($params_sql_counts, false);
$this->view->textes_counts_total += $this->view->textes_counts[$key];
}
else{
$params_sql_counts['params']['where'] = $where_idcontact;
}
$this->view->textes_counts[$key] = $this->em->getRepository(Texts::class)->countListTexts($params_sql_counts, false);
$this->view->textes_counts_total += $this->view->textes_counts[$key];
}
$params_sql_counts['dbg'] = array('texts_affiche_' . $key . '_' . uniqid('', true), 'Total des textes ' . $key);
}
//Executions du code pour la page et son contenu
else{
//Nous incluons la chaine contenant les ID des textes dans la requête
$params_sql['params'] = array(
'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
);
$params_sql['params']['where'] = $where_idcontact;
$params_sql['special'] = array(
'join' => true,
);
if(!empty($textes[$type][0]) && !is_null($textes[$type][0])){
$params_sql['special']['idtext'] = array('IN', $textes[$type]);
}
$params_sql['dbg'] = array('texts_affiche_'.uniqid('', true), 'Textes des spectacles à l\'affiche');
// recherche par année
if(!empty($this->context['view']->year))
{
$params_sql['special']['year'] = $this->context['view']->year;
}
// recheche par période
elseif(!empty($this->context['view']->datestart) && !empty($this->context['view']->dateend))
{
$params_sql['special']['periode'] = array(
'datestart' => substr($this->context['view']->datestart, 0, -2).'00',
'dateend' => substr($this->context['view']->dateend, 0, -2).'00',
);
}
//On compte les textes courants suivant la requête construite pour la pagination
$count_textes = $this->em->getRepository(Texts::class)->countListTexts($params_sql,false);
//On applique la limite de résultat au corps de page
$params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
//On génère la pagination
$this->context['view']->pagination = $this->getPagination($count_textes);
$this->context['view']->pagination['totalItems'] = $count_textes;
$this->context['view']->pagination['texte'] = true;
//On récupère la liste des textes
$list_texts = $this->em->getRepository(Texts::class)->getListTexts($params_sql,array('publisher_first_inverse' => true));
//On indique la liste des textes à la vue pour l'afficher dans le template
$this->context['view']->texts = $list_texts;
}
}
// {{{ getSQLSpectacles()
/** Les requêtes nécessaires pour les spectacles
*
* @return array
*
*/
public function getSQLSpectacles($params = array()){
$count = (!empty($params['count'])) ? true : false;
$type_default = (!empty($params['default'])) ? $params['default'] : 'prochains';
$days_default = (!empty($params['days_default'])) ? $params['days_default'] : 365;
//Si on souhaite un nombre de résultat spécifique
$limit = (!empty($params['limit'])) ? $params['limit'] : false;
//Si on recherche des Spectacles avec critiques
$with_critiques = (!empty($params['get_spectacles_with_critiques'])) ? true : false;
//Si on recherche des Spectacles avec audios
$with_audios = (!empty($params['get_spectacles_with_audios'])) ? true : false;
//Si on recherche des Spectacles avec vidéos
$with_multimedias = (!empty($params['get_spectacles_with_multimedias'])) ? true : false;
$action_selected = 'spectacles';
//Sélection par nombres de jours
//Si la valeur existe bien dans le menu
if(isset($this->context['view']->days) && !in_array($this->context['view']->days, array_column($this->view->menu_jours, 'key_day'))){
$this->context['view']->days = $days_default;
}
//Sélection par saisons
if(!$count){
$listdates = $this->getSpectaclesDatesCommon();
$annees_saisons = $this->getListSeasonsYears($listdates,null,true);
$this->getCommonSearch(array(
'saisons_annees' => $annees_saisons,
'nb_days' => $days_default,
));
// if(!empty($annees_saisons)){
// $this->context['form']->addElement('select', 's', 'Saisons', array_merge(array('' => 'Choisissez une saison...'),$annees_saisons['saisons']), array('id' => 'saisons'));
// }
$this->getCommonSearchView();
}
if(!empty($this->view->saison)) {
$saison = $this->view->saison;
$annees_saison = explode('-', $saison);
if(count($annees_saison)==2) {
$datestart = Date_time::getSaisonDatestart((int)$annees_saison[0]);
$dateend = Date_time::getSaisonDateend((int)$annees_saison[1]);
}
// saison précédente / suivante
$this->view->saisons_nav = $this->getSaisonsNav($annees_saisons['saisons'],$saison);
}
//Construction de la requête du corps de page
$type = $this->view->type = $type_default;
if(!empty($this->context['params']['type'])){
$type = $this->view->type = $this->context['params']['type'];
}
// requete sql pour les ciblés les spectacles en lien avec les textes édités chez le contact
$where_idcontact = ' AND t.idcontact_publisher='.((int)$this->idcontact);
//Les premières paramètres de la requête pour getListSpectacles
$params_sql_affiche = array(
'params' => array(
'where' => $where_idcontact,
'limit' => 'all',
),
'special' => array(
'publish_valid' => 1, // uniquement les spectacles en ligne et validés
),
'dbg' => array('texts_affiche', 'Textes à l\'affiche')
);
if(!$count){
if(!empty($this->view->saison)) {
$params_sql_affiche['special']['saison'] = $this->view->saison;
}
//Si l'utilisateur sélectionne une région
if(!empty($this->context['params']['area'])){
$area = $this->view->area = $this->context['params']['area'];
$params_sql_affiche['special']['area'] = $area; // condition géographique
$params_sql_affiche['special']['carte_version'] = 'bigregions';
$params_sql_affiche['special']['get_schedule_ville'] = $area;
if(is_numeric($area)){
$this->context['view']->region_name = $this->em->getRepository(Bigregions::class)->getRegionName($area);
} else {
$this->context['view']->country_name = $this->spectacles->getNameCountry($area);
}
}
}
//Si on réclame les spectacles avec critiques
if($with_critiques){
$action_selected = 'spectacles_critiques';
$params_sql_affiche['special']['idclassification'] = 101;
$params_sql_affiche['params']['groupby'] = 's.idspectacle';
}
//Si on réclame les spectacles avec des fichiers multimedias (vidéos)
if($with_multimedias){
$action_selected = 'spectacles_multimedias';
$params_sql_affiche['special']['multimedias_videos_associes'] = true;
}
$filtre_sup = '';
if($with_audios){
$action_selected = 'spectacles_audios';
$params_sql_affiche['special']['podcasts'] = [
'type_podcast' => 'franceculture',
'publish' => 1
];
}
//On compte tous les spectacles
$params_sql_count = $params_sql_affiche;
if(!$count){
$params_sql_count['special']['prochains'] = $this->context['view']->days;
}
else{
$params_sql_count['special']['prochains'] = 365;
}
$spectacles_counts['prochains'] = $this->spectacles->countListSpectacles($params_sql_count);
//On remet à l'état initial le tableau params_sql_count
//compter tous les spectacles avec critiques
$params_sql_count = $params_sql_affiche;
$params_sql_count['special']['idclassification'] = 101;
$spectacles_counts['critiques'] = $this->spectacles->countListSpectacles($params_sql_count);
//On remet à l'état initial le tableau params_sql_count
//compter tous les spectacles à l'affiche
$params_sql_count = $params_sql_affiche;
$spectacles_counts['tous'] = $this->spectacles->countListSpectacles($params_sql_count);
//On assigne la variable à la vue
$this->view->spectacle_counts[$action_selected] = $spectacles_counts;
if(!$count){
//On finalise à mettre en place les paramètres pour getListSpectacles
if($type == 'prochains' && $spectacles_counts['prochains'] > 0){
$params_sql_affiche['special']['prochains'] = $this->context['view']->days;
}
else if($spectacles_counts['tous'] > 0){
$params_sql_affiche['anciens'] = 'all';
$params_sql_affiche['params']['order'] = ['creation_date', 'DESC'];
$type = 'tous';
}
else{
if(empty($params['stop_redirect'])){
return $this->redirect("/editions/".$this->context['view']->url_clean);
}
}
//Si on à choisi un nombre limite custom
if($limit){
$params_sql_affiche['params']['limit'] = array($this->getLimitStart(),$limit);
}
else{
//On place la limite des paginations aux paramètres de la requête
$params_sql_affiche['params']['limit'] = array($this->getLimitStart(),$this->perPage);
//On créer la pagination
if(!empty($spectacles_counts[$type])){
$this->context['view']->pagination = $this->getPagination($spectacles_counts[$type]);
}
else{
$this->context['view']->pagination = $this->getPagination($this->view->nb_multimedias);
}
$this->context['view']->pagination['spectacle'] = true;
}
//On récupère la liste des spectacles
$spectacles_affiche = $this->spectacles->getListSpectacles($params_sql_affiche,null,false,['allauthors' => true]);
$this->view->{'spectacles_'.$type} = true;
$this->view->spectacles = $spectacles_affiche;
}
return array();
}
// }}}
// {{{ getSQLBiographies()
/** Les requêtes nécessaires pour les biographies
*
* @return array
*
*/
public function getSQLBiographies($params = array()){
$persons = $this->em->getRepository(Persons::class);
$count = (!empty($params['count'])) ? true : false;
$type_default = (!empty($params['default'])) ? $params['default'] : 'auteurs';
$type_persons = array(
'auteurs' => array(
'standard' => 'auteurs',
'standard_singulier' => 'auteur',
'type_name' => 'authors',
'title_page' => 'Les auteurs de pièces de théâtre',
'locate' => array(0 => 'Auteurs'),
'infview' => 'aut',
'special' => array('author' => true),
),
'traducteurs' => array(
'standard' => 'traducteurs',
'standard_singulier' => 'traducteur',
'type_name' => 'translators',
'title_page' => 'Les traducteurs de textes de théâtre',
'locate' => array(0 => 'Traducteurs'),
'infview' => 'trad',
'special' => array('translator' => true),
),
);
$type_selected = $type_default;
if(isset($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $type_persons)){
$type_selected = $this->context['params']['type'];
}
$this->view->type = $type_selected;
$this->view->standard = $type_persons[$type_selected]['standard'];
$params_persons = array(
'params' => array(
'limit' => 'all',
),
'special' => array(
'publish' => 1,
),
'dbg' => array('persons','liste des personnes')
);
// conditions spécifique à la demande
$this->view->biographies_counts_total = 0;
// foreach($type_persons AS $key => $type){
// $params_persons['special'] = $type_persons[$key]['special'];
$params_persons['special']['contacts'] = array(
'publishers' => $this->idcontact
);
if(!$count){
$params_persons_request = $params_persons;
$params_persons_request_letter = $params_persons;
}
$params_persons['special']['count_only'] = true;
// $this->view->biographies_counts[$key] = $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
// $this->view->biographies_counts_total += $this->view->biographies_counts[$key];
$this->view->biographies_counts_total = $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
// }
//Si nous souhaitons éxecuter la page
if(!$count && $params_persons_request){
$params_persons_request_letter['special']['firstname_only'] = true;
// On prépare la requête firstname_only
$sql_firstname_only = $persons->getSQLPersons($params_persons_request_letter['params'], $params_persons_request_letter['special']);
$alphabet_results = $this->em->getRepository(Spectacles::class)->queryAll($sql_firstname_only);
// recherche alphabétique
$alpha = null;
if(isset($_GET['lettre']) && !empty($_GET['lettre']) && strlen($_GET['lettre'])==1) {
$alpha = strtoupper($_GET['lettre']);
}
// liste alpha
$alphabet = $this->func->getAlphaList($alpha);
foreach($alphabet_results as $L){
$l = strtolower($L['letter']);
if($l==$alpha) {
$alphabet_tab[$l]['active'] = 'active';
}
$alphabet_tab[$l] = $alphabet[$l];
$alphabet_tab[$l]['ok'] = true;
}
// si recherche alphabétique
if(!empty($alpha) && !is_null($alpha)){
$this->view->alpha = strtoupper($alpha);
$params_persons_request['special']['alpha'] = $alpha;
}
$params_persons_request['special']['count_only'] = true;
//Nous comptons le nombre total de résultat avec les filtres
$results_count = $persons->queryOne($persons->getSQLPersons($params_persons['params'], $params_persons['special']));
//On unset le count_only qui ne nous servira plus
unset($params_persons_request['special']['count_only']);
/* la pagination */
$this->perPage = 62;
$pagerOptions['url_custom'] = (!is_null($alpha)) ? '?lettre='.$alpha : '';
//On génère la pagination
$pagination = $this->getPagination($results_count,$this->perPage,$pagerOptions);
//On instaure une limite du jeu de donnée en lien avec la pagination
$params_persons_request['params']['limit'] = array($this->getLimitStart(),$this->perPage);
// générer les résultats
$results = $persons->getListPersons($params_persons_request);
return array(
'pagination' => $pagination,
'results' => $results,
'alphabet' => $alphabet_tab
);
}
return 0;
}
// }}}
// {{{ getSQLEvenements()
/** Les requêtes nécessaires pour les evenements
*
* @return array
*
*/
public function getSQLEvenements($params = array()){
$count = (!empty($params['count'])) ? true : false;
$type_default = (!empty($params['default'])) ? $params['default'] : 'prochains';
$news = $this->em->getRepository(News::class);
$type = $type_default;
if(!empty($this->context['params']['type'])){
$type = $this->context['params']['type'];
}
$news_params = array(
'params' => array(
'limit' => 'all',
),
'special' => array(
'publish_valid' => true,
'by_object' => array('idcontact' => (int)$this->idcontact),
// 'type_news' => 'news',
)
);
$this->view->evenements_counts['total'] = 0;
$news_params_boucle = $news_params;
foreach(['prochains', 'anciens'] AS $value){
$news_params_boucle = $news_params;
$news_params_boucle['special'][$value] = true;
$this->view->evenements_counts[$value] = $news->countNews($news_params_boucle);
$this->view->evenements_counts['total'] += $this->view->evenements_counts[$value];
}
if(!$count){
if(!empty($this->context['params']['area'])){
$this->context['view']->tri_region = true;
$news_params['special']['idbigregion'] = $this->context['params']['area'];
}
foreach(array('news','spectacles') as $t) {
$news_list = array();
$news_params['special']['type_news'] = $t;
foreach(array('prochains','anciens') as $d) {
$news_params['dbg'] = array('news_'.$d, 'Liste des news '.$d);
$news_params['special'][$d] = true;
if(!empty($exclude_news)) {
$news_params['params']['where'] = ' AND T1.idnew NOT IN ('.join(',', $exclude_news).') ';
}
$news_list[$d] = $news->getListNews($news_params);
if(!empty($news_list[$d])) {
// liste d'exclusion => pas de en cours dans les anciens
foreach($news_list[$d] as $k=>$v) {
$exclude_news[$k] = $v['idnew'];
}
$this->view->{'is_news_list_'.$t} = true;
}
unset($news_params['special'][$d]);
}
$this->view->{'news_list_'.$t} = $news_list;
}
}
}
// }}}
// {{{ countTelechargements()
/** compter les fichiers
*
* @return int
*
*/
public function countTelechargements()
{
return $this->em->getRepository(Files::class)->countObjectFiles(
$this->idcontact,'contacts',
$this->em->getRepository(Classifications::class)->getClassificationList('files','contacts',null,array(1),'get_value'),
array(
'valid' => 1,
'publish' => 1,
'force_mode' => 'file',
)
);
}
// }}}
// {{{ getContactAides()
/** Récupérer les laureats et nominations et les soutiens et les sélections
*
*
* @access public
* @return void
* @param $type_aide int
*/
public function getContactAides($type_aide, $params = array())
{
$show_url_text_by_author = false;
if(!empty($this->context['view']->current_page)){
$this->context['view']->{'page_'.$this->context['view']->current_page} = true;
}
// menu type
$this->context['view']->menu_types_object = array(
//'tous' => array('name' => 'Tous les lauréats'),
'text' => array('name' => 'Tous les textes'),
'spectacle' => array('name' => 'Tous les spectacles'),
'person' => array('name' => 'Tous les artistes'),
'contact' => array('name' => 'Toutes les structures')
);
$this->context['view']->filtres_aides_categories = array(
'spectacle' => 107, //résident de création
'text' => 106 //résident d'écriture
);
// chercher une aide précise
if(!empty($this->context['params']['idaide'])) {
$idaide = (int)$this->context['params']['idaide'];
}
if(!empty($this->context['params']['type']) && !empty($this->context['view']->menu_types_object[$this->context['params']['type']])) {
$type_object = $this->context['params']['type'];
} else {
$type_object = 'text';
}
foreach($this->context['view']->menu_types_object as $t=>$v) {
// récupèrer les prix associés au contact
$object_aide = $this->em->getRepository('TheatreCore\Entity\\'.ucfirst($t).'Aide');
if(!is_array($type_aide)) {
$type_aide = array($type_aide);
}
//playlists table
//idperson = 7051
//idtext = 24291
$params_sql_aide = array(
'special' => array(
'aides' => array(
'idcontacts' => $this->idcontact,
'type_aides' => $type_aide,
),
),
'dbg' => array($t.'_aide_count','Nombre de '.$t.' lauréats'),
);
// compter le nombre total de lauréats
$this->context['view']->menu_types_object[$t]['nb'] = $object_aide->{'countList'.ucfirst($t).'Aide'}($params_sql_aide);
if($this->context['view']->menu_types_object[$t]['nb']==0) {
unset($this->context['view']->menu_types_object[$t]);
} else {
$this->context['view']->menu_types_object[$t]['params_sql'] = $params_sql_aide;
$this->context['view']->menu_types_object[$t]['object_aide'] = $object_aide;
}
}
if(!empty($this->context['view']->menu_types_object)) {
// si type_object est vide, chercher un autre
if(!isset($this->context['view']->menu_types_object[$type_object])) {
foreach($this->context['view']->menu_types_object as $t=>$v) {
$type_object = $t;
break;
}
}
if(empty($this->context['params']['idaide'])){
$this->context['view']->menu_types_object[$type_object]['active'] = 'on';
}
$this->context['view']->params_filtre = $type_object;
if($type_object=='contact') {
$this->perPage = 50;
}
$aidecontacts = $this->em->getRepository(Aidecontacts::class);
$this->context['view']->aide_type_object = $type_object;
foreach($this->context['view']->menu_types_object as $t=>$v) {
// si on est dans le contexte
if($type_object==$t) {
// il faut retrouver les différents aidecontact
$params_sql_aidecontact = array(
'special' => array(
'object' => $t,
'aides' => array(
'idcontacts' => $this->idcontact,
'no_empty' => true,
'type_aides' => $type_aide,
),
),
'limit' => array(0,100),
'dbg' => array('list_aidecontacts_'.$t,'Liste des catégories d\'aide pour '.$t),
);
$this->context['view']->list_aidecontacts = $aidecontacts->getListAidecontacts($params_sql_aidecontact);
if(count($this->context['view']->list_aidecontacts)==1) {
foreach($this->context['view']->list_aidecontacts as $k=>$v) {
$this->context['view']->categorie_aidecontact = $v;
}
}
$object_aide = $this->context['view']->menu_types_object[$t]['object_aide'];
$params_sql_aide = $this->context['view']->menu_types_object[$t]['params_sql'];
// trouver les années où il y a eu des lauréats pour toutes les aides
$this->getCommonSearch(array(
'saisons_annees' => array(
'annees' => $object_aide->getYears($params_sql_aide),
)
)
);
$this->getCommonSearchView();
if(!empty($this->context['view']->year)) {
$params_sql_aide['special']['period']['year'] = $this->context['view']->year;
}
// cherche une aide précise
if(!empty($idaide)) {
$params_sql_aide['special']['aides']['idaide'] = $idaide;
// par courir les aides et marquer l'active
foreach($this->context['view']->list_aidecontacts as $k=>$v) {
foreach($v['aides'] as $kb=>$vb) {
if(empty($vb[''])){
$this->context['view']->list_aidecontacts[$k]['aides'][$kb]['mention_contacts'] = $aidecontacts->wikiTransform($vb['mention_contacts']);
}
if($vb['idaide']==$idaide) {
$this->context['view']->list_aidecontacts[$k]['aides'][$kb]['active'] = true;
$this->context['view']->list_aidecontacts[$k]['active'] = true;
}
}
}
}
$params_display = array();
// texte style
if($type_object == 'text') {
$params_display['vignette_format'] = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>$_ENV['VIGN_TEXT_DIRECT']);
//suppression de la condition qui n'est utile que pour la V1
$params_display['stylemore'] = array('imagep' => 'width:60px;', 'desctxt' => 'width:210px;');
$params_display['publisher_first_inverse'] = true;
$params_sql_aide['get_texts_with_aides'] = true;
}
// pour les contacts
if($type_object == 'contact') {
$params_sql_aide['get_contacts_with_aides'] = true;
}
// pour les spectacles
if($type_object == 'spectacle') {
$params_sql_aide['get_spectacles_with_aides'] = true;
}
$this->context['view']->{'nb_list_aides_'.$t} = $object_aide->{'countList'.ucfirst($t).'Aide'}($params_sql_aide);
if(!empty($params['limit'])){
$params_sql_aide['limit'] = array($params['limit'][0],$params['limit'][1]);
}
else{
$params_sql_aide['limit'] = array($this->getLimitStart(),$this->perPage);
}
$params_sql_aide['dbg'] = array($t.'_aide_list','Les '.$t.' lauréats');
$list = $object_aide->{'getList'.ucfirst($t).'Aide'}($params_sql_aide,$params_display);
$this->context['view']->noshow = false;
//on récupère les playlists pour la page 'texts par l'auteur'
if($type_object == 'text' && ($this->context['action'] == 'auteurs' || !empty($params['vignette_video'])) || ($this->context['action'] == 'nominations' && !$show_url_text_by_author)) {
$first_boucle = false;
foreach ($list AS $key => $val) {
foreach ($val['texts'] as $skey => $sval) {
$sql = 'SELECT p.idplaylist
FROM playlists p
LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
WHERE pc.idclassification = 144 AND p.idtext = '.$sval['idtext'].'
GROUP BY p.idtext';
if($type_object == 'text' && ($this->context['action'] == 'auteurs' || !empty($params['vignette_video']))) {
if(!$first_boucle){
$this->context['view']->{'nb_list_aides_'.$t} = 0;
$first_boucle = true;
}
if($x = $this->obj->queryOne($sql)){
$playlists = $this->em->getRepository(Playlists::class);
$playlist = $playlists->getInfosPlaylist(
$x,
array(
'all' => true,
'multimedias' => true,
'format_vignette' => array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169')
),
array('format_vignette' => true)
);
$video = (array_shift($playlist['multimedias']));
$list[$key]['texts'][$sval['idtext']]['vignette'] = $video['image_media'];
$list[$key]['texts'][$sval['idtext']]['thtv'] = true;
$list[$key]['texts'][$sval['idtext']]['thtv_permalink'] = $video['permalink'];
$list[$key]['texts'][$sval['idtext']]['url_clean_video'] = $playlist['url_clean'];
$this->context['view']->{'nb_list_aides_'.$t} ++;
} else {
unset($list[$key]['texts'][$skey]);
}
}
else{
$show_url_text_by_author = true;
$this->context['view']->tag_text_by_author = 1;
}
}
}
}
if(!empty($this->context['view']->list_aidecontacts)) {
$nb_aidecontacts = 0;
foreach($this->context['view']->list_aidecontacts as $k=>$v) {
if(empty($v['aides'])) {
$nb_aidecontacts = $nb_aidecontacts+count($v['aides']);
}
}
}
// si pas de sous-catégorie/aide, afficher la catégorie/aidecontact
if(empty($this->context['view']->list_aidecontacts) || $nb_aidecontacts==1) {
if(!empty($nb_aide) && $nb_aide==1) {
unset($this->context['view']->list_aidecontacts);
}
foreach($list as $k=>$v) {
$this->context['view']->aidecontact = $v['aide']['aidecontact'];
break;
}
}
// groupement par année
$list_by_year = array();
if(empty($params['no_year_array'])){
foreach($list as $k=>$v) {
if (!empty($v[$t . 's'])) {
$list_by_year[$v['year_start']][$v['idaide']]['description'] = $v['aide'];
foreach ($v[$t . 's'] as $kb => $vb) {
$list_by_year[$v['year_start']][$v['idaide']][$t . 's'][] = $vb;
}
}
}
// dans les années, groupement par type d'aide
$this->context['view']->{'list_aides_'.$t} = $list_by_year;
}
// aucun groupement par année, array simple, textes
else{
foreach($list AS $k => $value){
if(!empty($value['texts'])){
$idtext = key($value['texts']);
$list_texts[$idtext] = reset($value['texts']);
$list_texts[$idtext]['aides'] = $value['aide'];
}
}
$this->context['view']->{'list_aides_'.$t} = $list_texts;
}
$this->context['view']->pagination = $this->getPagination($this->context['view']->{'nb_list_aides_'.$t});
}
}
}
// ajouter masonery
//$this->context['view']->js_more[] = 'jquery.masonry.min.js';
}
// {{{ setLocate()
/** On set le fil d'ariane de la page
*
*
*
*/
public function setLocate($params, $multiples = true){
$title_onglet = $this->infos['fullname'];
if (!empty($this->extra_title))
{
$title_onglet = $this->extra_title.' - '.$this->infos['fullname'];
}
else if (!empty($this->current['title']))
{
$title_onglet = $this->current['title'];
}
if($multiples && is_array($params)){
$url_clean = $this->view->url_clean;
$this->locate['/editions/'.$url_clean] = $title_onglet;
foreach($params AS $k => $v){
$this->locate[$k] = $v;
}
}
else{
$this->locate[0] = $title_onglet;
}
}
// }}}
// {{{ getLocate()
/** On récupère le fil d'ariane de la page
*
* @return array
*
*/
public function getLocate(){
return $this->locate;
}
// }}}
}