<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Entity\Aides;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\TextAide;
use TheatreCore\Entity\Texts;
class SelectionsController extends TheatreController
{
// l'objet spectacle
protected $spectacles;
// l'objet texts
protected $texts;
// l'objet aides
protected $aides;
// résultat par page
protected $perPage = 50;
// asides
protected $asides = '';
//asides top
protected $asides_top = '';
// {{{ _construct()
/** constructeur hérité
*
*/
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, TokenStorageInterface $tokenStorage)
{
// load new aside
$this->asides = new asides();
$GLOBALS['rub_courante'] = 'textes';
$this->em = $em;
// hérite du constructeur parent
parent::__construct($translator, $tokenStorage);
$this->asides = new asides();
$this->asides_top = new asides();
$this->texts = $this->em->getRepository(Texts::class);
$this->spectacles = $this->em->getRepository(Spectacles::class);
$this->aides = $this->em->getRepository(Aides::class);
$this->context['view']->main_custom_style = 'prix';
$this->context['view']->bandeauSelections = array(
'vignette' => 'icones/bandeau-aides-decouvertes-texts.png',
'description' => 'Theatre-contemporain vous aides à découvrir des textes'
);
}
// }}}
// {{{ finalizeAction()
/** Code exécuté après chaque action
*
*
* @access protected
* @return void
*/
protected function finalizeAction()
{
// aside
$this->view->aside = $this->asides->view($this->view);
//aside top
$this->asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlSelections'
)
)]);
$this->view->aside_top = $this->asides_top->view($this->view);
}
// }}}
// {{{ action_tous()
/** Code exécuté après chaque action
*
*
* @access protected
* @return void
*/
public function action_tous()
{
$this->getSelections(array(4),'Selection','selections');
$this->context['view']->show_prix = true;
$this->context['view']->custom_text_aide_url = '/selections';
//asides
$this->asides->load(['par_annee_alone' => array(
'php' => array(
'method' => 'asidesUrlListsForms',
'url' => '/selections/' .$this->context['action'],
),
)]);
$this->asides->load('prix_reference');
$this->asides->load('laureat_signaler');
}
// }}}
// {{{ action_comites_lectures()
/** Action de tous les comités de lecture
*
* @Route("/selections/comites-lectures", name="selections_lectures")
* @Route("/selections/comites-lectures/genre/{p_genre}", name="selections_lectures_genre")
*
* @access protected
* @return void
*/
public function action_comites_lectures($p_genre = null)
{
$this->context['params']['genre'] = $p_genre;
$this->view->action = $this->context['action'] = 'comites-lectures';
$menu_tri = [
1 => array(
'name' => 'littérature dramatique',
'value' => 1
),
9 => array(
'name' => 'littérature dramatique jeunesse',
'value' => 9
),
'edites' => array(
'name' => 'textes édités',
'value' => 'edites'
)
];
$params = array();
if(!empty($this->context['params']['genre']) && array_key_exists($this->context['params']['genre'], $menu_tri)){
if(is_numeric($this->context['params']['genre'])){
$genre_selected = $params['idtypetext'] = (int)$this->context['params']['genre'];
}
else if($this->context['params']['genre'] == 'edites'){
$genre_selected = $params['isbn_not_empty'] = 'edites';
}
}
// comités de lecture : 102
$this->getSelections(null,'Selection','selections', 102, $params);
$this->context['view']->show_prix = true;
$this->context['view']->custom_text_aide_url = '/selections';
//asides
$this->asides->load(['url_lists,all' => array(
'exec' => ['htmlstart' => true],
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/selections/comites-lectures',
'urls' => array(
['name' => 'tous les textes']
),
'params' => [
'activate' => (isset($genre_selected)) ? 0 : true
]
),
'title' => 'Rechercher',
'subtitle' => 'Voir'
)]);
$this->asides->load(['url_lists,tri' => array(
'exec' => ['htmlend' => true],
'php' => array(
'urls' => $menu_tri,
'url' => '/selections/comites-lectures/genre/value',
'method' => 'asidesUrlLists',
'params' => array(
'activate' => (isset($genre_selected)) ? $genre_selected : 0
)
),
'subtitle' => 'Trier'
)]);
$this->asides->load(['par_annee_alone' => array(
'php' => array(
'method' => 'asidesUrlListsForms',
'url' => '/selections/' .$this->context['action'],
),
)]);
$this->asides->load(['prix_reference' => array(
'custom_title' => 'Les comités de lecture',
'disable_subtitle' => true
)]);
$this->asides->load('figurer_informations_aides_textes');
return $this->view('selections/comites-lectures.html.twig');
}
// }}}
// {{{ action_comites_lectures_reperes()
/** Tri par nombres de soutiens/aides/laureats
*
* @Route("/selections/comites-lectures-reperes", name="selections_lectures_reperes")
* @Route("/selections/comites-lectures-reperes/top/{p_top}", name="selections_lectures_reperes_top")
*
* @access protected
* @return void
*/
public function action_comites_lectures_reperes($p_top = null)
{
$this->context['params']['top'] = $p_top;
$this->view->action = $this->context['action'] = 'comites-lectures-reperes';
// récupèrer les prix associés au contact
$object_aide = $this->em->getRepository(TextAide::class);
$list_aides_possibles = $object_aide->getIndiceNombresAides(['idaidecontact' => 102]);
$menu = array(
'comites-lectures-reperes' => array(
'name' => 'Textes les plus repérés',
'key' => 'comites-lectures-reperes'
)
);
$list_top = array();
foreach($list_aides_possibles AS $key => $value){
if($value['totalAide'] == 1){
unset($list_aides_possibles[$key]);
}
else{
$list_aides_possibles[$key]['name'] = $value['totalAide'].' sélections';
}
}
$params = array(
'get_by_nombres_aides' => true,
'get_stars' => true,
'idtexts' => true,
'get_by_nombres_aides_val' => false
);
$top = 1;
if(!empty($this->context['params']['top'])){
$top = $this->context['params']['top'];
$params['get_by_nombres_aides_val'] = $top;
$params['unset_no_year'] = true;
}
// comités de lecture : 102
$this->getSelections(array(4),'Selection','selections', 102, $params);
$this->context['view']->show_prix = true;
$this->context['view']->custom_text_aide_url = '/selections';
$this->asides->load(['url_lists' => array(
'exec' => ['htmlstart' => true],
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/selections/comites-lectures-reperes',
'urls' => $menu,
'params' => [
'activate' => ($top == 1) ? 'comites-lectures-reperes' : ''
]
),
'title' => 'Voir',
)]);
$this->asides->load(['url_lists,filtre_top' => array(
'exec' => array(
'htmlend' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/selections/comites-lectures-reperes/top/totalAide',
'urls' => $list_aides_possibles,
'params' => [
'activate' => $top
]
),
'subtitle' => 'Trier'
)]);
$menu_voir = array(
[
'name' => 'Conseils de lectures',
'url' => '/conseils/nos-conseils'
],
[
'name' => 'Les Prix et distinctions',
'url' => '/prix/les-plus-remarques'
],
[
'name' => 'Textes au programme d\'examens',
'url' => '/contacts/Ministere-de-l-Education-nationale/selections'
],
[
'name' => 'littérature pour collégiens',
'url' => '/contacts/EDUSCOL/selections'
],
[
'name' => 'La «liste 136» du TNS',
'url' => '/contacts/Ecole-Superieure-dArt-Dramatique-du-TNS/selections/type/text/idaide/145?y='
],
);
$this->asides->load(['url_lists_alone' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_voir
),
'title' => 'Voir aussi'
)]);
// $this->asides->load(['prix_reference' => array(
// 'custom_title' => 'Les comités de lecture',
// 'disable_subtitle' => true
// )]);
$this->asides->load('figurer_informations_aides_textes');
return $this->view('selections/comites-lectures-reperes.html.twig');
}
// }}}
// {{{ action_textes_auteurs()
/** Tri par nombres de soutiens/aides/laureats
*
* @Route("/selections/textes-auteurs", name="selections_textes_auteurs")
* @Route("/selections/textes-auteurs/filtre/{p_filtre}", name="selections_textes_auteurs_filtre")
* @Route("/selections/textes-auteurs/filtre/{p_filtre}/top/{p_top}", name="selections_textes_auteurs_filtre_top")
*
* @access protected
* @return void
*/
public function action_textes_auteurs($p_filtre = null, $p_top = null)
{
$this->view->action = $this->context['action'] = 'textes-auteurs';
$this->context['params']['filtre'] = $p_filtre;
$this->context['params']['top'] = $p_top;
$idaidecontact = 102;
// filtre par default de la page
$filtres = ['tous', 'reperes'];
$page_default = 'tous';
if(!empty($this->context['params']['filtre']) && in_array($this->context['params']['filtre'], $filtres)) {
$page_default = $this->context['params']['filtre'];
}
$playlists = $this->em->getRepository(Playlists::class);
$this->perPage = 20;
// récupèrer les prix associés au contact
$object_aide = $this->em->getRepository(TextAide::class);
if($page_default == 'reperes') {
$list_aides_possibles = $object_aide->getIndiceNombresAides(['idaidecontact' => 102, 'playlists' => ['idclassifications' => [144]]]);
$list_top = array();
foreach ($list_aides_possibles AS $key => $value) {
if ($value['totalAide'] == 1) {
unset($list_aides_possibles[$key]);
} else {
$list_aides_possibles[$key]['name'] = $value['totalAide'] . ' sélections';
}
}
}
$params = array(
// 'get_by_nombres_aides' => true,
// 'get_stars' => true,
// 'idtexts' => true,
// 'get_by_nombres_aides_val' => false,
'get_by_playlists' => [144],
);
if($page_default == 'reperes') {
$top = 1;
if (!empty($this->context['params']['top'])) {
$top = $this->context['params']['top'];
$params['get_by_nombres_aides_val'] = $top;
}
}
else{
$params['unset_by_nombres_aides'] = true;
}
//On récupère tous les textes disponibles en lien avec les paramètres au dessus
$idtexts = $this->getTextes($params);
//Paramètre commun à la méthode de comptage du nombre d'éléments et de la méthode de récupération des éléments
$params_playlist = array(
'special' => array(
'idclassifications' => 144, // class_texte_parauteur //
'idtext' => $idtexts, // les texts de la personne
),
'dbg' => array('list_playlists','Playlist texte par l\'auteur'),
);
//Nombre total d'éléments en base de données
$this->context['view']->nb_total_playlist = $playlists->countListPlaylists($params_playlist);
//la limite de résultat
$params_playlist['limit'] = array($this->getLimitStart(),$this->perPage);
//Liste des éléments disponibles
$this->context['view']->textes_auteurs = $playlists->getListPlaylists($params_playlist, array(), ['other_url_clean' => true]);
if($page_default == 'reperes') {
foreach ($this->context['view']->textes_auteurs AS $key => $vb) {
$this->context['view']->textes_auteurs[$key] = $this->getTotalAides($vb, 'text_aide', $idaidecontact, 'text');
}
}
//Création de la pagination
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_total_playlist);
$menu = array(
'tous' => array(
'name' => 'Tous les textes',
'key_value' => 'tous'
),
'reperes' => array(
'name' => 'Textes les plus repérés',
'key_value' => 'reperes'
)
);
$this->asides->load(['url_lists' => array(
'exec' => ['htmlstart' => true, 'htmlend' => ($page_default == 'tous') ? true : false],
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/selections/textes-auteurs/filtre/key_value',
'urls' => $menu,
'params' => [
'activate' => $page_default
]
),
'title' => 'Voir',
)]);
if($page_default == 'reperes') {
$this->asides->load(['url_lists,filtre_top' => array(
'exec' => array(
'htmlend' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'url' => '/selections/textes-auteurs/filtre/reperes/top/totalAide',
'urls' => $list_aides_possibles,
'params' => [
'activate' => $top
]
),
'subtitle' => 'Trier'
)]);
}
// $this->asides->load(['prix_reference' => array(
// 'custom_title' => 'Les comités de lecture',
// 'disable_subtitle' => true
// )]);
$this->asides->load('figurer_informations_aides_textes');
return $this->view('selections/textes-auteurs.html.twig');
}
// }}}
// {{{ getSelections()
/** les sélections
*
*/
public function getSelections($type_aide,$type_label,$page, $idaidecontact = null, $params = array())
{
$this->getCommonInfos($idaidecontact);
// trouver les prix lauréats
$this->perPage = 40;
$this->context['view']->title_type = $type_label;
$this->context['view']->page = $page;
$this->context['view']->menu_types_object[$this->context['params']['type']]['active'] = 'on';
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');
$params_sql_aide = array(
'from' => array($t.'s'),
'where' => array(' AND '.$t.'_aide.`id'.$t.'` = '.$t.'s.`id'.$t.'`'),
'get_texts_with_aides' => true,
'group_by_aide_type_aide_text' => true,
'dbg' => array($t.'_aide','Nombre de '.$t.' '.$type_label),
);
if(!is_null($type_aide) && !is_array($type_aide)) {
$type_aide = array($type_aide);
$params_sql_aide['special'] = array(
'aides' => array(
'type_aides' => $type_aide, // Prix
)
);
}
if(!is_null($idaidecontact)){
$params_sql_aide['special']['aides']['idaidecontact'] = $idaidecontact;
}
if(!empty($params['idtypetext']) && $t == 'text'){
$params_sql_aide['where'][] = ' AND texts.`idgenretext` = '.(int)$params['idtypetext'];
}
if(!empty($params['isbn_not_empty']) && $t == 'text'){
$params_sql_aide['where'][] = ' AND texts.`isbn` != ""';
}
if(!empty($params['idtexts'])){
if(!isset($params['get_by_nombres_aides_val'])){
$params['get_by_nombres_aides_val'] = false;
}
else{
$params_sql_aide['group'] = ['text_aide' => 'idtext'];
}
$params_sql_aide['idtexts'] = $this->getTextes($params);
}
//On récupère les textes avec X aides
if(!empty($params['get_by_nombres_aides'])){
//On rassemble par id d'text_aide
// $params_sql_aide['group'] = ['text_aide' => 'idtext'];
// unset($params_sql_aide['get_texts_with_aides']);
// $params_sql_aide['special']['get_by_nombres_aides'] = $params['get_by_nombres_aides'];
// if(!empty($params['get_by_nombres_aides_val'])) {
// $params_sql_aide['special']['get_by_nombres_aides_val'] = $params['get_by_nombres_aides_val'];
// }
//Pour la pagination
$params_sql_aide['count_disctint_by'] = array(
$t.'_aide' => 'id'.$t
);
}
// compter le nombre total de lauréats
$nb_list = $object_aide->{'countList'.ucfirst($t).'Aide'}($params_sql_aide);
if(is_numeric($nb_list) && $nb_list==0) {
unset($this->context['view']->menu_types_object[$t]);
}
unset($params_sql_aide['count_disctint_by']);
// si on est dans le contexte
if($this->context['params']['type']==$t) {
// 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();
// l'année ou les 2 dernières
if(!empty($this->context['view']->year)) {
$params_sql_aide['special']['period']['year'] = $this->context['view']->year;
} else {
// $params_sql_aide['special']['period']['years'] = array(
// 'start' => date('Y')-1,
// 'end' => date('Y')+1,
// );
}
$params_display = array();
// texte style
if($this->context['params']['type'] == 'text') {
$params_display['vignette_format'] = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
$params_display['stylemore'] = array('imagep' => 'width:60px;', 'desctxt' => 'width:210px;');
$params_display['publisher_first_inverse'] = true;
}
$this->context['view']->{'nb_list_aides_'.$t} = $object_aide->{'countList'.ucfirst($t).'Aide'}($params_sql_aide);
$params_sql_aide['limit'] = array($this->getLimitStart(),$this->perPage);
$list = $object_aide->{'getList'.ucfirst($t).'Aide'}($params_sql_aide,$params_display);
// groupement par année
if (empty($params['unset_no_year'])) {
$list_by_year = array();
foreach ($list as $k => $v) {
$list_by_year[$v['year_start']][$v['idaide']]['description'] = $v['aide'];
if (!empty($v[$t . 's'])) {
foreach ($v[$t . 's'] as $kb => $vb) {
if (!empty($params['get_stars']) && $params['get_stars']) {
$vb = $this->getTotalAides($vb, $type_aide, $idaidecontact, $t);
}
$list_by_year[$v['year_start']][$v['idaide']][$t . 's'][] = $vb;
}
}
}
$this->context['view']->{'list_aides_' . $t} = $list_by_year;
} // sans groupement par année
else {
$datas = array();
foreach ($list as $k => $v) {
if (!empty($v[$t . 's'])) {
foreach ($v[$t . 's'] as $kb => $vb) {
if (!empty($params['get_stars']) && $params['get_stars']) {
$vb = $this->getTotalAides($vb, $type_aide, $idaidecontact, $t);
}
$datas[$t . 's'][] = $vb;
}
}
}
$this->context['view']->{'list_' . $t} = $datas;
}
$this->context['view']->pagination = $this->getPagination($nb_list);
}
}
}
// {{{ getCommonInfos()
/** Infos communes
*
* @return void
*/
protected function getCommonInfos($idaidecontact = null)
{
// menu type
$this->context['view']->menu_types_object = array(
//'tous' => array('name' => 'Tous les lauréats'),
'text' => array('name' => 'Les textes'),
'spectacle' => array('name' => 'Les spectacles'),
'person' => array('name' => 'Les artistes'),
);
if(!isset($this->context['params']['type']) || !isset($this->context['view']->menu_types_object[$this->context['params']['type']])) {
$this->context['params']['type'] = 'text';
}
$this->context['view']->menu_types_object[ $this->context['params']['type']]['active'] = 'on';
$params = array(
'special' => array(
'type_aide' => array(4),
'text_aide' => true,
),
'limit' => array(0,100),
'dbg' => array('liste_contacts', 'Contacts associés aux sélections')
);
if(!is_null($idaidecontact)){
$params['special']['idaidecontact'] = $idaidecontact;
}
// trouver les aides de type 2 ou 3
$this->context['view']->contacts = $this->aides->getListAides(
$params,
array(),
array(
'group_by_contact' => true
)
);
// ajouter masonery
$this->context['view']->js_more[] = 'jquery.masonry.min.js';
}
// }}}
public function getTextes($params_get = false)
{
$params = array(
'special' => array(
'aides' => [
'idaidecontact' => 102,
'get_by_nombres_aides' => true
]
),
'params' => [
'limit' => 'all'
]
);
if(!empty($params_get['unset_by_nombres_aides'])){
unset($params['special']['aides']['get_by_nombres_aides']);
}
if(!empty($params_get['get_by_playlists']) && $params_get['get_by_playlists']){
$params['special']['playlists'] = array(
'text' => true,
'idclassifications' => $params_get['get_by_playlists'], // par l'auteur
);
}
if(!empty($params_get['get_by_nombres_aides_val']) && $params_get['get_by_nombres_aides_val']){
$params['special']['aides']['get_by_nombres_aides_val'] = $params_get['get_by_nombres_aides_val'];
}
$texts = $this->em->getRepository(Texts::class);
$query = $texts->getSQLTexts($params['params'], $params['special']);
$texts = $texts->queryAll($query);
$ids = array();
foreach($texts AS $text){
$ids[] = $text['idtext'];
}
return $ids;
}
protected function getTotalAides($datas, $type_aide, $idaidecontact, $type){
$object_aide = $this->em->getRepository('TheatreCore\Entity\\'.$type.'Aide');
if(!empty($datas['id'.$type])){
if(is_array($datas['id'.$type])){
$text = reset($datas['id'.$type]);
$idtext = $text['id'.$type];
}
else{
$idtext = $datas['id'.$type];
}
}
$params = array(
'special' => array(
'aides' => array(
'get_by_nombres_aides' => true,
// 'type_aides' => $type_aide, // Prix
'idaidecontact' => $idaidecontact // type
),
),
'idtext' => $idtext
);
$datas['nb_aides'] = $nombres_totals = $object_aide->countListTextAide($params);
$datas['nb_aides_px'] = 13*$datas['nb_aides'];
return $datas;
}
}