<?php
namespace App\ClassTheatre;
use App\Controller\ArticlesController;
use App\Service\Date_time;
use App\Service\Functions;
use App\Service\Text\Keywords;
use App\Service\WebServices\StatusCodes;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Entity\Bannieres;
use TheatreCore\Entity\Contents;
use TheatreCore\Entity\Exports;
use TheatreCore\Entity\Extranetusers;
use TheatreCore\Entity\Multimedias;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Templates;
class TheatreController extends AbstractController
{
public $em = null;
public $parameterBag = null;
// context[view]
public $context = null;
public $view = null;
// menu courant
protected $current = array();
// identifiant de l'objet
protected $idobject = null;
// type d'object (persons, spectacles...)
protected $object = null;
// faut-il ne pas enregistrer les stats de cette page
protected $no_stats = null;
// grouper les contenus associés par classification
public $group_by_classification = false;
// url de la racine du dossier
public $url_folder = null;
// taille image dans le contenu
public $other_img_size = null;
// contenu publie ou pas
protected $publish_status = 1;
// période de recherche
protected $search_period = array();
// zone de recherche
protected $search_area = null;
// saison de recherche
protected $search_season = null;
// direction de recherche
protected $order = 'DESC';
// limite de recherche
protected $limit = array(
'start' => 0,
'end' => 400,
);
// nombre de résultat par page
protected $perPage = 400;
// format de vignette
protected $format_vignette = array();
// version de la carte des régions
protected $carte_version = 'flash';
protected $lng = 'fr';
protected $js_more;
protected $rub_courante;
public function __construct(TranslatorInterface $tr, TokenStorageInterface $tokenStorage)
{
$token = $tokenStorage->getToken();
$GLOBALS['session'] = $token ? $token->getUser() : null;
$GLOBALS['url_module'] = $_ENV['URL_THNET'];
$this->context['url_module'] = $GLOBALS['url_module'];
$this->context['params'] = array();
$this->context['session'] = $token ? $token->getUser() : null;
$this->context['tokenStorage'] = $tokenStorage;
// if($GLOBALS['session'] == 'anon.'){
// $GLOBALS['session'] = new Extranetusers();
// }
$GLOBALS['lng'] = 'fr';
$GLOBALS['module'] = $GLOBALS['context']['module'] = 'thnet';
$this->context['module'] = $GLOBALS['context']['module'];
$GLOBALS['format_ymd'] = array(
'en' => array('YMD' => '%d %B %Y', 'YM' => '%B %Y', 'Y' => '%Y'),
'fr' => array('YMD' => '%d %B %Y', 'YM' => '%B %Y', 'Y' => '%Y'),
'pt' => array('YMD' => '%d %B %Y', 'YM' => '%B %Y', 'Y' => '%Y'),
'de' => array('YMD' => '%d %B %Y', 'YM' => '%B %Y', 'Y' => '%Y'),
'ru' => array('YMD' => '%d %B %Y', 'YM' => '%B %Y', 'Y' => '%Y'),
'es' => array('YMD' => '%d %B %Y', 'YM' => '%B %Y', 'Y' => '%Y'),
);
if(!isset($GLOBALS['tr'])){
$GLOBALS['tr'] = $tr;
}
$GLOBALS['format_date']['fr'] = 'd/m/Y';
$GLOBALS['format_date_heure'][$GLOBALS['lng']] = 'h:i';
$this->context['lng'] = $GLOBALS['lng'];
$this->context['tr'] = $tr;
$this->context['view'] = new \Stdclass();
$this->view = &$this->context['view'];
// Utile pour les asides uniquement... (ça reprends l'ancien format de la première version du site, il faudra à changer ça à l'avenir
$this->context['view']->context['params'] = &$this->context['params'];
if(isset($GLOBALS['rub_courante'])){
$this->context['view']->controller = $GLOBALS['rub_courante'];
}
// barre addthis
$this->view->use_addthis = true;
$this->view->title_page = '';
$this->view->errtrace['request_uri'] = $_SERVER['REQUEST_URI'];
}
public function view($template, $view = [])
{
if(method_exists($this, 'finalizeAction')){
$this->finalizeAction();
}
if(!empty($this->form_r) || !empty($this->reponse) || !empty($this->error) || !empty($this->view->form_r) || !empty($this->view->reponse) || !empty($this->view->error)) {
$this->view->vmesg = 1;
}
$this->view->racine_site = $_ENV['URL_THNET'];
$this->view->css_refresh = '202311161600'; //pour forcer la mise-à-jour du css YYYY-MM-DD-V
$this->view->url_module = $this->context['url_module'];
$this->common();
$view = array_merge($view, (array)$this->view);
// renvoyer au format json
if (!empty($this->context['json_response']) && $this->context['json_response']) {
$displayWidget = '';
if(isset($_GET['displayWidget'])){
$displayWidget = (int)$_GET['displayWidget'];
}
$view['minHeader'] = true;
$html = $this->renderview($template,
$view
);
$htmlPage = 'setWidgetThnet('.json_encode($html).', '.$displayWidget.')';
echo $htmlPage;
exit;
// return $this->render($html);
} else if(!empty($this->context['pdf']) && $this->context['pdf']){
$template = 'pdfs/'.$template;
$mpdf = new \Mpdf\Mpdf(['marginTop' => 300, 'tempDir' => getenv('PATH_TEMPORAIRE').'mpdf/']);
$url2 = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$url = preg_replace('/pdf\/1/', '', $url2);
$mpdf->SetHTMLFooter('
<table width="100%">
<tr>
<td width="10%" style="font-size: 0.7rem">{DATE j-m-Y}</td>
<td width="75%" style="text-align: center;">{PAGENO}/{nbpg}</td>
<td width="15%" align="center"></td>
</tr>
<tr>
<td colspan="3" style="font-size: 0.7rem">'.$url.'</td>
</tr>
</table>');
$htmlPage = $this->renderView($template,
$view
);
$mpdf->WriteHTML($htmlPage);
$name_file = '';
if(!empty($this->context['params']['name_file'])){
$name_file = $this->context['params']['name_file'];
}
if(!empty($this->context['params']['download'])){
$mpdf->Output($this->context['action'].$name_file.'-'.md5(uniqid()).'.pdf', 'D');
}
else {
$mpdf->Output($this->context['action'] . $name_file . '-' . md5(uniqid()) . '.pdf', 'I');
}
return true;
}
return $this->render($template,
$view
);
}
private function common()
{
if(!isset($this->func)){
$this->func = new Functions();
}
$conges_start = '2018-07-27';
$conges_end = '2018-08-20';
if (date('Y-m-d') > $conges_start && date('Y-m-d') < $conges_end) {
$this->view->conges_services = array(
'ajoutspectacle' => array(
'message' => true,
'close' => false,
),
'ajoutvideo' => array(
'message' => true,
'close' => false,
),
'annonces' => array(
'message' => true,
'close' => false,
),
'evenements' => array(
'message' => true,
'close' => false,
),
'contacts' => array(
'message' => true,
'close' => false,
),
'critiques' => array(
'message' => true,
'close' => false,
),
'ajoutdate' => array(
'message' => true,
'close' => false,
),
);
$this->view->conges = 'Vous pouvez continuez à enregistrer vos spectacles pendant la période estivale, leur validation et mise en ligne reprendra à partir du 20 août.';
}
// header et footer
if (!isset($this->view->ajax)) {
$this->view->pages_infos = array(
'page_evenements' => '/evenements/',
'page_auteurs' => '/auteurs/biographies',
'page_acteurs' => '/acteurs/biographies',
'page_biographies' => '/biographies/',
'page_metteurs' => '/metteurs-en-scene/biographies',
'page_traducteurs' => '/traducteurs/biographies',
'page_spectacles' => '/spectacles/',
'page_educ' => '/educ/spectacles/type/prochains/area/',
'page_calendrier' => '/calendrier/affiche',
'page_critiques' => '/critiques/spectacles',
'page_montheatre' => '/montheatre/',
'page_accueil' => '/',
'page_liens' => '/liens/annuaire',
'page_contacts' => '/site/contacts',
'page_structures' => '/contacts/',
'page_annonces' => '/annonces/',
// 'page_editions' => '/editions/editeurs',
'page_editions' => '/textes/contemporain/affiche',
'page_actu' => '/actualites/theatre',
'page_blogs' => '/blogs/',
'page_mozilla' => '/site/mozilla',
'page_statistiques' => '/site/statistiques',
'page_cris' => '/site/association-cris',
'page_forum' => '/forum/',
'page_inscri_nl' => '/lettre/inscription',
'page_aide_rss' => '/site/aide-rss',
'page_rss_news' => '/actualites/nouvelles',
'page_rss_forum' => '/forum/rss.php',
'page_rss_annonces' => '/annonces/suivre/rss',
'page_publicite' => '/site/publicite',
'page_telechargements' => '/documents/',
'page_videos' => '/videos/actualites/',
'page_audios' => '/audios/'
);
$this->view->racine_site = $_ENV['URL_THNET'];
$this->view->page_encodage = 'UTF-8';
$this->view->annee = date('Y');
$this->view->lng = 'fr';
// preciser l'encodage
if (empty($this->view->page_encodage)) {
$this->view->page_encodage = 'iso-8859-1';
}
// titre du site par defaut
if (empty($titresite)) {
$titresite = 'theatre-contemporain.net';
}
if (empty($this->view->titre_de_la_page)) {
if (!empty($this->view->title_page)) {
$this->view->titre_de_la_page = $this->view->title_page . ' - ' . $titresite;
$this->view->titre_de_la_page_short = $this->view->title_page;
} elseif (!empty($this->title_page)) {
$this->view->titre_de_la_page = $this->title_page . ' - ' . $titresite;
$this->view->titre_de_la_page_short = $this->title_page;
} else {
$this->view->titre_de_la_page = $titresite;
$this->view->titre_de_la_page_short = $titresite;
}
}
// header
$extra_keywords = ' culture théâtre spectacle planches scène art dramatique comédie tragédie vaudeville lieu cadre arène boulevard compagnie contemporain auteur éditeur édition actualité date représentation pièce oeuvre';
/* Meta Keywords */
if (empty($meta_keywords)) {
$meta_keywords = '';
}
$meta_keywords .= ' ' . $this->view->titre_de_la_page . $extra_keywords;
if (!empty($meta_keywords)) {
$__kw = new Keywords();
$__kw->cache_enabled = false;
$__kw->parseCached($meta_keywords, $GLOBALS['module']);
if (!empty($__kw->keywords)) {
$meta_keywords = $__kw->toString(', ');
$meta_dc_keywords = $__kw->toString('; ');
} else {
unset($meta_keywords);
unset($meta_dc_keywords);
}
unset($__kw);
} else {
unset($meta_keywords);
unset($meta_dc_keywords);
}
// pour la vue (inutile depuis 10 ans... mais je l'utilise encore pour l'Opengraph Twitter ?)
if(!empty($this->func)){
if (!empty($meta_keywords)) {
$this->view->meta_keywords = $this->func->convEncoding($meta_keywords, $this->view->page_encodage);
}
if (!empty($meta_dc_keywords)) {
$this->view->meta_dc_keywords = $this->func->convEncoding($meta_keywords, $this->view->page_encodage);
}
if (!empty($this->view->meta_description)) {
$this->view->meta_description = $this->func->convEncoding($this->view->meta_description, $this->view->page_encodage);
}
}
// rub_courante inexistant
if (!isset($this->rub_courante)) {
$this->rub_courante = null;
if(!empty($GLOBALS['rub_courante'])){
$this->rub_courante = $GLOBALS['rub_courante'];
}
}
// menu principal
$menu_principal = array(
'actualites' => array(
'disable_mega_menu' => true,
'href' => $this->view->racine_site,
'title' => 'Page d\'accueil et d\'actualités sur le théâtre',
'label' => 'actu',
'class' => 'none',
),
'biographies' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_biographies'],
'title' => 'Les auteurs de théâtre contemporain',
'label' => 'biographies',
'class' => 'lien',
),
'editions' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_editions'],
'title' => 'Les maisons d\'édition de théâtre, les revues et les anthologies',
'label' => 'textes',
'class' => 'lien',
'activates_options_more' => [
'textes'
]
),
'spectacles' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_spectacles'],
'title' => 'Les dossiers complets des spectacles à l\'affiche et les archives',
'label' => 'spectacles',
'class' => 'lien',
),
'videos' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_videos'],
'title' => 'Les vidéos référencées sur théatre-contemporain ',
'label' => 'Vidéos',
'class' => 'lien',
),
'audios' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_audios'],
'title' => 'Les podcasts référencées sur théatre-contemporain ',
'label' => 'Audio',
'class' => 'lien',
),
'educ' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_educ'],
'title' => 'Les contenus pédagogiques liés aux spectacles – pièces démontées',
'label' => 'éduc',
'class' => 'lien',
),
'critiques' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_critiques'],
'title' => 'Critiques de spectacles',
'label' => 'critiques',
'class' => 'none',
),
'contacts' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_structures'],
'title' => 'Les théâtres, les lieux et les compagnies',
'label' => 'théâtres & cie.',
'class' => 'lien',
),
'evenements' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_evenements'],
'title' => 'Proposer votre évènement de theatre',
'label' => 'évènements',
'class' => 'none',
),
'annonces' => array(
'href' => $this->view->racine_site . $this->view->pages_infos['page_annonces'],
'title' => 'Les incontournables petites annonces consacrées au monde du spectacle',
'label' => 'annonces',
'class' => 'lien',
),
// 'telechargements' => array(
// 'href' => $this->view->racine_site.$this->view->pages_infos['page_telechargements'],
// 'title' => 'Documents numérisés à télécharger',
// 'label' => 'doc. numérisés',
// 'class' => 'none',
// ),
);
foreach ($menu_principal as $k => $v) {
$menu_principal[$k]['label'] = $this->func->convEncoding($v['label'], $this->view->page_encodage);
$menu_principal[$k]['title'] = $this->func->convEncoding($v['title'], $this->view->page_encodage);
if ($k == $this->rub_courante || (!empty($menu_principal[$k]['activates_options_more']) && in_array($this->rub_courante, $menu_principal[$k]['activates_options_more']))) {
$menu_principal[$k]['active'] = 'on';
} else {
$menu_principal[$k]['active'] = 'off';
}
}
$this->view->menu_principal = $menu_principal;
if (!empty($this->view->flux_rss)) {
foreach ($this->view->flux_rss as $k => $v) {
$this->view->flux_rss[$k]['name'] = $this->func->convEncoding($v['name'], $this->view->page_encodage);
}
}
// js en plus
if (!empty($this->view->js_more) || !empty($this->view->js_more)) {
if (!empty($this->view->js_more)) {
$js_more = $this->view->js_more;
}
if (!empty($this->view->js_more)) {
$js_more = $this->view->js_more;
}
if (is_array($js_more)) {
foreach ($js_more as $js) {
if (is_array($js)) {
foreach ($js as $ojs) {
$this->view->js_more_final[] = $ojs;
}
} else {
$this->view->js_more_final[] = $this->view->racine_site . '/navigation/js/' . $js;
}
}
} else {
$this->view->js_more_final[] = $this->view->racine_site . '/navigation/js/' . $js_more;
}
}
}
//// la bannière du bas seulement une fois
if (count(
($banniere = $this->em->getRepository(Bannieres::class)->getBottomBanniere())
) > 0
) {
if (
! empty($banniere)
&& file_exists($_ENV['PATH_IMG'] . 'bannieres/' . $banniere['imgfile'])
) {
$banniere['img'] = $_ENV['URL_IMG'] . 'bannieres/' . $banniere['imgfile'];
$this->view->banniere = $banniere;
if (!isset($_SESSION['hide_bottom_banner'])) {
$this->view->show_bottom_banner = true;
} else {
// si la différence entre la date actuelle et la date du cookie est supérieure à 2heures, supprimer la session
$date_hide_bottom_banner = new \Datetime($_SESSION['hide_bottom_banner']);
$date_courante = new \Datetime(date('Y-m-d H:i:s'));
$interval = $date_hide_bottom_banner->diff($date_courante);
if ($interval->i > 60) {
unset($_SESSION['hide_bottom_banner']);
unset($this->view->show_bottom_banner);
}
}
}
}
}
// {{{ _doAction()
/** Appelle la méthode qui correspond à l'action passée
*
*
* @param string $action le nom de l'action
* @access protected
* @return boolean false si pas de méthode trouvée, true sinon
*/
protected function _doAction($action)
{
if (!is_string($action) || $action=='') return false;
$methode_folder = 'action_'.str_replace('-','_',$action);
if(method_exists($this, $methode_folder)) {
$this->$methode_folder();
if(method_exists($this, 'finalizeAction')) {
$this->finalizeAction();
}
return true;
}
return false;
}
// }}}
// {{{ doAction()
/** Appelle la méthode correspondante à l'action en cours
*
*
* @param mixed $action si spécifiée, utilise la chaine passée comme action
* @access public
* @return boolean true si ok, false si méthode non trouvée
*/
public function doAction($action=null)
{
if (is_null($action)) {
$action = $this->context['action'];
}
return $this->_doAction($action);
}
// }}}
// {{{ tokenCsrf()
/**
* Générer un token pour l'anti csrf en GET
*
* @return string le token
*/
function tokenCsrf($page_name,&$context) {
// il y a eu un pb avec csrf
if(!empty($_GET['tc']) && $_GET['tc']=='err') {
$context['error'][] = 'Il y a eu un problème pendant le processus';
}
// page du token
$page_name = md5($page_name);
// dans la session et le context->view
$_SESSION[$page_name] = md5(uniqid(rand(), true).session_id());
$context['view']->t_csrf = $_SESSION[$page_name];
return $_SESSION[$page_name];
}
// {{{ checkCsrfToken()
/**
* vérifier le token csrf pour les paramètres get
*
* @return string le token
*/
function checkCsrfToken($page_name) {
// on vérifie que le token présent dans la session est le mm que celui passé en GET
if(!empty($_SESSION[md5($page_name)]) && !empty($_GET['tc'])
&& $_SESSION[md5($page_name)] == $_GET['tc']) {
return true;
} else {
return false;
}
}
// }}}
// {{{ action_enimages()
/** Les diaporamas
*
*/
public function action_enimages($idobject,$object)
{
// requete SQL pour les diaporamas
$sql = 'SELECT * FROM object_content oc, contents c, content_classification cc, classifications cl
WHERE oc.idcontent=c.idcontent
AND cc.idcontent=c.idcontent
AND cc.idclassification=cl.idclassification
AND cl.classification=\'class_diaporama\'
AND oc.idobject=\''.$idobject.'\'
AND oc.object=\''.$object.'\' ';
// contenus diaporamas publies ou pas
if($this->publish_status<2) {
$sql .= ' AND c.publish='.(int)$this->publish_status;
}
// classement par range et/ou date d'insertion
$sql .= ' ORDER BY c.`range`,c.dateinsert ASC';
// chemin vers l'album/diaporama flash
$this->view->url_param = $_ENV['URL_THNET'].'/site/diaporama-param/object/'.$object.'/idobject/'.$idobject;
// selection des contents avec la classification "ex : class_diaporama"
$contents = $this->em->getRepository(Contents::class);
// contenus diaporamas publies ou pas
if($this->publish_status<2) {
$contents->setPublishStatus($this->publish_status);
}
$diaporamas = $this->contents->queryAll($sql);
if (!empty($diaporamas)) {
if (!empty($this->context['params']['idcontent'])) {
$idcontent = $this->context['params']['idcontent'];
} else {
// si premier affichage prendre le premier article de la liste
$idcontent = $diaporamas[0]['idcontent'];
}
// nombre de diaporamas
if(count($diaporamas)>1) {
$this->view->autrediapo = true;
}
foreach($diaporamas as $key=>$value) {
// recuperer les photos associees a ce contenu
$datafile = $this->contents->getAssociateFileContent($value['idcontent'],'contents','class_photo_content');
// recuperer chaque fichier associe a chaque diaporama
if(!empty($datafile)) {
foreach($datafile as $fk => $fv) {
$label = '';
if (trim($fv['description']) != '') {
if ($label) $label .= ' - ';
$label .= $fv['description'];
}
if (trim($fv['title']) != '') {
if ($label) $label .= ' - ';
$label .= $fv['title'];
}
if (trim($fv['copyright']) != '') {
if ($label) $label .= ' - ';
$label .= $fv['copyright'];
}
// label
$datafile[$fk]['label'] = $label;
// vignette
$datafile[$fk]['vignette'] = $this->contents->getThumbnail($datafile[$fk]['file'],100,'thumb');
}
// vignette de l'album avec le premier fichier
$datafile[0]['vignette_entete'] = $this->contents->getThumbnail($datafile[0]['file'],130,'thumb');
$diaporamas[$key]['vignette_entete'] = $datafile[0]['vignette_entete'];
// tous les fichiers du diaporama
$diaporamas[$key]['files'] = $datafile;
}
// exclure le diaporama en cours
if($diaporamas[$key]['idcontent']==$idcontent) {
$diaporamas[$key]['exclure'] = true;
}
}
// liste des diaporamas pour le template
$this->view->diaporamas = $diaporamas;
//=====> on veut le detail d'un diaporama
// selection des contents avec la classification "class_diaporama"
$detaildiaporama = $this->contents->get($idcontent);
// recuperer les photos associees a ce contenu
$datafile = $this->contents->getAssociateFileContent($detaildiaporama['idcontent'],'contents','class_photo_content');
// parcourir le tableau des photos et creer des vignettes
if(!empty($datafile)) {
foreach($datafile as $k=>$v) {
// copyright ?
/*if($v['watermark']==1) {
$watermark = $v['copyright'];
} else {
$watermark = null;
}*/
$watermark = null; // désactivé
$params_img = array('watermark' => $watermark);
// 3 tailles => 100 / 400 / 680
$datafile[$k]['vignette'] = $this->contents->getThumbnail($datafile[$k]['file'],500,'thumb');
$datafile[$k]['format_375'] = $this->contents->getThumbnail($datafile[$k]['file'],375,'thumb');
$datafile[$k]['format_480'] = $this->contents->getThumbnail($datafile[$k]['file'],480,'thumb');
$datafile[$k]['format_1600'] = $this->contents->getThumbnail($datafile[$k]['file'],1600,'thumb');
$datafile[$k]['image'] = $this->contents->getThumbnail($datafile[$k]['file'],400,'L',$params_img);
$datafile[$k]['image_grd'] = $this->contents->getThumbnail($datafile[$k]['file'],680,'L',$params_img);
if(!empty($v['copyright']) && !empty($v['description'])) {
$datafile[$k]['copyright_view'] = '<br /><i>'.$v['copyright'].'</i>';
} else {
$datafile[$k]['copyright_view'] = '<i>'.$v['copyright'].'</i>';
}
// prendre la premiere image ou celle passée en param comme img de tete
if(!empty($_GET['idfile']) && (int)$_GET['idfile']==$datafile[$k]['idfile']) {
$detaildiaporama['image_tete'] = $datafile[$k];
//$datafile[$k]['active']['image_tete'] = $datafile[$k];
unset($datafile[$k]);
} elseif(empty($detaildiaporama['image_tete'])) {
$detaildiaporama['image_tete'] = $datafile[$k];
$detaildiaporama['vignette_entete'] = $datafile[$k]['vignette'];
}
}
$detaildiaporama['files'] = $datafile;
}
// convertir les champs wiki si nécessaire
foreach (array('deck','text') as $v) {
if (empty($detaildiaporama[$v])) continue;
$detaildiaporama[$v] = $this->contents->wikiTransform($detaildiaporama[$v]);
}
if(!empty($detaildiaporama['idcontent'])) {
$this->current['idcontent'] = $detaildiaporama['idcontent'];
}
// pour le template
$this->view->detaildiaporama = $detaildiaporama;
}
// voir si choix de template pour contents via le backoffice
$templates = $this->em->getRepository(Templates::class);
$others_templates = $templates->getAssociateTemplates('contents',$idcontent);
if(!empty($others_templates)) { // TODO : voir l'utilite du tableau
if($object=='persons') {
$object = 'biographies';
}
$this->view->stdpage = $object.'/'.$others_templates[0]['fichier'].'.std.html';
$this->context['def_tpl'] = $others_templates[0]['fichier'];
}
$this->view->gallery_css = true;
$this->js_more[] = 'lightgallery/lightgallery.min.js';
// titre de la page et fil d'arianne
$this->view->extra_locate = $this->extra_title = 'En images';
}
// }}}
// {{{ action_gadget()
/** Gadget
*
*
* @access public
* @return void
*/
public function action_gadget()
{
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
$params = array();
// taille de l'image ?
$preview_sizes = array(
'none' => 65,
'small' => 65,
'bigsmall' => 90,
'large' => 100,
);
$post = [];
if(!empty($_POST) && !empty($_POST['form'])){
$post = $_POST['form'];
}
if(!empty($post['preview']) && array_key_exists($post['preview'], $preview_sizes)) {
$vignette_size = $preview_sizes[$post['preview']];
$params[] = 'preview='.$post['preview'];
} else {
$vignette_size = $preview_sizes['small'];
}
if(!empty($post['multiple_element'])) {
$params[] = 'multiple_element='.$post['multiple_element'];
}
// taille de la colonne
if(!empty($post['colsize'])) {
$params[] = 'colsize='.$post['colsize'];
$colsize = $post['colsize'];
} else {
$colsize = 344;
}
// hauteur de la colonne
if(!empty($post['heightcol'])) {
$params[] = 'heightcol='.$post['heightcol'];
$heightcol = $post['heightcol'];
} else {
$heightcol = null;
}
// nombre d'items maxi
$max_nbitems = 50;
if(!empty($post['nbitems']) && is_numeric($post['nbitems']) && $post['nbitems']<=$max_nbitems) {
$params[] = 'nbitems='.$post['nbitems'];
$nbitems = $post['nbitems'];
if($nbitems>5) { $nbitems = 5; }
} else {
$nbitems = 1;
}
// taille de la colonne = taille de la vignette x par nbitems + haut et bas
if(empty($heightcol)) {
$hauteur_widget = ($nbitems*$vignette_size)+110;
} else {
$hauteur_widget = $heightcol;
}
$this->view->widget_width = $colsize+80;
if(!empty($params) || !empty($preview)) {
$params_string = join('&',$params);
} else {
$params_string = null;
}
// formulaire
for($i=1;$i<50;$i++) {
$val[$i] = $i;
}
$this->context['formFactory']->add('nbitems', ChoiceType::class, [
'label' => 'Nombre à afficher',
'choices' => $val
]);
$preview_sizes_name = array(
'large' => 'Vignette (100x100 pixels)',
'bigsmall' => 'Vignette (80x80 pixels)',
'small' => 'Petite vignette (55x55 pixels)',
'none' => 'Pas de vignette',
);
$this->context['formFactory']->add('preview', ChoiceType::class, [
'label' => 'Taille de l\'image',
'choices' => array_flip($preview_sizes_name)
]);
$nombre_colonnes = array(
0 => 'Non',
1 => 'Oui',
);
$this->context['formFactory']->add('multiple_element', ChoiceType::class, [
'label' => 'Plusieurs colonnes ?',
'choices' => $nombre_colonnes
]);
$this->context['formFactory']->add('colsize', TextType::class, [
'label' => 'Largeur de la colonne (en pixels)',
'attr' => array('size' => 3)
]);
$this->context['formFactory']->add('heightcol', TextType::class, [
'label' => 'Hauteur de la colonne (en pixels)',
'attr' => array('size' => 3)
]);
//règles
// $this->context['form']->addRule('colsize','La largeur doit-être un nombre','numeric');
// $this->context['form']->addRule('heightcol','La hauteur doit-être un nombre','numeric');
$this->context['form'] = $this->context['formFactory']->getForm();
// largeur, nbitems et hauteur par défaut
if(!empty($vignette_size)) {
$this->context['form']->setData(array('preview' => $vignette_size));
}
if(empty($post['colsize'])) {
$this->context['form']->setData(array('colsize' => $colsize+10));
}
if(empty($post['heightcol'])) {
$this->context['form']->setData(array('heightcol' => $hauteur_widget));
}
if(empty($post['nbitems'])) {
$this->context['form']->setData(array('nbitems' => $nbitems));
}
if(isset($post['multiple_element'])){
$this->context['form']->setData(array('multiple_element' => 1));
}
$url_widget = $_ENV['URL_THNET'].$this->url_folder.'/widget/';
$url_widget_iframe = $url_widget.'?'.$params_string;
$iframe_code = '<iframe src="'.$url_widget_iframe.'" style="width:'.($colsize+40).'px; height:'.$hauteur_widget.'px;border:none;"></iframe>';
$this->view->iframe_code_html = $iframe_code;
$this->view->iframe_code = htmlentities($iframe_code);
//Non responsive
$url_widget_ajax = $url_widget.'?v=ajax&'.$params_string;
$rtl = "\n";
$ajax_code = '<script type="text/javascript" src="'.$_ENV['URL_THNET'].'/navigation/js/widget_thnet.js"></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));
//Responsive
$url_widget_ajax = $url_widget.'?v=ajax&responsive=1&'.$params_string;
$ajax_code = '<script type="text/javascript" src="'.$_ENV['URL_THNET'].'/navigation/js/widget_thnet.js"></script>'.$rtl;
$ajax_code .= '<div class="widget_thnet_content" data-content="'.$url_widget_ajax.'"></div>';
$this->view->ajax_code_responsive = trim($ajax_code);
$this->extra_title = 'Widget';
$this->extra_locate = 'Widget';
}
// }}}
// {{{ action_playlist()
/** liste de lecture
*
*
* @access public
* @return void
*/
public function action_playlist($params_display = array())
{
// objet
$playlists = $this->em->getRepository(Playlists::class);
// trouver la playlist
if(!empty($this->context['params']['id'])) {
$url_clean_playlist = filter_var($this->context['params']['id'], FILTER_SANITIZE_STRING);
$idplaylist = $playlists->getIdByUrl($url_clean_playlist);
} else {
return $this->redirect($this->view->url_folder);
}
// playlist
$playlist = $playlists->getInfosPlaylist(
$idplaylist,
array(
'all' => true,
'multimedias' => true
),
$params_display
);
// pour les textes, la playlist doitêtre associée au texte
if($this->context['controller']=='textes' && isset($this->idtext)) {
foreach($playlist['idtext'] as $k=>$v) {
if($v['idtext']==$this->idtext) {
$is_text = true;
break;
}
}
if(empty($is_text)) {
return $this->redirectToRoute('erreur');
}
}
if(empty($playlist)) {
return $this->redirect($this->url_folder);
}
if(empty($playlist['multimedias'])) {
return $this->redirectToRoute('erreur');
}
if(!empty($this->infosperson) && $this->infosperson['sexe']==2) {
foreach($playlist['classifications'] as $k=>$v) {
if($v['classification']=='class_auteur_meme') {
$playlist['classifications'][$k]['view_name'] = 'L\'auteure par elle-même';
}
}
}
$this->context['view']->playlist = $playlist;
// on a une video en paramètre
if(!empty($this->context['params']['video'])) {
$url_clean = filter_var($this->context['params']['video'], FILTER_SANITIZE_STRING);
// la première au chargement
foreach($playlist['multimedias'] as $k=>$v) {
if($v['url_clean']==$url_clean) {
$idmultimedia = $v['idmultimedia'];
break;
}
}
}
// si rien, prendre la première vidéo de la playlist
if(empty($idmultimedia)) {
foreach($playlist['multimedias'] as $k=>$v) {
$idmultimedia = $v['idmultimedia'];
break;
}
}
// les autres
if(!empty($playlist['multimedias'])) {
foreach($playlist['multimedias'] as $k=>$v) {
$playlist['multimedias'][$k]['description_courte'] = $playlists->cutSentence($v['description'],100);
$playlist['multimedias'][$k]['description'] = html_entity_decode($playlist['multimedias'][$k]['description']);
// video en cours
if($v['idmultimedia']==$idmultimedia) {
$playlist['multimedias'][$k]['current'] = true;
$this->context['view']->playlist['title'] = $playlist['multimedias'][$k]['sujet_titre'];
$multimedias = $this->em->getRepository(Multimedias::class);
$video = $multimedias->getInfosMultimedia($idmultimedia,false,false,array('tableau' => true));
$video['player'] = $multimedias->getPlayer($video);
$video['typemultimedia'] = $multimedias->getTypeMultimediaLabel($video['mediatype']);
$video['langue'] = $multimedias->getNameLanguage($video['language']);
$video['share'] = true;
$this->context['view']->video = $video;
}
}
$this->context['view']->videos_playlist = $playlist['multimedias'];
}
// titre de la page
$this->extra_locate = $this->extra_title = $playlist['title'];
}
// }}}
// {{{ getDoAction()
/** Récupérer l'action possible
*
*/
public function getDoAction($possible_do = array('edit','delete','publish'))
{
// action ?
if(!empty($_REQUEST['do']) && in_array($_REQUEST['do'],$possible_do)) {
$do = $_REQUEST['do'];
} else {
$do = null;
}
return $do;
}
// }}}
// {{{ __getView()
/** Getter View
*
* @param string $attr Attribut
* @access public
* @return void
*/
public function __getView($attr)
{
if(!empty($this->context['view']->$attr)) {
return $this->context['view']->$attr;
}
return '';
}
// }}}
// {{{ contenus()
/** Les articles associés aux dossiers
*
*/
public function contenus($object, $idobject, $type_class = null, $type_class_view = null, $other_dimensions=array('width'=>500, 'grow'=>false), $params=array())
{
// 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;
if(!empty($params['count_only'])){
$sql = 'SELECT COUNT(DISTINCT(c.idcontent)) ';
}
else{
// requete SQL pour la liste des contenus associe a la classification
$sql = 'SELECT c.title,c.idcontent,c.link,c.writer_group,c.writer,c.date_article,c.writer_group_url,c.dateinsert,
oc.idclassification as group_idclassification, cloc.classification as group_classification,
c.is_link,c.deck,c.idextranetuser,c.display_media,c.language,cl.classification,cl.idclassification,e.login';
}
// select en plus
if(!empty($params['select'])) {
$sql .= ','.$params['select'];
}
$sql .= ' FROM contents c
LEFT JOIN extranetusers e ON c.idextranetuser=e.idextranetuser
, content_classification cc, classifications cl, object_content oc
LEFT JOIN classifications cloc ON oc.idclassification=cloc.idclassification ';
// 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.'\' ';
// contenu publié ou pas ?
if($this->publish_status<2) {
$sql .= ' AND c.publish='.(int)$this->publish_status;
}
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) && !empty($type_class_tab)) {
$sql .= ' AND cl.classification IN ('.join(',', $type_class_tab).') ';
} else if(!empty($type_class)) {
$sql .= ' AND cl.classification=\''.$type_class.'\' ';
}
// classement précisé sinon par date
if($type_class=='class_critique') {
$sql .= ' ORDER BY c.`date_article` DESC';
} else {
$sql .= ' ORDER BY c.`range`,c.dateinsert ASC';
}
if(!array_key_exists('limit', $params)) {
$sql .= ' LIMIT 0,10 ';
} else {
if($params['limit']!='all') {
if(is_array($params['limit'])) {
$sql .= ' LIMIT '.$params['limit'][0].','.$params['limit'][1];
} else {
$sql .= ' LIMIT '.$params['limit'];
}
} else {
$sql .= ' ';
}
}
// classe de gestion des articles
$articles_folder = new ArticlesController($this->em, $this->context['tokenStorage'], $this->context);
if(!empty($params['setGroupByClassification'])){
$articles_folder->setGroupByClassification($params['setGroupByClassification']);
}
// grouper par classifications
if($this->group_by_classification===true) {
$articles_folder->group_by_classification = true;
}
// taille maxi des vidéos
if(!empty($other_dimensions)) {
$articles_folder->setOtherDimensions($other_dimensions);
}
if(!empty($this->other_dimensions)) {
$articles_folder->setOtherDimensions($this->other_dimensions);
}
// taille des images
if(!empty($this->other_img_size)) {
$articles_folder->setImageSize($this->other_img_size);
}
if(!empty($params['count_only'])){
return $articles_folder->contents->queryOne($sql);
}
else{
// execute la requete
$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'];
}
//Index des noms de catégorie pour les articles
$voir_langues = array(
'français' => 'Voir aussi',
'anglais' => 'See',
'portugais' => 'Assistir',
'allemand' => 'Siehe auch',
'espagnol' => 'Ver',
);
// génération des mots-clés pour les méta
if(isset($this->meta_keywords)) {
if (!empty($articles)) {
foreach($articles as $k_content => $a_content) {
if(!empty($a_content['articles_by_lng'])) {
foreach ($a_content['articles_by_lng'] as $k => $v) {
if (!empty($v['content'])) {
foreach ($v['content'] as $vv) {
if (!empty($vv['title'])) {
$this->meta_keywords .= ' ' . $vv['title'];
}
}
}
$articles[$k_content]['articles_by_lng'][$k]['menu_title'] = (isset($voir_langues[$v['term']])) ? $voir_langues[$v['term']] : null;
}
}
else{
if (!empty($a_content['content'])) {
foreach($a_content['content'] as $vv) {
if (!empty($vv['title'])) {
$this->meta_keywords .= ' '.$vv['title'];
}
}
}
$articles[$k_content]['menu_title'] = (isset($voir_langues[$a_content['term']])) ? $voir_langues[$a_content['term']] : null;
}
}
}
}
// pour le template
if(!empty($params['return_content'])) {
return $articles;
}
$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);
}
// voir si choix de template pour contents via le backoffice
if (!empty($detailarticle['idcontent'])) {
$templates = $this->em->getRepository(Templates::class);
$others_templates = $templates->getAssociateTemplates('contents',$detailarticle['idcontent']);
}
if(!empty($others_templates)) { // TODO : voir l'utilite du tableau
if($object=='persons') {
$object = 'biographies';
}
if($object=='texts') {
$object = 'textes';
}
$this->view->stdpage = $object.'/'.$others_templates[0]['fichier'].'.std.html';
$this->context['def_tpl'] = $others_templates[0]['fichier'];
}
}
}
// }}}
// {{{ exports()
/** Exports des différents documents auprès des sites externes
*
*/
public function exports(&$template = null)
{
//Si nous réclamons le mode "ajax"
if(!empty($_GET['v']) && $_GET['v']=='ajax') {
$uri_export = false;
if(!empty($_GET['uri'])){
$uri_exports = explode('/',$_GET['uri']);
$uri_exports = explode('.', $uri_exports[2]);
if(!empty($uri_exports[1])){
$uri_export = $uri_exports[1];
}
if(!empty($uri_exports[0]) && $uri_exports[0] != 'www'){
$uri_export = $uri_exports[0];
}
}
else if(!empty($_GET['partenaire'])){
$uri_export = $_GET['partenaire'];
}
if(empty($this->context['params']['cat'])){
unset($this->context['params']['cat']);
}
else {
$cat_params = implode('_', $this->context['params']['cat']);
}
$params_api_action = implode('_', $this->context['params']);
if(isset($cat_params)){
$params_api_action = array_merge($params_api_action, $cat_params);
}
$params_api = [
'controller' => $this->context['controller'],
'action' => $this->context['action'],
'params' => $params_api_action,
'uri' => $uri_export
];
$exports = $this->em->getRepository(Exports::class);
//Nous vérifions que ça existe bien
$extranetusers = $this->em->getRepository(Extranetusers::class);
if(!empty($_GET['key_public']) && $extranetusers->checkAPIKey($_GET['key_public'])) {
$template_ajax = $exports->getExportByPublicKey(
$_GET['key_public'],
$params_api
);
}
else {
$template_ajax = $exports->getExportBy(
$params_api
);
}
if($template_ajax){
$html = $template_ajax['template'].$template_ajax['footer'];
if(!empty($template_ajax['css'])) {
$html .= '<style>'.$template_ajax['css'].'</style>';
}
$filetest = getenv('PATH_ROOT').'templates/includes/template_ajax.inc.html.twig';
file_put_contents($filetest,$html);
$this->context['json_response'] = true;
$this->view->iframe_page = true;
$this->view->template_ajax = $template_ajax;
}
}
}
// }}}
// {{{ setOtherImgSize()
/** Définir la taille de l'image dans le contenu
*
*
* @param array $other_img_size Définition de l'image
* @access public
*/
public function setOtherImgSize($other_img_size) { $this->other_img_size = $other_img_size; }
// }}}
// {{{ setNoStats()
/** pas de stats
*
*
* @param bool $value Actif/non actif
* @access public
*/
public function setNoStats($value=true) { $this->no_stats = $value; }
// }}}
// {{{ isNoStats()
/** pas de stats ?
*
*
* @return bool
* @access public
*/
public function isNoStats() { return $this->no_stats; }
// }}}
// {{{ setPublishStatus()
/** Précise si on veux les articles publiés, pas publiés ou tous
*
* Par défaut : uniquement les publiés
*
*/
public function setPublishStatus($publish_status=1) { $this->publish_status = $publish_status; }
// }}}
// {{{ getJsMore()
/** Js en plus (getter)
*
*/
public function getJsMore() { return $this->js_more; }
// }}}
// {{{ getApiData()
/** retourner les données dans un formatage convenant à l'API => soit JSON, soit XML
*
* @param arrau $datas les données
* @param string $type le type à utiliser (json ou xml)
* @return array
*/
public function getApiData($datas,$type='json',$only_value=true,$json_pretty_print=false)
{
// convertir les types
if($type=='xml') {
// traite le XML
require_once PATH_LIBS.'XML/Xml.php';
return array2xml($datas);
} else {
// jsonp ou json
if(!empty($_GET['callback'])) {
return filter_var($_GET['callback'], FILTER_SANITIZE_STRING).'('.json_encode($datas).')';
} else {
if($only_value) {
$datas = array_values($datas);
} else {
$datas = json_encode($datas);
}
if($json_pretty_print || isset($_REQUEST['json_pretty_print'])) {
if($json_pretty_print=='JSON_UNESCAPED_SLASHES'
|| (isset($_REQUEST['json_pretty_print']) && $_REQUEST['json_pretty_print']=='JSON_UNESCAPED_SLASHES')) {
return json_encode($datas,JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
} else {
return json_encode($datas,JSON_PRETTY_PRINT);
}
} else {
return json_encode($datas);
}
}
}
}
// }}}
// {{{ getApiType()
/** retourner le type demandé : XML ou JSON. Défaut : json
*
* @return string
*/
public function getApiType()
{
if(!empty($this->context['params']['f'])) {
if($this->context['params']['f']=='xml') {
return 'xml';
} else {
return 'json';
}
} elseif(!empty($_REQUEST['f'])) {
if($_REQUEST['f']=='xml') {
return 'xml';
} else {
return 'json';
}
} else {
return 'json';
}
}
// }}}
// {{{ apiHeaderType()
/** retourner le header suivant le type de l'api
*
* @return void
*/
public function apiHeaderType($api_type,$statut=200)
{
if($api_type=='xml') {
header("Content-type: text/xml");
} else {
header('Content-type: application/json');
}
header(StatusCodes::httpHeaderFor($statut));
}
// }}}
// {{{ getSaisonsNav()
/** Navigation dans les saisons
*
* @return array
*/
public function getSaisonsNav($saisons,$current_saison) {
$saisons_nav = array();
if(!empty($saisons)) {
foreach($saisons as $s) {
if(isset($prev)) {
$saisons_nav['next'] = $s;
break;
}
if($s==$current_saison && !isset($saisons_nav['prev'])) {
if(isset($current_s)) {
$saisons_nav['prev'] = $current_s;
}
$prev = true;
}
$current_s = $s;
}
}
return $saisons_nav;
}
// }}}
// {{{ getSaison()
/** Récupérer le paramètre des saisons
*
* @return string
*/
public function getSaison()
{
if(!empty($_REQUEST['s'])) {
$saison = filter_var($_REQUEST['s'], FILTER_SANITIZE_URL);
} else {
$saison = null;
}
return $saison;
}
// }}}
// {{{ getYear()
/** Récupérer le paramètre des années
*
* @return int
*/
public function getYear()
{
if(!empty($_REQUEST['y']) && is_numeric($_REQUEST['y'])) {
return filter_var($_REQUEST['y'], FILTER_SANITIZE_NUMBER_INT);
} else {
return null;
}
}
// }}}
// {{{ getFrom()
/** Récupérer le paramètre de début de période
*
* @return int
*/
public function getFrom()
{
return Date_time::getDateParam('from');
}
// }}}
// {{{ getTo()
/** Récupérer le paramètre de fin de période
*
* @return int
*/
public function getTo()
{
return Date_time::getDateParam('to');
}
// }}}
// {{{ getFromPeriod()
/** Récupérer le début de recherche
*
* @return string
*/
public function getFromPeriod() { return $this->search_period['from']; }
// }}}
// {{{ getToPeriod()
/** Récupérer la fin de recherche
*
* @return string
*/
public function getToPeriod() { return $this->search_period['to']; }
// }}}
// {{{ getArea()
/** Récupérer la zone de recherche
*
* @return string
*/
public function getArea() { return $this->search_area; }
// }}}
// {{{ getSeason()
/** Récupérer la saison de recherche
*
* @return string
*/
public function getSeason() { return $this->search_season; }
// }}}
// {{{ getListSeasonsYears()
/** générer la liste des saisons et des années à partir de la liste des dates
*
* @param array $listdates Liste des dates
* @param string $only retourner uniquelent e tableau des saisons ou le tableau des années
* @return array
*/
public function getListSeasonsYears($listdates,$only=null,$change_order=false)
{
foreach($listdates as $a) {
if($a['date']>date('Y-m-d', mktime(0,0,0,8,31,$a['annee'])) ) {
$s = $a['annee'].'-'.($a['annee']+1);
} else {
$s = ($a['annee']-1).'-'.$a['annee'];
}
$annees_saisons['saisons'][$s] = $s;
//$annees_saisons['saisons_key'][] = $s;
$annees_saisons['annees'][$a['annee']] = $a['annee'];
}
if($only) {
return $annees_saisons[$only];
}
if(isset($annees_saisons)){
if($change_order) {
krsort($annees_saisons['annees']);
krsort($annees_saisons['saisons']);
}
return $annees_saisons;
}
else{
return array();
}
}
// }}}
// {{{ getIdpersonType()
/** Récupérer le paramètre de l'auteur
*
* @return int
*/
public function getIdpersonType($type='idauthor',$tabs=array())
{
if(!empty($tabs)) {
if(!empty($_REQUEST['idperson_'.$type]) && is_numeric($_REQUEST['idperson_'.$type])
&& !empty($tabs[$_REQUEST['idperson_'.$type]])) {
return (int)$_REQUEST['idperson_'.$type];
}
} else {
if(!empty($_REQUEST['idperson_'.$type]) && is_numeric($_REQUEST['idperson_'.$type])) {
return (int)$_REQUEST['idperson_'.$type];
}
}
return null;
}
// }}}
// {{{ getIdpersonDirector()
/** Récupérer le paramètre du metteur en scène
*
* @return int
*/
public function getIdpersonDirector($tabs=array()) { return $this->getIdpersonType('director',$tabs); }
// }}}
// {{{ getIdpersonAuthor()
/** Récupérer le paramètre de l'auteur
*
* @return int
*/
public function getIdpersonAuthor($tabs=array()) { return $this->getIdpersonType('author',$tabs); }
// }}}
// {{{ setSearchPeriod()
/** Préciser la période de recherche
*
* @return int
*/
public function setSearchPeriod($from,$to)
{
$this->search_period = array(
'from' => $from,
'to' => $to,
);
}
// }}}
// {{{ isSearchPeriod()
/** Y a t-il une période de recherche ?
*
* @return bool
*/
public function isSearchPeriod()
{
if(!empty($this->search_period)) {
return true;
} else {
return false;
}
}
// }}}
// {{{ isSearchArea()
/** Y a t-il une zone de recherche ?
*
* @return bool
*/
public function isSearchArea()
{
if(!empty($this->search_area)) {
return true;
} else {
return false;
}
}
// }}}
// {{{ setSearchArea()
/** Préciser la zone de recherche
*
* @return int
*/
public function setSearchArea($area)
{
$this->search_area = $area;
}
// }}}
// {{{ isSearchSeason()
/** Y a t-il une saison de recherche ?
*
* @return bool
*/
public function isSearchSeason()
{
if(!empty($this->search_season)) {
return true;
} else {
return false;
}
}
// }}}
// {{{ setSearchSeason()
/** Préciser la zone de recherche
*
* @return int
*/
public function setSearchSeason($season)
{
$this->search_season = $season;
}
// }}}
// {{{ setOrder()
/** Préciser la direction de recherche
*
* @return void
*/
public function setOrder($order)
{
if(strtoupper($order)=='DESC' || strtoupper($order)=='ASC') {
$this->order = strtoupper($order);
}
}
// }}}
// {{{ getOrder()
/** Récupère la direction de recherche
*
* @return string
*/
public function getOrder() { return $this->order; }
// }}}
// {{{ isOrder()
/** Y a t-il une direction de recherche ?
*
* @return bool
*/
public function isOrder()
{
if(!empty($this->order)) {
return true;
} else {
return false;
}
}
// }}}
// {{{ getLimit()
/**
* Limite départ et fin
*/
public function getLimit($limit=null,$return_array=false)
{
if(empty($limit)) {
foreach(array('start','end') as $limit) {
if(!empty($_REQUEST[$limit]) && is_numeric($_REQUEST[$limit]) && ($limit=='start' || $limit=='end')) {
$this->limit[$limit] = $_REQUEST[$limit];
}
// si end-start > à perPage, alors ajouter perPage à start
if(($this->limit['end']-$this->limit['start'])>$this->perPage) {
$this->limit['end'] = $this->limit['start']+$this->perPage;
}
}
if($return_array) {
return array($this->limit['start'],$this->limit['end']);
} else {
return $this->limit;
}
} else {
if(!empty($_REQUEST[$limit]) && is_numeric($_REQUEST[$limit]) && ($limit=='start' || $limit=='end')) {
$this->limit[$limit] = $_REQUEST[$limit];
}
// si end-start > à perPage, alors ajouter perPage à start
if(($this->limit['end']-$this->limit['start'])>$this->perPage) {
$this->limit['end'] = $this->limit['start']+$this->perPage;
}
return $this->limit[$limit];
}
}
// }}}
// {{{ getLimitStart()
/**
* Récupèrer les limites de recherche
*/
public function getLimitStart() { return $this->getLimit('start'); }
// }}}
// {{{ getLimitEnd()
/**
* Récupèrer les limites de recherche
*/
public function getLimitEnd() { return $this->getLimit('end'); }
// }}}
// {{{ setLimit()
/** Préciser la limite de recherche
*
* @return int
*/
public function setLimit($start,$end)
{
$this->limit = array(
'start' => $start,
'end' => $end,
);
}
// }}}
// {{{ getPagination()
/**
* Pour la vue => infos de pagination
*/
public function getPagination($total,$limitPage=10,$params=array())
{
$pagination['total'] = $total;
if($total<$this->perPage) {
$pagination['perPage'] = $total;
} else {
$pagination['perPage'] = $this->perPage;
}
$request_uri = str_replace('datestart', 'DATEBEGIN', $_SERVER['REQUEST_URI']);
if(isset($params['url_custom'])){
$request_uri = str_replace('datestart', 'DATEBEGIN', $params['url_custom']);
}
if($this->getLimitStart()<$total) {
if($this->getLimitStart()>0) {
$pagination['previous'] = preg_replace('#start=([0-9]+)#', 'start='.($this->getLimitStart()-$this->perPage), $request_uri);
}
if(!empty($request_uri) && strpos($request_uri, 'start=')!==false) {
$pagination['next'] = preg_replace('#start=([0-9]+)#', 'start='.($this->getLimitStart()+$this->perPage), $request_uri);
} else {
if(!empty($request_uri) && strpos($request_uri, '?')!==false) {
$pagination['next'] = $request_uri.'&start='.$this->perPage;
} else {
$pagination['next'] = $request_uri.'?start='.$this->perPage;
}
}
}
if(!empty($limitPage)) {
$nb_pages = ceil($total/$this->perPage);
$position = $p = 0;
for($i=1; $i<=$nb_pages; $i++) {
$pages[$i] = array(
'num' => $i,
'start' => $p,
);
if($p==$this->getLimitStart()) {
$pages[$i]['current'] = true;
$position = $i;
}
if(strpos($request_uri, 'start=')!==false) {
$pages[$i]['url'] = preg_replace('#start=([0-9]+)#', 'start='.$p, $request_uri);
} else {
if(strpos($request_uri, '?')!==false) {
$pages[$i]['url'] = $request_uri.'&start='.$p;
} else {
$pages[$i]['url'] = $request_uri.'?start='.$p;
}
}
$p = $p+$this->perPage;
}
$limitPage = round($limitPage/2);
if($nb_pages>$limitPage) {
$reducePages = array();
if($position==1) { // position début
foreach($pages as $k=>$v) {
if($k==($limitPage)) {
$reducePages[$k] = array(
'num' => '...',
'current' => true,
'point' => true,
);
} elseif($k>($limitPage-1) && $k<$nb_pages) {
} else {
$reducePages[$k] = $v;
}
}
} elseif($position==$nb_pages) { // position fin
foreach($pages as $k=>$v) {
if($k==1 || $k>($nb_pages-($limitPage-1))) {
$reducePages[$k] = $v;
} elseif($k==2) {
$reducePages[2] = array(
'num' => '...',
'current' => true,
'point' => true,
);
}
}
} else {
// compter le nb avant et après la position
$nb_before = 0;
$nb_after = 0;
foreach($pages as $k=>$v) {
if($k<$position) {
$nb_before++;
} elseif($k>$position) {
$nb_after++;
}
$reducePages[$k] = $v;
}
$reducePagesOk = array();
foreach($reducePages as $k=>$v) {
if($k!=1 && $k!=$nb_pages && $k!=$position) {
if($k==($position-2)) {
$reducePages[$k] = array(
'num' => '...',
'current' => true,
'point' => true,
);
} elseif(count($reducePages)>$limitPage && $k!=($position-1) && $k!=($position+1)) {
unset($reducePages[$k]);
}
} else {
}
}
}
/*
if($position>1) {
$reducePages[] = $pages[1];
$reducePages[] = array(
'num' => '...',
'current' => true,
'point' => true,
);
}
if($position>$limitPage) {
$reducePages += array_slice($pages, $position-$limitPage-2, $limitPage);
} else {
$reducePages += array_slice($pages, 0, $position-1);
}
$reducePages[] = $pages[$position];
$reducePages = array_merge($reducePages, array_slice($pages, $position, $limitPage));
if($position==1) {
if($position<count($pages)) {
$reducePages[] = array(
'num' => '...',
'current' => true,
'point' => true,
);
$reducePages[] = $pages[count($pages)];
}
}
*/
$pagination['pages'] = $reducePages;
} else {
if(!empty($pages)) {
$pagination['pages'] = $pages;
}
}
}
foreach(array('next','previous') as $f) {
if(!empty($pagination[$f])) {
$pagination[$f] = str_replace('DATEBEGIN', 'datestart', $pagination[$f]);
}
}
if(!empty($pagination['pages'])) {
foreach($pagination['pages'] as $k=>$v) {
if(!empty($pagination['pages'][$k]['url'])) {
$pagination['pages'][$k]['url'] = str_replace('DATEBEGIN', 'datestart', $pagination['pages'][$k]['url']);
}
}
}
if($total<=$this->perPage || $position==$nb_pages) {
unset($pagination['next']);
}
if(!empty($pagination['previous']) && $position==1) {
unset($pagination['previous']);
}
if(!empty($params['total_dates'])) {
$pagination['total_dates'] = $params['total_dates'];
}
return $pagination;
}
// }}}
// {{{ isFormatVignette()
/** Y a t-il un format de vignette
*
* @return bool
*/
public function isFormatVignette()
{
if(!empty($this->format_vignette)) {
return true;
} else {
return false;
}
}
// }}}
// {{{ setFormatVignette()
/** Définir le format des vignettes
*
* @return bool
*/
public function setFormatVignette($format_vignette) {
if(!empty($format_vignette['vignette'])) {
$this->format_vignette['vignette'] = $format_vignette['vignette'];
}
if(!empty($format_vignette['stylemore'])) {
$this->format_vignette['stylemore'] = $format_vignette['stylemore'];
}
}
// }}}
// {{{ getCommonSearch()
public function getInitSearch()
{
}
// }}}
// {{{ getCommonSearch()
/** recherche par saison, période, date_start, date_end
*
* @return void
*/
public function getCommonSearch($params_search=array())
{
$this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder('', FormType::class);
if(empty($params_search['nb_days'])) {
$params_search['nb_days'] = 3;
}
// saison courante
$this->context['view']->current_saison = Date_time::getLastSaison();
// une saison ?
$this->context['view']->saison = Date_time::getSaisonParam();
if($this->context['view']->saison==$this->context['view']->current_saison) {
$this->context['view']->is_current_saison = true;
}
// une période ?
$this->context['view']->datestart = Date_time::getDateParam('datestart');
$this->context['view']->dateend = Date_time::getDateParam('dateend');
if(!Date_time::checkDateFormat($this->context['view']->datestart)) {
$this->context['view']->datestart = null;
} else {
$this->context['view']->datestart_string = $this->em->getRepository(Spectacles::class)->getFormeDate($this->context['view']->datestart,'d/m/y');
}
if(!Date_time::checkDateFormat($this->context['view']->dateend)) {
$this->context['view']->dateend = null;
} else {
$this->context['view']->dateend_string = $this->em->getRepository(Spectacles::class)->getFormeDate($this->context['view']->dateend,'d/m/y');
}
// un nombre de jours ?
if(empty($this->context['view']->days)){
$this->context['view']->days = Date_time::getDaysParam();
}
// une année ?
$this->context['view']->year = Date_time::getYearParam();
if(!$this->context['view']->saison && !$this->context['view']->year && !$this->context['view']->days && !$this->context['view']->datestart && !$this->context['view']->dateend) {
if(!empty($params_search['default_saison'])) {
$this->context['view']->saison = $params_search['default_saison'];
} else {
$this->context['view']->days = $params_search['nb_days'];
}
}
if(!empty($this->context['view']->days) && isset($this->context['view']->menu_jours)) {
foreach($this->context['view']->menu_jours as $k=>$v) {
if($k==$this->context['view']->days) {
$this->context['view']->menu_jours[$k]['active'] = 'on';
$this->context['view']->days_name = $v['name'];
}
}
}
// liste des saisons des spectacles
if(!empty($params_search['saisons_annees']['saisons'])) {
$this->context['view']->saisons = $params_search['saisons_annees']['saisons'];
if(!empty($params_search['inverse_periode']) || !empty($params_search['inverse_saisons'])) {
krsort($params_search['saisons_annees']['saisons']);
}
$this->context['formAsideSearch']->add('s', ChoiceType::class, [
'label' => 'Saisons',
'placeholder' => 'Choisissez une saison...',
'choices' => $params_search['saisons_annees']['saisons'],
'attr' => [
'id' => 'saisons'
]
]);
}
// liste des annees des spectacles
if(!empty($params_search['saisons_annees']['annees'])) {
// max et min anneée pour le datepicker
$i = 0;
foreach($params_search['saisons_annees']['annees'] as $k=>$v) {
if($i==0) {
$start_year = $v;
if(!empty($v['annee'])) {
$start_year = $v['annee'];
}
} else {
$end_year = $v;
}
$i++;
}
$this->context['view']->year_range = ($start_year-date('Y')).':+5';
$this->context['view']->annees = $params_search['saisons_annees']['annees'];
if(!empty($params_search['inverse_periode']) || !empty($params_search['inverse_annees'])) {
ksort($params_search['saisons_annees']['annees']);
}
$this->context['formAsideSearch']->add('y', ChoiceType::class, [
'label' => 'Années',
'placeholder' => 'Choisissez une année...',
'choices' => $params_search['saisons_annees']['annees'],
'attr' => [
'id' => 'annees'
]
]);
}
$this->context['formAsideSearch']->add('datestart', TextType::class, [
'label' => 'Entre',
'attr' => [
'size'=>'7',
'id'=>'datestart',
'class' => 'input-group-field'
]
]);
$this->context['formAsideSearch']->add('dateend', TextType::class, [
'label' => 'et',
'attr' => [
'size'=>'7',
'id'=>'dateend',
'class' => 'input-group-field'
]
]);
}
// }}}
public function getCommonSearchView($request = null)
{
$this->context['formAsideSearch'] = $this->context['formAsideSearch']->getForm();
if(!empty($request)){
$this->context['formAsideSearch']->handleRequest($request);
}
$this->view->formAsideSearch = $this->context['formAsideSearch']->createView();
}
// {{{ setCommonSearchSpectacles()
/** appliquer les élèments de recherche
*
* @return array
*/
public function setCommonSearchSpectacles($params_sql, $disable = false)
{
// recherche par saison
if(!empty($this->context['view']->saison)) {
$params_sql['special']['saison'] = $this->context['view']->saison;
} elseif(!empty($this->context['view']->year)) { // recherche par année
$params_sql['special']['year'] = $this->context['view']->year;
} elseif(!empty($this->context['view']->datestart) && !empty($this->context['view']->dateend)) { // par période
$params_sql['special']['period'] = array(
'start' => $this->context['view']->datestart,
'end' => $this->context['view']->dateend,
);
} else if(empty($params_sql['special']['anciens_stricts']) && !$disable) { // prochains jours
$params_sql['special']['prochains'] = $this->context['view']->days;
}
// une région en particulier ?
if(!empty($this->context['params']['area']) &&
(is_numeric($this->context['params']['area']) || strlen($this->context['params']['area'])==2)) {
$params_sql['special']['area'] = $this->context['params']['area']; // recherche dans la région
$params_sql['special']['carte_version'] = $this->getCarteVersion(); // recherche dans la région
if(is_numeric($params_sql['special']['area'])) {
$this->context['view']->region_name = $this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion())->getRegionName($params_sql['special']['area']); // nom de la région
} else {
$this->context['view']->country_name = $this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion())->getNameCountry($params_sql['special']['area']); // nom de la région
}
$this->context['view']->area = $this->context['params']['area'];
}
return $params_sql;
}
// }}}
// {{{ getCommonXmlCarte()
/** Fichier XML standard de la cartes de France
*
*/
public function getCommonXmlCarte($page=null)
{
// regions
$regions = $this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion());
$regions_list = ($regions->getArea(false,false,false));
// affiche la région en surbrillance
if(!empty($this->context['params']['area']) &&
(is_numeric($this->context['params']['area']) || strlen($this->context['params']['area'])==2)) {
$this->context['view']->area_view = 'area/'.$this->context['params']['area'].'/';
$this->context['view']->area = $this->context['params']['area'];
} else {
$this->context['view']->area_view = '';
$this->context['view']->area = null;
}
if(!empty($_GET['page'])) {
$this->context['view']->page = filter_var($_GET['page'], FILTER_SANITIZE_STRING);
} elseif(!empty($this->context['params']['page'])) {
$this->context['view']->page = $this->context['params']['page'];
} else {
$this->context['view']->page = $page;
}
foreach(array('s','y','datestart','dateend','d','type','idtypestructure') as $f) {
if(!empty($_GET[$f])) {
$this->context['view']->$f = filter_var($_GET[$f], FILTER_SANITIZE_STRING);
}
}
foreach(array('dom','tom','be','ch','lu') as $f) {
if(isset($_GET[$f])) {
$this->context['view']->$f = filter_var($_GET[$f], FILTER_SANITIZE_STRING);
} else {
$this->context['view']->$f = 1;
}
}
// classement en fonction du xml
foreach($regions->getXmlClassement() as $k=>$v) {
$regions_final[$k] = array(
'id' => $v,
'name' => $regions_list[$v],
);
if(!empty($this->context['view']->area) && $v==$this->context['view']->area) {
$regions_final[$k]['selected'] = 1;
} else {
$regions_final[$k]['selected'] = 0;
}
}
foreach(array('BE','CH','LU') as $k=>$v) {
if(!empty($this->context['view']->area) && $v==$this->context['view']->area) {
$this->context['view']->{'selected_'.$v} = 1;
} else {
$this->context['view']->{'selected_'.$v} = 0;
}
}
$this->context['view']->regions = $regions_final;
}
// }}}
// {{{ getCarteVersion()
/** Version SVG bigregion ou Flash
*
*/
public function getCarteVersion()
{
if(isset($_REQUEST['carte_version'])) {
$this->carte_version = filter_var($_REQUEST['carte_version'], FILTER_SANITIZE_STRING);
}
// if($this->carte_version=='svg') {
$object = 'Bigregions';
$this->context['view']->carte_version = 'svg';
$this->context['view']->is_carte_svg = true;
// } else {
// $object = 'Regions';
// $this->context['view']->carte_version = 'flash';
// $this->context['view']->is_carte_flash = true;
// $this->context['view']->jquery_flash = true;
//
// }
return $object;
}
// }}}
// {{{ getZoneRecherche()
/** Version SVG bigregion ou Flash
*
*/
public function getZoneRecherche($area) { return $this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion())->getZipCode($area); }
// }}}
// {{{ setAreaRecherche()
/** Recherche avec region/pays
*
*/
public function setAreaRecherche($params_sql) {
// une région en particulier ?
if(!empty($this->context['params']['area']) && (is_numeric($this->context['params']['area']) || strlen($this->context['params']['area'])==2)) {
$this->context['view']->area = $this->context['params']['area'];
$params_sql['special']['area'] = $this->context['view']->area; // recherche dans la région
$params_sql['special']['carte_version'] = $this->getCarteVersion(); // recherche dans la région
if(is_numeric($this->context['view']->area)) {
$this->context['view']->region_name = $this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion())->getRegionName($this->context['view']->area); // nom de la région
} else {
$this->context['view']->country_name = $this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion())->getNameCountry($this->context['view']->area); // nom de la région
}
// définir la zone de recherche
$this->spectacles->setZoneRecherche($this->em->getRepository('TheatreCore\Entity\\'.$this->getCarteVersion())->getZipCode($this->context['view']->area)); // définir la zone de recherche
} else {
$this->context['view']->area = null;
}
return $params_sql;
}
// {{{ setSocialCustomContent()
/** Initie des contenus customisés pour les réseaux sociaux
*
* @return void
*/
public function setSocialCustomContent($contents, $reseau_specifique = null)
{
//Si le contenu est un tableau et contient plusieurs valeurs
if(is_array($contents)){
//Nous faisons une boucle de chaune de ces valeurs
foreach($contents AS $key_contents => $value_content){
//Si la valeur contient un nouveau tableau c'est que la clé est le prefix d'un réseau social (fb, tw, ggle etc.)
if(is_array($value_content)){
//Nous assignons à la vue la clé du réseau social et la valeur devat être contenu
foreach($value_content AS $key_contents_2 => $value_content_2){
$this->view->reseaux[$key_contents][$key_contents_2] = $value_content_2;
}
}
//Sinon c'est que les valeurs sont pour un réseau social spécifique
else{
//Si le réseau social spécifique est sélectionné
if(!is_null($reseau_specifique)){
$this->view->reseaux[$reseau_specifique][$key_contents] = $value_content;
}
else{
//A faire
//Boucler les reseaux sociaux déjà disponibles un à un et y assigner les nouvelles valeurs.
}
}
}
}
}
public function RouterOptions($slug = null, $action = null, $controller = null){
// debut du tableau params (exclu l'url_clean)
$first_param = 3;
$defaut_value = array(
'biographies' => array(
'action' => 'biographie',
'val_id' => 'idperson',
'object' => 'persons',
),
'spectacles' => array(
'action' => 'detail-spectacle',
'val_id' => 'idspectacle',
'object' => 'spectacles',
'groups' => array('detail-spectacle' => array(
'ensavoirplus','enimages','entretiens','extraits','commentaires','contenuprofessionnel'
)),
),
'textes' => array(
'action' => 'detail-texte',
'val_id' => 'idtext',
'object' => 'texts',
),
'liens' => array(
'action' => 'categories',
'default_action' => 'view',
'val_id' => 'idcategorie',
'object' => 'liens_categories',
),
'annonces' => array(
'action' => 'categorie',
'val_id' => 'idcategorie',
'object' => 'ann_categories',
),
'editions' => array(
'action' => 'details',
'val_id' => 'idcontact',
'object' => 'contacts',
),
'contacts' => array(
'action' => 'detail-contact',
'val_id' => 'idcontact',
'object' => 'contacts',
),
'video' => array(
'action' => 'view',
'val_id' => 'idmultimedia',
'object' => 'multimedias',
),
'dvd' => array(
'action' => 'view',
'val_id' => 'iddvd',
'object' => 'dvds',
),
// 'videos' => array(
// 'action' => 'view',
// 'val_id' => 'idmultimedia',
// 'object' => 'multimedias',
// ),
'embed' => array(
'action' => 'view',
)
);
if(!empty($defaut_value[$controller])) {
$object = $defaut_value[$controller]['object'];
} elseif($controller=='api' || $controller=='widgets') { // API ou widgets
// l'action unique
$action = 'view';
// => /api/persons/Olivier-Py
// => /controller/view/object/persons/url_clean/Olivier-Py/
$path = $_SERVER['REQUEST_URI'];
$path = preg_replace('#\?.*$#','',$path);
$path = explode('/', trim($path, '/'));
if(count($path)>=2) {
// redéfinir le path
$new_path = array(
$path[0], // controller
'view', // action (redéfini à la place de l'objet)
'url_clean', // url de l'objet
$path[2], // valeur de l'url (eg: JTN)
'object', // type d'objet
$path[1], // valeur du type d'objet (eg; contacts)
);
// on ajoute ce qu'il y a après 3 => les params
for ($i = 3; $i<count($path); $i++) {
$new_path[] = $path[$i];
}
$path = $new_path;
// params commence à l'index 2 de path
$first_param = 2;
}
} else {
$object = $controller;
}
//spécifique à l'embed
if($controller=='embed') {
$action = 'view';
// devient [code] => 'le code';
$path[2] = $path[1];
$path[1] = 'code';
$first_param = 1;
}
// rechercher l'url_clean dans la BDD
else if(!is_null($slug) && !empty($object)) {
// objet
$objs = $this->em->getRepository('TheatreCore\Entity\\'.implode('', array_map(function($m) { return ucfirst($m); }, explode('_', $object))));
// si c'est un spectacle, on va vérifier qu'il n'y a pas un url_redirect
if($object=='spectacles') {
// si l'url contient du htm, on matche sur url_redirect
$pos = strripos($_SERVER['REQUEST_URI'], '.htm');
// on cherche url_clean
if($pos === false) {
$this->id = $objs->queryOne('SELECT '.$objs->__idtable.' FROM '.$object.' WHERE url_clean=\''.$objs->escape($slug).'\' ');
}
// ou url_redirect
if(empty($this->id)) {
preg_match('/spectacles\/([a-z,A-Z,\-,\_,0-9]+)\//',$_SERVER['REQUEST_URI'],$match);
if(!empty($match)) {
$path_url = $match[1];
if(!empty($path_url)) {
$url_clean = $objs->queryOne('SELECT url_clean FROM '.$object.' WHERE url_redirect=\''.$objs->escape($path_url).'\' ');
if(!empty($url_clean)) {
// TODO utiliser un $this->redirect (!! on a un replace false, donc on veut conserver les param de la requête)
header('HTTP/1.1 301 Moved Permanently', false, 301);
header('Location: /spectacles/'.$url_clean.'/');
exit();
}
}
}
}
}
else {
$this->id = $objs->queryOne('SELECT '.$objs->__idtable.' FROM '.$object.' WHERE url_clean=\''.$objs->escape($slug).'\' ');
// si object contact mais id vide
if(empty($this->id) && $object=='contacts') {
$url_clean = $objs->queryOne('SELECT url_clean FROM '.$object.' WHERE url_redirect=\''.$objs->escape($slug).'\' ');
if(!empty($url_clean)) {
// header('HTTP/1.1 301 Moved Permanently', false, 301);
// var_dump($path);
// exit;
return $this->redirectToRoute('contact_view', ['slug' => $url_clean]);
}
}
}
// on a une url_clean
if(!empty($this->id)) {
$this->view->url_clean = $slug;
// si il y un id mais que $action est vide, prendre l'action par defaut
if(empty($action)) {
$this->action = $defaut_value[$controller]['action'];
}
// definir la valeur de l'id
$defaut_value[$controller]['val_id'] = $this->id;
} else { // on n'a pas l'id mais on avait le path[1]
// erreur spécifique pour les widgets
if($action=='widget') {
$this->func->sendHeader(404,true); // header et exit
}
}
// debug
// $controller.' '.$action;
}
}
public function now() {
return date('Y-m-d H:i:s');
}
public function escape($str) {
return addslashes($str);
}
public function db_escape_string($str) {
return $this->escape($str);
}
public function setParamsPDF($p_pdf = null, $p_download = null) {
if(!is_null($p_pdf)){
$this->context['params']['pdf'] = $p_pdf;
}
if(!is_null($p_download)){
$this->context['params']['download'] = $p_download;
}
}
public function checkConditionsPDF($abonnements = true) {
$active = true;
//Si nous voulons que l'utilisateur soit abonné et qu'il ne l'es pas.
if($abonnements && !$this->abonnementIsActive()){
$active = false;
}
if($active && !empty($this->context['params']['pdf']) && $this->context['params']['pdf']){
$this->context['pdf'] = true;
}
}
public function addPubliciteGoogle()
{
$asides_publicite = new asides();
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addGoogle($asides_publicite, $this->serviceAbonnements);
$this->context['view']->asides_publicite = $asides_publicite->view($this->context['view']);
}
public function abonnementIsActive(){
return (isset($this->serviceAbonnements) && $this->serviceAbonnements->isActive());
}
public function video_populaire($globalstats = null)
{
if(is_null($globalstats)){
return [];
}
//Les fichiers multimedias que l'on ne souhaite pas voir afficher en page d'accueil
$multimedia_exclude = array(5126,6056,11808,11863,11868,11899,11895,11897,11901,2024);
$plusvues = $globalstats->getMostViewed(1,4,$multimedia_exclude);
$multimedias = $this->em->getRepository(Multimedias::class);
$plusvues_videos = [];
if(!empty($plusvues)) {
foreach($plusvues as $k=>$v) {
$idmultimedia_plusvues[] = $v["idmultimedia"];
}
if(!empty($idmultimedia_plusvues)) {
$params_query_plusvues = array(
'limit' => array(0,4),
'where' => array(array('multimedias', 'idmultimedia', $idmultimedia_plusvues)),
'order' => array(array('multimedias','idmultimedia',$idmultimedia_plusvues)), // classement FIELD()
'direction' => 'no',
'dbg' => array('plusvues','Vidéos les plus vues'),
);
$plusvues_videos = $multimedias->getListMultimedias($params_query_plusvues,
array('width' => getenv('VIGN_VIDEO_WIDTH'),'height' => getenv('VIGN_VIDEO_HEIGHT'),'fleche'=>'none','ratio' => '169'),
array('display' => array('no_footer' => true))
);
}
}
return $plusvues_videos;
}
}