src/Controller/EvenementsController.php line 346

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\ClassTheatre\asides;
  4. use App\ClassTheatre\Functions\Months;
  5. use App\ClassTheatre\TheatreController;
  6. use App\Service\Abonnements\Abonnements;
  7. use App\Service\Functions;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  11. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use TheatreCore\Classes\Images\Images;
  17. use TheatreCore\Entity\Bigregions;
  18. use TheatreCore\Entity\Extranetusers;
  19. use TheatreCore\Entity\News;
  20. use TheatreCore\Entity\Typesstructures;
  21. class EvenementsController extends TheatreController
  22. {
  23.     // {{{ _construct()
  24.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorTokenStorageInterface $tokenStorageFunctions $funcAbonnements $abonnements)
  25.     {
  26.         parent::__construct($translator$tokenStorage);
  27.         $this->view->controller 'evenements';
  28.         $this->em $em;
  29.         $this->func $func;
  30.         $this->serviceAbonnements $abonnements;
  31.     }
  32.     /**
  33.      *
  34.      * @Route("/evenements/non-accessible", name="evenements_non_accessible")
  35.      *
  36.      */
  37.     public function action_non_accessible()
  38.     {
  39.         $this->view->title_page 'Évènement non disponible';
  40.         $this->view->locate = array('/evenements/' => '&Eacute;vènements',
  41.             => '&Eacute;vènement non disponible');
  42.         $this->view->rub_courante 'news';
  43.         // 404
  44.         header('HTTP/1.0 404 Not Found');
  45.         return $this->view('evenements/non-accessible.html.twig');
  46.     }
  47.     /**
  48.      * @Route("/evenements", name="evenements")
  49.      * @Route("/evenements/view/area/{p_area}/", name="evenements_view_area")
  50.      * @Route("/evenements/area/{p_area}", name="evenements_area", defaults={"p_area"=null})
  51.      */
  52.     public function action_view($p_area nullMonths $monthsRequest $request)
  53.     {
  54.         $this->context['params']['area'] = $p_area;
  55.         $this->context['action'] = $this->context['view']->action 'view';
  56.         $title_page 'Tous les évènements autour du théâtre en France et dans le monde - festivals , rencontres, lectures...';
  57.         $this->view->locate = array(=> '&Eacute;vènements');
  58.         $this->rub_courante 'evenements';
  59.         // classe
  60.         $news $this->em->getRepository(News::class);
  61.         // la région ?
  62.         $area null;
  63.         $area_view '';
  64.         if (!empty($this->context['params']['area']) &&
  65.             (
  66.                 $this->func->my_is_int($this->context['params']['area']) ||
  67.                 strlen($this->context['params']['area']) == 2
  68.             )
  69.         ) {
  70.             $area $this->context['params']['area'];
  71.             $area_view 'area/' $area;
  72.         }
  73.         $this->view->area_view $area_view;
  74.         // le menu du spectacle
  75.         $menu_evenements = array(
  76.             'news' => array('url' => '/evenements/' $area_view '?type_news=news''name' => 'Évènements''id' => 'news'),
  77.             //'spectacles' => array('url'=> '/evenements/'.$area_view.'?type_news=spectacles','name'=> 'Spectacles','id'=>'spectacles'),
  78.         );
  79.         $type_news 'news';
  80.         if (!empty($_REQUEST['type_news']) && array_key_exists($_REQUEST['type_news'], $menu_evenements)) {
  81.             $type_news $_REQUEST['type_news'];
  82.         }
  83.         $menu_evenements[$type_news]['active'] = true;
  84.         $this->view->type_news $type_news;
  85.         $this->view->menu_evenements $menu_evenements;
  86.         $this->context['formAsideSearch'] = $this->get('form.factory')->createNamedBuilder('');
  87.         $month_list $months->month();
  88.         $this->context['formAsideSearch']
  89.             ->add('month'ChoiceType::class, [
  90.                 'label' => $this->context['tr']->trans('mois'),
  91.                 'choices' => array_flip($month_list),
  92.                 'attr' => ['class' => 'select_type']
  93.             ])
  94.             ->add('type_news'HiddenType::class, [
  95.                 'attr' => [
  96.                     'name' => 'type_news',
  97.                     'value' => $type_news
  98.                 ]
  99.             ])
  100.             ->add('rechm'SubmitType::class, [
  101.                 'label' => $this->context['tr']->trans('button_ok')
  102.             ])
  103.         ;
  104.         $this->getCommonSearchView();
  105.         $this->context['formAsideSearch']->handleRequest($request);
  106.         $sql_where null;
  107.         if ($this->context['formAsideSearch']->isSubmitted()) {
  108.             // recherche par mois
  109.             $month $this->context['formAsideSearch']->get('month')->getData();
  110.             if (empty($month) && isset($_GET['month'])) {
  111.                 $month $_GET['month'];
  112.             }
  113.             if (!empty($month) && array_key_exists($month$month_list)) {
  114.                 $this->view->month_search $month_list[$month];
  115.                 $tab explode('-'$month);
  116.                 $month $tab[0];
  117.                 $year $tab[1];
  118.                 $datestart date('Y-m-d'mktime(000$month1$year)); //premier du mois
  119.                 $dateend date('Y-m-d'mktime(000$month 10$year)); //dernier du mois
  120.                 $this->view->dateend $news->getFormeDate($dateend$GLOBALS['format_date'][$this->lng]);
  121.                 $this->view->datestart $news->getFormeDate($datestart$GLOBALS['format_date'][$this->lng]);
  122.                 //requete
  123.                 $sql_where .= ' AND (T3.date BETWEEN (\'' $datestart '\') AND (\'' $dateend '\'))';
  124.             }
  125.         }
  126.         // on calcul le nb de résultat
  127.         $pagerOptions['perPage'] = $this->perPage 10;
  128.         // récupérer les prochains évènements
  129.         $news_params = array(
  130.             'params' => array(
  131.                 'limit' => 'all',
  132.                 'where' => $sql_where,
  133.             ),
  134.             'special' => array(
  135.                 'prochains' => 180,
  136.                 'publish_valid' => true,
  137.                 'type_news' => $type_news,
  138.             ),
  139.             'dbg' => array('news''Liste des news')
  140.         );
  141.         // la region en plus ?
  142.         if (!empty($area)) {
  143.             if ($area == 'BE' || $area == 'CH' || $area == 'LU') {
  144.                 $news_params['special']['country'] = array($area);
  145.             } else {
  146.                 $news_params['special']['idbigregion'] = array($area);
  147.             }
  148.         }
  149.         // type de structure
  150.         $typesstructure_list $this->em->getRepository(Typesstructures::class)->getTypeStructureList(truetrue, ['SN''TN''CDN''EC']);
  151.         $idtypestructure null;
  152.         if (!empty($_REQUEST['idtypestructure']) && array_key_exists($_REQUEST['idtypestructure'], $typesstructure_list)) {
  153.             $idtypestructure filter_var($_REQUEST['idtypestructure'], FILTER_SANITIZE_STRING);
  154.             $news_params['special']['idtypestructure'] = $idtypestructure;
  155.             $this->context['view']->typestructure $typesstructure_list[$idtypestructure];
  156.             $this->context['view']->idtypestructure $idtypestructure;
  157.         }
  158.         //On compte le nombre total d'évènements
  159.         $news_params['special']['count_only'] = 'all';
  160.         $total_items $news->queryOne($news->getSQLNews($news_params['params'], $news_params['special']));
  161.         unset($news_params['special']['count_only']);
  162.         // poagination
  163.         $this->view->pagination $this->getPagination($total_items$this->perPage);
  164.         //Définir la limite
  165.         $news_params['params']['limit'] = array($this->getLimitStart(), $this->perPage);
  166.         // liste des news
  167.         $this->view->news_list $news->getListNews($news_params);
  168.         // page de provenance
  169.         $this->view->from_page 'region/area/' $area;
  170.         // regions
  171.         $regions $this->em->getRepository(Bigregions::class);
  172.         // nom de la région et code
  173.         if (!empty($area)) {
  174.             $this->context['view']->area_active true;
  175.             if ($this->func->my_is_int($area)) {
  176.                 $this->view->region_name $regions->getRegionName($area);
  177.             } else {
  178.                 $this->view->country_name $regions->getNameCountry($area);
  179.             }
  180.             $this->view->area $area;
  181.         }
  182.         $this->view->use_addthis true;
  183.         $this->context['view']->is_carte_svg true;
  184.         $this->context['view']->js_more['raphael-min-js'] = 'raphaeljs/raphael-min.js';
  185.         $this->context['view']->js_more['raphael-svg-import'] = 'raphaeljs/raphael-svg-import.js';
  186.         //asides top
  187.         if (!empty($area)) {
  188.             $asides_top = new asides();
  189.             $asides_top->load(['aside_top' => array(
  190.                 'php' => array(
  191.                     'method' => 'asidesUrlRegions'
  192.                 )
  193.             )
  194.             ]);
  195.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  196.         } else if (!is_null($idtypestructure)) {
  197.             $asides_top = new asides();
  198.             $asides_top->load(['aside_top' => array(
  199.                 'php' => array(
  200.                     'method' => 'asidesUrlListsMenuCDN'
  201.                 )
  202.             )
  203.             ]);
  204.             $this->context['view']->aside_top $asides_top->view($this->context['view']);
  205.         }
  206.         //asides
  207.         $menu_evenement = array(
  208.             array(
  209.                 'name' => 'Tous les évènements'
  210.             )
  211.         );
  212.         //On affiche la publicité google
  213.         $asides_publicite = new asides();
  214.         asides::setEntityManager($this->em);
  215.         asides::loadaside('Publicite')->addGoogle($asides_publicite$this->serviceAbonnements);
  216.         $this->context['view']->asides_publicite $asides_publicite->view($this->context['view']);
  217.         $asides = new asides();
  218.         $asides->load(['url_lists' => array(
  219.             'exec' => array(
  220.                 'htmlstart' => true
  221.             ),
  222.             'php' => array(
  223.                 'method' => 'asidesUrlLists',
  224.                 'urls' => $menu_evenement,
  225.                 'url' => '/evenements/',
  226.                 'params' => array(
  227.                     'activate' => true
  228.                 )
  229.             ),
  230.             'title' => 'Voir'
  231.         )]);
  232.         $asides->load(['event_list_mois' => array(
  233.             'exec' => array(
  234.                 'htmlend' => true
  235.             ),
  236.             'title' => 'Recherche par période'
  237.         )]);
  238.         $asides->load(['url_lists_alone,tn_cdn_sn' => array(
  239.             'php' => [
  240.                 'method' => 'tn_cdn_sn',
  241.                 'url' => '/evenements?idtypestructure=key_structure',
  242.                 'params' => array(
  243.                     'activate' => (!empty($this->context['view']->idtypestructure)) ? $this->context['view']->idtypestructure ''
  244.                 )
  245.             ],
  246.             'title' => 'Voir aussi'
  247.         )]);
  248.         //Chargement de la pub par région
  249.         asides::setEntityManager($this->em);
  250.         asides::loadaside('Publicite')->addWithNational($asides);
  251.         asides::loadaside('Publicite')->addWithRegion($asides, ['region' => $area]); //$this->area
  252.         $asides->load(['common_carte' => array(
  253.             'url' => '/evenements/area/get_id?type_news=news'
  254.         )]);
  255.         $asides->load(['common_participer' => array(
  256.             'php' => array(
  257.                 'method' => 'asidesUrlLists_Ajoutez',
  258.                 'loadcustom' => array(
  259.                     'evenement'
  260.                 )
  261.             )
  262.         )]);
  263.         $this->context['view']->aside $asides->view($this->context['view']);
  264.         return $this->view('evenements/view.html.twig');
  265.     }
  266.     /**
  267.      * @Route("/evenements/detail-evenement", name="evenements_detail")
  268.      * @Route("/evenements/detail-evenement/id/{id}/", name="evenements_detail_id")
  269.      */
  270.     public function action_detail_evenement($id nullImages $images)
  271.     {
  272.         $this->context['params']['id'] = $id;
  273.         $this->params['path'] = 'evenements';
  274.         $news_params = array(
  275.             // 'renderer' => &$renderer,
  276.             'publish' => 1,
  277.             'valid' => 1,
  278.             'idnew' => $this->context['params']['id'],
  279.         );
  280.         $news $this->em->getRepository(News::class);
  281.         $data_new $news->getInfosNews($id, array('schedule_detail' => true));
  282.         if (!$data_new) {
  283.             return $this->redirectToRoute("evenements");
  284.         }
  285.         $this->idnew $id;
  286.         // récuprére une vignette dans un format correct
  287.         if (!empty($data_new['url_file'])) {
  288.             // trouver l'image avec le hash de répertoire
  289.             $url_file_hash $_ENV['PATH_DIRECTORYUPLOAD'] . 'news/src/' $images->getHashDir($data_new['url_file'], true) . $data_new['url_file'];
  290.             if (file_exists($url_file_hash)) {
  291.                 $params_thumb = array(
  292.                     'other_directory' => $_ENV['PATH_DIRECTORYUPLOAD'] . 'news/src',
  293.                     'hash_dir' => true,
  294.                     'no_ext_dir' => true,
  295.                 );
  296.                 $data_new['vignette'] = $news->getThumbnail($data_new['url_file'], 255'L'$params_thumb);
  297.             } else {
  298.                 $data_new['url_file'] = null;
  299.             }
  300.         }
  301.         foreach ($data_new['persons'] as $p) {
  302.             $data_new['new_person'][$p['idperson']] = $p['idperson'];
  303.         }
  304.         // c'est la personne qui a publié ?
  305.         if ($this->getUser() instanceof Extranetusers && $data_new['idextranetuser'] == $this->getUser()->getIdextranetuser()) {
  306.             $data_new['is_extranetuser'] = true;
  307.             // bouton "modifier"
  308.             if (empty($this->view->do)) {
  309.                 $this->view->barre_infos[] = array(
  310.                     'url' => '/' $this->params['path'] . '/ajouter/idnew/' $this->idnew '?do=edit',
  311.                     'title' => 'modifier cet évènement',
  312.                     'icone' => 'edit_icon',
  313.                 );
  314.             }
  315.         }
  316.         // si pas validé ou pas publié
  317.         if (empty($this->params['is_admin'])) {
  318.             if (($data_new['valid'] == && empty($data_new['is_extranetuser']))
  319.                 || ($data_new['publish'] == && empty($data_new['is_extranetuser']))) {
  320.                 return $this->redirect('/' $this->params['path'] . '/non-accessible');
  321.             }
  322.         }
  323.         $this->view->data_new $data_new;
  324.         $this->view->locate = array(
  325.             '/evenements/' => '&Eacute;vènements',
  326.             => $this->context['view']->data_new['title']
  327.         );
  328.         // situation et titre meta
  329.         $this->title_page $this->context['view']->data_new['title'];
  330.         if (!empty($this->context['view']->data_new['city'])) {
  331.             $this->title_page .= ' - ' $this->context['view']->data_new['city'];
  332.         }
  333.         // pas de rub évènement
  334.         $this->rub_courante 'evenements';
  335.         // les horaires
  336.         $this->view->js_more[] = 'jquery.qtip.min.js';
  337.         //aside
  338.         $menu_evenement = array(
  339.             array(
  340.                 'name' => 'Tous les évènements'
  341.             )
  342.         );
  343.         $asides = new asides();
  344.         $asides->load('event_detail_aside');
  345.         $asides->load(['url_lists_alone' => array(
  346.             'php' => array(
  347.                 'method' => 'asidesUrlLists',
  348.                 'urls' => $menu_evenement,
  349.                 'url' => '/evenements/',
  350.             ),
  351.             'title' => 'Voir'
  352.         )]);
  353.         $asides->load(['common_carte' => array(
  354.             'url' => '/evenements/view/area/get_id?type_news=news'
  355.         )]);
  356.         $asides->load(['common_participer' => array(
  357.             'php' => array(
  358.                 'method' => 'asidesUrlLists_Ajoutez',
  359.                 'loadcustom' => array(
  360.                     'evenement'
  361.                 )
  362.             )
  363.         )]);
  364.         $this->context['view']->aside $asides->view($this->context['view']);
  365.         return $this->view('evenements/detail-evenement.html.twig');
  366.     }
  367. }