<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use App\Exception\RedirectException;
use App\Service\Abonnements\Abonnements;
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\UtilsEdit;
use App\Service\wiki2xhtml\wiki2xhtml;
use App\Validator\CheckWebsite;
use Doctrine\ORM\AbstractQuery;
use Doctrine\ORM\EntityManagerInterface;
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\FileType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
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\Validator\Constraints as Assert;
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\File;
use Symfony\Component\Validator\Constraints\NotBlank;
use TheatreCore\Classes\Images\Images;
use TheatreCore\Entity\Bigregions;
use TheatreCore\Entity\BookmarkExtranetuser;
use TheatreCore\Entity\Contacts;
use TheatreCore\Entity\Contents;
use TheatreCore\Entity\Countries;
use TheatreCore\Entity\Dvds;
use TheatreCore\Entity\Extranetusers;
use TheatreCore\Entity\Files;
use TheatreCore\Entity\Languages;
use TheatreCore\Entity\Multimedias;
use TheatreCore\Entity\News;
use TheatreCore\Entity\ObjectMultimedia;
use TheatreCore\Entity\PersonEcole;
use TheatreCore\Entity\Persons;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Podcasts;
use TheatreCore\Entity\Schedules;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Stats;
use TheatreCore\Entity\TextAide;
use TheatreCore\Entity\Texts;
class BiographieController extends TheatreController
{
// id de la personne
protected $idperson = null;
// object persons
protected $persons;
// object contents
protected $contents;
// object multimedias
protected $multimedias;
// infos sur la personne
protected $infosperson = array();
// précision fil d'arianne
protected $locate = null;
// titre de la page
protected $title_page = null;
// style en plus
protected $style_more = array();
protected $js_more = array();
// meta keywords et meta description
protected $meta_keywords = '';
protected $meta_description = '';
// taille maxi des vidéos
protected $other_dimensions = array();
// infos pour mon théâtre
protected $mtinfos = array();
// pour le menu principal
protected $rub_courante = null;
protected $extra_title = '';
protected $extra_locate = '';
protected $is_accueil = false;
protected $stylemore_spectacle = array('imagep' => 'width:80px;', 'descsp' => 'width:300px;');
protected $stylemore_text = array('imagep' => 'width:60px;', 'desctxt' => 'width:295px;');
// tous les spectacles associés à une personne
protected $ids_spectacle_all = array();
// les textes associés
protected $idtexts_person = array();
// les asides
protected $asides = "";
// résultat par page
protected $perPage = 20;
protected $func;
protected $serviceAbonnements;
protected AdapterInterface $cache;
// {{{ _construct()
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
TokenStorageInterface $tokenStorage,
Functions $functions,
Abonnements $Abonnements,
UploadUtils $edit_utils,
AdapterInterface $cache
)
{
$this->func = $functions;
// surbrillance du menu principal (thnet)
$GLOBALS['rub_courante'] = 'biographies';
parent::__construct($translator, $tokenStorage);
$this->em = $em;
$this->serviceAbonnements = $Abonnements;
$this->edit_utils = $edit_utils;
$this->asides = new asides();
$this->cache = $cache;
// charger jquery
$GLOBALS['jquery_load'] = true;
// seulement les données publiées
$GLOBALS['publish'] = 1;
}
public function InitController($slug = null, $action = null, $params = [])
{
$this->view->action = $this->context['action'] = $action;
$this->RouterOptions($slug, $action, $GLOBALS['rub_courante']);
$this->view->controller = $GLOBALS['rub_courante'];
if (!empty($params['idperson'])){
$this->idobject = $this->idperson = $this->id = (int)$params['idperson'];
}
else{
$params['idperson'] = $this->idperson = $this->idobject = (int)($this->id ?? 0);
}
// si idperson n'existe pas, on renvoi sur une page d'erreur (a faire !!!)
// !! avant d'ajouter une page d'erreru, bine vérifier car j'ai ajouté un "$this->>idperson = null;" dans PersonsRepository.php
if (empty($params['idperson']) && ! isset($params['corvin'])) {
throw new RedirectException($this->context['url_module'].'/erreur/');
}
if (isset($params['corvin']) && $params['corvin'] == true) {
$this->persons = $this->em->getRepository(Persons::class)->createQueryBuilder('p')
->andWhere('p.idcorvin is not null')
->getQuery()
->getResult();
} else {
/**
* Classe Persons
*/
$this->persons = $this->em->getRepository(Persons::class);
/**
* Classe Contents
*/
$this->contents = $this->em->getRepository(Contents::class);
/**
* Classe Multimedias
*/
$this->multimedias = $this->em->getRepository(Multimedias::class);
// status des contenus
$this->contents->setPublishStatus($this->publish_status);
// on recupere l'enregistrement
$this->infosperson = $this->persons->getInfosPerson($this->idperson);
// si hors ligne, redirection vers 404
// if (!$this->isGranted('ROLE_ISROOT') && $this->infosperson['publish']==0) {
// $this->func->actionRedirect($this->context['url_module'].'/erreur/');
// }
// voir si la personne dirige une structure
$boss = $this->persons->getAssociateContacts($this->idperson, 1, false);
foreach ($boss as $k => $v) {
$date_current = new \Datetime(date('Y-m-d H:i:s'));
if ($v['date_start'] != '0000-00-00 00:00:00') {
$date_start = new \Datetime($v['date_start']);
if ($date_start > $date_current) {
unset($boss[$k]);
}
}
if ($v['date_end'] != '0000-00-00 00:00:00') {
$date_end = new \Datetime($v['date_end']);
if ($date_end < $date_current) {
unset($boss[$k]);
}
}
}
$this->infosperson['boss'] = $boss;
// la bio
$biotxt = $this->contents->getAssociateContent($this->idperson, 'persons', 'class_biotxt', array('wiki_convert' => true));
//Si c'est une femme
if ($this->infosperson['sexe'] == 2) {
$this->view->is_women = true;
}
// si existe, voir aussi pour les liens
if (! empty($biotxt)) {
foreach (array('link', 'facebook', 'twitter', 'linkedin', 'instagram') as $f) {
if (! empty($biotxt[$f])) {
$this->infosperson[$f] = $biotxt[$f];
}
}
$this->infosperson['biotxt'] = $biotxt;
}
// si rentré dans le corp de la fiche
if (empty($this->infosperson['biotxt']['link']) && ! empty($this->infosperson['url'])) {
$this->infosperson['link'] = $this->infosperson['url'];
}
// voir s'il y a au moins un lien
$types_liens = array(
'link' => 'site personnel',
'twitter' => 'twitter',
'facebook' => 'facebook',
'linkedin' => 'linkedin',
'instagram' => 'instagram',
);
foreach ($types_liens as $k => $v) {
if (! empty($this->infosperson[$k])) {
unset($types_liens[$k]);
$this->context['view']->links_exist = true;
}
}
if (! empty($types_liens)) {
$this->context['view']->types_liens = join(', ', $types_liens);
}
// il faut également la vignette de la photo associée le cas échéant
$files = $this->em->getRepository(Files::class);
$files->setPublishStatus($this->publish_status);
$photos_person = $files->getObjectFiles($this->idperson, 'persons', 'class_photo_person');
if (! empty($photos_person)) {
// creation d'une vignette
$format_vignette_person_flou = $format_vignette_person = array('width' => $_ENV['VIGN_PERSONS_WIDTH'], 'height' => $_ENV['VIGN_PERSONS_HEIGHT'], 'direction' => 'crop');
$format_vignette_person_flou['blur'] = true;
foreach ($photos_person as $k => $v) {
$this->infosperson['thumbnail'] = $this->persons->getVignettePerson($this->idperson, $format_vignette_person);
$this->infosperson['thumbnail_flou'] = $this->persons->getVignettePerson($this->idperson, $format_vignette_person_flou);
break; // on ne prend que la première
}
}
// les critiques
$this->infosperson['nb_critiques'] = $this->countAllCritiques();
// url_folder
$this->infosperson['url_folder'] = '/biographies/' . $this->infosperson['url_clean'];
// url du dossier
$this->url_folder = $this->infosperson['url_folder'];
// style
$this->style_more = array('rubrique', 'dossier', 'auteur');
}
}
// {{{ contenus()
/** Les articles associés aux persons
*
*/
public function contenus_biographie($type_class, $type_class_view, $other_dimensions = array('width'=>500, 'grow'=>false), $params = array())
{
parent::contenus('persons',$this->idperson,$type_class,$type_class_view,$other_dimensions,$params);
}
// }}}
// {{{ buildMenu()
/** Construit le menu et l'envoie à la vue
*
*
* @access protected
* @return void
*/
protected function buildMenu()
{
$menu_person = array();
// accueil avec l'actualite
$menu_person['biographie'] = array('nom' => 'Actu', 'title' => 'Actualités de '.$this->infosperson['fullname'],'icone' => 'info_24.png');
// presentation de la personne
if (!empty($this->infosperson['biotxt']['text']) || $this->contents->countAssociateContent('persons', $this->idperson,6)){
$menu_person['presentation'] = array('nom' => 'En savoir +', 'title' => 'Présentation de '.$this->infosperson['fullname'],'icone' => '111-user.png');
} else if ($this->getPersonTextAides(array(0,100), true, ['count_specifique' => true])){
$menu_person['presentation'] = array('nom' => 'En savoir +', 'title' => 'Présentation de '.$this->infosperson['fullname'],'icone' => '111-user.png');
}
// voir s'il y a des contenus l'auteur par lui même
if ($this->em->getRepository(Playlists::class)->countPlaylists('persons',$this->idperson,'class_auteur_meme')>0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('persons',$this->idperson,'class_auteur_meme');
if ($this->infosperson['sexe']==2) {
$texte_playlist = 'Par elle-même';
} else {
$texte_playlist = 'Par lui-même';
}
$menu_person['playlist/id/'.$playlist['urlClean']] = array('nom' => $texte_playlist, 'title' => $this->infosperson['fullname'].' '.$texte_playlist);
}
if (!empty($this->ids_spectacle_all)) {
$schedules = $this->em->getRepository(Schedules::class);
$biographies_dates_demains = $schedules->getDateBySpectaclesDemain($this->ids_spectacle_all, 1);
if (count($biographies_dates_demains) > 0) {
$menu_person['dates'] = array('nom' => 'Calendrier', 'title' => 'Calendrier de ' . $this->infosperson['fullname'], 'icone' => '96-book.png');
}
}
// est-ce un auteur ?
if ($this->infosperson['is_author']>0 || $this->contents->countAssociateContent('persons',$this->idperson,'class_biotextes')) {
$menu_person['textes'] = array('nom' => 'Textes', 'title' => 'Textes de '.$this->infosperson['fullname'],'icone' => '96-book.png');
}
else if ($this->infosperson['is_translator']>0) {
$menu_person['traductions'] = array('nom' => 'Textes', 'title' => 'Textes de '.$this->infosperson['fullname'],'icone' => 'book_24.png');
}
if (count($this->ids_spectacle_all) > 0){
$list_enscenes = $this->getSpectaclesDates(false, true);
$menu_person['spectacles'] = array('nom' => 'En scène ('.count($list_enscenes).')', 'title' => 'Spectacles associés à '.$this->infosperson['fullname'],'icone' => 'tag_24.png');
}
// évènements
$news = $this->em->getRepository(News::class);
$news_params = array(
'special' => array(
'by_object' => array('idperson' => $this->idperson),
),
);
$countnews = $news->countNews($news_params);
if ($countnews>0) {
$menu_person['evenements'] = array('nom' => 'Évènements', 'title' => 'Évènements autour de '.$this->infosperson['fullname'].' proposés par les internautes','icone' => 'tag_24.png');
}
// Y a t"il des vidéos
$countmultimedias = $this->countMultimediasPerson();
if ($countmultimedias>0) {
$menu_person['videos'] = array('nom' => 'Vidéos ('.$countmultimedias.')', 'title' => 'Vidéos de '.$this->infosperson['fullname'],'icone' => 'video_24.png');
}
// On vérifie s'il y a des podcasts
$countecouter = $this->em->getRepository(Podcasts::class)->countPodcasts('persons',$this->idperson, 'franceinter');
$countecouter += $this->em->getRepository(Podcasts::class)->countPodcasts('persons',$this->idperson, 'soundcloud');
if ($countecouter > 0) {
$menu_person['podcasts'] = array('nom' => html_entity_decode('Audio'), 'title' => 'Écouter');
}
// les critiques
if ($this->infosperson['nb_critiques']>0) {
$menu_person['critiques'] = array('nom' => 'Critiques ('.$this->infosperson['nb_critiques'].')', 'title' => 'Toutes les critiques des spectacles de '.$this->infosperson['fullname']);
}
// contenu éduction
$nb_educs = $this->getEduc(['count' => true]);
if ($nb_educs>0) {
$menu_person['contenu-pedagogique'] = array('nom'=>'Éduc ('.$nb_educs.')','title' => 'Les contenus pédagogiques sur'.$this->infosperson['fullname'], 'id'=>'educ');
}
// menu courant actif
if ($this->context['action'] == 'spectacle') {
$menu_person['spectacles']['active'] = 'on';
$this->current = $menu_person['textes'];
} else {
$menu_person[$this->context['action']]['active'] = 'on';
$this->current = $menu_person[$this->context['action']];
}
if ($this->context['action'] == 'textes-auteurs' || $this->context['action'] == 'textes-traductions' || $this->context['action'] == 'traductions'){
$menu_person['textes']['active'] = 'on';
}
if (strpos($this->context['action'],'playlist')!==false) {
foreach($menu_person as $k=>$v) {
if (strpos($k,'playlist')!==false) {
$menu_person[$k]['active'] = 'on';
$this->current = $menu_person[$k];
break;
}
}
}
if ($this->context['action'] == 'prix-recompenses' || $this->context['action'] == 'aides-soutiens' || $this->context['action'] == 'selections' || $this->context['action'] == 'ensavoirplus'){
$menu_person['presentation']['active'] = 'on';
}
if ($this->context['action'] == 'premieres'){
$menu_person['dates']['active'] = 'on';
}
// envoyer le menu
foreach($menu_person as $k=>$v) {
// ajoute la class
$menu_person[$k]['classcolor'] = ' menu_'.$k;
}
$key_menu_person = array_keys($menu_person);
$first = reset($key_menu_person);
$menu_person[$first]['first'] = true;
$this->view->menu_person = $menu_person;
}
// }}}
// {{{ finalizeAction()
/** Après l'action, construit le titre de page et le fil d'arianne
*
*
* @access protected
* @return void
*/
protected function finalizeAction()
{
// construction du menu
$this->buildMenu();
if (!empty($this->extra_title)) {
$this->title_page .= $this->extra_title.' - '.$this->infosperson['fullname'];
} else if (!empty($this->current['title'])){
$this->title_page .= $this->current['title'];
} else {
$this->title_page .= $this->infosperson['fullname'];
}
// titre de la page
$this->title_page .= ', actualités, textes, spectacles, vidéos, tous ses liens avec la scène';
// situation
$this->locate = array('/biographies/' => 'Biographies');
// rubrique (pour le menu principal)
$this->rub_courante = 'biographies';
// complément du fil d'arianne
if (empty($this->is_accueil)) {
if (empty($this->extra_locate) && !empty($this->current['nom'])) {
$this->extra_locate = $this->current['nom'];
}
// on ajoute la sous-rubrique actuelle
$this->locate[$this->url_folder.'/'] = $this->infosperson['fullname'];
$this->locate[0] = $this->extra_locate;
} else {
// à l'accueil, on ne précise pas la sous-rubrique
$this->locate[0] = $this->infosperson['fullname'];
$this->view->is_accueil = true;
}
// envoi au template
$this->view->data_person = $this->infosperson;
foreach($this->infosperson as $key=>$value) {
if ($key=='datestart') {
$this->view->birth_year = $value;
} elseif ($key=='dateend') {
$this->view->death_year = $value;
} else {
$this->view->$key = $value;
}
}
// autres infos pour mon theatre
$mtinfos = array(
'object' => 'persons',
'idobject' => $this->idperson,
'urifrom' => $this->url_folder.'/',
'info_rub' => 'cette biographie'
);
$this->view->mtinfos = $mtinfos;
// widget
$this->view->barre_infos[] = array(
'url' => $this->url_folder.'/gadget',
'title' => 'widget',
'icone' => 'add_icon',
);
// voir si l'objet est bookmarke
$bookmark = $this->em->getRepository(BookmarkExtranetuser::class);
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')
&& $bookmark->isBookmark($this->idperson,'persons',$this->context['session']->getIdextranetuser())) {
$this->view->is_bookmark = true;
}
// action add/delete bookmark
if (isset($_GET['bookmark'])) {
$this->view->bookmark = true;
$do_action = $_GET['do_action'];
$this->view->$do_action = true;
}
if (empty($this->current['idcontent'])) {
$this->current['idcontent'] = null;
}
// statistique de visite
//@TODO temporaire à supprimer pour la V2
if (!empty($this->idperson) && !$this->no_stats) {
$statsinfos = array(
'type' => 'article',
'module' => $this->context['module'],
'url' => $_SERVER['REQUEST_URI'],
'idcontent' => (int)$this->current['idcontent'],
'object' => 'persons',
'idobject' => $this->idperson,
'video' => (int)(!empty($this->view->detailarticle['display_media']))
);
$stats = $this->em->getRepository(Stats::class);
$stats->setStats($statsinfos, __FILE__.':'.__LINE__);
}
// pour les liens dans le template
$this->view->url_folder = $this->url_folder;
$this->context['view']->info_person = true;
// aside
$this->view->aside = $this->asides->view($this->view);
// fil d'arianne
$this->view->locate = $this->getLocate();
if (empty($this->view->reseaux['fb']) && !isset($this->view->meta_video)){
$this->setReseauSocial();
}
$this->addPubliciteGoogle();
}
// }}}
// {{{ getInfosTextPerson()
/** TODO: getInfosTextPerson description
*
*
* @param mixed $texts
* @access protected
* @return void
*/
//protected function getInfosTextPerson($texts) {
public function getInfosTextPerson($texts,$format=array()) {
$derniers_textes = $texts->getInfosTextRow();
$derniers_textes['publisher_first'] = true;
$derniers_textes['stylemore'] = $this->stylemore_text;
if (isset($texts->publisher_country)) {
$derniers_textes['publisher']['country'] = $texts->getNameCountry($texts->publisher_country,$GLOBALS['lng']);
}
if (empty($format)) {
$format = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
}
$derniers_textes['vignette'] = $texts->getVignetteText($texts->idtext,$format);
return $derniers_textes;
}
// }}}
// {{{ getRowSpectacle()
/** TODO: getRowSpectacle description
*
*
* @param mixed $spectacles
* @param mixed $format
* @access protected
* @return void
*/
protected function getRowSpectacle($spectacles, $format, $widget = false)
{
$tp = array();
$sexe = ($this->infosperson['sexe']==2) ? 'female' : 'male';
// infos sur le spectacle
$idspectacle = $spectacles->idspectacle;
$sp = $spectacles->getInfosSpectacleRow($format);
//wjdget
if (!$widget){
$sp = $spectacles->clearSpectaclesAddAllPersons($sp);
}
// trouver les roles de la personne
// auteur si dans array auteurs
if (empty($sp['textfictif']) && !$sp['textfictif']) {
if ((!empty($sp['allpersons']) && array_key_exists($this->idperson, $sp['allpersons'])) || (!empty($sp['allauthors']) && array_key_exists($this->idperson, $sp['allauthors']))) {
//Il ne faut pas qu'il y ait l'attribut "rôles".
if (empty($sp['allpersons'][$this->idperson]['roles'])) {
if ($sp['idtypespectacle']['idtypespectacle'] == 2) {
if ($sexe == 'female') {
$tp[]['role'] = 'Adaptatrice';
} else {
$tp[]['role'] = 'Adaptateur';
}
} else {
if ($sexe == 'female') {
$tp[]['role'] = 'Auteure';
} else {
$tp[]['role'] = 'Auteur';
}
}
}
}
}
// traduction si idperson dans quoi dans la liste des traducteurs du texte du spectacle ?
// il faut deja que type texte soit 1
if ($sp['idtypespectacle']['idtypespectacle']==1 && (!empty($sp['allpersons']) || !empty($sp['allauthors']))){
// test textes du spectacles
/*foreach($sp['allauthors'] as $k=>$v) {
$idtexts[] = $v['idtext'];
}*/
$sql = 'SELECT COUNT(DISTINCT(ts.idspectacle))
FROM text_spectacle ts
WHERE 1
AND ts.idspectacle='.$idspectacle.'
AND ts.idtext IN (
SELECT idtext
FROM text_translator
WHERE 1
AND idperson='.$this->idperson.'
)';
$trad = $spectacles->queryOne($sql);
if ($trad>0) {
$tp[]['role'] = 'Traduction';
}
}
// si c'est un collage, il est possible que la personne soit l'auteur ou le traducteur d'un des texts
// autre si dans spectacle_person
$sql = 'SELECT sp.idrole,r.role_male,r.role_female,lg.'.$this->context['lng'].'
FROM spectacle_person sp, roles r, langterms lg
WHERE 1
AND sp.idrole=r.idrole
AND r.role=lg.id
AND sp.idspectacle='.$idspectacle.'
AND sp.idperson='.$this->idperson;
$roles = $spectacles->queryAll($sql);
if (!empty($roles)) {
$roles_count = count($roles);
for($s = 0; $roles_count>$s; $s++) {
$tp[]['role'] = $roles[$s]['role_'.$sexe];
}
}
$sp['roles'] = $this->persons->noPunct($tp);
$sp['stylemore'] = $this->stylemore_spectacle;
return $sp;
}
// }}}
// {{{ action_captations()
/** Captations de la page contact
*
* @Route("/biographies/{slug}/captations", name="biographie_captations")
* @Route("/biographies/{slug}/captations/filtre/{p_filtre}", name="biographie_captations_p_filtre")
* @Route("/biographies/{slug}/captations/type/{p_type}", name="biographie_captations_p_type")
*
* @access public
* @return void
*/
public function action_captations($slug = null, $execute_corps = true, $p_filtre = null, $p_type = null)
{
$this->context['params']['filtre'] = $p_filtre;
$this->context['params']['type'] = $p_type;
if (!is_null($slug) && $execute_corps){
$this->InitController($slug, 'videos');
}
$podcasts = $this->em->getRepository(Podcasts::class);
$format_vignette = array('width'=>480,'direction'=>'thumb');
$filtre_vod = [
'vod' => [
'type' => 1
],
'svod' => [
'type' => 2
]
];
$filtre_culturebox = [
'all' => [
'name' => 'Toutes les captations en ligne',
'key_type' => 'all'
],
'derniere-chance' => [
'name' => 'Dernière chance',
'key_type' => 'derniere-chance'
],
'captations-a-venir' => [
'name' => 'Captations à venir',
'key_type' => 'captations-a-venir'
]
];
$filtre = (!empty($this->context['params']['filtre']) && array_key_exists($this->context['params']['filtre'], $filtre_culturebox)) ? $this->context['params']['filtre'] : 'all';
$type = (!empty($this->context['params']['type']) && array_key_exists($this->context['params']['type'], $filtre_vod)) ? $this->context['params']['type'] : null;
$culturebox_params = array(
'limit' => ($filtre == 'derniere-chance') ? array(0,4) : array(0,200),
'special' => array(
'type_podcast' => 'culturebox', //commun
'is_integrale' => true, //commun
'idpersons' => array('idperson' => $this->idperson)
),
'dbg' => array('culturebox_data', 'Les replay culturebox'),
);
if (!is_null($type)){
$culturebox_params['special']['type_diffusion'] = $filtre_vod[$type]['type'];
$this->view->subaside_action = $type;
} else{
$culturebox_params['special']['current'] = true;
}
//prochains
$culturebox_params_opts['captations-a-venir']['special']['next'] = true;
//last chance
$culturebox_params_opts['derniere-chance']['special']['lastchance'] = true;
$culturebox_params_opts['derniere-chance']['special']['current'] = true;
foreach($filtre_culturebox AS $k => $v){
if (isset($culturebox_params_opts[$k])){
$culturebox_params_counts = array_merge_recursive($culturebox_params, $culturebox_params_opts[$k]);
$filtre_culturebox[$k]['count'] = $podcasts->countListPodcasts($culturebox_params_counts);
}
}
$this->context['view']->filtre_culturebox = $filtre_culturebox;
if (!$execute_corps){
return true;
}
if (isset($culturebox_params_opts[$filtre])){
if ($filtre_culturebox[$filtre]['count'] > 0){
$culturebox_params = array_merge_recursive($culturebox_params, $culturebox_params_opts[$filtre]);
}
else{
return $this->redirectToRoute('contact_captations_p_type', ['slug' => $this->context['view']->url_clean, 'p_type' => 'all']);
}
}
$this->context['view']->list_captations = $podcasts->getListPodcasts($culturebox_params,$format_vignette);
$arrays_contacts = [];
foreach($this->context['view']->list_captations AS $value){
if (!empty($value['podcast_contact'])){
foreach($value['podcast_contact'] AS $key => $contact){
$arrays_contacts[$key] = $contact;
}
}
}
usort($arrays_contacts, function($a, $b) {return strcmp($a['organisation'], $b['organisation']);});
$this->view->contacts_partenaires = $arrays_contacts;
// compter le nombre totale de captations intégrales
$this->context['view']->nb_podcasts = $podcasts->countPodcasts();
if ($filtre == 'all'){
$this->context['view']->is_all_captation = true;
}
if ($filtre == 'derniere-chance'){
$this->context['view']->is_last_chance = true;
}
if ($filtre == 'captations-a-venir'){
$this->context['view']->is_future_captation = true;
}
$this->context['view']->type_spectacle = null;
$this->context['view']->subaside_action_view = 'type/' . $type;
$this->getAsidesVideos('captations',null, $filtre);
// titre de la page
$title_page = 'Captation culturebox';
$rub_courante = 'culturebox';
$this->view->locate = array(
0 => $title_page,
);
return $this->view('biographies/captations.html.twig');
}
// {{{ action_podcasts()
/** liste de lecture
*
* @Route("/biographies/{slug}/podcasts/", name="biogrpahie_podcasts")
* @Route("/biographies/{slug}/podcasts/emission/{pemission}", name="biogrpahie_podcasts_p_emission")
*
* @access public
* @return void
*/
public function action_podcasts($slug = null, $pemission = null)
{
$this->context['params']['emission'] = $pemission;
$this->InitController($slug, 'podcasts');
$podcasts = $this->em->getRepository(Podcasts::class);
$format_vignette = array('width'=>480,'direction'=>'thumb');
// Culturebox => les derniers référencés
$culturebox_params = array(
'direction' => 'DESC',
'limit' => array(0,20),
'special' => array(
'idpersons' => $this->idperson,
'type_podcast' => 'franceculture'
),
'dbg' => array('derniers_culturebox_current', 'Les replay France Culture référencés'),
);
$culturebox_params['special']['type_franceinter'] = null; //Pour France Culture
$countFranceCulture = $podcasts->countListPodcasts($culturebox_params);
$culturebox_params['special']['type_franceinter'] = 1;
$countFranceInter = $podcasts->countListPodcasts($culturebox_params);
unset($culturebox_params['special']['type_franceinter']);
$culturebox_params['special']['type_podcast'] = 'soundcloud';
$countSoundCloud = $podcasts->countListPodcasts($culturebox_params);
$filtres_emissions = [
'franceculture' => [
'name' => 'France Culture',
'count' => $countFranceCulture,
'params' => null,
'type' => 'franceculture'
],
'franceinter' => [
'name' => 'France Inter',
'count' => $countFranceInter,
'params' => 1,
'type' => 'franceinter'
],
'soundcloud' => [
'name' => 'Soundcloud',
'count' => $countSoundCloud,
'type' => 'soundcloud'
]
];
$curseur = null;
if (!empty($this->context['params']['emission']) && array_key_exists($this->context['params']['emission'], $filtres_emissions)){
$curseur = $this->context['params']['emission'];
$culturebox_params['special']['type_podcast'] = 'franceculture';
if (array_key_exists('params', $filtres_emissions[$curseur])){
$culturebox_params['special']['type_franceinter'] = $filtres_emissions[$curseur]['params'];
}
else{
$culturebox_params['special']['type_podcast'] = 'soundcloud';
}
}
else{
unset($culturebox_params['special']['type_franceinter']);
$culturebox_params['special']['type_podcast'] = ['franceinter', 'soundcloud'];
}
$countFranceInterPagination = $podcasts->countListPodcasts($culturebox_params);
$this->context['view']->pagination = $this->getPagination($countFranceInterPagination, 20);
$this->context['view']->pagination['totalItems'] = $countFranceInterPagination;
// $this->context['view']->pagination['spectacle'] = true;
$culturebox_params['limit'] = array($this->getLimitStart(),$this->perPage);
$this->context['view']->list_captations = $podcasts->getListPodcasts($culturebox_params,$format_vignette);
$this->asides->load(['url_lists' => array(
'exec' => [
'htmlstart' => true,
'alone' => false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => [
[
'name' => 'Toutes les émissions'
]
],
'url' => '/biographies/{v_url_clean}/podcasts/',
'params' => array(
'activate' => (is_null($curseur)) ? true : false
)
),
'title' => 'écouter'
)]);
$this->asides->load(['url_lists,tst' => array(
'exec' => [
'htmlend' => true,
'alone' => false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $filtres_emissions,
'url' => '/biographies/{v_url_clean}/podcasts/emission/key_type',
'params' => array(
'key_type' => 'auto_key',
'activate' => $curseur
)
),
'title' => 'Trier'
)]);
if ($countFranceCulture){
$this->asides->load(['bio_franceculture' => [ 'noactive' => true ]]);
}
//Pour France Inter
if ($countFranceInter){
$this->asides->load([
'contact_franceculture_menu,franceinter' => [
'custom_url_clean' => 'France-Inter',
'title_custom' => 'France Inter',
'logo_custom' => 'france-inter'
]
]);
}
$this->asides->load('common_participer_personne');
$this->asides->load('bio_formation');
return $this->view('biographies/podcasts.html.twig');
}
// }}}
// {{{ action_playlist()
/** liste de lecture
*
* @Route("/biographies/{slug}/playlist/id/{p_id}/", name="biographie_playlist")
* @Route("/biographies/{slug}/playlist/id/{p_id}/video/{p_video}", name="biographie_playlist_video")
*
* @access public
* @return void
*/
public function action_playlist_biographie($slug = null, $p_id = null, $p_video = null)
{
$this->context['params']['id'] = $p_id;
$this->context['params']['video'] = $p_video;
$this->InitController($slug, 'playlist');
if (empty($this->idperson)) {
return $this->redirectToRoute('erreur_type', ['type' => 'introuvable']);
}
$this->view->controller = $this->context['controller'] = 'biographies';
$params_display = array(
'limitmultimedias' => array('all')
);
$route = parent::action_playlist($params_display);
if ($route != null) {
return $route;
}
//aside
$this->asides->load('playlists_aside');
return $this->view('biographies/playlist.html.twig');
}
// }}}
// {{{ action_ensavoirplus()
/** ensavoirplus
*
* @Route("/biographies/{slug}/ensavoirplus/idcontent/{idcontent}", name="biographie_ensavoirplus")
* @Route("/biographies/{slug}/ensavoirplus/idcontent/{idcontent}/pdf/{p_pdf}", name="biographie_ensavoirplus_pdf")
* @Route("/biographies/{slug}/ensavoirplus/idcontent/{idcontent}/pdf/{p_pdf}/download/{p_download}", name="biographie_ensavoirplus_pdf_download")
*
* @access public
* @return void
*/
public function action_ensavoirplus($slug = null, $idcontent, $aside = true, $default_content = false, $p_pdf = null, $p_download = null)
{
// objet contents
$this->contents = $this->em->getRepository(Contents::class);
if (!is_null($idcontent)){
$this->context['params']['idcontent'] = $idcontent;
$this->view->idcontentCurrent = $idcontent;
}
if ($aside){
$this->setParamsPDF($p_pdf, $p_download);
$this->InitController($slug, 'ensavoirplus');
}
$this->extra_locate = $this->extra_title = 'En savoir +';
$bioarticles = $this->contents->getAssociateContent($this->idperson,'persons','class_article');
if (!empty($bioarticles['text'])) {
$this->view->bioarticles = $bioarticles;
if ($default_content){
return $this->redirectToRoute('biographie_ensavoirplus', ['slug' => $this->infosperson['url_clean'], 'idcontent' => $bioarticles['idcontent']]);
}
}
$this->contenus_biographie('class_article','ensavoirplus',array(),array('limit' => 'all'));
if ($aside) {
if (!empty($this->context['params'])) {
$params = $this->context['params'];
}
if (isset($params) && (!empty($params['idcontent']) || my_is_int($params['idcontent']))) {
$this->context['view']->bioarticles = $this->em->getRepository(Contents::class)->getInfosContent($params['idcontent'], ['wiki_convert' => true, 'get_files' => true]);
} else if (!empty($this->context['view']->list_captations)) {
} else {
return $this->redirect('/biographies/' . $this->context['view']->url_clean . '/presentation/');
}
//Gestion du réseau social custom
if (!empty($this->view->detailarticle['deck'])) {
$description_html = $this->view->detailarticle['deck'];
} else {
$description_html = $this->view->detailarticle['text'];
}
$url = $_ENV['URL_THNET'] . '/biographies/' . $this->infosperson['url_clean'] . '/' . $this->context['action'] . '/idcontent/' . $this->view->detailarticle['idcontent'];
$title = $this->view->detailarticle['title'] . ' - ' . $this->infosperson['fullname'];
$this->setReseauSocial($title, $description_html, $url);
$this->setAsidesCommunEnSavoirPlus();
//Réservé à Jean-Luc Lagarce
if ($this->idperson == 3) {
$this->asides->load('bio_lettre_lagarce');
}
$this->checkConditionsPDF();
return $this->view('biographies/ensavoirplus.html.twig');
}
}
// }}}
// {{{ action_biographie()
/** biographie
*
* @Route("/biographies/{slug}/", name="biographie_biographie")
* @Route("/biographies/{slug}/biographie/", name="biographie_biographie_current")
*
* @access public
* @return void
*/
public function action_biographie($slug = null)
{
$this->InitController($slug, 'biographie');
if (empty($this->idperson)) {
return $this->redirectToRoute('erreur_type', ['type' => 'introuvable']);
}
$this->is_accueil = true;
// page en cours
$this->view->from_page = $this->url_folder.'/';
//Si la description existe nous l'affichons
if (!empty($this->infosperson['biotxt']['text'])) {
//On donne à texte le contenu de la description
$text = $this->infosperson['biotxt']['text'];
// mots-clés et description
$this->func->makeMetaFromHtml($this->infosperson['biotxt']['text'], $this->meta_description, $this->meta_keywords);
}
//Si la description n'existe pas, nous vérifions qu'un contenu avec la classification CORVIN et en récupérons son contenu
else if (!empty($associateContent = $this->contents->getAssociateContents($this->idperson,'persons',206))){
$corvin_id = reset($associateContent);
$corvin = $this->em->getRepository(Contents::class)->getInfosContent($corvin_id[0]['idcontent'],['wiki_convert' => true]);
//On donne à texte le contenu de corvin
$text = $corvin['deck'];
// mots-clés et description
$this->func->makeMetaFromHtml($corvin['text'], $this->meta_description, $this->meta_keywords);
}
//Si texte dépasse 302 caractères on y applique différents filtres
if (!empty($text)){
if (strlen($text) > 302){
$html = substr($text, 0, 302);
$search = array('@<[\/\!]*?[^<>]*?>@si', // suppression HTML tags
'@[[:space:]\n\r]+@sm', // suppression espaces et sauts de lignes
);
$text = preg_replace($search, ' ', $html); // on remplace par des espaces
$text = preg_replace('@[[:space:]\n\r]+@sm', ' ', $text); // on ne conserve qu'un seul espace
}
//On affiche la valeur de texte
$this->infosperson['biotxt']['text_cut'] = html_entity_decode(strip_tags($text), ENT_COMPAT, 'utf-8');
}
$files = $this->em->getRepository(Files::class);
$files->setPublishStatus($this->publish_status);
$photos_person = $files->getObjectFiles($this->idperson,'persons','class_photo_person');
$format_vignette_person = array('width'=>220,'height'=>'180','direction'=>'L');
if (!empty($photos_person)) {
// creation d'une vignette
foreach($photos_person as $k=>$v) {
$photos_person[$k]['vignette'] = $this->persons->getVignettePerson($this->idperson,$format_vignette_person);
}
$this->view->photos = $photos_person;
}
if (!empty($this->infosperson['biotxt']['text'])) {
$this->view->biotxt = $this->infosperson['biotxt'];
if (strlen($this->view->biotxt['text']) > 150){
$this->view->biotxt['text_cut'] = substr($this->view->biotxt['text'], 0, 150);
}
// mots-clés et description
$this->func->makeMetaFromHtml($this->infosperson['biotxt']['text'], $this->meta_description, $this->meta_keywords);
}
//Les deux prochains spectacles avec vidéos à l'affiche
if ($lists_spectacles = $this->getSpectaclesPerson()){
$params_sql_spectacles = array(
'params' => array(
'groupby' => 's.idspectacle',
'order' => ['creation_date', 'DESC'],
'limit' => array(0,2)
),
'special' => array(
// 'idperson_author' => true,
// 'idperson_idtexts' => $this->idtexts_person,
'multimedias_videos_associes' => true,
'idspectacle' => $lists_spectacles,
'prochains' => '720'
),
'dbg' => array('nb_spectacles_author', 'Les spectacles à partir des textes de la personne')
);
$listes = $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql_spectacles);
$set_format = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
foreach($listes AS $idspectacle => $spectacle){
$multimediass = $this->em->getRepository(Multimedias::class);
$videos[$idspectacle] = $multimediass->getInfosMultimedia($spectacle['idmultimedia'],false,false,array('vignette' => $set_format, 'tableau'=>true));
$spectacle['schedule'] = $this->em->getRepository(Spectacles::class)->getProchDateLieu(
array(),
$spectacle['idspectacle']
);
$videos[$idspectacle]['spectacle'] = $spectacle;
}
if (!empty($videos)){
$this->view->spectacles_videos_affiche = $videos;
}
}
$this->context['view']->schedules_dates_demains_par_mois = $this->getSpectaclesPremieres(['limit' => [0,3]]);
$this->context['view']->schedules_dates_premieres_light_templates = true;
// trouver 7 prochains évènements
// si pas de 7 prochains, trouver 7 anciens
$news = $this->em->getRepository(News::class);
$news_params = array(
'params' => array(
'limit' => array(0,7),
'order' => 'T3.date DESC',
),
'special' => array(
'publish_valid' => true,
'by_object' => array('idperson' => $this->idperson),
),
'dbg' => array('derniers_news', 'Les derniers/prochains évènements'),
);
//foreach(array('news','spectacles') as $t) {
foreach(array('news') as $t) {
$news_list = array();
$news_params['special']['type_news'] = $t;
foreach(array('prochains','anciens') as $d) {
$news_params['special'][$d] = true;
$news_params['dbg'] = array('essai'.$d, 'Pour '.$d);
// si ancien, seulement 3
if ($d=='anciens') {
$news_params['params']['limit' ] = array(0,3);
}
$news_list[$d] = $news->getListNews($news_params);
if (!empty($news_list[$d])) {
$this->view->{'is_news_list_'.$t} = true;
}
unset($news_params['special'][$d]);
}
if (!empty($news_list['prochains'])) {
$news_list['prochains'] = array_reverse($news_list['prochains'], true);
}
$this->view->{'news_list_'.$t} = $news_list;
}
//Les deux dernières vidéos des textes par l'auteur
$this->context['view']->textes_auteurs = $this->em->getRepository(Playlists::class)->getListPlaylists(array(
'limit' => array(0,2),
'special' => array(
'idclassifications' => 144, // class_texte_parauteur //
'idtext' => explode(',', $this->idtexts_person), // les texts de la personne
),
'dbg' => array('list_playlists','Playlist texte par l\'auteur'),
));
if (!empty($this->context['view']->textes_auteurs)) {
foreach($this->context['view']->textes_auteurs as $k=>$v) {
// le lien vers le contenu directement
if (!empty($v['idtext'])) {
foreach($v['idtext'] as $t) {
$this->context['view']->textes_auteurs[$k]['nameview'] = $t['title'];
$this->context['view']->textes_auteurs[$k]['other_url_clean'] = '/textes/'.$t['url_clean'].'/playlist/id/'.$v['urlClean'];
}
}
}
}
// Culturebox => les derniers référencés
$culturebox_params = array(
'limit' => array(0,1),
'special' => array(
'idpersons' => array('idperson' => $this->idperson),
'type_podcast' => 'culturebox',
// 'current' => true,
),
'dbg' => array('derniers_culturebox', 'Les derniers replay culturebox référencés'),
);
$format_vignette = array('width'=>480,'direction'=>'thumb');
$this->context['view']->derniers_culturebox_gratuit = $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params,$format_vignette);
$culturebox_params['special']['type_diffusion'] = 1;
$this->context['view']->derniers_culturebox_vod = $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params,$format_vignette);
$culturebox_params['special']['type_diffusion'] = 2;
$this->context['view']->derniers_culturebox_svod = $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params,$format_vignette);
//Les prochaines dates
if (!empty($this->ids_spectacle_all)) {
$schedules = $this->em->getRepository(Schedules::class);
$biographies_dates_demains = $schedules->getDateBySpectaclesDemain($this->ids_spectacle_all, 3);
$calendrier_listes_spectacles = [];
foreach ($biographies_dates_demains AS $k => $v) {
foreach ($biographies_dates_demains[$k]['datas'] AS $idata => $data) {
$idspectacle = $data['idspectacle'];
if (empty($calendrier_listes_spectacles[$idspectacle])) {
$calendrier_listes_spectacles[$idspectacle] = $this->em->getRepository(Spectacles::class)->getInfosSpectacle($data['idspectacle'], ['get_vignette' => true]);
}
$biographies_dates_demains[$k]['datas'][$idata]['spectacle'] = $calendrier_listes_spectacles[$idspectacle];
}
}
unset($calendrier_listes_spectacles);
$this->context['view']->schedules_dates_demains = $biographies_dates_demains;
}
$liste_videos_dernieres = $this->getMultimediasPerson(array(
'limit' => array(0,4)
));
$params_display = array(
'tableau' => true,
'vignette' => array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169'),
'display' => array('no_footer' => true, 'videos_169_format' => true)
);
foreach($liste_videos_dernieres as $item) {
$idmultimedia = $item['idmultimedia'];
$multimedias = $this->em->getRepository(Multimedias::class);
$this->view->dernieres_videos[$idmultimedia] = $multimedias->getInfosMultimedia($idmultimedia,false,false,$params_display);
}
// classe des Textes/Traductions
$texts = $this->em->getRepository(Texts::class);
// selection commune
$from_txt = 'DISTINCT(t.idtext),t.title,t.url_clean,c.organisation,
c.url_clean as url_clean_publisher, c.country as publisher_country,
CONCAT_WS(\'-\',t.publication_year,t.publication_month,\'01\') as datepublication,
t.publication_month,t.publication_year,t.date as datewrite,t.textorder';
//{if:derniers_textes}
// derniers textes publiés
$sql_derniers_textes = '
SELECT '.$from_txt.'
FROM texts t, contacts c, text_author ta
WHERE 1
AND ta.idtext=t.idtext
AND c.idcontact=t.idcontact_publisher
AND ta.idperson='.$this->idperson.'
AND t.type=0
AND t.publish=1 ORDER BY datepublication DESC LIMIT 0,2';
$texts->query($sql_derniers_textes);
$derniers_textes = array();
while($texts->fetch()) {
$derniers_textes[$texts->idtext] = $this->getInfosTextPerson($texts);
}
$this->view->derniers_textes = $derniers_textes;
// {if:derniers_traductions_publi}
// dernieres traductions publies d'un texte de l'auteur (traductions : titre, titre original, langue, langue originale, pays, année)
$sql_derniers_traductions_publi = '
SELECT '.$from_txt.', t.type
FROM text_traduction tt, texts t
LEFT OUTER JOIN contacts c ON c.idcontact=t.idcontact_publisher
WHERE 1
AND tt.idtexttraduction=t.idtext
AND t.publish=1
AND tt.idtext IN (
SELECT idtext
FROM text_author
WHERE idperson='.$this->idperson.'
)
ORDER BY datepublication DESC LIMIT 0,2';
$texts->query($sql_derniers_traductions_publi);
$derniers_traductions_publi = array();
while($texts->fetch()) {
$derniers_traductions_publi[$texts->idtext] = $this->getInfosTextPerson($texts);
}
// print_r($derniers_traductions_publi); // debug
$this->view->derniers_traductions_publi = $derniers_traductions_publi;
// {if:derniers_traductions}
// dernieres traductions publies par l'auteur (traductions : titre, titre original, langue, langue originale, pays, année)
$sql_derniers_traductions = '
SELECT '.$from_txt.', t.type
FROM text_translator tt, texts t
LEFT OUTER JOIN contacts c ON c.idcontact=t.idcontact_publisher
WHERE 1
AND tt.idtext=t.idtext
AND t.publish=1
AND tt.idperson='.$this->idperson.'
ORDER BY datepublication DESC LIMIT 0,2';
$texts->query($sql_derniers_traductions);
$derniers_traductions = array();
while($texts->fetch()) {
$derniers_traductions[$texts->idtext] = $this->getInfosTextPerson($texts);
}
//print_r($derniers_traductions); // debug
$this->view->derniers_traductions = $derniers_traductions;
// spectacles à l'affiche en temps que : auteur du texte, metteur en scene, acteur, technicien
$spectacles = $this->em->getRepository(Spectacles::class);
// la liste des texts associés à la personne
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
// trouver les contenus associés 101 et les classer par date
$item = $this->cache->getItem("biographie_dernieres_critiques_person_" . $this->idperson . "_texts_" . ($this->idtexts_person ?: 0));
if (! $item->isHit()) {
$params_sql = array(
'special' => array(
'get_critiques_idperson' => array(
'idperson' => $this->idperson, // critiques d'une personne
'idtexts_person' => $this->idtexts_person, // liste des textes de la personne
),
'get_extranetuser' => true, // on veut l'utilisateur
'publish' => 1, // les critiques publiées
),
'sql' => array(
'limit' => array(0,4),
'order' => ' ct.`date_article` DESC', // classement
),
'dbg' => array('critiques','Liste des critiques'),
);
$dernieres_critiques = $this->em->getRepository(Contents::class)->getListContents($params_sql,array('get_critiques' => true, 'shorten_title' => true));
$item->set($dernieres_critiques)->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($item);
} else {
$dernieres_critiques = $item->get();
}
$this->context['view']->dernieres_critiques = $dernieres_critiques;
//textes aides et soutiens en savoir +
$this->context['view']->texts_aides_soutiens = $this->getPersonTextAides(array(0,3), false, ['types_aides' => array(1), 'group_by_aide_type_aide_texte' => true]);
if (!empty($this->context['view']->texts_aides_soutiens)){
foreach($this->context['view']->texts_aides_soutiens AS $k => $v){
$this->context['view']->texts_aides_soutiens[$k]['texts'] = reset($v['texts']);
}
}
//Le dernier podcast
$podcasts = $this->em->getRepository(Podcasts::class);
// Podcast France Culture => les derniers référencés
$franceculture_params = array(
//'direction' => 'DESC',
'limit' => array(0,1),
'special' => array(
'idpersons' => $this->idperson,
'type_podcast' => ['franceinter', 'soundcloud'],
),
'dbg' => array('derniers_franceculture', 'Les derniers podcasts franceculture référencés'),
);
$this->context['view']->derniers_franceculture = $podcasts->getListPodcasts($franceculture_params);
$this->context['view']->nb_derniers_franceculture = $podcasts->countListPodcasts($franceculture_params);
// Podcast Arte => les derniers référencés
$arte_params = array(
//'direction' => 'DESC',
'limit' => array(0,1),
'special' => array(
'type_podcast' => 'arte',
),
'dbg' => array('derniers_Arte', 'Les derniers podcasts Arte référencés'),
);
$this->context['view']->derniers_arte = $podcasts->getListPodcasts($arte_params);
$this->context['view']->nb_derniers_arte = $podcasts->countListPodcasts($arte_params);
//tableaux
$spec = array();
$spec_old = array();
// format vignette
$format = array('width'=>$_ENV['VIGN_SPECTACLE_WIDTH'],'height'=>$_ENV['VIGN_SPECTACLE_HEIGHT'],'direction'=>'crop');
// contrainte en plus
$sql_more = ' AND (sp.`idperson`='.$this->idperson;
// les textes de la personne
if (!empty($this->idtexts_person)) {
$sql_more .= ' OR t.idtext IN ('.$this->idtexts_person.') ';
}
// spectacles publiés
$sql_more .= ') AND s.`publish`=1 ';
// selection des spectacles aujourd'hui et demain
$item = $this->cache->getItem("biographie_sql_prochains_" . date('Y-m-d') . "_in_person_" . $this->idperson . "_or_in_texts_" . ($this->idtexts_person ?: 0));
if (! $item->isHit()) {
$params_sql_prochains = array(
'params' => array(
'where' => $sql_more,
'limit' => array(0,4)
),
'special' => array(
'prochains' => true
),
'dbg' => array('a_affiche', 'Spectacles à l\'affiche'),
);
$sql_prochains = $spectacles->getSQLSpectacles($params_sql_prochains['params'],$params_sql_prochains['special'],false);
$datas = $sql_prochains->getResult(AbstractQuery::HYDRATE_ARRAY);
$item->set($datas)->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($item);
} else {
$datas = $item->get();
}
// mettre en forme chaque reponse
foreach($datas AS $spectacle_value) {
$spectacles->loadResult($spectacle_value[0]);
$spectacles->loadResult($spectacle_value);
$spec[$spectacles->idspectacle] = $this->getRowSpectacle($spectacles,$format);
}
// exclure de la liste derniers spectacles ceux déja présents dans la liste des spectacles à l'affiche
if (!empty($spec)) {
$spectacles_deja_listes = implode(',', array_keys($spec));
$sql_more .= ' AND s.idspectacle NOT IN ('.$spectacles_deja_listes.') AND s.publish=1 ';
}
// selection des spectacles passés
$item = $this->cache->getItem("biographie_sql_anciens_spectacles_" . date('Y-m-d') . "_in_person_" . $this->idperson . "_or_in_texts_" . ($this->idtexts_person ?: 0) . "_not_in_spectacles_" . ($spectacles_deja_listes ?? 0));
if (! $item->isHit()) {
$params_sql_anciens_spectacles = array(
'params' => array(
'where' => $sql_more,
// 'groupby' => 's.`idspectacle`',
'order' => ['MAX(sc.date)', 'DESC'],
'limit' => array(0,4),
),
'special' => array(
'anciens_stricts' => true
),
'dbg' => array('ancien', 'Spectacles dernièrement à l\'affiche'),
);
$sql_anciens_spectacles = $spectacles->getSQLSpectacles($params_sql_anciens_spectacles['params'],$params_sql_anciens_spectacles['special'], false);
$datas = $sql_anciens_spectacles->getResult(AbstractQuery::HYDRATE_ARRAY);
$item->set($datas)->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($item);
} else {
$datas = $item->get();
}
// mettre en forme chaque reponse
foreach($datas AS $spectacle_value) {
$spectacles->loadResult($spectacle_value[0]);
$spectacles->loadResult($spectacle_value);
$sp = $this->getRowSpectacle($spectacles,$format);
$spec_old[$spectacles->idspectacle] = $spectacles->clearSpectaclesAddAllPersons($sp);
$spec_old[$spectacles->idspectacle]['footer_contact'] = true;
if ((!empty($spec_old[$spectacles->idspectacle]['typespectacle']) && $spec_old[$spectacles->idspectacle]['typespectacle'] != 'lecture') || $spec_old[$spectacles->idspectacle]['idtypespectacle']['idtypespectacle'] == 1){
unset($spec_old[$spectacles->idspectacle]['typespectacle']);
}
}
$this->view->spec = $spec;
$this->view->spec_old = $spec_old;
// aides, lauréats nominations
if (!empty($this->idtexts_person)) {
$format = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
// trouver les textes de l'auteur qui ont eu une aide à la création
$this->context['view']->texts_aides = $this->em->getRepository(Texts::class)->getListTexts(
array(
'special' => array(
'aides' => array(
'idaidecontact' => 25,
),
//'authors' => array($this->idperson),
'idtext' => explode(',', $this->idtexts_person),
'join' => true,
),
'params' => array(
'limit' => array(0,30),
'classement' => 'DESC',
),
'dbg' => array('list_texts_aides', 'Texte de l\'auteur ayant reçus une aide à la création'),
'api' => false,
),
array(
'vignette_format' => $format,
'publisher_first_inverse'=> true,
)
);
if (sizeof($this->context['view']->texts_aides) > 3){
$this->context['view']->texts_aides = array_slice($this->context['view']->texts_aides, 0, 3);
$this->context['view']->texts_aides_limit_on = true;
}
// trouver les textes avec des prix/récompenses
$this->context['view']->laureats_nominations = $this->getPersonTextAides(array(0, 3));
// trouver les textes avec des sélections
$this->context['view']->texts_selections = $this->getPersonTextAides(array(0,3), false, ['types_aides' => array(4), 'group_by_aide_type_aide_texte' => true]);
foreach($this->context['view']->texts_selections AS $k => $v){
$this->context['view']->texts_selections[$k]['texts'] = reset($v['texts']);
}
}
$this->meta_description = 'Toutes les informations et l\'actualité de '.$this->infosperson['firstname'].' '.$this->infosperson['lastname'].' : biographie, textes, publications, spectacles et dates de représentations à l\'affiche et archivées, DVD, vidéos et événements liés';
$this->context['view']->ecoles = $this->persons->noPunct($this->em->getRepository(PersonEcole::class)->getEcoles($this->idperson));
/* vidéo par l'auteur */
if ($this->em->getRepository(Playlists::class)->countPlaylists('persons',$this->idperson,'class_auteur_meme')>0) {
$playlists = $this->em->getRepository(Playlists::class);
$playlist = $playlists->getByClassification('persons',$this->idperson,'class_auteur_meme');
$playlist = $playlists->getInfosPlaylist(
$playlist['idplaylist'],
array(
'all' => true,
'multimedias' => true,
)
);
$this->context['view']->videos_par_auteur = reset($playlist['multimedias']);
$this->context['view']->videos_par_auteur['more_url_clean'] = $playlist['urlClean'];
}
// on affiche le dernier dvd associé à la biographie
$this->view->dernier_dvd = $this->getDvds(false,['limit'=>array(0,1)]);
// On affiche ce block que pour ces personnes
$asides_listes_persons = array(
'Valerie-Dreville',
'Ariane-Mnouchkine',
'Eric-Lacascade',
'Guy-Cassiers',
'Krystian-Lupa',
'Christian-Schiaretti',
'Yves-Noel-Genod',
'Jean-Francois-Sivadier',
'Stephane-Braunschweig',
'CANDEL-Jeanne',
'Christiane-Jatahy',
'RUF-Eric',
'Bernard-Murat',
'RENUCCI-Robin',
'Alain-Francon',
'Brigitte-Jaques-Wajeman',
'Falk-Richter',
'Jean-Pierre-Vincent',
'Olivier-Py',
'Jean-Christohe-Meurisse',
'Stanislas-Nordey',
'Jean-Michel-Ribes',
'Francois-Delaroziere',
'Alexis-Michalik',
'Dieudonne-Niangouna',
'Emmanuel-Demarcy-Mota',
'Anne-Laure-Liegeois',
'Thomas-Jolly',
'Ivo-Van-Hove',
'Jean-Louis-Martinelli',
'Joel-Pommerat',
'Wajdi-Mouawad'
);
//aside
$this->asides->load('bio_thumbnail');
$this->asides->load('bio_par_auteur');
$this->asides->load('common_prochain_evenement');
// On affiche ce block que pour ces personnes
if (in_array($this->context['view']->url_clean, $asides_listes_persons)){
$this->asides->load('bio_ecole_charles_dullin');
}
$this->asides->load(['common_culturebox,common_culturebox_free' => [
'footer_custom' => true,
'content' => $this->context['view']->derniers_culturebox_gratuit
]]);
if (!empty($this->context['view']->derniers_culturebox_vod)){
$this->asides->load(['common_culturebox,common_culturebox_vod' => [
'footer_custom' => true,
'content' => $this->context['view']->derniers_culturebox_vod,
'vod' => true,
'param_type' => 'vod'
]]);
}
if (!empty($this->context['view']->derniers_culturebox_svod)){
$this->asides->load(['common_culturebox,common_culturebox_svod' => [
'footer_custom' => true,
'content' => $this->context['view']->derniers_culturebox_svod,
'svod' => true
]]);
}
// $this->asides->load('bio_link_exist');
$this->asides->load('bio_formation');
$this->asides->load('bio_MAV');
$this->asides->load('bio_navigation');
$this->asides->load('common_participer_personne');
//Réservé à Jean-Luc Lagarce
if ($this->idperson == 3){
$this->asides->load('bio_lettre_lagarce');
}
if (!empty($this->infosperson['facebook'])){
$this->asides->load(['common_facebook' => array(
'url_custom' => $this->infosperson['facebook']
)]);
}
if (!empty($this->infosperson['twitter'])){
$this->asides->load(['common_twitter' => array(
'url_custom' => $this->infosperson['twitter']
)]);
}
// Ajout de la clé role_header
foreach($this->context['view']->spec as $k=>$v) {
$this->context['view']->spec[$k]['role_header'] = true;
$this->context['view']->spec[$k]['footer_contact'] = true;
}
// Ajout de la clé role_header
foreach($this->context['view']->spec_old as $k=>$v) {
$this->context['view']->spec_old[$k]['role_header'] = true;
}
return $this->view('biographies/biographie.html.twig');
}
// }}}
/** Calendrier
*
* @Route("/biographies/{slug}/dates/", name="biographie_dates")
*
* @access public
* @return void
*/
public function action_dates($slug = null)
{
$this->InitController($slug, 'dates');
$schedules = $this->em->getRepository(Schedules::class);
$biographies_dates_demains = $schedules->getDateBySpectaclesDemain($this->ids_spectacle_all, 1000);
// Cette variable est utiliser pour stocker les résultats & éviter plusieurs requêtes SQL identiques
$calendrier_listes_spectacles = [];
$biographies_dates_demains_reconstruction = [];
foreach($biographies_dates_demains AS $k => $v){
$date_month = $schedules->getFormeDate($k,"%B %Y",true);
$date_month_hastag = $schedules->getFormeDate($k,"%B_%Y",true);
if (empty($biographies_dates_demains_reconstruction[$date_month_hastag])){
$menu_aside[$date_month_hastag] = [
'name' => $date_month,
'params' => $date_month_hastag,
];
$biographies_dates_demains_reconstruction[$date_month_hastag] = $menu_aside[$date_month_hastag];
}
$biographies_dates_demains_reconstruction[$date_month_hastag]['datas'][$k] = $v;
foreach ($biographies_dates_demains_reconstruction[$date_month_hastag]['datas'][$k]['datas'] AS $idata => $data) {
$idspectacle = $data['idspectacle'];
// Si la requête s'exécute pour la première fois
if (empty($calendrier_listes_spectacles[$idspectacle])) {
$calendrier_listes_spectacles[$idspectacle] = $this->em->getRepository(Spectacles::class)->getInfosSpectacle($data['idspectacle'], ['get_vignette' => true]);
}
// On assigne la valeur stocké précédément
$biographies_dates_demains_reconstruction[$date_month_hastag]['datas'][$k]['datas'][$idata]['spectacle'] = $calendrier_listes_spectacles[$idspectacle];
}
}
// On vide la variable en mémoire car maintenant inutile
unset($calendrier_listes_spectacles);
$this->context['view']->schedules_dates_demains_par_mois = $biographies_dates_demains_reconstruction;
$this->context['view']->menu_aside_dates = $menu_aside ?? null;
$this->getAsidesDates();
return $this->view('biographies/dates.html.twig');
}
// {{{ action_prix_recompenses()
/** Prix et distinctions
*
* @Route("/biographies/{slug}/prix-recompenses/", name="biographie_prix_recompenses")
*
* @access public
* @return void
*/
public function action_prix_recompenses($slug = null)
{
$this->InitController($slug, 'prix-recompenses');
//si c'est vide on redirige l'utilisateur
if ($this->getPersonTextAides(array(0,100), true, ['count_specifique' => true]) == 0){
return $this->redirectToRoute('biographie_presentation', ['slug' => $this->infosperson['url_clean']], Response::HTTP_MOVED_PERMANENTLY);
}
// trouver les textes avec des prix/distinctions
$this->context['view']->laureats_nominations = $this->getPersonTextAides(array(0,100));
$this->setAsidesCommunEnSavoirPlus();
return $this->view('biographies/prix-recompenses.html.twig');
}
// }}}
/** Les textes par l'auteur
*
* @Route("/biographies/{slug}/textes-auteurs/", name="biographie_textes_auteurs")
*
* @access public
* @return void
*/
public function action_textes_auteurs($slug = null)
{
$this->InitController($slug, 'textes-auteurs');
if (!empty($this->idtexts_person)) {
$playlists = $this->em->getRepository(Playlists::class);
$spectacles = $this->em->getRepository(Spectacles::class);
$this->context['view']->list_playlists = $playlists->getListPlaylists(array(
'special' => array(
'idclassifications' => 144, // class_texte_parauteur //
'idtext' => explode(',', $this->idtexts_person), // les texts de la personne
),
'dbg' => array('list_playlists','Playlist texte par l\'auteur'),
));
if (!empty($this->context['view']->list_playlists)) {
foreach($this->context['view']->list_playlists as $k=>$v) {
// le lien vers le contenu directement
if (!empty($v['idtext'])) {
foreach($v['idtext'] as $t) {
$this->context['view']->list_playlists[$k]['nameview'] = $t['title'];
$this->context['view']->list_playlists[$k]['other_url_clean'] = '/textes/'.$t['url_clean'].'/playlist/id/'.$v['urlClean'];
}
}
}
}
}
$this->extra_locate = 'Le texte par l\'auteur';
$this->extra_title = 'Le texte par l\'auteur';
$this->getAsidesTextesAuteurs();
$this->asides->load('bio_textes_auteurs');
$this->asides->load('common_participer_personne');
return $this->view('biographies/textes-auteurs.html.twig');
}
// }}}
/** Les textes par l'auteur
*
*
* @access public
* @return void
*/
public function count_textes_par_auteurs()
{
if (!empty($this->idtexts_person)) {
$playlists = $this->em->getRepository(Playlists::class);
$spectacles = $this->em->getRepository(Spectacles::class);
$list_playlists = $playlists->getListPlaylists(array(
'params' => array(
'get_texts_with_aides' => true
),
'special' => array(
'idclassifications' => 144, // class_texte_par auteur //
'idtext' => explode(',', $this->idtexts_person), // les texts de la personne
),
'dbg' => array('list_playlists','Playlist texte par l\'auteur'),
));
if (!empty($list_playlists)) {
return count($list_playlists);
}
}
return 0;
}
// }}}
/** Les textes sur l'auteur
*
*
* @access public
* @return void
*/
public function count_textes_sur_auteurs()
{
if (!empty($this->idtexts_person)) {
$playlists = Theatre::factory('playlists');
$spectacles = Theatre::factory('spectacles');
$list_playlists = $playlists->getListPlaylists(array(
'params' => array(
'get_texts_with_aides' => true
),
'special' => array(
'idclassifications' => 144, // class_texte_par auteur //
'idtext' => explode(',', $this->idtexts_person), // les texts de la personne
),
'dbg' => array('list_playlists','Playlist texte par l\'auteur'),
));
if (!empty($list_playlists)) {
return count($list_playlists);
}
}
return 0;
}
// }}}
/** Sélections
*
* @Route("/biographies/{slug}/selections/", name="biographie_selections")
*
* @access public
* @return void
*/
public function action_selections($slug = null)
{
$this->InitController($slug, 'selections');
$this->context['view']->texts_selections = $x = $this->getPersonTextAides(array(0,100), false, ['types_aides' => array(4), 'group_by_aide_type_aide_texte' => true]);
if ($this->context['view']->texts_selections){
foreach($this->context['view']->texts_selections AS $k => $v){
$this->context['view']->texts_selections[$k]['texts'] = reset($v['texts']);
}
}
$this->action_ensavoirplus($slug, null,false, null);
$this->setAsidesCommunEnSavoirPlus();
return $this->view('biographies/selections.html.twig');
}
// }}}
/** Aides et Soutiens
*
* @Route("/biographies/{slug}/aides-soutiens/", name="biographie_aides_soutiens")
*
* @access public
* @return void
*/
public function action_aides_soutiens($slug = null)
{
$this->InitController($slug, 'aides-soutiens');
$this->context['view']->texts_aides = $this->getPersonTextAides(array(0,100), false, ['types_aides' => array(1), 'group_by_aide_type_aide_texte' => true]);
if ($this->context['view']->texts_aides){
foreach($this->context['view']->texts_aides AS $k => $v){
$this->context['view']->texts_aides[$k]['texts'] = reset($v['texts']);
}
}
$this->action_ensavoirplus($slug, null,false, null);
$this->setAsidesCommunEnSavoirPlus();
return $this->view('biographies/aides-soutiens.html.twig');
}
// }}}
// {{{ action_presentation_edit()
/** Modifier la présentation
*
* @Route("/biographies/{slug}/presentation-edit/", name="biographie_presentation_edit")
*
* @access public
* @return void
*/
public function action_presentation_edit($slug = null, Request $request, TheatreMail $TheatreMail, UtilsEdit $edit_utils, Images $images, EditUtils $editUtils)
{
return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
}
// }}}
// {{{ action_presentation()
/** Présentation
*
* @Route("/biographies/{slug}/presentation/", name="biographie_presentation")
* @Route("/biographies/{slug}/presentation/idcontent/{idcontent}/pdf/{p_pdf}", name="biographie_presentation_pdf")
* @Route("/biographies/{slug}/presentation/idcontent/{idcontent}/pdf/{p_pdf}/download/{p_download}", name="biographie_presentation_pdf_download")
*
* @access public
* @return void
*/
public function action_presentation($slug = null, $showaside = true, $idcontent = null, $p_pdf = null, $p_download = null)
{
$this->persons = $this->em->getRepository(Persons::class);
$this->InitController($slug, 'presentation');
$this->setParamsPDF($p_pdf, $p_download);
if (!is_null($idcontent)){
$this->context['params']['idcontent'] = $idcontent;
}
$show_default_ensavoirplus = true;
if (!empty($this->infosperson['biotxt']['text'])) {
$this->view->biotxt = $this->infosperson['biotxt'];
// mots-clés et description
$this->func->makeMetaFromHtml($this->infosperson['biotxt']['text'], $this->meta_description, $this->meta_keywords);
$show_default_ensavoirplus = false;
}
//si biotxt est vide on affiche par defaut un contenu en savoirplus, sinon, on affiche biotxt
$this->action_ensavoirplus($slug, null,false, $show_default_ensavoirplus);
// voir si la personne est dans une ou plusieurs écoles
// "<lien>ecole</lien>" <lien>promotion "année promo"</lien>
$this->context['view']->ecoles = $this->persons->noPunct($this->em->getRepository(PersonEcole::class)->getEcoles($this->idperson));
// si il y al bio txt ou l'école ?
if (!empty($this->context['view']->ecoles) || !empty($this->view->biotxt)) {
$this->context['view']->is_content = true;
}
// il faut également la photo associé et le site web
$files = $this->em->getRepository(Files::class);
$files->setPublishStatus($this->publish_status);
$photos_person = $files->getObjectFiles($this->idperson,'persons','class_photo_person');
$format_vignette_person = array('width'=>220,'height'=>'180','direction'=>'L');
if (!empty($photos_person)) {
// creation d'une vignette
foreach($photos_person as $k=>$v) {
$photos_person[$k]['vignette'] = $this->persons->getVignettePerson($this->idperson,$format_vignette_person);
}
$this->view->photos = $photos_person;
}
$this->context['view']->page_presentation = true;
// trouver les textes avec des prix/récompenses
$this->context['view']->laureats_nominations = $this->getPersonTextAides(array(0,100));
if ($showaside){
// checker si la personne connectée à les droits sur cette fiche et
// sil elle a déjà proposé un texte
// paramètre d'instanciation
$params_edit = array(
'idobject' => $this->idperson,
'object' => 'persons'
);
// controlleur pour l'edition
$this->edit_utils->load($this->context,$params_edit);
if ($object_rights = $this->edit_utils->checkObjectRights()) {
$this->view->object_rights = $object_rights;
$this->view->last_draft['id'] = $this->edit_utils->lastDraft();
}
$this->setAsidesCommunEnSavoirPlus();
//Réservé à Jean-Luc Lagarce
if ($this->idperson == 3){
$this->asides->load('bio_lettre_lagarce');
}
$this->checkConditionsPDF();
return $this->view('biographies/presentation.html.twig');
}
}
// }}}
// {{{ action_widget()
/** widget actu de la personne
*
* @Route("/biographies/{slug}/widget/", name="biographie_widget")
*
* @access public
* @return void
*/
public function action_widget($slug = null, $format=array())
{
$this->InitController($slug, 'widget');
$this->style_more[] = 'widget_thnet';
$this->context['view']->tracking_ga = '#utm_source=thnet&utm_medium=widget&utm_campaing='.$this->url_folder;
// renvoyer en json ou en html ?
if (!empty($_GET['v']) && $_GET['v']=='ajax') {
$this->context['json_response'] = true;
} else {
$this->view->iframe_style = true;
}
// avec ou sans image (null,small,medium)
$preview_sizes = array(
'none' => 0,
'small' => 55,
'bigsmall' => 80,
'large' => 100,
);
if (!empty($_GET['preview']) && array_key_exists($_GET['preview'], $preview_sizes)) {
$vignette_size = $preview_sizes[$_GET['preview']];
} else {
$vignette_size = 100;
}
// largeur de la colonne du texte
$max_colsize = 10000;
if (!empty($_GET['colsize']) && $this->func->my_is_int($_GET['colsize']) && $_GET['colsize']<=$max_colsize) {
$colsize = $_GET['colsize'];
} else {
$colsize = 200+$vignette_size;
}
$colsize = $colsize-$vignette_size;
// nombre d'items maxi
$max_nbitems = 50;
if (!empty($_GET['nbitems']) && $this->func->my_is_int($_GET['nbitems']) && $_GET['nbitems']<=$max_nbitems) {
$nbitems = $_GET['nbitems'];
} else {
$nbitems = 1;
}
if (!empty($_GET['multiple_element']) && $_GET['multiple_element']){
$this->view->multiple_element = true;
}
if (!empty($_GET['responsive']) && $_GET['responsive']){
$this->view->responsive_display = true;
}
// format vignette
if (!empty($vignette_size)) {
$format = array('width'=>$vignette_size,'height'=>$vignette_size,'forme'=>'round','direction'=>'crop','valround'=>0);
} else {
$format = false;
$vignette_size = 0;
}
// spectacles à l'affiche en temps que : auteur du texte, metteur en scene, acteur, technicien
$spectacles = $this->em->getRepository(Spectacles::class);
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
//tableaux
$spec = array();
$spec_old = array();
// contrainte en plus
$sql_more = ' AND (sp.idperson='.$this->idperson;
// les textes de la personne
if (!empty($this->idtexts_person)) {
$sql_more .= ' OR t.idtext IN ('.$this->idtexts_person.') ';
}
// spectacles publiés
$sql_more .= ') AND s.publish=1 ';
// selection des spectacles aujourd'hui et demain
$params_sql_prochains = array(
'params' => array(
'where' => $sql_more,
'limit' => array(0,$nbitems)
),
'special' => array(
'prochains' => true
),
);
$sql_prochains = $spectacles->getSQLSpectacles($params_sql_prochains['params'],$params_sql_prochains['special'],false);
$datas = $sql_prochains->getResult(AbstractQuery::HYDRATE_ARRAY);
// mettre en forme chaque reponse
foreach($datas AS $spectacle_value) {
$spectacles->loadResult($spectacle_value[0]);
$spectacles->loadResult($spectacle_value);
// infos de base
$spec[$spectacles->idspectacle] = $this->getRowSpectacle($spectacles,$format,false);
$spec[$spectacles->idspectacle] = $spectacles->clearSpectaclesAddAllPersons($spec[$spectacles->idspectacle]);
// largeur du conteneur de la vignette
if (!empty($vignette_size)) {
$spec[$spectacles->idspectacle]['stylemore']['imagep'] = 'width:'.$vignette_size.'px;';
}
// largeur du conteneur du texte
if (!empty($colsize)) {
$spec[$spectacles->idspectacle]['stylemore']['descsp'] = 'width:'.$colsize.'px;';
}
}
// exclure de la liste derniers spectacles ceux déja présents dans la liste des spectacles à l'affiche
if (!empty($spec)) {
$spectacles_deja_listes = join(',',array_keys($spec));
$sql_more .= ' AND s.idspectacle NOT IN ('.$spectacles_deja_listes.')';
}
// selection des spectacles passés
$params_sql_avant = array(
'params' => array(
'where' => $sql_more,
'limit' => array(0,$nbitems)
),
'special' => array(
'anciens' => true
),
);
$query = $spectacles->getSQLSpectacles($params_sql_avant['params'],$params_sql_avant['special']);
$datas = $query->getResult(AbstractQuery::HYDRATE_ARRAY);
// mettre en forme chaque reponse
foreach($datas AS $spectacle_value) {
$spectacles->loadResult($spectacle_value[0]);
// infos de base
$x = $spec_old[$spectacles->idspectacle] = $this->getRowSpectacle($spectacles,$format,true);
$spec_old[$spectacles->idspectacle] = $spectacles->clearSpectaclesAddAllPersons($spec_old[$spectacles->idspectacle]);
// largeur du conteneur de la vignette
if (!empty($vignette_size)) {
$spec_old[$spectacles->idspectacle]['stylemore']['imagep'] = 'width:'.$vignette_size.'px;';
}
// largeur du conteneur du texte
if (!empty($colsize)) {
$spec_old[$spectacles->idspectacle]['stylemore']['descsp'] = 'width:'.$colsize.'px;';
}
}
// largeur de la colonne = vignette_size + colsize + les marges
$this->view->widget_width = $vignette_size+$colsize+10;
$this->view->li_fleche_width = $vignette_size+$colsize+5;
// widget persons et titre des listes
$this->view->widget_persons = true;
$this->view->title_widget_list = true;
if (!empty($spec)) {
$this->view->spec = $spec;
} else {
$this->view->spec = $spec_old;
$this->view->spec_old = true;
}
return $this->view('biographies/widget.html.twig');
}
// }}}
// {{{ action_gadget()
/** Gadget
*
* @Route("/biographies/{slug}/gadget", name="biographie_gadget")
*
* @access public
* @return void
*/
public function action_gadget_biographie($slug = null)
{
$this->InitController($slug, 'gadget');
parent::action_gadget();
return $this->view('biographies/gadget.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// {{{ action_gadget_presentation()
/** Gadget
*
* @Route("/biographies/{slug}/gadget-presentation/", name="biographie_gadget_presentation")
*
* @access public
* @return void
*/
public function action_gadget_presentation($slug = null)
{
$this->InitController($slug, 'gadget-presentation');
$url_widget = $_ENV['URL_THNET'].$this->url_folder.'/widget-presentation/';
$url_widget_iframe = $url_widget;
$iframe_code = '<iframe src="'.$url_widget_iframe.'" style="width:100%; height:500px;border:none;"></iframe>';
$this->view->iframe_code_html = $iframe_code;
$this->view->iframe_code = htmlentities($iframe_code);
$url_widget_ajax = $url_widget.'?v=ajax';
$rtl = "\n";
$ajax_code = '<script type="text/javascript" src="'.$_ENV['URL_THNET'].'/navigation/js/widget_thnet.js"></script>'.$rtl;
// $ajax_code .= '<script type="text/javascript">'.$rtl.'var widget_thnet_url = \''.$url_widget_ajax.'\';'.$rtl.'widgetThnet(widget_thnet_url);'.$rtl.'</script>'.$rtl;
$ajax_code .= '<div class="widget_thnet_content" data-content="'.$url_widget_ajax.'"></div>';
$this->view->ajax_code_html = trim($ajax_code);
$this->view->ajax_code = htmlentities(trim($ajax_code));
$this->extra_title = 'Widget';
$this->extra_locate = 'Widget';
return $this->view('biographies/gadget-presentation.html.twig');
}
// {{{ action_widget_presentation()
/** widget présentation de la personne
*
* @Route("/biographies/{slug}/widget-presentation/", name="biographie_widget_presentation")
*
* @access public
* @return void
*/
public function action_widget_presentation($slug = null)
{
$this->InitController($slug, 'widget-presentation');
// page sans menu et sans pide de page
$this->view->page_nobody = true;
$this->view->ultra_simple = true;
$this->context['view']->use_addthis = false;
$this->context['view']->no_montheatre = true;
// pas de tidy et format json
if (!empty($_GET['v']) && $_GET['v']=='ajax') {
$ajaxreponse = true;
$json_response = true;
}
$this->style_more[] = 'widget_thnet';
$this->context['view']->tracking_ga = '#utm_source=thnet&utm_medium=widget&utm_campaing='.$this->url_folder;
return $this->view('biographies/widget-presentation.html.twig');
}
// }}}
// {{{ action_api()
/** Spectacles de la personnes
*
*
* @access public
* @return void
*/
public function action_api($api_data=true)
{
// les spectacles
if (array_key_exists('spectacles', $this->context['params'])) {
// spectacles à l'affiche en temps que : auteur du texte, metteur en scene, acteur, technicien
$spectacles = $this->em->getRepository(Spectacles::class);
// on a pas les texts de la personne
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
// selection des spectacles aujourd'hui et demain
$params_sql_spectacles = array(
'params' => array(
'limit' => $this->getLimit(null,true), // limiter les résultats
),
'special' => array(
'publish' => 1, // spectacles en ligne
'idperson' => array(
'idperson' => $this->idperson, // la personne
),
),
);
// recherche par période
if ($this->isSearchPeriod()) {
$params_sql_spectacles['special']['period'] = array(
'start' => $this->getFromPeriod(),
'end' => $this->getToPeriod(),
);
}
// ajout des textes associés à la personne
if (!empty($this->idtexts_person)) {
$params_sql_spectacles['special']['idperson']['idtexts'] = $this->idtexts_person;
}
// affichage
$params_display = array(
'api' => true,
);
$datas = array();
// on veux les spectacles à l'affiche uniquement ou tous
if ($this->context['params']['spectacles']=='next' || $this->context['params']['spectacles']=='all') {
$params_sql_prochains = array_merge_recursive($params_sql_spectacles, array(
'special' => array(
'prochains' => true, // les prochains spectacles
),
'dbg' => array('api_spectacles_prochains','Les prochains spectacles d\'une personne')
));
$datas = $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql_prochains,$this->format_vignette,false,$params_display);
// identifiant des spectacles
if (!empty($datas)) {
foreach($datas as $k=>$v) {
$k = str_replace("@", "", $k);
$idspectacles_exclude[$k] = $k;
}
}
}
if ($this->context['params']['spectacles']=='previous' || $this->context['params']['spectacles']=='all') {
// ajouter les spectacles anciens
$params_sql_anciens = array_merge_recursive($params_sql_spectacles, array(
'special' => array(
'anciens' => true, // les anciens spectacles
),
'dbg' => array('api_spectacles_anciens','Les anciens spectacles d\'une personne')
));
// exclure les prochains
if (!empty($idspectacles_exclude)) {
$params_sql_anciens['special']['idspectacles'] = array('NOT IN', $idspectacles_exclude);
}
$datas += $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql_anciens,$this->format_vignette,false,$params_display);
}
// les textes
} elseif (array_key_exists('texts', $this->context['params'])) {
$params_sql = array(
'special' => array(
'authors' => array($this->idobject),
'join' => true, // afficher également les textes non publiés
),
'dbg' => array('texts_person','Textes de la personne')
);
$datas = $this->em->getRepository(Texts::class)->getListTexts($params_sql,array('api' => true));
// les infos de base
} elseif (is_array($this->persons)) {
$datas = [];
/** @var Persons $persons */
foreach ($this->persons as $persons) {
$infosperson = $this->em->getRepository(Persons::class)->getInfosPerson($persons->getIdperson());
$personDto = [
'lastname' => $infosperson['lastname'],
'firstname' => $infosperson['firstname'],
'permanent_url' => $_ENV['URL_THNET'].'/biographies/'.$infosperson['url_clean'].'/',
];
if (isset($_REQUEST['corvin']) && $_REQUEST['corvin'] == true) {
$personDto['idcorvin'] = $infosperson['idcorvin'];
}
$datas[] = $personDto;
}
} else {
$datas = array(
array(
'lastname' => $this->infosperson['lastname'],
'firstname' => $this->infosperson['firstname'],
'permanent_url' => $_ENV['URL_THNET'].'/biographies/'.$this->infosperson['url_clean'].'/',
)
);
// ajouter les infos complémentaires
if (!empty($GLOBALS['api']['data']) && $GLOBALS['api']['data']=='extended') {
// récupèrer la photo
$datas[0]['poster'] = $this->persons->getVignettePerson($this->idperson,array('width'=>800,'height'=>800,'direction'=>'thumb'),true);
// récupère la présentation
$datas[0]['resume'] = $this->infosperson['biotxt']['text'];
$datas[0]['facebook'] = $this->infosperson['biotxt']['facebook'];
$datas[0]['twitter'] = $this->infosperson['biotxt']['twitter'];
$datas[0]['linkedin'] = $this->infosperson['biotxt']['linkedin'];
$datas[0]['instagram'] = $this->infosperson['biotxt']['instagram'];
$datas[0]['birth_year'] = $this->infosperson['datestart'];
$datas[0]['death_year'] = $this->infosperson['dateend'];
}
}
return $datas;
}
// }}}
// {{{ action_critiques()
/** Critiques des spectacles associés à la personne
*
* @Route("/biographies/{slug}/critiques/", name="biographie_critiques")
* @Route("/biographies/{slug}/critiques/tri/{tri}", name="biographie_critiques_tri")
*
* @access public
* @return void
*/
public function action_critiques($slug = null, $tri = null)
{
$this->InitController($slug, 'critiques');
$this->context['params']['tri'] = $tri;
// recherche une année ?
$current_year = $this->getYear();
// une saison ?
$saison = $this->getSaison();
// tous les spectacles avec une critique pour trouver les saisons
$listdates = $this->getSpectaclesDates(true);
//menu critiques pour les asides
$this->context['view']->nav_critiques = array(
'dernieres-critiques' => array(
'name' => 'Dernières critiques',
'key_url' => 'dernieres-critiques'
),
'affiche-critiques' => array(
'name' => 'Spectacles à venir avec critiques',
'key_url' => 'affiche-critiques'
),
'toutes-critiques' => array(
'name' => 'Tous les spectacles',
'key_url' => 'toutes-critiques'
),
);
$params = 'dernieres-critiques';
if (!empty($this->context['params']['tri']) && array_key_exists($this->context['params']['tri'], $this->context['view']->nav_critiques)){
$params = $this->context['view']->nav_critiques[$this->context['params']['tri']]['key_url'];
}
// récupérer la liste des années et des saisons et générer les listes déroulantes
if (!empty($listdates)) {
$annees_saisons = $this->getListSeasonsYears($listdates);
// liste des saisons
$this->view->saisons = $annees_saisons['saisons'];
// $this->context['form']->addElement('select', 's', 'Saisons', array_merge(array('' => 'Choisir la saison'),$annees_saisons['saisons']), array('id' => 'saisons'));
// liste des annees
$this->view->annees = $annees_saisons['annees'];
// $this->context['form']->addElement('select', 'y', 'Années', array_diff_key(array(0 => 'Choisissez une année...'),$annees_saisons['annees'])+$annees_saisons['annees'], array('id' => 'annees'));
}
// si aucune recherche par person, par année ou par saison => recherche par saison
// if (empty($current_year) && empty($saison) && empty($idperson_director) && empty($idperson_author)) {
// prendre la dernière saison
// $saison = Date_time::getLastSaison($annees_saisons['saisons']);
// }
// recherche par saison
if (!empty($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 de recherche
$this->view->saison = $saison;
// saison précédente / suivante
$this->view->saisons_nav = $this->getSaisonsNav($annees_saisons['saisons'],$saison);
}
// annee
if (!empty($current_year)) { // recherche par année
$datestart = date('Y-m-d',mktime(0,0,0,1,1,$current_year));
$dateend = date('Y-m-d',mktime(0,0,0,12,31,$current_year));
// annee de recherche
$this->view->current_year = $current_year;
}
$where_idperson = '';
// recherche période
// if (!empty($datestart) && !empty($dateend)) {
// $where_idperson .= ' AND sc.`date` BETWEEN \''.$datestart.'\' AND \''.$dateend.'\' ';
// }
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
// trouver les contenus associés 101 et les classer par date
$this->perPage = 10;
$sql_spectacles = array(
'params' => [
// '' =>
'groupby' => 's.idspectacle',
'order' => ['ct.dateArticle', 'DESC']
],
'special' => [
'contenus_associes_critiques' => true,
'idspectacle' => $this->getSpectaclesPerson()
]
);
//affiche-critiques
if ($params == 'affiche-critiques'){
$sql_spectacles['special']['prochains'] = 700;
}
//nous recherchons les les spectacles avec critiques
if ($params != 'dernieres-critiques'){
if ($params == 'toutes-critiques'){
$sql_spectacles['params']['order'] = ['creation_date', 'DESC'];
}
$sql_spectacles_count = $sql_spectacles;
// $sql_spectacles_count['special']['count_only'] = true;
$sql_spectacles_count['special']['count_only'] = array(
'count_only_distinct' => 's.idSpectacle'
);
$sql_count_spectacles = $this->em->getRepository(Spectacles::class)->getSQLSpectacles($sql_spectacles_count['params'], $sql_spectacles_count['special']);
$nombre_critiques = $sql_count_spectacles->getSingleResult()['total'];
$this->context['view']->pagination = $this->getPagination($nombre_critiques, 10);
$this->context['view']->pagination['totalItems'] = $nombre_critiques;
$this->context['view']->pagination['spectacle'] = true;
$sql_spectacles['params']['limit'] = array($this->getLimitStart(),$this->perPage);
}
//nous recherchons les les dernières critiques
else{
$sql_critiques = array(
'special' => array(
'get_critiques_idperson' => array(
'idperson' => $this->idperson, // critiques d'un person
'idtexts_person' => $this->idtexts_person,
),
'publish' => 1, // publiées
),
'sql' => array(
'order' => 'ct.date_article DESC ',
'limit' => array(0,10), // limiter le nb de résultats
'where' => $where_idperson, // recherche spéciale
),
'dbg' => array('critiques','Liste des critiques'),
);
}
$this->view->{'title_page_'.preg_replace('/-/', '_', $params)} = true;
//nous recherchons les dernières critiques
if ($params == 'dernieres-critiques') {
$cacheItem = $this->cache->getItem("biographie_critiques_schedules_{$this->idperson}_" . str_replace(',', '-', $this->idtexts_person));
if (! $cacheItem->isHit()) {
$res = $this->em->getRepository(Contents::class)->getListContents($sql_critiques,array('get_critiques' => true));
$cacheItem->set($res)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($cacheItem);
}
$this->context['view']->critiques_list = $cacheItem->get();
}
//nous recherchons les spectacles avec critiques
else{
$this->view->spectacles = $this->em->getRepository(Spectacles::class)->getListSpectacles($sql_spectacles,null,false,['allauthors' => true]);
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/';
if ($params == 'toutes-critiques'){
$this->view->spectacles[$k]['display']['affiche_date_creation'] = true;
$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->asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'critiques'],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->nav_critiques,
'url' => '/biographies/{v_url_clean}/critiques/tri/key_url',
'params' => array(
'activate' => $params
)
),
'title' => 'Voir'
)]);
$this->asides->load(['common_participer_personne' => array(
'exec' => ['color' => 'critiques'],
)]);
$this->asides->load('bio_critiques_info');
return $this->view('biographies/critiques.html.twig');
}
// }}}
// {{{ textsByGenre()
/** Liste des textes par genre
*
*
* @param mixed $texts_person
* @param mixed $format
* @param boolean $traductions
* @access protected
* @return array
*/
protected function textsByGenre($texts_person, $format=null, $traductions=false, $by_genre=true)
{
if (empty($texts_person)) return array();
$texts = $this->em->getRepository(Texts::class);
// on peut aussi ne pas avoir de classement par genre
if ($by_genre) {
$liste_genres = $texts->getGenretextList('_aff_liste');
}
// format des vignettes
if (is_null($format)) {
$format = array('width'=>$_ENV['VIGN_TEXT_WIDTH'],'height'=>$_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
}
$genres = array();
foreach($texts_person as $idtext=>$text) {
// $text['nb_trad'] = $texts->getOriginalsTexts($idtext,'text_traduction','idtext'); //en développement
$text['nb_mes'] = $texts->countSpectacles($idtext, 1);
$text['nb_trad'] = $texts->countTranslations($idtext, 1);
$text['stylemore'] = array('imagep' => 'width:65px;', 'desctxt' => 'width:350px;');
$text['publisher_first'] = true;
$text['no_author'] = true;
if (!empty($text['date'])) {
$text['date_ecriture'] = true;
}
// on peut aussi ne pas avoir de classement par genre
if ($by_genre) {
if (empty($genres[$text['idgenretext']])) {
$genres[$text['idgenretext']] = array();
$genres[$text['idgenretext']]['genretext'] = $liste_genres[$text['idgenretext']];
$genres[$text['idgenretext']]['texts'] = array();
}
$genres[$text['idgenretext']]['texts'][$idtext] = $text;
} else {
$genres[$idtext] = $text;
}
}
// reclasser par genre
if ($by_genre) {
foreach($liste_genres as $k=>$v) {
if (!empty($genres[$k])) {
$genres_classer[$k] = $genres[$k];
}
}
$genres = $genres_classer;
}
return $genres;
}
// }}}
// {{{ action_textes()-
/** Textes
*
* @Route("/biographies/{slug}/textes/", name="biographie_textes")
* @Route("/biographies/{slug}/textes/type/{type}/", name="biographie_textes_type")
*
* @access public
* @return void
*/
public function action_textes($slug = null, $type = null)
{
$this->InitController($slug, 'textes');
$this->context['params']['type'] = $type;
$this->context['view']->show_translate = false;
$this->context['view']->detail_date = true;
// si c'est un auteur étranger, on choisi déjà les traductions puis les textes originaux
// if (!empty($this->infosperson['language_code']) && $this->infosperson['language_code']!='fr') {
// $translations_person = $this->persons->getTextsPerson($this->idperson,'search_translation',1,'fr',null,true);
// $this->view->translations_by_genre = $this->textsByGenre($translations_person);
// }
$texts_person = $this->persons->getTextsPerson($this->idperson,'original',1,null,null,true);
$this->view->texts_by_genre = $this->textsByGenre($texts_person);
// récupèrer les adaptations de l'auteur sans classement par genre
$this->view->adaptations = $this->textsByGenre($this->persons->getTextsPerson($this->idperson,'adaptation',1,null,null,true),null,false,false);
// si adaptation = les ajouter en 4ème position de texts_by_genre
/*if (!empty($adaptations)) {
foreach($this->view->texts_by_genre as $k=>$v) {
if (isset($push_adaptation)) {
$this->view->texts_by_genre[11111] = array(
'genretext' => 'Adaptation(s) de texte(s)',
'texts' => $adaptations
);
break;
}
if ($k==10) {
$push_adaptation = true;
}
}
}*/
// voir si bio_txt
$biotextes = $this->contents->getAssociateContent($this->idperson,'persons','class_biotextes',array('wiki_convert'=>true));
if (!empty($biotextes['text'])) {
$this->view->biotextes = $biotextes;
}
/* on récupère à partir du tableau la sélection de l'utilisateur sur le type de texte devant être affiché */
$menu_textes_trier = array();
// $selected_texts_by_genre = 1;
//Les adaptations théâtrale
$this->view->texts_by_genre['a']['texts'] = $this->view->adaptations;
$this->view->texts_by_genre['a']['genretext'] = 'Adaptation théâtrale';
/* on récupère la liste des différents types de textes disponibles inclus les adaptations*/
$menu_textes_trier = array();
foreach($this->view->texts_by_genre AS $k => $v){
if (!empty($v['texts'])){
$menu_textes_trier[$k] = array(
'name' => $v['genretext'],
'key_type' => $k
);
}
}
//on sélectionne le choix de l'utilisateur
$selected_texts_by_genre_default = key($menu_textes_trier);
if (!empty($this->context['params']['type'])){
$selected_texts_by_genre = $this->context['params']['type'];
if (!array_key_exists($selected_texts_by_genre, $this->view->texts_by_genre)){
$selected_texts_by_genre = $selected_texts_by_genre_default;
}
$texts_by_genre[$selected_texts_by_genre] = $this->view->texts_by_genre[$selected_texts_by_genre];
unset($this->view->texts_by_genre);
$this->view->texts_by_genre = $texts_by_genre;
}
$return_params = $this->getAsidesTextesAuteurs(['htmlend' => true]);
if ($return_params){
$this->asides->load(['url_lists,tri_genre' => array(
'exec' => array(
'htmlend' => (!empty($return_params['htmlstart'])) ? true : false,
'color' => 'textes'
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes_trier,
'url' => '/biographies/{v_url_clean}/textes/type/key_type',
'params' => array(
'activate' => (!empty($selected_texts_by_genre)) ? $selected_texts_by_genre : null
)
),
'title' => 'Trier'
)]);
}
$this->getAsidesTextesSurAuteurs();
$this->getAsidesTraductions($this->infosperson['firstname'].' '.$this->infosperson['lastname'], false);
return $this->view('biographies/textes.html.twig');
}
// }}}
// {{{ action_textes_sur_auteurs()
/** Les textes sur l'auteur
*
* @Route("/biographies/{slug}/textes-sur-auteurs", name="biographie_textes_sur_auteurs")
*
* @access public
* @return void
*/
public function action_textes_sur_auteurs($slug = null)
{
$this->InitController($slug, 'textes-sur-auteurs');
$params_link = array(
'order' => 'T1.publication_year DESC'
);
$this->context['view']->texts_list = $this->persons->getAssociateTexts($this->idperson,null,null,$params_link);
//On affichage le détails des textes
$this->context['view']->detail_date = true;
$this->getAsidesTextesAuteurs(['htmlend' => true]);
$this->getAsidesTextesSurAuteurs();
$this->getAsidesTraductions($this->infosperson['firstname'].' '.$this->infosperson['lastname']);
return $this->view('biographies/textes-sur-auteurs.html.twig');
}
// {{{ action_textes_traductions()
/** Traductions des textes par d'autres auteurs
*
* @Route("/biographies/{slug}/textes-traductions/", name="biographie_textes_traductions")
*
* @access public
* @return void
*/
public function action_textes_traductions($slug = null)
{
$this->InitController($slug, 'textes-traductions');
$texts = $this->em->getRepository(Texts::class);
$texts->getPersons();
$this->context['view']->show_editor = true;
$this->context['view']->show_translate = true;
$this->context['view']->show_vo = true;
$x = $this->persons->getTextsPerson($this->idperson,'count_all_texts_translations',1,null,null,true);
$sql_derniers_traductions_publi = '
SELECT DISTINCT(t.idtext),c.organisation,
c.url_clean as url_clean_publisher, c.country as publisher_country,
CONCAT_WS(\'-\',t.publication_year,t.publication_month,\'01\') as datepublication,
t.*
FROM text_traduction tt, texts t
LEFT OUTER JOIN contacts c ON c.idcontact=t.idcontact_publisher';
$where = ' WHERE 1
AND tt.idtexttraduction=t.idtext
AND t.publish=1
AND tt.idtext IN (
SELECT idtext
FROM text_author
WHERE idperson='.$this->idperson.'
)';
$nombretexttraductions = $x;
$this->context['view']->pagination = $this->getPagination($nombretexttraductions);
$this->context['view']->pagination['traductions'] = true;
$this->context['view']->pagination['totalItems'] = $nombretexttraductions;
$where .= 'ORDER BY date DESC ';
$limit = ' LIMIT '.$this->getLimitStart().', '.$this->perPage;
$datas = $texts->query($sql_derniers_traductions_publi.$where.$limit);
$derniers_traductions_publi = array();
foreach($datas AS $data){
$texts->loadResult($data);
$derniers_traductions_publi[$texts->idtext] = $this->getInfosTextPerson($texts);
$derniers_traductions_publi[$texts->idtext]['nb_mes'] = $texts->countSpectacles($texts->idtext, 1);
$derniers_traductions_publi[$texts->idtext]['nb_trad'] = $texts->countTranslations($texts->idtext, 1);
if (!empty($texts->date)){
$derniers_traductions_publi[$texts->idtext]['date_ecriture'] = true;
}
}
$this->view->derniers_traductions_publi = $derniers_traductions_publi;
$menu_textes_textes = array(
array(
'name' => 'Tous les textes',
'url' => '/biographies/key_controller/key_sub/',
'key_sub' => 'textes'
),
array(
'name' => 'Les textes par l\'auteur',
'url' => '/biographies/key_controller/key_sub/',
'key_sub' => 'textes-auteurs',
'count' => $this->count_textes_par_auteurs()
),
);
// aside
$this->asides->load(['url_lists_alone,bio_textes' => array(
'exec' => [
'color' => 'textes'
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes_textes,
'url' => '/biographies/{v_url_clean}/textes/',
'params' => array(
'key_controller' => $this->context['view']->url_clean,
'activate' => $this->context['action']
)
),
'title' => 'Texte(s)',
)]);
$this->getAsidesTraductions($this->infosperson['firstname'].' '.$this->infosperson['lastname']);
return $this->view('biographies/textes-traductions.html.twig');
}
// }}}
// {{{ action_traductions()
/** Traductions
*
* @Route("/biographies/{slug}/traductions/", name="biographie_traductions")
*
* @access public
* @return void
*/
public function action_traductions($slug = null)
{
$this->InitController($slug, 'textes');
$this->context['view']->show_translate = false;
// recuperer les traductions
$texts_person = $this->persons->getTextsPerson($this->idperson,'translator_translation',1,null,null,true);
$this->view->affiche_original_author = true;
// filtrer par genre
$this->view->texts_by_genre = $this->textsByGenre($texts_person);
/* on récupère à partir du tableau la sélection de l'utilisateur sur le type de texte devant être affiché */
$menu_textes_trier = array();
$selected_texts_by_genre = 1;
//Les adaptations théâtrale
$this->view->texts_by_genre['a']['texts'] = (!empty($this->view->adaptations)) ? $this->view->adaptations : '';
$this->view->texts_by_genre['a']['genretext'] = 'Adaptation théâtrale';
/* on récupère la liste des différents types de textes disponibles inclus les adaptations*/
$menu_textes_trier = array();
foreach($this->view->texts_by_genre AS $k => $v){
$menu_textes_trier[$k] = array(
'name' => $v['genretext'],
'key_type' => $k
);
}
//on sélectionne le choix de l'utilisateur
$selected_texts_by_genre_default = key($menu_textes_trier);
if (!empty($this->context['params']['type'])){
$selected_texts_by_genre = $this->context['params']['type'];
if (!array_key_exists($selected_texts_by_genre, $this->view->texts_by_genre)){
$selected_texts_by_genre = $selected_texts_by_genre_default;
}
$texts_by_genre[$selected_texts_by_genre] = $this->view->texts_by_genre[$selected_texts_by_genre];
unset($this->view->texts_by_genre);
$this->view->texts_by_genre = $texts_by_genre;
}
$this->getAsidesTextesAuteurs();
$this->getAsidesTraductions($this->infosperson['firstname'].' '.$this->infosperson['lastname']);
return $this->view('biographies/traductions.html.twig');
}
// }}}
// {{{ action get aside pour les videos
/**
*
*/
public function getAsidesVideos($action = 'dvds', $nb_videos_partenariats = null, $filtre_captation = null)
{
$multimedias = $this->em->getRepository(Multimedias::class);
if (is_null($nb_videos_partenariats)){
$params_query_commun = array(
'object' => array($this->idobject => ['persons']),
'where' => array(array('multimedias','audio_video',2)),
'order' => array('multimedias.date'),
'limit' => array('all'),
'dbg' => array('last_commun','Vidéos en partenariat du contact'),
);
$sql_dates_multimedias = $multimedias->getSQLMultimedias($params_query_commun, false);
$total = $multimedias->queryAll($sql_dates_multimedias);
}
if (empty($this->context['view']->nb_spectacles_anciens)){
$this->action_spectacles(null, false);
}
if (!isset($this->context['view']->nb_spectacles_videos_count)){
if ($lists_spectacles = $this->getSpectaclesPerson()) {
$this->getParamsSpectaclesVideos($lists_spectacles);
}
}
//La liste des menu qui sera affiché à travers les asides
//aside
$this->context['view']->menu_videos = array(
'affiche' => array(
'name' => 'Spectacles à venir',
'key_genre' => 'affiche',
'count' => (!empty($this->context['view']->nb_spectacles_videos_count['affiche'])) ? $this->context['view']->nb_spectacles_videos_count['affiche'] : 0
),
'anciens' => array(
'name' => 'Spectacles passés',
'key_genre' => 'anciens',
'count' => (!empty($this->context['view']->nb_spectacles_videos_count['anciens'])) ? $this->context['view']->nb_spectacles_videos_count['anciens'] : 0
),
'all' => array(
'url' => '/biographies/{v_url_clean}/videos/type/key_genre',
'name' => 'Toutes les vidéos',
'key_genre' => 'all',
'count' => (isset($this->context['view']->nb_spectacles_videos_type['all'])) ? (int)$this->context['view']->nb_spectacles_videos_type['all'] : null
)
);
$this->asides->load(['url_lists' => array(
'exec' => array(
'htmlstart' => true,
'htmlend' => true,
// 'htmlend' => (in_array($this->context['view']->type_spectacle, ['anciens','partenariat'])) ? false : true,
'color' => 'videos',
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_videos,
'url' => '/biographies/{v_url_clean}/videos/periode/key_genre',
'params' => array(
'activate' => ($action != 'dvd' && $action != 'captations') ? $this->context['view']->type_spectacle : ''
),
),
'title' => html_entity_decode('Voir'),
)]);
// if (in_array($this->context['view']->type_spectacle, ['anciens','partenariat'])){
// $this->asides->load(['par_saison' => array(
// 'exec' => array(
// 'htmlend' => true,
// 'color' => 'videos',
// ),
// 'php' => array(
// 'method' => 'asidesUrlListsForms',
// 'url' => '/biographies/{v_url_clean}/videos/type/key_type/',
// 'params' => array(
// 'key_type' => $this->context['view']->type_spectacle
// )
// ),
// 'title' => html_entity_decode('Recherche par période')
// )]);
// }
if (empty($this->view->subaside_action)){
$this->view->subaside_action = null;
}
$count_dvds = $this->getDvds(true);
$podcasts = $this->em->getRepository(Podcasts::class);
$culturebox_params = array(
'special' => array(
'type_podcast' => 'culturebox', //commun
'is_integrale' => true, //commun
'idpersons' => $this->idobject,
'current' => true
),
'dbg' => array('culturebox_data', 'Les replay culturebox'),
);
$nb_captations = $podcasts->countListPodcasts($culturebox_params);
$culturebox_params_vod = array(
'special' => array(
'type_podcast' => 'culturebox', //commun
'idpersons' => $this->idobject,
'type_diffusion' => 1
),
'dbg' => array('culturebox_data', 'Les vods culturebox'),
);
$nb_vod = $podcasts->countListPodcasts($culturebox_params_vod);
$culturebox_params_vod['special']['type_diffusion'] = 2;
$nb_svod = $podcasts->countListPodcasts($culturebox_params_vod);
$contact_dvd = array(
'dvd' => array(
'name' => 'DVD',
'key_url' => '/biographies/' . $this->context['view']->url_clean . '/dvd',
'count' => $count_dvds,
'key_type' => 'dvd_'
),
'captations' => array(
'name' => 'Captation(s) en streaming (gratuit)',
'key_url' => '/biographies/' . $this->context['view']->url_clean . '/captations',
'count' => $nb_captations,
'key_type' => 'captations_'
),
'vod' => array(
'name' => 'VOD',
'key_url' => '/biographies/' . $this->context['view']->url_clean . '/captations/type/vod',
'count' => $nb_vod,
'key_type' => 'captations_vod'
),
'svod' => array(
'name' => 'SVOD',
'key_url' => '/biographies/' . $this->context['view']->url_clean . '/captations/type/svod',
'count' => $nb_svod,
'key_type' => 'captations_svod'
)
);
if ($count_dvds>0 || $nb_captations > 0) {
$this->asides->load(['url_lists_alone,contact_dvd' => array(
'exec' => ['alone' => true,'color' => 'videos'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $contact_dvd,
'url' => 'key_url',
'params' => array(
'activate' => $action.'_'.$this->view->subaside_action
)
],
'title' => 'Films & Captations'
)]);
}
if (!empty($this->context['view']->filtre_culturebox)){
$this->asides->load(['url_lists_alone' => array(
'exec' => ['alone' => true,'color' => 'videos'],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->filtre_culturebox,
'url' => '/biographies/' . $this->context['view']->url_clean . '/captations/filtre/key_type',
'params' => array(
'key_type' => 'auto_key',
'activate' => $filtre_captation,
)
),
'title' => 'Filtres'
)]);
$this->asides->load('common_partenaire_culturebox');
}
$this->asides->load(['common_participer_contacts' => array(
'exec' => ['color' => 'videos']
)]);
}
// {{{ getAsidesDates()
/** Création des asides pour les dates
*
*
* @access private
*/
private function getAsidesDates(){
$currentSaison = Date_time::getLastSaison();
$implode_currentSaison = explode('-', $currentSaison);
$nextSaison = Date_time::getNextSaison($currentSaison);
$implode_nextSaison = explode('-', $nextSaison);
$this->getSpectaclesPremieres(['count' => true, 'current_saison' => $currentSaison]);
$menu_premieres = [
[
'url' => '/biographies/{v_url_clean}/dates/',
'name' => 'Toutes les dates',
'key_type' => 'all'
],
[
'name' => 'Première(s)',
'key_type' => 'premieres',
'key_type_a' => 'premieres_0',
'count' => $this->getSpectaclesPremieres(['count' => true])
],
// [
// 'name' => 'Première(s) en France',
// 'key_type' => 'france',
// 'count' => $this->getSpectaclesPremieres(['count' => true, 'france' => true])
// ],
[
'name' => 'Première(s) de la saison '.substr($implode_currentSaison[0], -2, 2).'/'.substr($implode_currentSaison[1], -2, 2),
'key_type' => 'saison',
'key_type_a' => 'saison_0',
'count' => $this->getSpectaclesPremieres(['count' => true, 'current_saison' => $currentSaison, 'having_start_to_saison' => true])
],
[
'name' => 'Première(s) de la saison '.substr($implode_nextSaison[0], -2, 2).'/'.substr($implode_nextSaison[1], -2, 2),
'key_type' => 'saison',
'key_type_a' => 'saison_1',
'key_saison' => 1,
'count' => $this->getSpectaclesPremieres(['count' => true, 'current_saison' => $nextSaison, 'having_start_to_saison' => true])
]
];
$active_saison = 'all';
if (!empty($this->context['params']['type'])){
$active_saison = $this->context['params']['type'];
if (isset($_GET['next'])){
$active_saison .= '_'.(int)$_GET['next'];
}
else{
$active_saison .= '_0';
}
}
$this->asides->load(['url_lists' => array(
'exec' => [
'color' => 'spectacles',
'htmlstart' => true,
'htmlend' => (empty($this->context['view']->menu_aside_dates)) ? true : false
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_premieres,
'url' => '/biographies/{v_url_clean}/premieres/generate_params',
'params' => array(
'activate' => $active_saison,
'key_test' => 'key_type',
),
'structure' => array(
'type' => 'key_type',
'structure_classic' => array(
'next' => 'key_saison'
)
)
),
'title' => 'Voir'
)]);
if (!empty($this->context['view']->menu_aside_dates)) {
$this->asides->load(['url_lists,filtre' => array(
'exec' => [
'color' => 'spectacles',
'htmlend' => true,
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_aside_dates,
'url' => '/biographies/{v_url_clean}/dates/#params',
),
'title' => 'Recherche par période'
)]);
}
$this->context['view']->area = $this->context['params']['area'] ?? null;
$this->asides->load(['common_carte' => array(
'url' => '/biographies/'.$this->context['view']->url_clean.'/premieres/type/france/area/get_id',
'disable_menu' => true
)]);
$this->asides->load('common_participer_personne');
}
// }}}
public function getParamsSpectaclesVideos($lists_spectacles)
{
$params_sql_spectacles = array(
'params' => array(
'groupby' => 's.idspectacle',
'order' => ['creation_date', 'DESC'],
'limit' => 'all'
),
'special' => array(
// 'idperson_author' => true,
// 'idperson_idtexts' => $this->idtexts_person,
'multimedias_videos_associes' => true,
'idspectacle' => $lists_spectacles
),
'dbg' => array('nb_spectacles_author', 'Les spectacles à partir des textes de la personne')
);
foreach (['affiche', 'anciens'] AS $value) {
$params_sql_spectacles_count = $params_sql_spectacles;
if ($value == 'affiche') {
$params_sql_spectacles_count['special']['prochains'] = '720';
} else {
$params_sql_spectacles_count['special']['anciens'] = true;
}
$this->context['view']->nb_spectacles_videos_count[$value] = $this->em->getRepository(Spectacles::class)->countListSpectacles($params_sql_spectacles_count);
}
return $params_sql_spectacles;
}
// {{{ getAsideListesFranceCulture()
/** Création de l'aside pour france culture
*
*
* @access private
*/
private function getAsideListesFranceCulture($params = array()){
// france culture et culture box
$podcasts = $this->em->getRepository(Podcasts::class);
// Podcast France Culture => les derniers référencés
$franceculture_params = array(
//'direction' => 'DESC',
'limit' => array(0,3),
'special' => array(
'idpersons' => $this->idperson,
'type_podcast' => 'franceculture',
),
'dbg' => array('derniers_franceculture', 'Les derniers podcasts franceculture référencés'),
);
$this->context['view']->derniers_franceculture = $derniers_franceculture = $podcasts->getListPodcasts($franceculture_params);
$this->asides->load(['franceculture_lastpodcast_iframe' => [
'podcast' => $derniers_franceculture,
'custom_url' => '/'.$this->context['controller'].'/'.$this->context['view']->url_clean.'/podcasts'
]] );
}
// }}}
// {{{ getAsidesTextesAuteurs()
/** Liste des asides pour les traductions
*
*
* @access private
*/
private function getAsidesTextesAuteurs($params = array()){
//Si il existe des textes associés à la personne
$total_textes = ($this->infosperson['is_author']>0 || $this->contents->countAssociateContent('persons',$this->idperson,'class_biotextes')) ? 1 : 0;
// playlist - par l'auteur
$total_textes_par_auteurs = $this->count_textes_par_auteurs();
//Les livres sur l'auteur (par d'autres auteurs)
$total_textes_sur_auteurs = $this->persons->getAssociateTexts($this->idperson, null, null, ['count_only' => true]);
// if ($this->persons->getAssociateTexts($this->idperson,'','',['count_only' => true])){
$menu_textes_textes = array(
array(
'name' => 'Tous les textes',
'url' => '/biographies/key_controller/key_sub/',
'key_sub' => 'textes',
'count' => $total_textes
),
array(
'name' => 'Les textes par l\'auteur',
'url' => '/biographies/key_controller/key_sub/',
'key_sub' => 'textes-auteurs',
'count' => $total_textes_par_auteurs
),
);
// aside
if ($total_textes_par_auteurs || $total_textes || $total_textes_sur_auteurs){
$params_aside = array(
'exec' => [
'htmlstart' => true,
'htmlend' => true,
'color' => 'textes'
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes_textes,
'url' => '/biographies/{v_url_clean}/textes/',
'params' => array(
'key_controller' => $this->context['view']->url_clean,
'activate' => $this->context['action']
)
),
'title' => 'Texte(s)',
);
if (!empty($params['htmlend'])){
$params_aside['exec']['htmlend'] = false;
}
$this->asides->load(['url_lists,bio_textes' => $params_aside]);
return ['htmlstart' => true];
}
else{
return false;
}
}
// }}}
// {{{ getAsidesTextesSurAuteurs()
/** Liste des asides pour les traductions
*
*
* @access private
*/
private function getAsidesTextesSurAuteurs($params = array())
{
//Les livres sur l'auteur (par d'autres auteurs)
$total_textes_sur_auteurs = $this->em->getRepository(Persons::class)->getAssociateTexts($this->idperson, null, null, ['count_only' => true]);
$urls_menu = [
[
'name' => 'Tous les textes',
'url' => '/biographies/key_controller/key_sub/',
'key_sub' => 'textes-sur-auteurs',
'count' => $total_textes_sur_auteurs
]
];
if (!empty($total_textes_sur_auteurs)){
$params_aside = array(
'exec' => [
'htmlstart' => true,
'htmlend' => true,
'color' => 'textes'
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $urls_menu,
'url' => '/biographies/{v_url_clean}/textes/',
'params' => array(
'key_controller' => $this->context['view']->url_clean,
'activate' => $this->context['action']
)
),
'title' => 'sur '.$this->infosperson['lastname'].' '.$this->infosperson['firstname'],
);
if (!empty($params['htmlend'])){
$params_aside['exec']['htmlend'] = false;
}
$this->asides->load(['url_lists,textes_sur_auteur' => $params_aside]);
}
}
// }}}
// {{{ action_scenes()
/** Liste des asides pour les traductions
*
*
* @access private
*/
private function getAsidesTraductions($name = '', $getAsidesTextesAuteurs = true){
$menu_textes_traduction_par_auteur = array(
array(
'name' => 'Toutes ses traductions',
'url' => '/biographies/key_controller/traductions',
'key' => 'traductions'
)
);
$menu_textes_traduction_de_auteur = array(
array(
'name' => 'Toutes les traductions de ses textes',
'url' => '/biographies/key_controller/textes-traductions',
'key' => 'textes-traductions'
)
);
if ($this->persons->getTextsPerson($this->idperson,'translator_translation_count',1,null,null,true)){
$this->asides->load(['url_lists_alone,bio_traduction_par_auteur' => array(
'exec' => [
'color' => 'textes'
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes_traduction_par_auteur,
'params' => array(
'key_controller' => $this->context['view']->url_clean,
'activate' => $this->context['action']
)
),
'title' => 'Traductions',
'subtitle' => (!empty($name)) ? 'par '.$name.'' : '',
)]);
}
if ($this->persons->getTextsPerson($this->idperson,'count_all_texts_translations',1,null,null,true)){
$this->asides->load(['url_lists_alone,bio_traduction_de_auteur' => array(
'exec' => [
'color' => 'textes'
],
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_textes_traduction_de_auteur,
'params' => array(
'key_controller' => $this->context['view']->url_clean,
'activate' => $this->context['action']
)
),
'title' => 'Traductions',
'subtitle' => (!empty($name)) ? 'des textes de '.$name.'' : '',
)]);
}
if ($getAsidesTextesAuteurs){
$this->getAsidesTextesAuteurs($this->infosperson['firstname'].' '.$this->infosperson['lastname']);
}
$this->asides->load(['common_participer_personne' => array(
'exec' => ['color' => 'textes']
)]);
}
// }}}
// {{{ action_scenes()
/** Mises en scène
*
*
* @access public
* @return void
*/
public function action_scenes() {
return $this->redirectToRoute('biographie_spectacles', ['slug' => $this->infosperson['url_clean']], Response::HTTP_MOVED_PERMANENTLY);
}
// }}}
// {{{ action_acteur()
/** Interprétations
*
*
* @access public
* @return void
*/
public function action_acteur() {
return $this->redirectToRoute('biographie_spectacles', ['slug' => $this->infosperson['url_clean']], Response::HTTP_MOVED_PERMANENTLY);
}
// }}}
// {{{ action_activites()
/** Autres activités
*
*
* @access public
* @return void
*/
public function action_activites()
{
$this->extra_locate = $this->extra_title = 'Autres activités';
// voir si bioautres
$bioautres = $this->contents->getAssociateContent($this->idperson,'persons','class_bioautres',array('wiki_convert'=>true));
if (!empty($bioautres['text'])) {
$this->view->bioautres = $bioautres;
}
}
// }}}
// {{{ action_videos()
/** Vidéos associés à cette personne
*
* @Route("/biographies/{slug}/videos/", name="biographie_videos")
* @Route("/biographies/{slug}/videos/type/{type}", name="biographie_videos_type")
* @Route("/biographies/{slug}/videos/periode/{periode}", name="biographie_videos_periode")
*
* @access public
* @return void
*/
public function action_videos($slug = null, $type = null, $periode = null)
{
$this->InitController($slug, 'videos');
$this->context['params']['type'] = $type;
$this->view->context['params']['type'] = &$this->context['params']['type'];
$this->context['params']['periode'] = $periode;
$this->view->context['params']['periode'] = &$this->context['params']['periode'];
$type_filtre = (!empty($this->view->context['params']['type'])) ? $this->view->context['params']['type'] : null;
$videos = array();
$set_format = array('width'=>$_ENV['VIGN_VIDEO_WIDTH'],'height'=>$_ENV['VIGN_VIDEO_HEIGHT'],'fleche'=>'none','ratio' => '169');
$this->context['view']->contactsvideos = true;
//Comptes du toal des vidéos liés à une personne
//les prochains spectacles avec vidéos
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
if ($lists_spectacles = $this->getSpectaclesPerson()) {
$params_sql_spectacles = $this->getParamsSpectaclesVideos($lists_spectacles);
}
//FIN Comptes du toal des vidéos liés à une personne
//Toutes les vidéos qui ne sont pas des vidéos liés aux spectacles
if (!is_null($type_filtre)){
$liste_total = $this->getMultimediasPerson(array('count' => true));
//affichage du block classique dans la vue
$this->view->videos_classic = true;
//Nombre d'élément limité à 20
$this->perPage = 20;
//Tout ce qui concerne la pagination
$this->context['view']->pagination = $this->getPagination($liste_total);
$this->context['view']->pagination['custom'] = true;
$this->context['view']->pagination['custom_name'] = 'vidéos';
$this->context['view']->pagination['totalItems'] = $this->context['view']->pagination['total'];
//Limitation pour la pagination
$limit = array(
'limit' => array($this->getLimitStart(),$this->perPage)
);
$liste = $this->getMultimediasPerson($limit);
foreach($liste as $item) {
$idmultimedia = $item['idmultimedia'];
$multimedias = $this->em->getRepository(Multimedias::class);
$videos[$idmultimedia] = $multimedias->getInfosMultimedia($idmultimedia,false,false,array('vignette' => $set_format,'tableau'=>true));
}
}
//Toutes les vidéos liés à une personne
else {
//les prochains spectacles avec vidéos
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
$periode_filtre_default = 'affiche';
$periode_filtre = (!empty($this->view->context['params']['periode'])) ? $this->view->context['params']['periode'] : $periode_filtre_default;
if ($lists_spectacles){
$redirect = false;
foreach(['affiche', 'anciens'] AS $value){
//si il n'y a pas de vidéo, nous redirigons l'utilisateur sur une autre page
if ($this->context['view']->nb_spectacles_videos_count[$value] == 0 && $value == $periode_filtre){
$redirect = true;
}
else if ($redirect){
$custom_path = $value;
}
}
if ($redirect){
return $this->redirectToRoute('biographie_videos_type', ['slug' => $this->infosperson['url_clean'], 'type' => 'all']);
}
else if (!empty($custom_path)){
return $this->redirectToRoute('biographie_videos_periode', ['slug' => $this->infosperson['url_clean'], 'periode' => $custom_path]);
}
if ($periode_filtre == 'affiche'){
$params_sql_spectacles['special']['prochains'] = '720';
}
else{
$params_sql_spectacles['special']['anciens'] = true;
}
$this->context['view']->{'spectacle_'.$periode_filtre} = true;
$this->context['view']->nb_spectacles_texts = $this->em->getRepository(Spectacles::class)->countListSpectacles($params_sql_spectacles);
if (!is_numeric($this->context['view']->nb_spectacles_texts)){
$this->context['view']->nb_spectacles_texts = 0;
}
$this->perPage = 10;
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_spectacles_texts);
//affichage des spectacles
$this->context['view']->pagination['spectacle'] = true;
$this->context['view']->pagination['totalItems'] = $this->context['view']->pagination['total'];
unset($this->context['view']->pagination['total']);
$params_sql_spectacles['params']['limit'] = array($this->getLimitStart(),$this->perPage);
$listes = $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql_spectacles);
foreach($listes AS $idspectacle => $spectacle){
$multimedias = $this->em->getRepository(Multimedias::class);
$videos[$idspectacle] = $multimedias->getInfosMultimedia($spectacle['idmultimedia'],false,false,array('vignette' => $set_format,'tableau'=>true));
//la date de création uniquement pour les spectacles passés
if ($periode_filtre == 'anciens'){
$spectacle['annee_creation'] = $this->em->getRepository(Spectacles::class)->getYear($spectacle['creation_date_us']);
$spectacle['footer_creation_date'] = true; //on force l'affichage de la date de création
// $spectacle['footer_artiste_associe'] = true; //on force l'affichage de la date de création
$spectacle = $this->em->getRepository(Spectacles::class)->clearSpectaclesAddAllPersons($spectacle);
}
if ($periode_filtre == 'affiche'){
$spectacle['schedule'] = $this->em->getRepository(Spectacles::class)->getProchDateLieu(
array(),
$spectacle['idspectacle']
);
}
$videos[$idspectacle]['spectacle'] = $spectacle;
}
}
else{
return $this->redirectToRoute('biographie_videos_type', ['slug' => $this->infosperson['url_clean'], 'type' => 'all']);
}
}
$this->view->spectacles_videos = $videos;
$this->extra_locate = 'Vidéos';
$filtre_activate = 'prochains';
if (isset($periode_filtre)){
$filtre_activate = $periode_filtre;
}
else if ($type_filtre){
$filtre_activate = $type_filtre;
}
$this->context['view']->type_spectacle = $filtre_activate;
// Get number of video of type all to display or not the 'Toutes les vidéos' aside link
$this->context['view']->nb_spectacles_videos_type['all'] = $this->getMultimediasPerson(array('count' => true));
//aside
$this->getAsidesVideos('videos',null);
//pour le titre de la page
$this->view->entete_page[$filtre_activate] = true;
$subtitle = "Toutes les vidéos des spectacles";
if ($filtre_activate != "all" && !empty($this->context['view']->menu_periodes[$filtre_activate]['name'])){
$subtitle = $this->context['view']->menu_periodes[$filtre_activate]['name'].' en vidéos';
}
$url = $_ENV['URL_THNET'].'/biograpahies/'.$this->infosperson['url_clean'].'/'.$this->context['action'].'/videos/';
$title = $this->infosperson['fullname'].' - '.$subtitle;
$this->setReseauSocial($title, null, $url);
return $this->view('biographies/videos.html.twig');
}
// }}}
// {{{ action_dvd()
/** DVD associés à cette personne
*
* @Route("/biographies/{slug}/dvd/", name="biographie_dvd")
*
* @access public
* @return void
*/
public function action_dvd($slug = null)
{
$this->InitController($slug, 'videos');
$periode_filtre = null;
$dvds = $this->em->getRepository(Dvds::class);
$nb_dvds = $dvds->countDvds('persons',$this->idperson);
if ($nb_dvds>0) {
$params_sql = array(
'limit' => array(0, 1000),
'dbg' => array('dvds_dernier', 'Liste des DVD'),
'special' => array(
'idpersons' => array($this->idperson),
)
);
$this->view->list_dvds = $dvds->getListDvds($params_sql);
} else {
$this->view->list_dvds = [];
}
$this->extra_locate = 'DVD';
$this->extra_title = 'DVD';
//aside
$contact_dvd = array(
array(
'name' => 'DVD',
'key_url' => '/biographies/' . $this->context['view']->url_clean . '/dvd'
)
);
$this->getAsidesVideos('dvd', null);
return $this->view('biographies/dvd.html.twig');
}
// }}}
// {{{ action_spectacle()
/** Spectacles associés à cette personne
*
*
* @access public
* @return void
*/
public function action_spectacle()
{
// les mises en scene d'un texte
$idtext = (int)$this->context['params']['idtext'];
if (!empty($idtext)) {
$texts = $this->em->getRepository(Texts::class);
$text = $texts->getInfosText($idtext);
if (!empty($text['title'])) {
// recuperer les mises en scene d'un texte et de ses traductions
// liste des textes
$sql_texts = '
SELECT tt.idtexttraduction
FROM text_traduction tt, texts t
WHERE t.idtext=tt.idtext
AND t.publish=1
AND tt.idtext='.$idtext.'
UNION
SELECT idtext
FROM texts
WHERE publish=1
AND idtext='.$idtext;
$results_texts = $this->persons->queryAll($sql_texts);
foreach($results_texts as $k=>$v) {
$ids_texts[$v['idtexttraduction']] = $v['idtexttraduction'];
}
$spectacles = $this->em->getRepository(Spectacles::class);
$params = array(
'params' => array(
'where' => ' AND t.idtext IN ('.join(',', $ids_texts).') ',
'order' => ['creation_date', 'DESC'],
'limit' => array(0,200)
),
'special' => array(
'plus_proche' => true,
),
'dbg' => array('spectacle_txt', 'Spectacles associés au texte')
);
// affichage
$params_display = array(
'stylemore' => array('imagep' => 'width:80px;', 'descsp' => 'width:500px;'),
'vignette' => array('width'=>65,'height'=>65,'forme'=>'round','direction'=>'crop','valround'=>7),
'display' => array( // ne pas afficher l'auteur et le titre
'no_author' => true,
'no_title' => true,
)
);
$list_spectacles = $spectacles->getListSpectacles($params,$params_display);
$this->infosperson['text'] = $text;
$this->infosperson['spectacles'] = $list_spectacles;
}
}
if (isset($this->context['params']['from']) && ($this->context['params']['from'] == 'traductions')) {
$this->view->from_traductions = true;
$this->extra_title = 'Événements autour du texte traduit';
} else {
$this->extra_title = 'Événements autour du texte';
}
if (!empty($text['title'])) {
$this->extra_title .= ' « '.$text['title']. ' »';
}
$this->extra_locate = $this->extra_title;
$this->view->textson = 'on';
//asides
$this->asides->load('common_participer_personne');
}
// }}}
// {{{ action_spectacles()
/** Spectacles associés à une personne
*
* @Route("/biographies/{slug}/spectacles/", name="biographie_spectacles")
* @Route("/biographies/{slug}/spectacles/type/{type}", name="biographie_spectacles_type")
* @Route("/biographies/{slug}/spectacles/type/{type}/periode/{periode}", name="biographie_spectacles_type_periode")
*
* @access public
* @return void
*/
public function action_spectacles($slug = null, $execute_corps_page = true, $type = null, $periode = null)
{
if ($execute_corps_page){
$this->context['params']['type'] = $type;
$this->context['params']['periode'] = $periode;
}
if ($execute_corps_page && empty($params)) {
$this->InitController($slug, 'spectacles');
$this->perPage = 20;
$this->context['view']->current_page = 'spectacles';
}
if (empty($this->idperson)) {
return $this->redirectToRoute('erreur_type', ['type' => 'introuvable']);
}
$default_type_spectacle = 'all';
$texts = $this->em->getRepository(Texts::class);
$spectacles = $this->em->getRepository(Spectacles::class);
$this->context['view']->menu_periodes = array(
'all' => array(
'name' => 'Tous les spectacles associés',
'key_genre' => 'all'
),
'affiche' => array(
'name' => 'À venir',
'is_simple' => true,
'key_genre' => 'affiche'
)
);
// 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';
}
// marquer l'élément actif
// $this->context['view']->menu_periodes[$this->context['view']->periode_spectacle]['activate'] = 'on';
// tous les spectacles
$roles['all']['type'] = 'spectacles';
$roles['all']['name'] = 'Tous';
$this->context['view']->menu_types_spectacle['all'] = array(
'name' => 'Toutes',
);
$spectacle_roles = $this->persons->getSpectacleRoles($this->idperson);
if ($this->infosperson['sexe']==2) {
$sexe = 'female';
} else {
$sexe = 'male';
}
foreach($spectacle_roles as $k=>$v) {
$exist = false;
foreach($roles as $rk=>$rv) {
if (!empty($rv['name']) && $v['role_'.$sexe]==$rv['name']) {
$roles[$rk]['idrole'][] = $v['idrole'];
$exist = true;
}
}
if (!$exist) {
$roles[$v['role']]['type'] = 'spectacle_person';
$roles[$v['role']]['name'] = $v['role_'.$sexe];
$roles[$v['role']]['idrole'] = array($v['idrole']);
$this->context['view']->menu_types_spectacle[$v['role']] = array(
'name' => $v['role_'.$sexe],
);
}
}
// des spectacles ou la personne est l'auteur
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
if (!empty($this->idtexts_person)) {
$params_sql_texts = array(
'special' => array(
'idperson_author' => true,
'idperson_idtexts' => $this->idtexts_person,
),
'dbg' => array('nb_spectacles_author', 'Les spectacles à partir des textes de la personne')
);
$this->context['view']->nb_spectacles_texts = $this->em->getRepository(Spectacles::class)->countListSpectacles($params_sql_texts);
$roles['author'] = array(
'type' => 'text_author',
'name' => 'Auteur',
'idtexts' => $this->idtexts_person,
'nb_spectacles_texts' => $this->context['view']->nb_spectacles_texts,
);
if ($roles['author']['nb_spectacles_texts']>0) {
$this->context['view']->menu_types_spectacle['author'] = array(
'name' => 'Auteur',
);
if (empty($default_type_spectacle)) {
$default_type_spectacle = 'author';
}
}
if ($this->infosperson['sexe']==2) {
$this->context['view']->menu_types_spectacle['author']['name'] = 'Auteure';
$roles['author']['name'] = 'Auteure';
}
}
if ($execute_corps_page){
if (!empty($this->context['params']['type']) && !empty($this->context['view']->menu_types_spectacle[$this->context['params']['type']])) {
$this->context['view']->type_spectacle = $this->context['params']['type'];
} else {
$this->context['view']->type_spectacle = $default_type_spectacle;
}
}
//On arrête là l'execution de cette fonction
if (!$execute_corps_page)
return null;
$role = $roles[$this->context['view']->type_spectacle];
$this->context['view']->{'spectacles_'.$this->context['view']->type_spectacle} = true;
$this->context['view']->{'periode_'.$this->context['view']->periode_spectacle} = true;
$this->context['view']->menu_types_spectacle[$this->context['view']->type_spectacle]['active'] = 'on';
// trouver les années où il y a eu des lauréats pour toutes les aides
if (!$this->getSpectaclesDates()) {
return $this->redirectToRoute("biographie_biographie", [
"slug" => $slug
]);
}
$this->getCommonSearch(array(
'inverse_periode' => true,
'saisons_annees' => $this->getListSeasonsYears($this->getSpectaclesDates()),
'nb_days' => 720,
)
);
$this->getCommonSearchView();
$params_sql = array(
'params' => array(
'groupby' => 's.idspectacle'
),
'special' => array(
'plus_proche' => true,
),
'dbg' => array('spectacles_'.$this->context['view']->type_spectacle.'_list','Spectacles '.$this->context['view']->type_spectacle.' par cette personne')
);
$params_sql = $this->setCommonSearchSpectacles($params_sql);
// dans spectacle person
if ($role['type']=='spectacle_person') {
$params_sql['special']['join_person'] = array(
'idperson' => $this->idperson,
'idrole' => $role['idrole'],
);
} elseif ($role['type']=='text_author') {
$params_sql['special']['idperson_author'] = true;
$params_sql['special']['idperson_idtexts'] = $this->idtexts_person;
} else { // TOUS LES SPECTACLES
$this->context['view']->all = true;
$params_sql['special']['idspectacle'] = $this->getSpectaclesPerson();
$this->context['view']->menu_periode['all']['active'] = 'on';
}
// tous les spectacles on affiche la date de création
$show_date_creation = true;
//on affiche pas l'aside des saisons
$aside_saison = false;
//Si on a pas activé le filtre, on force le passage pour vérifier si il existe des éléments
$force_filtre_spectacles = false;
if ($this->context['view']->periode_spectacle!='all'){
$force_filtre_spectacles = true;
//on affiche pas la date de création pour le spectacles
$show_date_creation = false;
}
if ($this->context['view']->periode_spectacle=='all' || $force_filtre_spectacles) {
if ($force_filtre_spectacles){
$backup_params_sql = $params_sql;
}
//on affiche l'aside des saisons
if ($this->context['view']->periode_spectacle != 'affiche'){
$aside_saison = true;
}
// on affiche pas le lieu
if ($this->context['view']->periode_spectacle == 'all'){
$this->context['view']->no_lieu = true;
}
// on cherche tous les spectacles classés par ordre anté-chronologique
unset($params_sql['special']['prochains']);
unset($this->context['view']->days);
// $params_sql['params']['classement'] = 'DESC'; ancien order (classement ?!)
$params_sql['params']['order'] = ['creation_date', 'DESC'];
// si periode == all, on doit vérifier qu'il y a des spectacles à l'affiche
$params_sql_affiche = array(
'special' => array(
'idspectacle' => $this->getSpectaclesPerson(),
'prochains' => '720',
),
'dbg' => array('spectacles_affiche_list','Spectacles à l\'affiche liés à cette personne')
);
//On compte le nombre total de spectacle à venir
$this->context['view']->nb_spectacle_tous = $this->em->getRepository(Spectacles::class)->countListSpectacles($params_sql);
//On compte les spectacles associés
$this->context['view']->nb_spectacle_a_venir = $this->em->getRepository(Spectacles::class)->countListSpectacles($params_sql_affiche);
}
if ($force_filtre_spectacles){
$params_sql = $backup_params_sql;
}
//Si il n'y a pas de spectacle à venir et qu'il y a des spectacles (tous) on redirige à tous
if ($this->context['view']->periode_spectacle=='affiche' && $this->context['view']->nb_spectacle_a_venir == 0 && $this->context['view']->nb_spectacle_tous > 0){
return $this->redirect("/biographies/".$this->context['view']->url_clean."/spectacles/type/".$this->context['view']->type_spectacle."/periode/all");
}
//Si il y a des spectacles à venir et qu'il n'y a pas de spectacles (tous) on redirige à à l'affiche
else if ($this->context['view']->periode_spectacle=='all' && $this->context['view']->nb_spectacle_a_venir > 0 && $this->context['view']->nb_spectacle_tous == 0){
return $this->redirect("/biographies/".$this->context['view']->url_clean."/spectacles/type/".$this->context['view']->type_spectacle."/periode/affiche");
}
else if ($this->context['view']->nb_spectacle_a_venir == 0 && $this->context['view']->nb_spectacle_tous == 0){
return $this->redirectToRoute('biographie_biographie', ['slug' => $this->context['view']->url_clean]);
}
$this->context['view']->nb_spectacles_search = $this->em->getRepository(Spectacles::class)->countListSpectacles($params_sql);
$params_sql['params']['limit'] = array($this->getLimitStart(),$this->perPage);
$this->format_vignette = array(
$format = array('width'=>$_ENV['VIGN_SPECTACLE_WIDTH'],'height'=>$_ENV['VIGN_SPECTACLE_HEIGHT'],'direction'=>'crop')
);
$query_spectacles = $this->em->getRepository(Spectacles::class)->getSQLSpectacles($params_sql['params'],$params_sql['special']);
$datas = $query_spectacles->getArrayResult();
$params_query_count = $this->em->getRepository(Spectacles::class)->countListSchedules($params_sql);
foreach($datas AS $value) {
$spectacles->loadResult($value[0]);
$spectacles->loadResult($value);
$this->context['view']->spectacles[$spectacles->idspectacle] = $this->getRowSpectacle($spectacles,$format);
$this->context['view']->spectacles[$spectacles->idspectacle]['carrer'] = $spectacles->getObjectsCarrerDetails($spectacles->idspectacle);
if ($show_date_creation){
$this->context['view']->spectacles[$spectacles->idspectacle]['display']['affiche_date_creation'] = true;
$this->context['view']->spectacles[$spectacles->idspectacle]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($value['creation_date'], '%Y', true); //%a %d/%m/%Y
}
if ($this->context['view']->periode_spectacle=='all') {
$this->context['view']->spectacles[$spectacles->idspectacle]['no_date'] = true;
}
$this->context['view']->spectacles[$spectacles->idspectacle]['role_header'] = true;
$this->context['view']->spectacles[$spectacles->idspectacle]['footer_contact'] = true;
}
$this->context['view']->pagination = $this->getPagination($this->context['view']->nb_spectacles_search);
$this->context['view']->pagination['representation_spectacle'] = true;
$this->context['view']->pagination['spectacle'] = true;
$this->context['view']->pagination['total_dates'] = $params_query_count;
$this->context['view']->pagination['totalItems'] = $this->context['view']->pagination['total'];
unset($this->context['view']->pagination['total']);
//On indique à la vue la période de spectacle sélectionné
$this->context['view']->{'periode_'.$this->context['view']->periode_spectacle} = true;
$this->extra_locate = $this->extra_title = 'En scène';
$this->action_getAsideSpectacle(false, $aside_saison);
return $this->view('biographies/spectacles.html.twig');
}
// }}}
// {{{ action_getAsideSpectacle()
public function action_getAsideSpectacle($aside_periode = true, $aside_saison = false)
{
$this->context['view']->menu_periodes = array(
'affiche' => array(
'name' => 'Spectacles à venir',
// 'is_simple' => true,
'key_genre' => 'affiche',
'count' => $this->context['view']->nb_spectacle_a_venir
),
'all' => array(
'name' => 'Tous les spectacles associés',
'key_genre' => 'all',
'count' => $this->context['view']->nb_spectacle_tous
)
);
$this->asides->load(['url_lists,spectacles_menu_voir' => array(
'exec' => array(
'htmlstart' => true,
'htmlend' => ($aside_periode || $aside_saison) ? false : true,
'color' => 'spectacles'
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $this->context['view']->menu_periodes,
'url' => '/biographies/{v_url_clean}/{v_current_page}/type/{v_type_spectacle}/periode/key_genre',
'params' => array(
'activate' => $this->context['view']->periode_spectacle
)
),
'title' => 'Voir'
)]);
// $this->asides->load(['url_lists,menu_role' => array(
// 'exec' => array(
// 'alone' => false,
// 'htmlend' => ($aside_periode || $aside_saison) ? false : true,
// 'color' => 'spectacles'
// ),
// 'php' => array(
// 'method' => 'asidesUrlLists',
// 'urls' => $this->context['view']->menu_types_spectacle,
// 'url' => '/biographies/'.$this->context['view']->url_clean.'/spectacles/type/key_role/periode/{v_periode_spectacle}',
// 'params' => array(
// 'activate' => '',
// 'key_role' => 'auto_key'
// )
// ),
// 'title' => 'Filtrer par catégorie'
// )]);
if ($aside_saison){
$this->asides->load(['par_saison_alone' => array(
'exec' => array(
'alone' => false,
'htmlend' => true,
'color' => 'spectacles'
),
'php' => array(
'method' => 'asidesUrlListsForms',
'url' => '/biographies/'.$this->context['view']->url_clean.'/spectacles/type/{p_type}/periode/{p_periode}',
'params' => array(
'key_role' => 'auto_key'
)
),
'title' => 'Recherche par période',
)]);
}
if ($aside_periode){
$this->asides->load(['recherche_par_periode' => array(
'exec' => array(
'htmlend' => true,
'color' => 'spectacles'
),
'title' => 'Recherche par période',
'action' => '/biographies/'.$this->context['view']->url_clean.'/spectacles/',
)]);
}
$this->asides->load(['common_carrer_informations' => [
'exec' => [
'color' => 'spectacles'
]
]]);
$this->asides->load(['common_participer_personne' => array(
'exec' => array(
'color' => 'spectacles'
)
)]);
$this->asides->load(['bio_spectacle_info' => array(
'exec' => array(
'color' => 'spectacles'
)
)]);
}
// }}}
// {{{ action_premieres()
/** Premières de Spectacles associés à cette personne
*
* @Route("/biographies/{slug}/premieres/", name="biographie_premieres")
* @Route("/biographies/{slug}/premieres/type/{p_type}", name="biographie_premieres_type")
* @Route("/biographies/{slug}/premieres/type/{p_type}/area/{p_area}", name="biographie_premieres_type_area")
*
* @access public
* @return void
*/
public function action_premieres($slug = null, $p_type = null, $p_area = null)
{
$this->InitController($slug, 'dates');
$this->context['params']['type'] = $p_type;
$this->context['params']['area'] = $p_area;
$params = [];
$type = 'premieres';
if (!empty($this->context['params']['type'])){
$type = $this->context['params']['type'];
if ($type == 'france') {
$params['france'] = true;
if (!empty($this->context['params']['area'])) {
$this->view->region_name = $this->em->getRepository(Bigregions::class)->getBigbigregionName(intval($this->context['params']['area']));
if (!$this->view->region_name) {
return $this->redirectToRoute("biographie_premieres", [
"slug" => $slug
]);
}
}
}
else if ($type == 'saison') {
$saison_select = Date_time::getLastSaison();
if (!empty($_GET['next']) && $_GET['next'] == 1) {
$saison_select = Date_time::getNextSaison($saison_select);
}
$this->context['view']->saison_select = $saison_select;
$params = ['current_saison' => $saison_select];
$params['having_start_to_saison'] = true;
}
}
$params['limit'] = [0, 400];
$this->context['view']->schedules_dates_demains_par_mois = $this->getSpectaclesPremieres($params);
$this->getAsidesDates();
return $this->view('biographies/premieres.html.twig');
}
// }}}
// {{{ action_abecedaire()
/** Action abécédaire
*
*
* @access public
* @return void
*/
public function action_abecedaire()
{
require_once PATH_LIBS.'/Controllers/Abecedaire.class.php';
$abecedaire = new Abecedaire($this->context, $this->idperson, 'persons');
$abecedaire->view();
$this->view->abecedaire = $abecedaire;
$this->view->lettre_courante = $abecedaire->lettre_courante;
if ($abecedaire->lettre_courante) {
$this->extra_locate = $this->extra_title = 'Lettre '.$abecedaire->lettre_courante;
}
}
// }}}
// {{{ action_contenu_pedagogique()
/** Les contenus éduc sur la personne
*
* @Route("/biographies/{slug}/contenu-pedagogique/", name="biographie_contenu_pedagogique")
* @Route("/biographies/{slug}/contenu-pedagogique/idcontent/{idcontent}", name="biographie_contenu_pedagogique_idcontent")
*
*/
public function action_contenu_pedagogique($slug = null, $idcontent = null)
{
$this->InitController($slug, 'contenu-pedagogique');
$this->context['params']['idcontent'] = $idcontent;
$params_sql_specific = array();
//on récupère le contenu theatre-en-acte
if ($theatre_en_acte = $this->contents->getAssociateContents($this->idperson,'persons','class_theatre_en_acte')){
$theatre_en_acte = reset($theatre_en_acte);
//On prépare les liens pour les asides
foreach($theatre_en_acte AS $k => $v){
$id_contents_exclude[] = $v['idcontent'];
$urls_theatrenacte[$v['idcontent']] = array(
'url' => '/biographies/{v_url_clean}/contenu-pedagogique/idcontent/key_content',
'name' => $v['title'],
'key_content' => $v['idcontent']
);
}
$urls_theatrenacte['allspectacles'] = array(
'url' => '/educ/theatre-en-acte-auteurs',
'name' => 'Tous les auteurs'
);
//on indique quel contenus ne devant pas être récupérés avec les contenus-pedagogiques
if ($id_contents_exclude){
$params_sql_specific = array(
'where' => ' oc.idobject='.(int)$this->idperson.' AND c.idcontent NOT IN ('.implode(',', $id_contents_exclude).')'
);
}
}
//on récupère le contenu-pedagogique en supprimant les contenus theatre-en-acte qui pourrait être récupérés
$this->contenus_biographie('class_contenu_educ','contenus-pedagogiques', array('width'=>150), $params_sql_specific);
$nb_contenu_educ = $this->getEduc();
$this->extra_locate = 'Contenus pédagogiques';
$this->extra_title = 'Contenus pédagogiques - Éduc';
$this->view->detail_orga = true;
$this->view->detail_date = true;
if ($nb_contenu_educ > 0){
$menu_educ = array(
array(
'url' => '/biographies/{v_url_clean}/contenu-pedagogique/',
'name' => html_entity_decode('Tous les contenus « éduc » '),
'params_activate' => 'contenu-pedagogique'
)
);
$this->asides->load(['url_lists_alone,content_educ' => array(
'exec' => array('color' => 'educ'),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_educ,
'params' => array(
'activate' => (empty($this->context['params']['idcontent'])) ? $this->context['action'] : null
)
),
'title' => 'Voir'
)]);
}
//on force l'affichage du menu
// $this->context['view']->morearticle = true;
// $this->asides->load('spectacles_educ');
if (!empty($theatre_en_acte)){
$this->asides->load(['url_lists_alone' => array(
'exec' => array('color' => 'educ'),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $urls_theatrenacte,
'params' => array(
'activate' => (!empty($this->context['params']['idcontent'])) ? $this->context['params']['idcontent'] : null
)
),
'title' => 'Théâtre-en-acte'
)]);
}
$this->asides->load(['common_participer_personne' => array(
'exec' => ['color' => 'educ']
)]);
return $this->view('biographies/contenu-pedagogique.html.twig');
}
// }}}
// {{{ action_autorisation()
/** Les diaporamas sur la personne
*
* @Route("/biographies/{slug}/autorisation/", name="biographie_autorisation")
*
*/
public function action_autorisation($slug = null, Request $request)
{
return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
}
// }}}
// {{{ action_enimages()
/** Les diaporamas sur la personne
*
*/
public function action_enimages_biographie() { $this->action_photos(); }
// }}}
// {{{ action_evenements()
/** evenements et spectacles proposé par les internautes
*
* @Route("/biographies/{slug}/evenements/", name="biographie_evenements")
*
* @access public
* @return void
*/
public function action_evenements($slug = null)
{
$this->InitController($slug, 'evenements');
// recuperer les actualites de la personne proposé par les internautes
$news = $this->em->getRepository(News::class);
$news_params = array(
'params' => array(
'limit' => 'all',
'order' => 'T3.date DESC',
),
'special' => array(
'publish_valid' => true,
'by_object' => array('idperson' => $this->idperson),
),
);
// trouver 7 prochains évènements
// si pas de 7 prochains, trouver 7 anciens
//foreach(array('news','spectacles') as $t) {
foreach(array('news') as $t) {
$news_list = array();
$news_params['special']['type_news'] = $t;
foreach(array('prochains','anciens') as $d) {
$news_params['special'][$d] = true;
$news_params['dbg'] = array('essai'.$d, 'Pour '.$d);
// si ancien, seulement 3
if ($d=='anciens') {
$news_params['params']['limit' ] = array(0,3);
}
$news_list[$d] = $news->getListNews($news_params);
if (!empty($news_list[$d])) {
$this->view->{'is_news_list_'.$t} = true;
}
unset($news_params['special'][$d]);
}
$this->view->{'news_list_'.$t} = $news_list;
}
if (!empty($this->view->news_list_news['anciens'])) {
$this->view->news_list_news['anciens'] = array_reverse($this->view->news_list_news['anciens']);
}
// page en cours
$this->view->from_page = $this->url_folder.'/evenements/';
$this->context['view']->is_description = true;
// asides
$this->asides->load(['common_participer_personne' => array(
'exec' => ['color' => 'evenements']
)]);
return $this->view('biographies/evenements.html.twig');
}
// }}}
// {{{ setAsidesCommunEnSavoirPlus()
/** method permettant d'éviter de dupliquer du code à différents endroits
*
*/
private function setAsidesCommunEnSavoirPlus(){
// new array pour v2
$idextranetuser = null;
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')){
$idextranetuser = $this->context['session']->getIdextranetuser();
}
$auteurs_menu_genre = array(
'presentation' => array(
'name' => 'Présentation',
'key_genre' => 'presentation',
),
array(
'name' => 'Prix et distinctions',
'key_genre' => 'prix-recompenses',
'count' => $this->getPersonTextAides(array(0,100), true, ['count_specifique' => true])
),
array(
'name' => 'Aides et soutiens',
'key_genre' => 'aides-soutiens',
'count' => $this->getPersonTextAides([], true, ['types_aides' => array(1), 'count_specifique' => true, 'group_by_aide_type_aide_texte' => true])
),
array(
'name' => 'Sélections',
'key_genre' => 'selections',
'count' => $this->getPersonTextAides([], true, ['types_aides' => array(4), 'count_specifique' => true, 'group_by_aide_type_aide_texte' => true])
)
);
if (empty($this->infosperson['biotxt']['text'])){
unset($auteurs_menu_genre['presentation']);
}
if (isset($this->view->articles)){
$this->context['view']->morearticle = true;
}
$this->asides->load(['bio_files' => array(
'exec' => array(
'alone' => true,
'color' => 'context'
)
)]);
$this->asides->load(['url_lists_alone,bio_lists_new' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $auteurs_menu_genre,
'url' => '/biographies/{v_url_clean}/key_genre',
'params' => array(
'activate' => $this->context['action']
)
)
)]);
$this->asides->load(['textes_menu_educ' => array(
'exec' => array(
'alone' => true,
'color' => 'context'
),
)]);
$this->asides->load('common_participer_personne');
$this->asides->load('bio_formation');
}
// {{{ getMultimediasPerson()
/** Les vidéos de la personne
*
*/
public function getMultimediasPerson($params = array())
{
$extrasql = 'ORDER BY m.date DESC';
if (!empty($params['limit']) && is_array($params['limit'])){
$extrasql .= ' LIMIT '.$params['limit'][0].', '.$params['limit'][1];
}
$select = 'm.*';
if (!empty($params['count'])){
$select = 'count';
}
return $this->multimedias->getMultimediasBy('persons', $this->idperson,$extrasql,$select);
}
// }}}
// {{{ getCountDvds()
/** On récupère le nombre de dvd de a personne
*
*/
public function getCountDvds(){
// DVD => le dernier DVD référencé
$dvds = $this->em->getRepository(Dvds::class);
return $dvds->countDvds('persons',$this->idperson);
}
// {{{ countMultimediasPerson()
/** Compter les vidéos de la personne
*
*/
public function countMultimediasPerson()
{
return $this->multimedias->getMultimediasBy('persons', $this->idperson,null,'count');
}
// }}}
// {{{ getInfosPerson()
/** Les infos sur la personne
*
*/
public function getInfosPerson() { return $this->infosperson; }
// }}}
// {{{ getLocate()
/** Ou se trouve t'on (getter)
*
*/
public function getLocate() { return $this->locate; }
// }}}
// {{{ getTitlePage()
/** Titre de la page (getter)
*
*/
public function getTitlePage() { return $this->title_page; }
// }}}
// {{{ getStyleMore()
/** Style en plus (getter)
*
*/
public function getStyleMore() { return $this->style_more; }
// }}}
// {{{ getMetaKeywords()
/** Keywords (getter)
*
*/
public function getMetaKeywords() { return $this->meta_keywords; }
// }}}
// {{{ getMetaDescription()
/** Description (getter)
*
*/
public function getMetaDescription() { return $this->meta_description; }
// }}}
// {{{ getMtinfos()
/** Infos mon théâtre
*
*/
public function getMtinfos() { return $this->mtinfos; }
// }}}
// {{{ setOtherDimensions()
/** Taille maxi des vidéos
*
*/
public function setOtherDimensions($other_dimensions)
{
$this->other_dimensions = $other_dimensions;
}
// }}}
// {{{ setStylemoreSpectacle()
/** Pour l'affichage des listes
*
*/
public function setStylemoreSpectacle($stylemore_spectacle) { $this->stylemore_spectacle = $stylemore_spectacle; }
// }}}
// {{{ setStylemoreText()
/** Pour l'affichage des listes
*
*/
public function setStylemoreText($stylemore_text) { $this->stylemore_text = $stylemore_text; }
// }}}
// {{{ getRubCourante()
/** Pour la rubrique courante
*
*/
public function getRubCourante() { return $this->rub_courante; }
// }}}
// {{{ getSpectaclesPremieres()
/** Récupere la liste des dates de première des spectacles associés à la personne
*
* @return array
*/
public function getSpectaclesPremieres($params = array())
{
if (empty($this->ids_spectacle_all)) {
return null;
}
$expr = '>=';
$params_sql = array(
'order' => ['datemin ASC', 'datemax'],
'select' => ['MIN(schedules.date) AS datemin', 'MAX(schedules.date) AS datemax'],
'group' => array('schedules' => 'idspectacle'),
'count_only' => true,
'count_disctint_by' => ['schedules' => 'idspectacle'],
// 'idsschedules' => $this->ids_spectacle_all,
'where' => [' AND schedules.`idspectacle` IN ('.implode(',' ,$this->ids_spectacle_all).') '],
'having' => [' AND MIN(schedules.`date`) '.$expr.'\''.date('Y-m-d').'\''],
'dbg' => array('list_dates_valid','Liste des dates à valider')
);
if (!empty($params['france'])){
$params_sql['special'] = [
'regions' => true
];
if (!empty($this->context['params']['area'])) {
$bigreghions = $this->em->getRepository(Bigregions::class);
$where_zone = $bigreghions->getZipCode(intval($this->context['params']['area']), 'contacts');
$params_sql['where'][] = ' AND ' . $where_zone;
}
else{
$params_sql['where'][] = 'AND contacts.country = "fr"';
}
}
if (!empty($params['current_saison'])){
$params_sql['saison'] = $params['current_saison'];
$s = explode('-', $params_sql['saison']);
if (!empty($params['having_start_to_saison'])){
unset($params_sql['having']);
$params_sql['having']= [' AND MIN(schedules.`date`) '.$expr.'\''.$s[0].'-09-01'.'\''] ;
}
}
$schedules = $this->em->getRepository(Schedules::class);
$nb_total_calendrier = $schedules->getListSchedules($params_sql);
if (!empty($params['count'])){
return $nb_total_calendrier;
}
unset($params_sql['count_only']);
unset($params_sql['count_disctint_by']);
if (!empty($params['limit'])){
$params_sql['limit'] = $params['limit'];
}
else{
$params_sql['limit'] = array($this->getLimitStart(),$this->perPage);
}
$datas = $schedules->getListSchedules($params_sql);
// Cette variable est utiliser pour stocker les résultats & éviter plusieurs requêtes SQL identiques
$calendrier_listes_spectacles = [];
$calendrier_listes_calendrier = [];
$datas_lists = array();
foreach($datas AS $k => $value) {
$date_month = $schedules->getFormeDate($value['datemin'], "%B %Y", true);
$date_month_hastag = $schedules->getFormeDate($value['datemin'], "%B_%Y", true);
if (empty($datas_lists[$date_month_hastag])) {
$menu_aside[$date_month_hastag] = [
'name' => $date_month,
'params' => $date_month_hastag,
];
$datas_lists[$date_month_hastag] = $menu_aside[$date_month_hastag];
}
$date = $value['date'];
if (empty($datas_lists[$date_month_hastag]['datas'][$date]['date_str'])) {
$datas_lists[$date_month_hastag]['datas'][$date]['date_str'] = $schedules->getFormeDate($date, "%a %d/%m/%y", true);
$datas_lists[$date_month_hastag]['datas'][$date]['date_full_str'] = $schedules->getFormeDate($date, "%A %d %B %Y", true);
$datas_lists[$date_month_hastag]['datas'][$date]['date_orig'] = $schedules->getFormeDate($date, $GLOBALS['format_date'][$GLOBALS['lng']]);
}
$idspectacle = $value['idspectacle'];
// Si la requête s'exécute pour la première fois
if (empty($calendrier_listes_spectacles[$idspectacle])) {
$calendrier_listes_spectacles[$idspectacle] = $this->em->getRepository(Spectacles::class)->getInfosSpectacle($value['idspectacle'], ['get_vignette' => true]);
}
$idcontact = $value['idcontact'];
if (empty($calendrier_listes_spectacles[$idcontact])) {
$calendrier_listes_calendrier[$idcontact] = $this->em->getRepository(Contacts::class)->getInfosContact($value['idcontact']);
}
$datas_lists[$date_month_hastag]['datas'][$date]['spectacles'][$idspectacle] = $calendrier_listes_spectacles[$idspectacle];
$datas_lists[$date_month_hastag]['datas'][$date]['spectacles'][$idspectacle]['footer_contact'] = true;
$datas_lists[$date_month_hastag]['datas'][$date]['spectacles'][$idspectacle]['contact'] = $calendrier_listes_calendrier[$idcontact];
}
unset($calendrier_listes_spectacles);
unset($calendrier_listes_calendrier);
return $datas_lists;
}
// }}}
// {{{ getSpectaclesDates()
/** Récupere la liste des dates des spectacles associés à la personne
*
* @return array
*/
public function getSpectaclesDates($critique=false, $prochains = false)
{
if (empty($this->ids_spectacle_all)) {
$this->getSpectaclesPerson();
if (empty($this->getSpectaclesPerson())) {
return false;
}
}
$cacheKey = "biographie_spectacles_date_annees_";
$joinedIds = implode(',', $this->ids_spectacle_all);
$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 ('.$joinedIds.')
ORDER BY schedules.`date`';
if ($prochains){
$cacheKey .= "prochains_";
$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 ('.$joinedIds.')
GROUP BY spectacles.`idspectacle`
ORDER BY schedules.`date`';
}
// uniquement les spectacles avec une critique
if ($critique) {
$cacheKey .= "critique_";
$sql_annees = '
SELECT sc.`date`, YEAR(sc.`date`) as annee
FROM schedules sc
JOIN spectacles s ON s.`idspectacle`=sc.`idspectacle`
JOIN object_content oc ON s.`idspectacle`=oc.`idobject`
JOIN contents ct ON oc.`idcontent`=ct.`idcontent`
JOIN content_classification cc ON ct.`idcontent`=cc.`idcontent`
WHERE s.`publish`=1 AND s.`valid`=1
AND ct.`publish`=1 AND ct.`valid`=1
AND cc.`idclassification`=101
AND sc.`idspectacle` IN ('.$joinedIds.')
ORDER BY sc.`date`';
}
$cacheKey .= implode('-', $this->ids_spectacle_all);
$cacheItem = $this->cache->getItem($cacheKey);
if (! $cacheItem->isHit()) {
$listdates = $this->persons->queryAll($sql_annees);
$cacheItem->set($listdates)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($cacheItem);
}
return empty($cacheItem->get())
? []
: $cacheItem->get();
}
// }}}
// {{{ getSpectaclesPerson()
/** Récupere la liste des spectacles associés à la personne
*
* @return array
*/
public function getSpectaclesPerson($params=false)
{
// la liste des texts associés à la personne
if (empty($this->idtexts_person)) {
$this->idtexts_person = $this->em->getRepository(Texts::class)->getTextsPersons($this->idperson,'all','all',true);
}
// les spectacles
$item = $this->cache->getItem("biographie_getSpectaclesPerson_" . $this->idperson . "_text_not_in_" . ($this->idtexts_person ?: 0));
if (! $item->isHit()) {
$sql_all_spectacles = 'SELECT s.`idspectacle`
FROM spectacles s
LEFT JOIN spectacle_person sp ON sp.`idspectacle`=s.`idspectacle`
LEFT JOIN text_spectacle ts ON ts.`idspectacle`=s.`idspectacle`
WHERE s.`publish`=1 AND s.`valid`=1
AND (sp.`idperson`='.$this->idperson;
// les textes de la personne
if (!empty($this->idtexts_person)) {
$sql_all_spectacles .= ' OR ts.`idtext` IN ('.$this->idtexts_person.') ';
}
// spectacles publiés
$sql_all_spectacles .= ')';
// tous les spectacles associés à une personne
$ids_spectacle_all = $this->persons->queryCol($sql_all_spectacles);
$item->set($ids_spectacle_all)->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$this->cache->save($item);
} else {
$ids_spectacle_all = $item->get();
}
foreach($ids_spectacle_all as $k=>$v) {
$this->ids_spectacle_all[$v] = $v;
}
if ($this->context['action'] != 'spectacles') {
$multimedias = $this->em->getRepository(Multimedias::class);
$ids_multimedias = $multimedias->queryAll($multimedias->getSQLMultimedias([
'only_custom_select' => true,
'object' => [
'persons' => $this->idperson
],
'where' => array(
array('object_multimedia', 'idrole', 25, 'AND')
)
]));
$object_multimedia = $this->em->getRepository(ObjectMultimedia::class);
$fields = ['idspectacle'];
foreach($ids_multimedias AS $idmultimedia){
$obj_multimedias = $object_multimedia->getObjectsMultimedia($idmultimedia['idmultimedia'],'spectacles',$fields);
foreach($obj_multimedias AS $k => $v){
// $spectacles[] = $k;
$this->ids_spectacle_all[$k] = $k;
}
}
}
// liste des saisons et des années
if (empty($this->ids_spectacle_all)) {
//echo $listdates->getDebugInfos();
return array();
} else {
return $this->ids_spectacle_all;
}
}
// }}}
// {{{ countAllCritiques()
/** Compter le nb de critiques
*
* @return array
*/
public function countAllCritiques()
{
if (empty($this->ids_spectacle_all)) {
$this->getSpectaclesPerson();
}
// uniquement les spectacles avec une critique
if (!empty($this->ids_spectacle_all)){
$sql_count = '
SELECT COUNT(DISTINCT(ct.`idcontent`))
FROM spectacles s
JOIN object_content oc ON s.`idspectacle`=oc.`idobject`
JOIN contents ct ON oc.`idcontent`=ct.`idcontent`
JOIN content_classification cc ON ct.`idcontent`=cc.`idcontent`
WHERE s.`publish`=1 AND s.`valid`=1
AND ct.`publish`=1 AND ct.`valid`=1
AND cc.`idclassification`=101
AND s.`idspectacle` IN ('.join(',', $this->ids_spectacle_all).') ';
$nb_critiques = $this->persons->queryOne($sql_count);
}
if (empty($nb_critiques)) {
//echo $listdates->getDebugInfos();
return null;
} else {
return $nb_critiques;
}
}
// }}}
// {{{ countEduc()
/** Les contenus éduc sur la personne
*
*/
public function getEduc($params = []) {
// les objets
$texts = $this->em->getRepository(Texts::class);
$spectacles = $this->em->getRepository(Spectacles::class);
$nb_educ = null;
// les textes de la personne avec un contenu éduc
if (!empty($this->idtexts_person)) {
$params_educ_texts = [
'params' => array(
'order' => 'publication_year DESC'
),
'special' => array(
'idclassification' => array(125), // classification educ
'idtext' => $this->idtexts_person, // textes de la personne
'join' => true, // texte pas forcément publié
),
'dbg' => array('list_texts','Liste des textes à contenus pédagogiques')
];
if (!empty($params['count'])) {
$nb_educ += $texts->countListTexts($params_educ_texts);
} else {
$this->context['view']->list_texts = $texts->getListTexts($params_educ_texts);
if (!empty($this->context['view']->list_texts)) {
foreach($this->context['view']->list_texts as $k=>$v) {
$this->context['view']->list_texts[$k]['url_clean_more'] = 'contenus-pedagogiques/';
}
}
$nb_educ += count($this->context['view']->list_texts);
}
}
// les spectacles de la personne avec un contenu éduc
if (!empty($this->ids_spectacle_all)) {
$params_educ_spectacles = [
'params' => array(
'order' => ['creation_date', 'DESC']
),
'special' => array(
'idspectacles' => array('IN', $this->ids_spectacle_all), // les spectacles associés à la personne
'idclassification' => array(125), // avec un contenu pédagogique 125
'tri_plus_proches' => true
),
'dbg' => array('list_spectacles', 'Liste des spectacles avec contenus pédagogiques')
];
if (!empty($params['count'])) {
$nb_educ += $spectacles->countListSpectacles($params_educ_spectacles);
} else {
$this->context['view']->list_spectacles = $spectacles->getListSpectacles(
$params_educ_spectacles,
null,
false,
[
'allauthors' => true //on supprime les doublons dans les auteurs/metteurs-en-scene etc.
]
);
if (!empty($this->context['view']->list_spectacles)) {
foreach ($this->context['view']->list_spectacles as $k => $v) {
$this->context['view']->list_spectacles[$k]['url_clean_more'] = 'contenus-pedagogiques/';
$this->context['view']->list_spectacles[$k]['display']['affiche_date_creation'] = true;
$this->context['view']->list_spectacles[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->context['view']->list_spectacles[$k]['creation_date'], '%Y', true); //%a %d/%m/%Y
}
}
$nb_educ += count($this->context['view']->list_spectacles);
}
}
// les spectacles de la personne avec des pièces démontées
if (!empty($this->ids_spectacle_all)) {
$params_educ_spectacles = [
'params' => [
'order' => ['creation_date', 'DESC']
],
'special' => [
'idspectacles' => ['IN', $this->ids_spectacle_all], // les spectacles associés à la personne
'idclassification' => [82], // avec un contenu pièce démontée (82)
'tri_plus_proches' => true,
],
'dbg' => ['list_spectacles', 'Liste des spectacles avec une pièce démontée']
];
if (!empty($params['count'])) {
$nb_educ += $spectacles->countListSpectacles($params_educ_spectacles);
} else {
$this->context['view']->list_pieces_demontees = $spectacles->getListSpectacles(
$params_educ_spectacles,
null,
false,
array(
'allauthors' => true //on supprime les doublons dans les auteurs/metteurs-en-scene etc.
)
);
// on a besoin de la vignette picèe démontée et du lien direct
if (!empty($this->context['view']->list_pieces_demontees)) {
$contents = $this->em->getRepository(Contents::class);
foreach ($this->context['view']->list_pieces_demontees as $k => $v) {
$this->context['view']->list_pieces_demontees[$k]['display']['affiche_date_creation'] = true;
$this->context['view']->list_pieces_demontees[$k]['annee_creation'] = $this->em->getRepository(Spectacles::class)->getFormeDate($this->context['view']->list_pieces_demontees[$k]['creation_date'], '%Y', true); //%a %d/%m/%Y
// récupèrer le fichier associé à la pièce démontée
if (!empty($v['idcontent'])) {
$datafile = $contents->getAssociateFileContent($v['idcontent']);
if (!empty($datafile)) {
foreach ($datafile as $f) {
if (!empty($f['is_image'])) {
$this->context['view']->list_pieces_demontees[$k]['vignette_affiche'] = $_ENV['URL_DIRECTORYUPLOAD'] . $contents->getThumbnail($f['file'], 150, 'thumb');
}
}
}
}
// lien directe sur la piece démontée
$this->context['view']->list_pieces_demontees[$k]['url_clean_more'] = 'contenus-pedagogiques/idcontent/' . $v['idcontent'];
}
}
$nb_educ += count($this->context['view']->list_pieces_demontees);
}
}
// minutes pédagogiques => recherche directe sur la personne ou via les spectacles
if (!empty($this->ids_spectacle_all)) {
$multimedias = $this->em->getRepository(Multimedias::class);
// recherche de base
$params_query_minutes = array(
'affiche' => array(
'datestart' => '1999-01-01',
'dateend' => '2030-01-01',
),
'object' => array(array('spectacles',$this->ids_spectacle_all)),
'idclassification' => 145,
'limit' => array(0,100),
'dbg' => array('minutes','Vidéos de minutes pédagogiques'),
);
if (!empty($params['count'])) {
$nb_educ += $multimedias->getCountMultimedias($params_query_minutes);
} else {
$this->context['view']->list_minutes = $multimedias->getListMultimedias($params_query_minutes, array(), array('get_schedule' => true));
$nb_educ += count($this->context['view']->list_minutes);
}
}
return $nb_educ;
}
// }}}
// {{{ getPersonAides()
/** Les prix et récopense
*
*/
public function getPersonTextAides($limit=array(), $count = false, $params = array()){
if (!empty($this->idtexts_person)) {
$aides = array();
$type_aides = array(2,3);
if (!empty($params['types_aides'])){
$type_aides = $params['types_aides'];
}
if (empty($limit)) {
$limit = array(0,5);
}
$params_aides = array(
'special' => array(
'aides' => array(
'type_aides' => $type_aides, // laureat et nomination
),
),
'limit' => $limit,
'idtext' => explode(',', $this->idtexts_person),
'get_texts_with_aides' => true,
'group_by_aide_type_aide_text' => true,
'dbg' => array('list_text_aide', 'Texte de l\'auteur avec prix (laureats et nominations)'),
'api' => false,
);
if ($count){
if (empty($params['count_specifique'])){
$params_aides = array();
}
return $this->em->getRepository(TextAide::class)->countListTextAide(
$params_aides
);
}
else{
// trouver les textes avec des prix/récompenses
$aides = $this->em->getRepository(TextAide::class)->getListTextAide(
$params_aides
);
if (!empty($aides)) {
foreach($aides as $k=>$v) {
$aides[$k]['profile_picture'] = $this->em->getRepository(Contacts::class)->getVignetteContact($v['aide']['contact']['idcontact'],array(), 'class_pp');
if (strpos($aides[$k]['profile_picture'],'normal-def.jpg')!==false) {
$aides[$k]['profile_picture'] = $_ENV['URL_THNET'].'/images/menu/interface/no_contact-100x100.png';
}
}
}
}
return $aides;
}
return 0;
}
// }}}
// {{{ getDvds()
/** Les dvds et la VOD associées à cette biographie
*
* @param bool $count_only Compter seulement
* @return array|int
*
*/
public function getDvds($count_only=false, $params=array())
{
$params_sql = array(
'dbg' => array('dvds_contact', 'Les dvds associés aux spectacles coproduits par la structure'),
'special' => array(
'idspectacles' => $this->ids_spectacle_all,
)
);
if (empty($this->ids_spectacle_all)) {
$params_sql['special']['idpersons'] = $this->id;
}
if ($count_only) {
$params_sql['count_only'] = true;
$params_sql['limit'] = array('all');
} else {
if (!empty($params['limit'])){
$params_sql['limit'] = $params['limit'];
}
else {
$params_sql['limit'] = array(0, 100);
}
}
$format_vignette = array('vignette_format' => array('width'=>300,'height'=>300,'direction'=>'thumb')); // taille de la vignette
return $this->em->getRepository(Dvds::class)->getListDvds($params_sql, $format_vignette);
}
// }}}
public function setReseauSocial($title = null, $description_html = null, $url = null, $image = null){
if (is_null($description_html) && isset($this->infosperson['biotxt']['text'])){
$description_html = $this->infosperson['biotxt']['text'];
}
$description = null;
$this->func->makeMetaFromHtmlSimple($description_html, $description, $keyword);
if (is_null($image) && empty($image)){
$format_vignette_person = array('width'=>428,'height'=>640);
$photos_person = $this->em->getRepository(Files::class)->getObjectFiles($this->idperson,'persons','class_photo_person');
if (!empty($photos_person)) {
foreach($photos_person as $k=>$v) {
$image = $this->persons->getVignettePerson($this->idperson,$format_vignette_person);
break;
}
}
}
if (is_null($title)){
$title = $this->title_page;
}
if (is_null($url)){
$url = $_ENV['URL_THNET'].'/biographies/'.$this->infosperson['url_clean'].'/'.$this->context['action'];
}
$social = array(
'type' => 'profile',
'title' => $title,
'description' => $description,
'image' => (isset($image)) ? $image : '',
'url' => $url
);
$this->setSocialCustomContent($social, 'fb');
}
}