<?php
namespace App\Controller;
use App\ClassTheatre\asides;
use App\ClassTheatre\TheatreController;
use App\Service\EditUtils;
use App\Service\Functions;
use App\Service\TheatreMail\TheatreMail;
use App\Service\UtilsEdit;
use App\Service\wiki2xhtml\wiki2xhtml;
use App\Validator\CheckWebsite;
use App\Validator\Relations;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Type;
use Symfony\Component\Validator\Constraints\Url;
use TheatreCore\Entity\Contacts;
use TheatreCore\Entity\Contents;
use TheatreCore\Entity\Extranetusers;
use TheatreCore\Entity\Files;
use TheatreCore\Entity\Persons;
use TheatreCore\Entity\Schedules;
use TheatreCore\Entity\Spectaclegenres;
use TheatreCore\Entity\Spectacles;
use TheatreCore\Entity\Texts;
use TheatreCore\Entity\UserAction;
use TheatreCore\Form\Type\RelationsType;
class AjoutSpectacleController extends TheatreController
{
// id de la table
protected $idspectacle = null;
// nom de l'objet
protected $spectacles;
// formulaire
protected $form;
// paramètres
protected $params;
// wiki
protected $wiki;
// le user
protected $idextranetuser = null;
// infos sur le spectacle
public $data_object = null;
// a faire
public $do = false;
// fichier
protected $objfile;
// asides
protected $asides = "";
private LoggerInterface $logger;
private SessionInterface $session;
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
TokenStorageInterface $tokenStorage,
Functions $func,
LoggerInterface $logger,
SessionInterface $session
)
{
// surbrillance du menu principal (thnet)
$GLOBALS['rub_courante'] = 'spectacles';
parent::__construct($translator, $tokenStorage);
$GLOBALS['editset'] = 'spectacles';
$this->context['controller'] = 'ajoutspectacle';
$this->em = $em;
$this->session = $session;
$this->func = $func;
$this->asides = new asides();
$this->logger = $logger;
$this->spectacles = $em->getRepository(Spectacles::class);
}
public function InitAjoutSpectacle($params)
{
// chemin du controller
if(empty($params['path'])) {
$params['path'] = 'ajoutspectacle';
}
// Si nous sommes dans le « controller » ajoutdate
if(isset($this->context['origineController'])) {
$params['path'] = $this->view->page_courante = $this->context['origineController'];
}
if (isset($params['idspectacle']) && (empty($params['idspectacle']) || !is_numeric($params['idspectacle']))) {
return $this->redirect('/'.$this->params['path'].'/non-accessible?unknown');
}
// action possible
if(!empty($params['possible_do'])) {
$params['do'] = $this->getDoAction($params['possible_do']);
}
// les paramètres en plus
$this->params = $params;
// on vient de qqes part en particulier ?
if(!empty($_GET['urifrom'])) {
$urifrom = filter_var($_GET['urifrom'], FILTER_SANITIZE_URL);
} else {
$urifrom = '/'.$this->params['path'].'/';
}
// id de l'objet
if(!empty($params['idspectacle'])) {
// identifiant de la spectacles
$GLOBALS['id'] = $this->idspectacle = $this->view->idspectacle = intval($params['idspectacle']);
// on doit dans tous les cas, vérifier que l'extranetuser à les droits sur cet évènement
// récup des infos
$this->getInfosSpectacle($this->idspectacle,array('no_wiki_convert' => true));
// pas de spectacles qui correspond => redirection
if(empty($this->view->data_spectacle)) {
return $this->redirect('/'.$this->params['path'].'/non-accessible?unknown');
}
// spectacle en attente de suppression => redirection
if($this->view->data_spectacle['statut']==4) {
return $this->redirect('/'.$this->params['path'].'/non-accessible?deleted');
}
// on vérifie qu'on a bien les droits sur l'article
if(empty($params['is_admin']) && empty($params['no_check_extranetuser'])) {
if(!empty($this->view->data_new['idextranetuser'])
&& ($this->getUser() instanceof Extranetusers && $this->view->data_new['idextranetuser']!=$this->getUser()->getIdextranetuser())) {
return $this->redirect('/'.$this->params['path'].'/non-accessible?right');
}
}
// si on est en mode édition
if(!empty($params['do'])) {
// vérifier le token
if(($params['do']=='delete' || $params['do']=='publish') && !$this->func->checkCsrfToken('ajoutspectacle')) {
return $this->redirect($urifrom.'?tc=err');
}
// vérifier le token pour le calendrier
if($params['do']=='delete_schedule' && !$this->func->checkCsrfToken($params['path'])) {
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?tc=err');
}
if($params['do']=='active_representation&' && !$this->func->checkCsrfToken($params['path'])) {
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?tc=err');
}
if($params['do']=='disable_representation&' && !$this->func->checkCsrfToken($params['path'])) {
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?tc=err');
}
$this->view->do = $params['do'];
// mettre en ligne/hors ligne et retour à mon théâtre
if($this->view->do=='publish' && isset($_GET['publish'])
&& ($_GET['publish']==1 || $_GET['publish']==0)) {
$this->setPublish($this->idspectacle,(int)$_GET['publish']);
return $this->redirectToRoute('montheatre_spectacles', ['publish' => true]);
}
// supprimer en mettant le statut 4
if($this->view->do=='delete') {
$this->spectacles->setUpdateFields(array(
'statut' => 4,
'publish' => 0
));
$this->spectacles->setData($this->idspectacle);
return $this->redirect($urifrom.'?delete=true');
}
//les représentations sont annulées
if($this->view->do=='disable_representation' && $this->idspectacle>1){
if(!empty($params['idcontact'])) {
$this->em->getRepository(Schedules::class)->cancelledDates($this->idspectacle,$params['idcontact']);
}
// enregistrer les modifications
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// redirection
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?disable_representation=true');
}
//les représentations ont lieux
if($this->view->do=='active_representation' && $this->idspectacle>1){
if(!empty($params['idcontact'])) {
$this->em->getRepository(Schedules::class)->cancelledDates($this->idspectacle,$params['idcontact'], false);
}
// enregistrer les modifications
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// redirection
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?active_representation=true');
}
// supprimer un calendrier et retour à la spectacles
if($this->view->do=='delete_schedule' && $this->idspectacle>1) {
// un calendrier ?
if(!empty($params['idcontact'])) {
$this->em->getRepository(Schedules::class)->deleteSchedule($this->idspectacle,$params['idcontact']);
} else { // tout le calendrier
$this->em->getRepository(Schedules::class)->deleteSchedule($this->idspectacle);
}
// enregistrer les modifications
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// redirection
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?delete_schedule=true');
}
// valider les dates dans le backoffice et retour
if($this->view->do=='validate_schedule' && $this->idspectacle>1 && !empty($params['is_admin'])) {
// un calendrier ?
if(!empty($params['idcontact'])) {
$this->em->getRepository(Schedules::class)->validateSchedule($this->idspectacle,$params['idcontact']);
} else { // tout le calendrier
$this->em->getRepository(Schedules::class)->validateSchedule($this->idspectacle);
}
// enregistrer les modifications
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// redirection
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle.'?validate_schedule=true');
}
}
} // fin idspectacle existe
// on ajoute une relation au retour de ajout-simple (par exemple : une personne ou un contact)
if(!empty($_GET['add_relation']) && $this->getRelationField($_GET['add_relation'])) {
// stockage des relations en session avec le paramètre true (exemple : metteur en scène)
if($_GET['add_relation']=='spectacle_author' || $_GET['add_relation']=='spectacle_director') {
$this->saveRelation($_GET['add_relation'],$_GET[$_GET['add_relation']],true);
// stockage des relations en dur dans la base
} elseif($_GET['add_relation']!='idcontact') {
$this->saveRelation($_GET['add_relation'],$_GET[$_GET['add_relation']]);
// redirection
$url_src = parse_url($_SERVER['REQUEST_URI']);
return $this->redirect($url_src['path']);
}
}
$this->context['view']->no_texte_version = true;
// classe pour le wiki
$this->wiki = new wiki2xhtml();
$this->idextranetuser = $this->getUser()->getIdextranetuser();
// barre addthis
$this->view->use_addthis = true;
if(empty($params['ignore'])){
$this->buildMenu();
}
}
// }}}
/**
*
* @Route("/ajoutspectacle/", name="ajout_spectacle_index")
* @Route("/ajoutspectacle/view/idspectacle/{p_idspectacle}", name="ajout_spectacle_index_idspectacle")
*
*/
public function action_view($p_idspectacle = null, Request $request)
{
$this->context['action'] = 'view';
$params['idspectacle'] = $this->context['params']['idspectacle'] = $p_idspectacle;
if(!empty($params['idspectacle'])
&& $this->func->my_is_int($params['idspectacle'])) {
$idspectacle = (int)$params['idspectacle'];
} else {
$idspectacle = null;
}
// rediriger vers montheatre/connexion
if(!$this->getUser() instanceof Extranetusers){
return $this->redirectToRoute('app_login', [
'urifrom' => $idspectacle ? '/ajoutspectacle/view/idspectacle/'.$idspectacle : '/ajoutspectacle/',
'entete_connexion' => 'ajoutspectacle'
]);
}
// on instancie
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('edit','publish','delete')
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
$this->getViewForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateViewForm()) {
return $this->saveView();
}
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$title_page = 'Ajouter votre spectacle - A lire';
return $this->view('ajoutspectacle/view.html.twig', [
'form' => $this->context['form']->createView()
]);
}
/**
*
* @Route("/ajoutspectacle/type/idspectacle/{idspectacle}", name="ajout_spectacle_type_idspectacle")
*
*/
public function action_type($idspectacle = null, Request $request)
{
$this->context['action'] = 'type';
$this->context['params']['idspectacle'] = $idspectacle;
if (!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = (int)$this->context['params']['idspectacle'];
} else {
$idspectacle = null;
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => 'ajoutspectacle/type/', 'entete_connexion' => 'ajoutspectacle']);
}
// on instancie
$ajoutspectacle_params = array(
'possible_do' => array('edit'),
);
if(!empty($idspectacle)) {
$ajoutspectacle_params['idspectacle'] = $idspectacle;
}
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createNamedBuilder('', FormType::class, null, [
'validation_groups' => false,
'attr' => [
'id' => 'masterform'
]
]);
$this->getTypeForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateTypeForm()) {
return $this->saveType();
}
// page simple sans addthis, montheatre
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 1);
return $this->view('ajoutspectacle/type.html.twig', [
'form' => $this->context['form']->createView()
]);
}
/**
*
* @Route("/ajoutspectacle/spectacle/idspectacle/{idspectacle}", name="ajout_spectacle_spectacle_idspectacle")
*
*/
public function action_spectacle($idspectacle = null, Request $request, UtilsEdit $utilsEdit)
{
$this->context['action'] = 'spectacle';
$this->context['params']['idspectacle'] = $idspectacle;
$this->utilsEdit = $utilsEdit;
if (!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = (int)$this->context['params']['idspectacle'];
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/spectacle/', 'entete_connexion' => 'ajoutspectacle']);
}
$ajoutspectacle_params = array(
'possible_do' => array('edit'),
'idspectacle' => $idspectacle
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
$this->getSpectacleForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateSpectacleForm()) {
return $this->saveSpectacle();
}
// page simple sans addthis, montheatre
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 1);
return $this->view('ajoutspectacle/spectacle.html.twig', [
'form' => $this->context['form']->createView()
]);
}
/**
*
* @Route("/ajoutspectacle/informations/idspectacle/{idspectacle}", name="ajout_spectacle_informations_idspectacle")
*
*/
public function action_informations($idspectacle = null, Request $request)
{
$this->redirect('/erreur/introuvable');
$this->context['action'] = 'informations';
$this->context['params']['idspectacle'] = $idspectacle;
if (!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = (int)$this->context['params']['idspectacle'];
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/information/', 'entete_connexion' => 'ajoutspectacle']);
}
// on instancie
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('edit'),
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, $this->view->data_spectacle, [
'attr' => [
'id' => 'masterform'
]
]);
$this->getInformationsForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateInformationsForm()) {
return $this->saveInformations();
}
// On initialize les par défaults ou les données existantes
else {
// si idspectacle est vide, on mets mise en scène en défaut et langue en FR
if(empty($this->idspectacle)) {
$this->context['form']->setData(array('idtypespectacle' => 4, 'language' => 'fr'));
} else if(!$this->context['form']->isSubmitted()) {
if(!empty($this->view->data_spectacle['idspectaclegenre'])) {
$this->context['form']->setData(array('idspectaclegenre' => $this->view->data_spectacle['idspectaclegenre']));
}
if(!empty($this->view->data_spectacle['language_src'])) {
$this->context['form']->get('language')->setData($this->view->data_spectacle['language_src']);
}
if(!empty($this->view->data_spectacle['idtypespectacle'])) {
$this->context['form']->setData(array('idtypespectacle' => $this->view->data_spectacle['idtypespectacle']));
}
$defaultDate = new \Datetime("0000-00-00");
if(!empty($this->view->data_spectacle['creation_date']) && $this->view->data_spectacle['creation_date'] == $defaultDate->format("d/m/Y")) {
$this->context['form']->get('creation_date')->setData(null);
}
}
}
// page simple sans addthis, montheatre
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 2);
return $this->view('ajoutspectacle/informations.html.twig', [
'form' => $this->context['form']->createView()
]);
}
/**
*
* @Route("/ajoutspectacle/texte/idperson/{idperson}/idspectacle/{idspectacle}", name="ajout_spectacle_texte_idperson_idspectacle")
* @Route("/ajoutspectacle/texte/idspectacle/{idspectacle}", name="ajout_spectacle_texte_idspectacle")
*
*/
public function action_texte($idspectacle = null, $idperson = null, Request $request, UtilsEdit $utilsEdit)
{
$this->context['action'] = 'textes';
$this->context['params']['idspectacle'] = $idspectacle;
$this->context['params']['idperson'] = $idperson;
$this->utilsEdit = $utilsEdit;
if (!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/texte/', 'entete_connexion' => 'ajoutspectacle']);
}
// on instancie
$ajoutspectacle_params = array(
'possible_do' => array('edit'),
);
if(!empty($idspectacle)) {
$ajoutspectacle_params['idspectacle'] = $idspectacle;
}
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
$this->getTexteForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateTexteForm()) {
return $this->saveTexte();
}
// page simple sans addthis, montheatre
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$this->context['view']->title_page = $this->getSteps('Ajouter votre spectacle', 1);
return $this->view('ajoutspectacle/texte.html.twig', [
'form' => $this->context['form']->createView()
]);
}
public function buildMenu(){
$tr = $this->context['tr'];
$menu_array = array(
'dossier' => array(
'title' => $tr->trans('ajout_onglet_dossier')
),
'supprimer' => array(
'title' => $tr->trans('ajout_onglet_suppresion_dossier')
),
'sauvegarder' => array(
'title' => $tr->trans('ajout_onglet_sauvegarder_dossier')
)
);
if (empty($this->idspectacle)) {
unset($menu_array['supprimer']);
unset($menu_array['sauvegarder']);
}
if(!empty($this->context['action'])){
if(!array_key_exists($this->context['action'], $menu_array)){
$menu_array['dossier']['active'] = true;
$menu_array['dossier']['url'] = $this->context['action'];
}
else{
$menu_array[$this->context['action']]['active'] = true;
$menu_array['dossier']['url'] = 'type';
}
$this->context['view']->menu_spectacle = $menu_array;
}
}
// {{{
/**
*
* @Route("/ajoutspectacle/distribution/idspectacle/{idspectacle}", name="ajout_spectacle_distribution_idspectacle")
*
*/
public function action_distribution($idspectacle = null, Request $request)
{
$this->context['action'] = 'distribution';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
$GLOBALS['id'] = $idspectacle;
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=distribution');
}
// rediriger vers montheatre/connexion si pas loggué
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', [
'urifrom' => '/ajoutspectacle/distribution/idspectacle/'.$idspectacle,
'entete_connexion' => 'ajoutspectacle'
]);
}
// paramètre et instanciation
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('edit'),
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createNamedBuilder('', FormType::class, null, [
'validation_groups' => false,
'attr' => [
'id' => 'masterform'
]
]);
// formulaire
$this->getDistributionForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateDistributionForm()) {
return $this->saveDistribution($request);
}
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
// style css
$jqueryui_theme = 'themes_2018';
$jqueryui_version = '1.12-1';
// css en plus
$this->context['view']->style_more[] = array(
'/navigation/js/markitup/skins/markitup/style.css',
'/navigation/js/markitup/sets/dotclear/style.css',
'/navigation/js/jquery-ui/css/'.$jqueryui_theme.'/jquery-ui-'.$jqueryui_version.'.css',
);
// js en plus
$this->context['view']->js_more[] = array(
'/navigation/js/markitup/jquery.markitup.js',
'/navigation/js/markitup/sets/dotclear/set.js',
'/navigation/js/jquery-ui/jquery-ui-'.$jqueryui_version.'.min.js',
'/navigation/js/jquery-ui/jquery.ui.datepicker-fr.js'
);
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 3);
return $this->view('ajoutspectacle/distribution.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/production/idspectacle/{idspectacle}", name="ajout_spectacle_production_idspectacle")
*
*/
public function action_production($idspectacle = null, Request $request)
{
$this->context['action'] = 'production';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
$GLOBALS['id'] = $idspectacle;
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=production');
}
// rediriger vers montheatre/connexion si pas loggué
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', [
'urifrom' => '/ajoutspectacle/production/idspectacle/'.$idspectacle,
'entete_connexion' => 'ajoutspectacle'
]);
}
// paramètre et instanciation
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('edit'),
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
// formulaire
$this->getProductionForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateProductionForm()) {
return $this->saveProduction();
}
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
// css en plus
$this->context['view']->style_more[] = array(
'/navigation/js/markitup/skins/markitup/style.css',
'/navigation/js/markitup/sets/dotclear/style.css'
);
// js en plus
$this->context['view']->js_more[] = array(
'/navigation/js/markitup/jquery.markitup.js',
'/navigation/js/markitup/sets/dotclear/set.js',
);
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 4);
return $this->view('ajoutspectacle/production.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/affiche/idspectacle/{idspectacle}", name="ajout_spectacle_affiche_idspectacle")
*
*/
public function action_affiche($idspectacle = null, Request $request, EditUtils $editUtils, FormFactoryInterface $formFactory)
{
$this->context['action'] = 'production';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
$GLOBALS['id'] = $idspectacle;
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=affiche');
}
// rediriger vers montheatre/connexion si pas loggué
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/affiche/idspectacle/'.$idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
// paramètre et instanciation
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('edit'),
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $formFactory->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
// formulaire
$this->getAfficheForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validateAfficheForm()) {
return $this->saveAffiche($editUtils);
}
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
// css en plus
$this->context['view']->style_more[] = array(
'/navigation/js/markitup/skins/markitup/style.css',
'/navigation/js/markitup/sets/dotclear/style.css'
);
// js en plus
$this->context['view']->js_more[] = array(
'/navigation/js/markitup/jquery.markitup.js',
'/navigation/js/markitup/sets/dotclear/set.js',
);
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 5);
return $this->view('ajoutspectacle/affiche.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/presentation/idspectacle/{idspectacle}", name="ajout_spectacle_presentation_idspectacle")
*
*/
public function action_presentation($idspectacle = null, Request $request)
{
$this->context['action'] = 'production';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
$GLOBALS['id'] = $idspectacle;
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=presentation');
}
// rediriger vers montheatre/connexion si pas loggué
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/production/idspectacle/'.$idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
// paramètre et instanciation
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('edit'),
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
// formulaire
$this->getPresentationForm();
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
// validation du formulaire
if($this->validatePresentationForm()) {
return $this->savePresentation();
}
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
//Pour tui editor
$this->view->formulaire_css = true;
// js en plus
$this->view->js_more = array(
'/tui/markdown-it/dist/markdown-it.js',
'/tui/to-mark/dist/to-mark.js',
'/tui/tui-code-snippet/dist/tui-code-snippet.js',
'/tui/codemirror/lib/codemirror.js',
'/tui/highlightjs/highlight.pack.js',
'/tui/squire-rte/build/squire-raw.js',
'/tui/tui-editor-Editor.js'
);
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 6);
return $this->view('ajoutspectacle/presentation.html.twig', [
'form' => $this->context['form']->createView()
]);
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/dates/idspectacle/{idspectacle}", name="ajout_spectacle_dates_idspectacle")
*
*/
public function action_dates($idspectacle = null, Request $request)
{
$this->context['action'] = 'production';
$this->context['params']['idspectacle'] = $idspectacle;
// créer un token pour anti-csrf
$this->func->tokenCsrf('ajoutspectacle',$this->context);
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
$GLOBALS['id'] = $idspectacle;
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=dates');
}
// rediriger vers montheatre/connexion si pas loggué
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/dates/idspectacle/'. $idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'do' => array('edit','delete')
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
// formulaire
$this->getSchedule($idspectacle);
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
// style css
$this->context['view']->style_more[] = 'calendrier_evenement';
// les horaires
$this->context['view']->js_more[] = 'jquery.qtip.min.js';
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 7);
$template = 'ajoutspectacle/dates.html.twig';
// Si nous sommes dans le « controller » ajoutdate
if(isset($this->context['origineController'])){
$this->view->page_courante = $this->context['origineController'];
$template = 'ajoutdate/dates.html.twig';
}
return $this->view($template);
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/modifier-dates/idspectacle/{idspectacle}", name="ajout_spectacle_modifier_dates_idspectacle")
* @Route("/ajoutspectacle/modifier-dates/idspectacle/{idspectacle}/idcontact/{idcontact}", name="ajout_spectacle_modifier_dates_idspectacle_idcontact")
*
*/
public function action_modifier_dates($idspectacle = null, $idcontact = null, Request $request)
{
$this->context['action'] = 'production';
$this->context['params']['idspectacle'] = $idspectacle;
$this->context['params']['idcontact'] = $idcontact;
// idspectacle en mode édition
if (!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
$GLOBALS['id'] = $idspectacle;
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=modifier-dates');
}
// rediriger vers montheatre/connexion si pas loggué
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/modifier-dates/idspectacle/'. $idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
// envoi idspectacle à la vue
$this->context['view']->idspectacle = $idspectacle;
// idcontact => mode édition
if(!empty($this->context['params']['idcontact']) && $this->func->my_is_int($this->context['params']['idcontact'])) {
$idcontact = $this->context['params']['idcontact'];
} else {
$idcontact = null;
}
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'idcontact' => $idcontact,
'possible_do' => array('edit_schedule','delete_schedule')
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
'attr' => [
'id' => 'masterform'
]
]);
$this->getScheduleForm($idspectacle,$idcontact);
$this->context['form'] = $this->context['formFactory']->getForm();
$this->context['form']->handleRequest($request);
if($this->validateScheduleForm() || !empty($_POST['dates'])) {
if(empty($_POST['dates'])) {
$this->context['view']->error['precise_date'] = 'Vous devez préciser au moins une date de représentation';
} elseif(empty($this->context['form']->get('idcontact'))) {
echo 'ERROR 2';
$this->context['view']->error['precise_contact'] = 'Vous devez choisir un lieu de représentation';
} else {
return $this->saveSchedule($idspectacle,$idcontact);
}
}
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 7);
// style css
$jqueryui_theme = 'themes_2018';
$jqueryui_version = '1.12-1';
$this->context['view']->style_more[] = array(
'/navigation/js/jquery-ui/css/'.$jqueryui_theme.'/jquery-ui-'.$jqueryui_version.'.css',
'/navigation/js/multidate/multidatepicker.css',
);
// js en plus
$this->context['view']->js_more[] = 'jquery-ui/jquery-ui-'.$jqueryui_version.'.min.js';
$this->context['view']->js_more[] = 'multidate/jquery-ui.multidatespicker.js';
$this->context['view']->js_more[] = 'jquery-ui/jquery.ui.datepicker-fr.js';
$template = 'ajoutspectacle/modifier-dates.html.twig';
// Si nous sommes dans le « controller » ajoutdate
if(isset($this->context['origineController'])){
$this->view->page_courante = $this->context['origineController'];
$template = 'ajoutdate/modifier-dates.html.twig';
}
return $this->view($template, [
'form' => $this->context['form']->createView()
]);
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/validation/idspectacle/{idspectacle}", name="ajout_spectacle_validation_idspectacle")
*
*/
public function action_validation($idspectacle = null, Request $request, TheatreMail $TheatreMail, EditUtils $editUtils)
{
$this->context['action'] = 'validation';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=validation');
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/validation/idspectacle/'. $idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
// on instancie
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
// envoyer le message à l'administrateur
$this->getValidation($TheatreMail, $editUtils);
// élèments commun (css, js, barre d'outils)
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$title_page = $this->getSteps('Ajouter votre spectacle', 8);
return $this->view('ajoutspectacle/validation.html.twig');
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/supprimer/idspectacle/{idspectacle}", name="ajout_spectacle_supprimer_idspectacle")
*
*/
public function action_supprimer($idspectacle = null, Request $request, UtilsEdit $utilsEdit)
{
$this->context['action'] = 'supprimer';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=supprimer');
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/supprimer/idspectacle/'. $idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
// on instancie
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
'possible_do' => array('delete'),
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
$this->getSupprimerForm();
// validation du formulaire
if($this->validateSupprimer()) {
return $this->deleteSpectacle();
}
// page simple sans addthis, montheatre
$this->getAjoutspectacleCommon();
// gestion des étapes et titre de page modifié
$this-> title_page = 'Supprimer le dossier';
return $this->view('ajoutspectacle/supprimer.html.twig');
}
// }}}
// {{{
/**
*
* @Route("/ajoutspectacle/sauvegarder/idspectacle/{idspectacle}", name="ajout_spectacle_sauvegarder_idspectacle")
*
*/
public function action_sauvegarder($idspectacle = null, Request $request, UtilsEdit $utilsEdit)
{
$this->context['action'] = 'sauvegarder';
$this->context['params']['idspectacle'] = $idspectacle;
// idspectacle en mode édition
if(!empty($this->context['params']['idspectacle'])
&& $this->func->my_is_int($this->context['params']['idspectacle'])) {
$idspectacle = $this->context['params']['idspectacle'];
} else {
// TODO Cette route n'existe pas !!
return $this->redirect('/ajoutspectacle/erreur-process?medium_from=supprimer');
}
// rediriger vers montheatre/connexion
if (!$this->getUser() instanceof Extranetusers) {
return $this->redirectToRoute('app_login', ['urifrom' => '/ajoutspectacle/supprimer/idspectacle/'. $idspectacle, 'entete_connexion' => 'ajoutspectacle']);
}
// on instancie
$ajoutspectacle_params = array(
'idspectacle' => $idspectacle,
);
$this->InitAjoutSpectacle($ajoutspectacle_params);
// page simple sans addthis, montheatre
$this->getAjoutspectacleCommon();
$this->context['view']->no_steps = true;
// gestion des étapes et titre de page modifié
$this->title_page = 'Sauvegarder le dossier';
return $this->view('ajoutspectacle/sauvegarder.html.twig');
}
// }}}
// {{{ getViewForm()
/** Formulaire de sélection de l'auteur
*
*/
public function getViewForm()
{
// si le spectacle vient d'être supprimé depuis la page /ajoutspectacle/supprimer
if(!empty($_REQUEST['delete'])) {
$this->view->delete = true;
}
// choisir l'auteur
$this->context['formFactory']->add('auteur_spectacle', RelationsType::class, [
'label' => 'Choisissez l\'auteur',
'type_object' => 'form',
'type_dbdo'=>'persons',
'dbdo' => 'spectacles',
'relat' => 'simple',
// 'constraints' => [
// new NotBlank([
// 'message' => 'Vous devez obligatoirement choisir un auteur référencé'
// ])
// ]
]); //auteur_spectacle
/*$prerequis = array(
'le titre de votre spectacle',
'le type de spectacle (mise en scène, lecture, mise en espace...)',
'le(s) metteur(s) en scène',
'la compagnie ou le producteur délégué',
'le lieu de création',
'la date de création',
'la langue du spectacle',
'les comédiens',
'un visuel pour ce spectacle (affiche, photographie de répétition...)',
'une présentation ou la note d\'intention du metteur en scène',
'le calendrier de représentation (dates ET lieu)',
'le texte sur lequel est basé votre spectacle',
);
foreach($prerequis as $k=>$p) {
$this->form->addElement('checkbox', 'check_'.$k, $p, null, array('id' => 'check_'.$k));
$this->form->addRule('check_'.$k, 'Vous devez connaître '.$p, 'required');
$this->form->addRule('check_'.$k, 'Vous devez connaître '.$p, 'nonzero');
}*/
// vider la session relation_select
$this->deleteRelationSession();
// bouton
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => html_entity_decode($this->context['tr']->trans('dispose_information_commencer_procedure')),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
}
// }}}
// {{{ validateViewForm()
/** Valider le formulaire
*
*/
public function validateViewForm() {
return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false;
}
// }}}
// {{{ saveView()
/** Continuer => créer un texte brouillon
*
*/
public function saveView() {
return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle);
}
// }}}
// {{{ getTypeForm()
/** Formulaire de sélection du type de spectacle (basé sur un texte ou non)
*
*/
public function getTypeForm()
{
/*print_r($this->view->data_spectacle);
exit;*/
// si le spectacle existe, cocher la case qui va bien
if(!empty($this->idspectacle)) {
// supprimer
unset($_SESSION['relation_select']);
if(!empty($this->view->data_spectacle['textfictif'])) {
$this->context['view']->open_affiche_spectacle = true; // pour checker le bouton radio et ouvrir le bloc
$this->putRelationSession('spectacle_director',$this->view->data_spectacle['alldirectors']);
} else { // récupèrer les auteurs et les mettres en session
$this->context['view']->open_affiche_text = true; // pour checker le bouton radio et ouvrir le bloc
$this->putRelationSession('spectacle_author',$this->view->data_spectacle['allauthors']);
}
}
// envoyer les infos relation_select en session à la vue
if($this->getRelationSession()) {
$this->context['view']->relation_select = '<script type="text/javascript">var relation_select = '.json_encode($this->getRelationSession()).'</script>';
}
// choisir le type de spectacle
// $radios_choice[] = &HTML_QuickForm::createElement('radio', null, null, 'oui', '1', array('class' => 'radio'));
// $radios_choice[] = &HTML_QuickForm::createElement('radio', null, null, 'non', '0', array('class' => 'radio'));
// $this->form->addGroup($radios_choice, 'type_choice', 'Le spectacle est-il basé sur un texte');
$this->context['formFactory']->add('type_choice', ChoiceType::class, [
'label' => 'Le spectacle est-il basé sur un texte',
'choices' => [
'Oui' => 1,
'Non' => 2
],
'expanded' => true,
'multiple' => false,
'mapped' => false,
'constraints' => [
new NotBlank([
'message' => 'Merci d\'indiquer si votre spectacle est basé sur un texte ou pas'
]),
]
]);
// choisir l'auteur ou le metteur en scène
$this->context['formFactory']->add('spectacle_author', RelationsType::class, [
'label' => 'Choisissez le(s) auteur(s)',
// 'type_object' => 'form',
'type_dbdo'=>'persons',
'dbdo' => 'spectacles',
'multiple' => true,
]); //auteur_spectacle
//auteur_spectacle
$this->context['formFactory']->add('spectacle_director', RelationsType::class, [
'label' => 'Choisissez le(s) metteur(s) en scène/concepteur(s)/chorégraphe(s)',
// 'type_object' => 'form',
'type_dbdo'=>'persons',
'dbdo' => 'spectacles',
'mapped' => false,
'multiple' => true,
]);
if(!empty($_POST['type_choice'])) {
$type_choice = (int)$_POST['type_choice'];
} elseif(!empty($_GET['add_relation'])) {
if($_GET['add_relation']=='spectacle_author') {
$type_choice = 1;
} else {
$type_choice = 2;
}
}
// si basé sur un texte, il faut au moins un auteur
if(!empty($type_choice) && empty($_POST['redirect_add_relation'])) {
// texte : au moins un auteur
if($type_choice==1) {
// $this->context['formFactory']->addRule('spectacle_author', 'Choisissez les auteurs : vous devez préciser au moins un auteur', 'required');
$this->context['view']->open_affiche_text = true; // pour checker le bouton radio et ouvrir le bloc
// spectacle : au moins un metteur en scène
} else {
// $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');
$this->context['view']->open_affiche_spectacle = true; // pour checker le bouton radio et ouvrir le bloc
}
}
// bouton
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => 'Continuer la procédure',
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
}
// }}}
// {{{ validateTypeForm()
/** Valider le formulaire => au moins un choix !
*
*/
public function validateTypeForm() {
return ($this->context['form']->isSubmitted()) ? true : false;
}
// }}}
// {{{ saveType()
/** Sauvegarder le choix et passer à l'étape suivante
*
*/
public function saveType()
{
// cleaner
// $this->form->applyFilter('__ALL__', 'strip_and_trim');
// le choix ?
$editMode = false;
$redirectAddRelation = false;
if (isset($_REQUEST["do"])) {
if ($_REQUEST["do"] == "edit") {
$editMode = true;
}
}
if (isset($_POST["redirect_add_relation"])) {
if (!empty($_POST["redirect_add_relation"])) {
$redirectAddRelation = true;
}
}
if(empty($_POST['type_choice'])){
if ($editMode) {
return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle.'?do=edit');
} else {
return $this->redirectToRoute("ajout_spectacle_type_idspectacle");
}
} else if($_POST['type_choice'] == 1 && empty($_POST['spectacle_author']) && !$redirectAddRelation) {
if ($editMode) {
return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle.'?do=edit');
} else {
return $this->redirectToRoute("ajout_spectacle_type_idspectacle");
}
}
$type_choice = (int)$_POST['type_choice'];
// choix 1 => passer à l'étape texte
if(!empty($type_choice)) {
// au cas où, vider la session des infos spectacle_director
$this->deleteRelationSession();
if($type_choice==1) {
// mettre les spectacle_author en session
$this->putRelationSession('spectacle_author');
// cas de la redirection vers l'ajout de personne
if(!empty($_POST['redirect_add_relation'])) {
return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
}
// redirection vers la page de texte
return $this->redirect('/'.$this->params['path'].'/texte/idspectacle/'.$this->idspectacle);
} elseif($_POST['type_choice']==2) { // choix 2 => passer à l'étape spectacle
// mettre les spectacle_director en session
$this->putRelationSession('spectacle_director');
// cas de la redirection vers l'ajout de personne
if(!empty($_POST['redirect_add_relation'])) {
return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
}
// redirection vers la page de spectacle
return $this->redirect('/'.$this->params['path'].'/spectacle/idspectacle/'.$this->idspectacle);
}
}
}
// }}}
// {{{ getTexteForm()
/** Formulaire de sélection du texte
*
*/
public function getTexteForm()
{
$tr = $this->context['tr'];
// si on est dans le cas ou on cherche des textes, les auteurs doivent-être en session
// uniquement dans le cas d'un auteur unique ? sinon, l'enregistrer en commentaires pour le webmaster
// les auteurs sont en session ou dans le spectacle
$allauthors = $this->getRelationSession('spectacle_author');
// pas d'auteur = retour à la page type
if(empty($allauthors)) {
return $this->redirect('/'.$this->params['path'].'/type/idspectacle/'.$this->idspectacle);
}
$this->view->no_text = true;
// si un seul auteur
if(count($allauthors)>=1) {
foreach($allauthors as $k=>$v) {
$idperson = $k;
break;
}
$persons = $this->em->getRepository(Persons::class);
$this->view->infos_person = $persons->getInfosPerson($idperson);
// les textes de cette personne
$texts_person = $persons->getTextsPerson($idperson,'original',1,null,null,true);
if(!empty($texts_person)) {
foreach($texts_person as $k=>$t) {
$texts_list[$t['idtext']] = $t['title'];
$texts_person[$k]['translations'] = $persons->getTextsPerson($idperson,'translation',null,null,$t['idtext'],true);
}
$this->view->texts_person = $texts_person;
$this->view->no_text = false;
}
}
// si text_persons est vide, on doit avoir les champs obligatoires
$constraints = array(
'is_publisher' => array(),
'title' => array(),
);
if(empty($texts_person)) {
$constraints = array(
'is_publisher' => array(
new NotBlank([
'message' => $this->context['tr']->trans('thnet_form_publish_texte_obligratoire')
]),
),
'title' => array(
new NotBlank([
'message' => $this->context['tr']->trans('thnet_form_titre_texte_obligatiore')
]),
),
);
// sinon, vérifier que choice_idtext est bien à 1
} else {
// 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
if(empty($_POST['idtext'])) {
$constraints['title'] = [
new NotBlank([
'message' => 'Vous devez choisir un texte ou en préciser un nouveau'
]),
];
if(!empty($_POST['title'])) {
$constraints['is_publisher'] = [
new NotBlank([
'message' => 'Le texte est-il édité ? : merci de préciser la réponse'
]),
];
$this->context['view']->open_new_text = true;
}
}
}
// ajouter les infos pour un nouveau texte
// ajout champ commentaire
$label_comments = $this->context['tr']->trans('ajoutspectacle_etape1_form_description_texte');
$this->context['formFactory']->add('comments', TextareaType::class, [
'label_html' => true,
'label' => $label_comments,
'required' => false,
'attr' => [
'rows' => 4,
'cols' => 90
]
]);
// traduction ou texte original
// $radios_publisher[] = &HTML_QuickForm::createElement('radio', null, null, $tr->trans('oui'), '1', array('class' => 'radio'));
// $radios_publisher[] = &HTML_QuickForm::createElement('radio', null, null, $tr->trans('non'), '0', array('class' => 'radio'));
// $this->form->addGroup($radios_publisher, 'is_publisher', $tr->trans('thnet_form_publish_texte'));
// éditeur
$this->context['formFactory']->add('idcontact_publisher', RelationsType::class, [
'label' => $this->context['tr']->trans('form_idcontact_publisher'),
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'spectacles',
'relat' => 'simple'
]);
// titre du texte
$this->context['formFactory']->add('title', TextType::class, [
'label' => $tr->trans('thnet_form_titre_texte'),
'constraints' => $constraints['title'],
'required' => false,
'attr' => [
'size' => 100
]
]);
// si on a idcontact_publisher en POST ou en GET => pour afficher le javascript
if(!empty($_REQUEST['idcontact_publisher'])) {
$this->view->idcontact_publisher = true;
}
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
}
// }}}
// {{{ validateTexteForm()
/** Valider le formulaire
*
*/
public function validateTexteForm() { return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false; }
// }}}
// {{{ saveTexte()
/** Sauvegarder le texte et continuer
*
*/
public function saveTexte()
{
$error = false;
// soit la personne à choisi un texte => dans ce cas, enregistrement classique
if(!empty($_POST['idtext']) && $this->func->my_is_int($_POST['idtext'])) {
$idtext = (int)$_POST['idtext'];
$text_spectacle = array($idtext => $idtext); // le texte du spectacle
// soit c'est un nouveau texte => dans ce cas, il faut le créer
} elseif($this->context['form']->has('title')) {
// récupèrer l'auteur dans la session avec le bon formatage clé => clé / idtext => idtext
$text_author = $this->getRelationSession('spectacle_author',true);
// enregistrer un nouveau text non fictif
$idtext = $this->saveUpdateText($text_author,0);
if($this->func->my_is_int($idtext)) {
// finalement, le texte du spectacle !
$text_spectacle = array($idtext => $idtext);
} else {
// erreur renvoyée par la méthode saveUpdateText
$error = $idtext;
}
} else { // fin nouveau text ou existant
// erreur = ni idtext, ni titre
$this->context['error']['texts_insert'] = $this->getMessage('error','insert');
$error = true;
}
// si pas d'erreur sur l'ajout du texte, on ajoute le spectacle
if(!$error) {
// si le specacle existe
if(!empty($this->idspectacle)) {
// si le spectacle était en fictif, on doit déassocier le texte et supprimer le texte fictif
if(!empty($this->view->data_spectacle['textfictif'])) {
$delete_old_text = true;
} else {
$delete_old_text = false;
}
$this->updateTextSpectacle($text_spectacle,0,$delete_old_text);
} else { // si le spectacle n'existe pas => le créer et associer le texte
$this->saveUpdateSpectacle($text_spectacle,array(),0);
}
// redirection sur la page des informations
return $this->redirect('/'.$this->params['path'].'/informations/idspectacle/'.$this->idspectacle);
}
}
// }}}
// {{{ getSpectacleForm()
/** Formulaire de saisie du titre du spectacle
*
*/
public function getSpectacleForm()
{
$tr = $this->context['tr'];
// le titre du spectacle
$this->context['formFactory']->add('title', TextType::class, [
'label' => $tr->trans('ajoutspectacle_titre_spectacle'),
'constraints' => [
new NotBlank([
'message' => $tr->trans('ajoutspectacle_etape1_titre_spectacle_rule')
]),
],
'attr' => [
'size' => 100
]
]);
// bouton de validation
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
// si il y a déjà un titre
if(!empty($this->context['view']->data_spectacle['title'])) {
$this->context['formFactory']->setData([
'title' => $this->context['view']->data_spectacle['title']
]);
}
}
// }}}
// {{{ validateSpectacleForm()
/** Valider le formulaire
*
*/
public function validateSpectacleForm() {
return ($this->context['form']->isSubmitted() && $this->context['form']->isValid());
}
// }}}
// {{{ saveSpectacle()
/** Sauvegarder le texte et continuer
*
*/
public function saveSpectacle()
{
// filtrer
// $this->form->applyFilter('__ALL__', 'strip_and_trim');
// dans le cas d'une mise à jour => changement de titre spectacle+textfictif + changement de spectacle_director
if(!empty($this->idspectacle)) {
// mise à jour du titre de ce texte fictif
$idtext = $this->context['view']->data_spectacle['idtext'];
} else {
$idtext = null;
}
// récupèrer les metteurs en scène qui deviennent auteur du texte fictif
$spectacle_director = $this->getRelationSession('spectacle_director',true);
// on crée un texte fictif qui porte le nom du spectacle
$idtext = $this->saveUpdateText($spectacle_director,1,$idtext);
$spectacle_director = $this->getRelationSession('spectacle_director',true,true);
// on crée le spectacle
if($this->func->my_is_int($idtext)) {
// finalement, le texte du spectacle et les auteurs en metteurs en scène
$this->saveUpdateSpectacle(array($idtext => $idtext),$spectacle_director,1);
}
// rediriger sur les informations de base
return $this->redirect('/'.$this->params['path'].'/informations/idspectacle/'.$this->idspectacle);
}
// }}}
// {{{ getInformationsForm()
/** Formulaire pour les infos de base
*
*/
public function getInformationsForm()
{
$tr = $this->context['tr'];
// les elements du formulaire
$type_list = $this->spectacles->getTypeList(); //idtypespectacle
$this->context['formFactory']->add('idtypespectacle', ChoiceType::class, [
'label' => $tr->trans('form_typespectacle_question'),
'choices' => array_flip($type_list),
'constraints' => [
new Type([
'type' => 'integer',
'message' => $tr->trans('thnet_form_typespectacle_obligatoire')
]),
new Length([
'min' => 1,
'max' => 1,
'minMessage' => $tr->trans('thnet_form_typespectacle_obligatoire'),
'maxMessage' => $tr->trans('thnet_form_typespectacle_obligatoire')
])
],
'attr' => [
'class'=>'select_type'
]
]);
//Choisir une langue
$language_list = $this->spectacles->getLanguageList(); //select langues
$language_list[] = $this->context['tr']->trans('form_liste_default_valeur'); //Valeur par defaut => Choisissez dans la liste
$this->context['formFactory']->add('language', ChoiceType::class, [
'label' => $tr->trans('form_langage_spectacle'),
'choices' => array_flip($language_list),
'choice_label' => function ($choice, $key, $value) {
return $value;
},
'choice_filter' => $language_list ? function ($key) {
// 1 = la key du placeholder
return ($key != 1);
} : null,
'placeholder' => 'Choisissez dans la liste...',
'constraints' => [
new Type([
'type' => 'alnum',
'message' => $tr->trans('thnet_form_langue_spectacle_obligatoire')
]),
],
'attr' => [
'class'=>'select_language'
]
]);
// type de spectacles (défaut => contemporain)
$spectaclegenres = $this->em->getRepository(Spectaclegenres::class)->getSpectaclegenres();
$output = [];
foreach ($spectaclegenres as $key => $value) {
$output[$value["idspectaclegenre"]] = $value["spectaclegenre"];
}
$this->context['formFactory']->add('idspectaclegenre', ChoiceType::class, [
'label' => $tr->trans('form_idgenretext'),
'choices' => array_flip($output),
]);
// ne pas demander si spectacle non basé sur texte
if(empty($this->context['view']->data_spectacle['textfictif'])) {
$constraints_params = [];
if(empty($_POST['redirect_add_relation'])) {
if(empty($this->context['view']->data_spectacle['textfictif'])) {
$constraints_params = [
new Relations([
'message' => $tr->trans('thnet_form_un_metteur_en_scene_obligratoire')
])
];
}
}
$this->context['formFactory']->add('spectacle_director_noliste', RelationsType::class, [
'label' => $tr->trans('form_multimedia_metteur'),
'type_object' => 'form',
'type' => 'spectacle_director_noliste',
'type_dbdo' => 'persons',
'dbdo' => 'spectacles',
'constraints' => $constraints_params,
'mapped' => false,
'multiple' => true,
]); //spectacle_director
}
$this->context['formFactory']->add('creation_date', TextType::class, [
'label' => 'Date de création',
'required' => false,
'attr' => [
'size' => '10',
'maxlength' => '10',
'autocomplete' => 'off'
]
]); // date de création
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
}
// }}}
// {{{ validateInformationsForm()
/** Valider le formulaire d'infos
*
*/
public function validateInformationsForm() {
// vérifier que le spectacle ne soit pas déjà enregistré = mm texte et mm metteur en scène
if(empty($_POST['force_same_spectacle'])) {
if($this->context['form']->has('spectacle_director')) {
$spectacle_director_values = $this->context['form']->get('spectacle_director')->getData();
} elseif($this->context['form']->has('spectacle_director_noliste')) {
$spectacle_director_values = $this->context['form']->get('spectacle_director_noliste')->getViewData();
}
if(!empty($spectacle_director_values) && is_array($spectacle_director_values)) {
if($this->spectacleExists($spectacle_director_values,$this->view->data_spectacle['idtext'])) {
// récupèrer les infos sur ces spectacle similaires
$same_spectacles = $this->getSameSpectacles($spectacle_director_values,$this->view->data_spectacle['idtext']);
$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 : ';
$mesg .= '<ul>';
foreach($same_spectacles as $spectacle) {
$mesg .= '<li><a href="/spectacles/'.$spectacle['url_clean'].'/" class="popup">'.$spectacle['title'].'</a></li>';
}
$mesg .= '</ul>';
// renvoyer à la vue
$this->context['view']->reponse['check_spectacle'] = $mesg;
$this->context['view']->reponse['check_spectacle_ok'] = '<a href="/ajoutspectacle/informations/idspectacle/'.$this->idspectacle.'"
style="font-weight:bold;" class="bypass_same">Ajouter quand même mon spectacle</a> OU <a href="/ajoutspectacle/supprimer/idspectacle/'.$this->idspectacle.'"
style="font-weight:bold;">Annuler</a>';
return false;
}
}
}
return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false;
}
// }}}
// {{{ saveInformations()
/** Sauvegarder le texte et continuer
*
*/
public function saveInformations()
{
// filtrer
// $this->form->applyFilter('__ALL__', 'strip_and_trim');
// type de spectacle
$idtypespectacle = $this->context['form']->get('idtypespectacle')->getData();
if(!is_null($idtypespectacle)){
$values['idtypespectacle'] = $idtypespectacle;
}
// genre de spectacle
$idspectaclegenre = $this->context['form']->get('idspectaclegenre')->getData();
if(!is_null($idspectaclegenre)){
$values['idspectaclegenre'] = $idspectaclegenre;
}
// langue
$values['language'] = $this->context['form']->get('language')->getData();
if ($values['language'] == null) {
$values['language'] = "fr";
}
// date de création
$values['creation_date'] = ($creationDate = $this->context['form']->get('creation_date')->getData()) !== null
? \DateTime::createFromFormat('d/m/Y', $creationDate)->format('Y-m-d')
: '0000-00-00';
// metteur en scène
if($this->context['form']->has('spectacle_director_noliste')){
$spectacle_director_values = $this->context['form']->get('spectacle_director_noliste')->getViewData();
}
// changer les status de validation
$this->updateStatutValid($values);
// commencer la transaction avec la variable error false
$error = false;
// go !
// if ($this->spectacles->supports('transactions')) {
// $this->spectacles->beginTransaction();
// }
// preparer les champs
$this->spectacles->setUpdateFields($values);
try {
$this->spectacles->setData($this->idspectacle);
} catch(\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
// metteurs en scène liés
if(!$error && isset($spectacle_director_values)) {
if(is_array($spectacle_director_values)) {
try {
$this->spectacles->setRole($this->idspectacle,1,$spectacle_director_values,null); // 1 => metteur en scène
//$this->spectacles->setDistribution($this->idspectacle,$spectacle_director_values,true,true);
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// commiter, loguer les actions et informer la vue
if(!$error) {
// commiter la transaction
// if ($this->spectacles->in_transaction) {
// if(!$this->spectacles->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
// création ou modification ?
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// cas de la redirection vers l'ajout de personne
if(!empty($_POST['redirect_add_relation'])) {
return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
}
// redirection sur la page pour la distribution
return $this->redirect('/'.$this->params['path'].'/distribution/idspectacle/'.$this->idspectacle);
// }
// }
} else {
$this->context['error']['spectacles_update'] = $this->getMessage('error','update');
}
}
// }}}
// {{{ getDistributionForm()
/** Formulaire pour la dsitribution
*
*/
public function getDistributionForm()
{
$tr = $this->context['tr'];
// test nouveau système relation
if(
$this->isGranted('ROLE_ISROOT')
|| in_array($this->context['session']->getLogin(), ['ComedieFrancaise', 'lionsdumarais'])
) {
$this->context['view']->extended = true;
} else {
$this->context['view']->extended = false;
}
// règles de validation
$constraints_spectacle_actor = [];
if(empty($_POST['redirect_add_relation'])) {
$constraints_spectacle_actor = [
new Relations([
'message' => $tr->trans('form_rule_veuillez_precisier_les_comediens')
])
];
}
$this->context['formFactory']->add('spectacle_actor', RelationsType::class, [
'label' => $tr->trans('form_artiste_en_scene'),
'type_object' => 'form',
'type_dbdo' => 'persons',
'dbdo' => 'spectacles',
'required' => false,
'mapped' => false,
'constraints' => $constraints_spectacle_actor
]);
$this->context['formFactory']->add('spectacle_distrib', RelationsType::class, [
'label' => $tr->trans('form_autres_createurs_et_techniciens'),
'type_object' => 'form',
'type_dbdo'=>'persons',
'dbdo' => 'spectacles',
'required' => false,
'mapped' => false
]);
$conf_field = array('id'=>'more_distrib','cols'=>'10', 'rows'=>'20', 'class' => 'markitup_small');
$this->context['formFactory']->add('more_distrib', TextareaType::class, [
'label' => $tr->trans('form_information_complementaire_sur_distribution'),
'attr' => $conf_field,
'required' => false
]);
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
// voir s'il y a déjà un contenu associé => class_distribution => 72
$more_distrib_content = $this->em->getRepository(Contents::class)->getAssociateContent($this->idspectacle,'spectacles','class_distribution',array('wiki_convert'=>false));
if(!empty($more_distrib_content['text'])) {
$this->context['formFactory']->setData(array('more_distrib' => $more_distrib_content['text']));
}
}
// }}}
// {{{ validateDistributionForm()
/** Valider le formulaire de la distribution
*
*/
public function validateDistributionForm() { return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false; }
// }}}
// {{{ saveDistribution()
/** Sauvegarder la distribution
*
*/
public function saveDistribution($request = null)
{
// commencer la transaction avec la variable error false
$error = false;
// acteurs liés
if(!empty($request->request->get('form')['spectacle_actor'])) {
$spectacle_actor_values = $request->request->get('form')['spectacle_actor'];
if(is_array($spectacle_actor_values)) {
try {
$this->spectacles->setRole($this->idspectacle,5,$spectacle_actor_values,null); // 5 => acteurs
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// Id de la bio + code du role
if(!$error && !empty($request->request->get('form')['spectacle_distrib'])) {
$spectacle_distrib_values = $request->request->get('form')['spectacle_distrib'];
if(is_array($spectacle_distrib_values)) {
try {
if(empty($spectacle_distrib_values)) {
$spectacle_distrib_values = array();
}
$this->spectacles->setDistribution($this->idspectacle,$spectacle_distrib_values);
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// ajouter le contenu associé
$more_distrib = $this->context['form']->get('more_distrib')->getData();
if(!$error && !empty($more_distrib)) {
// instancie contents
$contents = $this->em->getRepository(Contents::class);
// a insérer/updater
$values_content = array(
'title' => NULL,
'idextranetuser' => $this->idextranetuser,
'text' => $more_distrib,
'publish' => 1,
'language' => 'fr',
);
// voir s'il y a déjà un contenu associé Autres infos sur la distribution => class_distribution => 27
$more_distrib_content = $contents->getAssociateContent($this->idspectacle,'spectacles','class_distribution',array('wiki_convert'=>false));
if(!empty($more_distrib_content['idcontent'])) {
$idcontent = $more_distrib_content['idcontent'];
$values_content['dateupdate'] = $this->now();
$log_action = 'update';
$return_idcontent = true;
} else {
$idcontent = null;
$values_content['dateinsert'] = $this->now();
$log_action = 'create';
$return_idcontent = false;
}
try {
$contents->setUpdateFields($values_content);
$idcontent = $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('27' => '27'),true); // 27 => class_distribution
$idcontent = $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('27' => '27'),true); // 27 => class_distribution
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
// commiter, loguer les actions et informer la vue
if(!$error) {
// commiter la transaction
// if ($this->spectacles->in_transaction) {
// if(!$this->spectacles->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
$this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
// logue l'action pour le contenu associé
if(!empty($idcontent)) {
$this->em->getRepository(UserAction::class)->setAction('contents',$idcontent,$log_action,$this->idextranetuser);
}
// logue l'action pour le spectacle
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// mettre à jour le status et valid
$values = array();
$this->updateStatutValid($values,true);
// cas de la redirection vers l'ajout de personne
if(!empty($_POST['redirect_add_relation'])) {
return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
}
// redirection sur la page pour la production
return $this->redirect('/'.$this->params['path'].'/production/idspectacle/'.$this->idspectacle);
// }
// }
} else {
$this->context['error']['spectacles_update'] = $this->getMessage('error','update');
}
}
// }}}
// {{{ getProductionForm()
/** Formulaire pour la production
*
*/
public function getProductionForm()
{
$tr = $this->context['tr'];
$this->context['formFactory']->add('spectacle_prod', RelationsType::class, [
'label' => $tr->trans('role_producteur'),
'required' => false,
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'spectacles',
'multiple' => true,
'mapped' => false
]);
$this->context['formFactory']->add('spectacle_coprod', RelationsType::class, [
'label' => $tr->trans('role_coproducteur'),
'required' => false,
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'spectacles',
'multiple' => true,
'mapped' => false
]);
$this->context['formFactory']->add('spectacle_prodel', RelationsType::class, [
'label' => $tr->trans('role_producteurdel'),
'required' => false,
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'spectacles',
'multiple' => true,
'mapped' => false
]);
$this->context['formFactory']->add('spectacle_struct_diffusion', RelationsType::class, [
'label' => $tr->trans('role_structure_diffusion'),
'required' => false,
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'spectacles',
'multiple' => true,
'mapped' => false
]);
$conf_field = array('id'=>'more_distrib','cols'=>'10', 'rows'=>'20', 'class' => 'markitup_small');
$this->context['formFactory']->add('more_prod', TextareaType::class, [
'label' =>$tr->trans('form_information_production_soutiens'),
'attr' => $conf_field,
'required' => false
]);
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
// voir s'il y a déjà un contenu associé autre soutien et production => class_production => 26
$more_prod_content = $this->em->getRepository(Contents::class)->getAssociateContent($this->idspectacle,'spectacles','class_production',array('wiki_convert'=>false));
if(!empty($more_prod_content['text'])) {
$this->context['formFactory']->setData(array('more_prod' => $more_prod_content['text']));
}
}
// }}}
// {{{ validateProductionForm()
/** Valider le formulaire de la distribution
*
*/
public function validateProductionForm() {
return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false;
}
// }}}
// {{{ saveProduction()
/** Sauvegarder la production
*
*/
public function saveProduction()
{
// filtrer
// $this->form->applyFilter('__ALL__', 'strip_and_trim');
// commencer la transaction avec la variable error null
$error = false;
// a rentrer dans la table role
$roles = array(
'spectacle_prod' => array('value' => 17, 'object' => 'contacts'), // les producteurs
'spectacle_coprod' => array('value' => 18, 'object' => 'contacts'), // les co-producteurs
'spectacle_prodel' => array('value' => 19, 'object' => 'contacts'), // les producteurs délégués
'spectacle_struct_diffusion' => array('value' => 77, 'object' => 'contacts') // les structures de diffusions
);
foreach($roles as $k=>$v) {
$tab_setrole = $this->context['form']->get($k)->getViewData();
if(is_array($tab_setrole)) {
try {
if(!empty($v['object'])) {
$object_setrole = $v['object'];
} else {
$object_setrole = null;
}
$this->spectacles->setRole($this->idspectacle,$v['value'],$tab_setrole,$object_setrole);
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// ajouter le contenu associé
$more_prod = $this->context['form']->get('more_prod')->getData();
if(!$error && !empty($more_prod)) {
// instancie contents
$contents = $this->em->getRepository(Contents::class);
// a insérer/updater
$values_content = array(
'title' => NULL,
'idextranetuser' => $this->idextranetuser,
'text' => $more_prod,
'publish' => 1,
'language' => 'fr',
);
// voir s'il y a déjà un contenu associé autre soutien et production => class_production => 26
$more_prod_content = $contents->getAssociateContent($this->idspectacle,'spectacles','class_production',array('wiki_convert'=>false));
if(!empty($more_prod_content['idcontent'])) {
$idcontent = $more_prod_content['idcontent'];
$values_content['dateupdate'] = $this->now();
$log_action = 'update';
} else {
$idcontent = null;
$values_content['dateinsert'] = $this->now();
$log_action = 'create';
}
try {
$contents->setUpdateFields($values_content);
$idcontent = $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('26' => '26'),true); // 26 => class_production
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
// commiter, loguer les actions et informer la vue
if(!$error) {
// commiter la transaction
// if ($this->spectacles->in_transaction) {
//
// if(!$this->spectacles->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
$this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
// logue l'action pour le contenu associé
if(!empty($idcontent)) {
$this->em->getRepository(UserAction::class)->setAction('contents',$idcontent,$log_action,$this->idextranetuser);
}
// logue l'action pour le spectacle
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// mettre à jour le status et valid
$values = array();
$this->updateStatutValid($values,true);
// cas de la redirection vers l'ajout de personne
if(!empty($_POST['redirect_add_relation'])) {
return $this->redirect(filter_var($_POST['redirect_add_relation'], FILTER_SANITIZE_URL));
}
// redirection sur la page pour les infos de base
return $this->redirect( '/'.$this->params['path'].'/affiche/idspectacle/'.$this->idspectacle);
// }
//
// }
} else {
$this->context['error']['spectacles_update'] = $this->getMessage('error','update');
}
}
// }}}
// {{{ getAfficheForm()
/** Formulaire pour l'affiche du spectacle
*
*/
public function getAfficheForm()
{
$tr = $this->context['tr'];
// copyright
$this->context['formFactory']->add('copyright', TextType::class, [
'label' => 'Copyright ou licence',
'attr' => ['size' => 50],
'required' => false
]);
//file
$this->objfile = $this->context['formFactory']->add('fichier', FileType::class, [
'label' => 'Fichier',
'attr' => array('id' => 'fileupload')
]);
// checker le fichier uploadé
$taille_maxi = 52428800; // 50 Mo maxi
$this->context['formFactory']->add('fichier', FileType::class, [
'label' => 'Le fichier choisi est trop volumineux (max. 50 Mo)',
'constraints' => [
new File([
'maxSize' => $taille_maxi.'k'
])
]
]);
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => array('class'=>'boutform boutbig nextstep')
]); // validation
// voir s'il y a déjà un fichier associé Affiche du spectacle / class_affiche_spec / 2
if(!empty($this->view->data_spectacle['illustrations'][0]['vignette'])) {
$this->context['view']->remplace_file = true;
$this->context['view']->proposed_file = $this->view->data_spectacle['illustrations'][0];
if(!empty($this->view->data_spectacle['illustrations'][0]['copyright'])) {
$this->context['formFactory']->setData(array('copyright' => $this->view->data_spectacle['illustrations'][0]['copyright']));
}
}
}
/** Valider l'ajout de l'affiche */
public function validateAfficheForm(): bool
{
return $this->context['form']->isSubmitted() && $this->context['form']->isValid();
}
/** Sauvegarder l'affiche */
public function saveAffiche(EditUtils $editUtils)
{
$error = false;
// upload d'un fichier
// if($this->objfile->isUploadedFile()) {
// controlleur pour l'edition
$editUtils->setParams($this->context, [
'object'=>'spectacles',
'em' => $this->em
]);
$fichier = $this->context['form']->get('fichier');
// check la validité
if($extension = $editUtils->checkFile($fichier)) {
$files = $this->em->getRepository(Files::class);
$fields_values = array(
'title' => null,
'copyright' => $this->context['form']->get('copyright')->getData(),
'range' => null,
'description' => null,
'language' => 'fr',
);
if(empty($idfile)) {
$idfile = null;
}
// preparer les champs
$files->setUpdateFields($fields_values);
try {
$idfile = $files->uploadObjectFile($fichier,21,'spectacles',$this->idspectacle,$fields_values,$idfile);
if($idfile !== false) {
$id = $idfile; //sauvegarder l'id du fichier en cours que l'on vient de créer
// 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
if(!empty($this->view->data_spectacle['illustrations'][0]['vignette'])) {
$log_action = 'create';
$this->em->getRepository(Files::class)->deleteFile($this->view->data_spectacle['illustrations'][0]['idfile'],'spectacles',$this->idspectacle,true);
unset($this->view->data_spectacle['illustrations']);
} else {
$log_action = 'create';
}
// nouvelle illustrations
$this->view->data_spectacle['illustrations'] = $this->em->getRepository(Contents::class)->getIllustrations($this->idspectacle,'spectacles','class_affiche_spec');
// vignettes
if(!empty($this->view->data_spectacle['illustrations']['vignette_object'])) {
$this->view->data_spectacle['vignette_object'] = $this->view->data_spectacle['illustrations']['vignette_object'];
}
} else {
$error = true;
}
} catch(\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
} // fin check validité
// c'est OK
if(!$error) {
// logue l'action pour le fichier associé
if(!empty($idfile)) {
$this->em->getRepository(UserAction::class)->setAction('files',$idfile,$log_action,$this->idextranetuser);
}
// mettre à jour le status et valid
$values = array();
$this->updateStatutValid($values,true);
// redirection sur la page de la présentation
return $this->redirect('/'.$this->params['path'].'/presentation/idspectacle/'.$this->idspectacle);
}
}
// }}}
// {{{ getPresentationForm()
/** Formulaire pour la présentation du spectacle
*
*/
public function getPresentationForm()
{
$tr = $this->context['tr'];
// pour le contenu associé
$this->context['formFactory']->add('title', TextType::class, [
'label' => $tr->trans('form_titre_ma_presentation'),
'attr' => array('size' => 50),
'required' => false
]);
$this->context['formFactory']->add('text', TextareaType::class, [
'label' => $tr->trans('form_text'),
'required' => false,
'attr' => [
'cols' => 90,
'rows' => 20,
'class' => 'markitup',
'tuieditor' => true
]
]);
$this->context['formFactory']->add('language', ChoiceType::class, [
'label' => $tr->trans('form_langue'),
'choices' => $this->em->getRepository(Contents::class)->getLanguageList(),
'attr' => [
'class'=>'select_language'
]
]); // langue
$this->context['formFactory']->add('validation', SubmitType::class, [
'label' => $tr->trans('ajout_enregistrer_etape_suivante_button'),
'attr' => [
'class'=>'boutform boutbig nextstep'
]
]); // validation
$this->context['formFactory']->get('language')->setData('fr');
// aide wiki
$this->view->aide_wiki = utf8_encode($this->wiki->help());
if(!empty($this->idspectacle)) {
// checker s'il y a une présentation = "en savoir plus"
$contents = $this->em->getRepository(Contents::class);
$presentation = $contents->getAssociateContent($this->idspectacle,'spectacles','class_article',array('wiki_convert'=>false));
if(!is_null($presentation)){
// $this->context['formFactory']->get('title')->setData($presentation['title']);
// $this->context['formFactory']->get('text')->setData($presentation['text']);
$this->context['formFactory']->setData($presentation);
}
}
}
// }}}
// {{{ validatePresentationForm()
/** Valider l'ajout de la présentation
*
*/
public function validatePresentationForm() {
return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false;
}
// }}}
// {{{ savePresentation()
/** Sauvegarder la présentation
*
*/
public function savePresentation()
{
// filtrer
// $this->form->applyFilter('__ALL__', 'strip_and_trim');
// commencer la transaction avec la variable error false
$error = false;
// go !
// if ($this->spectacles->supports('transactions')) {
// $this->spectacles->beginTransaction();
// }
// instancie contenu
$contents = $this->em->getRepository(Contents::class);
// ajouter le contenu associé
$values_content = array(
//'idspectacle' => $this->idspectacle,
'title' => 'Présentation',
'idextranetuser' => $this->idextranetuser,
'text' => $this->context['form']->get('text')->getData(),
'language' => $this->context['form']->get('language')->getData(),
'markdown' => true,
'publish' => 1
);
$dateNow = new \DateTime('now');
// voir s'il y a déjà un contenu associé article => class_article => 6
$presentation_content = $contents->getAssociateContent($this->idspectacle,'spectacles','class_article',array('wiki_convert'=>false));
if(!empty($presentation_content['idcontent'])) {
$idcontent = $presentation_content['idcontent'];
$values_content['dateupdate'] = $dateNow->format('Y-m-d');
$log_action = 'update';
} else {
$idcontent = null;
$values_content['dateinsert'] = $dateNow->format('Y-m-d');
$log_action = 'create';
}
try {
$contents->setUpdateFields($values_content);
$idcontent = $contents->addContent('spectacles',$this->idspectacle,$idcontent,0,array('6' => '6'),true); // 6 => class_article
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
// commiter, loguer les actions et informer la vue
if(!$error) {
// commiter la transaction
// if ($this->spectacles->in_transaction) {
// if(!$this->spectacles->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
$this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
// logue l'action pour le contenu associé
if(!empty($idcontent)) {
$this->em->getRepository(UserAction::class)->setAction('contents',$idcontent,$log_action,$this->idextranetuser);
}
// mettre à jour le status et valid
$values = array();
$this->updateStatutValid($values,true);
// redirection sur la page pour le calendrier
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$this->idspectacle);
// }
// }
} else {
$this->context['error']['spectacles_update'] = $this->getMessage('error','update');
}
}
// }}}
// {{{ getScheduleForm()
/** le formulaire pour un calendrier
*
*/
public function getScheduleForm($idspectacle,$idcontact=null) {
// le controller entre ajoutspectacle et ajoutdate
$this->view->page_courante = $this->context['controller'];
// si on est sur ajoutdate
if(in_array($this->view->page_courante, ['ajoutdate','spectacles'])) {
$page_specifique = $this->view->page_courante;
$this->view->page_specifique[$page_specifique] = true;
if($this->view->page_courante == 'spectacles' && !empty($this->context['view']->url_clean)){
$this->view->page_courante .= '/'.$this->context['view']->url_clean;
}
}
// pour le relation_select du contact
$GLOBALS['editset'] = 'schedules';
// associer à des contacts
$this->context['formFactory']->add('idcontact', RelationsType::class, [
'label' => 'Contacts associés',
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'schedules',
'relat'=>'simple',
'constraints' => [
new Relations([
'message' => 'Veuillez choisir un lieu de représentation'
])
]
]);
// pour les festoches
// if(!empty($this->params['is_admin'])) {
$this->context['formFactory']->add('idcontact_festival', RelationsType::class, [
'label' => 'Festival associé',
'type_object' => 'form',
'type_dbdo'=>'contacts',
'dbdo' => 'schedules',
'relat'=>'simple'
]);
// }
// url du spectacle dans le lieu et ou url de réservation
$this->context['formFactory']->add('url_spectacle', TextType::class, [
'label' => 'Page du spectacle (doit commencer par https://)',
'required' => false,
'constraints' => [
new Url([
'protocols' => ['http', 'https'],
'message' => 'Page du spectacle : l\'adresse du site semble incorrecte(elle doit commencer par https://)'
]),
new CheckWebsite([
'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'
])
],
'attr' => array('size' => 100),
]);
$this->context['formFactory']->add('url_booking', TextType::class, [
'label' => 'Lien de réservation (doit commencer par https://)',
'required' => false,
'constraints' => [
new Url([
'protocols' => ['http', 'https'],
'message' => 'Lien de réservation : l\'adresse du site semble incorrecte(elle doit commencer par https://)'
]),
new CheckWebsite([
'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'
])
],
'attr' => array('size' => 100)
]);
// trouver les droits de l'utilisateurs courant sur des fiche contacts
$idcontacts_extranetuser = $this->em->getRepository(Extranetusers::class)->getExtranetuserObject($this->idextranetuser,'contact');
$this->context['view']->idcontacts_extranetuser = '<script type="text/javascript">var idcontacts_extranetuser = '.json_encode($idcontacts_extranetuser).'</script>';
$this->context['view']->login = $this->getUser()->getLogin();
// classes
$schedules = $this->em->getRepository(Schedules::class);
// si on un idcontact = mode édition
// en mode édition, on va récupèrer les dates et les mettres dans un joli array pour le multidatepicker
if(!empty($idcontact)) {
$GLOBALS['from_id'] = serialize(array('idcontact' => $idcontact, 'idspectacle' => $this->idspectacle));
// le contact
$this->context['view']->data_contacts = $this->em->getRepository(Contacts::class)->getInfosContact($idcontact);
// droit de modifier les utls
// (#4271 - 04/12/2018) - On supprime la vérification du droit à l'ajout et la suppression des liens de réservation
// if(!empty($this->params['is_admin']) || (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser))) {
// $this->context['view']->affiche_autorise_ok = true;
// } else {
// $this->context['view']->affiche_autorise_no = true;
// }
//Tout le monde est autorisé à ajouter ou supprimer des liens de réservations.
$this->context['view']->affiche_autorise_ok = true;
$GLOBALS['id'] = $idcontact;
$dates = $this->getSpectacleDates($idcontact,$idspectacle);
// voir si dans le dates il y a des urls
foreach($dates as $k=>$v) {
if(!empty($v['url_booking'])) {
$this->context['formFactory']->get('url_booking')->setData($v['url_booking']);
}
if(!empty($v['url_spectacle'])) {
$this->context['formFactory']->get('url_spectacle')->setData($v['url_spectacle']);
}
}
foreach($dates as $k=>$i) {
// le tableau des dates
$d = $schedules->getFormeDate($i['date'],"%Y-%m-%d",true);
// la première date
if(empty($this->context['view']->first_date)) {
$this->context['view']->first_date = $d;
}
$dates_tab[$d] = '"'.$d.'"';
// horaires
$heures_tab[$d][$k] = array(
'locked' => false,
'hour' => $i['hour'],
'note' => $i['note'],
'is_cancelled' => $i['is_cancelled']
);
// 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
// par association idextranetuser/idcontact ou qu'on est administrateur
if(isset($this->view->data_spectacle['idextranetuser']) && $this->idextranetuser!=$this->view->data_spectacle['idextranetuser']->getIdextranetuser()
&& empty($this->params['is_admin'])
&& $i['idextranetuser']!=$this->idextranetuser
&& (!empty($idcontacts_extranetuser) && !array_key_exists($idcontact,$idcontacts_extranetuser))
) {
$dates_locked_tab[$d] = '"'.$d.'"';
$heures_tab[$d][$k]['locked'] = true;
}
}
if(!empty($dates_tab)){
$this->view->js_dates_get = '<script type="text/javascript"> var dates_get = ['.join(',', $dates_tab).']; </script>';
}
if(!empty($heures_tab)){
$this->view->js_heures_get = '<script type="text/javascript"> var heures_get = '.json_encode($heures_tab).'; </script>';
}
// créer un tableau javascript qui contient uniquement les dates
// 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
if(!empty($dates_locked_tab)) {
$this->view->js_dates_locked = '<script type="text/javascript"> var dates_locked = ['.join(',', $dates_locked_tab).']; </script>';
}
} else {
$this->context['view']->first_date = date('Y-m-d');
}
}
// }}}
// {{{ validateScheduleForm()
/** Valider le formulaire du calendrier
*
*/
public function validateScheduleForm() {
return ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) ? true : false;
}
// }}}
// {{{ saveSchedule()
/** enregistrer le calendrier
*
*/
public function saveSchedule($idspectacle,$idcontact=null) {
// classes
$schedules = $this->em->getRepository(Schedules::class);
// le contact
if(empty($idcontact)) {
$idcontact = $this->context['form']->get('idcontact')->getViewData();
}
// le festoche
// if(!empty($this->params['is_admin'])) {
$idcontact_festival = $this->context['form']->get('idcontact_festival')->getViewData();
// si idcontact_festival est vide, supprimer au cas ou
$sql = 'UPDATE schedules SET idcontact_festival=NULL WHERE idcontact='.$idcontact.' AND idspectacle='.$this->idspectacle;
$schedules->execute($sql);
// }
// trouver les droits de l'utilisateurs courant sur des fiche contacts
$idcontacts_extranetuser = $this->em->getRepository(Extranetusers::class)->getExtranetuserObject($this->idextranetuser,'contact');
$debug_simple[] = 'Le contact : '.$idcontact;
// récupèrer les valeurs
$selected_dates = $_POST['dates'];
$debug_simple[] = count($selected_dates). ' dates du formulaire avant traitement';
//$debug_simple[] = print_r($selected_dates, true);
// refaire le tableau $_POST['dates'] avec la clé = date et horaire aussi
foreach($selected_dates as $k=>$v) {
foreach($v as $kb=>$vb) {
//Pour la checkbox des annulations
$is_cancelled = 0;
if(isset($vb['is_cancelled'])){
$is_cancelled = 1;
}
$vb['is_cancelled'] = $is_cancelled;
$vb['date'] = $k;
$post_dates[$k.'_'.$vb['hour']] = $vb;
}
}
$debug_simple[] = count($post_dates).' dates du formulaire après traitement';
//$debug_simple[] = print_r($post_dates, true);
// sélectionner les dates du spectacle enregistrées
$dates = $this->getSpectacleDates($idcontact,$this->idspectacle);
$debug_simple[] = count($dates).' dates dans la base avant traitement';
//$debug_simple[] = print_r($dates, true);
// voir ce que l'utilisateur n'a pas le droit de modifier
if(!empty($dates)) {
// refaire le tableau $dates avec la clé = date et horaire
foreach($dates as $k=>$v) {
$db_dates[$v['date'].'_'.$v['hour']] = $v;
}
foreach($db_dates as $k_db_date=>$db_date) {
// 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
if(array_key_exists($k_db_date, $post_dates)) {
if($db_date['idextranetuser']!=$this->idextranetuser
&& (!isset($this->params['is_admin']) || $this->params['is_admin']!=1)
&& $this->idextranetuser!=$this->view->data_spectacle['idextranetuser']
&& (!empty($idcontacts_extranetuser) && !array_key_exists($idcontact,$idcontacts_extranetuser))
) {
// supprimer la date et heure du tableau POST
unset($post_dates[$k_db_date]);
}
}
// créer un tableau avec les dates de la base de données que l'utilisateur à le droit de modifier selon son statut
if(
$db_date['idextranetuser']==$this->idextranetuser
|| (!empty($this->params['is_admin']) && $this->params['is_admin']==1)
|| (!empty($this->view->data_spectacle['idextranetuser']) && $this->idextranetuser==$this->view->data_spectacle['idextranetuser']->getIdextranetuser())
|| (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser))
) {
$db_dates_user[$k_db_date] = $db_date;
}
}
// comparer les tableau $post_dates et $db_dates_user pour trouver les dates supprimées par le user
if(!empty($db_dates_user)) {
foreach($db_dates_user as $k_db_date_user=>$db_date_user) {
// si n'est pas dans la tableau post, c'est qu'il faut supprimer la date et l'heure
if(empty($post_dates[$k_db_date_user])) {
$delete_dates_user[] = $db_date_user['idschedule'];
// vérifier si les dates dans la base et le commentaire sont identique
} else {
// si identique, supprimer de post_dates car on ne va pas les rentrer de nouveau !
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']) {
unset($post_dates[$k_db_date_user]);
} else {
// il faut supprimer si le commentaire est modifié
$delete_dates_user[] = $db_date_user['idschedule'];
}
}
}
}
/* supprimer les dates et horaires de l'utilisateur
- qui sont différentes au niveau du commentaire
- qui n'existe plus
*/
if(!empty($delete_dates_user)) {
$sql = 'DELETE FROM schedules WHERE idschedule IN ('.join(',', $delete_dates_user).') ';
$schedules->execute($sql);
$debug_simple[] = 'Supprimer les dates de la base qui ont été décochée '.$sql;
}
}
$debug_simple[] = count($post_dates). ' dates à ajouter ';
//$debug_simple[] = print_r($post_dates, true);
//print_r($debug_simple);
//exit;
// on boucle sur les dates a ajouter
if(!empty($post_dates)) {
foreach($post_dates as $k_post_date=>$post_date) {
$values = array(
'idspectacle' => $this->idspectacle,
'idcontact' => $idcontact,
'date' => $post_date['date'],
'hour' => $post_date['hour'],
'note' => $post_date['note'],
'publish' => 1,
'valid' => 0
);
if(isset($post_date['is_cancelled'])){
$values['is_cancelled'] = $post_date['is_cancelled'];
}
// festche
if(!empty($idcontact_festival)) {
$values['idcontact_festival'] = $idcontact_festival;
}
$dateNow = new \DateTime();
$values['idextranetuser'] = $this->idextranetuser;
$values['dateupdate'] = $dateNow->format('Y-m-d h:i:s');
$values['dateinsert'] = $dateNow->format('Y-m-d h:i:s');
// 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
if(($this->view->data_spectacle['idextranetuser'] && $this->idextranetuser==$this->view->data_spectacle['idextranetuser']->getIdextranetuser())
|| (!empty($this->params['is_admin']) && $this->params['is_admin']==1)
|| (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser))
) {
$values['valid'] = 1;
}
//setDebug($values);
// on insére dans la table du calendrier
try {
$schedules->setUpdateFields($values);
$schedules->setData();
// update du calendrier
$this->em->getRepository(UserAction::class)->setAction('schedules',$this->idspectacle,'update',$this->idextranetuser);
$new_date = true;
} catch(\Exception $e) {
$this->logger->error('Impossible de modifier le spectacle '.$idspectacle);
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// si on a url_spectacle et/ou url_booking on les réenregistre
if($this->context['form']->has('url_spectacle')) {
$values_urls['url_spectacle'] = $this->context['form']->get('url_spectacle')->getData();
}
if($this->context['form']->has('url_booking')) {
$values_urls['url_booking'] = $this->context['form']->get('url_booking')->getData();
}
// on update si on a le droit
// (#4271 - 04/12/2018) -
// && ( (!empty($idcontacts_extranetuser) && array_key_exists($idcontact,$idcontacts_extranetuser)) || !empty($this->params['is_admin']) )
if(!empty($values_urls)) {
$schedules->setUpdateFields($values_urls);
$schedules->setData(null,false,true,'idcontact='.$idcontact.' AND idspectacle='.$this->idspectacle);
}
// mettre à jour l'idcontact_festival
if(!empty($idcontact_festival)) {
$values = array(
'idcontact_festival' => $idcontact_festival,
);
$schedules->setUpdateFields($values);
$schedules->setData(null,false,true,'idcontact='.$idcontact.' AND idspectacle='.$this->idspectacle);
}
// on retourne sur la page dates ou à la page validation
if(!empty($_POST['save_and_valid'])) {
// redirigé vers spectacles
if(empty($this->params['is_admin'])) {
return $this->redirect('/'.$this->params['path'].'/validation/idspectacle/'.$idspectacle);
} else {
return $this->redirect('/'.$this->params['path'].'/edit/id/'.$idspectacle);
}
} else {
return $this->redirect('/'.$this->params['path'].'/dates/idspectacle/'.$idspectacle);
}
}
// }}}
// {{{ getSchedule()
/** récupèrer le calendrier d'un évènement
*
*/
public function getSchedule($idspectacle) {
// le controller entre ajoutspectacle et ajoutdate
$this->view->page_courante = $this->context['controller'];
if($this->view->page_courante == 'spectacles' && !empty($this->context['view']->url_clean)){
$this->view->page_courante .= '/'.$this->context['view']->url_clean;
}
$schedules = $this->em->getRepository(Schedules::class);
$this->view->schedule_detail = $schedules->getDateLieuCommon('tous',$idspectacle,null,'ASC');
// on parcours les dates et les lieux
foreach($this->view->schedule_detail as $k=>$l) {
foreach($l['dateshours'] as $kb=>$d) {
if(is_array($d)) {
if(empty($this->params['is_admin']) && (!isset($this->view->data_spectacle['idextranetuser']) || $this->view->data_spectacle['idextranetuser']->getIdextranetuser() != $this->idextranetuser)) {
if(!empty($d['idextranetuser']) && $d['idextranetuser'] != $this->idextranetuser) {
$this->view->schedule_detail[$k]['no_delete'] = true;
}
}
if(isset($d['valid']) && $d['valid']==0) {
$this->view->schedule_detail[$k]['unvalid_dates'] = true;
}
} elseif(!empty($l['dateshours'][$d]['idextranetuser']) && $l['dateshours'][$d]['idextranetuser']!=$this->idextranetuser) {
if(isset($l['dateshours'][$d]['valid']) && $l['dateshours'][$d]['valid']==0) {
$this->view->schedule_detail[$k]['unvalid_dates'] = true;
}
if(empty($this->params['is_admin']) && (!isset($this->view->data_spectacle['idextranetuser']) || $this->view->data_spectacle['idextranetuser']->getIdextranetuser()!=$this->idextranetuser)) {
$this->view->schedule_detail[$k]['no_delete'] = true;
}
}
}
}
//setDebug($this->view->schedule_detail);
//print_r($this->view->schedule_detail);
}
// }}}
// {{{ saveRelation()
/** enregistrer une relation qui vient d'être crée depuis ajout-simple
* person ou contacts
*
*/
public function saveRelation($field,$value,$session_storage=false) {
$field_infos = $this->getRelationField($field);
// stockage des relations en session
if($session_storage) {
//unset($_SESSION['relation_select']);
// on doit retrouver le nom de l'item
foreach($value as $v) {
$a = array(
'type' => $field,
'view_name' => $this->em->getRepository('TheatreCore\Entity\\'.implode('', array_map(function($m) { return ucfirst($m); }, explode('_', $field_infos['object'])))),
'id' => $v,
);
// ajout role fictif
if($field=='spectacle_director') {
$a['idrole'] = 1;
}
$_SESSION['relation_select'][] = $a;
}
return true;
}
if(is_array($value)) {
// TODO gérer les cas multiples
foreach($value as $v) {
$value = $v;
break;
}
}
// relation simple = un champ dans la table spectacle
if(!empty($field_infos['relat']) && $field_infos['relat']=='simple') {
$this->spectacles->setUpdateFields(array($field => $value));
return $this->spectacles->setData($this->idspectacle);
}
// trouver la clé de la table de destination
$obj = $this->em->getRepository('TheatreCore\\Entity\\'.ucfirst($field_infos['object']));
$values[$obj->__idtable] = $value;
// role ?
if(!empty($field_infos['idrole'])) {
$values['idrole'] = $field_infos['idrole'];
}
// le spectacle
$values['idspectacle'] = $this->idspectacle;
// la table
$obj_relat = $this->em->getRepository('TheatreCore\Entity\\'.implode('', array_map(function($m) { return ucfirst($m); }, explode('_', $field_infos['table']))));
// vérifier que la relation n'existe pas déjà
if(!$obj_relat->findOneBy($values)) {
// le champ, le type
$obj_relat->setUpdateFields($values);
if($obj_relat->setData()) {
return true;
} else {
return false;
}
} else {
return false;
}
}
// }}}
// {{{ getValidation()
/** validation page
*
*/
public function getValidation($TheatreMail, EditUtils $editUtils) {
// email du montheatre
$extranetusers = $this->context['session'];
$this->view->extranetuser_email = $extranetusers->getEmail();
// si statut = 0 => on passe sur statut = 1 et on envoi un message
if($this->view->data_spectacle['statut']==0) {
// vérifier d'abord que les étapes sont précisées
$steps = $this->getSteps(null,'all');
$this->view->steps_incomplet = array();
foreach($steps as $s=>$v) {
// si une étape non validé
if($v['statut_step']=='no' && $s!=8 && $s!=4) {
$this->view->incomplet = true;
$this->view->steps_incomplet[$s] = $v;
}
}
if(empty($this->view->incomplet)) {
$this->view->validation = true;
// envoyer un mail a l'admin
$params_edit = [
'idobject' => $this->idspectacle,
'object' => 'spectacles',
'em' => $this->em
];
$editUtils->setParams($this->context, $params_edit);
// envoyer un mail à l'admin en précisant s'il s'agit d'une modification ou d'une création
$action_object = 'insert';
$motif = 'Création d\'un spectacle';
// mettre le statut à 1 parceque c'est nouveau
$this->spectacles->setUpdateFields(array('statut' => 1));
$this->spectacles->setData($this->idspectacle);
// prévenir uniquement l'admin dans le cas de la création d'un évènement
// ou de la modification d'un évènement qui était en ligne
$editUtils->sendAlerte($this->idspectacle,$action_object,$motif, $TheatreMail);
}
// si statut = 1 => on passe sur statut = 2 et on envoi un message aussi
} elseif($this->view->data_spectacle['statut']==1) {
$this->view->attente_validation = true;
// modifications simples
} else {
$this->view->moderation = true;
}
}
// }}}
// {{{ getSupprimerForm()
/** Supprimer le spectacle
*
*/
public function getSupprimerForm() {
// créer un token pour anti-csrf
$this->func->tokenCsrf('ajoutspectacle',$this->context);
// ne pas afficher les étapes
$this->view->no_steps = true;
}
// }}}
// {{{ validateSupprimer()
/** Valider l'action de suppression
*
*/
public function validateSupprimer()
{
if(!empty($_REQUEST['confirm']) && !empty($_REQUEST['token'])) {
if($this->isCsrfTokenValid('delete-spectacle', $_REQUEST['token'])) {
return true;
} else {
$this->context['error']['spectacles_tc'] = 'Impossible de supprimer le spectacle par ce biais <span style="color:#ccc;">[invalid token]</span>';
return false;
}
} else {
return false;
}
}
// }}}
// {{{ deleteSpectacle()
/** Supprimer le spectacle
*
*/
public function deleteSpectacle() {
// mettre un flag de suppression sur le spectacle => status
return $this->redirectToRoute("montheatre_messpectacles");
}
// }}}
// {{{ getInfosSpectacle()
/** Détail de l'évènement envoyé sur la vue
*
*/
public function getInfosSpectacle($idspectacle,$params=array())
{
$data_spectacle = $this->spectacles->getInfosSpectacle($idspectacle,array('get_illustration' => true, 'nocleanperson' => true));
// c'est la personne qui a publié ?
if($this->context['session'] instanceof Extranetusers && $data_spectacle['idextranetuser']==$this->getUser()->getLogin()) {
$data_spectacle['is_extranetuser'] = true;
}
// si pas validé ou pas publié
if(empty($this->params['is_admin']) && empty($this->params['no_check_extranetuser'])) {
if(($data_spectacle['valid']==0 && empty($data_spectacle['is_extranetuser']))
|| ($data_spectacle['publish']==0 && empty($data_spectacle['is_extranetuser']))) {
return $this->redirect('/'.$this->params['path'].'/non-accessible?publish');
}
}
$this->view->data_spectacle =$this->view->data_spectacle = $data_spectacle;
//setDebug($this->view->data_spectacle);
}
// }}}
// {{{ setPublish()
/** mettre en ligne ou hors ligne le spectacle
*
*/
public function setPublish($idspectacle,$publish)
{
$this->spectacles->setUpdateFields(array('publish' => $publish));
try {
return $this->spectacles->setData($idspectacle);
} catch(\Exception $e) {
$this->logger->error('Impossible de changer le status du spectacle'.$idspectacle);
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
// }}}
// {{{ getSteps()
/** etapes
*
*/
public function getSteps($title_page,$num_step) {
$tr = $this->context['tr'];
if(isset($num_step)) {
$steps = array(
// Texte
1 => array('nom' => $tr->trans('ajoutspectacle_steps_texte'), 'url' => '/'.$this->params['path'].'/type/idspectacle/'),
// Description
2 => array('nom' => $tr->trans('ajoutspectacle_steps_description'), 'url' => '/'.$this->params['path'].'/informations/idspectacle/'),
// distribution
3 => array('nom' => $tr->trans('ajoutspectacle_steps_distribution'), 'url' => '/'.$this->params['path'].'/distribution/idspectacle/'),
// Production
4 => array('nom' => $tr->trans('ajoutspectacle_steps_production'), 'url' => '/'.$this->params['path'].'/production/idspectacle/'),
//Visuel
5 => array('nom' => $tr->trans('ajoutspectacle_steps_visuel'), 'url' => '/'.$this->params['path'].'/affiche/idspectacle/'),
//Présentation
6 => array('nom' => $tr->trans('ajoutspectacle_steps_presentation'), 'url' => '/'.$this->params['path'].'/presentation/idspectacle/'),
//Dates
7 => array('nom' => $tr->trans('ajoutspectacle_steps_dates'), 'url' => '/'.$this->params['path'].'/dates/idspectacle/'),
//Validation
8 => array('nom' => $tr->trans('ajoutspectacle_steps_validation')),
);
// retourner le titre de la page ou un array
if($num_step!='all') {
if (in_array($num_step, array_keys($steps))) {
$steps[$num_step]['statut'] = ' step-on';
$this->view->steps = $steps;
$this->title_page = $steps[$num_step]['nom'].' ('.$tr->trans('ajout_etape').' '.$num_step.') - '.$title_page;
}
}
// marquer les steps infériereure
foreach($steps as $k=>$s) {
if($k==$num_step) {
$steps[$k]['statut'] = ' step-on';
} elseif($k<$num_step) {
$steps[$k]['statut'] = ' step-done';
}
if($this->checkStep($k)) {
$steps[$k]['statut_step'] = 'ok';
} else {
$steps[$k]['statut_step'] = 'no';
}
}
// retourner le titre de la page ou un array
if($num_step!='all') {
$this->view->steps = $steps;
return $title_page;
} else {
return $steps;
}
}
}
// }}}
// {{{ getMessage()
/** Les messages d'erreur/reponse
*
*/
public function getMessage($type_msg,$key)
{
$msgs = array(
'error' => array(
'commit' => 'Une erreur est survenue pendant l\'enregistrement de votre spectacle !',
'insert' => 'Une erreur est survenue pendant la création de votre spectacle !',
'update' => 'Une erreur est survenue pendant la modification de votre spectacle !',
),
'reponse' => array(
'ok' => 'Votre spectacle à bien été enregistrée. Merci de votre participation.<br /><br />
<strong>Il sera prochainement validé</strong> par l\'équipe de modération.',
),
);
return $msgs[$type_msg][$key];
}
// }}}
// {{{ getAjoutspectacleCommon()
/** Elements communs aux vues
*
*/
public function getAjoutspectacleCommon() {
// page simple sans addthis, montheatre
$this->context['view']->page_simple = true;
$this->context['view']->use_addthis = false;
$this->context['view']->no_montheatre = false;
// js en plus
$this->context['view']->js_more = array('ajax.relation.js');
}
// }}}
// {{{ getDoAction()
/** Récupérer l'action possible
*
*/
public function getDoAction($possible_do = array('edit','delete','publish'))
{
// action ?
if(!empty($_REQUEST['do']) && in_array($_REQUEST['do'],$possible_do)) {
$do = $_REQUEST['do'];
} else {
$do = null;
}
return $do;
}
// }}}
// {{{ checkStep()
/** Vérifier les états des étapes
*
* @param int $num_step Le numéro d'étape
* @return bool
*/
public function checkStep($num_step)
{
switch($num_step) {
// il y a un text
case 1:
if(!empty($this->view->data_spectacle['idtext'])) {
return true;
}
break;
// 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
case 2:
if(!empty($this->view->data_spectacle['alldirectors'])
&& !empty($this->view->data_spectacle['idtypespectacle'])
&& !empty($this->view->data_spectacle['language_src'])) {
return true;
}
break;
//il y a qqes chose dans spectacle_role actor => étape 3
case 3:
return $this->distributionExists();
break;
//il y a qqes chose dans spectacle_role coprod, prod, prodel => étape 4 (facultatif)
case 4:
return $this->productionExists();
break;
//il a une illustration => étape 5
case 5:
if(!empty($this->view->data_spectacle['illustrations'][0])) {
return true;
}
break;
//il y a un contenu associé presentation => étape 6
case 6:
if($this->em->getRepository(Contents::class)->countAssociateContent('spectacles',$this->idspectacle,6)>0) {
return true;
}
break;
//il y a au moins une date => étape 7)
case 7:
if($this->em->getRepository(Schedules::class)->countDates($this->idspectacle)>0) {
return true;
}
break;
//le statut est suppérieur à 0 => étape 8)
case 8:
if(!empty($this->view->data_spectacle['statut']) && $this->view->data_spectacle['statut']>0) {
return true;
}
break;
}
}
// }}}
// {{{ getPercentSteps()
/** Récupèrer le pourcentage de remplissage du dossier
*
* @param array $steps Les étapes
* @return string
*/
public function getPercentSteps($steps)
{
// nombre d'étapes
$nb_steps = 8;
$i = 0;
foreach($steps as $k=>$v) {
if($v['statut_step']=='ok') {
$i++;
}
}
return round($i*100/$nb_steps);
}
// }}}
// {{{ updateStatutValid()
/** Mettre à jour le statut de publication
*
*
* @param array $value Les parmètres à insérer dans la base
* @param bool $update_mode Faut-il mettre à jour les champs ou est-ce fait après
* @return void
*/
public function updateStatutValid(&$values,$update_mode=false)
{
// valid à 0 pour la validation => signaler à Philippe
$values['valid'] = 0;
// si valid était à 1 et statut à 2, on passe sur 3 => modifié
if($this->view->data_spectacle['valid']==1 && $this->view->data_spectacle['statut']>1) {
$values['statut'] = 3;
$dateNow = new \DateTime('now');
$values['dateupdate'] = $dateNow->format('Y-m-d');
}
// si demande de mise à jour
if($update_mode) {
$this->spectacles->setUpdateFields($values);
try {
$this->spectacles->setData($this->idspectacle);
} catch(\Exception $e) {
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// }}}
// {{{ getRelationField()
/** récupèrer les infos sur les relations
*
* @param string $field Un champ précis
* @return array
*/
public function getRelationField($field)
{
$fields = array(
'spectacle_author' => array(
'object' => 'persons',
),
'spectacle_director' => array(
'idrole' => 1,
'object' => 'persons',
'table' => 'spectacle_person',
),
'spectacle_actor' => array(
'idrole' => 5,
'object' => 'persons',
'table' => 'spectacle_person',
),
'spectacle_distrib' => array(
'idrole' => 15,
'object' => 'persons',
'table' => 'spectacle_person',
),
'spectacle_prod' => array(
'idrole' => 17,
'object' => 'contacts',
'table' => 'spectacle_contact',
),
'spectacle_coprod' => array(
'idrole' => 18,
'object' => 'contacts',
'table' => 'spectacle_contact',
),
'spectacle_prodel' => array(
'idrole' => 19,
'object' => 'contacts',
'table' => 'spectacle_contact',
),
'spectacle_struct_diffusion' => array(
'idrole' => 77,
'object' => 'contacts',
'table' => 'spectacle_contact',
)
);
if(!empty($fields[$field])) {
return $fields[$field];
}
return false;
}
// }}}
// {{{ spectacleExists()
/** vérifier que le spectacle n'existe pas déjç (texte + metteur en scène identique)
*
* @param array $directors Liste des identifiants des metteurs en scène
* @param int $idtext Identifiant du texte
* @return bool
*/
public function spectacleExists($directors,$idtext)
{
$sql = 'SELECT COUNT(s.`idspectacle`)
FROM spectacles s, spectacle_person sp, text_spectacle ts
WHERE sp.`idspectacle`=s.`idspectacle`
AND ts.`idspectacle`=s.`idspectacle`
AND s.`idspectacle`!='.$this->idspectacle.'
AND ts.`idtext`='.$idtext.'
AND sp.`idrole`=1
AND sp.`idperson` IN ('.join(',', $directors).') ';
$nb_spectacle = $this->spectacles->queryOne($sql);
if(!empty($nb_spectacle) && $nb_spectacle>0) {
return true;
}
return false;
}
// }}}
// {{{ getSameSpectacles()
/** récupèrer la liste des spectacles en doublons (texte + metteur en scène identique)
*
* @param array $directors Liste des identifiants des metteurs en scène
* @param int $idtext Identifiant du texte
* @return array
*/
public function getSameSpectacles($directors,$idtext)
{
$params_sql = array(
'params' => array(
'where' => ' AND s.idspectacle != '.(int)$this->idspectacle.' AND sp.idrole=1 AND sp.idperson IN ('.join(',', $directors).') AND ts.`idtext`='.$idtext,
'limit' => 'all',
),
'special' => array(
'join' => true,
),
'dbg' => array('scenes','Les mises en scène similaires'),
);
return $this->em->getRepository(Spectacles::class)->getListSpectacles($params_sql);
}
// }}}
// {{{ getSpectacleDates()
/** les dates du spectacle dans ce lieu
*
* @param int $idcontact Identifiant du contact
* @param int $idspectacle Identifiant du spectacle
* @return array
*/
public function getSpectacleDates($idcontact,$idspectacle)
{
$sql = 'SELECT * FROM schedules
WHERE idcontact='.$idcontact.'
AND idspectacle='.$idspectacle;
$schedules = $this->em->getRepository(Schedules::class);
$infos = $schedules->queryAll($sql,array(),null,true);
if(!empty($infos)) {
return $infos;
} else {
return array();
}
}
// }}}
// {{{ distributionExists()
/** vérifier s'il y a une distribution
*
* @return bool
*/
public function distributionExists()
{
if(isset($this->idspectacle)){
$sql = 'SELECT COUNT(*) as total
FROM spectacle_person
WHERE idspectacle='.$this->idspectacle.'
AND idrole=5';
$nb = $this->spectacles->queryOne($sql);
if(!empty($nb) && $nb>0) {
return true;
}
}
return false;
}
// }}}
// {{{ productionExists()
/** vérifier s'il y a une production
*
* @return bool
*/
public function productionExists()
{
if(isset($this->idspectacle)){
$sql = 'SELECT COUNT(*) as total
FROM spectacle_contact
WHERE idspectacle='.$this->idspectacle.'
AND idrole IN (17,18,19)';
$nb = $this->spectacles->queryOne($sql);
if(!empty($nb) && $nb>0) {
return true;
}
}
return false;
}
// }}}
// {{{ putRelationSession()
/** enregistrer des relations dans la session
*
* @return bool
*/
public function putRelationSession($field,$static_values=array())
{
if(!empty($static_values)) {
foreach($static_values as $v) {
$a = array(
'type' => $field,
'view_name' => $v['view_name'],
'id' => $v['id'],
);
if(!empty($v['idrole'])) {
$a['idrole'] = $v['idrole'];
}
$session_relation_select[] = $a;
$this->session->set('relation_select', $session_relation_select);
}
return true;
} else {
if(empty($this->context['form'])){
return false;
}
$values_input = $this->context['form']->get($field)->getViewData();
$values = $values_input;
if(!is_array($values_input)){
$values[] = $values_input;
}
if(is_array($values)) {
$field_infos = $this->getRelationField($field);
$session_relation_select = $this->session->get('relation_select');
foreach($values as $v) {
// cas avec idrole et idperson
if(is_array($v) && array_key_exists('idperson', $v)) {
$a = array(
'type' => $field,
'view_name' => $this->em->getRepository('TheatreCore\Entity\\'.$field_infos['object'])->getObjectTitle($v['idperson']),
'id' => $v['idperson'],
);
if(!empty($v['role'])) {
$a['idrole'] = $v['role'];
}
// cas simple
} else {
$a = array(
'type' => $field,
'view_name' => $this->em->getRepository('TheatreCore\Entity\\'.$field_infos['object'])->getObjectTitle($v),
'id' => $v,
);
}
$session_relation_select[] = $a;
$this->session->set('relation_select', $session_relation_select);
}
}
}
return true;
}
// }}}
// {{{ getRelationSession()
/** récupèrer des relations dans la session
*
* @return array
*/
public function getRelationSession($field=null,$simple_array=false, $role=false)
{
$relation_select = array();
if(!empty($this->session->get('relation_select'))) {
if(!empty($field)) {
foreach($this->session->get('relation_select') as $v) {
if($field==$v['type']) {
$relation_select[$v['id']] = $v;
}
}
} else {
return $this->session->get('relation_select');
}
}
if(!empty($relation_select) && $simple_array) {
foreach($relation_select as $k=>$v) {
if($v['type']==$field) {
if(!empty($v['idrole']) && $role) {
$relation_select_simple[$v['id']] = array('idperson' => $v['id'], 'role' => $v['idrole']);
} else {
$relation_select_simple[$v['id']] = $v['id'];
}
}
}
return $relation_select_simple;
}
return $relation_select;
}
// }}}
// {{{ deleteRelationSession()
/** supprimer des relations dans la session
*
* @return bool
*/
public function deleteRelationSession($field=null)
{
$values = $this->session->get('relation_select');
if(!is_null($values)) {
if(!empty($field)) {
foreach($values as $k=>$v) {
if($field==$v['field']) {
unset($values[$k]);
$this->session->set('relation_select', $values);
}
}
} else {
$this->session->remove('relation_select');
}
}
return true;
}
// }}}
// {{{ saveUpdateText()
/** enregistrer un nouveau text
*
* @return string
*/
public function saveUpdateText($text_author=array(),$textfictif=0,$idtext=null)
{
$title = $this->context['form']->get('title')->getData();
// commencer la transaction avec la variable error null
$error = false;
$texts = $this->em->getRepository(Texts::class);
// si texte existant, on change le titre et les auteurs
if(!empty($this->context['view']->data_spectacle['idtext']) && $textfictif==1) {
}
$datenow = new \DateTime('now');
$values_text = array(
'title' => $title,
'dateinsert' => $datenow->format('Y-m-d'), // date d'insertion
'url_clean' => uniqid(), // ajouter une url_clean temporaire
'idextranetuser' => $this->idextranetuser, // l'utilisateur
'textfictif' => $textfictif,
'publish' => 0,
'valid' => 0,
);
// commentaires
if($this->context['form']->has('comments')) {
$values_text['comments'] = $this->context['form']->get('comments')->getData();
}
// go !
// if ($texts->supports('transactions')) {
// $texts->beginTransaction();
// }
// preparer les champs
$texts->setUpdateFields($values_text);
try {
$res = $texts->setData($idtext, true);
// nouvel idtext
if(empty($idtext)) {
$idtext = $res;
}
} catch(\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
// ajout de l'auteur
if(!$error) {
try {
$texts->setRelationSelect('text_author','idperson','idtext',$text_author,$idtext,true,array());
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
// si pas d'erreur, on commit la transaction
if(!$error) {
// if($texts->in_transaction) {
// if(!$texts->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
return $idtext; // renvoyer l'id du NOUVEAU TEXTE
// }
// }
} else {
$this->context['error']['commit'] = $this->getMessage('error','commit');
}
return $error; // ou renvoyer l'erreur
}
// }}}
// {{{ saveUpdateSpectacle()
/** enregistrer un nouveau spectacle
*
* @return string
*/
public function saveUpdateSpectacle($text_spectacle=array(),$spectacle_director=array(), $textfictif=0)
{
$error = false;
// go !
// if ($this->spectacles->supports('transactions')) {
// $this->spectacles->beginTransaction();
// }
// création ou modification ?
if (empty($this->idspectacle)) {
$now = new \DateTime('now');
$values['dateinsert'] = $now->format('Y-m-d'); // date d'insertion
// ajouter une url_clean temporaire
$values['url_clean'] = uniqid();
// l'utilisateur
$values['idextranetuser'] = $this->idextranetuser;
// par défaut => mise en scène et français
$values['idtypespectacle'] = 4;
$values['language'] = 'fr';
// mettre publish à 0 la première fois => ensuite, choix de l'utilisateur
$values['publish'] = 0;
// texte fictif
$values['textfictif'] = $textfictif;
// preparer les champs
$this->spectacles->setUpdateFields($values);
try {
$res = $this->spectacles->setData($this->idspectacle, true);
} catch(\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
} else {
// texte fictif
$values['textfictif'] = $textfictif;
// preparer les champs
$this->spectacles->setUpdateFields($values);
try {
$res = $this->spectacles->setData($this->idspectacle, true);
} catch(\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
// changer les status de validation
$values = array();
$this->updateStatutValid($values);
}
// nouvel enregistrement ?
if(empty($this->idspectacle)) { // on a le nouveau spectacle
$this->idspectacle = $res;
$log_action = 'create';
} else {
$log_action = 'update';
}
// textes liés
if(!$error) {
try {
$this->spectacles->setRelationSelect('text_spectacle','idtext','idspectacle',$text_spectacle,$this->idspectacle);
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
// Id de la bio + code du role
if(!$error) {
if(is_array($spectacle_director)) {
try {
$this->spectacles->setDistribution($this->idspectacle,$spectacle_director,true,true);
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}
// metteurs en scène liés
/*if(!$error) {
if(is_array($spectacle_director)) {
try {
$this->spectacles->setRole($this->idspectacle,1,$spectacle_director,null); // 1 => metteur en scène
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
}*/
// commiter, loguer les actions et informer la vue
if(!$error) {
// commiter la transaction
// if ($this->spsectacles->in_transaction) {
// if(!$this->spectacles->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
$this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
// logue l'action sur la fiche
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,$log_action,$this->idextranetuser);
// générer l'URL clean
// require_once PATH_LIBS.'DB/Classes/UtilsEdit.php';
$this->utilsEdit->createUrlClean($this->idspectacle,$this->spectacles,'spectacles');
//
// }
// }
} else { // erreur dans le commit
if ($this->idspectacle) {
$this->context['error']['spectacles_insert'] = $this->getMessage('error','insert');
} else {
$this->context['error']['spectacles_update'] = $this->getMessage('error','update');
}
}
}
// }}}
// {{{ updateTextSpectacle()
/** mettre à jour le texte d'un spectacle
*
* @return string
*/
public function updateTextSpectacle($text_spectacle=array(),$textfictif=0,$delete_old_text=false)
{
$error = false;
// go !
// if ($this->spectacles->supports('transactions')) {
// $this->spectacles->beginTransaction();
// }
// texte fictif
$values['textfictif'] = $textfictif;
// preparer les champs
$this->spectacles->setUpdateFields($values);
try {
$res = $this->spectacles->setData($this->idspectacle, true);
} catch(\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
// textes liés
if(!$error) {
try {
$this->spectacles->setRelationSelect('text_spectacle','idtext','idspectacle',$text_spectacle,$this->idspectacle);
} catch (\Exception $e) {
$error = true;
$this->logger->error($e->getMessage());
$this->logger->error($e->getTraceAsString());
}
}
// supprimer l'ancien text
if(!empty($this->view->data_spectacle['idtext']) && $delete_old_text) {
$this->em->getRepository(Texts::class)->deleteData($this->view->data_spectacle['idtext']);
}
// commiter, loguer les actions et informer la vue
if(!$error) {
// commiter la transaction
// if ($this->spectacles->in_transaction) {
// if(!$this->spectacles->commit()) {
// $this->context['error']['commit'] = $this->getMessage('error','commit');
// } else {
$this->context['view']->reponse['commit'] = $this->getMessage('reponse','ok');
// logue l'action sur la fiche
$this->em->getRepository(UserAction::class)->setAction('spectacles',$this->idspectacle,'update',$this->idextranetuser);
// }
// }
} else { // erreur dans le commit
$this->context['error']['spectacles_update'] = $this->getMessage('error','update');
}
}
// }}}
// {{{ aside_ajoutspectacle()
/** aside droite
*
* @return string
*/
public function getAside_ajoutspectacle()
{
$menu_contrib = array(
array(
'name' => $this->context['tr']->trans('montheatre_menu_mes_spectacles'),
'key_url' => '/montheatre/spectacles'
),
array(
'name' => $this->context['tr']->trans('montheatre_menu_mes_videos'),
'key_url' => '/montheatre/videos'
),
);
$this->asides->load(['url_lists_alone' => array(
'exec' => ['color' => 'context'],
'php' => [
'method' => 'asidesUrlLists',
'urls' => $menu_contrib,
'url' => 'key_url'
],
'title' => $this->context['tr']->trans('montheatre_menu_mes_contributions')
)]);
$this->asides->load(['common_lettre_info' => array(
'exec' => ['color' => 'context']
)]);
// if($this->context['action'] == 'presentation' ) {
// $this->asides->load('common_aide_formulaire');
// }
}
// }}}
}