<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Cache\Adapter\AdapterInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use TheatreCore\Classes\Stats\Stats;
use TheatreCore\Entity\AnnAnnonces;
use TheatreCore\Entity\Classifications;
use TheatreCore\Entity\Contacts;
use TheatreCore\Entity\Contents;
use TheatreCore\Entity\Multimedias;
use TheatreCore\Entity\News;
use TheatreCore\Entity\Persons;
use TheatreCore\Entity\Playlists;
use TheatreCore\Entity\Podcasts;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Texts;
class IndexController extends TheatreController
{
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
TokenStorageInterface $tokenStorage,
ParameterBagInterface $parameterBag
)
{
parent::__construct($translator, $tokenStorage);
$this->em = $em;
$this->parameterBag = $parameterBag;
$GLOBALS['rub_courante'] = 'actualites';
$this->view->controller = $GLOBALS['rub_courante'];
}
/**
* @Route("/", name="index")
*/
public function index(TextesController $textesController, AdapterInterface $cache, Stats $globalstats, Request $request)
{
// old process from legacy
$forceCacheRefresh = $request->query->get('calcul_wget') === 'doit';
$this->view->action = $this->context['action'] = 'view';
$spectacles = $this->em->getRepository(Spectacles::class);
$multimedias = $this->em->getRepository(Multimedias::class);
$contacts = $this->em->getRepository(Contacts::class);
$persons = $this->em->getRepository(Persons::class);
$podcasts = $this->em->getRepository(Podcasts::class);
if ($forceCacheRefresh) {
$cache->deleteItem('dernieres_critiques_lists_home');
$cache->deleteItem('culturebox_lists_home');
$cache->deleteItem('persons_lists_home');
$cache->deleteItem('spectacles_partenaires_lists_home');
$cache->deleteItem('spectacles_jtn_lists_home');
$cache->deleteItem('video_tete_lists_home');
$cache->deleteItem('videos_affiche_lists_home');
$cache->deleteItem('derniers_texts_lists_home');
$cache->deleteItem('next_news_lists_home');
$cache->deleteItem('asides_cache_lists_home');
$cache->deleteItem('recommanded_spectacles_all_infos');
}
$item = $cache->getItem('dernieres_critiques_lists_home');
if ($item->isHit()) {
$this->context['view']->dernieres_critiques = $item->get();
} else {
// trouver les contenus associés aux critiques (101) et les classer par date
$params_sql_critiques = array(
'sql' => array(
'select' => 'ct.deck,ct.writer,ct.writer_group,ct.link,ct.writer_group_url,ct.idspectacle,ct.dateinsert,ct.date_article',
'order' => ' ct.date_article DESC',
// 'groupby' => 'ct.idspectacle',
'limit' => array(0, 4),
),
'special' => array(
'by_classification' => array(101),
'get_extranetuser' => true,
'publish' => 1,
'valid' => 1,
),
'dbg' => array('critiques', 'Liste des critiques'),
);
$this->context['view']->dernieres_critiques = $this->em->getRepository(Contents::class)->getListContents($params_sql_critiques, array('get_critiques' => true, 'shorten_title' => true));
$item->set($this->context['view']->dernieres_critiques)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
// Culturebox => les derniers référencés*
$item = $cache->getItem('culturebox_lists_home');
if (! $item->isHit()) {
$culturebox_params = array(
'limit' => array(0, 1),
'random' => ' ',
'special' => array(
'type_podcast' => 'culturebox',
'current' => true,
),
'dbg' => array('derniers_culturebox', 'Les derniers replay culturebox référencés'),
);
$format_vignette = array('width' => 480, 'direction' => 'thumb');
$this->context['view']->derniers_culturebox = $podcasts->getListPodcasts($culturebox_params, $format_vignette);
$item->set($this->context['view']->derniers_culturebox)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
} else {
$this->context['view']->derniers_culturebox = $item->get();
}
// dernières annonces => stage et offre d'emploi
$ann_annonces = $this->em->getRepository(AnnAnnonces::class);
$this->context['view']->dernieres_annonces_emploi = $ann_annonces->getLastAnnonces(array(0, 3), array(3), 65);
$this->context['view']->dernieres_annonces_stages = $ann_annonces->getLastAnnonces(array(0, 3), array(1), 65);
$item = $cache->getItem('persons_lists_home');
if ($item->isHit()) {
$this->context['view']->persons = $item->get();
} else {
$params_sql = array(
'special' => array(
'with_photo' => true,
'spectacle' => array(
'type' => 'author',
'prochains' => '90D',
'person_periode' => 'contemporain',
'text_edite' => true,
),
'random' => '',
),
'params' => array(
'limit' => array(0, 4)
),
'dbg' => array('affiche_persons', 'Les auteurs contemporaines édités à l\'affiche')
);
$params_display['vignette_format'] = array('width' => $_ENV['VIGN_PERSONS_WIDTH'], 'height' => $_ENV['VIGN_PERSONS_HEIGHT'], 'direction' => 'crop');
$this->context['view']->persons = $persons->getListPersons($params_sql, $params_display);
$item->set($this->context['view']->persons)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
$nb_spectacles = 2;
$item = $cache->getItem('spectacles_partenaires_lists_home');
if ($item->isHit()) {
$this->context['view']->spectacles_affiche = $item->get();
} else {
// trouver les contacts correspondants TN/CDN/Autres théare
$groupe_contacts = array(128, 129, 130, 131);
$partenaires = $contacts->getContactsByClassification($groupe_contacts);// idgroupclassification = 10
// grouper par type de partenaires
foreach ($partenaires as $k => $v) {
$spectacles_affiche_order[$v['idtypestructure']]['contacts'][$v['idcontact']] = $v;
$spectacles_affiche_order[$v['idtypestructure']]['idcontacts'][$v['idcontact']] = $v['idcontact'];
if ($v['idtypestructure'] == 'THIN') {
$spectacles_affiche_order[$v['idtypestructure']]['classification'] = 'Autres théâtres partenaires';
$spectacles_affiche_order[$v['idtypestructure']]['no_link'] = true;
$spectacles_affiche_order[$v['idtypestructure']]['classification_nomaj'] = strtolower($spectacles_affiche_order[$v['idtypestructure']]['classification']);
} elseif ($v['idtypestructure'] == 'CDN') {
$spectacles_affiche_order[$v['idtypestructure']]['classification'] = 'Centres dramatiques';
$spectacles_affiche_order[$v['idtypestructure']]['classification_nomaj'] = 'centres dramatiques';
} else {
$spectacles_affiche_order[$v['idtypestructure']]['classification_nomaj'] = strtolower($this->context['tr']->trans($v['classification']));
$spectacles_affiche_order[$v['idtypestructure']]['classification'] = $this->context['tr']->trans($v['classification']);
}
$spectacles_affiche_order[$v['idtypestructure']]['idclassification'] = $v['idclassification'];
$spectacles_affiche_order[$v['idtypestructure']]['idtypestructure'] = $v['idtypestructure'];
}
foreach ($spectacles_affiche_order as $k => $v) {
// pour les scènes nationales, rechercher dans toutes les scènes
if ($v['idclassification'] == 130) {
$v['idcontacts'] = array();
$contacts_sn = $this->em->getRepository(Contacts::class)->getListContacts(array(
'idtypestructure' => 'SN',
'limit' => array(0, 100),
'dbg' => array('liste_sn', 'liste des scènes nationales'),
));
foreach ($contacts_sn as $kb => $vb) {
$v['idcontacts'][$vb['idcontact']] = $vb['idcontact'];
}
}
// rechercher les spectacles à l'affiche
$params_spectacles_affiche = array(
'params' => array(
'limit' => array(0, 20),
),
'special' => array(
'prochains' => 120,
'random' => '',
'idcontacts' => array('IN', $v['idcontacts']),
'idcontact' => $v['idcontacts'],
'publish_valid' => 1, // les critiques publiées
),
'dbg' => array('spectacles_' . $v['idtypestructure'], 'Spectacles à l\'affiche pour les ' . $v['idtypestructure'])
);
$params_display = array('allauthors' => true);
$format_vignette['vignette'] = array('width' => 100, 'height' => 100, 'direction' => 'crop', 'valround' => 7);
$spectacles_affiche = $spectacles->getListSpectacles($params_spectacles_affiche, $format_vignette, false, $params_display);
if (! empty($spectacles_affiche)) {
$spectacles_affiche_reduce = array();
$i = 0;
foreach ($spectacles_affiche as $kb => $vb) {
$vb['footer_contact'] = true;
$spectacles_affiche_reduce[$kb] = $vb;
$i++;
if ($i == $nb_spectacles) {
break;
}
}
$spectacles_affiche_order[$k]['spectacles'] = $spectacles_affiche_reduce;
} else {
unset($spectacles_affiche_order[$k]);
}
}
$spectacles_affiche_by_classification = [];
foreach (['TN', 'CDN', 'SN', 'THIN'] as $key) {
if (! empty($spectacles_affiche_order[$key])) {
array_push($spectacles_affiche_by_classification, $spectacles_affiche_order[$key]);
}
}
$this->context['view']->spectacles_affiche = $spectacles_affiche_by_classification;
// sauver dans le cache
$item->set($this->context['view']->spectacles_affiche)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
//On vérifie le cache
$item = $cache->getItem('spectacles_jtn_lists_home');
if ($item->isHit()) {
$this->context['view']->spectacles_soutien = $item->get();
} else {
// spectacles du JTN
$params_sql_soutien = array(
'params' => array(
'limit' => array(0, 4),
),
'special' => array(
'prochains' => 180,
'random' => '',
'aide' => [
'idaidecontact' => 105
],
'spectacle_aide' => true
),
'dbg' => array('spectacle_soutien', 'Les spectacles avec un soutien à l\'affiche'),
);
$format_vignette['vignette'] = array('width' => 100, 'height' => 100, 'direction' => 'crop', 'valround' => 7);
$params_display = array('allauthors' => true);
$spectacles_soutien = $spectacles->getListSpectacles($params_sql_soutien, $format_vignette, false, $params_display);
if (! empty($spectacles_soutien)) {
$i = 0;
foreach ($spectacles_soutien as $k => $v) {
$v['footer_contact'] = true;
$this->context['view']->spectacles_soutien[$k] = $v;
}
}
// sauver dans le cache si les données existent
if (! empty($this->context['view']->spectacles_soutien)) {
$item->set($this->context['view']->spectacles_soutien)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
}
$this->context['view']->is_new_player = true;
$item = $cache->getItem('video_tete_lists_home');
$exclude_videos = [];
if ($item->isHit()) {
$this->context['view']->video_tete = $item->get();
$exclude_videos = array($this->context['view']->video_tete[0]['idmultimedia']);
} else {
// une vidéo d'un spectacle à l'affiche
$params_query_affiche = array(
'idclassification' => 'class_jour_' . strtolower(date('D')),
// 'affiche' => array('today' => 180),
// 'language' => 'fr',
'limit' => array(0, 1),
'dbg' => array('tete_jour', 'Vidéo du jour ' . strtolower(date('D'))),
);
$video_tete_result = $multimedias->getListMultimedias($params_query_affiche);
// si pas de vidéo du jour, prendre la vidéo de tête
if (empty($video_tete_result)) {
// une vidéo d'un spectacle à l'affiche
$params_query_affiche = array(
'affiche' => array('today' => 180),
// 'language' => 'fr',
'limit' => array(0, 1),
'where' => array(array('multimedias', 'video_tete', 1)),
'dbg' => array('tete', 'Vidéo de tête d\'un spectacle à l\'affiche'),
);
$video_tete_result = $multimedias->getListMultimedias($params_query_affiche);
}
// si pas de vidéo de tête, prendre une vidéo à l'affiche
if (empty($video_tete_result)) {
// une vidéo d'un spectacle à l'affiche
$params_query_affiche = array(
//'affiche' => array('today' => 15),
'language' => 'fr',
'limit' => array(0, 1),
'dbg' => array('tete', 'Vidéo de tête d\'un spectacle à l\'affiche'),
);
$video_tete_result = $multimedias->getListMultimedias($params_query_affiche);
}
foreach ($video_tete_result as $k => $v) {
$video_tete = $v;
$idmultimedia_affiche = $v['idmultimedia'];
break;
}
$set_format = $set_format_flou = array('width' => $_ENV['VIGN_VIDEO_WIDTH'], 'height' => $_ENV['VIGN_VIDEO_HEIGHT'], 'fleche' => 'none', 'ratio' => '169');
$set_format_flou['blur'] = true;
$video_tete = array_merge($video_tete, array(
'vignette' => $multimedias->getVignetteMultimedia($video_tete['idmultimedia'], $set_format),
'vignette_flou' => $multimedias->getVignetteMultimedia($video_tete['idmultimedia'], $set_format_flou),
'description_courte' => $multimedias->cutSentence($video_tete['description'], 100),
'langue' => $multimedias->getNameLanguage($video_tete['language'])
));
// lien vers la video
foreach ($video_tete['spectacles'] as $s) {
$video_tete['url_clean_video'] = '/spectacles/' . $s['url_clean'] . '/videos/' . $video_tete['url_clean'] . '?autostart';
}
$this->context['view']->video_tete = array($video_tete);
$exclude_videos = array($idmultimedia_affiche);
// sauver dans le cache
$item->set($this->context['view']->video_tete)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
if (isset($this->context['view']->video_tete[0])) {
// $session->setValue('currentVideo', md5($this->context['view']->video_tete[0]['idmultimedia']));
}
$item = $cache->getItem('videos_affiche_lists_home');
if ($item->isHit()) {
$this->context['view']->videos_affiche = $item->get();
} else {
// les vidéos de spectacles à l'affiche
$params_videos_affiche = [
'order' => ['RAND()'],
'where' => [
[
'multimedias', 'idmultimedia', $exclude_videos, 'AND', 'NOT IN'
]
],
'affiche' => ['today' => 7],
'limit' => [0, 4],
'dbg' => ['affiche', 'Vidéos de spectacles à l\'affiche'],
];
$this->context['view']->videos_affiche = $multimedias->getListMultimedias($params_videos_affiche,
array('width' => $_ENV['VIGN_VIDEO_WIDTH'], 'height' => $_ENV['VIGN_VIDEO_HEIGHT'], 'fleche' => 'none', 'ratio' => '169'),
array('get_schedule' => true, 'format_vignette' => true));
// sauver dans le cache
$item->set($this->context['view']->videos_affiche)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
//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);
try {
$plusvues = $globalstats->getMostViewed(1, 4, $multimedia_exclude);
} catch (\Throwable $e) {
$plusvues = false;
}
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'),
);
$this->view->plusvues_videos = $multimedias->getListMultimedias($params_query_plusvues,
array('width' => $_ENV['VIGN_VIDEO_WIDTH'], 'height' => $_ENV['VIGN_VIDEO_HEIGHT'], 'fleche' => 'none', 'ratio' => '169'),
array('display' => array('no_footer' => true))
);
}
}
/* -- contenus_pedagogiques_spectacles */
//Nous préparons la requête pour les spectacles de educ
// trouver les spectacles qui ont des contenus éduc => 125
$sql = 'SELECT s.`idspectacle` FROM spectacles s
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 s.`publish`=1 AND s.`valid`=1';
if ($idspectacles_from_spectacles = $spectacles->queryCol($sql)) {
if (! empty($idspectacles_from_spectacles)) {
foreach ($idspectacles_from_spectacles as $k => $v) {
$idspectacles[$v] = $v;
}
$params_spectacles = array(
'special' => array(
'idspectacle' => $idspectacles,
'plus_proche' => true,
'prochains' => true
),
'params' => array(
'limit' => array(0, 2),
),
'dbg' => array('list_spectacles_educ_enscene', 'Liste des spectacles avec un contenu educ enscene'),
);
$this->view->contenus_pedagogiques_spectacles = $spectacles->getListSpectacles($params_spectacles, array(), false, array('allauthors' => true));
}
}
foreach ($this->view->contenus_pedagogiques_spectacles as $k => $v) {
$this->view->contenus_pedagogiques_spectacles[$k]['footer_contact'] = true;
}
/* -- theatre-en-acte-textes */
//Nous préparons la requête pour les textes de theatre-en-acte
$sql = 'SELECT t.`idtext` FROM texts t
JOIN object_content oc ON oc.`idobject`=t.`idtext`
JOIN contents c ON c.`idcontent`=oc.`idcontent`
JOIN content_classification cc ON cc.`idcontent`=c.`idcontent`
WHERE c.publish=1
AND oc.object=\'texts\'
AND cc.idclassification=207
AND t.`publish`=1 AND t.`valid`=1';
//On crée la variable pour le dataobject texts
$texts = $this->em->getRepository(Texts::class);
//On execute la requête
if ($idtexts = $texts->queryAll($sql)) {
//On récupère
foreach ($idtexts as $value) {
$itexts[] = $value['idtext'];
}
$params_sql = array(
'special' => array(
'idtext' => $itexts,
'prochains' => 365
),
'params' => array(
// TODO pas les adaptations =>pour avoir le MEME nombre dans les deux cas
'where' => ' s.`title` IS NULL ',
// 'groupby' => ' s.`idtext` ',
'limit' => array(0, 2)
),
'dbg' => array('list_spectacles_texts', 'Liste des textes theatre-en-acte')
);
$list_spectacles = $spectacles->getListSpectacles($params_sql);
$this->view->theatre_en_acte_texts = $texts->getTextsFromSpectacles($list_spectacles, array());
// $vignette_format,false,true,$params_row
$vignette_format_blur = $vignette_format = array('width' => $_ENV['VIGN_TEXT_WIDTH'], 'height' => $_ENV['VIGN_TEXT_HEIGHT'], 'direction' => 'thumb');
$vignette_format_blur['blur'] = true;
if (! empty($this->view->theatre_en_acte_texts)) {
foreach ($this->view->theatre_en_acte_texts as $key => $val) {
$this->view->theatre_en_acte_texts[$key]['vignette'] = $this->em->getRepository(Texts::class)->getVignetteText($val['idtext'], $vignette_format);
$this->view->theatre_en_acte_texts[$key]['vignette_flou'] = $this->em->getRepository(Texts::class)->getVignetteText($val['idtext'], $vignette_format_blur);
}
}
}
$item = $cache->getItem('derniers_texts_lists_home');
if ($item->isHit()) {
$this->context['view']->derniers_textes_publi = $item->get();
} else {
// requete commune
// les derniers textes publies avec une couverture
$where_text = '
AND (T1.idgenretext=1 OR T1.idgenretext IS NULL)
AND T1.idcontact_publisher!=\'\'
AND T1.publish=1
AND (T1.publication_year < YEAR(NOW()) OR (T1.publication_year=YEAR(NOW()) AND (ISNULL(T1.publication_month) OR T1.publication_month<=MONTH(NOW())))) ';
$params_sql_texts = array(
'params' => array(
'where' => $where_text,
'limit' => array(0, 20),
'classement' => 'DESC',
'order' => 'T1.publication_year DESC, T1.publication_month DESC ',
),
'special' => array(
'avec_couverture' => true,
)
);
$params_list_texts = array(
'stylemore' => array('imagep' => 'width:60px;', 'desctxt' => 'width:170px;'),
'vignette_format' => array('width' => $_ENV['VIGN_TEXT_WIDTH'], 'height' => $_ENV['VIGN_TEXT_HEIGHT'], 'direction' => 'thumb'),
'publisher_first_inverse' => true
);
$texts = $this->em->getRepository(Texts::class);
// dernieres textes publies
$params_sql_texts['params']['where'] = $where_text;
//echo $texts->getSQLTexts($params_sql_texts['params'],$params_sql_texts['special']);
$derniers_textes_publi = $texts->getListTexts($params_sql_texts, $params_list_texts);
if (! empty($derniers_textes_publi)) {
shuffle($derniers_textes_publi);
$i = 0;
foreach ($derniers_textes_publi as $k => $v) {
$v['publisher_first'] = true;
foreach ($v['publisher'] as $publisher) {
$v['publisher'] = $publisher;
}
$this->context['view']->derniers_textes_publi[$k] = $v;
$i++;
if ($i == 3) {
break;
}
}
$item->set($this->context['view']->derniers_textes_publi)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
}
// sauver dans le cache
$cache->save($item);
}
$cache_next_news = $cache->getItem('next_news_lists_home');
if ($cache_next_news->isHit()) {
$this->context['view']->next_news = $cache_next_news->get();
} else {
$news = $this->em->getRepository(News::class);
// récupérer les prochains évènements
$news_params = array(
'params' => array(
'limit' => array(0, 5),
),
'special' => array(
'prochains' => 180,
'publish_valid' => true,
'type_news' => 'news',
'is_homepage' => 1,
),
'dbg' => array('news', 'Liste des prochains évènements')
);
$this->context['view']->next_news = $news->getListNews($news_params, array('display' => ['no_descrip' => true]));
// sauver dans le cache
$cache_next_news->set($this->context['view']->next_news);
$cache->save($cache_next_news);
}
// textes par l'auteur
$textesController->context['action'] = 'index';
$textesController->getTextByAuteurs(array('limit_query' => [0, 2]));
$this->context['view']->texts = $textesController->context['view']->texts;
if (! empty($this->context['view']->texts)) {
foreach ($this->context['view']->texts as $skey => $sval) {
$sql = 'SELECT p.idplaylist
FROM playlists p
LEFT JOIN playlist_classification pc ON p.idplaylist = pc.idplaylist
WHERE pc.idclassification = 144 AND p.idtext = ' . $sval['idtext'] . '
GROUP BY p.idtext';
if ($x = $spectacles->queryOne($sql)) {
$texte_par_auteurs[$skey] = $this->context['view']->texts[$skey];
$playlists = $this->em->getRepository(Playlists::class);
$playlist = $playlists->getInfosPlaylist(
$x,
array(
'all' => true,
'multimedias' => true,
'format_vignette' => array('width' => 325, 'height' => 162, 'fleche' => 'none', 'ratio' => '169') //'direction'=>'crop'
),
array('format_vignette' => true)
);
$video = (array_shift($playlist['multimedias']));
$texte_par_auteurs[$skey]['title'] = $video['sujet_titre'];
$texte_par_auteurs[$skey]['playlist']['vignette'] = $video['vignette'];
$texte_par_auteurs[$skey]['playlist']['vignette_flou'] = $video['vignette_flou'];
$texte_par_auteurs[$skey]['playlist']['thtv'] = true;
$texte_par_auteurs[$skey]['playlist']['thtv_permalink'] = $video['permalink'];
$texte_par_auteurs[$skey]['playlist']['url_clean_video'] = $playlist['urlClean'];
}
}
$this->context['view']->texte_par_auteurs = $texte_par_auteurs;
}
//Les spectacles à l'affiche avec podcasts audio France Culture
$params_sql = array(
'special' => array(
'textfictif' => 0,
'prochains' => true,
'podcasts' => [
'type_podcast' => 'franceculture'
]
),
'params' => [
'limit' => [0, 4]
],
'dbg' => array('list_textes_affiche', 'Liste des spectacles avec textes non fictifs qui ont un podcast'),
);
$spectacles_podcasts = $spectacles->getListSpectacles($params_sql, null, false, array('allauthors' => true, 'carrer_couleurs' => true));
foreach ($spectacles_podcasts as $k => $v) {
$spectacles_podcasts[$k]['footer_contact'] = true;
}
$this->context['view']->spectacles_podcasts = $spectacles_podcasts;
$franceculture_params = array(
//'direction' => 'DESC',
'limit' => array(0, 1),
'special' => array(
'type_podcast' => 'franceculture',
),
'dbg' => array('derniers_franceculture', 'Les derniers podcasts franceculture référencés'),
);
$this->context['view']->last_podcasts = $podcasts->getListPodcasts($franceculture_params);
// contacts de page d'accueil
$partenaires = $contacts->getContactsByClassification('class_petit_bandeau');// idgroupclassification = 10
$classifications = $this->em->getRepository(Classifications::class);
foreach ($partenaires as $k => $v) {
$v['filepath'] = $_ENV['URL_DIRECTORYUPLOAD'] . $contacts->getThumbnail($v['file'], 220, 'L');
// récupèrer la classification du group 10
$classifications_contact = $this->em->getRepository(Classifications::class)->getObjectClassifications('contacts', $v['idcontact'], 10);
if (! empty($classifications_contact)) {
foreach ($classifications_contact as $c) {
$partenaires_list[$c['idclassification']]['classification'] = $this->context['tr']->trans($c['classification']);
$partenaires_list[$c['idclassification']]['contacts'][$v['idcontact']] = $v;
}
}
}
// classement des classifications
$partenaires_list_by_classifications = [];
$classifications_list = $classifications->getClassificationsInGroup(10);// idgroupclassification = 10
foreach ($classifications_list as $k => $v) {
if (isset($partenaires_list[$v['idclassification']])) {
$partenaires_list_by_classifications[$k] = $partenaires_list[$v['idclassification']];
}
}
$this->view->partenaires_list = $partenaires_list_by_classifications;
$this->view->titre_de_la_page = 'Théâtre contemporain - Auteurs de théâtre, spectacles, mise en scène et tout l\'univers du théâtre';
//Ajout d'une description pour le site
$this->view->meta_description = "Theatre-contemporain.net présente la création scénique dans les pays francophones et en langue française dans le monde : textes théâtraux contemporains et classiques, danse, performances, opéra... Le site propose l’actualité en régions, des contenus pédagogiques, des vidéos, des critiques...";
// Cache des asides
$cache_next_asides = $cache->getItem('asides_cache_lists_home');
if ($cache_next_asides->isHit()) {
$this->context['view']->aside = $cache_next_asides->get();
} else {
$asides = new asides();
$asides->load('common_carte');
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addWithNational($asides); //$this->area
$asides->load('common_participer_contacts');
$asides->load('textes_publications_recentes');
$asides->load('common_enacte_pub');
$asides->load('common_prochain_evenement');
$asides->load('common_facebook');
$asides->load('common_partenaires');
$asides->load(['common_culturebox' => [
'footer' => true
]]);
$asides->load('common_twitter');
$asides->load('common_offre_annonce');
$this->context['view']->aside = $asides->view();
// sauver dans le cache
$cache_next_asides->set($this->context['view']->aside);
$cache->save($cache_next_asides);
}
$item = $cache->getItem('recommanded_spectacles_all_infos');
if (! $item->isHit()) {
$recommandedSpectacles = $spectacles->getListSpectacles([
"params" => [
"limit" => [0, 4]
],
"special" => [
"prochains" => "30",
"recommandations" => true,
"publish_valid" => true
]
]);
$paramsVignette = [
'vignette' => [
'width' => 100,
'height' => 100,
'direction' => 'crop',
'fleche' => 'moyen'
],
'get_vignette' => true
];
$recommandedSpectaclesAllInfos = [];
// Toutes les infos des prochains spectacles avec recommandations
foreach ($recommandedSpectacles as $spectacle) {
$spectacle = $spectacles->getInfosSpectacle($spectacle['idspectacle'], $paramsVignette);
$spectacle['carrer'] = $spectacles->getObjectsCarrerDetails($spectacle['idspectacle']);
if ($dates = $spectacles->getProchDateLieu(array('prochains' => true), $spectacle['idspectacle'])) {
$spectacle = array_merge($spectacle, $dates);
}
if (! isset($spectacle['affcontact'])
&& (isset($spectacle['contact']) && isset($spectacle['contact']['organisation']) && ! empty($spectacle['contact']['organisation']))
) {
$spectacle['affcontact'] = true;
}
$spectacle['footer_critique'] = true;
$spectacle['nombre_critique'] = $this->em->getRepository(Contents::class)->countAssociateContent('spectacles', $spectacle['idspectacle'], 'class_critique', array('publish_valid' => 1));
$spectacle['url_clean_more'] = 'critiques/';
$spectacle['nbRecommandations'] = $spectacles->countSpectacleRecommandations($spectacle['idspectacle']);
$spectacle = $spectacles->clearSpectaclesAddAllPersons($spectacle);
$recommandedSpectaclesAllInfos[] = $spectacle;
}
$item->set($recommandedSpectaclesAllInfos)
->expiresAt((new \DateTime('now'))->add(\DateInterval::createFromDateString('7 hours')));
$cache->save($item);
}
$this->context['view']->recommandedSpectaclesAllInfos = $item->get();
$GLOBALS['rub_courante'] = 'actualites';
return $this->view('index/view.html.twig');
}
}