<?php
namespace App\Controller;
use App\ClassTheatre\aside\asidesUrlPagination;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use App\Service\Abonnements\Abonnements;
use App\Service\Date_time;
use App\Service\Functions;
use App\Validator\Relations;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Entity\Persons;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Texts;
use TheatreCore\Entity\Typesstructures;
use TheatreCore\Form\Type\RelationsType;
class TextesController extends TheatreController
{
// l'objet texts
protected $texts;
// l'objet spectacles
protected $spectacles;
// par page
protected $perPage = 20;
// version de la carte
protected $carte_version = 'svg';
// {{{ _construct()
/** constructeur hérité
*
*/
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, TokenStorageInterface $tokenStorage, Functions $func, Abonnements $abonnements)
{
parent::__construct($translator, $tokenStorage);
$this->context['controller'] = $this->view->controller = 'textes';
$GLOBALS['rub_courante'] = 'textes';
$this->em = $em;
$this->func = $func;
$this->texts = $em->getRepository(Texts::class);
$this->spectacles = $em->getRepository(Spectacles::class);
$this->getCarteVersion();
$this->serviceAbonnements = $abonnements;
}
// }}}
// {{{ action_affiche()
/**
* @Route("/textes/{type}/affiche", name="textes_affiches")
* @Route("/textes/{type}/affiche/area/{p_area}", name="textes_affiches_area")
* @Route("/textes/{type}/affiche/type/{p_type}", name="textes_affiches_type")
* @Route("/textes/{type}/affiche/type/{p_type}/area/{p_area}", name="textes_affiches_type_area")
* @Route("/textes/{type}/affiche/area/{p_area}/type/{p_type}", name="textes_affiches_area_type")
* @Route("/textes/{type}/affiche/area//type/{p_type}", name="textes_affiches_area_type_empty")
*
* Textes contemporains à l'affiche
*
*/
public function action_affiche($p_type = null, $p_area = null)
{
$this->context['params']['area'] = $p_area;
$this->context['params']['type'] = $p_type;
$this->context['action'] = $this->view->action = 'affiche';
// les types de structure
$typesstructure_list = $this->em->getRepository(Typesstructures::class)->getTypeStructureList(true,true,array('SN','TN','CDN','SC'));
// type de structure recherchée
$typesstructure_list_simple['idtypestructure'] = null;
if(!empty($_REQUEST['idtypestructure']) && array_key_exists($_REQUEST['idtypestructure'], $typesstructure_list)) {
$this->context['view']->idtypestructure = filter_var($_REQUEST['idtypestructure'], FILTER_SANITIZE_STRING);
foreach(array('typestructure','typestructure_pluriel') as $s) {
$typesstructure_list_simple[$s] = strtolower($typesstructure_list[$this->context['view']->idtypestructure][$s]);
}
$typesstructure_list_simple['idtypestructure'] = $this->context['view']->idtypestructure;
$this->context['view']->typestructure = $typesstructure_list_simple;
}
$this->context['view']->menu_content_tri = array(
'contemporains/affiche' => array('name' => 'Tous les textes contemporains', 'label' => 'all'),
// 'editions/auteurs-spectacles' => array('name' => 'Les textes par l\'auteurs', 'label' => 'auteurs-spectacles'),
);
$this->context['view']->menu_content = array(
// 'all' => array('name' => 'Tous les textes (en attente)', 'label' => 'all'),
// 'affiche' => array('name' => 'Les textes édités (en attente)', 'label' => 'textes édités'),
// 'contemporains' => array('name' => 'Tous', 'label' => 'contemporains'),
'contemporains-edites' => array('name' => 'Édités', 'label' => 'contemporains-edites'),
'jeunesses' => array('name' => 'Jeunesse', 'label' => 'jeunesses'),
'francophones' => array('name' => 'Francophones', 'label' => 'francophones'),
'etrangers' => array('name' => 'En langue étrangère', 'label' => 'en langue étrangère'),
// 'public' => array('name' => 'Du domaine public (en attente)', 'label' => 'du domaine public'),
);
if(empty($this->context['params']['type']) || !array_key_exists($this->context['params']['type'], $this->context['view']->menu_content)) {
$this->context['view']->type = 'contemporains';
} else {
$this->context['view']->type = $this->context['params']['type'];
if($this->context['view']->type == "all"){
$this->context['view']->type_all_show = true;
}
$this->context['view']->type_title = $this->context['view']->menu_content[$this->context['view']->type]['label'];
}
$this->context['view']->menu_jours = array(
3 => array('name' => '3 prochains jours'),
7 => array('name' => '7 prochains jours'),
30 => array('name' => '30 prochains jours'),
365 => array('name' => '12 prochains mois'),
);
if(!empty($this->context['params']['area'])) {
$nb_days_default = 30;
} else {
$nb_days_default = 365;
}
$this->getCommonSearch(array(
'saisons_annees' => Date_time::getListSaisons(2000,(date('Y')+1)),
'nb_days' => $nb_days_default,
));
// formulaire de saisie recherche par titre
$this->context['formAsideSearch']->add('title', TextType::class, [
'label' => 'Mots du titre',
'attr' => [
'size' => '35',
'placeholder' =>'Rechercher un texte'
]
]);
$this->context['formAsideSearch']->add('search', SubmitType::class, [
'label' => 'OK',
'attr' => [
'class'=>'boutform'
]
]);
$this->getCommonSearchView();
// les spectacles à l'affiche avec des textes nonfictif
$params_sql = $this->setCommonSearchSpectacles(array(
'special' => array(
'textfictif' => 0,
'count_only_distinct' => 't.idtext',
// 'plus_proche' => true,
'text' => array(
'type' => array(0,1), // original et traduction uniquement
'person' => array(
'periode' => 'contemporain',
),
),
),
'params' => array(
// TODO pas les adaptations =>pour avoir le MEME nombre dans les deux cas
'where' => ' s.title IS NULL ',
'groupby' => ' t.idtext ',
),
'dbg' => array('list_spectacles_texts', 'Liste des spectacles avec textes non fictifs'),
));
if(!empty($this->context['view']->idtypestructure)){
$params_sql['special']['idtypestructure'] = $this->context['view']->idtypestructure;
}
// types
if($this->context['view']->type=='francophones') {
$params_sql['special']['text']['language'] = 'fr';
$params_sql['special']['text']['type'] = array(0);
}
if($this->context['view']->type=='contemporains-edites') {
$params_sql['special']['text']['is_published'] = true;
}
if($this->context['view']->type=='jeunesses') {
$params_sql['special']['text']['idgenretext'] = 9;
}
if($this->context['view']->type=='etrangers') {
$params_sql['special']['text']['language'] = array('NOT IN' => array('fr'));
}
if(!empty($params_sql['special']['area'])) {
$this->context['view']->area_active = true;
$this->spectacles->setZoneRecherche($this->getZoneRecherche($params_sql['special']['area'])); // définir la zone de recherche
}
$this->context['view']->nb_textes_total = $this->spectacles->countListSpectacles($params_sql);
$params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
$vignette = array('vignette_format' =>
array('height'=>$_ENV['VIGN_TEXT_HEIGHT'],'width'=>$_ENV['VIGN_TEXT_WIDTH'],'direction'=>'thumb')
);
$list_spectacles = $this->spectacles->getListSpectacles($params_sql);
//on supprime les peridoes des spectacles si on sélectionne une année
if($this->context['view']->year){
foreach($list_spectacles as $k => $v){
unset($v['periode']);
unset($v['prochdate']);
unset($v['city']);
$list_spectacles[$k] = $v;
}
}
$this->context['view']->texts = $this->texts->getTextsFromSpectacles($list_spectacles, array(), $vignette);
$urlpagination = new asidesUrlPagination(
'/textes/contemporains/affiche/type/key_type',
array(
'params' => array(
'key_type' => $this->context['view']->type
),
'day' => $this->context['view']->days,
'area' => (!empty($params_sql['special']['area'])) ? $params_sql['special']['area'] : null,
'datestart' => $this->context['view']->datestart,
'dateend' => $this->context['view']->dateend,
'annee' => $this->context['view']->year,
'structure' => $typesstructure_list_simple['idtypestructure']
),
$this->context
);
$pagination_url_custom = $urlpagination->url_pagination();
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_textes_total, 10, array('url_custom' => $pagination_url_custom));
// $this->context['view']->pagination = $this->getPagination($this->context['view']->nb_textes_total);
$this->context['view']->pagination['texte'] = true;
//On n'affiche pas les lieu dans ce block sur cette page
$this->context['view']->noshow_detail_periode = true;
$this->context['view']->text_title_center = true;
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlRegions',
'url' => '/key_url/',
'params' => array(
'activate' => $this->context['action']
)
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
$asides = new asides();
$asides->load(['recherche_texte.inc' => array(
'exec' => ['htmlstart' => true, 'color'=>'context'],
'action' => '/textes/contemporain/recherche',
'title' => 'Rechercher'
)]);
$asides->load(['url_lists,menu_content_tri' => array(
'exec' => array(
'alone' => false,
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_content_tri,
'url' => '/textes/key_action/generate_params',
'params' => array(
'key_action' => 'auto_key',
'activate' => ($this->context['view']->type == "contemporains") ? true : false
)
),
'title' => html_entity_decode('À l\'affiche')
)]);
$asides->load(['url_lists,affiche_a_venir' => array(
'exec' => array(
'alone' => false
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_content,
'url' => '/textes/contemporains/affiche/generate_params',
'params' => array(
'activate' => (isset($this->context['view']->type)) ? $this->context['view']->type : false,
'key_type' => 'auto_key',
'key_day' => $this->context['view']->days,
'key_area' => $p_area,
),
'structure' => array(
'type' => 'key_type',
'area' => 'key_area',
'structure_classic' => array(
'd' => 'key_day'
)
)
),
'title' => 'Trier'
)]);
$asides->load(['url_lists,textes_a_venir' => array(
'exec' => array(
'alone' => false
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_jours,
'url' => '/textes/contemporains/affiche/generate_params',
'params' => [
'key_area' => $p_area,
'key_type' => $p_type,
'key_day' => 'auto_key',
],
'structure' => [
'area' => 'key_area',
'type' => 'key_type',
'structure_classic' => array(
'd' => 'key_day'
)
]
),
'title' => 'Recherche par période'
)]);
$asides->load(['recherche_par_periode' => array(
'exec' => array(
'alone' => false
),
'php' => array(
'method' => 'asidesUrlListsForms',
'action' => '/textes/contemporains/affiche/generate_params',
'params' => array(
'activate' => $this->context['view']->days,
),
'structure' => array(
'area' => 'v_area',
'structure_classic' => array(
'type' => 'v_type',
'idtypestructure' => 'v_idtypestructure'
)
)
),
)]);
$asides->load(['par_annee' => array(
'exec' => array(
'alone' => false
),
'php' => array(
'method' => 'asidesUrlListsForms',
'action' => '/textes/contemporains/affiche/generate_params',
'params' => array(
'activate' => $this->context['view']->days,
),
'structure' => array(
'area' => 'v_area',
'structure_classic' => array(
'type' => 'v_type',
'idtypestructure' => 'v_idtypestructure'
)
)
),
)]);
$asides->load(['url_lists,tn_cdn_sn' => array(
'exec' => ['htmlend' => true],
'php' => [
'method' => 'tn_cdn_sn',
'url' => '/textes/contemporain/affiche/generate_params',
'params' => array(
'activate' => (isset($this->context['view']->idtypestructure) && !empty($this->context['view']->idtypestructure)) ? $this->context['view']->idtypestructure : 'ALL',
'get_area' => $p_area,
'key_type' => $p_type,
'key_day' => $this->context['view']->days
),
'structure' => array(
'area' => 'get_area',
'type' => 'key_type',
'structure_classic' => array(
'd' > 'key_day',
'idtypestructure' => 'key_structure'
)
)
],
'title' => 'Recherche par label'
)]);
$asides->load(['common_carte' => array(
'exec' => ['alone' => true],
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/textes/contemporain/affiche/generate_params',
'params' => array(
'get_id' => 'get_id',
'key_type' => $p_type,
'key_day' => $this->context['view']->days
),
'structure' => array(
'area' => 'get_id',
'type' => 'key_type',
'structure_classic' => array(
'd' => 'key_day'
)
)
)
)]);
//Chargement de la pub par région
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addWithRegion($asides, ['region' => $p_area]); //$this->area
asides::loadaside('Publicite')->addWithNational($asides); //$this->area
$asides->load(['common_participer' => array(
'php' => array(
'method' => 'asidesUrlLists_Ajoutez'
)
)]);
$this->context['view']->aside = $asides->view($this->context['view']);
return $this->view('textes/affiche.html.twig');
}
// }}}
// {{{ action_parution()
/** Vient de paraître
*
* @Route("/textes/edition/parution/", name="textes_edition_parution")
* @Route("/textes/editions/parution/", name="textes_editions_parution")
* @Route("/textes/editions/parution/genre/{genre}", name="textes_editions_parution_genre")
* @Route("/textes/editions/parution/mois/{mois}/genre/{genre}", name="textes_editions_parution_mois_genre")
*
*/
public function action_parution($mois = null, $genre = null)
{
$this->context['params']['genre'] = $genre;
$this->context['params']['mois'] = $mois;
$this->context['view']->menu_mois = array(
0 => array('name' => 'du mois en cours'),
3 => array('name' => 'des 3 derniers mois'),
6 => array('name' => 'des 6 derniers mois'),
);
// les genres
$genres[] = array(
'name' => 'Tous',
'code' => 'tous',
);
if($this->isGranted('IS_AUTHENTICATED_REMEMBERED') && $this->context['session']->getIdExtranetuser()) {
$genres += $this->texts->getGenretextList(null,array(0,1),true);
} else {
$genres += $this->texts->getGenretextList(null,array(1),true);
$genres[] = array(
'name' => 'Autre',
'code' => 'autre',
);
}
$this->context['view']->menu_genretexts = $genres;
// si pas de genre précisé, on prend tous
if(isset($this->context['params']['genre']) && $this->context['params']['genre']!='tous') {
foreach($genres as $k=>$v) {
if($this->context['params']['genre']==$v['code']) {
$idgenretext = array($k);
$this->context['view']->menu_genretexts[$k]['active'] = 'on';
$this->context['view']->genre = $v;
}
}
} else {
$this->context['view']->menu_genretexts[0]['active'] = 'on';
$this->context['params']['genre'] = 'tous';
}
$this->getCommonSearch(array(
'saisons_annees' => Date_time::getListSaisons(2000,(date('Y')+1)),
));
$this->getCommonSearchView();
// rechercher les textes
$params_sql_texts = array(
'params' => array(
'limit' => 'all',
'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
'classement' => 'DESC',
),
'special' => array(
'avec_couverture' => true,
),
'dbg' => array('texts_parution','Vient de paraître'),
);
if(!empty($this->context['view']->year)) { // recherche par année
$params_sql_texts['special']['year'] = $this->context['view']->year;
} elseif(!empty($this->context['view']->datestart) && !empty($this->context['view']->dateend)) { // par période
$params_sql_texts['special']['periode'] = array(
'datestart' => substr($this->context['view']->datestart, 0, -2).'00',
'dateend' => substr($this->context['view']->dateend, 0, -2).'00',
);
} else { // prochains jours
// si pas de jour précisé, on prend un mois
if(!isset($this->context['params']['mois']) || empty($this->context['view']->menu_mois[$this->context['params']['mois']])) {
$this->context['params']['mois'] = 3;
}
$this->context['view']->menu_mois[$this->context['params']['mois']]['active'] = 'on';
$this->context['view']->mois = $this->context['view']->menu_mois[$this->context['params']['mois']]['name'];
$params_sql_texts['special']['periode'] = Date_time::getPeriod(array('months_ago' => $this->context['params']['mois']),'Y-m-00');
}
if(!empty($idgenretext)) {
// dans le cas du genre autre
if($this->context['params']['genre']==='autre') {
$exclude_genre = array('theatre','theatre_jeune_public');
$idgenretext = array();
foreach($this->texts->getGenretextList(null,array(0,1),true) as $k=>$v) {
if(!in_array($v['code'], $exclude_genre)) {
$idgenretext[$k] = $k;
}
}
}
$params_sql_texts['special']['genretext'] = $idgenretext;
}
$this->context['view']->nb_texts_total = $this->texts->countListTexts($params_sql_texts);
$params_sql_texts['params']['limit'] = array($this->getLimitStart(),$this->perPage);
$list_texts = $this->texts->getListTexts($params_sql_texts, array(
'stylemore' => array('imagep' => 'width:75px;', 'desctxt' => 'width:190px;'),
'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->context['view']->texts = $list_texts;
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_texts_total);
// situation et titre meta
$this->view->locate = array(
'/editions/' => 'Textes',
0 => 'Vient de paraître',
);
$this->context['view']->js_more[] = 'jquery.masonry.min.js';
// jajascript
$this->context['view']->jquery_flash = true;
$this->context['view']->js_more[] = 'jquery.masonry.min.js';
$this->context['view']->jquery_cal = 'datepicker';
$this->context['view']->use_addthis = true;
$asides = new asides();
$asides->load(['recherche_par_genre' => array(
'exec' => array(
'htmlstart' => true),
'title' => html_entity_decode('À l\'affiche'),
'subtitle' => html_entity_decode('Par genre')
)]);
$asides->load(['url_lists,textes_a_venir' => array(
'exec' => array(
'alone' => false
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_mois,
'url' => '/textes/editions/parution/mois/key_month/genre/key_genre',
'params' => array(
'key_month' => 'auto_key',
'key_genre' => $this->context['params']['genre']
)
),
'title' => html_entity_decode('Parutions')
)]);
$asides->load(['par_annee' => array(
'exec' => array(
'alone' => false
)
)]);
$asides->load(['recherche_par_periode' => array(
'exec' => array(
'htmlend' => true
),
'action' => '/textes/editions/parution/genre/'.$this->context['params']['genre'],
)]);
$this->context['view']->aside = $asides->view($this->view);
return $this->view('textes/parution.html.twig');
}
// }}}
// {{{ action_auteurs()
/** Textes par l'auteur
*
* @Route("/textes/edition/auteurs", name="textes_auteurs")
*
*/
public function action_auteurs()
{
$this->view->action = $this->context['action'] = 'auteurs';
$this->getCommonAuteurs();
$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'),
);
if(!empty($_GET['auteur'])) {
$url_clean_person = filter_var($_GET['auteur'], FILTER_SANITIZE_STRING);
$idperson = $persons->getIdByUrl($url_clean_person);
if(!empty($idperson)) {
$this->context['view']->person = $persons->getInfosPerson($idperson);
$params_sql_persons['special']['persons']['idperson'] = $idperson;
}
}
$this->context['view']->nb_persons_total = $playlists->countListPlaylists($params_sql_persons);
// $params_sql_persons['limit'] = array($this->getLimitStart(),$this->perPage);
$params_sql_persons['limit'] = array($this->getLimitStart(), 1000);
$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'));
if(strpos($thumbnail, 'normal-def')===false) {
$authors[$author['idperson']]['photo'] = $thumbnail;
}
}
}
foreach($playlist['idtext'] as $idtext=>$text) {
$authors[$author['idperson']]['texts'][$idtext] = $text;
$authors[$author['idperson']]['texts'][$idtext]['url_clean_playlist'] = $playlist['urlClean'];
}
if (isset($authors[$author['idperson']]['texts'])) {
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);
$this->context['view']->is_auteurs_spectacles = true;
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlListMenuVideos',
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
$nav_texte_parauteurs = array(
array(
'name' => 'Les textes à l\'affiche',
'key_action' => 'auteurs-spectacles'
),
array(
'name' => 'Tous les textes par leurs auteurs',
'key_action' => 'auteurs'
),
);
$asides = new asides();
$asides->load(['url_lists' => array(
'exec' => array(
'htmlstart' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $nav_texte_parauteurs,
'url' => '/textes/edition/key_action',
'params' => array(
'activate' => 'auteurs'
)
),
'title' => 'Voir'
)]);
$asides->load(['textes_select_auteurs' => array(
'exec' => array(
'htmlend' => true
),
'title' => 'Sélectionnez un auteur'
)]);
$asides->load('textes_auteurs_infosplus');
$this->context['view']->aside = $asides->view($this->context['view']);
return $this->view('textes/auteurs.html.twig');
}
// }}}
// {{{ action_auteurs_spectacles()
/**
* Textes par l'auteur à l'affiche
*
* @Route("/textes/{p_obsolete_value}/auteurs-spectacles", name="textes_auteurs_spectacles")
* @Route("/textes/{p_obsolete_value}/auteurs-spectacles/area/{p_area}", name="textes_auteurs_spectacles_area")
* @Route("/textes/{p_obsolete_value}/auteurs-spectacles/periode/{params_periode}", name="textes_auteurs_spectacles_periode")
*
*/
public function action_auteurs_spectacles($p_obsolete_value = null, $p_area = null, $params_periode = null)
{
$this->context['params']['periode'] = $params_periode;
$this->context['params']['area'] = $p_area;
$this->view->action = $this->context['action'] = 'auteurs-spectacles';
$this->getTextByAuteurs([
'idclassifications' => [
144, //par l'auteur
178 //par le traducteur
]
]);
$this->context['view']->is_auteurs_spectacles = true;
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlListMenuVideos',
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
if(isset($this->context['view']->area)){
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlRegions',
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
}
$asides = new asides();
$asides->load(['url_lists' => array(
'exec' => array(
'htmlstart' => true,
'color' => 'videos'
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_content,
'url' => '/textes/edition/key_action/generate_params',
'params' => array(
'activate' => 'auteurs-spectacles',
'key_action' => 'auto_key',
'key_day' => $this->context['view']->days
),
'structure' => array(
'area' => (!empty($this->context['view']->area)) ? $this->context['view']->area : '',
'structure_classic' => array(
'day' => 'key_day'
)
)
),
'title' => 'Voir'
)]);
$asides->load(['url_lists,navigation_textes_avenir' => array(
'exec' => array(
'htmlend' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_jours,
'url' => '/textes/edition/auteurs-spectacles/generate_params',
'params' => array(
'activate' => $this->context['view']->days,
),
'structure' => array(
'area' => (!empty($this->context['view']->area)) ? $this->context['view']->area : '',
'structure_classic' => array(
'd' => 'key_day'
)
)
),
'subtitle' => 'Recherche par période',
)]);
// $asides->load(['recherche_par_periode' => array(
// 'exec' => array(
// 'alone' => false
// ),
// 'action' => '/textes/edition/auteurs-spectacles/periode/'
// )]);
//
// $asides->load(['par_saison' => array(
// 'exec' => array(
// 'htmlend' => true
// ),
// 'action' => '/textes/edition/auteurs-spectacles/area/{v_area}?',
// )]);
$asides->load(['common_carte' => array(
'exec' => ['color' => 'videos'],
'url' => '/textes/edition/auteurs-spectacles/area/get_id?d=365'
)]);
$menu = array(
array(
'name' => 'Mes videos favorites',
'key_sub' => 'videos',
),
array(
'name' => 'Mes videos modifiables',
'key_sub' => 'mesvideos',
),
);
$asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'index'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu,
'url' => '/montheatre/key_sub'
],
'title' => 'Mon théâtre'
)]);
$this->context['view']->aside = $asides->view($this->context['view']);
//On affiche la publicité google
$asides_publicite = new asides();
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addGoogle($asides_publicite, $this->serviceAbonnements);
$this->context['view']->asides_publicite = $asides_publicite->view($this->context['view']);
// situation et titre meta
$this->view->locate = array(
'/editions/' => 'Textes',
0 => 'Le texte par leurs auteurs - À l\'affiche',
);
$this->view->title_page = 'Le texte par leurs auteurs - À l\'affiche';
return $this->view('textes/auteurs-spectacles.html.twig');
}
// }}}
// {{{ action_recherche()
/** Textes recherche
*
* @Route("/textes/contemporain/recherche", name="textes_contemporain_recherche")
*
*/
public function action_recherche(Request $request)
{
$this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder('', FormType::class);
// formulaire de saisie recherche par titre
$this->context['formAsideSearch']->add('title', TextType::class, [
'label' => 'Mots du titre',
'attr' => [
'size' => '35',
'placeholder' =>'Rechercher un texte'
]
]);
$this->context['formAsideSearch']->add('search', SubmitType::class, [
'label' => 'OK',
'attr' => [
'class'=>'boutform'
]
]);
$this->getCommonSearchView($request);
if($this->context['formAsideSearch']->isSubmitted() || isset($_GET['start'])) {
$title = $this->context['formAsideSearch']->get('title')->getData();
if(empty($title) && isset($_GET['title'])) {
$title = $_GET['title'];
}
// objet texts
$texts = $this->em->getRepository(Texts::class);
$sql_count = 'SELECT COUNT(DISTINCT(t.idtext)';
$sql_normal = 'SELECT st.idtext, t.textorder, t.title, t.url_clean, t.type, c.url_clean as url_clean_publisher, c.organisation ';
$sql = null;
if(!empty($title)) {
//$title = trim(htmlspecialchars($title, ENT_COMPAT));
$sql_normal .= ', MATCH(st.title) AGAINST (\''.$texts->escape($title).'\') AS cpt';
$sql_count .= ', MATCH(st.title) AGAINST (\''.$texts->escape($title).'\')';
}
$sql_count .= ') as total ';
// from
$sql .= ' FROM searchs_texts st, texts t
LEFT JOIN contacts c ON c.idcontact=t.idcontact_publisher';
// conditions
$sql .= ' WHERE t.idtext=st.idtext AND t.textfictif=0';
if (!empty($title)) {
// on match directement
$sql .= ' AND (MATCH(st.title) AGAINST (\''.$texts->escape($title).'\' IN BOOLEAN MODE))';
}
$this->view->title = $title;
// nb resultat par page
$pagerOptions['perPage'] = 20;
// nombre d'enregistrement
$totalItems = $texts->queryOne($sql_count.$sql);
//echo $sql_count.$sql;
if(!empty($totalItems) && $totalItems>0) {
//La pagination
$urlpagination = new asidesUrlPagination(
'',
array(
'title' => $title
),
$this->context
);
$pagination_url_custom = $urlpagination->url_pagination();
$this->context['view']->pagination = $this->getPagination($totalItems, 10, array('url_custom' => $pagination_url_custom));
$this->context['view']->pagination['totalItems'] = $totalItems;
$this->context['view']->pagination['textes'] = true;
// ajout des criteres de tri apres avoir fait le count
if(isset($tri)) {
$sql .= $tri;
}
//limite
$limit = $texts->dbLimit($this->perPage, $this->getLimitStart());
// executer la requete et mettre en forme chaque reponse
$texts->query($sql_normal.$sql.$limit);
$format = $format_flou = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
$format_flou['blur'] = true;
while($data = $texts->fetch()) {
$texts->loadResult($texts);
$idtext = $texts->idtext;
$liste_texts[$idtext] = $texts->getInfosTextRow();
$liste_texts[$idtext]['publisher_first'] = true;
$liste_texts[$idtext]['vignette'] = $texts->getVignetteText($idtext,$format);
$liste_texts[$idtext]['vignette_flou'] = $texts->getVignetteText($idtext,$format_flou);
}
if(!empty($liste_texts)){
$this->view->liste_texts = $liste_texts;
}
}
}
$asides = new asides();
$asides->load(['recherche_texte.inc' => array(
'exec' => ['htmlstart' => true, 'htmlend' => true, 'color'=>'context'],
'action' => '/textes/contemporain/recherche',
'title' => 'Recherche'
)]);
$asides->load(['common_carte' => array(
'exec' => ['alone' => true],
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/textes/contemporain/affiche/generate_params',
'params' => array(
'get_id' => 'get_id',
),
'structure' => array(
'area' => 'get_id'
)
)
)]);
$this->context['view']->aside = $asides->view();
// Fil d'ariane
$this->view->locate = [
'/editions' => 'Textes',
0 => 'Rechercher des textes'
];
return $this->view('textes/recherche.html.twig');
}
// }}}
// {{{ action_ajout_aides()
/** Ajout aides
*
* @Route("/textes/aides/ajout-aides/type/{p_type}", name="textes_aides_ajout_aide")
*
*/
public function action_ajout_aides($p_type = null, Request $request)
{
$this->context['params']['type'] = $p_type;
$params = [
'selections' => [
'url' => 'selections-etape',
'label' => 'une sélection'
],
'soutiens' => [
'url' => 'aides-etape',
'label' => 'un soutien'
]
];
$type = null;
if(!empty($this->context['params']['type'])){
$type = $this->context['params']['type'];
}
if(!array_key_exists($type, $params)){
return $this->redirectToRoute('index');
}
$this->context['view']->params_url = $type;
$this->context['view']->params_label = $params[$type]['label'];
$formFactory = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
$formFactory->add('idtext',RelationsType::class, [
'label' => 'Choisissez une structure',
'relat'=>'simple',
'type_object' => 'form',
'type_dbdo'=>'texts',
'type' => 'idtext',
'constraints' => [
new Relations(['message' => 'Texte : veuillez choisir un texte'])
]
]);
$formFactory->add('validation', SubmitType::class, [
'label' => 'Continuer',
'attr' => [
'class'=>'boutform boutbig'
]
]);
$form = $formFactory->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
// filtrer
// $this->context['form']->applyFilter('__ALL__', 'strip_and_trim');
// id de contact ?
$idtext = $form->get('idtext')->getViewData();
if(!empty($idtext)) {
$infos_text= $this->em->getRepository(Texts::class)->getInfosText($idtext);
// direction le contact
if(!empty($infos_text['url_clean'])) {
return $this->redirect('/textes/'.$infos_text['url_clean'].'/'.$params[$type]['url']);
} else {
$this->context['error']['contact_inconnu'] = 'Impossible de trouver le texte';
}
} else {
$this->context['error']['contact_inconnu'] = 'Impossible de trouver le texte';
}
}
$asides = new asides();
$asides->load('common_participer_contacts');
$this->context['view']->aside = $asides->view();
$this->view->js_more = array(
'ajax.relation.js',
);
return $this->view('textes/ajout-aides.html.twig', [
'form' => $form->createView()
]);
}
// }}}
// {{{ action_xml_affiche()
/** Cartes de France
*
*/
public function action_xml_affiche()
{
// regions
$regions = $this->em->getRepository('TheatreCore\Entity\\'.ucfirst($this->getCarteVersion()));
$regions_list = ($regions->getArea(false,false,false));
// affiche la région en surbrillance
if(!empty($this->context['params']['area']) &&
($this->func->my_is_int($this->context['params']['area']) || strlen($this->context['params']['area'])==2)) {
$this->context['view']->area_view = 'area/'.$this->context['params']['area'].'/';
$this->context['view']->area = $this->context['params']['area'];
} else {
$this->context['view']->area_view = '';
$this->context['view']->area = null;
}
if(!empty($this->context['params']['type'])) {
$this->context['view']->page = 'affiche/type/'.$this->context['params']['type'];
} else {
$this->context['view']->page = 'affiche';
}
foreach(array('s','y','datestart','dateend','d') as $f) {
if(!empty($_GET[$f])) {
$this->context['view']->$f = $_GET[$f];
}
}
// classement en fonction du xml
foreach($regions->getXmlClassement() as $k=>$v) {
$regions_final[$k] = array(
'id' => $v,
'name' => $regions_list[$v],
);
if(!empty($this->context['view']->area) && $v==$this->context['view']->area) {
$regions_final[$k]['selected'] = 1;
} else {
$regions_final[$k]['selected'] = 0;
}
}
foreach(array('BE','CH','LU') as $k=>$v) {
if(!empty($this->context['view']->area) && $v==$this->context['view']->area) {
$this->context['view']->{'selected_'.$v} = 1;
} else {
$this->context['view']->{'selected_'.$v} = 0;
}
}
$this->context['view']->regions = $regions_final;
}
// }}}
// {{{ action_xml_auteurs_spectacles()
/** Cartes de France pour auteurs-spectacles
*
*/
public function action_xml_auteurs_spectacles() { $this->getCommonXmlCarte('auteurs-spectacles'); }
// }}}
// {{{ getCommonAuteurs()
/** menu générique pour texte par l'auteur
*
*/
public function getCommonAuteurs()
{
if(isset($this->context['params']['area']) && $this->context['action'] == 'auteurs-spectacles'){
$this->context['view']->menu_content = array(
'spectacles-region-videos' => array(
'name' => 'Spectacles avec vidéos',
'label' => 'Spectacle avec vidéos',
'url' => '/spectacles/theatre/region-videos/generate_params'
),
'auteurs-spectacles' => array(
'name' => 'Les textes par leurs auteurs',
'label' => 'Les textes par leurs auteurs'
),
);
}
else{
$this->context['view']->menu_content = array(
'auteurs' => array('name' => 'Tous les textes', 'label' => 'tous'),
'auteurs-spectacles' => array('name' => 'À l\'affiche', 'label' => 'à l\'affiche'),
);
}
$this->context['view']->menu_content[$this->context['action']]['active'] = 'on';
}
// }}}
// {{{ getTextByAuteurs()
/** menu générique pour texte par l'auteur
*
*/
public function getTextByAuteurs($params = array())
{
$default_days = 365;
$this->context['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),
);
$limit_query = array($this->getLimitStart(),$this->perPage);
if(!empty($params['limit_query'])){
$limit_query = $params['limit_query'];
}
$spectacles = $this->em->getRepository(Spectacles::class);
$idclassifications = array(144);
if(!empty($params['idclassifications'])){
$idclassifications = $params['idclassifications'];
}
$this->context['view']->menu_periodes = array(
'all' => array(
'name' => 'Tous à l\'affiche',
),
'affiche' => array(
'name' => 'À venir',
'is_simple' => true,
)
);
// tous les spectacles ou ceux à l'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'];
} else {
$this->context['view']->periode_spectacle = 'affiche';
}
$this->context['view']->{'periode_'.$this->context['view']->periode_spectacle} = true;
$this->context['view']->zone_carte = true;
$this->getCommonSearch(array(
'saisons_annees' => $this->getListSeasonsYears($this->em->getRepository(Playlists::class)->getSpectaclesAnneesSaisons($idclassifications)),
'nb_days' => $default_days,
));
$this->getCommonAuteurs();
// les spectacles à l'affiche avec des textes nonfictif
//$params_sql = $this->setCommonSearchSpectacles(array(
$params_sql_spectacles = $this->setCommonSearchSpectacles(array(
'params' => array(
'limit' => 'all',
),
'special' => array(
'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'),
));
if($this->context['view']->periode_spectacle=='affiche') {
unset($params_sql_spectacles['special']['saison']);
$params_sql_spectacles['special']['prochains'] = $this->context['view']->days;
unset($params_sql_spectacles['special']['plus_proche']);
}
//on recherche les dates dans la zone de la région
if(!empty($this->context['params']['area'])){
$params_sql_spectacles['special']['get_schedule_ville'] = $this->context['params']['area'];
}
$this->context['view']->nb_spectacles_total = $this->spectacles->countListSpectacles($params_sql_spectacles);
$list_spectacles = $spectacles->getListSpectacles($params_sql_spectacles);
//$this->context['view']->spectacles = $list_spectacles;
$params_list_texts['limit'] = $limit_query;
$this->context['view']->texts = $this->texts->getTextsFromSpectacles($list_spectacles, $params_list_texts);
// 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', 'class_texte_par_traducteur']) > 0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('texts', $v['idtext'], ['class_texte_parauteur', 'class_texte_par_traducteur']);
$this->context['view']->texts[$k]['url_clean_more'] = 'playlist/id/' . $playlist['urlClean'];
$playlists = $this->em->getRepository(Playlists::class);
$sql = 'SELECT DISTINCT p.idplaylist
FROM playlists p
LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
WHERE pc.idclassification IN ('.implode(',', $idclassifications).') AND p.idtext = '.$v['idtext'].'
GROUP BY p.idtext';
$x = $playlists->queryOne($sql);
$pl = $playlists->getInfosPlaylist(
$x,
array(
'all' => true,
'multimedias' => true,
'format_vignette' => array('width'=>325,'height'=>162,'fleche'=>'none', 'ratio' => '169') //'direction'=>'crop'
),
array('format_vignette' => true)
);
$video = (array_shift($pl['multimedias']));
$this->context['view']->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'];
$this->context['view']->texts[$k]['playlist']['idperson'] = $playlist['idperson'];
}
}
}
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_spectacles_total);
$this->context['view']->pagination['texte'] = true;
}
// }}}
}