<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use App\Exception\RedirectException;
use App\Service\Abonnements\Abonnements;
use App\Service\Ajoutaides;
use App\Service\Functions;
use App\Service\TheatreMail\SendmailTheatre;
use App\Service\UtilsEdit;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Entity\BookmarkExtranetuser;
use TheatreCore\Entity\Contents;
use TheatreCore\Entity\Extranetusers;
use TheatreCore\Entity\Multimedias;
use TheatreCore\Entity\News;
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;
use TheatreCore\Entity\Tplmessages;
use Zend\Code\Scanner\Util;
class TextController extends TheatreController
{
// id du texte
protected $idtext = null;
// object texts
protected $texts;
// infos sur le texte
protected $txt = null;
// object contents
protected $contents;
// précision fil d'arianne
protected $locate = null;
// titre de la page
protected $title_page = null;
// nombre de com sur le spectacle
protected $nb_comments = 0;
// paramètres pour les commentaires
protected $params_comments = array();
// meta keywords et meta description
protected $meta_keywords = '';
protected $meta_description = '';
// infos pour mon théâtre
protected $mtinfos = array();
// taille maxi des vidéos
protected $other_dimensions = array();
// nombre de mises en scène
protected $nbmes = 0;
// nombre de mises en scène en langue original
protected $nbmes_original = 0;
// nombre de mises en scène en traduit
protected $nbmes_translate = 0;
// nombre de traductions
protected $nbtrad = 0;
// type de page
protected $type = null;
// pour la navigation
protected $extra_title = '';
protected $extra_locate = '';
// asides
protected $asides = "";
private $logger;
// {{{ _construct()
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
TokenStorageInterface $tokenStorage,
Functions $func,
Abonnements $abonnements,
LoggerInterface $logger
)
{
// surbrillance du menu principal (thnet)
$GLOBALS['rub_courante'] = 'textes';
parent::__construct($translator, $tokenStorage);
$this->context['controller'] = 'textes';
$this->em = $em;
$this->func = $func;
$this->serviceAbonnements = $abonnements;
$this->asides = new asides();
$this->logger = $logger;
}
// }}}
public function InitController($slug = null, $action = null)
{
$this->view->action = $this->context['action'] = $action;
$this->RouterOptions($slug, $action, $GLOBALS['rub_courante']);
$this->view->controller = $GLOBALS['rub_courante'];
$this->context['view']->jquery_flash = true;
// identifiant du texte
$params['idtext'] = $this->context['id'] = $this->idtext = $this->id;
// si le texte n'existe pas, on renvoi sur une page d'erreur (a faire !!!)
if (empty($params['idtext'])) {
throw new RedirectException($this->context['url_module'].'/erreur/');
}
// instancier un objet
$this->texts = $this->em->getRepository(Texts::class);
//si la langue n'est pas le français je cherche le titre traduit
if ($this->context['lng'] != 'fr') {
$this->view->translateTitle = $this->texts->getTranslateTitle($this->idtext, $this->context['lng']);
}
// type de page
if (array_key_exists('type',$this->context['params'])) {
$this->type = $this->context['params']['type'];
} else {
$this->type = null;
}
// recupere l'enregistrement et le met dans un array
$this->txt = $this->texts->getInfosText($this->idtext);
// compter le nombre de mes en ligne
$this->nbmes = $this->texts->countSpectacles($this->idtext, true, array('countforeignshow' => true));
// compter le nombre de traductions en ligne
$this->nbtrad = $this->texts->countTranslations($this->idtext,1);
// editeur du texte
if (!empty($this->texts->idcontact_publisher)) {
$this->txt['publisher'] = $pub = $this->texts->idcontact_publisher;
if (!empty($pub->country)) {
// $pub_country = $pub->getLink('country');
// $this->txt['publisher']['country'] = $pub_country->fr;
} else {
unset($this->txt['publisher']['country']);
}
}
/* format vignette couverture */
$format_vignette = array('width' => $_ENV['VIGN_TEXT_WIDTH'], 'height' => $_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
// recuperer la couv
$this->contents = $this->em->getRepository(Contents::class);
$illustrations = $this->contents->getIllustrations($this->idtext,'texts','class_couv',$format_vignette);
if (!empty($illustrations)) {
// illustrations
$this->txt['illustrations'] = $illustrations['illustrations'];
// vignettes
if (!empty($illustrations['vignette_object'])) {
$this->txt['vignette_object'] = $illustrations['vignette_object'];
}
}
$this->view->section_type = 'oeuvre';
// id du texte
$this->view->idtext = $this->idtext;
// traduction ou texte original ?
if ($this->txt['typetxt']=='translate' && !empty($this->txt['idtextoriginal'])) {
// les textes originaux
$txtorig = $this->em->getRepository(Texts::class);
$this->txt['originaltext'] = $txtorig->getInfosText($this->txt['idtextoriginal']);
// pas de virgule sur le dernier translator
if (array_key_exists('alltranslators', $this->txt)) {
$this->txt['alltranslators'] = $this->texts->noPunct($this->txt['alltranslators']);
}
}
// adaptation
if (array_key_exists('adaptation_infos', $this->txt) && !empty($this->txt['adaptation_infos'])) {
foreach ($this->txt['adaptation_infos'] as $k=>$v) {
$adapt = $this->em->getRepository(Texts::class);
$adaptations[$k] = $adapt->getInfosText($k);
}
$adaptations = $this->texts->noPunct($adaptations);
$this->txt['texts_adaptation'] = $adaptations;
$this->view->adaptation = true;
}
$this->txt['jsonld'] = $this->texts->makeJsonLD($this->txt);
$this->view->meta_text = true;
// pas de virgule sur le dernier author
if (array_key_exists('allauthors', $this->txt)) {
$this->txt['allauthors'] = $this->texts->noPunct($this->txt['allauthors']);
}
// titre de la page
$aut = array();
foreach ($this->txt['allauthors'] as $k=>$v) {
$aut[] = $v['firstname'].' '.$v['lastname'];
}
$this->view->data_text = $this->txt;
if (!empty($aut)) {
$authors_string = join(', ', $aut);
} else {
$authors_string = null;
}
// titre de la page (auteur + metteur + spectacle)
$this->title_page = $this->txt['title'].' - '.$authors_string;
// style des texte
$this->style_more = array('dossier','texte');
// fil d'arianne
$this->locate = array(
'/editions/' => 'Éditions',
'/textes/'.$this->txt['url_clean'].'/' => $this->txt['title'],
);
}
// }}}
// {{{ finalizeAction()
/** S'execute après chaque action
*
*
* @access protected
* @return void
*/
protected function finalizeAction()
{
// titre de la page
if ($this->extra_title) {
$this->title_page = $this->extra_title.' - '.$this->title_page;
}
// complément fil d'arianne
if ($this->extra_locate) {
$this->locate[0] = $this->extra_locate;
}
// retourner toutes les variables a la vue
foreach ($this->txt as $key=>$value) {
$this->view->$key = $value;
}
$this->buildMenu();
$this->view->page_info = 'texte';
if (empty($this->current['idcontent'])) {
$this->current['idcontent'] = null;
}
// voir si l'objet est bookmarke
// $bookmark = $this->em->getRepository(BookmarkExtranetuser::class);
// if ($this->context['session']->isLogged('montheatre')
// && $bookmark->isBookmark($this->idtext,'texts',$this->context['session']->getValue('idextranetuser'))) {
// $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;
}
// statistique
// TODO: A supprimer lors de la release condition
if (!empty($this->idtext) && !$this->no_stats) {
$statsinfos = array(
'type' => 'article',
'module' => $this->context['module'],
'url' => $_SERVER['REQUEST_URI'],
'idcontent' => (int)$this->current['idcontent'],
'object' => 'texts',
'idobject' => $this->idtext,
'video' => (int)(!empty($this->view->detailarticle['display_media']))
);
$stats = $this->em->getRepository(Stats::class);
$stats->setStats($statsinfos, __FILE__.':'.__LINE__);
}
// pour les liens dans les templates
$this->view->url_folder = '/textes/'.$this->txt['url_clean'];
// autres infos
$this->mtinfos = array(
'object' => 'texts',
'idobject' => $this->idtext,
'urifrom' => $this->view->url_folder,
'info_rub' => 'ce texte',
'idcontent' => (int)$this->current['idcontent'],
);
$this->view->mtinfos = $this->mtinfos;
//aside
$this->view->aside = $this->asides->view($this->view);
// fil d'arianne
$this->view->locate = $this->getLocate();
// titre meta
$this->view->title_page = $this->getTitlePage();
// style en plus
$this->view->style_more = $this->getStyleMore();
// keywords et description
$this->view->meta_keywords = $this->getMetaKeywords();
$this->view->meta_description = $this->getMetaDescription();
$this->addPubliciteGoogle();
}
// }}}
// {{{ buildMenu()
protected function buildMenu()
{
$this->current = array();
$this->current['idcontent'] = 0;
$this->current['menu_name'] = '';
// menu
$menu_texte = array(
array('url'=>'','name'=>'Présentation','icone'=>'10-medical.png','id'=>'home'),
array('url'=>'ensavoirplus','name'=>$this->context['tr']->trans('en_savoir_plus'),'idclassification'=>'6','type'=>true,'icone'=>'179-notepad4.png','id'=>'ensavoirplus'),
array('url'=>'articles','name'=> 'Articles','idclassification'=>'214','type'=>true,'icone'=>'179-notepad4.png','id'=>'ensavoirplus'),
array('url'=>'extraits','name'=>$this->context['tr']->trans('extraits'),'idclassification'=>'7','type'=>true,'icone'=>'46-movie-2.png','id'=>'extraits'),
array('url'=>'entretiens','name'=>$this->context['tr']->trans('entretiens'),'idclassification'=>'8','type'=>true,'icone'=>'179-notepad4.png','id'=>'entretiens'),
);
$this->nbmes_original = $this->em->getRepository(Spectacles::class)->countSpectaclesInSpecificLanguage(
[
'id_text' => $this->idtext,
'lang' => $this->context['view']->data_text['language_src']
]
);
if ($this->nbmes_original>0) {
$menu_texte[] = array('url'=>'mises-en-scene','name'=>'En scène ('.$this->nbmes_original.')','icone'=>'28-star.png','id'=>'mises-en-scene');
}
else if ($this->nbtrad>0) {
$menu_texte[] = array('url'=>'traductions-en-scene','name'=>'En scène ('.$this->nbtrad.')','icone'=>'28-star.png','id'=>'traductions-en-scene');
}
$countecouter = $this->em->getRepository(Podcasts::class)->countPodcasts('texts',$this->idtext, 'franceinter');
$countecouter += $this->em->getRepository(Podcasts::class)->countPodcasts('texts',$this->idtext, 'soundcloud');
if ($countecouter){
$menu_texte[] = array('url'=>'podcasts','name'=> html_entity_decode('Écouter'),'icone'=>'179-notepad4.png','id'=>'podcasts');
}
if ($this->nbtrad>0) {
$menu_texte[] = array('url'=>'traductions','name'=>'Traductions ('.$this->nbtrad.')','icone'=>'179-notepad4.png','id'=>'traductions');
}
// génése
$nb_class_genese = $this->em->getRepository(Contents::class)->countAssociateContent('texts',$this->idtext,'class_genese');
if ($nb_class_genese>0) {
$menu_texte[] = array(
'url' => 'genese',
'name' => 'Genèse',
'idclassification' => '56',
'id'=>'genese'
);
}
// voir s'il y a des contenus le texte par l'auteur
if ($this->em->getRepository(Playlists::class)->countPlaylists('texts',$this->idtext,'class_texte_parauteur')>0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('texts',$this->idtext,'class_texte_parauteur');
$texte_playlist = 'Le texte par l\'auteur';
$menu_texte[] = array('url' => 'playlist/id/'.$playlist['urlClean'], 'name' => $texte_playlist, 'id' => 'playlists');
}
// voir s'il y a des contenus vidéos
if ($this->em->getRepository(Playlists::class)->countPlaylists('texts',$this->idtext,'class_en_video')>0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('texts',$this->idtext,'class_en_video');
$texte_playlist = 'En vidéo ';
$menu_texte[] = array('url' => 'playlist/id/'.$playlist['urlClean'], 'name' => $texte_playlist, 'id' => 'playlists');
}
// voir s'il y a des contenus le texte par le traducteur
if ($this->em->getRepository(Playlists::class)->countPlaylists('texts',$this->idtext,'class_texte_par_traducteur')>0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('texts',$this->idtext,'class_texte_par_traducteur');
$texte_playlist = 'Le texte par le traducteur';
$menu_texte[] = array('url' => 'playlist/id/'.$playlist['urlClean'], 'name' => $texte_playlist, 'id' => 'playlists');
}
$menu_texte[] = array('url'=>'contenus-pedagogiques','name'=>'Éduc','idclassification'=>'125','id'=>'educ');
$evenements_params_commun = array(
'special' => array(
'publish_valid' => true,
'no_schedule_contact' => true,
'by_object' => array('idtext' => $this->idtext),
)
);
if ($counts_events = $this->em->getRepository(News::class)->countNews($evenements_params_commun)){
$menu_texte['evenements'] = array('url'=>'evenements','name'=> 'Evenements ('.$counts_events.')');
}
$mark_active= 'active';
foreach ($menu_texte as $key=>$value) {
//compter le nombre de contenus associes
if (isset($value['idclassification']) && $value['idclassification']!='') {
$count = $this->contents->countAssociateContent('texts',$this->idtext,$value['idclassification']);
//pas de contenu, enlever l'item du menu
if ($count==0) {
// si il n'y a pas de contenus-pedagogiques, vérifier que les mises en scène liées non pas elle un contenu
if ($value['url']=='contenus-pedagogiques') {
$nb_spectacles_educ = $this->contents->countSpectaclesWithContentsFromTexts($this->idtext,125); // 125 = contenus éduc
if ($nb_spectacles_educ==0) {
unset($menu_texte[$key]);
}
} else {
//vider la ligne courante
unset($menu_texte[$key]);
}
}
}
if ((empty($value['url']) && $this->context['action']=='detail-texte')
|| (!empty($this->type) && $value['url']==$this->type)
|| $value['url']==$this->context['action']) {
$menu_texte[$key]['active'] = $mark_active;
$this->current['menu_name'] = $menu_texte[$key]['name'];
}
}
if (strpos($this->context['action'],'playlist')!==false) {
foreach ($menu_texte as $k=>$v) {
if (strpos($v['url'],'playlist')!==false && strpos($_SERVER['REQUEST_URI'],$v['url'])) {
$menu_texte[$k]['active'] = 'on';
$this->current['menu_name'] = $menu_texte[$k]['name'];
break;
}
}
}
if ($this->context['action']=='traductions-en-scene') {
foreach ($menu_texte as $k=>$v) {
if ($v['url']=='mises-en-scene') {
$menu_texte[$k]['active'] = 'on';
$this->current['menu_name'] = $menu_texte[$k]['name'];
}
}
}
$this->view->menu_texte = $menu_texte;
}
// }}}
// {{{ contenus()
/** Les articles associés aux textes
*
*/
public function contenus_text($type_class, $type_class_view, $other_dimensions=array('width'=>500, 'grow'=>false), $params=array())
{
parent::contenus('texts',$this->idtext,$type_class,$type_class_view,$other_dimensions,$params);
}
// }}}
// {{{ contenus_extraits()
/** Les articles associés aux textes
*
*/
public function contenus_extraits($type_class, $type_class_view, $other_dimensions=array('width'=>500, 'grow'=>false), $params=array())
{
// grouper par langue
// si on a plusieurs classifications = sous-sous-sous-sous-menu
if (is_array($type_class)) {
$multiple = true;
foreach ($type_class as $c) {
$type_class_tab[] = '\''.$c.'\'';
}
}
// pour le template = ce qui est ajouté au lien
$this->view->type_class = $type_class_view;
// requete SQL pour la liste des contenus associe a la classification
$sql = 'SELECT c.title,c.idcontent,c.display_media,c.language,cl.classification,cl.idclassification';
// select en plus
if (!empty($params['select'])) {
$sql .= ','.$params['select'];
}
$sql .= ' FROM contents c, content_classification cc, classifications cl, object_content oc ';
// from en plus
if (!empty($params['from'])) {
$sql .= ','.$params['from'];
}
// join en plus
if (!empty($params['join'])) {
$sql .= $params['join'];
}
$sql .= ' WHERE oc.idcontent=c.idcontent
AND cc.idcontent=c.idcontent
AND cc.idclassification=cl.idclassification
AND oc.object=\''.$object.'\' ';
if (!empty($params['where'])) {
$sql .= ' AND '.$params['where'];
} else {
$sql .= ' AND oc.idobject='.(int)$idobject;
}
if (!empty($params['specif_sql'])) {
$sql = $params['specif_sql'];
}
if (!empty($multiple)) {
$sql .= ' AND cl.classification IN ('.join(',', $type_class_tab).') ';
} else {
$sql .= ' AND cl.classification=\''.$type_class.'\' ';
}
$sql .= ' ORDER BY c.`range`,c.dateinsert ASC';
//AND oc.object='spectacles' AND c.language='".$lng."'
$articles_folder = new Articles_folder($this->context);
// taille maxi des vidéos
if (!empty($this->other_dimensions)) {
$articles_folder->setOtherDimensions($this->other_dimensions);
}
//echo $sql;
$articles_folder->execQuery($sql);
// liste des articles
$articles = $articles_folder->getArticles();
// article sur lequel on se trouve
$detailarticle = $articles_folder->getDetailArticle();
// marquer le contenu associé courant
if (!empty($detailarticle['idcontent'])) {
$this->current['idcontent'] = $detailarticle['idcontent'];
}
// génération des mots-clés pour les méta
if (!empty($articles)) {
foreach ($articles as $v) {
if (!empty($v['content'])) {
foreach ($v['content'] as $vv) {
if (!empty($vv['title'])) {
$this->meta_keywords .= ' '.$vv['title'];
}
}
}
}
}
// pour le template
$this->view->articles = $articles;
// pour le template
$this->view->detailarticle = $detailarticle;
// titre de la page
if (empty($detailarticle['title']) || trim($detailarticle['title']) == '') {
if (!empty($this->current['menu_name'])) {
$this->extra_locate = $this->extra_title = $this->current['menu_name'];
} else {
$this->extra_locate = $this->extra_title = 'En savoir plus';
}
} else {
$this->extra_title = $detailarticle['title'];
$this->extra_locate = $this->contents->cutSentence($detailarticle['title'],40);
}
// statistiques TODO et pour le reste qui n'est pas "ensavoirplus" ?
if (in_array($this->context['action'], array('ensavoirplus'))) {
$statsinfos = array(
'type' => 'article',
'module' => $this->context['module'],
'url' => $_SERVER['REQUEST_URI'],
'idcontent' => (int)$this->current['idcontent'],
'object' => 'texts',
'idobject' => $idobject,
'video' => (int)(!empty($detailarticle['display_media']))
);
$stats = $this->em->getRepository(Stats::class);
$stats->setStats($statsinfos, __FILE__.':'.__LINE__);
}
}
// }}}
// {{{ action_detail_texte()
/** Détails concernant le texte (accueil)
*
* @Route("/textes/{slug}/", name="text_index")
* @Route("/textes/{slug}/infos-texte", name="text_index_infos_texte")
*
* @access public
* @return void
*/
public function action_detail_texte(
$slug = null,
Request $request,
SendmailTheatre $sendmailTheatre
)
{
$this->InitController($slug, 'detail-texte');
if (empty($this->idtext)) {
return $this->redirectToRoute('erreur_type', ['type' => 'introuvable']);
}
// Vérification utilisateur connecté (pour pouvoir effectuer une demande de téléchargement de texte par email)
if ($this->context['session'] instanceof Extranetusers) {
$this->context['view']->userIsConnected = true;
}
// Gestion de la demande de texte par email
if (isset($_GET['demande-texte-par-email'])) {
$this->context['view']->download_by_mail_request['onGoing'] = true;
// L'utilisateur demande à voir le formulaire de demande de texte par email
if (isset($this->context['view']->userIsConnected)) {
$this->context['view']->download_by_mail_request['userEmail'] = $this->em->getRepository(Extranetusers::class)->getEmail($this->context['session']->getIdExtranetuser());
}
$this->context['formFactory'] = $formFactory = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'get-text-by-mail-form'
]
]);
$formFactory->add('mail_message', TextareaType::class, [
'label' => false,
'required' => true,
'constraints' => [
new NotBlank([
'message' => 'Veuillez écrire un messsage'
])
],
'attr' => [
'rows' => 8,
'cols' => 100
]
]);
$formFactory->add('validation', SubmitType::class, [
'label' => 'Envoyer la demande',
'attr' => [
'class' => 'boutform boutbig tc-bgcolor-editions'
]
]);
$this->context['form'] = $form = $formFactory->getForm();
// L'utilisateur vient d'envoyer le formulaire de demande de texte par email
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Récupération des adresses email nécessaires
$mailFrom = $this->context['view']->download_by_mail_request['userEmail'];
$text_aide = $this->em->getRepository(TextAide::class);
$mailTo = $text_aide->getEmailToDownloadText($this->idtext);
// Récupération du ou des auteurs
$textAuthors = '';
$i = 0;
$max = count($this->txt['authors']);
foreach($this->txt['authors'] as $author) {
$i++;
if ($i === 1) {
$textAuthors .= ' de ' . $author['firstname'] . ' '. $author['lastname'];
} else if ($i === $max) {
$textAuthors .= ' et ' . $author['firstname'] . ' ' . $author['lastname'];
} else {
$textAuthors .= ', ' . $author['firstname'] . ' ' . $author['lastname'];
}
}
// Récupération de l'url de la page de présentation du texte voulu
$pageUrl = 'https://www.theatre-contemporain.net' . explode('?', $_SERVER['REQUEST_URI'])[0];
// Récupération du template de l'email
$templateRepo = $this->em->getRepository(Tplmessages::class);
$mailTemplate = $templateRepo->findOneBy(['name' => 'Lire un texte']);
// Les variables utilisées dans le template de l'email
$values = [
'download_title' => $this->txt['title'],
'download_authors' => $textAuthors,
'download_page_url' => $pageUrl,
'download_applicant_first_name' => $this->context['session']->getFirstName(),
'download_applicant_last_name' => $this->context['session']->getLastName(),
'download_applicant_email' => $mailFrom,
'download_applicant_message' => $form->get('mail_message')->getData(),
'download_mail_subject' => ''
];
// Création du sujet de l'email
$mailSubject = $templateRepo->setTemplateMsg($mailTemplate->getSubject(), $values);
// Ajout de la variable manquante
$values['download_mail_subject'] = $mailSubject;
// Création du contenu de l'email
// J'ai utilisé urldecode car certaines variables ###var### sont encodées en %23 en BDD
$mailBody = $templateRepo->setTemplateMsg(urldecode($mailTemplate->getMessage()), $values);
// Création de l'email
$sendmailTheatre->setSubject($mailSubject);
$sendmailTheatre->setExpediteur('noreply@theatre-contemporain.net');
$sendmailTheatre->setDestinataire($mailTo);
$sendmailTheatre->prepareSimple($mailBody);
// Envoi de l'email
try {
$sendmailTheatre->send();
$this->context['view']->download_by_mail_request['mail_sent_message']['success'] = 'Votre message a bien été envoyé.';
} catch (Exception $e) {
$this->logger->error($e->getMessage());
$this->logger->debug($e->getTraceAsString());
// $this->context['tr']->setParams(array('contact_support' => $this->page_support));
$this->context['error']['no'] = $this->context['tr']->trans('error_no_sendmessage');
}
}
// Utilisé pour la demande du formulaire et après envoi du form
return $this->view('textes/detail-texte.html.twig', [
'form' => $form->createView()
]);
}
// Affichage normal de la page
else {
// indique que l'on est sur la page d'acceuil
$this->view->is_accueil = true;
//@todo le contenu de get_mises_en_scene
$this->get_mises_en_scene();
//personnages ?
if (!empty($this->texts->nmale) || !empty($this->texts->nfemale) || !empty($this->texts->npeople)) {
$this->txt['personnages'] = 1;
}
// contact de representation
if (!empty($this->texts->requestPerformingText) || !empty($this->texts->idcontact_performing)) {
$this->txt['request_performing'] = 1;
// si c'est l'editeur qui est aussi authorisation de representation
if ($this->texts->idcontact_performing && $this->texts->idcontact_performing === $this->texts->idcontact_publisher) {
$this->txt['performing_is_publisher'] = 1;
}
if ($this->texts->idcontact_performing > 0) {
$performing = $this->texts->getLink('idcontact_performing');
$performing_country = $performing->getLink('country');
$this->txt['performing'] = $performing->objToArray();
if (isset($performing_country->fr)) {
$this->txt['performing']['country'] = $performing_country->fr;
}
}
}
//Récupérer le podcast disponible
$culturebox_params = array(
'direction' => 'DESC',
'limit' => array(0, 1),
'special' => array(
'idtexts' => $this->idtext,
'type_podcast' => ['franceinter', 'soundcloud'],
// 'is_integrale' => true,
),
'dbg' => array('derniers_culturebox_current', 'Les replay France Culture référencés'),
);
$last_podcast = $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params, ['width' => 480, 'direction' => 'thumb']);
foreach ($last_podcast as $k => $podcast) {
if (!empty($podcast['podcast_person'])) {
foreach ($podcast['podcast_person'] as $k_person => $v_person)
if (!empty($this->txt['authors'][$v_person['idperson']])) {
$last_podcast[$k]['person'] = $v_person;
}
}
}
$this->view->last_podcast = $last_podcast;
// contact de traduction
if (!empty($this->txt['requestTranslationText']) || !empty($this->txt['idcontact_publisher'])) {
$this->txt['request_translation'] = 1;
// si c'est l'editeur qui est aussi authorisation de traduction
if (empty($this->texts->idcontact_translation) || $this->texts->idcontact_translation == $this->texts->idcontact_publisher) {
$this->txt['translation_is_publisher'] = 1;
}
// fiche du contact de traduction
if (!empty($this->texts->idcontact_translation) && $this->texts->idcontact_translation > 0) {
$ct_translation = $this->texts->getLink('idcontact_translation');
$ct_translation_country = $ct_translation->getLink('country');
$this->txt['ct_translation'] = $ct_translation->objToArray();
if (is_object($ct_translation_country)) {
$this->txt['ct_translation']['country'] = $ct_translation_country->fr;
}
}
}
if ($this->nbmes > 0) {
$this->view->mestxt = true;
}
if ($this->nbtrad > 0) {
$this->view->tradtxt = true;
}
if (($this->nbmes + $this->nbtrad) > 0) {
if ($this->txt['typetxt'] == 'translate') {
$this->view->voiraussitranslate = true;
} else {
$this->view->voiraussi = true;
}
}
if (!empty($this->txt['adaptation_infos'])) {
$adap = $this->em->getRepository(Texts::class);
$this->txt['adaptation_text'] = $adap->getInfosText(key($this->txt['adaptation_infos']));
}
// conversion champs wiki
$wikifields = array(
'textaccessmore',
'publishinfos',
'abstract',
'moreinfo',
'request_translation_text',
'request_performing_text',
'help_translation',
'help_publishing',
'help_other'
);
foreach ($wikifields as $v) {
if (empty($this->txt[$v])) continue;
$this->txt[$v] = $this->texts->wikiTransform($this->txt[$v], $this->txt['markdown']);
}
// trouver la quatrième de couverture
$quatrieme = $this->contents->getAssociateContent($this->idtext, 'texts', 'class_4couv', array('wiki_convert' => true));
if (!empty($quatrieme)) {
$this->txt['quatrieme'] = $quatrieme;
}
$this->context['view']->type_aides = array(
'prix' => array(
'type_aides' => array(2, 3),
'label' => 'Prix et distinctions',
),
'soutiens' => array(
'type_aides' => array(1),
'label' => 'Aide(s) et soutien(s)',
),
'selections' => array(
'type_aides' => array(4),
'label' => 'Sélection(s)',
),
);
$text_aide = $this->em->getRepository(TextAide::class);
foreach ($this->context['view']->type_aides as $k => $v) {
$params_sql_aide = array(
'where' => array(
array('text_aide', 'publish', 1)
),
'idtext' => $this->idtext,
'special' => array(
'aides' => array(
'type_aides' => $v['type_aides']
)
),
'get_texts_with_aides' => true,
'dbg' => array('text_' . $k, $v['label']),
);
$this->context['view']->type_aides[$k]['aides'] = $text_aide->getListTextAide($params_sql_aide);
if (empty($this->context['view']->type_aides[$k]['aides'])) {
unset($this->context['view']->type_aides[$k]);
}
}
if (!empty($this->context['view']->type_aides['prix'])) {
$this->context['view']->laureats_nominations = $this->context['view']->type_aides['prix']['aides'];
unset($this->context['view']->type_aides['prix']);
}
$hasEmailToDownloadText = $text_aide->hasEmailToDownloadText($this->idtext);
if ($hasEmailToDownloadText) {
$this->context['view']->download_text_by_mail_proposal = true;
}
$urlToDownloadText = $text_aide->getUrlToDownloadText($this->idtext);
if ($urlToDownloadText) {
$this->context['view']->download_text_by_url_proposal['url'] = $urlToDownloadText;
}
$this->extra_locate = 'Présentation du texte';
//Les évènements
$evenements_params_commun = array(
'params' => array(
'limit' => array(0, 5),
),
'special' => array(
'publish_valid' => true,
'prochains' => true,
'no_schedule_contact' => true,
'by_object' => array('idtext' => $this->idtext),
),
);
$evenements_params = $evenements_params_commun;
$list_evenements = $this->view->news_list_news['prochains'] = $this->em->getRepository(News::class)->getListNews($evenements_params);
if (count($list_evenements) <= 5) {
$nb_evenements = count($list_evenements);
$this->view->is_news_list_news = true;
foreach ($list_evenements as $k => $v) {
$exclude_news[$k] = $v['idnew'];
}
if (!empty($exclude_news)) {
$evenements_params['params']['where'] = ' AND T1.idnew NOT IN (' . join(',', $exclude_news) . ') ';
}
unset($evenements_params['special']['prochains']);
$evenements_params['special']['anciens'] = true;
$evenements_params['params']['limit'] = array(0, 5 - $nb_evenements);
$this->view->news_list_news['anciens'] = $this->em->getRepository(News::class)->getListNews($evenements_params);
}
if (empty($this->view->news_list_news['anciens'])) {
unset($this->view->news_list_news['anciens']);
}
if (empty($this->view->news_list_news['prochains'])) {
unset($this->view->news_list_news['prochains']);
}
// $this->view->next_news = $this->>em->getRepository(News::class)->getListNews($evenements_params);
//Les playlists
$playlists = $this->em->getRepository(Playlists::class);
if ($this->em->getRepository(Playlists::class)->countPlaylists('texts', $this->idtext, 'class_texte_parauteur') > 0) {
$playlist = $this->em->getRepository(Playlists::class)->getByClassification('texts', $this->idtext, 'class_texte_parauteur');
$url_clean_playlist = filter_var($playlist['urlClean'], FILTER_SANITIZE_STRING);
$idplaylist = $playlists->getIdByUrl($url_clean_playlist);
$playlist = $playlists->getInfosPlaylist(
$idplaylist,
array(
'all' => true,
'multimedias' => true
)
);
foreach ($playlist['multimedias'] as $k => $v) {
$this->context['view']->video = $v;
break;
}
$this->context['view']->video['url_clean_more'] = 'playlist/id/' . $playlist['urlClean'];
}
// On affiche le lieu du spectacle dans la page detail-texte
if (!empty($this->context['view']->spectacles['current']['spectacles'])) {
foreach ($this->context['view']->spectacles['current']['spectacles'] as $k => $v) {
$this->context['view']->spectacles['current']['spectacles'][$k]['footer_contact'] = true;
}
}
//Nous récupérons les deux prochains spectacles à l'affiches en traduction
$schedules = $this->em->getRepository(Schedules::class);
$spectacle = $this->em->getRepository(Spectacles::class);
$list_spectacles = $this->GetListSpectaclesFromSpecificLanguage(array('traduction' => true, 'limit' => '0,2', 'idtypespectacle' => 4));
foreach ($list_spectacles as $kb => $vb) {
if (!isset($vb['collage'])) {
foreach ($this->context['view']->traduc as $k => $v) {
if (isset($vb['idtext']) && $v['idtext'] == $vb['idtext']) {
if ($schedule_futur = $schedules->getDateLieuDemain($vb['idspectacle'], null, null, 'new')) {
$vb['annee_creation'] = $spectacle->getFormeDate($vb['creation_date'], '%Y', true); //%a %d/%m/%Y
$this->context['view']->spectacles_traductions["current"]["spectacles"][$vb['idspectacle']] = $vb;
$this->context['view']->spectacles_traductions["current"]["spectacles"][$vb['idspectacle']]['traduction'] = $this->context['view']->traduc[$k];
}
}
}
}
}
// voir si ce spectacle à un replay culturebox
$culturebox_params = array(
'limit' => array(0, 1),
'special' => array(
'idtexts' => array('idtext' => $this->idtext),
'type_podcast' => 'culturebox',
),
'dbg' => array('derniers_culturebox', 'Les derniers replay culturebox référencés'),
);
$format_vignette = array('width' => 680, 'direction' => 'thumb');
$this->context['view']->derniers_culturebox = $x = $this->em->getRepository(Podcasts::class)->getListPodcasts($culturebox_params, $format_vignette);
//aside
$this->asides->load('textes_thumbnail');
$this->asides->load(['common_prochain_evenement' => array(
'url_custom' => '/textes/' . $this->context['view']->url_clean . '/evenements'
)]);
$this->asides->load('common_participer_textes');
return $this->view('textes/detail-texte.html.twig');
}
}
// }}}
// {{{ action_mises_en_scene()
/** les mises en scène du texte
*
* @Route("/textes/{slug}/mises-en-scene/", name="text_mises_en_scene")
*
* @access public
* @return void
*/
public function action_mises_en_scene($slug = null)
{
$this->InitController($slug, 'mises-en-scene');
$list_spectacles = $this->GetListSpectaclesFromSpecificLanguage();
$schedules = $this->em->getRepository(Schedules::class);
$spectacle = $this->em->getRepository(Spectacles::class);
if (sizeof($list_spectacles) > 0) {
$this->extra_locate = $this->extra_title = 'Mises en scène du texte';
foreach ($list_spectacles as $kb => $vb) {
if (isset($vb['idtext']) && $this->idtext == $vb['idtext']) {
$spectacle_key_date = ["finish"];
$afficher_date_creation = true;
// recuperer les dates futurs si il y en a
$schedule_futur = $schedules->getDateLieuDemain($vb['idspectacle'], null, null, 'new');
//si il y a des dates futurs
if (!empty($schedule_futur)) {
$current_spectacle = true;
//on affiche pas la date de création
$afficher_date_creation = false;
// date dans le futur
$this->view->futurdate = true;
// ajout des mots clés basés sur les lieux et dates de représentation futurs
$this->meta_keywords .= ' ' . $schedules->ScheduleToKeywords($schedule_futur, 20);
// $spectacle_key_date = array("current", "finish");
$spectacle_key_date = array("finish");
}
$vb['annee_creation'] = $spectacle->getFormeDate($vb['creation_date'], '%Y', true); //%a %d/%m/%Y
}
if ($vb['idtypespectacle']['idtypespectacle'] == 4) {
if (isset($vb['collage']) && $vb['collage']) {
$type = "collages";
} else {
$type = "spectacles";
}
} else {
$type = "lectures";
}
foreach ($spectacle_key_date AS $val) {
$spectacles[$val][$type][$vb['idspectacle']] = $vb;
if ("finish" == $val) {
$spectacles[$val][$type][$vb['idspectacle']]['display']['affiche_date_creation'] = true; //on affichage la date de creation ?
}
}
}
// pour le template
$this->view->spectacles = $spectacles;
// titre de la page
$this->extra_locate = $this->extra_title = 'Mises en scène du texte';
} else {
$target = '';
if ($this->GetListSpectaclesFromSpecificLanguage(['traduction' => true, 'count' => true]) > 0) {
$target = 'traductions-en-scene';
}
return $this->redirect($this->context['url_module'] . '/textes/' . $this->context['view']->url_clean . '/' . $target);
}
$this->setAsidesTES_MES();
return $this->view('textes/mises-en-scene.html.twig');
}
// }}}
private function get_mises_en_scene(){
//on initialise les spectacles et le calendrier
$spectacle = $this->em->getRepository(Spectacles::class);
// on recupere le calendrier
$schedules = $this->em->getRepository(Schedules::class);
//la langue source du texte original
$language_original = $this->context['view']->data_text['language_src'];
//Nouveaux formats d'image pour la V2
$format = array('width' => $_ENV['VIGN_SPECTACLE_WIDTH'], 'height' => $_ENV['VIGN_SPECTACLE_HEIGHT'], 'direction' => 'crop');
//Anciens formats d'image pour l'ancienne version
$current_spectacle = false;
//on récupère le nombre de mises-en-scène dans la langue original
$language_originalc = $this->context['view']->data_text['language_src'];
if (!empty($this->context['view']->data_text['originaltext'])){
$language_original = $this->context['view']->data_text['originaltext']['language_src'];
}
$this->nbmes_original = $spectacle->countSpectaclesInSpecificLanguage(
[
'id_text' => $this->idtext,
'lang' => $language_originalc
]
);
//on vérifie qu'il existe bien des données à faire afficher si non, on redirige l'utilisateur ailleurs
if ($this->nbmes_original > 0) {
// classement par date de creation
$params = array(
'order' => ['creation_date', 'DESC'],
'limit' => 'all',
);
// jointure sur schedules et contacts et recherche par text OU adaptation
$special = array(
'join' => true,
'select_by_text_or_adaptation' => $this->idtext,
'spectacle' => array(
'language_egal' => $language_original
)
);
// requete standard
$sql = $spectacle->getSQLSpectacles($params, $special);
// executer la requete
$datas = $sql->getArrayResult();
//tableaux
$spec_etranger = array();
$spec = array();
$lect = array();
// mettre en forme chaque reponse
foreach ($datas AS $data) {
$data = $data[0];
$spectacle->loadResult($data);
//on affiche la date de creation
$afficher_date_creation = true;
$spectacle_key_date = ["finish"];
//on initialise le SP
$sp = array();
// infos sur le spectacle
$idspectacle = $spectacle->idspectacle; //l'id du spectacle
$sp = $spectacle->getInfosSpectacleRow($format); //on récupère les informatiosn sur le spectacle en lui indiquant les formats voulu
//on fusionne tous les auteurs/metteurs-en-scenes/acteurs en un seul tableau en supprimant les doublons
$sp = $spectacle->clearSpectaclesAddAllPersons($sp);
// recuperer les dates futurs si il y en a
$schedule_futur = $schedules->getDateLieuDemain($data['idspectacle'], null, null, 'new');
//si il y a des dates futurs
if (!empty($schedule_futur)) {
$current_spectacle = true;
//on affiche pas la date de création
$afficher_date_creation = false;
// date dans le futur
$this->view->futurdate = true;
// ajout des mots clés basés sur les lieux et dates de représentation futurs
$this->meta_keywords .= ' ' . $schedules->ScheduleToKeywords($schedule_futur, 20);
$spectacle_key_date = array("current", "finish");
}
// prochaine date et ville
$sp['display'] = array('affiche_date_creation' => $afficher_date_creation); //on affichage la date de creation ?
$sp['annee_creation'] = $spectacle->getFormeDate($spectacle->creationDate, '%Y', true); //%a %d/%m/%Y
$sp['stylemore'] = array('imagep' => 'width:85px;', 'descsp' => 'width:300px;');
// france
foreach ($spectacle_key_date AS $val) {
if ("finish" == $val) {
$sp['display'] = array('affiche_date_creation' => true); //on affichage la date de creation ?
}
//if (empty($sp['country']) || $sp['country']=='FR') {
if ($spectacle->idtypespectacle['idtypespectacle'] == 4) {
if (isset($sp['collage']) && $sp['collage']) {
$type = 'collages';
} else {
$type = 'spectacles';
}
} else {
$type = 'lectures';
}
$spec[$val][$type][$idspectacle] = $sp;
// } else {
// if ($spectacle->idtypespectacle==4) {
// $spec_etranger[$val]['spectacles'][$idspectacle] = $sp;
// } else {
// $spec_etranger[$val]['lectures'][$idspectacle] = $sp;
// }
// }
}
}
$this->view->spectacle['showcurrent'] = $current_spectacle;
$this->view->spectacles = $spec;
if (!empty($spec) || !empty($spec_etranger)) {
// recuperer un spectacle au hasard avec une affiche
$sql = 'SELECT DISTINCT(s.idspectacle), s.creation_date, f.idfile
FROM spectacles s, object_file of, files f, file_classification fc, texts t, text_spectacle ts
WHERE t.idtext=ts.idtext AND t.idtext=' . $this->idtext . '
AND s.idspectacle=ts.idspectacle
AND s.idspectacle=of.idobject
AND of.idfile=f.idfile
AND fc.idfile=f.idfile
AND fc.idclassification=21
AND of.object=\'spectacles\'
ORDER BY RAND() LIMIT 0,1';
$res = $this->texts->queryAll($sql);
// creer un objet 'spectacles'
if (!empty($res)) {
$spectacles = $this->em->getRepository(Spectacles::class);
$infospectacle = $spectacles->getInfosSpectacle($res[0]['idspectacle']);
// creer un objet 'contents'
$contents = $this->em->getRepository(Contents::class);
if (!empty($infospectacle)) {
// recuperer les fichiers associes a ce contenu
$datafile = $contents->getAssociateFileContent($res[0]['idspectacle'], 'spectacles', 'class_affiche_spec');
if (!empty($datafile)) {
$datafile[0]['vignette'] = $contents->getThumbnail($datafile[0]['file'], 255, 'L');
$infospectacle['files'] = $datafile;
}
}
// pour le template
$this->view->infospectacle = $infospectacle;
}
}
return true;
}
return false;
}
// {{{ action_traductions()
/** Les traductions du texte
*
* @Route("/textes/{slug}/traductions/", name="text_traductions")
*
* @access public
* @return void
*/
public function action_traductions($slug = null)
{
$this->InitController($slug, 'traductions');
$format_vignette_flou = $format_vignette = array('width' => $_ENV['VIGN_TEXT_WIDTH'], 'height' => $_ENV['VIGN_TEXT_HEIGHT'],'direction'=>'thumb');
$person = $this->em->getRepository(Persons::class);
$traduc = [];
// recuperer toutes les traductions de ce texte
if (!empty($this->idtext)) {
$traduc = $person->getTextsPerson($this->context['id'],'translation','publish',null,$this->idtext);
}
// remettre en forme le tableau avec le traducteur
foreach ($traduc as $idtext=>$value) {
$traduc[$idtext]['translators'] = $this->texts->getTranslators($value['idtext']);
$traduc[$idtext]['translators'] = $this->texts->noPunct($traduc[$idtext]['translators']);
$traduc[$idtext]['stylemore'] = array('imagep' => 'width:60px;', 'desctxt' => 'width:195px;');
$traduc[$idtext]['illustration'] = $this->texts->getVignetteText($idtext, $format_vignette);
$format_vignette_flou['blur'] = true;
$traduc[$idtext]['illustration_flou'] = $this->texts->getVignetteText($idtext, $format_vignette_flou);
}
// pour le template
$this->view->traduc = $traduc;
// titre de la page
$this->extra_locate = $this->extra_title = 'Traductions';
// style auteur
$this->style_more[] = 'rubrique';
// aside
$this->asides->load('common_participer_textes');
return $this->view('textes/traductions.html.twig');
}
// }}}
// {{{ action_ensavoirplus()
/** Les articles associés aux spectacles de type ensavoirplus
*
* @Route("/textes/{slug}/infos-texte/type/ensavoirplus/", name="text_ensavoirplus")
* @Route("/textes/{slug}/infos-texte/type/ensavoirplus/idcontent/{idcontent}", name="text_ensavoirplus_idcontent")
* @Route("/textes/{slug}/infos-texte/type/ensavoirplus/idcontent/{idcontent}/pdf/{p_pdf}", name="text_ensavoirplus_idcontent_pdf")
* @Route("/textes/{slug}/infos-texte/type/ensavoirplus/idcontent/{idcontent}/pdf/{p_pdf}/download/{p_download}", name="text_ensavoirplus_idcontent_pdf_download")
*
*/
public function action_ensavoirplus($slug = null, $idcontent = null, $p_pdf = null, $p_download = null)
{
$this->InitController($slug, 'ensavoirplus');
$this->setParamsPDF($p_pdf, $p_download);
$this->context['params']['idcontent'] = $idcontent;
$this->view->idcontentCurrent = $idcontent;
$this->contenus_text('class_article','ensavoirplus');
$this->view->extra_url = '/infos-texte/type';
$this->view->extra_url_pdf = '/type/ensavoirplus';
//Si l'utilisateur à un abonnement actif
$idextranetuser = null;
if ($this->getUser() instanceof Extranetusers){
$idextranetuser = $this->getUser()->getIdextranetuser();
}
//aside
$this->asides->load(['textes_menu_educ' => array(
'exec' => array(
'alone' => true,
'color' => 'context'
),
'title' => 'voir'
)]);
$this->checkConditionsPDF();
return $this->view('textes/infos-texte.html.twig');
}
// }}}
// {{{ action_articles()
/** Les articles associés aux spectacles de type articles
*
* @Route("/textes/{slug}/infos-texte/type/articles/", name="text_articles")
* @Route("/textes/{slug}/infos-texte/type/articles/idcontent/{idcontent}", name="text_articles_idcontent")
*
*/
public function action_articles($slug = null, $idcontent = null)
{
$this->context['params']['idcontent'] = $idcontent;
$this->InitController($slug, 'articles');
$this->view->typetext = 'articles';
$this->contenus_text('class_articles','articles');
$this->view->extra_url_pdf = '/type/'.$this->context['view']->typetext;
if (isset($this->view->articles)){
$this->context['view']->morearticle = true;
}
//Si l'utilisateur à un abonnement actif
$idextranetuser = null;
if ($this->getUser() instanceof Extranetusers){
$idextranetuser = $this->getUser()->getIdextranetuser();
}
$this->view->extra_url = '/infos-texte/type';
//aside
$this->asides->load(['textes_menu_educ' => array(
'exec' => array(
'alone' => true,
'color' => 'context'
)
)]);
return $this->view('textes/infos-texte.html.twig');
}
// }}}
// {{{ action_contenus_pedagogiques()
/** Les articles associés aux spectacles de type contenu education
*
* @Route("/textes/{slug}/contenus-pedagogiques/", name="text_contenus_pedagogiques")
* @Route("/textes/{slug}/contenus-pedagogiques/idcontent/{idcontent}", name="text_contenus_pedagogiques_idcontent")
* @Route("/textes/{slug}/contenus-pedagogiques/idcontent/{idcontent}/pdf/{p_pdf}", name="text_contenus_pedagogiques_idcontent_pdf")
* @Route("/textes/{slug}/contenus-pedagogiques/idcontent/{idcontent}/pdf/{p_pdf}/download/{p_download}", name="text_contenus_pedagogiques_idcontent_pdf_download")
*
*/
public function action_contenus_pedagogiques($slug = null, $idcontent = null, $p_pdf = null, $p_download = null)
{
$this->context['params']['idcontent'] = $idcontent;
$this->view->idcontentCurrent = $idcontent;
$this->InitController($slug, 'contenus-pedagogiques');
$this->setParamsPDF($p_pdf, $p_download);
// Affiche la couleur educ sur la page textes/contenus-pedagogiques
$this->context['view']->is_educ = true;
$params_sql_specific = array();
//Si l'utilisateur à un abonnement actif
$idextranetuser = null;
if ($this->context['session'] instanceof Extranetusers){
$idextranetuser = $this->context['session']->getIdextranetuser();
}
//on récupère le contenu theatre-en-acte
if ($theatre_en_acte = $this->contents->getAssociateContents($this->idtext,'texts','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' => '/textes/{v_url_clean}/contenus-pedagogiques/idcontent/key_content',
'name' => $v['title'],
'key_content' => $v['idcontent']
);
}
$urls_theatrenacte['allspectacles'] = array(
'url' => '/textes/{v_url_clean}/selections/',
'name' => 'Tous les textes'
);
//on indique quel contenus ne devant pas être récupérés avec les contenus-pedagogiques
if ($id_contents_exclude){
$params_sql_specific['where'] = ' oc.idobject='.(int)$this->idtext.' AND c.idcontent NOT IN ('.implode(',', $id_contents_exclude).')';
}
}
$params_sql_specific['limit'] = 'all';
$this->contenus_text('class_contenu_educ','contenus-pedagogiques', array(), $params_sql_specific);
if (empty($this->context['view']->articles) && !empty($id_contents_exclude) && empty($this->context['params']['idcontent'])){
$idcontent = reset($id_contents_exclude);
return $this->redirectToRoute('text_contenus_pedagogiques_idcontent', ['slug' => $this->context['view']->url_clean, 'idcontent' => $idcontent]);
}
// trouver les mises en scène de ce texte qui ont des contenus educ
$sql = 'SELECT s.`idspectacle` FROM spectacles s
JOIN text_spectacle ts ON ts.`idspectacle`=s.`idspectacle`
JOIN object_content oc ON oc.`idobject`=s.`idspectacle`
JOIN contents c ON c.`idcontent`=oc.`idcontent`
JOIN content_classification cc ON cc.`idcontent`=c.`idcontent`
WHERE c.publish=1
AND oc.object=\'spectacles\'
AND cc.idclassification=125
AND ts.idtext IN ('.$this->idtext.')
AND s.`publish`=1 AND s.`valid`=1';
$idspectacles = $this->texts->queryCol($sql);
if (!empty($idspectacles)) {
$this->context['view']->autres_spectacles = $this->em->getRepository(Spectacles::class)->getListSpectacles(array(
'special' => array(
'idspectacle' => $idspectacles,
),
'params' => array(
'limit' => array(0,200)
),
'dbg' => array('list_others_spectacles', 'Liste des autres mes avec un contenus éduc'),
));
if (!empty($this->context['view']->autres_spectacles)) {
foreach ($this->context['view']->autres_spectacles as $k=>$v) {
$this->context['view']->autres_spectacles[$k]['url_clean_more'] = 'contenus-pedagogiques/';
$this->context['view']->autres_spectacles[$k]['noshow_allauthors'] = true;
}
}
}
//aside
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(['textes_menu_educ' => array(
'exec' => array(
'alone' => true,
'color' => 'educ'
),
'title' => 'voir'
)]);
// $this->asides->load('textes_file_pdf');
$this->asides->load('textes_mes');
$this->asides->load('common_participer_textes');
$this->checkConditionsPDF();
return $this->view('textes/contenus-pedagogiques.html.twig');
}
// }}}
// {{{ action_genese()
/** Les articles "genese"
*
* @Route("/textes/{slug}/genese/", name="text_genese")
* @Route("/textes/{slug}/genese/idcontent/{idcontent}", name="text_genese_idcontent")
*
*/
public function action_genese($slug = null, $idcontent = null)
{
$this->context['params']['idcontent'] = $idcontent;
$this->InitController($slug, 'genese');
$this->contenus_text('class_genese','genese');
// aside
$this->asides->load('textes_menu_genese');
return $this->view('textes/genese.html.twig');
}
// }}}
// {{{ action_entretiens()
/** Les articles associés aux textes de type entretiens
*
* @Route("/textes/{slug}/infos-texte/type/entretiens/", name="text_entretiens")
*
*/
public function action_entretiens($slug = null)
{
$this->InitController($slug, 'entretiens');
$this->contenus_text('class_entretien','entretiens');
$this->asides->load('textes_menu_infos_texte');
return $this->view('textes/infos-texte.html.twig');
}
// }}}
// {{{ action_extraits()
/** Les articles associés aux textes de type extraits
*
* @Route("/textes/{slug}/infos-texte/type/extraits/", name="text_extraits")
* @Route("/textes/{slug}/infos-texte/type/extraits/idcontent/{idcontent}", name="text_extraits_idcontent")
* @Route("/textes/{slug}/infos-texte/type/extraits/idcontent/{idcontent}/pdf/{p_pdf}", name="text_extraits_idcontent_pdf")
* @Route("/textes/{slug}/infos-texte/type/extraits/idcontent/{idcontent}/pdf/{p_pdf}/download/{p_download}", name="text_extraits_idcontent_pdf_download")
*
*/
public function action_extraits($slug = null, $idcontent = null, $p_pdf = null, $p_download = null)
{
$this->context['params']['idcontent'] = $idcontent;
$this->setParamsPDF($p_pdf, $p_download);
$this->InitController($slug, 'extraits');
$this->contenus_text('class_extrait','extraits', array('width'=>500, 'grow'=>false), ['limit' => 'all']);
$this->view->typetext = 'extraits';
//aside
$this->asides->load('textes_menu_extrait');
$this->checkConditionsPDF();
return $this->view('textes/infos-texte.html.twig');
}
// }}}
// {{{ action_podcasts()
/** liste de lecture
*
* @Route("/textes/{slug}/podcasts/", name="text_podcasts")
* @Route("/textes/{slug}/podcasts/emission/{p_emission}", name="text_podcasts_emission")
*
* @access public
* @return void
*/
public function action_podcasts($slug = null, $p_emission = null)
{
$this->InitController($slug, 'podcasts');
$this->context['params']['emission'] = $p_emission;
$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,200),
'special' => array(
'idtexts' => $this->idtext,
'type_podcast' => ['franceinter'],
),
'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);
$soundcloud_params = $culturebox_params;
$soundcloud_params['special']['type_podcast'] = 'soundcloud';
unset($soundcloud_params['special']['type_franceinter']);
$countSoundcloud = $podcasts->countListPodcasts($soundcloud_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,
'params' => null,
'type' => 'soundcloud'
],
];
$curseur = null;
if (!empty($this->context['params']['emission']) && array_key_exists($this->context['params']['emission'], $filtres_emissions)){
$curseur = $this->context['params']['emission'];
if ($this->context['params']['emission'] == "soundcloud") {
$culturebox_params = $soundcloud_params;
} else {
$culturebox_params['special']['type_franceinter'] = $filtres_emissions[$curseur]['params'];
}
}
else{
unset($culturebox_params['special']['type_franceinter']);
$culturebox_params['special']['type_podcast'] = [
'franceinter',
'soundcloud'
];
}
$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' => '/textes/{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' => '/textes/{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_spectacles');
return $this->view('textes/podcasts.html.twig');
}
// }}}
// {{{ action_playlist_text()
/** Texte par l'auteur
*
* @Route("/textes/{slug}/playlist/id/{p_id}/", name="text_playlist")
* @Route("/textes/{slug}/playlist/id/{p_id}/playlist/{p_playlist}/", name="text_id_playlist")
* @Route("/textes/{slug}/playlist/id/{p_id}/video/{p_playlist}/", name="text_id_playlist")
*
*/
public function action_playlist_text($slug = null, $p_id = null, $p_playlist = null)
{
$this->context['params']['id'] = $p_id;
$this->context['params']['playlist'] = $p_playlist;
$this->context['params']['video'] = $p_playlist;
$this->InitController($slug, 'playlist');
$this->context['view']->meta_video = true;
$multimedias = $this->em->getRepository(Multimedias::class);
$idplaylist = parent::action_playlist();
if ($idplaylist instanceof RedirectResponse) {
return $idplaylist;
}
foreach ($this->context['view']->videos_playlist AS $video){
if (!empty($video['current'])){
$video_data = $multimedias->getInfosMultimedia($video['idmultimedia'],false,false,array('tableau' => true));
$video_data['typemultimedia'] = $multimedias->getTypeMultimediaLabel($multimedias->type);
$video_data['langue'] = $multimedias->getNameLanguage($video_data['language']);
$video_data['share'] = true;
$this->context['view']->video = $video_data;
break;
}
}
$this->context['view']->url_all_playlist = array(
'/textes/editions/auteurs' => 'Voir tous les textes par leurs auteurs',
);
// playlist = class_en_video
if (!empty($this->context['view']->playlist['classifications'][227])){
$this->asides->load('textes_infos_envideos');
}
//le texte par l'auteur
else if (!empty($this->context['view']->playlist['classifications'][144])){
$this->asides->load('playlist_txt');
}
return $this->view('textes/playlist.html.twig');
}
// }}}
// {{{ action_traductions_en_scene()
/** Les traductions du texte
*
* @Route("/textes/{slug}/traductions-en-scene/", name="text_traductions_en_scene")
*
* @access public
* @return void
*/
public function action_traductions_en_scene($slug = null)
{
$this->InitController($slug, 'traductions-en-scene');
$spectacle = $this->em->getRepository(Spectacles::class);
$list_spectacles = $this->GetListSpectaclesFromSpecificLanguage(array('traduction' => true));
if (sizeof($list_spectacles) > 0) {
foreach ($list_spectacles as $kb => $vb) {
foreach ($this->context['view']->traduc as $k => $v) {
if (isset($vb['idtext']) && $v['idtext'] == $vb['idtext']) {
$spectacle_key_date = ["finish"];
$afficher_date_creation = true;
$vb['annee_creation'] = $spectacle->getFormeDate($vb['creation_date'], '%Y', true); //%a %d/%m/%Y
$type = "";
if ($vb['idtypespectacle']['idtypespectacle'] == 4) {
if (isset($vb['collage']) && $vb['collage']) {
$type = "collages";
} else {
$type = "spectacles";
}
} else {
$type = "lectures";
}
foreach ($spectacle_key_date AS $val) {
$spectacles[$val][$type][$vb['idspectacle']] = $vb;
$spectacles[$val][$type][$vb['idspectacle']]['traduction'] = $this->context['view']->traduc[$k];
if ("finish" == $val) {
$spectacles[$val][$type][$vb['idspectacle']]['display']['affiche_date_creation'] = true; //on affichage la date de creation ?
}
}
}
}
}
// pour le template
$this->view->spectacles = $spectacles;
// titre de la page
$this->extra_locate = $this->extra_title = 'Traductions en scène';
} else {
$target = '';
if ($this->GetListSpectaclesFromSpecificLanguage(['count' => true])) {
$target = 'mises-en-scene';
}
return $this->redirect(getenv('thnet') . '/textes/' . $this->context['view']->url_clean . '/' . $target);
}
//aside commun
$this->setAsidesTES_MES();
return $this->view('textes/traductions-en-scene.html.twig');
}
// }}}
// {{{ action_evenements()
/** Les évènements associés aux textes
*
* @Route("/textes/{slug}/evenements/", name="text_evenements")
*
*/
public function action_evenements($slug = null)
{
$this->InitController($slug, 'evenements');
$object = $this->em->getRepository(News::class);
foreach (['prochains', 'anciens'] AS $value){
$evenements_params = array(
'params' => array(
'limit' => array(0,100)
),
'special' => array(
'publish_valid' => true,
'by_object' => array('idtext' => $this->idtext),
)
);
$evenements_params['special'][$value] = true;
if (!empty($exclude_news)) {
$evenements_params['params']['where'] = ' AND T1.idnew NOT IN ('.join(',', $exclude_news).') ';
}
$news_list[$value] = $object->getListNews($evenements_params);
if (!empty($news_list[$value])) {
// liste d'exclusion => pas de en cours dans les anciens
foreach ($news_list[$value] as $k=>$v) {
$exclude_news[$k] = $v['idnew'];
}
}
unset($evenements_params['special'][$value]);
}
$this->view->news_list_news = $news_list;
//Pour afficher la description tiny
$this->context['view']->is_description = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/evenements.html.twig');
}
// }}}
// {{{ action_aides_etape()
/** Etape initial catégorie du type d'aide
* @Route("/textes/{slug}/aides-etape/", name="text_aides_etape")
*/
public function action_aides_etape(
$slug = null,
Request $request,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
1,
'aides',
null,
$utilsEdit
);
$text->getFormTypeAides($request);
if ($text->validateAidesForm()){
$text->saveAides();
return $this->redirectToRoute('text_aides_etape1', ['slug' => $this->context['view']->url_clean]);
}
$this->asides->load('ajoutaides_informations_aides_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/aides-etape.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
/** Etape 1 aides du contact
* @Route("/textes/{slug}/aides-etape1/", name="text_aides_etape1")
*/
public function action_aides_etape1(
$slug = null,
Request $request,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
1,
'aides',
1,
$utilsEdit
);
$text->getSteps('Structures', 1);
if ($text->getFormContacts($request)){
if ($text->validateContactsForm()){
$text->saveContacts();
return $this->redirectToRoute('text_aides_etape2', ['slug' => $this->context['view']->url_clean]);
}
}
else{
return $this->redirectToRoute('text_aides_etape', ['slug' => $this->context['view']->url_clean]);
}
$this->asides->load('ajoutaides_informations_aides_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/aides-etape1.html.twig', [
'form' => $this->context['form']->createView()
]);
}
/** Etape 2 aides de l'aide en lien avec le contact
* @Route("/textes/{slug}/aides-etape2/", name="text_aides_etape2")
*/
public function action_aides_etape2(
$slug = null,
Request $request,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
1,
'aides',
2,
$utilsEdit
);
$text->getSteps('Informations', 2);
if ($text->getFormAides($request)){
if ($text->getValidAides()){
$text->getSaveAides();
return $this->redirectToRoute('text_aides_etape3', ['slug' => $this->context['view']->url_clean]);
}
} else {
return $this->redirectToRoute('text_aides_etape', ['slug' => $this->context['view']->url_clean]);
}
$this->asides->load('ajoutaides_informations_aides_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/aides-etape2.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// {{{ action_aides_etape3()
/** Etape 3 message de validation
* @Route("/textes/{slug}/aides-etape3/", name="text_aides_etape3")
*/
public function action_aides_etape3(
$slug = null,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
1,
'aides',
3,
$utilsEdit
);
$text->getSteps('Validation', 3);
$text->getValidation();
$this->asides->load('ajoutaides_informations_aides_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/aides-etape3.html.twig');
}
// }}}
/** Etape 1 aides du type d'aide
* @Route("/textes/{slug}/selections-etape", name="text_selections_etape")
*/
public function action_selections_etape(
$slug = null,
Request $request,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
4,
'selections',
null,
$utilsEdit
);
$text->getFormTypeAides($request);
if ($text->validateAidesForm()){
$text->saveAides();
return $this->redirectToRoute('text_selections_etape1', ['slug' => $this->context['view']->url_clean]);
}
$this->asides->load('ajoutaides_informations_selections_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/selections-etape.html.twig', [
'form' => $this->context['form']->createView()
]);
}
/** Etape 1 sélection du contact
* @Route("/textes/{slug}/selections-etape1/", name="text_selections_etape1")
*/
public function action_selections_etape1(
$slug = null,
Request $request,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
4,
'selections',
1,
$utilsEdit
);
$text->getSteps('Structures', 1);
if ($text->getFormContacts($request)){
if ($text->validateContactsForm()){
$text->saveContacts();
return $this->redirectToRoute('text_selections_etape2', ['slug' => $this->context['view']->url_clean]);
}
}
else{
return $this->redirectToRoute('text_selections_etape', ['slug' => $this->context['view']->url_clean]);
}
$this->asides->load('ajoutaides_informations_selections_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/selections-etape1.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
/** Etape 2 sélection de l'aide en lien avec le contact
* @Route("/textes/{slug}/selections-etape2/", name="text_selections_etape2")
*/
public function action_selections_etape2(
$slug = null,
Request $request,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
4,
'selections',
2,
$utilsEdit
);
$text->getSteps('Informations', 2);
if ($text->getFormAides($request)){
if ($text->getValidAides()){
$text->getSaveAides();
return $this->redirectToRoute('text_selections_etape3', ['slug' => $this->context['view']->url_clean]);
}
}
else{
return $this->redirectToRoute('text_selections_etape', ['slug' => $this->context['view']->url_clean]);
}
$this->asides->load('ajoutaides_informations_selections_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/selections-etape2.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
/** Etape 3 message de validation
* @Route("/textes/{slug}/selections-etape3", name="text_selections_etape3")
*/
public function action_selections_etape3(
$slug = null,
UtilsEdit $utilsEdit,
FormFactoryInterface $formFactory,
SessionInterface $session
)
{
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login');
}
$this->InitController($slug, 'aides_etape');
$text = $this->getAjoutAideObject(
$formFactory,
$session,
4,
'selections',
3,
$utilsEdit
);
$text->getSteps('Validation', 3);
$text->getValidation();
$this->asides->load('ajoutaides_informations_selections_textes');
$this->view->no_bookmark = true;
$this->asides->load('common_participer_textes');
return $this->view('textes/selections-etape3.html.twig');
}
/** Appel du constructeur d'aide des objets
* $typeaide : 4 = sélections
*/
public function getAjoutAideObject(
FormFactoryInterface $formFactory,
SessionInterface $session,
$typeaide = 4,
$type = 'selections',
$num = null,
$utilsEdit = null
)
{
$params_object = array(
'object' => [
'type' => 'text',
'value' => $this->idtext
],
'aides' => array(
'typeaide' => $typeaide //sélection
),
'url' => '/textes/'.$this->context['view']->url_clean.'/'.$type.'-etape'.$num
);
$this->context['formFactory'] = $formFactory->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
return new Ajoutaides(
$this->em,
$utilsEdit,
$session,
$this->context,
$params_object
);
}
// {{{ GetListSpectaclesFromSpecificLanguage()
/** Récupération des textes en scènes dans la langue oriignal ou dans les langues de traductions
*
*/
public function GetListSpectaclesFromSpecificLanguage($params = array()){
$spectacle = $this->em->getRepository(Spectacles::class);
$person = $this->em->getRepository(Persons::class);
//si nous sommes sur un texte traduit basé sur un texte original
$original = true;
if ($this->txt['typetxt'] == 'translate'){
$original = false;
}
//language_egal
//language_different
if (!empty($this->idtext)) {
// translation
// adaptation_by_language_spectacle
//si c'est un texte oiginal nous voulons les textes traduits
if ($original){
$language_original = $this->context['view']->data_text['language_src'];
$this->context['view']->traduc = $person->getTextsPerson($this->context['id'], 'translation', 'publish', null, $this->idtext);
foreach ($this->context['view']->traduc as $t) {
$idtexts[] = $t['idtext'];
}
$idtexts_original = array($this->idtext);
}
else{
$language_original = null;
if (!empty($this->context['view']->data_text['originaltext']['language_src'])){
$language_original = $this->context['view']->data_text['originaltext']['language_src'];
$idtexts_original = array($this->context['view']->data_text['originaltext']['idtext']);
}
$langue_traduction = $this->context['view']->data_text['language_src'];
$this->context['view']->traduc = array($this->idtext => $this->context['view']->data_text);
$idtexts = array($this->idtext);
}
}
// parcourir les traductions et trouver les mises en scènes
$params_request = array(
'params' => array(
'order' => ['creation_date', 'DESC'],
'limit' => array(0, 500),
),
'dbg' => array('list_traductions_mise_en_scene', 'Liste des mises en scène à partir des traductions'),
);
//Si nous sélections un type de spectacle spécifique
if (!empty($params['idtypespectacle'])){
$params_request['params']['where'] = 'AND s.idtypespectacle = 4 ';
}
//Si nous voulons une limite aux spectacles
if (!empty($params['limit'])){
if (!is_array($params['limit'])){
$params['limit'] = explode(',', $params['limit']);
if (count($params['limit']) == 1){
array_unshift($params['limit'], 0);
}
}
$params_request['params']['limit'] = $params['limit'];
}
if (!empty($params['traduction'])){
if (isset($idtexts)){
$params_request['special']['idtext'] = $idtexts;
}
else if (!empty($idtexts_original)) {
$params_request['special']['idtext'] = $idtexts_original;
}
if ($original){
$params_request['special']['spectacle']['language_different'] = $language_original;
}
else if (!empty($langue_traduction)) {
$params_request['special']['spectacle']['language_egal'] = $langue_traduction;
}
// print_r($params_request);
// 'language_different' => $language_original
}
else{
$params_request['special']['join'] = true;
$params_request['special']['select_by_text_or_adaptation'] = $this->idtext;
$params_request['special']['spectacle'] = array(
'language_egal' => $language_original
);
}
if (!empty($params['count'])){
$params_request['params']['cout_only'] = true;
return count($spectacle->getListSpectacles($params_request));
}
else{
return $spectacle->getListSpectacles($params_request, null, false, ['allauthors' => true, 'carrer_couleurs' => true]);
}
}
// }}}
// {{{ getTxt()
/** Les infos sur un texte
*
*/
public function getTxt() { return $this->txt; }
// }}}
// {{{ 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; }
// }}}
// {{{ setOtherDimensions()
/** Taille maxi des vidéos
*
*/
public function setOtherDimensions($other_dimensions) { $this->other_dimensions = $other_dimensions; }
// }}}
// {{{ setParamsComments()
/** Paramètre des commentaires
*
*/
public function setParamsComments($params_comments) { $this->params_comments = $params_comments; }
// }}}
// {{{ getMtinfos()
/** Infos mon théâtre
*
*/
public function getMtinfos() { return $this->mtinfos; }
// }}}
// {{{ setAsidesTES_MES()
/** Initialisation d'un aside commun à deux actions
*
*/
public function setAsidesTES_MES($params = array()){
//aside
$original_traduction = array(
'original' => array(
'name' => 'En langue originale',
'key_activate' => 'mises-en-scene',
'count' => $this->GetListSpectaclesFromSpecificLanguage(['count' => true])
),
'traduction' => array(
'name' => 'En traduction',
'key_activate' => 'traductions-en-scene',
'count' => $this->GetListSpectaclesFromSpecificLanguage(['traduction' => true, 'count' => true])
)
);
if (array_key_exists('unset_traduction', $params) && !$params['unset_traduction']){
unset($original_traduction['traduction']);
}
if (array_key_exists('unset_original', $params) && !$params['unset_original']){
unset($original_traduction['original']);
}
if (array_key_exists('csm_name_en_scene', $params)){
$original_traduction['original']['name'] = $params['csm_name_en_scene'];
}
// aside
$this->asides->load(['url_lists_alone,tn_cdn_sn' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $original_traduction,
'url' => '/textes/{v_url_clean}/key_activate/',
'params' => array(
'activate' => $this->context['action'],
)
),
'title' => 'Voir'
)]);
$this->asides->load('common_carrer_informations');
$this->asides->load('common_participer_textes');
}
// }}}
}