<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\Functions\Months;
use App\ClassTheatre\TheatreController;
use App\Service\Abonnements\Abonnements;
use App\Service\Functions;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
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\Images\Images;
use TheatreCore\Entity\Bigregions;
use TheatreCore\Entity\Extranetusers;
use TheatreCore\Entity\News;
use TheatreCore\Entity\Typesstructures;
class EvenementsController extends TheatreController
{
// {{{ _construct()
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, TokenStorageInterface $tokenStorage, Functions $func, Abonnements $abonnements)
{
parent::__construct($translator, $tokenStorage);
$this->view->controller = 'evenements';
$this->em = $em;
$this->func = $func;
$this->serviceAbonnements = $abonnements;
}
/**
*
* @Route("/evenements/non-accessible", name="evenements_non_accessible")
*
*/
public function action_non_accessible()
{
$this->view->title_page = 'Évènement non disponible';
$this->view->locate = array('/evenements/' => 'Évènements',
0 => 'Évènement non disponible');
$this->view->rub_courante = 'news';
// 404
header('HTTP/1.0 404 Not Found');
return $this->view('evenements/non-accessible.html.twig');
}
/**
* @Route("/evenements", name="evenements")
* @Route("/evenements/view/area/{p_area}/", name="evenements_view_area")
* @Route("/evenements/area/{p_area}", name="evenements_area", defaults={"p_area"=null})
*/
public function action_view($p_area = null, Months $months, Request $request)
{
$this->context['params']['area'] = $p_area;
$this->context['action'] = $this->context['view']->action = 'view';
$title_page = 'Tous les évènements autour du théâtre en France et dans le monde - festivals , rencontres, lectures...';
$this->view->locate = array(0 => 'Évènements');
$this->rub_courante = 'evenements';
// classe
$news = $this->em->getRepository(News::class);
// la région ?
$area = null;
$area_view = '';
if (!empty($this->context['params']['area']) &&
(
$this->func->my_is_int($this->context['params']['area']) ||
strlen($this->context['params']['area']) == 2
)
) {
$area = $this->context['params']['area'];
$area_view = 'area/' . $area;
}
$this->view->area_view = $area_view;
// le menu du spectacle
$menu_evenements = array(
'news' => array('url' => '/evenements/' . $area_view . '?type_news=news', 'name' => 'Évènements', 'id' => 'news'),
//'spectacles' => array('url'=> '/evenements/'.$area_view.'?type_news=spectacles','name'=> 'Spectacles','id'=>'spectacles'),
);
$type_news = 'news';
if (!empty($_REQUEST['type_news']) && array_key_exists($_REQUEST['type_news'], $menu_evenements)) {
$type_news = $_REQUEST['type_news'];
}
$menu_evenements[$type_news]['active'] = true;
$this->view->type_news = $type_news;
$this->view->menu_evenements = $menu_evenements;
$this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder('');
$month_list = $months->month();
$this->context['formAsideSearch']
->add('month', ChoiceType::class, [
'label' => $this->context['tr']->trans('mois'),
'choices' => array_flip($month_list),
'attr' => ['class' => 'select_type']
])
->add('type_news', HiddenType::class, [
'attr' => [
'name' => 'type_news',
'value' => $type_news
]
])
->add('rechm', SubmitType::class, [
'label' => $this->context['tr']->trans('button_ok')
])
;
$this->getCommonSearchView();
$this->context['formAsideSearch']->handleRequest($request);
$sql_where = null;
if ($this->context['formAsideSearch']->isSubmitted()) {
// recherche par mois
$month = $this->context['formAsideSearch']->get('month')->getData();
if (empty($month) && isset($_GET['month'])) {
$month = $_GET['month'];
}
if (!empty($month) && array_key_exists($month, $month_list)) {
$this->view->month_search = $month_list[$month];
$tab = explode('-', $month);
$month = $tab[0];
$year = $tab[1];
$datestart = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year)); //premier du mois
$dateend = date('Y-m-d', mktime(0, 0, 0, $month + 1, 0, $year)); //dernier du mois
$this->view->dateend = $news->getFormeDate($dateend, $GLOBALS['format_date'][$this->lng]);
$this->view->datestart = $news->getFormeDate($datestart, $GLOBALS['format_date'][$this->lng]);
//requete
$sql_where .= ' AND (T3.date BETWEEN (\'' . $datestart . '\') AND (\'' . $dateend . '\'))';
}
}
// on calcul le nb de résultat
$pagerOptions['perPage'] = $this->perPage = 10;
// récupérer les prochains évènements
$news_params = array(
'params' => array(
'limit' => 'all',
'where' => $sql_where,
),
'special' => array(
'prochains' => 180,
'publish_valid' => true,
'type_news' => $type_news,
),
'dbg' => array('news', 'Liste des news')
);
// la region en plus ?
if (!empty($area)) {
if ($area == 'BE' || $area == 'CH' || $area == 'LU') {
$news_params['special']['country'] = array($area);
} else {
$news_params['special']['idbigregion'] = array($area);
}
}
// type de structure
$typesstructure_list = $this->em->getRepository(Typesstructures::class)->getTypeStructureList(true, true, ['SN', 'TN', 'CDN', 'EC']);
$idtypestructure = null;
if (!empty($_REQUEST['idtypestructure']) && array_key_exists($_REQUEST['idtypestructure'], $typesstructure_list)) {
$idtypestructure = filter_var($_REQUEST['idtypestructure'], FILTER_SANITIZE_STRING);
$news_params['special']['idtypestructure'] = $idtypestructure;
$this->context['view']->typestructure = $typesstructure_list[$idtypestructure];
$this->context['view']->idtypestructure = $idtypestructure;
}
//On compte le nombre total d'évènements
$news_params['special']['count_only'] = 'all';
$total_items = $news->queryOne($news->getSQLNews($news_params['params'], $news_params['special']));
unset($news_params['special']['count_only']);
// poagination
$this->view->pagination = $this->getPagination($total_items, $this->perPage);
//Définir la limite
$news_params['params']['limit'] = array($this->getLimitStart(), $this->perPage);
// liste des news
$this->view->news_list = $news->getListNews($news_params);
// page de provenance
$this->view->from_page = 'region/area/' . $area;
// regions
$regions = $this->em->getRepository(Bigregions::class);
// nom de la région et code
if (!empty($area)) {
$this->context['view']->area_active = true;
if ($this->func->my_is_int($area)) {
$this->view->region_name = $regions->getRegionName($area);
} else {
$this->view->country_name = $regions->getNameCountry($area);
}
$this->view->area = $area;
}
$this->view->use_addthis = true;
$this->context['view']->is_carte_svg = true;
$this->context['view']->js_more['raphael-min-js'] = 'raphaeljs/raphael-min.js';
$this->context['view']->js_more['raphael-svg-import'] = 'raphaeljs/raphael-svg-import.js';
//asides top
if (!empty($area)) {
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlRegions'
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
} else if (!is_null($idtypestructure)) {
$asides_top = new asides();
$asides_top->load(['aside_top' => array(
'php' => array(
'method' => 'asidesUrlListsMenuCDN'
)
)
]);
$this->context['view']->aside_top = $asides_top->view($this->context['view']);
}
//asides
$menu_evenement = array(
array(
'name' => 'Tous les évènements'
)
);
//On affiche la publicité google
$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']);
$asides = new asides();
$asides->load(['url_lists' => array(
'exec' => array(
'htmlstart' => true
),
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_evenement,
'url' => '/evenements/',
'params' => array(
'activate' => true
)
),
'title' => 'Voir'
)]);
$asides->load(['event_list_mois' => array(
'exec' => array(
'htmlend' => true
),
'title' => 'Recherche par période'
)]);
$asides->load(['url_lists_alone,tn_cdn_sn' => array(
'php' => [
'method' => 'tn_cdn_sn',
'url' => '/evenements?idtypestructure=key_structure',
'params' => array(
'activate' => (!empty($this->context['view']->idtypestructure)) ? $this->context['view']->idtypestructure : ''
)
],
'title' => 'Voir aussi'
)]);
//Chargement de la pub par région
asides::setEntityManager($this->em);
asides::loadaside('Publicite')->addWithNational($asides);
asides::loadaside('Publicite')->addWithRegion($asides, ['region' => $area]); //$this->area
$asides->load(['common_carte' => array(
'url' => '/evenements/area/get_id?type_news=news'
)]);
$asides->load(['common_participer' => array(
'php' => array(
'method' => 'asidesUrlLists_Ajoutez',
'loadcustom' => array(
'evenement'
)
)
)]);
$this->context['view']->aside = $asides->view($this->context['view']);
return $this->view('evenements/view.html.twig');
}
/**
* @Route("/evenements/detail-evenement", name="evenements_detail")
* @Route("/evenements/detail-evenement/id/{id}/", name="evenements_detail_id")
*/
public function action_detail_evenement($id = null, Images $images)
{
$this->context['params']['id'] = $id;
$this->params['path'] = 'evenements';
$news_params = array(
// 'renderer' => &$renderer,
'publish' => 1,
'valid' => 1,
'idnew' => $this->context['params']['id'],
);
$news = $this->em->getRepository(News::class);
$data_new = $news->getInfosNews($id, array('schedule_detail' => true));
if (!$data_new) {
return $this->redirectToRoute("evenements");
}
$this->idnew = $id;
// récuprére une vignette dans un format correct
if (!empty($data_new['url_file'])) {
// trouver l'image avec le hash de répertoire
$url_file_hash = $_ENV['PATH_DIRECTORYUPLOAD'] . 'news/src/' . $images->getHashDir($data_new['url_file'], true) . $data_new['url_file'];
if (file_exists($url_file_hash)) {
$params_thumb = array(
'other_directory' => $_ENV['PATH_DIRECTORYUPLOAD'] . 'news/src',
'hash_dir' => true,
'no_ext_dir' => true,
);
$data_new['vignette'] = $news->getThumbnail($data_new['url_file'], 255, 'L', $params_thumb);
} else {
$data_new['url_file'] = null;
}
}
foreach ($data_new['persons'] as $p) {
$data_new['new_person'][$p['idperson']] = $p['idperson'];
}
// c'est la personne qui a publié ?
if ($this->getUser() instanceof Extranetusers && $data_new['idextranetuser'] == $this->getUser()->getIdextranetuser()) {
$data_new['is_extranetuser'] = true;
// bouton "modifier"
if (empty($this->view->do)) {
$this->view->barre_infos[] = array(
'url' => '/' . $this->params['path'] . '/ajouter/idnew/' . $this->idnew . '?do=edit',
'title' => 'modifier cet évènement',
'icone' => 'edit_icon',
);
}
}
// si pas validé ou pas publié
if (empty($this->params['is_admin'])) {
if (($data_new['valid'] == 0 && empty($data_new['is_extranetuser']))
|| ($data_new['publish'] == 0 && empty($data_new['is_extranetuser']))) {
return $this->redirect('/' . $this->params['path'] . '/non-accessible');
}
}
$this->view->data_new = $data_new;
$this->view->locate = array(
'/evenements/' => 'Évènements',
0 => $this->context['view']->data_new['title']
);
// situation et titre meta
$this->title_page = $this->context['view']->data_new['title'];
if (!empty($this->context['view']->data_new['city'])) {
$this->title_page .= ' - ' . $this->context['view']->data_new['city'];
}
// pas de rub évènement
$this->rub_courante = 'evenements';
// les horaires
$this->view->js_more[] = 'jquery.qtip.min.js';
//aside
$menu_evenement = array(
array(
'name' => 'Tous les évènements'
)
);
$asides = new asides();
$asides->load('event_detail_aside');
$asides->load(['url_lists_alone' => array(
'php' => array(
'method' => 'asidesUrlLists',
'urls' => $menu_evenement,
'url' => '/evenements/',
),
'title' => 'Voir'
)]);
$asides->load(['common_carte' => array(
'url' => '/evenements/view/area/get_id?type_news=news'
)]);
$asides->load(['common_participer' => array(
'php' => array(
'method' => 'asidesUrlLists_Ajoutez',
'loadcustom' => array(
'evenement'
)
)
)]);
$this->context['view']->aside = $asides->view($this->context['view']);
return $this->view('evenements/detail-evenement.html.twig');
}
}