src/Controller/AjoutSpectacleController.php line 303

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\ClassTheatre\asides;
  4. use App\ClassTheatre\TheatreController;
  5. use App\Service\EditUtils;
  6. use App\Service\Functions;
  7. use App\Service\TheatreMail\TheatreMail;
  8. use App\Service\UtilsEdit;
  9. use App\Service\wiki2xhtml\wiki2xhtml;
  10. use App\Validator\CheckWebsite;
  11. use App\Validator\Relations;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Psr\Log\LoggerInterface;
  14. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  15. use Symfony\Component\Form\Extension\Core\Type\FileType;
  16. use Symfony\Component\Form\Extension\Core\Type\FormType;
  17. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  19. use Symfony\Component\Form\Extension\Core\Type\TextType;
  20. use Symfony\Component\Form\FormFactoryInterface;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  25. use Symfony\Contracts\Translation\TranslatorInterface;
  26. use Symfony\Component\Validator\Constraints\File;
  27. use Symfony\Component\Validator\Constraints\Length;
  28. use Symfony\Component\Validator\Constraints\NotBlank;
  29. use Symfony\Component\Validator\Constraints\Type;
  30. use Symfony\Component\Validator\Constraints\Url;
  31. use TheatreCore\Entity\Contacts;
  32. use TheatreCore\Entity\Contents;
  33. use TheatreCore\Entity\Extranetusers;
  34. use TheatreCore\Entity\Files;
  35. use TheatreCore\Entity\Persons;
  36. use TheatreCore\Entity\Schedules;
  37. use TheatreCore\Entity\Spectaclegenres;
  38. use TheatreCore\Entity\Spectacles;
  39. use TheatreCore\Entity\Texts;
  40. use TheatreCore\Entity\UserAction;
  41. use TheatreCore\Form\Type\RelationsType;
  42. class AjoutSpectacleController extends TheatreController
  43. {
  44.     // id de la table
  45.     protected $idspectacle null;
  46.     // nom de l'objet
  47.     protected $spectacles;
  48.     // formulaire
  49.     protected $form;
  50.     // paramètres
  51.     protected $params;
  52.     // wiki
  53.     protected $wiki;
  54.     // le user
  55.     protected $idextranetuser null;
  56.     // infos sur le spectacle
  57.     public $data_object null;
  58.     // a faire
  59.     public $do false;
  60.     // fichier
  61.     protected $objfile;
  62.     // asides
  63.     protected $asides "";
  64.     private LoggerInterface $logger;
  65.     private SessionInterface $session;
  66.     public function __construct(
  67.         EntityManagerInterface $em,
  68.         TranslatorInterface $translator,
  69.         TokenStorageInterface $tokenStorage,
  70.         Functions $func,
  71.         LoggerInterface $logger,
  72.         SessionInterface $session
  73.     )
  74.     {
  75.         // surbrillance du menu principal (thnet)
  76.         $GLOBALS['rub_courante'] = 'spectacles';
  77.         parent::__construct($translator$tokenStorage);
  78.         $GLOBALS['editset'] = 'spectacles';
  79.         $this->context['controller'] = 'ajoutspectacle';
  80.         $this->em $em;
  81.         $this->session $session;
  82.         $this->func $func;
  83.         $this->asides = new asides();
  84.         $this->logger $logger;
  85.         $this->spectacles $em->getRepository(Spectacles::class);
  86.     }
  87.     public function InitAjoutSpectacle($params)
  88.     {
  89.         // chemin du controller
  90.         if(empty($params['path'])) {
  91.             $params['path']  = 'ajoutspectacle';
  92.         }
  93.         // Si nous sommes dans le « controller » ajoutdate
  94.         if(isset($this->context['origineController'])) {
  95.             $params['path'] = $this->view->page_courante $this->context['origineController'];
  96.         }
  97.         if (isset($params['idspectacle']) && (empty($params['idspectacle']) || !is_numeric($params['idspectacle']))) {
  98.             return $this->redirect('/'.$this->params['path'].'/non-accessible?unknown');
  99.         }
  100.         // action possible
  101.         if(!empty($params['possible_do'])) {
  102.             $params['do'] = $this->getDoAction($params['possible_do']);
  103.         }
  104.         // les paramètres en plus
  105.         $this->params $params;
  106.         // on vient de qqes part en particulier ?
  107.         if(!empty($_GET['urifrom'])) {
  108.             $urifrom filter_var($_GET['urifrom'], FILTER_SANITIZE_URL);
  109.         } else {
  110.             $urifrom '/'.$this->params['path'].'/';
  111.         }
  112.         // id de l'objet
  113.         if(!empty($params['idspectacle'])) {
  114.             // identifiant de la spectacles
  115.             $GLOBALS['id'] = $this->idspectacle $this->view->idspectacle intval($params['idspectacle']);
  116.             // on doit dans tous les cas, vérifier que l'extranetuser à les droits sur cet évènement
  117.             // récup des infos
  118.             $this->getInfosSpectacle($this->idspectacle,array('no_wiki_convert' => true));
  119.             // pas de spectacles qui correspond => redirection
  120.             if(empty($this->view->data_spectacle)) {
  121.                 return $this->redirect('/'.$this->params['path'].'/non-accessible?unknown');
  122.             }
  123.             // spectacle en attente de suppression => redirection
  124.             if($this->view->data_spectacle['statut']==4) {
  125.                 return $this->redirect('/'.$this->params['path'].'/non-accessible?deleted');
  126.             }
  127.             // on vérifie qu'on a bien les droits sur l'article
  128.             if(empty($params['is_admin']) && empty($params['no_check_extranetuser'])) {
  129.                 if(!empty($this->view->data_new['idextranetuser'])
  130.                     && ($this->getUser() instanceof Extranetusers && $this->view->data_new['idextranetuser']!=$this->getUser()->getIdextranetuser())) {
  131.                     return $this->redirect('/'.$this->params['path'].'/non-accessible?right');
  132.                 }
  133.             }
  134.             // si on est en mode édition
  135.             if(!empty($params['do'])) {
  136.                 // vérifier le token
  137.                 if(($params['do']=='delete' || $params['do']=='publish') && !$this->func->checkCsrfToken('ajoutspectacle')) {
  138.                     return $this->redirect($urifrom.'?tc=err');
  139.                 }
  140.                 // vérifier le token pour le calendrier
  141.                 if($params['do']=='delete_schedule' && !$this->func->checkCsrfToken($params['path'])) {
  142.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?tc=err');
  143.                 }
  144.                 if($params['do']=='active_representation&' && !$this->func->checkCsrfToken($params['path'])) {
  145.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?tc=err');
  146.                 }
  147.                 if($params['do']=='disable_representation&' && !$this->func->checkCsrfToken($params['path'])) {
  148.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?tc=err');
  149.                 }
  150.                 $this->view->do $params['do'];
  151.                 // mettre en ligne/hors ligne et retour à mon théâtre
  152.                 if($this->view->do=='publish' && isset($_GET['publish'])
  153.                     && ($_GET['publish']==|| $_GET['publish']==0)) {
  154.                     $this->setPublish($this->idspectacle,(int)$_GET['publish']);
  155.                     return $this->redirectToRoute('montheatre_spectacles', ['publish' => true]);
  156.                 }
  157.                 // supprimer  en mettant le statut 4
  158.                 if($this->view->do=='delete') {
  159.                     $this->spectacles->setUpdateFields(array(
  160.                         'statut' => 4,
  161.                         'publish' => 0
  162.                     ));
  163.                     $this->spectacles->setData($this->idspectacle);
  164.                     return $this->redirect($urifrom.'?delete=true');
  165.                 }
  166.                 //les représentations sont annulées
  167.                 if($this->view->do=='disable_representation' && $this->idspectacle>1){
  168.                     if(!empty($params['idcontact'])) {
  169.                         $this->em->getRepository(Schedules::class)->cancelledDates($this->idspectacle,$params['idcontact']);
  170.                     }
  171.                     // enregistrer les modifications
  172.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  173.                     // redirection
  174.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?disable_representation=true');
  175.                 }
  176.                 //les représentations ont lieux
  177.                 if($this->view->do=='active_representation' && $this->idspectacle>1){
  178.                     if(!empty($params['idcontact'])) {
  179.                         $this->em->getRepository(Schedules::class)->cancelledDates($this->idspectacle,$params['idcontact'], false);
  180.                     }
  181.                     // enregistrer les modifications
  182.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  183.                     // redirection
  184.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?active_representation=true');
  185.                 }
  186.                 // supprimer un calendrier et retour à la spectacles
  187.                 if($this->view->do=='delete_schedule' && $this->idspectacle>1) {
  188.                     // un calendrier ?
  189.                     if(!empty($params['idcontact'])) {
  190.                         $this->em->getRepository(Schedules::class)->deleteSchedule($this->idspectacle,$params['idcontact']);
  191.                     } else { // tout le calendrier
  192.                         $this->em->getRepository(Schedules::class)->deleteSchedule($this->idspectacle);
  193.                     }
  194.                     // enregistrer les modifications
  195.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  196.                     // redirection
  197.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?delete_schedule=true');
  198.                 }
  199.                 // valider les dates dans le backoffice et retour
  200.                 if($this->view->do=='validate_schedule' && $this->idspectacle>&& !empty($params['is_admin'])) {
  201.                     // un calendrier ?
  202.                     if(!empty($params['idcontact'])) {
  203.                         $this->em->getRepository(Schedules::class)->validateSchedule($this->idspectacle,$params['idcontact']);
  204.                     } else { // tout le calendrier
  205.                         $this->em->getRepository(Schedules::class)->validateSchedule($this->idspectacle);
  206.                     }
  207.                     // enregistrer les modifications
  208.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  209.                     // redirection
  210.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?validate_schedule=true');
  211.                 }
  212.             }
  213.         } // fin idspectacle existe
  214.         // on ajoute une relation au retour de ajout-simple (par exemple : une personne ou un contact)
  215.         if(!empty($_GET['add_relation']) && $this->getRelationField($_GET['add_relation'])) {
  216.             // stockage des relations en session avec le paramètre true (exemple : metteur en scène)
  217.             if($_GET['add_relation']=='spectacle_author' || $_GET['add_relation']=='spectacle_director') {
  218.                 $this->saveRelation($_GET['add_relation'],$_GET[$_GET['add_relation']],true);
  219.                 // stockage des relations en dur dans la base
  220.             } elseif($_GET['add_relation']!='idcontact') {
  221.                 $this->saveRelation($_GET['add_relation'],$_GET[$_GET['add_relation']]);
  222.                 // redirection
  223.                 $url_src parse_url($_SERVER['REQUEST_URI']);
  224.                 return $this->redirect($url_src['path']);
  225.             }
  226.         }
  227.         $this->context['view']->no_texte_version true;
  228.         // classe pour le wiki
  229.         $this->wiki = new wiki2xhtml();
  230.         $this->idextranetuser $this->getUser()->getIdextranetuser();
  231.         // barre addthis
  232.         $this->view->use_addthis true;
  233.         if(empty($params['ignore'])){
  234.             $this->buildMenu();
  235.         }
  236.     }
  237.     // }}}
  238.     /**
  239.      *
  240.      * @Route("/ajoutspectacle/", name="ajout_spectacle_index")
  241.      * @Route("/ajoutspectacle/view/idspectacle/{p_idspectacle}", name="ajout_spectacle_index_idspectacle")
  242.      *
  243.      */
  244.     public function action_view($p_idspectacle nullRequest $request)
  245.     {
  246.         $this->context['action'] = 'view';
  247.         $params['idspectacle'] = $this->context['params']['idspectacle'] = $p_idspectacle;
  248.         if(!empty($params['idspectacle'])
  249.             && $this->func->my_is_int($params['idspectacle'])) {
  250.             $idspectacle = (int)$params['idspectacle'];
  251.         } else {
  252.             $idspectacle null;
  253.         }
  254.         // rediriger vers montheatre/connexion
  255.         if(!$this->getUser() instanceof Extranetusers){
  256.             return $this->redirectToRoute('app_login', [
  257.                 'urifrom' => $idspectacle '/ajoutspectacle/view/idspectacle/'.$idspectacle '/ajoutspectacle/',
  258.                 'entete_connexion' => 'ajoutspectacle'
  259.             ]);
  260.         }
  261.         // on instancie
  262.         $ajoutspectacle_params = array(
  263.             'idspectacle' => $idspectacle,
  264.             'possible_do' => array('edit','publish','delete')
  265.         );
  266.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  267.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  268.             'attr' => [
  269.                 'id' => 'masterform'
  270.             ]
  271.         ]);
  272.         $this->getViewForm();
  273.         $this->context['form'] = $this->context['formFactory']->getForm();
  274.         $this->context['form']->handleRequest($request);
  275.         // validation du formulaire
  276.         if($this->validateViewForm()) {
  277.             return $this->saveView();
  278.         }
  279.         // élèments commun (css, js, barre d'outils)
  280.         $this->getAjoutspectacleCommon();
  281.         // gestion des étapes et titre de page modifié
  282.         $title_page 'Ajouter votre spectacle - A lire';
  283.         return $this->view('ajoutspectacle/view.html.twig', [
  284.             'form' => $this->context['form']->createView()
  285.         ]);
  286.     }
  287.     /**
  288.      *
  289.      * @Route("/ajoutspectacle/type/idspectacle/{idspectacle}", name="ajout_spectacle_type_idspectacle")
  290.      *
  291.      */
  292.     public function action_type($idspectacle nullRequest $request)
  293.     {
  294.         $this->context['action'] = 'type';
  295.         $this->context['params']['idspectacle'] = $idspectacle;
  296.         if (!empty($this->context['params']['idspectacle'])
  297.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  298.             $idspectacle = (int)$this->context['params']['idspectacle'];
  299.         } else {
  300.             $idspectacle null;
  301.         }
  302.         // rediriger vers montheatre/connexion
  303.         if (!$this->getUser() instanceof Extranetusers) {
  304.             return $this->redirectToRoute('app_login', ['urifrom' => 'ajoutspectacle/type/''entete_connexion' => 'ajoutspectacle']);
  305.         }
  306.         // on instancie
  307.         $ajoutspectacle_params = array(
  308.             'possible_do' => array('edit'),
  309.         );
  310.         if(!empty($idspectacle)) {
  311.             $ajoutspectacle_params['idspectacle'] = $idspectacle;
  312.         }
  313.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  314.         $this->context['formFactory'] = $this->get('form.factory')->createNamedBuilder(''FormType::class, null, [
  315.             'validation_groups' => false,
  316.             'attr' => [
  317.                 'id' => 'masterform'
  318.             ]
  319.         ]);
  320.         $this->getTypeForm();
  321.         $this->context['form'] = $this->context['formFactory']->getForm();
  322.         $this->context['form']->handleRequest($request);
  323.         // validation du formulaire
  324.         if($this->validateTypeForm()) {
  325.             return $this->saveType();
  326.         }
  327.         // page simple sans addthis, montheatre
  328.         $this->getAjoutspectacleCommon();
  329.         // gestion des étapes et titre de page modifié
  330.         $title_page $this->getSteps('Ajouter votre spectacle'1);
  331.         return $this->view('ajoutspectacle/type.html.twig', [
  332.             'form' => $this->context['form']->createView()
  333.         ]);
  334.     }
  335.     /**
  336.      *
  337.      * @Route("/ajoutspectacle/spectacle/idspectacle/{idspectacle}", name="ajout_spectacle_spectacle_idspectacle")
  338.      *
  339.      */
  340.     public function action_spectacle($idspectacle nullRequest $requestUtilsEdit $utilsEdit)
  341.     {
  342.         $this->context['action'] = 'spectacle';
  343.         $this->context['params']['idspectacle'] = $idspectacle;
  344.         $this->utilsEdit $utilsEdit;
  345.         if (!empty($this->context['params']['idspectacle'])
  346.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  347.             $idspectacle = (int)$this->context['params']['idspectacle'];
  348.         }
  349.         // rediriger vers montheatre/connexion
  350.         if (!$this->getUser() instanceof Extranetusers) {
  351.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/spectacle/''entete_connexion' => 'ajoutspectacle']);
  352.         }
  353.         $ajoutspectacle_params = array(
  354.             'possible_do' => array('edit'),
  355.             'idspectacle' => $idspectacle
  356.         );
  357.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  358.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  359.             'attr' => [
  360.                 'id' => 'masterform'
  361.             ]
  362.         ]);
  363.         $this->getSpectacleForm();
  364.         $this->context['form'] = $this->context['formFactory']->getForm();
  365.         $this->context['form']->handleRequest($request);
  366.         // validation du formulaire
  367.         if($this->validateSpectacleForm()) {
  368.             return $this->saveSpectacle();
  369.         }
  370.         // page simple sans addthis, montheatre
  371.         $this->getAjoutspectacleCommon();
  372.         // gestion des étapes et titre de page modifié
  373.         $title_page $this->getSteps('Ajouter votre spectacle'1);
  374.         return $this->view('ajoutspectacle/spectacle.html.twig', [
  375.             'form' => $this->context['form']->createView()
  376.         ]);
  377.     }
  378.     /**
  379.      *
  380.      * @Route("/ajoutspectacle/informations/idspectacle/{idspectacle}", name="ajout_spectacle_informations_idspectacle")
  381.      *
  382.      */
  383.     public function action_informations($idspectacle nullRequest $request)
  384.     {
  385.         $this->redirect('/erreur/introuvable');
  386.         $this->context['action'] = 'informations';
  387.         $this->context['params']['idspectacle'] = $idspectacle;
  388.         if (!empty($this->context['params']['idspectacle'])
  389.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  390.             $idspectacle = (int)$this->context['params']['idspectacle'];
  391.         }
  392.         // rediriger vers montheatre/connexion
  393.         if (!$this->getUser() instanceof Extranetusers) {
  394.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/information/''entete_connexion' => 'ajoutspectacle']);
  395.         }
  396.         // on instancie
  397.         $ajoutspectacle_params = array(
  398.             'idspectacle' => $idspectacle,
  399.             'possible_do' => array('edit'),
  400.         );
  401.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  402.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, $this->view->data_spectacle, [
  403.             'attr' => [
  404.                 'id' => 'masterform'
  405.             ]
  406.         ]);
  407.         $this->getInformationsForm();
  408.         $this->context['form'] = $this->context['formFactory']->getForm();
  409.         $this->context['form']->handleRequest($request);
  410.         // validation du formulaire
  411.         if($this->validateInformationsForm()) {
  412.             return $this->saveInformations();
  413.         }
  414.         // On initialize les par défaults ou les données existantes
  415.         else {
  416.             // si idspectacle est vide, on mets mise en scène en défaut et langue en FR
  417.             if(empty($this->idspectacle)) {
  418.                 $this->context['form']->setData(array('idtypespectacle' => 4'language' => 'fr'));
  419.             } else if(!$this->context['form']->isSubmitted()) {
  420.                 if(!empty($this->view->data_spectacle['idspectaclegenre'])) {
  421.                     $this->context['form']->setData(array('idspectaclegenre' => $this->view->data_spectacle['idspectaclegenre']));
  422.                 }
  423.                 if(!empty($this->view->data_spectacle['language_src'])) {
  424.                     $this->context['form']->get('language')->setData($this->view->data_spectacle['language_src']);
  425.                 }
  426.                 if(!empty($this->view->data_spectacle['idtypespectacle'])) {
  427.                     $this->context['form']->setData(array('idtypespectacle' => $this->view->data_spectacle['idtypespectacle']));
  428.                 }
  429.                 $defaultDate = new \Datetime("0000-00-00");
  430.                 if(!empty($this->view->data_spectacle['creation_date']) && $this->view->data_spectacle['creation_date'] == $defaultDate->format("d/m/Y")) {
  431.                     $this->context['form']->get('creation_date')->setData(null);
  432.                 }
  433.             }
  434.         }
  435.         // page simple sans addthis, montheatre
  436.         $this->getAjoutspectacleCommon();
  437.         // gestion des étapes et titre de page modifié
  438.         $title_page $this->getSteps('Ajouter votre spectacle'2);
  439.         return $this->view('ajoutspectacle/informations.html.twig', [
  440.             'form' => $this->context['form']->createView()
  441.         ]);
  442.     }
  443.     /**
  444.      *
  445.      * @Route("/ajoutspectacle/texte/idperson/{idperson}/idspectacle/{idspectacle}", name="ajout_spectacle_texte_idperson_idspectacle")
  446.      * @Route("/ajoutspectacle/texte/idspectacle/{idspectacle}", name="ajout_spectacle_texte_idspectacle")
  447.      *
  448.      */
  449.     public function action_texte($idspectacle null$idperson nullRequest $requestUtilsEdit $utilsEdit)
  450.     {
  451.         $this->context['action'] = 'textes';
  452.         $this->context['params']['idspectacle'] = $idspectacle;
  453.         $this->context['params']['idperson'] = $idperson;
  454.         $this->utilsEdit $utilsEdit;
  455.         if (!empty($this->context['params']['idspectacle'])
  456.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  457.             $idspectacle $this->context['params']['idspectacle'];
  458.         }
  459.         // rediriger vers montheatre/connexion
  460.         if (!$this->getUser() instanceof Extranetusers) {
  461.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/texte/''entete_connexion' => 'ajoutspectacle']);
  462.         }
  463.         // on instancie
  464.         $ajoutspectacle_params = array(
  465.             'possible_do' => array('edit'),
  466.         );
  467.         if(!empty($idspectacle)) {
  468.             $ajoutspectacle_params['idspectacle'] = $idspectacle;
  469.         }
  470.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  471.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  472.             'attr' => [
  473.                 'id' => 'masterform'
  474.             ]
  475.         ]);
  476.         $this->getTexteForm();
  477.         $this->context['form'] = $this->context['formFactory']->getForm();
  478.         $this->context['form']->handleRequest($request);
  479.         // validation du formulaire
  480.         if($this->validateTexteForm()) {
  481.             return $this->saveTexte();
  482.         }
  483.         // page simple sans addthis, montheatre
  484.         $this->getAjoutspectacleCommon();
  485.         // gestion des étapes et titre de page modifié
  486.         $this->context['view']->title_page $this->getSteps('Ajouter votre spectacle'1);
  487.         return $this->view('ajoutspectacle/texte.html.twig', [
  488.             'form' => $this->context['form']->createView()
  489.         ]);
  490.     }
  491.     public function buildMenu(){
  492.         $tr $this->context['tr'];
  493.         $menu_array = array(
  494.             'dossier' => array(
  495.                 'title' => $tr->trans('ajout_onglet_dossier')
  496.             ),
  497.             'supprimer' => array(
  498.                 'title' => $tr->trans('ajout_onglet_suppresion_dossier')
  499.             ),
  500.             'sauvegarder' => array(
  501.                 'title' => $tr->trans('ajout_onglet_sauvegarder_dossier')
  502.             )
  503.         );
  504.         if (empty($this->idspectacle)) {
  505.             unset($menu_array['supprimer']);
  506.             unset($menu_array['sauvegarder']);
  507.         }
  508.         if(!empty($this->context['action'])){
  509.             if(!array_key_exists($this->context['action'], $menu_array)){
  510.                 $menu_array['dossier']['active'] = true;
  511.                 $menu_array['dossier']['url'] = $this->context['action'];
  512.             }
  513.             else{
  514.                 $menu_array[$this->context['action']]['active'] = true;
  515.                 $menu_array['dossier']['url'] = 'type';
  516.             }
  517.             $this->context['view']->menu_spectacle $menu_array;
  518.         }
  519.     }
  520.     // {{{
  521.     /**
  522.      *
  523.      * @Route("/ajoutspectacle/distribution/idspectacle/{idspectacle}", name="ajout_spectacle_distribution_idspectacle")
  524.      *
  525.      */
  526.     public function action_distribution($idspectacle nullRequest $request)
  527.     {
  528.         $this->context['action'] = 'distribution';
  529.         $this->context['params']['idspectacle'] = $idspectacle;
  530.         // idspectacle en mode édition
  531.         if(!empty($this->context['params']['idspectacle'])
  532.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  533.             $idspectacle $this->context['params']['idspectacle'];
  534.             $GLOBALS['id'] = $idspectacle;
  535.         } else {
  536.             // TODO Cette route n'existe pas !!
  537.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=distribution');
  538.         }
  539.         // rediriger vers montheatre/connexion si pas loggué
  540.         if (!$this->getUser() instanceof Extranetusers) {
  541.             return $this->redirectToRoute('app_login', [
  542.                 'urifrom' => '/ajoutspectacle/distribution/idspectacle/'.$idspectacle,
  543.                 'entete_connexion' => 'ajoutspectacle'
  544.             ]);
  545.         }
  546.         // paramètre et instanciation
  547.         $ajoutspectacle_params = array(
  548.             'idspectacle' => $idspectacle,
  549.             'possible_do' => array('edit'),
  550.         );
  551.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  552.         $this->context['formFactory'] = $this->get('form.factory')->createNamedBuilder(''FormType::class, null, [
  553.             'validation_groups' => false,
  554.             'attr' => [
  555.                 'id' => 'masterform'
  556.             ]
  557.         ]);
  558.         // formulaire
  559.         $this->getDistributionForm();
  560.         $this->context['form'] = $this->context['formFactory']->getForm();
  561.         $this->context['form']->handleRequest($request);
  562.         // validation du formulaire
  563.         if($this->validateDistributionForm()) {
  564.             return $this->saveDistribution($request);
  565.         }
  566.         // élèments commun (css, js, barre d'outils)
  567.         $this->getAjoutspectacleCommon();
  568.         // style css
  569.         $jqueryui_theme 'themes_2018';
  570.         $jqueryui_version '1.12-1';
  571.         // css en plus
  572.         $this->context['view']->style_more[] = array(
  573.             '/navigation/js/markitup/skins/markitup/style.css',
  574.             '/navigation/js/markitup/sets/dotclear/style.css',
  575.             '/navigation/js/jquery-ui/css/'.$jqueryui_theme.'/jquery-ui-'.$jqueryui_version.'.css',
  576.         );
  577.         // js en plus
  578.         $this->context['view']->js_more[] = array(
  579.             '/navigation/js/markitup/jquery.markitup.js',
  580.             '/navigation/js/markitup/sets/dotclear/set.js',
  581.             '/navigation/js/jquery-ui/jquery-ui-'.$jqueryui_version.'.min.js',
  582.             '/navigation/js/jquery-ui/jquery.ui.datepicker-fr.js'
  583.         );
  584.         // gestion des étapes et titre de page modifié
  585.         $title_page $this->getSteps('Ajouter votre spectacle'3);
  586.         return $this->view('ajoutspectacle/distribution.html.twig', [
  587.             'form' => $this->context['form']->createView()
  588.         ]);
  589.     }
  590.     // }}}
  591.     // {{{
  592.     /**
  593.      *
  594.      * @Route("/ajoutspectacle/production/idspectacle/{idspectacle}", name="ajout_spectacle_production_idspectacle")
  595.      *
  596.      */
  597.     public function action_production($idspectacle nullRequest $request)
  598.     {
  599.         $this->context['action'] = 'production';
  600.         $this->context['params']['idspectacle'] = $idspectacle;
  601.         // idspectacle en mode édition
  602.         if(!empty($this->context['params']['idspectacle'])
  603.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  604.             $idspectacle $this->context['params']['idspectacle'];
  605.             $GLOBALS['id'] = $idspectacle;
  606.         } else {
  607.             // TODO Cette route n'existe pas !!
  608.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=production');
  609.         }
  610.         // rediriger vers montheatre/connexion si pas loggué
  611.         if (!$this->getUser() instanceof Extranetusers) {
  612.             return $this->redirectToRoute('app_login', [
  613.                 'urifrom' => '/ajoutspectacle/production/idspectacle/'.$idspectacle,
  614.                 'entete_connexion' => 'ajoutspectacle'
  615.             ]);
  616.         }
  617.         // paramètre et instanciation
  618.         $ajoutspectacle_params = array(
  619.             'idspectacle' => $idspectacle,
  620.             'possible_do' => array('edit'),
  621.         );
  622.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  623.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  624.             'attr' => [
  625.                 'id' => 'masterform'
  626.             ]
  627.         ]);
  628.         // formulaire
  629.         $this->getProductionForm();
  630.         $this->context['form'] = $this->context['formFactory']->getForm();
  631.         $this->context['form']->handleRequest($request);
  632.         // validation du formulaire
  633.         if($this->validateProductionForm()) {
  634.             return $this->saveProduction();
  635.         }
  636.         // élèments commun (css, js, barre d'outils)
  637.         $this->getAjoutspectacleCommon();
  638.         // css en plus
  639.         $this->context['view']->style_more[] = array(
  640.             '/navigation/js/markitup/skins/markitup/style.css',
  641.             '/navigation/js/markitup/sets/dotclear/style.css'
  642.         );
  643.         // js en plus
  644.         $this->context['view']->js_more[] = array(
  645.             '/navigation/js/markitup/jquery.markitup.js',
  646.             '/navigation/js/markitup/sets/dotclear/set.js',
  647.         );
  648.         // gestion des étapes et titre de page modifié
  649.         $title_page $this->getSteps('Ajouter votre spectacle'4);
  650.         return $this->view('ajoutspectacle/production.html.twig', [
  651.             'form' => $this->context['form']->createView()
  652.         ]);
  653.     }
  654.     // }}}
  655.     // {{{
  656.     /**
  657.      *
  658.      * @Route("/ajoutspectacle/affiche/idspectacle/{idspectacle}", name="ajout_spectacle_affiche_idspectacle")
  659.      *
  660.      */
  661.     public function action_affiche($idspectacle nullRequest $requestEditUtils $editUtilsFormFactoryInterface $formFactory)
  662.     {
  663.         $this->context['action'] = 'production';
  664.         $this->context['params']['idspectacle'] = $idspectacle;
  665.         // idspectacle en mode édition
  666.         if(!empty($this->context['params']['idspectacle'])
  667.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  668.             $idspectacle $this->context['params']['idspectacle'];
  669.             $GLOBALS['id'] = $idspectacle;
  670.         } else {
  671.             // TODO Cette route n'existe pas !!
  672.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=affiche');
  673.         }
  674.         // rediriger vers montheatre/connexion si pas loggué
  675.         if (!$this->getUser() instanceof Extranetusers) {
  676.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/affiche/idspectacle/'.$idspectacle'entete_connexion' => 'ajoutspectacle']);
  677.         }
  678.         // paramètre et instanciation
  679.         $ajoutspectacle_params = array(
  680.             'idspectacle' => $idspectacle,
  681.             'possible_do' => array('edit'),
  682.         );
  683.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  684.         $this->context['formFactory'] = $formFactory->createBuilder(FormType::class, null, [
  685.             'attr' => [
  686.                 'id' => 'masterform'
  687.             ]
  688.         ]);
  689.         // formulaire
  690.         $this->getAfficheForm();
  691.         $this->context['form'] = $this->context['formFactory']->getForm();
  692.         $this->context['form']->handleRequest($request);
  693.         // validation du formulaire
  694.         if($this->validateAfficheForm()) {
  695.             return $this->saveAffiche($editUtils);
  696.         }
  697.         // élèments commun (css, js, barre d'outils)
  698.         $this->getAjoutspectacleCommon();
  699.         // css en plus
  700.         $this->context['view']->style_more[] = array(
  701.             '/navigation/js/markitup/skins/markitup/style.css',
  702.             '/navigation/js/markitup/sets/dotclear/style.css'
  703.         );
  704.         // js en plus
  705.         $this->context['view']->js_more[] = array(
  706.             '/navigation/js/markitup/jquery.markitup.js',
  707.             '/navigation/js/markitup/sets/dotclear/set.js',
  708.         );
  709.         // gestion des étapes et titre de page modifié
  710.         $title_page $this->getSteps('Ajouter votre spectacle'5);
  711.         return $this->view('ajoutspectacle/affiche.html.twig', [
  712.             'form' => $this->context['form']->createView()
  713.         ]);
  714.     }
  715.     // }}}
  716.     // {{{
  717.     /**
  718.      *
  719.      * @Route("/ajoutspectacle/presentation/idspectacle/{idspectacle}", name="ajout_spectacle_presentation_idspectacle")
  720.      *
  721.      */
  722.     public function action_presentation($idspectacle nullRequest $request)
  723.     {
  724.         $this->context['action'] = 'production';
  725.         $this->context['params']['idspectacle'] = $idspectacle;
  726.         // idspectacle en mode édition
  727.         if(!empty($this->context['params']['idspectacle'])
  728.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  729.             $idspectacle $this->context['params']['idspectacle'];
  730.             $GLOBALS['id'] = $idspectacle;
  731.         } else {
  732.             // TODO Cette route n'existe pas !!
  733.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=presentation');
  734.         }
  735.         // rediriger vers montheatre/connexion si pas loggué
  736.         if (!$this->getUser() instanceof Extranetusers) {
  737.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/production/idspectacle/'.$idspectacle'entete_connexion' => 'ajoutspectacle']);
  738.         }
  739.         // paramètre et instanciation
  740.         $ajoutspectacle_params = array(
  741.             'idspectacle' => $idspectacle,
  742.             'possible_do' => array('edit'),
  743.         );
  744.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  745.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  746.             'attr' => [
  747.                 'id' => 'masterform'
  748.             ]
  749.         ]);
  750.         // formulaire
  751.         $this->getPresentationForm();
  752.         $this->context['form'] = $this->context['formFactory']->getForm();
  753.         $this->context['form']->handleRequest($request);
  754.         // validation du formulaire
  755.         if($this->validatePresentationForm()) {
  756.             return $this->savePresentation();
  757.         }
  758.         // élèments commun (css, js, barre d'outils)
  759.         $this->getAjoutspectacleCommon();
  760.         //Pour tui editor
  761.         $this->view->formulaire_css true;
  762.         // js en plus
  763.         $this->view->js_more = array(
  764.             '/tui/markdown-it/dist/markdown-it.js',
  765.             '/tui/to-mark/dist/to-mark.js',
  766.             '/tui/tui-code-snippet/dist/tui-code-snippet.js',
  767.             '/tui/codemirror/lib/codemirror.js',
  768.             '/tui/highlightjs/highlight.pack.js',
  769.             '/tui/squire-rte/build/squire-raw.js',
  770.             '/tui/tui-editor-Editor.js'
  771.         );
  772.         // gestion des étapes et titre de page modifié
  773.         $title_page $this->getSteps('Ajouter votre spectacle'6);
  774.         return $this->view('ajoutspectacle/presentation.html.twig', [
  775.             'form' => $this->context['form']->createView()
  776.         ]);
  777.     }
  778.     // }}}
  779.     // {{{
  780.     /**
  781.      *
  782.      * @Route("/ajoutspectacle/dates/idspectacle/{idspectacle}", name="ajout_spectacle_dates_idspectacle")
  783.      *
  784.      */
  785.     public function action_dates($idspectacle nullRequest $request)
  786.     {
  787.         $this->context['action'] = 'production';
  788.         $this->context['params']['idspectacle'] = $idspectacle;
  789.         // créer un token pour anti-csrf
  790.         $this->func->tokenCsrf('ajoutspectacle',$this->context);
  791.         // idspectacle en mode édition
  792.         if(!empty($this->context['params']['idspectacle'])
  793.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  794.             $idspectacle $this->context['params']['idspectacle'];
  795.             $GLOBALS['id'] = $idspectacle;
  796.         } else {
  797.             // TODO Cette route n'existe pas !!
  798.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=dates');
  799.         }
  800.         // rediriger vers montheatre/connexion si pas loggué
  801.         if (!$this->getUser() instanceof Extranetusers) {
  802.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/dates/idspectacle/'$idspectacle'entete_connexion' => 'ajoutspectacle']);
  803.         }
  804.         $ajoutspectacle_params = array(
  805.             'idspectacle' => $idspectacle,
  806.             'do' => array('edit','delete')
  807.         );
  808.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  809.         // formulaire
  810.         $this->getSchedule($idspectacle);
  811.         // élèments commun (css, js, barre d'outils)
  812.         $this->getAjoutspectacleCommon();
  813.         // style css
  814.         $this->context['view']->style_more[] = 'calendrier_evenement';
  815.         // les horaires
  816.         $this->context['view']->js_more[] = 'jquery.qtip.min.js';
  817.         // gestion des étapes et titre de page modifié
  818.         $title_page $this->getSteps('Ajouter votre spectacle'7);
  819.         $template 'ajoutspectacle/dates.html.twig';
  820.         // Si nous sommes dans le « controller » ajoutdate
  821.         if(isset($this->context['origineController'])){
  822.             $this->view->page_courante $this->context['origineController'];
  823.             $template 'ajoutdate/dates.html.twig';
  824.         }
  825.         return $this->view($template);
  826.     }
  827.     // }}}
  828.     // {{{
  829.     /**
  830.      *
  831.      * @Route("/ajoutspectacle/modifier-dates/idspectacle/{idspectacle}", name="ajout_spectacle_modifier_dates_idspectacle")
  832.      * @Route("/ajoutspectacle/modifier-dates/idspectacle/{idspectacle}/idcontact/{idcontact}", name="ajout_spectacle_modifier_dates_idspectacle_idcontact")
  833.      *
  834.      */
  835.     public function action_modifier_dates($idspectacle null$idcontact nullRequest $request)
  836.     {
  837.         $this->context['action'] = 'production';
  838.         $this->context['params']['idspectacle'] = $idspectacle;
  839.         $this->context['params']['idcontact'] = $idcontact;
  840.         // idspectacle en mode édition
  841.         if (!empty($this->context['params']['idspectacle'])
  842.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  843.             $idspectacle $this->context['params']['idspectacle'];
  844.             $GLOBALS['id'] = $idspectacle;
  845.         } else {
  846.             // TODO Cette route n'existe pas !!
  847.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=modifier-dates');
  848.         }
  849.         // rediriger vers montheatre/connexion si pas loggué
  850.         if (!$this->getUser() instanceof Extranetusers) {
  851.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/modifier-dates/idspectacle/'$idspectacle'entete_connexion' => 'ajoutspectacle']);
  852.         }
  853.         // envoi idspectacle à la vue
  854.         $this->context['view']->idspectacle $idspectacle;
  855.         // idcontact => mode édition
  856.         if(!empty($this->context['params']['idcontact']) && $this->func->my_is_int($this->context['params']['idcontact'])) {
  857.             $idcontact $this->context['params']['idcontact'];
  858.         } else {
  859.             $idcontact null;
  860.         }
  861.         $ajoutspectacle_params = array(
  862.             'idspectacle' => $idspectacle,
  863.             'idcontact' => $idcontact,
  864.             'possible_do' => array('edit_schedule','delete_schedule')
  865.         );
  866.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  867.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  868.             'attr' => [
  869.                 'id' => 'masterform'
  870.             ]
  871.         ]);
  872.         $this->getScheduleForm($idspectacle,$idcontact);
  873.         $this->context['form'] = $this->context['formFactory']->getForm();
  874.         $this->context['form']->handleRequest($request);
  875.         if($this->validateScheduleForm() || !empty($_POST['dates'])) {
  876.             if(empty($_POST['dates'])) {
  877.                 $this->context['view']->error['precise_date'] = 'Vous devez préciser au moins une date de représentation';
  878.             } elseif(empty($this->context['form']->get('idcontact'))) {
  879.                 echo 'ERROR 2';
  880.                 $this->context['view']->error['precise_contact'] = 'Vous devez choisir un lieu de représentation';
  881.             } else {
  882.                 return $this->saveSchedule($idspectacle,$idcontact);
  883.             }
  884.         }
  885.         $this->getAjoutspectacleCommon();
  886.         // gestion des étapes et titre de page modifié
  887.         $title_page $this->getSteps('Ajouter votre spectacle'7);
  888.         // style css
  889.         $jqueryui_theme 'themes_2018';
  890.         $jqueryui_version '1.12-1';
  891.         $this->context['view']->style_more[] = array(
  892.             '/navigation/js/jquery-ui/css/'.$jqueryui_theme.'/jquery-ui-'.$jqueryui_version.'.css',
  893.             '/navigation/js/multidate/multidatepicker.css',
  894.         );
  895.         // js en plus
  896.         $this->context['view']->js_more[] = 'jquery-ui/jquery-ui-'.$jqueryui_version.'.min.js';
  897.         $this->context['view']->js_more[] = 'multidate/jquery-ui.multidatespicker.js';
  898.         $this->context['view']->js_more[] = 'jquery-ui/jquery.ui.datepicker-fr.js';
  899.         $template 'ajoutspectacle/modifier-dates.html.twig';
  900.         // Si nous sommes dans le « controller » ajoutdate
  901.         if(isset($this->context['origineController'])){
  902.             $this->view->page_courante $this->context['origineController'];
  903.             $template 'ajoutdate/modifier-dates.html.twig';
  904.         }
  905.         return $this->view($template, [
  906.             'form' => $this->context['form']->createView()
  907.         ]);
  908.     }
  909.     // }}}
  910.     // {{{
  911.     /**
  912.      *
  913.      * @Route("/ajoutspectacle/validation/idspectacle/{idspectacle}", name="ajout_spectacle_validation_idspectacle")
  914.      *
  915.      */
  916.     public function action_validation($idspectacle nullRequest $requestTheatreMail $TheatreMailEditUtils $editUtils)
  917.     {
  918.         $this->context['action'] = 'validation';
  919.         $this->context['params']['idspectacle'] = $idspectacle;
  920.         // idspectacle en mode édition
  921.         if(!empty($this->context['params']['idspectacle'])
  922.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  923.             $idspectacle $this->context['params']['idspectacle'];
  924.         } else {
  925.             // TODO Cette route n'existe pas !!
  926.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=validation');
  927.         }
  928.         // rediriger vers montheatre/connexion
  929.         if (!$this->getUser() instanceof Extranetusers) {
  930.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/validation/idspectacle/'$idspectacle'entete_connexion' => 'ajoutspectacle']);
  931.         }
  932.         // on instancie
  933.         $ajoutspectacle_params = array(
  934.             'idspectacle' => $idspectacle,
  935.         );
  936.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  937.         // envoyer le message à l'administrateur
  938.         $this->getValidation($TheatreMail$editUtils);
  939.         // élèments commun (css, js, barre d'outils)
  940.         $this->getAjoutspectacleCommon();
  941.         // gestion des étapes et titre de page modifié
  942.         $title_page $this->getSteps('Ajouter votre spectacle'8);
  943.         return $this->view('ajoutspectacle/validation.html.twig');
  944.     }
  945.     // }}}
  946.     // {{{
  947.     /**
  948.      *
  949.      * @Route("/ajoutspectacle/supprimer/idspectacle/{idspectacle}", name="ajout_spectacle_supprimer_idspectacle")
  950.      *
  951.      */
  952.     public function action_supprimer($idspectacle nullRequest $requestUtilsEdit $utilsEdit)
  953.     {
  954.         $this->context['action'] = 'supprimer';
  955.         $this->context['params']['idspectacle'] = $idspectacle;
  956.         // idspectacle en mode édition
  957.         if(!empty($this->context['params']['idspectacle'])
  958.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  959.             $idspectacle $this->context['params']['idspectacle'];
  960.         } else {
  961.             // TODO Cette route n'existe pas !!
  962.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=supprimer');
  963.         }
  964.         // rediriger vers montheatre/connexion
  965.         if (!$this->getUser() instanceof Extranetusers) {
  966.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/supprimer/idspectacle/'$idspectacle'entete_connexion' => 'ajoutspectacle']);
  967.         }
  968.         // on instancie
  969.         $ajoutspectacle_params = array(
  970.             'idspectacle' => $idspectacle,
  971.             'possible_do' => array('delete'),
  972.         );
  973.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  974.         $this->getSupprimerForm();
  975.         // validation du formulaire
  976.         if($this->validateSupprimer()) {
  977.             return $this->deleteSpectacle();
  978.         }
  979.         // page simple sans addthis, montheatre
  980.         $this->getAjoutspectacleCommon();
  981.         // gestion des étapes et titre de page modifié
  982.         $this-> title_page 'Supprimer le dossier';
  983.         return $this->view('ajoutspectacle/supprimer.html.twig');
  984.     }
  985.     // }}}
  986.     // {{{
  987.     /**
  988.      *
  989.      * @Route("/ajoutspectacle/sauvegarder/idspectacle/{idspectacle}", name="ajout_spectacle_sauvegarder_idspectacle")
  990.      *
  991.      */
  992.     public function action_sauvegarder($idspectacle nullRequest $requestUtilsEdit $utilsEdit)
  993.     {
  994.         $this->context['action'] = 'sauvegarder';
  995.         $this->context['params']['idspectacle'] = $idspectacle;
  996.         // idspectacle en mode édition
  997.         if(!empty($this->context['params']['idspectacle'])
  998.             && $this->func->my_is_int($this->context['params']['idspectacle'])) {
  999.             $idspectacle $this->context['params']['idspectacle'];
  1000.         } else {
  1001.             // TODO Cette route n'existe pas !!
  1002.             return $this->redirect('/ajoutspectacle/erreur-process?medium_from=supprimer');
  1003.         }
  1004.         // rediriger vers montheatre/connexion
  1005.         if (!$this->getUser() instanceof Extranetusers) {
  1006.             return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/supprimer/idspectacle/'$idspectacle'entete_connexion' => 'ajoutspectacle']);
  1007.         }
  1008.         // on instancie
  1009.         $ajoutspectacle_params = array(
  1010.             'idspectacle' => $idspectacle,
  1011.         );
  1012.         $this->InitAjoutSpectacle($ajoutspectacle_params);
  1013.         // page simple sans addthis, montheatre
  1014.         $this->getAjoutspectacleCommon();
  1015.         $this->context['view']->no_steps true;
  1016.         // gestion des étapes et titre de page modifié
  1017.         $this->title_page 'Sauvegarder le dossier';
  1018.         return $this->view('ajoutspectacle/sauvegarder.html.twig');
  1019.     }
  1020.     // }}}
  1021.     // {{{ getViewForm()
  1022.     /** Formulaire de sélection de l'auteur
  1023.      *
  1024.      */
  1025.     public function getViewForm()
  1026.     {
  1027.         // si le spectacle vient d'être supprimé depuis la page /ajoutspectacle/supprimer
  1028.         if(!empty($_REQUEST['delete'])) {
  1029.             $this->view->delete true;
  1030.         }
  1031.         // choisir l'auteur
  1032.         $this->context['formFactory']->add('auteur_spectacle'RelationsType::class, [
  1033.             'label' => 'Choisissez l\'auteur',
  1034.             'type_object' => 'form',
  1035.             'type_dbdo'=>'persons',
  1036.             'dbdo' => 'spectacles',
  1037.             'relat' => 'simple',
  1038. //            'constraints' => [
  1039. //                new NotBlank([
  1040. //                    'message' => 'Vous devez obligatoirement choisir un auteur référencé'
  1041. //                ])
  1042. //            ]
  1043.         ]); //auteur_spectacle
  1044.         /*$prerequis = array(
  1045.             'le titre de votre spectacle',
  1046.             'le type de spectacle (mise en scène, lecture, mise en espace...)',
  1047.             'le(s) metteur(s) en scène',
  1048.             'la compagnie ou le producteur délégué',
  1049.             'le lieu de création',
  1050.             'la date de création',
  1051.             'la langue du spectacle',
  1052.             'les comédiens',
  1053.             'un visuel pour ce spectacle (affiche, photographie de répétition...)',
  1054.             'une présentation ou la note d\'intention du metteur en scène',
  1055.             'le calendrier de représentation (dates ET lieu)',
  1056.             'le texte sur lequel est basé votre spectacle',
  1057.         );
  1058.         foreach($prerequis as $k=>$p) {
  1059.             $this->form->addElement('checkbox', 'check_'.$k, $p, null, array('id' => 'check_'.$k));
  1060.             $this->form->addRule('check_'.$k, 'Vous devez connaître '.$p, 'required');
  1061.             $this->form->addRule('check_'.$k, 'Vous devez connaître '.$p, 'nonzero');
  1062.         }*/
  1063.         // vider la session relation_select
  1064.         $this->deleteRelationSession();
  1065.         // bouton
  1066.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1067.             'label' => html_entity_decode($this->context['tr']->trans('dispose_information_commencer_procedure')),
  1068.             'attr' => [
  1069.                 'class'=>'boutform boutbig nextstep'
  1070.             ]
  1071.         ]); // validation
  1072.     }
  1073.     // }}}
  1074.     // {{{ validateViewForm()
  1075.     /** Valider le formulaire
  1076.      *
  1077.      */
  1078.     public function validateViewForm() {
  1079.         return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false;
  1080.     }
  1081.     // }}}
  1082.     // {{{ saveView()
  1083.     /** Continuer => créer un texte brouillon
  1084.      *
  1085.      */
  1086.     public function saveView() {
  1087.         return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle);
  1088.     }
  1089.     // }}}
  1090.     // {{{ getTypeForm()
  1091.     /** Formulaire de sélection du type de spectacle (basé sur un texte ou non)
  1092.      *
  1093.      */
  1094.     public function getTypeForm()
  1095.     {
  1096.         /*print_r($this->view->data_spectacle);
  1097.         exit;*/
  1098.         // si le spectacle existe, cocher la case qui va bien
  1099.         if(!empty($this->idspectacle)) {
  1100.             // supprimer
  1101.             unset($_SESSION['relation_select']);
  1102.             if(!empty($this->view->data_spectacle['textfictif'])) {
  1103.                 $this->context['view']->open_affiche_spectacle true// pour checker le bouton radio et ouvrir le bloc
  1104.                 $this->putRelationSession('spectacle_director',$this->view->data_spectacle['alldirectors']);
  1105.             } else { // récupèrer les auteurs et les mettres en session
  1106.                 $this->context['view']->open_affiche_text true// pour checker le bouton radio et ouvrir le bloc
  1107.                 $this->putRelationSession('spectacle_author',$this->view->data_spectacle['allauthors']);
  1108.             }
  1109.         }
  1110.         // envoyer les infos relation_select en session à la vue
  1111.         if($this->getRelationSession()) {
  1112.             $this->context['view']->relation_select '<script type="text/javascript">var relation_select = '.json_encode($this->getRelationSession()).'</script>';
  1113.         }
  1114.         // choisir le type de spectacle
  1115. //        $radios_choice[] = &HTML_QuickForm::createElement('radio', null, null, 'oui', '1', array('class' => 'radio'));
  1116. //        $radios_choice[] = &HTML_QuickForm::createElement('radio', null, null, 'non', '0', array('class' => 'radio'));
  1117. //        $this->form->addGroup($radios_choice, 'type_choice', 'Le spectacle est-il basé sur un texte');
  1118.         $this->context['formFactory']->add('type_choice'ChoiceType::class, [
  1119.             'label'  => 'Le spectacle est-il basé sur un texte',
  1120.             'choices' => [
  1121.                 'Oui' => 1,
  1122.                 'Non' => 2
  1123.             ],
  1124.             'expanded' => true,
  1125.             'multiple' => false,
  1126.             'mapped' => false,
  1127.             'constraints' => [
  1128.                 new NotBlank([
  1129.                     'message' => 'Merci d\'indiquer si votre spectacle est basé sur un texte ou pas'
  1130.                 ]),
  1131.             ]
  1132.         ]);
  1133.         // choisir l'auteur ou le metteur en scène
  1134.         $this->context['formFactory']->add('spectacle_author'RelationsType::class, [
  1135.             'label' => 'Choisissez le(s) auteur(s)',
  1136. //            'type_object' => 'form',
  1137.             'type_dbdo'=>'persons',
  1138.             'dbdo' => 'spectacles',
  1139.             'multiple' => true,
  1140.         ]); //auteur_spectacle
  1141.         //auteur_spectacle
  1142.         $this->context['formFactory']->add('spectacle_director'RelationsType::class, [
  1143.             'label' => 'Choisissez le(s) metteur(s) en scène/concepteur(s)/chorégraphe(s)',
  1144. //            'type_object' => 'form',
  1145.             'type_dbdo'=>'persons',
  1146.             'dbdo' => 'spectacles',
  1147.             'mapped' => false,
  1148.             'multiple' => true,
  1149.         ]);
  1150.         if(!empty($_POST['type_choice'])) {
  1151.             $type_choice = (int)$_POST['type_choice'];
  1152.         } elseif(!empty($_GET['add_relation'])) {
  1153.             if($_GET['add_relation']=='spectacle_author')  {
  1154.                 $type_choice 1;
  1155.             } else {
  1156.                 $type_choice 2;
  1157.             }
  1158.         }
  1159.         // si basé sur un texte, il faut au moins un auteur
  1160.         if(!empty($type_choice) && empty($_POST['redirect_add_relation'])) {
  1161.             // texte : au moins un auteur
  1162.             if($type_choice==1) {
  1163. //                $this->context['formFactory']->addRule('spectacle_author', 'Choisissez les auteurs : vous devez préciser au moins un auteur', 'required');
  1164.                 $this->context['view']->open_affiche_text true// pour checker le bouton radio et ouvrir le bloc
  1165.                 // spectacle : au moins un metteur en scène
  1166.             } else {
  1167. //                $this->context['formFactory']->addRule('spectacle_director', 'Choisissez les metteurs en scène, concepteur(s), chorégraphe(s) : vous devez en préciser au moins un', 'required');
  1168.                 $this->context['view']->open_affiche_spectacle true// pour checker le bouton radio et ouvrir le bloc
  1169.             }
  1170.         }
  1171.         // bouton
  1172.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1173.             'label' => 'Continuer la procédure',
  1174.             'attr' => [
  1175.                 'class'=>'boutform boutbig nextstep'
  1176.             ]
  1177.         ]); // validation
  1178.     }
  1179.     // }}}
  1180.     // {{{ validateTypeForm()
  1181.     /** Valider le formulaire => au moins un choix !
  1182.      *
  1183.      */
  1184.     public function validateTypeForm() {
  1185.         return ($this->context['form']->isSubmitted()) ? true false;
  1186.     }
  1187.     // }}}
  1188.     // {{{ saveType()
  1189.     /** Sauvegarder le choix et passer à l'étape suivante
  1190.      *
  1191.      */
  1192.     public function saveType()
  1193.     {
  1194.         // cleaner
  1195. //        $this->form->applyFilter('__ALL__', 'strip_and_trim');
  1196.         // le choix ?
  1197.         $editMode false;
  1198.         $redirectAddRelation false;
  1199.         if (isset($_REQUEST["do"])) {
  1200.             if ($_REQUEST["do"] == "edit") {
  1201.                 $editMode true;
  1202.             }
  1203.         }
  1204.         if (isset($_POST["redirect_add_relation"])) {
  1205.             if (!empty($_POST["redirect_add_relation"])) {
  1206.                 $redirectAddRelation true;
  1207.             }
  1208.         }
  1209.         if(empty($_POST['type_choice'])){
  1210.             if ($editMode) {
  1211.                 return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle.'?do=edit');
  1212.             } else {
  1213.                 return $this->redirectToRoute("ajout_spectacle_type_idspectacle");
  1214.             }
  1215.         } else if($_POST['type_choice'] == && empty($_POST['spectacle_author']) && !$redirectAddRelation) {
  1216.             if ($editMode) {
  1217.                 return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle.'?do=edit');
  1218.             } else {
  1219.                 return $this->redirectToRoute("ajout_spectacle_type_idspectacle");
  1220.             }
  1221.         }
  1222.         $type_choice = (int)$_POST['type_choice'];
  1223.         // choix 1 => passer à l'étape texte
  1224.         if(!empty($type_choice)) {
  1225.             // au cas où, vider la session des infos spectacle_director
  1226.             $this->deleteRelationSession();
  1227.             if($type_choice==1) {
  1228.                 // mettre les spectacle_author en session
  1229.                 $this->putRelationSession('spectacle_author');
  1230.                 // cas de la redirection vers l'ajout de personne
  1231.                 if(!empty($_POST['redirect_add_relation'])) {
  1232.                     return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
  1233.                 }
  1234.                 // redirection vers la page de texte
  1235.                 return $this->redirect('/'.$this->params['path'].'/texte/idspectacle/'.$this->idspectacle);
  1236.             } elseif($_POST['type_choice']==2) { // choix 2 => passer à l'étape spectacle
  1237.                 // mettre les spectacle_director en session
  1238.                 $this->putRelationSession('spectacle_director');
  1239.                 // cas de la redirection vers l'ajout de personne
  1240.                 if(!empty($_POST['redirect_add_relation'])) {
  1241.                     return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
  1242.                 }
  1243.                 // redirection vers la page de spectacle
  1244.                 return $this->redirect('/'.$this->params['path'].'/spectacle/idspectacle/'.$this->idspectacle);
  1245.             }
  1246.         }
  1247.     }
  1248.     // }}}
  1249.     // {{{ getTexteForm()
  1250.     /** Formulaire de sélection du texte
  1251.      *
  1252.      */
  1253.     public function getTexteForm()
  1254.     {
  1255.         $tr $this->context['tr'];
  1256.         // si on est dans le cas ou on cherche des textes, les auteurs doivent-être en session
  1257.         // uniquement dans le cas d'un auteur unique ? sinon, l'enregistrer en commentaires pour le webmaster
  1258.         // les auteurs sont en session ou dans le spectacle
  1259.         $allauthors $this->getRelationSession('spectacle_author');
  1260.         // pas d'auteur = retour à la page type
  1261.         if(empty($allauthors)) {
  1262.             return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle);
  1263.         }
  1264.         $this->view->no_text true;
  1265.         // si un seul auteur
  1266.         if(count($allauthors)>=1) {
  1267.             foreach($allauthors as $k=>$v) {
  1268.                 $idperson $k;
  1269.                 break;
  1270.             }
  1271.             $persons $this->em->getRepository(Persons::class);
  1272.             $this->view->infos_person $persons->getInfosPerson($idperson);
  1273.             // les textes de cette personne
  1274.             $texts_person $persons->getTextsPerson($idperson,'original',1,null,null,true);
  1275.             if(!empty($texts_person)) {
  1276.                 foreach($texts_person as $k=>$t) {
  1277.                     $texts_list[$t['idtext']] = $t['title'];
  1278.                     $texts_person[$k]['translations'] = $persons->getTextsPerson($idperson,'translation',null,null,$t['idtext'],true);
  1279.                 }
  1280.                 $this->view->texts_person $texts_person;
  1281.                 $this->view->no_text false;
  1282.             }
  1283.         }
  1284.         // si text_persons est vide, on doit avoir les champs obligatoires
  1285.         $constraints = array(
  1286.             'is_publisher' => array(),
  1287.             'title' => array(),
  1288.         );
  1289.         if(empty($texts_person)) {
  1290.             $constraints = array(
  1291.                 'is_publisher' => array(
  1292.                     new NotBlank([
  1293.                         'message' => $this->context['tr']->trans('thnet_form_publish_texte_obligratoire')
  1294.                     ]),
  1295.                 ),
  1296.                 'title' => array(
  1297.                     new NotBlank([
  1298.                         'message' => $this->context['tr']->trans('thnet_form_titre_texte_obligatiore')
  1299.                     ]),
  1300.                 ),
  1301.             );
  1302.             // sinon, vérifier que choice_idtext est bien à 1
  1303.         } else {
  1304.             // on doit avoir soit idtext soit title mais au moins un des deux, et si on a title, on doit vérifier que is_publisher est précisé et déployer le bloc
  1305.             if(empty($_POST['idtext'])) {
  1306.                 $constraints['title'] = [
  1307.                     new NotBlank([
  1308.                         'message' => 'Vous devez choisir un texte ou en préciser un nouveau'
  1309.                     ]),
  1310.                 ];
  1311.                 if(!empty($_POST['title'])) {
  1312.                     $constraints['is_publisher'] = [
  1313.                         new NotBlank([
  1314.                             'message' => 'Le texte est-il édité ? : merci de préciser la réponse'
  1315.                         ]),
  1316.                     ];
  1317.                     $this->context['view']->open_new_text true;
  1318.                 }
  1319.             }
  1320.         }
  1321.         // ajouter les infos pour un  nouveau texte
  1322.         // ajout champ commentaire
  1323.         $label_comments $this->context['tr']->trans('ajoutspectacle_etape1_form_description_texte');
  1324.         $this->context['formFactory']->add('comments'TextareaType::class, [
  1325.             'label_html' => true,
  1326.             'label' => $label_comments,
  1327.             'required' => false,
  1328.             'attr' => [
  1329.                 'rows' => 4,
  1330.                 'cols' => 90
  1331.             ]
  1332.         ]);
  1333.         // traduction ou texte original
  1334. //        $radios_publisher[] = &HTML_QuickForm::createElement('radio', null, null, $tr->trans('oui'), '1', array('class' => 'radio'));
  1335. //        $radios_publisher[] = &HTML_QuickForm::createElement('radio', null, null, $tr->trans('non'), '0', array('class' => 'radio'));
  1336. //        $this->form->addGroup($radios_publisher, 'is_publisher', $tr->trans('thnet_form_publish_texte'));
  1337.         // éditeur
  1338.         $this->context['formFactory']->add('idcontact_publisher'RelationsType::class, [
  1339.             'label' => $this->context['tr']->trans('form_idcontact_publisher'),
  1340.             'type_object' => 'form',
  1341.             'type_dbdo'=>'contacts',
  1342.             'dbdo' => 'spectacles',
  1343.             'relat' => 'simple'
  1344.         ]);
  1345.         // titre du texte
  1346.         $this->context['formFactory']->add('title'TextType::class, [
  1347.             'label' => $tr->trans('thnet_form_titre_texte'),
  1348.             'constraints' => $constraints['title'],
  1349.             'required' => false,
  1350.             'attr' => [
  1351.                 'size' => 100
  1352.             ]
  1353.         ]);
  1354.         // si on a idcontact_publisher en POST ou en GET => pour afficher le javascript
  1355.         if(!empty($_REQUEST['idcontact_publisher'])) {
  1356.             $this->view->idcontact_publisher true;
  1357.         }
  1358.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1359.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  1360.             'attr' => [
  1361.                 'class'=>'boutform boutbig nextstep'
  1362.             ]
  1363.         ]); // validation
  1364.     }
  1365.     // }}}
  1366.     // {{{ validateTexteForm()
  1367.     /** Valider le formulaire
  1368.      *
  1369.      */
  1370.     public function validateTexteForm() { return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false; }
  1371.     // }}}
  1372.     // {{{ saveTexte()
  1373.     /** Sauvegarder le texte et continuer
  1374.      *
  1375.      */
  1376.     public function saveTexte()
  1377.     {
  1378.         $error false;
  1379.         // soit la personne à choisi un texte => dans ce cas, enregistrement classique
  1380.         if(!empty($_POST['idtext']) && $this->func->my_is_int($_POST['idtext'])) {
  1381.             $idtext = (int)$_POST['idtext'];
  1382.             $text_spectacle = array($idtext => $idtext); // le texte du spectacle
  1383.             // soit c'est un nouveau texte => dans ce cas, il faut le créer
  1384.         } elseif($this->context['form']->has('title')) {
  1385.             // récupèrer l'auteur dans la session avec le bon formatage clé => clé / idtext => idtext
  1386.             $text_author $this->getRelationSession('spectacle_author',true);
  1387.             // enregistrer un nouveau text non fictif
  1388.             $idtext $this->saveUpdateText($text_author,0);
  1389.             if($this->func->my_is_int($idtext)) {
  1390.                 // finalement, le texte du spectacle !
  1391.                 $text_spectacle = array($idtext => $idtext);
  1392.             } else {
  1393.                 // erreur renvoyée par la méthode saveUpdateText
  1394.                 $error $idtext;
  1395.             }
  1396.         } else { // fin nouveau text ou existant
  1397.             // erreur = ni idtext, ni titre
  1398.             $this->context['error']['texts_insert'] = $this->getMessage('error','insert');
  1399.             $error true;
  1400.         }
  1401.         // si pas d'erreur sur l'ajout du texte, on ajoute le spectacle
  1402.         if(!$error) {
  1403.             // si le specacle existe
  1404.             if(!empty($this->idspectacle)) {
  1405.                 // si le spectacle était en fictif, on doit déassocier le texte et supprimer le texte fictif
  1406.                 if(!empty($this->view->data_spectacle['textfictif'])) {
  1407.                     $delete_old_text true;
  1408.                 } else {
  1409.                     $delete_old_text false;
  1410.                 }
  1411.                 $this->updateTextSpectacle($text_spectacle,0,$delete_old_text);
  1412.             } else { // si le spectacle n'existe pas => le créer et associer le texte
  1413.                 $this->saveUpdateSpectacle($text_spectacle,array(),0);
  1414.             }
  1415.             // redirection sur la page des informations
  1416.             return $this->redirect('/'.$this->params['path'].'/informations/idspectacle/'.$this->idspectacle);
  1417.         }
  1418.     }
  1419.     // }}}
  1420.     // {{{ getSpectacleForm()
  1421.     /** Formulaire de saisie du titre du spectacle
  1422.      *
  1423.      */
  1424.     public function getSpectacleForm()
  1425.     {
  1426.         $tr $this->context['tr'];
  1427.         // le titre du spectacle
  1428.         $this->context['formFactory']->add('title'TextType::class, [
  1429.             'label' => $tr->trans('ajoutspectacle_titre_spectacle'),
  1430.             'constraints' => [
  1431.                 new NotBlank([
  1432.                     'message' => $tr->trans('ajoutspectacle_etape1_titre_spectacle_rule')
  1433.                 ]),
  1434.             ],
  1435.             'attr' => [
  1436.                 'size' => 100
  1437.             ]
  1438.         ]);
  1439.         // bouton de validation
  1440.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1441.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  1442.             'attr' => [
  1443.                 'class'=>'boutform boutbig nextstep'
  1444.             ]
  1445.         ]); // validation
  1446.         // si il y a déjà un titre
  1447.         if(!empty($this->context['view']->data_spectacle['title'])) {
  1448.             $this->context['formFactory']->setData([
  1449.                 'title' => $this->context['view']->data_spectacle['title']
  1450.             ]);
  1451.         }
  1452.     }
  1453.     // }}}
  1454.     // {{{ validateSpectacleForm()
  1455.     /** Valider le formulaire
  1456.      *
  1457.      */
  1458.     public function validateSpectacleForm() {
  1459.         return ($this->context['form']->isSubmitted() && $this->context['form']->isValid());
  1460.     }
  1461.     // }}}
  1462.     // {{{ saveSpectacle()
  1463.     /** Sauvegarder le texte et continuer
  1464.      *
  1465.      */
  1466.     public function saveSpectacle()
  1467.     {
  1468.         // filtrer
  1469. //        $this->form->applyFilter('__ALL__', 'strip_and_trim');
  1470.         // dans le cas d'une mise à jour => changement de titre spectacle+textfictif + changement de spectacle_director
  1471.         if(!empty($this->idspectacle)) {
  1472.             // mise à jour du titre de ce texte fictif
  1473.             $idtext $this->context['view']->data_spectacle['idtext'];
  1474.         } else {
  1475.             $idtext null;
  1476.         }
  1477.         // récupèrer les metteurs en scène qui deviennent auteur du texte fictif
  1478.         $spectacle_director $this->getRelationSession('spectacle_director',true);
  1479.         // on crée un texte fictif qui porte le nom du spectacle
  1480.         $idtext $this->saveUpdateText($spectacle_director,1,$idtext);
  1481.         $spectacle_director $this->getRelationSession('spectacle_director',true,true);
  1482.         // on crée le spectacle
  1483.         if($this->func->my_is_int($idtext)) {
  1484.             // finalement, le texte du spectacle et les auteurs en metteurs en scène
  1485.             $this->saveUpdateSpectacle(array($idtext => $idtext),$spectacle_director,1);
  1486.         }
  1487.         // rediriger sur les informations de base
  1488.         return $this->redirect('/'.$this->params['path'].'/informations/idspectacle/'.$this->idspectacle);
  1489.     }
  1490.     // }}}
  1491.     // {{{ getInformationsForm()
  1492.     /** Formulaire pour les infos de base
  1493.      *
  1494.      */
  1495.     public function getInformationsForm()
  1496.     {
  1497.         $tr $this->context['tr'];
  1498.         // les elements du formulaire
  1499.         $type_list $this->spectacles->getTypeList(); //idtypespectacle
  1500.         $this->context['formFactory']->add('idtypespectacle'ChoiceType::class, [
  1501.             'label' => $tr->trans('form_typespectacle_question'),
  1502.             'choices' => array_flip($type_list),
  1503.             'constraints' => [
  1504.                 new Type([
  1505.                     'type' => 'integer',
  1506.                     'message' => $tr->trans('thnet_form_typespectacle_obligatoire')
  1507.                 ]),
  1508.                 new Length([
  1509.                     'min' => 1,
  1510.                     'max' => 1,
  1511.                     'minMessage' => $tr->trans('thnet_form_typespectacle_obligatoire'),
  1512.                     'maxMessage' => $tr->trans('thnet_form_typespectacle_obligatoire')
  1513.                 ])
  1514.             ],
  1515.             'attr' => [
  1516.                 'class'=>'select_type'
  1517.             ]
  1518.         ]);
  1519.         //Choisir une langue
  1520.         $language_list $this->spectacles->getLanguageList(); //select langues
  1521.         $language_list[] = $this->context['tr']->trans('form_liste_default_valeur'); //Valeur par defaut => Choisissez dans la liste
  1522.         $this->context['formFactory']->add('language'ChoiceType::class, [
  1523.             'label' => $tr->trans('form_langage_spectacle'),
  1524.             'choices' => array_flip($language_list),
  1525.             'choice_label' => function ($choice$key$value) {
  1526.                 return $value;
  1527.             },
  1528.             'choice_filter' => $language_list ? function ($key) {
  1529.                 // 1 = la key du placeholder
  1530.                 return ($key != 1);
  1531.             } : null,
  1532.             'placeholder' => 'Choisissez dans la liste...',
  1533.             'constraints' => [
  1534.                 new Type([
  1535.                     'type' => 'alnum',
  1536.                     'message' => $tr->trans('thnet_form_langue_spectacle_obligatoire')
  1537.                 ]),
  1538.             ],
  1539.             'attr' => [
  1540.                 'class'=>'select_language'
  1541.             ]
  1542.         ]);
  1543.         // type de spectacles (défaut => contemporain)
  1544.         $spectaclegenres $this->em->getRepository(Spectaclegenres::class)->getSpectaclegenres();
  1545.         $output = [];
  1546.         foreach ($spectaclegenres as $key => $value) {
  1547.             $output[$value["idspectaclegenre"]] = $value["spectaclegenre"];
  1548.         }
  1549.         $this->context['formFactory']->add('idspectaclegenre'ChoiceType::class, [
  1550.             'label' => $tr->trans('form_idgenretext'),
  1551.             'choices' => array_flip($output),
  1552.         ]);
  1553.         // ne pas demander si spectacle non basé sur texte
  1554.         if(empty($this->context['view']->data_spectacle['textfictif'])) {
  1555.             $constraints_params = [];
  1556.             if(empty($_POST['redirect_add_relation'])) {
  1557.                 if(empty($this->context['view']->data_spectacle['textfictif'])) {
  1558.                     $constraints_params = [
  1559.                         new Relations([
  1560.                             'message' => $tr->trans('thnet_form_un_metteur_en_scene_obligratoire')
  1561.                         ])
  1562.                     ];
  1563.                 }
  1564.             }
  1565.             $this->context['formFactory']->add('spectacle_director_noliste'RelationsType::class, [
  1566.                 'label' => $tr->trans('form_multimedia_metteur'),
  1567.                 'type_object' => 'form',
  1568.                 'type' => 'spectacle_director_noliste',
  1569.                 'type_dbdo' => 'persons',
  1570.                 'dbdo' => 'spectacles',
  1571.                 'constraints' => $constraints_params,
  1572.                 'mapped' => false,
  1573.                 'multiple' => true,
  1574.             ]); //spectacle_director
  1575.         }
  1576.         $this->context['formFactory']->add('creation_date'TextType::class, [
  1577.             'label' => 'Date de création',
  1578.             'required' => false,
  1579.             'attr' => [
  1580.                 'size' => '10',
  1581.                 'maxlength' => '10',
  1582.                 'autocomplete' => 'off'
  1583.             ]
  1584.         ]); // date de création
  1585.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1586.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  1587.             'attr' => [
  1588.                 'class'=>'boutform boutbig nextstep'
  1589.             ]
  1590.         ]); // validation
  1591.     }
  1592.     // }}}
  1593.     // {{{ validateInformationsForm()
  1594.     /** Valider le formulaire d'infos
  1595.      *
  1596.      */
  1597.     public function validateInformationsForm() {
  1598.         // vérifier que le spectacle ne soit pas déjà enregistré = mm texte et mm metteur en scène
  1599.         if(empty($_POST['force_same_spectacle'])) {
  1600.             if($this->context['form']->has('spectacle_director')) {
  1601.                 $spectacle_director_values $this->context['form']->get('spectacle_director')->getData();
  1602.             } elseif($this->context['form']->has('spectacle_director_noliste')) {
  1603.                 $spectacle_director_values $this->context['form']->get('spectacle_director_noliste')->getViewData();
  1604.             }
  1605.             if(!empty($spectacle_director_values) && is_array($spectacle_director_values)) {
  1606.                 if($this->spectacleExists($spectacle_director_values,$this->view->data_spectacle['idtext'])) {
  1607.                     // récupèrer les infos sur ces spectacle similaires
  1608.                     $same_spectacles $this->getSameSpectacles($spectacle_director_values,$this->view->data_spectacle['idtext']);
  1609.                     $mesg '<strong>ATTENTION</strong>, ce spectacle (même texte et même metteur en scène) semble déjà enregistré sur notre site. Merci de vérifier les spectacles suivants : ';
  1610.                     $mesg .= '<ul>';
  1611.                     foreach($same_spectacles as $spectacle) {
  1612.                         $mesg .= '<li><a href="/spectacles/'.$spectacle['url_clean'].'/" class="popup">'.$spectacle['title'].'</a></li>';
  1613.                     }
  1614.                     $mesg .= '</ul>';
  1615.                     // renvoyer à la vue
  1616.                     $this->context['view']->reponse['check_spectacle'] = $mesg;
  1617.                     $this->context['view']->reponse['check_spectacle_ok'] = '<a href="/ajoutspectacle/informations/idspectacle/'.$this->idspectacle.'"
  1618.                         style="font-weight:bold;" class="bypass_same">Ajouter quand même mon spectacle</a> OU <a href="/ajoutspectacle/supprimer/idspectacle/'.$this->idspectacle.'"
  1619.                         style="font-weight:bold;">Annuler</a>';
  1620.                     return false;
  1621.                 }
  1622.             }
  1623.         }
  1624.         return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false;
  1625.     }
  1626.     // }}}
  1627.     // {{{ saveInformations()
  1628.     /** Sauvegarder le texte et continuer
  1629.      *
  1630.      */
  1631.     public function saveInformations()
  1632.     {
  1633.         // filtrer
  1634. //        $this->form->applyFilter('__ALL__', 'strip_and_trim');
  1635.         // type de spectacle
  1636.         $idtypespectacle $this->context['form']->get('idtypespectacle')->getData();
  1637.         if(!is_null($idtypespectacle)){
  1638.             $values['idtypespectacle'] = $idtypespectacle;
  1639.         }
  1640.         // genre de spectacle
  1641.         $idspectaclegenre $this->context['form']->get('idspectaclegenre')->getData();
  1642.         if(!is_null($idspectaclegenre)){
  1643.             $values['idspectaclegenre'] = $idspectaclegenre;
  1644.         }
  1645.         // langue
  1646.         $values['language'] = $this->context['form']->get('language')->getData();
  1647.         if ($values['language'] == null) {
  1648.             $values['language'] = "fr";
  1649.         }
  1650.         // date de création
  1651.         $values['creation_date'] = ($creationDate $this->context['form']->get('creation_date')->getData()) !== null
  1652.             ? \DateTime::createFromFormat('d/m/Y'$creationDate)->format('Y-m-d')
  1653.             : '0000-00-00';
  1654.         // metteur en scène
  1655.         if($this->context['form']->has('spectacle_director_noliste')){
  1656.             $spectacle_director_values $this->context['form']->get('spectacle_director_noliste')->getViewData();
  1657.         }
  1658.         // changer les status de validation
  1659.         $this->updateStatutValid($values);
  1660.         // commencer la transaction avec la variable error false
  1661.         $error false;
  1662.         // go !
  1663. //        if ($this->spectacles->supports('transactions')) {
  1664. //            $this->spectacles->beginTransaction();
  1665. //        }
  1666.         // preparer les champs
  1667.         $this->spectacles->setUpdateFields($values);
  1668.         try {
  1669.             $this->spectacles->setData($this->idspectacle);
  1670.         } catch(\Exception $e) {
  1671.             $error true;
  1672.             $this->logger->error($e->getMessage());
  1673.             $this->logger->error($e->getTraceAsString());
  1674.         }
  1675.         // metteurs en scène liés
  1676.         if(!$error && isset($spectacle_director_values)) {
  1677.             if(is_array($spectacle_director_values)) {
  1678.                 try {
  1679.                     $this->spectacles->setRole($this->idspectacle,1,$spectacle_director_values,null); // 1 => metteur en scène
  1680.                     //$this->spectacles->setDistribution($this->idspectacle,$spectacle_director_values,true,true);
  1681.                 } catch (\Exception $e) {
  1682.                     $error true;
  1683.                     $this->logger->error($e->getMessage());
  1684.                     $this->logger->error($e->getTraceAsString());
  1685.                 }
  1686.             }
  1687.         }
  1688.         // commiter, loguer les actions et informer la vue
  1689.         if(!$error) {
  1690.             // commiter la transaction
  1691. //            if ($this->spectacles->in_transaction) {
  1692. //                if(!$this->spectacles->commit()) {
  1693. //                    $this->context['error']['commit'] = $this->getMessage('error','commit');
  1694. //                } else {
  1695.                     // création ou modification ?
  1696.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  1697.                     // cas de la redirection vers l'ajout de personne
  1698.                     if(!empty($_POST['redirect_add_relation'])) {
  1699.                         return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
  1700.                     }
  1701.                     // redirection sur la page pour la distribution
  1702.                     return $this->redirect('/'.$this->params['path'].'/distribution/idspectacle/'.$this->idspectacle);
  1703. //                }
  1704. //            }
  1705.         } else {
  1706.             $this->context['error']['spectacles_update'] = $this->getMessage('error','update');
  1707.         }
  1708.     }
  1709.     // }}}
  1710.     // {{{ getDistributionForm()
  1711.     /** Formulaire pour la dsitribution
  1712.      *
  1713.      */
  1714.     public function getDistributionForm()
  1715.     {
  1716.         $tr $this->context['tr'];
  1717.         // test nouveau système relation
  1718.         if(
  1719.             $this->isGranted('ROLE_ISROOT')
  1720.             || in_array($this->context['session']->getLogin(), ['ComedieFrancaise''lionsdumarais'])
  1721.         ) {
  1722.             $this->context['view']->extended true;
  1723.         } else {
  1724.             $this->context['view']->extended false;
  1725.         }
  1726.         // règles de validation
  1727.         $constraints_spectacle_actor = [];
  1728.         if(empty($_POST['redirect_add_relation'])) {
  1729.             $constraints_spectacle_actor = [
  1730.                 new Relations([
  1731.                     'message' => $tr->trans('form_rule_veuillez_precisier_les_comediens')
  1732.                 ])
  1733.             ];
  1734.         }
  1735.         $this->context['formFactory']->add('spectacle_actor'RelationsType::class, [
  1736.             'label' => $tr->trans('form_artiste_en_scene'),
  1737.             'type_object' => 'form',
  1738.             'type_dbdo' => 'persons',
  1739.             'dbdo' => 'spectacles',
  1740.             'required' => false,
  1741.             'mapped' => false,
  1742.             'constraints' => $constraints_spectacle_actor
  1743.         ]);
  1744.         $this->context['formFactory']->add('spectacle_distrib'RelationsType::class, [
  1745.             'label' => $tr->trans('form_autres_createurs_et_techniciens'),
  1746.             'type_object' => 'form',
  1747.             'type_dbdo'=>'persons',
  1748.             'dbdo' => 'spectacles',
  1749.             'required' => false,
  1750.             'mapped' => false
  1751.         ]);
  1752.         $conf_field = array('id'=>'more_distrib','cols'=>'10''rows'=>'20''class' => 'markitup_small');
  1753.         $this->context['formFactory']->add('more_distrib'TextareaType::class, [
  1754.             'label' => $tr->trans('form_information_complementaire_sur_distribution'),
  1755.             'attr' => $conf_field,
  1756.             'required' => false
  1757.         ]);
  1758.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1759.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  1760.             'attr' => [
  1761.                 'class'=>'boutform boutbig nextstep'
  1762.             ]
  1763.         ]); // validation
  1764.         // voir s'il y a déjà un contenu associé => class_distribution => 72
  1765.         $more_distrib_content $this->em->getRepository(Contents::class)->getAssociateContent($this->idspectacle,'spectacles','class_distribution',array('wiki_convert'=>false));
  1766.         if(!empty($more_distrib_content['text'])) {
  1767.             $this->context['formFactory']->setData(array('more_distrib' => $more_distrib_content['text']));
  1768.         }
  1769.     }
  1770.     // }}}
  1771.     // {{{ validateDistributionForm()
  1772.     /** Valider le formulaire de la distribution
  1773.      *
  1774.      */
  1775.     public function validateDistributionForm() { return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false; }
  1776.     // }}}
  1777.     // {{{ saveDistribution()
  1778.     /** Sauvegarder la distribution
  1779.      *
  1780.      */
  1781.     public function saveDistribution($request null)
  1782.     {
  1783.         // commencer la transaction avec la variable error false
  1784.         $error false;
  1785.         // acteurs liés
  1786.         if(!empty($request->request->get('form')['spectacle_actor'])) {
  1787.             $spectacle_actor_values $request->request->get('form')['spectacle_actor'];
  1788.             if(is_array($spectacle_actor_values)) {
  1789.                 try {
  1790.                     $this->spectacles->setRole($this->idspectacle,5,$spectacle_actor_values,null); // 5 => acteurs
  1791.                 } catch (\Exception $e) {
  1792.                     $error true;
  1793.                     $this->logger->error($e->getMessage());
  1794.                     $this->logger->error($e->getTraceAsString());
  1795.                 }
  1796.             }
  1797.         }
  1798.         // Id de la bio +  code du role
  1799.         if(!$error && !empty($request->request->get('form')['spectacle_distrib'])) {
  1800.             $spectacle_distrib_values $request->request->get('form')['spectacle_distrib'];
  1801.             if(is_array($spectacle_distrib_values)) {
  1802.                 try {
  1803.                     if(empty($spectacle_distrib_values)) {
  1804.                         $spectacle_distrib_values = array();
  1805.                     }
  1806.                     $this->spectacles->setDistribution($this->idspectacle,$spectacle_distrib_values);
  1807.                 } catch (\Exception $e) {
  1808.                     $error true;
  1809.                     $this->logger->error($e->getMessage());
  1810.                     $this->logger->error($e->getTraceAsString());
  1811.                 }
  1812.             }
  1813.         }
  1814.         // ajouter le contenu associé
  1815.         $more_distrib $this->context['form']->get('more_distrib')->getData();
  1816.         if(!$error && !empty($more_distrib)) {
  1817.             // instancie contents
  1818.             $contents $this->em->getRepository(Contents::class);
  1819.             // a insérer/updater
  1820.             $values_content = array(
  1821.                 'title' => NULL,
  1822.                 'idextranetuser' => $this->idextranetuser,
  1823.                 'text' => $more_distrib,
  1824.                 'publish' => 1,
  1825.                 'language' => 'fr',
  1826.             );
  1827.             // voir s'il y a déjà un contenu associé Autres infos sur la distribution => class_distribution => 27
  1828.             $more_distrib_content $contents->getAssociateContent($this->idspectacle,'spectacles','class_distribution',array('wiki_convert'=>false));
  1829.             if(!empty($more_distrib_content['idcontent'])) {
  1830.                 $idcontent $more_distrib_content['idcontent'];
  1831.                 $values_content['dateupdate'] = $this->now();
  1832.                 $log_action 'update';
  1833.                 $return_idcontent true;
  1834.             } else {
  1835.                 $idcontent null;
  1836.                 $values_content['dateinsert'] = $this->now();
  1837.                 $log_action 'create';
  1838.                 $return_idcontent false;
  1839.             }
  1840.             try {
  1841.                 $contents->setUpdateFields($values_content);
  1842.                 $idcontent $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('27' => '27'),true); // 27 => class_distribution
  1843.                 $idcontent $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('27' => '27'),true); // 27 => class_distribution
  1844.             } catch (\Exception $e) {
  1845.                 $error true;
  1846.                 $this->logger->error($e->getMessage());
  1847.                 $this->logger->error($e->getTraceAsString());
  1848.             }
  1849.         }
  1850.         // commiter, loguer les actions et informer la vue
  1851.         if(!$error) {
  1852.             // commiter la transaction
  1853. //            if ($this->spectacles->in_transaction) {
  1854. //                if(!$this->spectacles->commit()) {
  1855. //                    $this->context['error']['commit'] = $this->getMessage('error','commit');
  1856. //                } else {
  1857.                     $this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
  1858.                     // logue l'action pour le contenu associé
  1859.                     if(!empty($idcontent)) {
  1860.                         $this->em->getRepository(UserAction::class)->setAction('contents',$idcontent,$log_action,$this->idextranetuser);
  1861.                     }
  1862.                     // logue l'action pour le spectacle
  1863.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  1864.                     // mettre à jour le status et valid
  1865.                     $values = array();
  1866.                     $this->updateStatutValid($values,true);
  1867.                     // cas de la redirection vers l'ajout de personne
  1868.                     if(!empty($_POST['redirect_add_relation'])) {
  1869.                         return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
  1870.                     }
  1871.                     // redirection sur la page pour la production
  1872.                     return $this->redirect('/'.$this->params['path'].'/production/idspectacle/'.$this->idspectacle);
  1873. //                }
  1874. //            }
  1875.         } else {
  1876.             $this->context['error']['spectacles_update'] = $this->getMessage('error','update');
  1877.         }
  1878.     }
  1879.     // }}}
  1880.     // {{{ getProductionForm()
  1881.     /** Formulaire pour la production
  1882.      *
  1883.      */
  1884.     public function getProductionForm()
  1885.     {
  1886.         $tr $this->context['tr'];
  1887.         $this->context['formFactory']->add('spectacle_prod'RelationsType::class, [
  1888.             'label' => $tr->trans('role_producteur'),
  1889.             'required' => false,
  1890.             'type_object' => 'form',
  1891.             'type_dbdo'=>'contacts',
  1892.             'dbdo' => 'spectacles',
  1893.             'multiple' => true,
  1894.             'mapped' => false
  1895.         ]);
  1896.         $this->context['formFactory']->add('spectacle_coprod'RelationsType::class, [
  1897.             'label' => $tr->trans('role_coproducteur'),
  1898.             'required' => false,
  1899.             'type_object' => 'form',
  1900.             'type_dbdo'=>'contacts',
  1901.             'dbdo' => 'spectacles',
  1902.             'multiple' => true,
  1903.             'mapped' => false
  1904.         ]);
  1905.         $this->context['formFactory']->add('spectacle_prodel'RelationsType::class, [
  1906.             'label' => $tr->trans('role_producteurdel'),
  1907.             'required' => false,
  1908.             'type_object' => 'form',
  1909.             'type_dbdo'=>'contacts',
  1910.             'dbdo' => 'spectacles',
  1911.             'multiple' => true,
  1912.             'mapped' => false
  1913.         ]);
  1914.         $this->context['formFactory']->add('spectacle_struct_diffusion'RelationsType::class, [
  1915.             'label' => $tr->trans('role_structure_diffusion'),
  1916.             'required' => false,
  1917.             'type_object' => 'form',
  1918.             'type_dbdo'=>'contacts',
  1919.             'dbdo' => 'spectacles',
  1920.             'multiple' => true,
  1921.             'mapped' => false
  1922.         ]);
  1923.         $conf_field = array('id'=>'more_distrib','cols'=>'10''rows'=>'20''class' => 'markitup_small');
  1924.         $this->context['formFactory']->add('more_prod'TextareaType::class, [
  1925.             'label' =>$tr->trans('form_information_production_soutiens'),
  1926.             'attr' => $conf_field,
  1927.             'required' => false
  1928.         ]);
  1929.         $this->context['formFactory']->add('validation'SubmitType::class, [
  1930.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  1931.             'attr' => [
  1932.                 'class'=>'boutform boutbig nextstep'
  1933.             ]
  1934.         ]); // validation
  1935.         // voir s'il y a déjà un contenu associé autre soutien et production => class_production => 26
  1936.         $more_prod_content $this->em->getRepository(Contents::class)->getAssociateContent($this->idspectacle,'spectacles','class_production',array('wiki_convert'=>false));
  1937.         if(!empty($more_prod_content['text'])) {
  1938.             $this->context['formFactory']->setData(array('more_prod' => $more_prod_content['text']));
  1939.         }
  1940.     }
  1941.     // }}}
  1942.     // {{{ validateProductionForm()
  1943.     /** Valider le formulaire de la distribution
  1944.      *
  1945.      */
  1946.     public function validateProductionForm() {
  1947.         return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false;
  1948.     }
  1949.     // }}}
  1950.     // {{{ saveProduction()
  1951.     /** Sauvegarder la production
  1952.      *
  1953.      */
  1954.     public function saveProduction()
  1955.     {
  1956.         // filtrer
  1957. //        $this->form->applyFilter('__ALL__', 'strip_and_trim');
  1958.         // commencer la transaction avec la variable error null
  1959.         $error false;
  1960.         // a rentrer dans la table role
  1961.         $roles = array(
  1962.             'spectacle_prod' => array('value' => 17'object' => 'contacts'), // les producteurs
  1963.             'spectacle_coprod' => array('value' => 18'object' => 'contacts'), // les co-producteurs
  1964.             'spectacle_prodel' => array('value' => 19'object' => 'contacts'), // les producteurs délégués
  1965.             'spectacle_struct_diffusion' => array('value' => 77'object' => 'contacts'// les structures de diffusions
  1966.         );
  1967.         foreach($roles as $k=>$v) {
  1968.             $tab_setrole $this->context['form']->get($k)->getViewData();
  1969.             if(is_array($tab_setrole)) {
  1970.                 try {
  1971.                     if(!empty($v['object'])) {
  1972.                         $object_setrole $v['object'];
  1973.                     } else {
  1974.                         $object_setrole null;
  1975.                     }
  1976.                     $this->spectacles->setRole($this->idspectacle,$v['value'],$tab_setrole,$object_setrole);
  1977.                 } catch (\Exception $e) {
  1978.                     $error true;
  1979.                     $this->logger->error($e->getMessage());
  1980.                     $this->logger->error($e->getTraceAsString());
  1981.                 }
  1982.             }
  1983.         }
  1984.         // ajouter le contenu associé
  1985.         $more_prod $this->context['form']->get('more_prod')->getData();
  1986.         if(!$error && !empty($more_prod)) {
  1987.             // instancie contents
  1988.             $contents $this->em->getRepository(Contents::class);
  1989.             // a insérer/updater
  1990.             $values_content = array(
  1991.                 'title' => NULL,
  1992.                 'idextranetuser' => $this->idextranetuser,
  1993.                 'text' => $more_prod,
  1994.                 'publish' => 1,
  1995.                 'language' => 'fr',
  1996.             );
  1997.             // voir s'il y a déjà un contenu associé autre soutien et production => class_production => 26
  1998.             $more_prod_content $contents->getAssociateContent($this->idspectacle,'spectacles','class_production',array('wiki_convert'=>false));
  1999.             if(!empty($more_prod_content['idcontent'])) {
  2000.                 $idcontent $more_prod_content['idcontent'];
  2001.                 $values_content['dateupdate'] = $this->now();
  2002.                 $log_action 'update';
  2003.             } else {
  2004.                 $idcontent null;
  2005.                 $values_content['dateinsert'] = $this->now();
  2006.                 $log_action 'create';
  2007.             }
  2008.             try {
  2009.                 $contents->setUpdateFields($values_content);
  2010.                 $idcontent $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('26' => '26'),true); // 26 => class_production
  2011.             } catch (\Exception $e) {
  2012.                 $error true;
  2013.                 $this->logger->error($e->getMessage());
  2014.                 $this->logger->error($e->getTraceAsString());
  2015.             }
  2016.         }
  2017.         // commiter, loguer les actions et informer la vue
  2018.         if(!$error) {
  2019.             // commiter la transaction
  2020. //            if ($this->spectacles->in_transaction) {
  2021. //
  2022. //                if(!$this->spectacles->commit()) {
  2023. //                    $this->context['error']['commit'] = $this->getMessage('error','commit');
  2024. //                } else {
  2025.                     $this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
  2026.                     // logue l'action pour le contenu associé
  2027.                     if(!empty($idcontent)) {
  2028.                         $this->em->getRepository(UserAction::class)->setAction('contents',$idcontent,$log_action,$this->idextranetuser);
  2029.                     }
  2030.                     // logue l'action pour le spectacle
  2031.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  2032.                     // mettre à jour le status et valid
  2033.                     $values = array();
  2034.                     $this->updateStatutValid($values,true);
  2035.                     // cas de la redirection vers l'ajout de personne
  2036.                     if(!empty($_POST['redirect_add_relation'])) {
  2037.                         return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
  2038.                     }
  2039.                     // redirection sur la page pour les infos de base
  2040.                     return $this->redirect'/'.$this->params['path'].'/affiche/idspectacle/'.$this->idspectacle);
  2041. //                }
  2042. //
  2043. //            }
  2044.         } else {
  2045.             $this->context['error']['spectacles_update'] = $this->getMessage('error','update');
  2046.         }
  2047.     }
  2048.     // }}}
  2049.     // {{{ getAfficheForm()
  2050.     /** Formulaire pour l'affiche du spectacle
  2051.      *
  2052.      */
  2053.     public function getAfficheForm()
  2054.     {
  2055.         $tr $this->context['tr'];
  2056.         // copyright
  2057.         $this->context['formFactory']->add('copyright'TextType::class, [
  2058.             'label' => 'Copyright ou licence',
  2059.             'attr' => ['size' => 50],
  2060.             'required' => false
  2061.         ]);
  2062.         //file
  2063.         $this->objfile $this->context['formFactory']->add('fichier'FileType::class, [
  2064.             'label' => 'Fichier',
  2065.             'attr' => array('id' => 'fileupload')
  2066.         ]);
  2067.         // checker le fichier uploadé
  2068.         $taille_maxi 52428800// 50 Mo maxi
  2069.         $this->context['formFactory']->add('fichier'FileType::class, [
  2070.             'label' => 'Le fichier choisi est trop volumineux (max. 50 Mo)',
  2071.             'constraints' => [
  2072.                 new File([
  2073.                     'maxSize' => $taille_maxi.'k'
  2074.                 ])
  2075.             ]
  2076.         ]);
  2077.         $this->context['formFactory']->add('validation'SubmitType::class, [
  2078.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  2079.             'attr' => array('class'=>'boutform boutbig nextstep')
  2080.         ]); // validation
  2081.         // voir s'il y a déjà un fichier associé Affiche du spectacle /  class_affiche_spec / 2
  2082.         if(!empty($this->view->data_spectacle['illustrations'][0]['vignette'])) {
  2083.             $this->context['view']->remplace_file true;
  2084.             $this->context['view']->proposed_file $this->view->data_spectacle['illustrations'][0];
  2085.             if(!empty($this->view->data_spectacle['illustrations'][0]['copyright'])) {
  2086.                 $this->context['formFactory']->setData(array('copyright' => $this->view->data_spectacle['illustrations'][0]['copyright']));
  2087.             }
  2088.         }
  2089.     }
  2090.     /** Valider l'ajout de l'affiche */
  2091.     public function validateAfficheForm(): bool
  2092.     {
  2093.         return $this->context['form']->isSubmitted() && $this->context['form']->isValid();
  2094.     }
  2095.     /** Sauvegarder l'affiche */
  2096.     public function saveAffiche(EditUtils $editUtils)
  2097.     {
  2098.         $error false;
  2099.         // upload d'un fichier
  2100. //        if($this->objfile->isUploadedFile()) {
  2101.         // controlleur pour l'edition
  2102.         $editUtils->setParams($this->context, [
  2103.             'object'=>'spectacles',
  2104.             'em' => $this->em
  2105.         ]);
  2106.         $fichier $this->context['form']->get('fichier');
  2107.         // check la validité
  2108.         if($extension $editUtils->checkFile($fichier)) {
  2109.             $files $this->em->getRepository(Files::class);
  2110.             $fields_values = array(
  2111.                 'title' => null,
  2112.                 'copyright' => $this->context['form']->get('copyright')->getData(),
  2113.                 'range' => null,
  2114.                 'description' => null,
  2115.                 'language' => 'fr',
  2116.             );
  2117.             if(empty($idfile)) {
  2118.                 $idfile null;
  2119.             }
  2120.             // preparer les champs
  2121.             $files->setUpdateFields($fields_values);
  2122.             try {
  2123.                 $idfile $files->uploadObjectFile($fichier,21,'spectacles',$this->idspectacle,$fields_values,$idfile);
  2124.                 if($idfile !== false) {
  2125.                     $id $idfile//sauvegarder l'id du fichier en cours que l'on vient de créer
  2126.                     // voir s'il y avait déjà un fichier associé Affiche du spectacle /  class_affiche_spec / 2 et le supprimer avant de mettre une nouvelle
  2127.                     if(!empty($this->view->data_spectacle['illustrations'][0]['vignette'])) {
  2128.                         $log_action 'create';
  2129.                         $this->em->getRepository(Files::class)->deleteFile($this->view->data_spectacle['illustrations'][0]['idfile'],'spectacles',$this->idspectacle,true);
  2130.                         unset($this->view->data_spectacle['illustrations']);
  2131.                     } else {
  2132.                         $log_action 'create';
  2133.                     }
  2134.                     // nouvelle illustrations
  2135.                     $this->view->data_spectacle['illustrations'] = $this->em->getRepository(Contents::class)->getIllustrations($this->idspectacle,'spectacles','class_affiche_spec');
  2136.                     // vignettes
  2137.                     if(!empty($this->view->data_spectacle['illustrations']['vignette_object'])) {
  2138.                         $this->view->data_spectacle['vignette_object'] = $this->view->data_spectacle['illustrations']['vignette_object'];
  2139.                     }
  2140.                 } else {
  2141.                     $error true;
  2142.                 }
  2143.             } catch(\Exception $e) {
  2144.                 $error true;
  2145.                 $this->logger->error($e->getMessage());
  2146.                 $this->logger->error($e->getTraceAsString());
  2147.             }
  2148.         } // fin check validité
  2149.         // c'est OK
  2150.         if(!$error) {
  2151.             // logue l'action pour le fichier associé
  2152.             if(!empty($idfile)) {
  2153.                 $this->em->getRepository(UserAction::class)->setAction('files',$idfile,$log_action,$this->idextranetuser);
  2154.             }
  2155.             // mettre à jour le status et valid
  2156.             $values = array();
  2157.             $this->updateStatutValid($values,true);
  2158.             // redirection sur la page de la présentation
  2159.             return $this->redirect('/'.$this->params['path'].'/presentation/idspectacle/'.$this->idspectacle);
  2160.         }
  2161.     }
  2162.     // }}}
  2163.     // {{{ getPresentationForm()
  2164.     /** Formulaire pour la présentation du spectacle
  2165.      *
  2166.      */
  2167.     public function getPresentationForm()
  2168.     {
  2169.         $tr $this->context['tr'];
  2170.         // pour le contenu associé
  2171.         $this->context['formFactory']->add('title'TextType::class, [
  2172.             'label' => $tr->trans('form_titre_ma_presentation'),
  2173.             'attr' => array('size' => 50),
  2174.             'required' => false
  2175.         ]);
  2176.         $this->context['formFactory']->add('text'TextareaType::class, [
  2177.             'label' => $tr->trans('form_text'),
  2178.             'required' => false,
  2179.             'attr' => [
  2180.                 'cols' => 90,
  2181.                 'rows' => 20,
  2182.                 'class' => 'markitup',
  2183.                 'tuieditor' => true
  2184.             ]
  2185.         ]);
  2186.         $this->context['formFactory']->add('language'ChoiceType::class, [
  2187.             'label' => $tr->trans('form_langue'),
  2188.             'choices' => $this->em->getRepository(Contents::class)->getLanguageList(),
  2189.             'attr' => [
  2190.                 'class'=>'select_language'
  2191.             ]
  2192.         ]); // langue
  2193.         $this->context['formFactory']->add('validation'SubmitType::class, [
  2194.             'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
  2195.             'attr' => [
  2196.                 'class'=>'boutform boutbig nextstep'
  2197.             ]
  2198.         ]); // validation
  2199.         $this->context['formFactory']->get('language')->setData('fr');
  2200.         // aide wiki
  2201.         $this->view->aide_wiki utf8_encode($this->wiki->help());
  2202.         if(!empty($this->idspectacle)) {
  2203.             // checker s'il y a une présentation = "en savoir plus"
  2204.             $contents $this->em->getRepository(Contents::class);
  2205.             $presentation $contents->getAssociateContent($this->idspectacle,'spectacles','class_article',array('wiki_convert'=>false));
  2206.             if(!is_null($presentation)){
  2207. //                $this->context['formFactory']->get('title')->setData($presentation['title']);
  2208. //                $this->context['formFactory']->get('text')->setData($presentation['text']);
  2209.                 $this->context['formFactory']->setData($presentation);
  2210.             }
  2211.         }
  2212.     }
  2213.     // }}}
  2214.     // {{{ validatePresentationForm()
  2215.     /** Valider l'ajout de la présentation
  2216.      *
  2217.      */
  2218.     public function validatePresentationForm() {
  2219.         return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false;
  2220.     }
  2221.     // }}}
  2222.     // {{{ savePresentation()
  2223.     /** Sauvegarder la présentation
  2224.      *
  2225.      */
  2226.     public function savePresentation()
  2227.     {
  2228.         // filtrer
  2229. //        $this->form->applyFilter('__ALL__', 'strip_and_trim');
  2230.         // commencer la transaction avec la variable error false
  2231.         $error false;
  2232.         // go !
  2233. //        if ($this->spectacles->supports('transactions')) {
  2234. //            $this->spectacles->beginTransaction();
  2235. //        }
  2236.         // instancie contenu
  2237.         $contents $this->em->getRepository(Contents::class);
  2238.         // ajouter le contenu associé
  2239.         $values_content = array(
  2240.             //'idspectacle' => $this->idspectacle,
  2241.             'title' => 'Présentation',
  2242.             'idextranetuser' => $this->idextranetuser,
  2243.             'text' => $this->context['form']->get('text')->getData(),
  2244.             'language' => $this->context['form']->get('language')->getData(),
  2245.             'markdown' => true,
  2246.             'publish' => 1
  2247.         );
  2248.         $dateNow = new \DateTime('now');
  2249.         // voir s'il y a déjà un contenu associé article => class_article => 6
  2250.         $presentation_content $contents->getAssociateContent($this->idspectacle,'spectacles','class_article',array('wiki_convert'=>false));
  2251.         if(!empty($presentation_content['idcontent'])) {
  2252.             $idcontent $presentation_content['idcontent'];
  2253.             $values_content['dateupdate'] = $dateNow->format('Y-m-d');
  2254.             $log_action 'update';
  2255.         } else {
  2256.             $idcontent null;
  2257.             $values_content['dateinsert'] = $dateNow->format('Y-m-d');
  2258.             $log_action 'create';
  2259.         }
  2260.         try {
  2261.             $contents->setUpdateFields($values_content);
  2262.             $idcontent $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('6' => '6'),true); // 6 => class_article
  2263.         } catch (\Exception $e) {
  2264.             $error true;
  2265.             $this->logger->error($e->getMessage());
  2266.             $this->logger->error($e->getTraceAsString());
  2267.         }
  2268.         // commiter, loguer les actions et informer la vue
  2269.         if(!$error) {
  2270.             // commiter la transaction
  2271. //            if ($this->spectacles->in_transaction) {
  2272. //                if(!$this->spectacles->commit()) {
  2273. //                    $this->context['error']['commit'] = $this->getMessage('error','commit');
  2274. //                } else {
  2275.                 $this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
  2276.                     // logue l'action pour le contenu associé
  2277.                     if(!empty($idcontent)) {
  2278.                         $this->em->getRepository(UserAction::class)->setAction('contents',$idcontent,$log_action,$this->idextranetuser);
  2279.                     }
  2280.                     // mettre à jour le status et valid
  2281.                     $values = array();
  2282.                     $this->updateStatutValid($values,true);
  2283.                     // redirection sur la page pour le calendrier
  2284.                     return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle);
  2285. //                }
  2286. //            }
  2287.         } else {
  2288.             $this->context['error']['spectacles_update'] = $this->getMessage('error','update');
  2289.         }
  2290.     }
  2291.     // }}}
  2292.     // {{{ getScheduleForm()
  2293.     /** le formulaire pour un calendrier
  2294.      *
  2295.      */
  2296.     public function getScheduleForm($idspectacle,$idcontact=null) {
  2297.         // le controller entre ajoutspectacle et ajoutdate
  2298.         $this->view->page_courante $this->context['controller'];
  2299.         // si on est sur ajoutdate
  2300.         if(in_array($this->view->page_courante, ['ajoutdate','spectacles'])) {
  2301.             $page_specifique $this->view->page_courante;
  2302.             $this->view->page_specifique[$page_specifique] = true;
  2303.             if($this->view->page_courante == 'spectacles' && !empty($this->context['view']->url_clean)){
  2304.                 $this->view->page_courante .= '/'.$this->context['view']->url_clean;
  2305.             }
  2306.         }
  2307.         // pour le relation_select du contact
  2308.         $GLOBALS['editset'] = 'schedules';
  2309.         // associer à des contacts
  2310.         $this->context['formFactory']->add('idcontact'RelationsType::class, [
  2311.             'label' => 'Contacts associés',
  2312.             'type_object' => 'form',
  2313.             'type_dbdo'=>'contacts',
  2314.             'dbdo' => 'schedules',
  2315.             'relat'=>'simple',
  2316.             'constraints' => [
  2317.                 new Relations([
  2318.                     'message' => 'Veuillez choisir un lieu de représentation'
  2319.                 ])
  2320.             ]
  2321.         ]);
  2322.         // pour les festoches
  2323.         // if(!empty($this->params['is_admin'])) {
  2324.         $this->context['formFactory']->add('idcontact_festival'RelationsType::class, [
  2325.             'label' => 'Festival associé',
  2326.             'type_object' => 'form',
  2327.             'type_dbdo'=>'contacts',
  2328.             'dbdo' => 'schedules',
  2329.             'relat'=>'simple'
  2330.         ]);
  2331.         // }
  2332.         // url du spectacle dans le lieu et ou url de réservation
  2333.         $this->context['formFactory']->add('url_spectacle'TextType::class, [
  2334.             'label' => 'Page du spectacle (doit commencer par https://)',
  2335.             'required' => false,
  2336.             'constraints' => [
  2337.                 new Url([
  2338.                     'protocols' => ['http''https'],
  2339.                     'message' => 'Page du spectacle : l\'adresse du site semble incorrecte(elle doit commencer par https://)'
  2340.                 ]),
  2341.                 new CheckWebsite([
  2342.                     'message' => 'Page du spectacle : le site Internet que vous avez précisé ne semble pas disponible ! Vérifiez qu\'il s\'agit bien de la bonne adresse'
  2343.                 ])
  2344.             ],
  2345.             'attr' => array('size' => 100),
  2346.         ]);
  2347.         $this->context['formFactory']->add('url_booking'TextType::class, [
  2348.             'label' => 'Lien de réservation (doit commencer par https://)',
  2349.             'required' => false,
  2350.             'constraints' => [
  2351.                 new Url([
  2352.                     'protocols' => ['http''https'],
  2353.                     'message' => 'Lien de réservation : l\'adresse du site semble incorrecte(elle doit commencer par https://)'
  2354.                 ]),
  2355.                 new CheckWebsite([
  2356.                     'message' => 'Lien de réservation : le site Internet que vous avez précisé ne semble pas disponible ! Vérifiez qu\'il s\'agit bien de la bonne adresse'
  2357.                 ])
  2358.             ],
  2359.             'attr' => array('size' => 100)
  2360.         ]);
  2361.         // trouver les droits de l'utilisateurs courant sur des fiche contacts
  2362.         $idcontacts_extranetuser $this->em->getRepository(Extranetusers::class)->getExtranetuserObject($this->idextranetuser,'contact');
  2363.         $this->context['view']->idcontacts_extranetuser '<script type="text/javascript">var idcontacts_extranetuser = '.json_encode($idcontacts_extranetuser).'</script>';
  2364.         $this->context['view']->login $this->getUser()->getLogin();
  2365.         // classes
  2366.         $schedules $this->em->getRepository(Schedules::class);
  2367.         // si on un idcontact = mode édition
  2368.         // en mode édition, on va récupèrer les dates et les mettres dans un joli array pour le multidatepicker
  2369.         if(!empty($idcontact)) {
  2370.             $GLOBALS['from_id'] = serialize(array('idcontact' => $idcontact'idspectacle' => $this->idspectacle));
  2371.             // le contact
  2372.             $this->context['view']->data_contacts $this->em->getRepository(Contacts::class)->getInfosContact($idcontact);
  2373.             // droit de modifier les utls
  2374.             // (#4271 - 04/12/2018) - On supprime la vérification du droit à l'ajout et la suppression des liens de réservation
  2375.             // if(!empty($this->params['is_admin']) || (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser))) {
  2376.             //     $this->context['view']->affiche_autorise_ok = true;
  2377.             // } else {
  2378.             //     $this->context['view']->affiche_autorise_no = true;
  2379.             // }
  2380.             //Tout le monde est autorisé à ajouter ou supprimer des liens de réservations.
  2381.             $this->context['view']->affiche_autorise_ok true;
  2382.             $GLOBALS['id'] = $idcontact;
  2383.             $dates $this->getSpectacleDates($idcontact,$idspectacle);
  2384.             // voir si dans le dates il y a des urls
  2385.             foreach($dates as $k=>$v) {
  2386.                 if(!empty($v['url_booking'])) {
  2387.                     $this->context['formFactory']->get('url_booking')->setData($v['url_booking']);
  2388.                 }
  2389.                 if(!empty($v['url_spectacle'])) {
  2390.                     $this->context['formFactory']->get('url_spectacle')->setData($v['url_spectacle']);
  2391.                 }
  2392.             }
  2393.             foreach($dates as $k=>$i) {
  2394.                 // le tableau des dates
  2395.                 $d $schedules->getFormeDate($i['date'],"%Y-%m-%d",true);
  2396.                 // la première date
  2397.                 if(empty($this->context['view']->first_date)) {
  2398.                     $this->context['view']->first_date $d;
  2399.                 }
  2400.                 $dates_tab[$d] = '"'.$d.'"';
  2401.                 // horaires
  2402.                 $heures_tab[$d][$k] = array(
  2403.                     'locked' => false,
  2404.                     'hour' => $i['hour'],
  2405.                     'note' => $i['note'],
  2406.                     'is_cancelled' => $i['is_cancelled']
  2407.                 );
  2408.                 // les tableaux des dates qui qu'on ne peut pas modifier sauf si on a crée le spectacle OU qu'on est le lieu en question
  2409.                 // par association idextranetuser/idcontact ou qu'on est administrateur
  2410.                 if(isset($this->view->data_spectacle['idextranetuser']) && $this->idextranetuser!=$this->view->data_spectacle['idextranetuser']->getIdextranetuser()
  2411.                     && empty($this->params['is_admin'])
  2412.                     && $i['idextranetuser']!=$this->idextranetuser
  2413.                     && (!empty($idcontacts_extranetuser) && !array_key_exists($idcontact,$idcontacts_extranetuser))
  2414.                 ) {
  2415.                     $dates_locked_tab[$d] = '"'.$d.'"';
  2416.                     $heures_tab[$d][$k]['locked'] = true;
  2417.                 }
  2418.             }
  2419.             if(!empty($dates_tab)){
  2420.                 $this->view->js_dates_get '<script type="text/javascript"> var dates_get = ['.join(','$dates_tab).']; </script>';
  2421.             }
  2422.             if(!empty($heures_tab)){
  2423.                 $this->view->js_heures_get '<script type="text/javascript"> var heures_get = '.json_encode($heures_tab).'; </script>';
  2424.             }
  2425.             // créer un tableau javascript qui contient uniquement les dates
  2426.             // rentrées par un autre utilisateur que celui en cours sauf si l'utilisateur en cours est un admin ou est celui qui a rentré le spectacle
  2427.             if(!empty($dates_locked_tab)) {
  2428.                 $this->view->js_dates_locked '<script type="text/javascript"> var dates_locked = ['.join(','$dates_locked_tab).']; </script>';
  2429.             }
  2430.         } else {
  2431.             $this->context['view']->first_date date('Y-m-d');
  2432.         }
  2433.     }
  2434.     // }}}
  2435.     // {{{ validateScheduleForm()
  2436.     /** Valider le formulaire du calendrier
  2437.      *
  2438.      */
  2439.     public function validateScheduleForm() {
  2440.         return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true false;
  2441.     }
  2442.     // }}}
  2443.     // {{{ saveSchedule()
  2444.     /** enregistrer le calendrier
  2445.      *
  2446.      */
  2447.     public function saveSchedule($idspectacle,$idcontact=null) {
  2448.         // classes
  2449.         $schedules $this->em->getRepository(Schedules::class);
  2450.         // le contact
  2451.         if(empty($idcontact)) {
  2452.             $idcontact $this->context['form']->get('idcontact')->getViewData();
  2453.         }
  2454.         // le festoche
  2455.         // if(!empty($this->params['is_admin'])) {
  2456.         $idcontact_festival $this->context['form']->get('idcontact_festival')->getViewData();
  2457.         // si idcontact_festival est vide, supprimer au cas ou
  2458.         $sql 'UPDATE schedules SET idcontact_festival=NULL WHERE idcontact='.$idcontact.' AND idspectacle='.$this->idspectacle;
  2459.         $schedules->execute($sql);
  2460.         // }
  2461.         // trouver les droits de l'utilisateurs courant sur des fiche contacts
  2462.         $idcontacts_extranetuser $this->em->getRepository(Extranetusers::class)->getExtranetuserObject($this->idextranetuser,'contact');
  2463.         $debug_simple[] = 'Le contact : '.$idcontact;
  2464.         // récupèrer les valeurs
  2465.         $selected_dates $_POST['dates'];
  2466.         $debug_simple[] = count($selected_dates). ' dates du formulaire avant traitement';
  2467.         //$debug_simple[] = print_r($selected_dates, true);
  2468.         // refaire le tableau $_POST['dates'] avec la clé = date et horaire aussi
  2469.         foreach($selected_dates as $k=>$v) {
  2470.             foreach($v as $kb=>$vb) {
  2471.                 //Pour la checkbox des annulations
  2472.                 $is_cancelled 0;
  2473.                 if(isset($vb['is_cancelled'])){
  2474.                     $is_cancelled 1;
  2475.                 }
  2476.                 $vb['is_cancelled'] = $is_cancelled;
  2477.                 $vb['date'] = $k;
  2478.                 $post_dates[$k.'_'.$vb['hour']] = $vb;
  2479.             }
  2480.         }
  2481.         $debug_simple[] = count($post_dates).' dates du formulaire après traitement';
  2482.         //$debug_simple[] = print_r($post_dates, true);
  2483.         // sélectionner les dates du spectacle enregistrées
  2484.         $dates $this->getSpectacleDates($idcontact,$this->idspectacle);
  2485.         $debug_simple[] = count($dates).' dates dans la base avant traitement';
  2486.         //$debug_simple[] = print_r($dates, true);
  2487.         // voir ce que l'utilisateur n'a pas le droit de modifier
  2488.         if(!empty($dates)) {
  2489.             // refaire le tableau $dates avec la clé = date et horaire
  2490.             foreach($dates as $k=>$v) {
  2491.                 $db_dates[$v['date'].'_'.$v['hour']] = $v;
  2492.             }
  2493.             foreach($db_dates as $k_db_date=>$db_date) {
  2494.                 // supprimer du tableau POST, si ce n'est pas une date de l'utilisateur, on est pas admin, on n'a pas rentré le spectacle ou on est pas associé au lieu
  2495.                 if(array_key_exists($k_db_date$post_dates)) {
  2496.                     if($db_date['idextranetuser']!=$this->idextranetuser
  2497.                         && (!isset($this->params['is_admin']) || $this->params['is_admin']!=1)
  2498.                         && $this->idextranetuser!=$this->view->data_spectacle['idextranetuser']
  2499.                         && (!empty($idcontacts_extranetuser) && !array_key_exists($idcontact,$idcontacts_extranetuser))
  2500.                     ) {
  2501.                         // supprimer la date et heure du tableau POST
  2502.                         unset($post_dates[$k_db_date]);
  2503.                     }
  2504.                 }
  2505.                 // créer un tableau avec les dates de la base de données que l'utilisateur à le droit de modifier selon son statut
  2506.                 if(
  2507.                     $db_date['idextranetuser']==$this->idextranetuser
  2508.                     || (!empty($this->params['is_admin']) && $this->params['is_admin']==1)
  2509.                     || (!empty($this->view->data_spectacle['idextranetuser']) && $this->idextranetuser==$this->view->data_spectacle['idextranetuser']->getIdextranetuser())
  2510.                     || (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser))
  2511.                 ) {
  2512.                     $db_dates_user[$k_db_date] = $db_date;
  2513.                 }
  2514.             }
  2515.             // comparer les tableau $post_dates et $db_dates_user pour trouver les dates supprimées par le user
  2516.             if(!empty($db_dates_user)) {
  2517.                 foreach($db_dates_user as $k_db_date_user=>$db_date_user) {
  2518.                     // si n'est pas dans la tableau post, c'est qu'il faut supprimer la date et l'heure
  2519.                     if(empty($post_dates[$k_db_date_user])) {
  2520.                         $delete_dates_user[] = $db_date_user['idschedule'];
  2521.                         // vérifier si les dates dans la base et le commentaire sont identique
  2522.                     } else {
  2523.                         // si identique, supprimer de post_dates car on ne va pas les rentrer de nouveau !
  2524.                         if($db_dates_user[$k_db_date_user]['note']==$post_dates[$k_db_date_user]['note'] && isset($db_date_user[$k_db_date_user]) && $db_date_user[$k_db_date_user]['is_cancelled']==$post_dates[$k_db_date_user]['is_cancelled']) {
  2525.                             unset($post_dates[$k_db_date_user]);
  2526.                         } else {
  2527.                             // il faut supprimer si le commentaire est modifié
  2528.                             $delete_dates_user[] = $db_date_user['idschedule'];
  2529.                         }
  2530.                     }
  2531.                 }
  2532.             }
  2533.             /* supprimer les dates et horaires de l'utilisateur
  2534.             - qui sont différentes au niveau du commentaire
  2535.             - qui n'existe plus
  2536.             */
  2537.             if(!empty($delete_dates_user)) {
  2538.                 $sql 'DELETE FROM schedules WHERE idschedule IN ('.join(','$delete_dates_user).') ';
  2539.                 $schedules->execute($sql);
  2540.                 $debug_simple[] = 'Supprimer les dates de la base qui ont été décochée '.$sql;
  2541.             }
  2542.         }
  2543.         $debug_simple[] = count($post_dates). ' dates à ajouter ';
  2544.         //$debug_simple[] = print_r($post_dates, true);
  2545.         //print_r($debug_simple);
  2546.         //exit;
  2547.         // on boucle sur les dates a ajouter
  2548.         if(!empty($post_dates)) {
  2549.             foreach($post_dates as $k_post_date=>$post_date) {
  2550.                 $values = array(
  2551.                     'idspectacle' => $this->idspectacle,
  2552.                     'idcontact' => $idcontact,
  2553.                     'date' => $post_date['date'],
  2554.                     'hour' => $post_date['hour'],
  2555.                     'note' => $post_date['note'],
  2556.                     'publish' => 1,
  2557.                     'valid' => 0
  2558.                 );
  2559.                 if(isset($post_date['is_cancelled'])){
  2560.                     $values['is_cancelled'] = $post_date['is_cancelled'];
  2561.                 }
  2562.                 // festche
  2563.                 if(!empty($idcontact_festival)) {
  2564.                     $values['idcontact_festival'] = $idcontact_festival;
  2565.                 }
  2566.                 $dateNow = new \DateTime();
  2567.                 $values['idextranetuser'] = $this->idextranetuser;
  2568.                 $values['dateupdate'] = $dateNow->format('Y-m-d h:i:s');
  2569.                 $values['dateinsert'] = $dateNow->format('Y-m-d h:i:s');
  2570.                 // si l'utilisateur est le créateur du dossier ou si on est en mode admin ou on est l'admin du lieu, mettre les dates validée directement
  2571.                 if(($this->view->data_spectacle['idextranetuser'] && $this->idextranetuser==$this->view->data_spectacle['idextranetuser']->getIdextranetuser())
  2572.                     || (!empty($this->params['is_admin']) && $this->params['is_admin']==1)
  2573.                     || (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser))
  2574.                 ) {
  2575.                     $values['valid'] = 1;
  2576.                 }
  2577.                 //setDebug($values);
  2578.                 // on insére dans la table du calendrier
  2579.                 try {
  2580.                     $schedules->setUpdateFields($values);
  2581.                     $schedules->setData();
  2582.                     // update du calendrier
  2583.                     $this->em->getRepository(UserAction::class)->setAction('schedules',$this->idspectacle,'update',$this->idextranetuser);
  2584.                     $new_date true;
  2585.                 } catch(\Exception $e) {
  2586.                     $this->logger->error('Impossible de modifier le spectacle '.$idspectacle);
  2587.                     $this->logger->error($e->getMessage());
  2588.                     $this->logger->error($e->getTraceAsString());
  2589.                 }
  2590.             }
  2591.         }
  2592.         // si on a url_spectacle et/ou url_booking on les réenregistre
  2593.         if($this->context['form']->has('url_spectacle')) {
  2594.             $values_urls['url_spectacle'] = $this->context['form']->get('url_spectacle')->getData();
  2595.         }
  2596.         if($this->context['form']->has('url_booking')) {
  2597.             $values_urls['url_booking'] = $this->context['form']->get('url_booking')->getData();
  2598.         }
  2599.         // on update si on a le droit
  2600.         // (#4271 - 04/12/2018) -
  2601.         // && ( (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser)) || !empty($this->params['is_admin']) )
  2602.         if(!empty($values_urls)) {
  2603.             $schedules->setUpdateFields($values_urls);
  2604.             $schedules->setData(null,false,true,'idcontact='.$idcontact.' AND idspectacle='.$this->idspectacle);
  2605.         }
  2606.         // mettre à jour l'idcontact_festival
  2607.         if(!empty($idcontact_festival)) {
  2608.             $values = array(
  2609.                 'idcontact_festival' => $idcontact_festival,
  2610.             );
  2611.             $schedules->setUpdateFields($values);
  2612.             $schedules->setData(null,false,true,'idcontact='.$idcontact.' AND idspectacle='.$this->idspectacle);
  2613.         }
  2614.         // on retourne sur la page dates ou à la page validation
  2615.         if(!empty($_POST['save_and_valid'])) {
  2616.             // redirigé vers spectacles
  2617.             if(empty($this->params['is_admin'])) {
  2618.                 return $this->redirect('/'.$this->params['path'].'/validation/idspectacle/'.$idspectacle);
  2619.             } else {
  2620.                 return $this->redirect('/'.$this->params['path'].'/edit/id/'.$idspectacle);
  2621.             }
  2622.         } else {
  2623.             return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$idspectacle);
  2624.         }
  2625.     }
  2626.     // }}}
  2627.     // {{{ getSchedule()
  2628.     /** récupèrer le calendrier d'un évènement
  2629.      *
  2630.      */
  2631.     public function getSchedule($idspectacle) {
  2632.         // le controller entre ajoutspectacle et ajoutdate
  2633.         $this->view->page_courante $this->context['controller'];
  2634.         if($this->view->page_courante == 'spectacles' && !empty($this->context['view']->url_clean)){
  2635.             $this->view->page_courante .= '/'.$this->context['view']->url_clean;
  2636.         }
  2637.         $schedules $this->em->getRepository(Schedules::class);
  2638.         $this->view->schedule_detail $schedules->getDateLieuCommon('tous',$idspectacle,null,'ASC');
  2639.         // on parcours les dates et les lieux
  2640.         foreach($this->view->schedule_detail as $k=>$l) {
  2641.             foreach($l['dateshours'] as $kb=>$d) {
  2642.                 if(is_array($d)) {
  2643.                     if(empty($this->params['is_admin']) && (!isset($this->view->data_spectacle['idextranetuser']) || $this->view->data_spectacle['idextranetuser']->getIdextranetuser() != $this->idextranetuser)) {
  2644.                         if(!empty($d['idextranetuser']) && $d['idextranetuser'] != $this->idextranetuser) {
  2645.                             $this->view->schedule_detail[$k]['no_delete'] = true;
  2646.                         }
  2647.                     }
  2648.                     if(isset($d['valid']) && $d['valid']==0) {
  2649.                         $this->view->schedule_detail[$k]['unvalid_dates'] = true;
  2650.                     }
  2651.                 } elseif(!empty($l['dateshours'][$d]['idextranetuser']) && $l['dateshours'][$d]['idextranetuser']!=$this->idextranetuser) {
  2652.                     if(isset($l['dateshours'][$d]['valid']) && $l['dateshours'][$d]['valid']==0) {
  2653.                         $this->view->schedule_detail[$k]['unvalid_dates'] = true;
  2654.                     }
  2655.                     if(empty($this->params['is_admin']) && (!isset($this->view->data_spectacle['idextranetuser']) || $this->view->data_spectacle['idextranetuser']->getIdextranetuser()!=$this->idextranetuser)) {
  2656.                         $this->view->schedule_detail[$k]['no_delete'] = true;
  2657.                     }
  2658.                 }
  2659.             }
  2660.         }
  2661.         //setDebug($this->view->schedule_detail);
  2662.         //print_r($this->view->schedule_detail);
  2663.     }
  2664.     // }}}
  2665.     // {{{ saveRelation()
  2666.     /** enregistrer une relation qui vient d'être crée depuis ajout-simple
  2667.      * person ou contacts
  2668.      *
  2669.      */
  2670.     public function saveRelation($field,$value,$session_storage=false) {
  2671.         $field_infos $this->getRelationField($field);
  2672.         // stockage des relations en session
  2673.         if($session_storage) {
  2674.             //unset($_SESSION['relation_select']);
  2675.             // on doit retrouver le nom de l'item
  2676.             foreach($value as $v) {
  2677.                 $a = array(
  2678.                     'type' => $field,
  2679.                     'view_name' => $this->em->getRepository('TheatreCore\Entity\\'.implode(''array_map(function($m) { return ucfirst($m); }, explode('_'$field_infos['object'])))),
  2680.                     'id' => $v,
  2681.                 );
  2682.                 // ajout role fictif
  2683.                 if($field=='spectacle_director') {
  2684.                     $a['idrole'] = 1;
  2685.                 }
  2686.                 $_SESSION['relation_select'][] = $a;
  2687.             }
  2688.             return true;
  2689.         }
  2690.         if(is_array($value)) {
  2691.             // TODO gérer les cas multiples
  2692.             foreach($value as $v) {
  2693.                 $value $v;
  2694.                 break;
  2695.             }
  2696.         }
  2697.         // relation simple = un champ dans la table spectacle
  2698.         if(!empty($field_infos['relat']) && $field_infos['relat']=='simple') {
  2699.             $this->spectacles->setUpdateFields(array($field => $value));
  2700.             return $this->spectacles->setData($this->idspectacle);
  2701.         }
  2702.         // trouver la clé de la table de destination
  2703.         $obj $this->em->getRepository('TheatreCore\\Entity\\'.ucfirst($field_infos['object']));
  2704.         $values[$obj->__idtable] = $value;
  2705.         // role ?
  2706.         if(!empty($field_infos['idrole'])) {
  2707.             $values['idrole'] = $field_infos['idrole'];
  2708.         }
  2709.         // le spectacle
  2710.         $values['idspectacle'] = $this->idspectacle;
  2711.         // la table
  2712.         $obj_relat $this->em->getRepository('TheatreCore\Entity\\'.implode(''array_map(function($m) { return ucfirst($m); }, explode('_'$field_infos['table']))));
  2713.         // vérifier que la relation n'existe pas déjà
  2714.         if(!$obj_relat->findOneBy($values)) {
  2715.             // le champ, le type
  2716.             $obj_relat->setUpdateFields($values);
  2717.             if($obj_relat->setData()) {
  2718.                 return true;
  2719.             } else {
  2720.                 return false;
  2721.             }
  2722.         } else {
  2723.             return false;
  2724.         }
  2725.     }
  2726.     // }}}
  2727.     // {{{ getValidation()
  2728.     /** validation page
  2729.      *
  2730.      */
  2731.     public function getValidation($TheatreMailEditUtils $editUtils) {
  2732.         // email du montheatre
  2733.         $extranetusers $this->context['session'];
  2734.         $this->view->extranetuser_email $extranetusers->getEmail();
  2735.         // si statut = 0 => on passe sur statut = 1 et on envoi un message
  2736.         if($this->view->data_spectacle['statut']==0) {
  2737.             // vérifier d'abord que les étapes sont précisées
  2738.             $steps $this->getSteps(null,'all');
  2739.             $this->view->steps_incomplet = array();
  2740.             foreach($steps as $s=>$v) {
  2741.                 // si une étape non validé
  2742.                 if($v['statut_step']=='no' && $s!=&& $s!=4) {
  2743.                     $this->view->incomplet true;
  2744.                     $this->view->steps_incomplet[$s] = $v;
  2745.                 }
  2746.             }
  2747.             if(empty($this->view->incomplet)) {
  2748.                 $this->view->validation true;
  2749.                 // envoyer un mail a l'admin
  2750.                 $params_edit = [
  2751.                     'idobject' => $this->idspectacle,
  2752.                     'object' => 'spectacles',
  2753.                     'em' => $this->em
  2754.                 ];
  2755.                 $editUtils->setParams($this->context$params_edit);
  2756.                 // envoyer un mail à l'admin en précisant s'il s'agit d'une modification ou d'une création
  2757.                 $action_object 'insert';
  2758.                 $motif 'Création d\'un spectacle';
  2759.                 // mettre le statut à 1 parceque c'est nouveau
  2760.                 $this->spectacles->setUpdateFields(array('statut' => 1));
  2761.                 $this->spectacles->setData($this->idspectacle);
  2762.                 // prévenir uniquement l'admin dans le cas de la création d'un évènement
  2763.                 // ou de la modification d'un évènement qui était en ligne
  2764.                 $editUtils->sendAlerte($this->idspectacle,$action_object,$motif$TheatreMail);
  2765.             }
  2766.             // si statut = 1 => on passe sur statut = 2 et on envoi un message aussi
  2767.         } elseif($this->view->data_spectacle['statut']==1) {
  2768.             $this->view->attente_validation true;
  2769.             // modifications simples
  2770.             } else {
  2771.             $this->view->moderation true;
  2772.         }
  2773.     }
  2774.     // }}}
  2775.     // {{{ getSupprimerForm()
  2776.     /** Supprimer le spectacle
  2777.      *
  2778.      */
  2779.     public function getSupprimerForm() {
  2780.         // créer un token pour anti-csrf
  2781.         $this->func->tokenCsrf('ajoutspectacle',$this->context);
  2782.         // ne pas afficher les étapes
  2783.         $this->view->no_steps true;
  2784.     }
  2785.     // }}}
  2786.     // {{{ validateSupprimer()
  2787.     /** Valider l'action de suppression
  2788.      *
  2789.      */
  2790.     public function validateSupprimer()
  2791.     {
  2792.         if(!empty($_REQUEST['confirm']) && !empty($_REQUEST['token'])) {
  2793.             if($this->isCsrfTokenValid('delete-spectacle'$_REQUEST['token'])) {
  2794.                 return true;
  2795.             } else {
  2796.                 $this->context['error']['spectacles_tc'] = 'Impossible de supprimer le spectacle par ce biais <span style="color:#ccc;">[invalid token]</span>';
  2797.                 return false;
  2798.             }
  2799.         } else {
  2800.             return false;
  2801.         }
  2802.     }
  2803.     // }}}
  2804.     // {{{ deleteSpectacle()
  2805.     /** Supprimer le spectacle
  2806.      *
  2807.      */
  2808.     public function deleteSpectacle() {
  2809.         // mettre un flag de suppression sur le spectacle => status
  2810.         return $this->redirectToRoute("montheatre_messpectacles");
  2811.     }
  2812.     // }}}
  2813.     // {{{ getInfosSpectacle()
  2814.     /** Détail de l'évènement envoyé sur la vue
  2815.      *
  2816.      */
  2817.     public function getInfosSpectacle($idspectacle,$params=array())
  2818.     {
  2819.         $data_spectacle $this->spectacles->getInfosSpectacle($idspectacle,array('get_illustration' => true'nocleanperson' => true));
  2820.         // c'est la personne qui a publié ?
  2821.         if($this->context['session'] instanceof Extranetusers && $data_spectacle['idextranetuser']==$this->getUser()->getLogin()) {
  2822.             $data_spectacle['is_extranetuser'] = true;
  2823.         }
  2824.         // si pas validé ou pas publié
  2825.         if(empty($this->params['is_admin']) && empty($this->params['no_check_extranetuser'])) {
  2826.             if(($data_spectacle['valid']==&& empty($data_spectacle['is_extranetuser']))
  2827.                 || ($data_spectacle['publish']==&& empty($data_spectacle['is_extranetuser']))) {
  2828.                 return $this->redirect('/'.$this->params['path'].'/non-accessible?publish');
  2829.             }
  2830.         }
  2831.         $this->view->data_spectacle =$this->view->data_spectacle $data_spectacle;
  2832.         //setDebug($this->view->data_spectacle);
  2833.     }
  2834.     // }}}
  2835.     // {{{ setPublish()
  2836.     /** mettre en ligne ou hors ligne le spectacle
  2837.      *
  2838.      */
  2839.     public function setPublish($idspectacle,$publish)
  2840.     {
  2841.         $this->spectacles->setUpdateFields(array('publish' => $publish));
  2842.         try {
  2843.             return $this->spectacles->setData($idspectacle);
  2844.         } catch(\Exception $e) {
  2845.             $this->logger->error('Impossible de changer le status du spectacle'.$idspectacle);
  2846.             $this->logger->error($e->getMessage());
  2847.             $this->logger->error($e->getTraceAsString());
  2848.         }
  2849.     }
  2850.     // }}}
  2851.     // {{{ getSteps()
  2852.     /** etapes
  2853.      *
  2854.      */
  2855.     public function getSteps($title_page,$num_step) {
  2856.         $tr $this->context['tr'];
  2857.         if(isset($num_step)) {
  2858.             $steps = array(
  2859.                 // Texte
  2860.                 => array('nom' => $tr->trans('ajoutspectacle_steps_texte'), 'url' => '/'.$this->params['path'].'/type/idspectacle/'),
  2861.                 // Description
  2862.                 => array('nom' => $tr->trans('ajoutspectacle_steps_description'), 'url' => '/'.$this->params['path'].'/informations/idspectacle/'),
  2863.                 // distribution
  2864.                 => array('nom' => $tr->trans('ajoutspectacle_steps_distribution'), 'url' => '/'.$this->params['path'].'/distribution/idspectacle/'),
  2865.                 // Production
  2866.                 => array('nom' => $tr->trans('ajoutspectacle_steps_production'), 'url' => '/'.$this->params['path'].'/production/idspectacle/'),
  2867.                 //Visuel
  2868.                 => array('nom' => $tr->trans('ajoutspectacle_steps_visuel'), 'url' => '/'.$this->params['path'].'/affiche/idspectacle/'),
  2869.                 //Présentation
  2870.                 => array('nom' => $tr->trans('ajoutspectacle_steps_presentation'), 'url' => '/'.$this->params['path'].'/presentation/idspectacle/'),
  2871.                 //Dates
  2872.                 => array('nom' => $tr->trans('ajoutspectacle_steps_dates'), 'url' => '/'.$this->params['path'].'/dates/idspectacle/'),
  2873.                 //Validation
  2874.                 => array('nom' => $tr->trans('ajoutspectacle_steps_validation')),
  2875.             );
  2876.             // retourner le titre de la page ou un array
  2877.             if($num_step!='all') {
  2878.                 if (in_array($num_steparray_keys($steps))) {
  2879.                     $steps[$num_step]['statut'] = ' step-on';
  2880.                     $this->view->steps $steps;
  2881.                     $this->title_page $steps[$num_step]['nom'].' ('.$tr->trans('ajout_etape').' '.$num_step.') - '.$title_page;
  2882.                 }
  2883.             }
  2884.             // marquer les steps infériereure
  2885.             foreach($steps as $k=>$s) {
  2886.                 if($k==$num_step) {
  2887.                     $steps[$k]['statut'] = ' step-on';
  2888.                 } elseif($k<$num_step) {
  2889.                     $steps[$k]['statut'] = ' step-done';
  2890.                 }
  2891.                 if($this->checkStep($k)) {
  2892.                     $steps[$k]['statut_step'] = 'ok';
  2893.                 } else {
  2894.                     $steps[$k]['statut_step'] = 'no';
  2895.                 }
  2896.             }
  2897.             // retourner le titre de la page ou un array
  2898.             if($num_step!='all') {
  2899.                 $this->view->steps $steps;
  2900.                 return $title_page;
  2901.             } else {
  2902.                 return $steps;
  2903.             }
  2904.         }
  2905.     }
  2906.     // }}}
  2907.     // {{{ getMessage()
  2908.     /** Les messages d'erreur/reponse
  2909.      *
  2910.      */
  2911.     public function getMessage($type_msg,$key)
  2912.     {
  2913.         $msgs = array(
  2914.             'error' => array(
  2915.                 'commit' => 'Une erreur est survenue pendant l\'enregistrement de votre spectacle !',
  2916.                 'insert' => 'Une erreur est survenue pendant la création de votre spectacle !',
  2917.                 'update' => 'Une erreur est survenue pendant la modification de votre spectacle !',
  2918.             ),
  2919.             'reponse' => array(
  2920.                 'ok' => 'Votre spectacle à bien été enregistrée. Merci de votre participation.<br /><br />
  2921.                             <strong>Il sera prochainement validé</strong> par l\'équipe de modération.',
  2922.             ),
  2923.         );
  2924.         return $msgs[$type_msg][$key];
  2925.     }
  2926.     // }}}
  2927.     // {{{ getAjoutspectacleCommon()
  2928.     /** Elements communs aux vues
  2929.      *
  2930.      */
  2931.     public function getAjoutspectacleCommon() {
  2932.         // page simple sans addthis, montheatre
  2933.         $this->context['view']->page_simple true;
  2934.         $this->context['view']->use_addthis false;
  2935.         $this->context['view']->no_montheatre false;
  2936.         // js en plus
  2937.         $this->context['view']->js_more = array('ajax.relation.js');
  2938.     }
  2939.     // }}}
  2940.     // {{{ getDoAction()
  2941.     /** Récupérer l'action possible
  2942.      *
  2943.      */
  2944.     public function getDoAction($possible_do = array('edit','delete','publish'))
  2945.     {
  2946.         // action ?
  2947.         if(!empty($_REQUEST['do']) && in_array($_REQUEST['do'],$possible_do)) {
  2948.             $do $_REQUEST['do'];
  2949.         } else {
  2950.             $do null;
  2951.         }
  2952.         return $do;
  2953.     }
  2954.     // }}}
  2955.     // {{{ checkStep()
  2956.     /** Vérifier les états des étapes
  2957.      *
  2958.      * @param int $num_step Le numéro d'étape
  2959.      * @return bool
  2960.      */
  2961.     public function checkStep($num_step)
  2962.     {
  2963.         switch($num_step) {
  2964.             // il y a un text
  2965.             case 1:
  2966.                 if(!empty($this->view->data_spectacle['idtext'])) {
  2967.                     return true;
  2968.                 }
  2969.                 break;
  2970.             // il y a un metteur en scène, un lieu de créa, une date de créa et une compagnie, un typ, une langue => étape 2
  2971.             case 2:
  2972.                 if(!empty($this->view->data_spectacle['alldirectors'])
  2973.                     && !empty($this->view->data_spectacle['idtypespectacle'])
  2974.                     && !empty($this->view->data_spectacle['language_src'])) {
  2975.                     return true;
  2976.                 }
  2977.                 break;
  2978.             //il y a qqes chose dans spectacle_role actor => étape 3
  2979.             case 3:
  2980.                 return $this->distributionExists();
  2981.                 break;
  2982.             //il y a qqes chose dans spectacle_role coprod, prod, prodel => étape 4 (facultatif)
  2983.             case 4:
  2984.                 return $this->productionExists();
  2985.                 break;
  2986.             //il a une illustration => étape 5
  2987.             case 5:
  2988.                 if(!empty($this->view->data_spectacle['illustrations'][0])) {
  2989.                     return true;
  2990.                 }
  2991.                 break;
  2992.             //il y a un contenu associé presentation => étape 6
  2993.             case 6:
  2994.                 if($this->em->getRepository(Contents::class)->countAssociateContent('spectacles',$this->idspectacle,6)>0) {
  2995.                     return true;
  2996.                 }
  2997.                 break;
  2998.             //il y a au moins une date => étape 7)
  2999.             case 7:
  3000.                 if($this->em->getRepository(Schedules::class)->countDates($this->idspectacle)>0) {
  3001.                     return true;
  3002.                 }
  3003.                 break;
  3004.             //le statut est suppérieur à 0 => étape 8)
  3005.             case 8:
  3006.                 if(!empty($this->view->data_spectacle['statut']) && $this->view->data_spectacle['statut']>0) {
  3007.                     return true;
  3008.                 }
  3009.                 break;
  3010.         }
  3011.     }
  3012.     // }}}
  3013.     // {{{ getPercentSteps()
  3014.     /** Récupèrer le pourcentage de remplissage du dossier
  3015.      *
  3016.      * @param array $steps Les étapes
  3017.      * @return string
  3018.      */
  3019.     public function getPercentSteps($steps)
  3020.     {
  3021.         // nombre d'étapes
  3022.         $nb_steps 8;
  3023.         $i 0;
  3024.         foreach($steps as $k=>$v) {
  3025.             if($v['statut_step']=='ok') {
  3026.                 $i++;
  3027.             }
  3028.         }
  3029.         return round($i*100/$nb_steps);
  3030.     }
  3031.     // }}}
  3032.     // {{{ updateStatutValid()
  3033.     /** Mettre à jour le statut de publication
  3034.      *
  3035.      *
  3036.      * @param array $value Les parmètres à insérer dans la base
  3037.      * @param bool $update_mode Faut-il mettre à jour les champs ou est-ce fait après
  3038.      * @return void
  3039.      */
  3040.     public function updateStatutValid(&$values,$update_mode=false)
  3041.     {
  3042.         // valid à 0 pour la validation => signaler à Philippe
  3043.         $values['valid'] = 0;
  3044.         // si valid était à 1 et statut à 2, on passe sur 3 => modifié
  3045.         if($this->view->data_spectacle['valid']==&& $this->view->data_spectacle['statut']>1) {
  3046.             $values['statut'] = 3;
  3047.             $dateNow = new \DateTime('now');
  3048.             $values['dateupdate'] = $dateNow->format('Y-m-d');
  3049.         }
  3050.         // si demande de mise à jour
  3051.         if($update_mode) {
  3052.             $this->spectacles->setUpdateFields($values);
  3053.             try {
  3054.                 $this->spectacles->setData($this->idspectacle);
  3055.             } catch(\Exception $e) {
  3056.                 $this->logger->error($e->getMessage());
  3057.                 $this->logger->error($e->getTraceAsString());
  3058.             }
  3059.         }
  3060.     }
  3061.     // }}}
  3062.     // {{{ getRelationField()
  3063.     /** récupèrer les infos sur les relations
  3064.      *
  3065.      * @param string $field Un champ précis
  3066.      * @return array
  3067.      */
  3068.     public function getRelationField($field)
  3069.     {
  3070.         $fields = array(
  3071.             'spectacle_author' => array(
  3072.                 'object' => 'persons',
  3073.             ),
  3074.             'spectacle_director' => array(
  3075.                 'idrole' => 1,
  3076.                 'object' => 'persons',
  3077.                 'table' => 'spectacle_person',
  3078.             ),
  3079.             'spectacle_actor' => array(
  3080.                 'idrole' => 5,
  3081.                 'object' => 'persons',
  3082.                 'table' => 'spectacle_person',
  3083.             ),
  3084.             'spectacle_distrib' => array(
  3085.                 'idrole' => 15,
  3086.                 'object' => 'persons',
  3087.                 'table' => 'spectacle_person',
  3088.             ),
  3089.             'spectacle_prod' => array(
  3090.                 'idrole' => 17,
  3091.                 'object' => 'contacts',
  3092.                 'table' => 'spectacle_contact',
  3093.             ),
  3094.             'spectacle_coprod' => array(
  3095.                 'idrole' => 18,
  3096.                 'object' => 'contacts',
  3097.                 'table' => 'spectacle_contact',
  3098.             ),
  3099.             'spectacle_prodel' => array(
  3100.                 'idrole' => 19,
  3101.                 'object' => 'contacts',
  3102.                 'table' => 'spectacle_contact',
  3103.             ),
  3104.             'spectacle_struct_diffusion' => array(
  3105.                 'idrole' => 77,
  3106.                 'object' => 'contacts',
  3107.                 'table' => 'spectacle_contact',
  3108.             )
  3109.         );
  3110.         if(!empty($fields[$field])) {
  3111.             return $fields[$field];
  3112.         }
  3113.         return false;
  3114.     }
  3115.     // }}}
  3116.     // {{{ spectacleExists()
  3117.     /** vérifier que le spectacle n'existe pas déjç (texte + metteur en scène identique)
  3118.      *
  3119.      * @param array $directors Liste des identifiants des metteurs en scène
  3120.      * @param int $idtext Identifiant du texte
  3121.      * @return bool
  3122.      */
  3123.     public function spectacleExists($directors,$idtext)
  3124.     {
  3125.         $sql 'SELECT COUNT(s.`idspectacle`)
  3126.                 FROM spectacles s, spectacle_person sp, text_spectacle ts
  3127.                 WHERE sp.`idspectacle`=s.`idspectacle`
  3128.                 AND ts.`idspectacle`=s.`idspectacle`
  3129.                 AND s.`idspectacle`!='.$this->idspectacle.'
  3130.                 AND ts.`idtext`='.$idtext.'
  3131.                 AND sp.`idrole`=1
  3132.                 AND sp.`idperson` IN ('.join(','$directors).') ';
  3133.         $nb_spectacle $this->spectacles->queryOne($sql);
  3134.         if(!empty($nb_spectacle) && $nb_spectacle>0) {
  3135.             return true;
  3136.         }
  3137.         return false;
  3138.     }
  3139.     // }}}
  3140.     // {{{ getSameSpectacles()
  3141.     /** récupèrer la liste des spectacles en doublons (texte + metteur en scène identique)
  3142.      *
  3143.      * @param array $directors Liste des identifiants des metteurs en scène
  3144.      * @param int $idtext Identifiant du texte
  3145.      * @return array
  3146.      */
  3147.     public function getSameSpectacles($directors,$idtext)
  3148.     {
  3149.         $params_sql = array(
  3150.             'params' => array(
  3151.                 'where' => ' AND s.idspectacle != '.(int)$this->idspectacle.' AND sp.idrole=1 AND sp.idperson IN ('.join(','$directors).') AND ts.`idtext`='.$idtext,
  3152.                 'limit' => 'all',
  3153.             ),
  3154.             'special' => array(
  3155.                 'join' => true,
  3156.             ),
  3157.             'dbg' => array('scenes','Les mises en scène similaires'),
  3158.         );
  3159.         return $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql);
  3160.     }
  3161.     // }}}
  3162.     // {{{ getSpectacleDates()
  3163.     /** les dates du spectacle dans ce lieu
  3164.      *
  3165.      * @param int $idcontact Identifiant du contact
  3166.      * @param int $idspectacle Identifiant du spectacle
  3167.      * @return array
  3168.      */
  3169.     public function getSpectacleDates($idcontact,$idspectacle)
  3170.     {
  3171.         $sql 'SELECT * FROM schedules
  3172.                 WHERE idcontact='.$idcontact.'
  3173.                 AND idspectacle='.$idspectacle;
  3174.         $schedules $this->em->getRepository(Schedules::class);
  3175.         $infos $schedules->queryAll($sql,array(),null,true);
  3176.         if(!empty($infos)) {
  3177.             return $infos;
  3178.         } else {
  3179.             return array();
  3180.         }
  3181.     }
  3182.     // }}}
  3183.     // {{{ distributionExists()
  3184.     /** vérifier s'il y a une distribution
  3185.      *
  3186.      * @return bool
  3187.      */
  3188.     public function distributionExists()
  3189.     {
  3190.         if(isset($this->idspectacle)){
  3191.             $sql 'SELECT COUNT(*) as total
  3192.                     FROM spectacle_person
  3193.                     WHERE idspectacle='.$this->idspectacle.'
  3194.                     AND idrole=5';
  3195.             $nb $this->spectacles->queryOne($sql);
  3196.             if(!empty($nb) && $nb>0) {
  3197.                 return true;
  3198.             }
  3199.         }
  3200.         return false;
  3201.     }
  3202.     // }}}
  3203.     // {{{ productionExists()
  3204.     /** vérifier s'il y a une production
  3205.      *
  3206.      * @return bool
  3207.      */
  3208.     public function productionExists()
  3209.     {
  3210.         if(isset($this->idspectacle)){
  3211.             $sql 'SELECT COUNT(*) as total
  3212.                     FROM spectacle_contact
  3213.                     WHERE idspectacle='.$this->idspectacle.'
  3214.                     AND idrole IN (17,18,19)';
  3215.             $nb $this->spectacles->queryOne($sql);
  3216.             if(!empty($nb) && $nb>0) {
  3217.                 return true;
  3218.             }
  3219.         }
  3220.         return false;
  3221.     }
  3222.     // }}}
  3223.     // {{{ putRelationSession()
  3224.     /** enregistrer des relations dans la session
  3225.      *
  3226.      * @return bool
  3227.      */
  3228.     public function putRelationSession($field,$static_values=array())
  3229.     {
  3230.         if(!empty($static_values)) {
  3231.             foreach($static_values as $v) {
  3232.                 $a = array(
  3233.                     'type' => $field,
  3234.                     'view_name' => $v['view_name'],
  3235.                     'id' => $v['id'],
  3236.                 );
  3237.                 if(!empty($v['idrole'])) {
  3238.                     $a['idrole'] = $v['idrole'];
  3239.                 }
  3240.                 $session_relation_select[] = $a;
  3241.                 $this->session->set('relation_select'$session_relation_select);
  3242.             }
  3243.             return true;
  3244.         } else {
  3245.             if(empty($this->context['form'])){
  3246.                 return false;
  3247.             }
  3248.             $values_input $this->context['form']->get($field)->getViewData();
  3249.             $values $values_input;
  3250.             if(!is_array($values_input)){
  3251.                 $values[] = $values_input;
  3252.             }
  3253.             if(is_array($values)) {
  3254.                 $field_infos $this->getRelationField($field);
  3255.                 $session_relation_select $this->session->get('relation_select');
  3256.                 foreach($values as $v) {
  3257.                     // cas avec idrole et idperson
  3258.                     if(is_array($v) && array_key_exists('idperson'$v)) {
  3259.                         $a = array(
  3260.                             'type' => $field,
  3261.                             'view_name' => $this->em->getRepository('TheatreCore\Entity\\'.$field_infos['object'])->getObjectTitle($v['idperson']),
  3262.                             'id' => $v['idperson'],
  3263.                         );
  3264.                         if(!empty($v['role'])) {
  3265.                             $a['idrole'] = $v['role'];
  3266.                         }
  3267.                         // cas simple
  3268.                     } else {
  3269.                         $a = array(
  3270.                             'type' => $field,
  3271.                             'view_name' => $this->em->getRepository('TheatreCore\Entity\\'.$field_infos['object'])->getObjectTitle($v),
  3272.                             'id' => $v,
  3273.                         );
  3274.                     }
  3275.                     $session_relation_select[] = $a;
  3276.                     $this->session->set('relation_select'$session_relation_select);
  3277.                 }
  3278.             }
  3279.         }
  3280.         return true;
  3281.     }
  3282.     // }}}
  3283.     // {{{ getRelationSession()
  3284.     /** récupèrer des relations dans la session
  3285.      *
  3286.      * @return array
  3287.      */
  3288.     public function getRelationSession($field=null,$simple_array=false$role=false)
  3289.     {
  3290.         $relation_select = array();
  3291.         if(!empty($this->session->get('relation_select'))) {
  3292.             if(!empty($field)) {
  3293.                 foreach($this->session->get('relation_select') as $v) {
  3294.                     if($field==$v['type']) {
  3295.                         $relation_select[$v['id']] = $v;
  3296.                     }
  3297.                 }
  3298.             } else {
  3299.                 return $this->session->get('relation_select');
  3300.             }
  3301.         }
  3302.         if(!empty($relation_select) && $simple_array) {
  3303.             foreach($relation_select as $k=>$v) {
  3304.                 if($v['type']==$field) {
  3305.                     if(!empty($v['idrole']) && $role) {
  3306.                         $relation_select_simple[$v['id']] = array('idperson' => $v['id'], 'role' => $v['idrole']);
  3307.                     } else {
  3308.                         $relation_select_simple[$v['id']] = $v['id'];
  3309.                     }
  3310.                 }
  3311.             }
  3312.             return $relation_select_simple;
  3313.         }
  3314.         return $relation_select;
  3315.     }
  3316.     // }}}
  3317.     // {{{ deleteRelationSession()
  3318.     /** supprimer des relations dans la session
  3319.      *
  3320.      * @return bool
  3321.      */
  3322.     public function deleteRelationSession($field=null)
  3323.     {
  3324.         $values $this->session->get('relation_select');
  3325.         if(!is_null($values)) {
  3326.             if(!empty($field)) {
  3327.                 foreach($values as $k=>$v) {
  3328.                     if($field==$v['field']) {
  3329.                         unset($values[$k]);
  3330.                         $this->session->set('relation_select'$values);
  3331.                     }
  3332.                 }
  3333.             } else {
  3334.                 $this->session->remove('relation_select');
  3335.             }
  3336.         }
  3337.         return true;
  3338.     }
  3339.     // }}}
  3340.     // {{{ saveUpdateText()
  3341.     /** enregistrer un nouveau text
  3342.      *
  3343.      * @return string
  3344.      */
  3345.     public function saveUpdateText($text_author=array(),$textfictif=0,$idtext=null)
  3346.     {
  3347.         $title $this->context['form']->get('title')->getData();
  3348.         // commencer la transaction avec la variable error null
  3349.         $error false;
  3350.         $texts $this->em->getRepository(Texts::class);
  3351.         // si texte existant, on change le titre et les auteurs
  3352.         if(!empty($this->context['view']->data_spectacle['idtext']) && $textfictif==1) {
  3353.         }
  3354.         $datenow = new \DateTime('now');
  3355.         $values_text = array(
  3356.             'title' => $title,
  3357.             'dateinsert' => $datenow->format('Y-m-d'), // date d'insertion
  3358.             'url_clean' => uniqid(), // ajouter une url_clean temporaire
  3359.             'idextranetuser' => $this->idextranetuser// l'utilisateur
  3360.             'textfictif' => $textfictif,
  3361.             'publish' => 0,
  3362.             'valid' => 0,
  3363.         );
  3364.         // commentaires
  3365.         if($this->context['form']->has('comments')) {
  3366.             $values_text['comments'] = $this->context['form']->get('comments')->getData();
  3367.         }
  3368.         // go !
  3369. //        if ($texts->supports('transactions')) {
  3370. //            $texts->beginTransaction();
  3371. //        }
  3372.         // preparer les champs
  3373.         $texts->setUpdateFields($values_text);
  3374.         try {
  3375.             $res $texts->setData($idtexttrue);
  3376.             // nouvel idtext
  3377.             if(empty($idtext)) {
  3378.                 $idtext $res;
  3379.             }
  3380.         } catch(\Exception $e) {
  3381.             $error true;
  3382.             $this->logger->error($e->getMessage());
  3383.             $this->logger->error($e->getTraceAsString());
  3384.         }
  3385.         // ajout de l'auteur
  3386.         if(!$error) {
  3387.             try {
  3388.                 $texts->setRelationSelect('text_author','idperson','idtext',$text_author,$idtext,true,array());
  3389.             } catch (\Exception $e) {
  3390.                 $error true;
  3391.                 $this->logger->error($e->getMessage());
  3392.                 $this->logger->error($e->getTraceAsString());
  3393.             }
  3394.         }
  3395.         // si pas d'erreur, on commit la transaction
  3396.         if(!$error) {
  3397. //            if($texts->in_transaction) {
  3398. //                if(!$texts->commit()) {
  3399. //                    $this->context['error']['commit'] = $this->getMessage('error','commit');
  3400. //                } else {
  3401.                     return $idtext;  // renvoyer l'id du NOUVEAU TEXTE
  3402. //                }
  3403. //            }
  3404.         } else {
  3405.             $this->context['error']['commit'] = $this->getMessage('error','commit');
  3406.         }
  3407.         return $error// ou renvoyer l'erreur
  3408.     }
  3409.     // }}}
  3410.     // {{{ saveUpdateSpectacle()
  3411.     /** enregistrer un nouveau spectacle
  3412.      *
  3413.      * @return string
  3414.      */
  3415.     public function saveUpdateSpectacle($text_spectacle=array(),$spectacle_director=array(), $textfictif=0)
  3416.     {
  3417.         $error false;
  3418.         // go !
  3419. //        if ($this->spectacles->supports('transactions')) {
  3420. //            $this->spectacles->beginTransaction();
  3421. //        }
  3422.         // création ou modification ?
  3423.         if (empty($this->idspectacle)) {
  3424.             $now = new \DateTime('now');
  3425.             $values['dateinsert'] = $now->format('Y-m-d'); // date d'insertion
  3426.             // ajouter une url_clean temporaire
  3427.             $values['url_clean'] = uniqid();
  3428.             // l'utilisateur
  3429.             $values['idextranetuser'] = $this->idextranetuser;
  3430.             // par défaut => mise en scène et français
  3431.             $values['idtypespectacle'] = 4;
  3432.             $values['language'] = 'fr';
  3433.             // mettre publish à 0 la première fois => ensuite, choix de l'utilisateur
  3434.             $values['publish'] = 0;
  3435.             // texte fictif
  3436.             $values['textfictif'] = $textfictif;
  3437.             // preparer les champs
  3438.             $this->spectacles->setUpdateFields($values);
  3439.             try {
  3440.                 $res $this->spectacles->setData($this->idspectacletrue);
  3441.             } catch(\Exception $e) {
  3442.                 $error true;
  3443.                 $this->logger->error($e->getMessage());
  3444.                 $this->logger->error($e->getTraceAsString());
  3445.             }
  3446.         } else {
  3447.             // texte fictif
  3448.             $values['textfictif'] = $textfictif;
  3449.             // preparer les champs
  3450.             $this->spectacles->setUpdateFields($values);
  3451.             try {
  3452.                 $res $this->spectacles->setData($this->idspectacletrue);
  3453.             } catch(\Exception $e) {
  3454.                 $error true;
  3455.                 $this->logger->error($e->getMessage());
  3456.                 $this->logger->error($e->getTraceAsString());
  3457.             }
  3458.             // changer les status de validation
  3459.             $values = array();
  3460.             $this->updateStatutValid($values);
  3461.         }
  3462.         // nouvel enregistrement ?
  3463.         if(empty($this->idspectacle)) { // on a le nouveau spectacle
  3464.             $this->idspectacle $res;
  3465.             $log_action 'create';
  3466.         } else {
  3467.             $log_action 'update';
  3468.         }
  3469.         // textes liés
  3470.         if(!$error) {
  3471.             try {
  3472.                 $this->spectacles->setRelationSelect('text_spectacle','idtext','idspectacle',$text_spectacle,$this->idspectacle);
  3473.             } catch (\Exception $e) {
  3474.                 $error true;
  3475.                 $this->logger->error($e->getMessage());
  3476.                 $this->logger->error($e->getTraceAsString());
  3477.             }
  3478.         }
  3479.         // Id de la bio +  code du role
  3480.         if(!$error) {
  3481.             if(is_array($spectacle_director)) {
  3482.                 try {
  3483.                     $this->spectacles->setDistribution($this->idspectacle,$spectacle_director,true,true);
  3484.                 } catch (\Exception $e) {
  3485.                     $error true;
  3486.                     $this->logger->error($e->getMessage());
  3487.                     $this->logger->error($e->getTraceAsString());
  3488.                 }
  3489.             }
  3490.         }
  3491.         // metteurs en scène liés
  3492.         /*if(!$error) {
  3493.             if(is_array($spectacle_director)) {
  3494.                 try {
  3495.                     $this->spectacles->setRole($this->idspectacle,1,$spectacle_director,null); // 1 => metteur en scène
  3496.                 } catch (\Exception $e) {
  3497.                     $error = true;
  3498.                     $this->logger->error($e->getMessage());
  3499.                     $this->logger->error($e->getTraceAsString());
  3500.                 }
  3501.             }
  3502.         }*/
  3503.         // commiter, loguer les actions et informer la vue
  3504.         if(!$error) {
  3505.             // commiter la transaction
  3506. //            if ($this->spsectacles->in_transaction) {
  3507. //                if(!$this->spectacles->commit()) {
  3508. //                    $this->context['error']['commit'] = $this->getMessage('error','commit');
  3509. //                } else {
  3510.                     $this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
  3511.                     // logue l'action sur la fiche
  3512.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,$log_action,$this->idextranetuser);
  3513.                     // générer l'URL clean
  3514. //                    require_once PATH_LIBS.'DB/Classes/UtilsEdit.php';
  3515.                     $this->utilsEdit->createUrlClean($this->idspectacle,$this->spectacles,'spectacles');
  3516. //
  3517. //                }
  3518. //            }
  3519.         } else { // erreur dans le commit
  3520.             if ($this->idspectacle) {
  3521.                 $this->context['error']['spectacles_insert'] = $this->getMessage('error','insert');
  3522.             } else {
  3523.                 $this->context['error']['spectacles_update'] = $this->getMessage('error','update');
  3524.             }
  3525.         }
  3526.     }
  3527.     // }}}
  3528.     // {{{ updateTextSpectacle()
  3529.     /** mettre à jour le texte d'un spectacle
  3530.      *
  3531.      * @return string
  3532.      */
  3533.     public function updateTextSpectacle($text_spectacle=array(),$textfictif=0,$delete_old_text=false)
  3534.     {
  3535.         $error false;
  3536.         // go !
  3537.         // if ($this->spectacles->supports('transactions')) {
  3538.         //     $this->spectacles->beginTransaction();
  3539.         // }
  3540.         // texte fictif
  3541.         $values['textfictif'] = $textfictif;
  3542.         // preparer les champs
  3543.         $this->spectacles->setUpdateFields($values);
  3544.         try {
  3545.             $res $this->spectacles->setData($this->idspectacletrue);
  3546.         } catch(\Exception $e) {
  3547.             $error true;
  3548.             $this->logger->error($e->getMessage());
  3549.             $this->logger->error($e->getTraceAsString());
  3550.         }
  3551.         // textes liés
  3552.         if(!$error) {
  3553.             try {
  3554.                 $this->spectacles->setRelationSelect('text_spectacle','idtext','idspectacle',$text_spectacle,$this->idspectacle);
  3555.             } catch (\Exception $e) {
  3556.                 $error true;
  3557.                 $this->logger->error($e->getMessage());
  3558.                 $this->logger->error($e->getTraceAsString());
  3559.             }
  3560.         }
  3561.         // supprimer l'ancien text
  3562.         if(!empty($this->view->data_spectacle['idtext']) && $delete_old_text) {
  3563.             $this->em->getRepository(Texts::class)->deleteData($this->view->data_spectacle['idtext']);
  3564.         }
  3565.         // commiter, loguer les actions et informer la vue
  3566.         if(!$error) {
  3567.             // commiter la transaction
  3568.             // if ($this->spectacles->in_transaction) {
  3569.             //     if(!$this->spectacles->commit()) {
  3570.             //         $this->context['error']['commit'] = $this->getMessage('error','commit');
  3571.             //     } else {
  3572.                     $this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
  3573.                     // logue l'action sur la fiche
  3574.                     $this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
  3575.             //     }
  3576.             // }
  3577.         } else { // erreur dans le commit
  3578.             $this->context['error']['spectacles_update'] = $this->getMessage('error','update');
  3579.         }
  3580.     }
  3581.     // }}}
  3582.     // {{{ aside_ajoutspectacle()
  3583.     /** aside droite
  3584.      *
  3585.      * @return string
  3586.      */
  3587.     public function getAside_ajoutspectacle()
  3588.     {
  3589.         $menu_contrib = array(
  3590.             array(
  3591.                 'name' => $this->context['tr']->trans('montheatre_menu_mes_spectacles'),
  3592.                 'key_url' => '/montheatre/spectacles'
  3593.             ),
  3594.             array(
  3595.                 'name' => $this->context['tr']->trans('montheatre_menu_mes_videos'),
  3596.                 'key_url' => '/montheatre/videos'
  3597.             ),
  3598.         );
  3599.         $this->asides->load(['url_lists_alone' => array(
  3600.             'exec' => ['color' => 'context'],
  3601.             'php' => [
  3602.                 'method' => 'asidesUrlLists',
  3603.                 'urls' => $menu_contrib,
  3604.                 'url' => 'key_url'
  3605.             ],
  3606.             'title' => $this->context['tr']->trans('montheatre_menu_mes_contributions')
  3607.         )]);
  3608.         $this->asides->load(['common_lettre_info' => array(
  3609.             'exec' => ['color' => 'context']
  3610.         )]);
  3611. //        if($this->context['action'] == 'presentation' ) {
  3612. //            $this->asides->load('common_aide_formulaire');
  3613. //        }
  3614.     }
  3615.     // }}}
  3616. }