<?php
namespace App\PaaBundle\Controller;
use App\PaaBundle\Controller\PAABaseController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use App\Limoog\PartageBundle\Component\cParametresBDD;
use App\PaaBundle\Component\Paa\Paa_Constantes;
use App\PaaBundle\Entity\actibases;
use App\PaaBundle\Entity\actiSsgroupesacti; // DM 20240521
use App\PaaBundle\Security\PaaVoter;
use Symfony\Component\Config\Definition\Exception\Exception;
use \DateTime;
use Symfony\Component\HttpFoundation\JsonResponse;
class DefaultController extends PAABaseController {
protected function PAA_Autorise(String $psNomTable, Boolean $pbListe, Boolean $pbEcriture) {
return true;
}
// Page par défault (e.g. page planning pour Etudiant et Enseignant)
public function defaultAction(Request $request) {
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
// Personne n'est authentifié
return $this->redirectToLogin($request);
}
$loUser = $this->getUser();
$laRolesUser = $loUser->getRoles();
// LG 20230210 old if (count($laRolesUser) == 2 && ($laRolesUser[0] == 'ROLE_ETUDIANT' || $laRolesUser[0] == 'ROLE_ENSEIGNANT')) {
if (count($laRolesUser) == 2 && ($laRolesUser[0] == 'ROLE_ETUDIANT' || $laRolesUser[0] == 'ROLE_ENSEIGNANT' || $laRolesUser[0] == 'ROLE_ENSEIGNANT_POSEDIVERS')) {
// 2 rôles : le rôle user (qui est attribué par Sympfony pour tout le monde) + un rôle étudiant ou enseignant
// Page par défaut : planning
$lsRes = $loUser->getcRes();
// $lsRes = "I1000125" ;
$lvSemaine = Null; // par défaut
// LG 20230210 old return $this->planningAction($request, $lvSemaine, $lsRes);
return $this->redirectToroute("paa_planning", ["pvSemaine"=>"-", "psLstRes"=>$lsRes]);
} else {
// Page par défaut : index
return $this->indexAction($request);
}
}
// Page d'index
public function indexAction(Request $request) {
if ($LoginResponse = $this->RedirectIfDisconnected($request, 'ROLE_USER', $request->headers->get('referer'))) {
// L'utilisateur en cours n'est pas authentifié, ou sa session a expiré
// On retourne à la page appellante ($request->headers->get('referer'))
return $LoginResponse;
}
$laOptions = Array();
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
if($loUser = $this->getUser()){
$laRolesUser = $loUser->getRoles();
// JM 20211223 OLD On restreint les droits sur la page d'accueil a ROLE_ENSEIGNANT_POSEDIVERS
//if (count($laRolesUser) == 2 && ($laRolesUser[0] == 'ROLE_ETUDIANT' || $laRolesUser[0] == 'ROLE_ENSEIGNANT')) {
if (count($laRolesUser) == 2 && ($laRolesUser[0] == 'ROLE_ETUDIANT' || $laRolesUser[0] == 'ROLE_ENSEIGNANT' || $laRolesUser[0] == 'ROLE_ENSEIGNANT_POSEDIVERS')) {
return $this->render('@Paa/Default/indexEtudiant.html.twig', $laOptions);
}
}
//Ajout de la condition pour vérifier estpucette
if ($this->estpucette()) {
$lsDateDébut = $laOptions["pdDebut"] ;
if (estSemaineType($lsDateDébut)) {
$laOptions['psOngletActif'] = 'OngletSemaineType';
} else {
$laOptions['psOngletActif'] = 'OngletSemaineCourante';
}
return $this->render('@Paa/Default/indexpucette.html.twig', $laOptions);
}
// Effectuer les traitements pour l'affichage
return $this->render('@Paa/Default/index.html.twig', $laOptions);
}
// $request : la requête injectée par Symfony
// $psNomTable : le nom de la table qu'on souhaite afficher
//($pbPopup) : non-vide dans le cas d'un appel pour popup
// LG 20240704 old public function pageAvecGrilleAction(request $request, $psNomTable, $pbPopup) {
public function pageAvecGrilleAction(request $request, $psNomTable, $pbPopup = false, $psOnglet = null) {
if ($this->RedirectIfNotGranted($request, $this->isGranted(PaaVoter::VOIR . $psNomTable), $response))
return $response;
$lsTwig = $psNomTable;
// S'inscrire à l'événement postConnect pour effectuer l'identification sous Postgres dès l'ouverture de la connexion
// LG 20170728 déac $this->suscribeToPostConnectionEvent();
// Récupérer le manager Doctrine
$m = $this->getDoctrineManager();
$loListeEntités = '';
$loListeSéances = '';
$this->refreshSession($request);
// Récupérer la liste des entités à utiliser pour le traitement demandé
if ($psNomTable == 'activitesTrad' || $psNomTable == 'activites') {
$pvDateDebut = $request->getSession()->get('dateDebut');
$numSemaineDebut = getNoSemaine($pvDateDebut);
$pvDateFin = $request->getSession()->get('dateFin');
$numSemaineFin = getNoSemaine($pvDateFin);
if ($numSemaineFin != $numSemaineDebut) {
$this->addFlash("warning", "Vous avez choisi deux semaines différentes, mais cet écran ne peut prendre en charge qu'une seule semaine. "
. "Seules les activités de la semaine du " . date("d/m/Y", strtotime($pvDateDebut)) . " seront affichées.");
}
$lbActiSysteme = $request->getSession()->get('activitésActiSysteme');
if($lbActiSysteme == null) {
$lbActiSysteme = 'true';
}
$lbActiGenerique = $request->getSession()->get('activitésActiGenerique');
if($lbActiGenerique == null) {
$lbActiGenerique = 'true';
}
$lsActiBase = $request->getSession()->get('activitésActiBase');
if($lsActiBase == null) {
$lsActiBase = '\'SansFiltre\'';
}
$lsIntervenant = $request->getSession()->get('activitésInterv');
if($lsIntervenant == null) {
$lsIntervenant = '\'SansFiltre\'';
}
$lsUsager = $request->getSession()->get('activitésUsager');
if($lsUsager == null) {
$lsUsager = '\'SansFiltre\'';
}
$lsSalle = $request->getSession()->get('activitésSalle');
if($lsSalle == null) {
$lsSalle = '\'SansFiltre\'';
}
$lsGroupe = $request->getSession()->get('activitésGroupe');
if($lsGroupe == null) {
$lsGroupe = '\'SansFiltre\'';
}
$liEtablissement = $request->getSession()->get('iEtablissement');
$loListeEntités = $m->getRepository("PaaBundle:activitesTrad")->findAllPourSemaine($numSemaineDebut, $lbActiSysteme, $lbActiGenerique, $lsActiBase, $lsIntervenant, $lsUsager, $lsSalle, $lsGroupe);
$psNomTable = 'activites';
} else if ($psNomTable == 'cours') {
$pvDateDebut = $request->getSession()->get('dateDebut');
$numSemaineDebut = getNoSemaine($pvDateDebut);
$pvDateFin = $request->getSession()->get('dateFin');
$numSemaineFin = getNoSemaine($pvDateFin);
if ($numSemaineFin != $numSemaineDebut) {
$this->addFlash("warning", "Vous avez choisi deux semaines différentes, mais cet écran ne peut prendre en charge qu'une seule semaine. "
. "Seules les cours de la semaine du " . date("d/m/Y", strtotime($pvDateDebut)) . " seront affichées.");
}
$lbActiSysteme = $request->getSession()->get('activitésActiSysteme');
if($lbActiSysteme == null) {
$lbActiSysteme = 'true';
}
$lbActiGenerique = $request->getSession()->get('activitésActiGenerique');
if($lbActiGenerique == null) {
$lbActiGenerique = 'true';
}
$lsActiBase = $request->getSession()->get('activitésActiBase');
if($lsActiBase == null) {
$lsActiBase = '\'SansFiltre\'';
}
$lsIntervenant = $request->getSession()->get('activitésInterv');
if($lsIntervenant == null) {
$lsIntervenant = '\'SansFiltre\'';
}
$lsUsager = $request->getSession()->get('activitésUsager');
if($lsUsager == null) {
$lsUsager = '\'SansFiltre\'';
}
$lsSalle = $request->getSession()->get('activitésSalle');
if($lsSalle == null) {
$lsSalle = '\'SansFiltre\'';
}
$lsGroupe = $request->getSession()->get('activitésGroupe');
if($lsGroupe == null) {
$lsGroupe = '\'SansFiltre\'';
}
$liEtablissement = $request->getSession()->get('iEtablissement');
// LG 20240808 old $loListeEntités = $m->getRepository("PaaBundle:activitesTrad")->findAllPourSemaine($numSemaineDebut, $lbActiSysteme, $lbActiGenerique, $lsActiBase, $lsIntervenant, $lsUsager, $lsSalle, $lsGroupe);
$loListeEntités = $m->getRepository("PaaBundle:activitesTrad")->findAllPourSemaine($numSemaineDebut, $lbActiSysteme, $lbActiGenerique, $lsActiBase, $lsIntervenant, $lsUsager, $lsSalle, $lsGroupe, true);
// LG 20240808 old $psNomTable = 'activites';
$psNomTable = 'cours';
} else if ($psNomTable == 'seancesTrad') {
$pvDateDebut = $request->getSession()->get('dateDebut');
$pvDateFin = $request->getSession()->get('dateFin');
if (estSemaineRecurrente($pvDateDebut)) {
// AV 20230428
// Pas de séances dans les semaines récurrentes
$laOptions = array('pdDateDébut' => date('Y-m-d', strtotime('monday this week')),
'pdDateFin' => date('Y-m-d', strtotime('next sunday')),
'psNomTable' => $psNomTable,
'poController' => $this,
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa/Planning/Planning2_SemaineRecurrente.html.twig', $laOptions);
}
$loListeSéances = $m->getRepository("PaaBundle:seancesTrad")->findSeancesParDate($pvDateDebut, $pvDateFin, '','false', true, false, false);
$psNomTable = 'seances';
} else if ($psNomTable == 'groupes'){
$lvDateDebut = $request->getSession()->get('dateDebut');
$lvDateFin = $request->getSession()->get('dateFin');
$liEtablissement = $request->getSession()->get('iEtablissement');
// LG 20240219 début
// $lsParamètres = "vDebut=$lvDateDebut&vFin=$lvDateFin&iEtablissement=$liEtablissement";
$lbPresent = $request->getSession()->get('groupesAffichePresents');
$lbSortis = $request->getSession()->get('groupesAfficheSortis') ;
$lbPasEntres = $request->getSession()->get('groupesAffichePasEntrés') ;
$lvIntervenants = $request->getSession()->get('groupesiIntervenant') ;
if (is_array($lvIntervenants)) {
$lsLstIntervenants = implode(",", $lvIntervenants) ;
} else {
// Supprimer le "I" devant l'id de l'intervenant
$lsLstIntervenants = substr($lvIntervenants, 1) ;
}
$lsParamètres = "vDebut=$lvDateDebut&vFin=$lvDateFin&iEtablissement=$liEtablissement&iIntervenant=$lsLstIntervenants&lAffiche_PasEntrés=$lbPasEntres&lAffiche_Sortis=$lbSortis&lAffiche_Présents=$lbPresent";
// LG 20240219 fin
$repo = $m->getRepository("PaaBundle:groupes");
$loListeEntités = $repo->findAllAvecParametres($lsParamètres);
} else if ($psNomTable == 'services'){
$liEtablissement = $request->getSession()->get('iEtablissement');
$lsParamètres = "iEtablissement=$liEtablissement";
$repo = $m->getRepository("PaaBundle:services");
$loListeEntités = $repo->findAllAvecParametres($lsParamètres);
} else if ($psNomTable == 'usagers'){
$lvDateDebut = $request->getSession()->get('dateDebut') ;
$lvDateFin = $request->getSession()->get('dateFin') ;
$liEtablissement = $request->getSession()->get('iEtablissement') ;
$lbPresent = $request->getSession()->get('usagersAffichePresents');
$lbSortis = $request->getSession()->get('usagersAfficheSortis') ;
$lbPasEntres = $request->getSession()->get('usagersAffichePasEntrés') ;
$lvGroupes = $request->getSession()->get('usagersiGroupe') ;
if (is_array($lvGroupes)) {
$liGroupes = implode(",", $lvGroupes) ;
} else {
// Supprimer le "G" devant l'id du groupe
$liGroupes = substr($lvGroupes, 1) ;
}
$lbUniquePeriode = $request->getSession()->get('usagersPeriodeDemandée') ;
$lsParamètres = "vDebut=$lvDateDebut&vFin=$lvDateFin&iEtablissement=$liEtablissement&iGroupe=$liGroupes&lGroupePourPériodeDemandée=$lbUniquePeriode&lAffiche_PasEntrés=$lbPasEntres&lAffiche_Sortis=$lbSortis&lAffiche_Présents=$lbPresent";
$loListeEntités = $m->getRepository("PaaBundle:" . $psNomTable)->findAllAvecParametres($lsParamètres, true);
} else if ($psNomTable == 'intervenants'){
$lvDateDebut = $request->getSession()->get('dateDebut');
$lvDateFin = $request->getSession()->get('dateFin');
$liEtablissement = $request->getSession()->get('iEtablissement');
$lbPresent = $request->getSession()->get('intervenantAffichePresent');
$lbSortis = $request->getSession()->get('intervenantAfficheSortis');
$lbPasEntres = $request->getSession()->get('intervenantAffichePasEntrés');
$liGroupes = $request->getSession()->get('intervenantiGroupe');
$liService = $request->getSession()->get('intervenantiService');
$liSpecialite = $request->getSession()->get('intervenantiSpecialité');
$lbRemplaçants = $request->getSession()->get('intervenantRemplaçants');
$lbIntervExt = $request->getSession()->get('intervenantIntervExt');
$lsLibre1 = $request->getSession()->get('intervenantcIntervenant_Libre1');
$lsLibre2 = $request->getSession()->get('intervenantcIntervenant_Libre2');
$lsParamètres = "vDebut=$lvDateDebut&vFin=$lvDateFin&iEtablissement=$liEtablissement&iGroupe=$liGroupes&lAffiche_PasEntrés=$lbPasEntres&lAffiche_Sortis=$lbSortis&lAffiche_Présents=$lbPresent&iService=$liService&iSpécialité=$liSpecialite&lAffiche_Remplacants=$lbRemplaçants&lAffiche_Extérieurs=$lbIntervExt&cIntervenant_Libre1=$lsLibre1&cIntervenant_Libre2=$lsLibre2";
$loListeEntités = $m->getRepository("PaaBundle:" . $psNomTable)->findAllAvecParametres($lsParamètres);
} else if ($psNomTable == 'changelog') {
$loListeEntités = $m->getRepository("PaaBundle:changelog")->getAllHierarchique(false);
} else if ($psNomTable == 'salles') {
$liEtablissement = $request->getSession()->get('iEtablissement');
$lsParamètres = "iEtablissement=$liEtablissement";
$loListeEntités = $m->getRepository("PaaBundle:salles")->findAllAvecParametres($lsParamètres);
} else if ($psNomTable == 'caisses') {
$liType_caisse = $request->query->get("type_caisse");
$lbCboTypeCaisseDisabled = $request->query->get("cboTypeCaisseDisabled");
$loListeEntités = $m->getRepository("PaaBundle:caisses")->findAllNonSysteme($liType_caisse);
}
else if ($psNomTable == 'module'){
$loListeEntités = $m->getRepository("PaaBundle:" . $psNomTable)->findAll();
}
else if ($psNomTable == 'diplomes'){
$loListeEntités = $m->getRepository("PaaBundle:" . $psNomTable)->findAll();
} else {
$loListeEntités = $m->getRepository("PaaBundle:" . $psNomTable)->findBy(array() /* Pas de filtre ni de tri */
//,array('iidAnnee' => 'ASC') // On trie par date décroissante
);
}
$laOptions = array(
'poListeEntités' => $loListeEntités,
'poListeSéances' => $loListeSéances,
'psNomTable' => $psNomTable,
);
if ($psNomTable == 'caisses') {
$laOptions['piTypeCaisse'] = $liType_caisse;
$laOptions['pbCboTypeCaisseDisabled'] = $lbCboTypeCaisseDisabled;
}
$laOptions['psOnglet'] = $psOnglet ; // LG 20240704
$laOptions['pbSansMenu'] = ($pbPopup?true:false) ;
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa/pageAvecGrille/' . $lsTwig . '.html.twig', $laOptions);
}
protected function getLibelléTable(string $psNomTable) {
if ($psNomTable == 'annees') {
return "années";
} else if ($psNomTable == 'salles') {
return "équipements";
} else if ($psNomTable == 'etablissements') {
return "établissements";
} else if ($psNomTable == 'actibases') {
return "activités de base";
} else if ($psNomTable == 'actiGroupesacti') {
return "groupes d'activités de base";
} else if ($psNomTable == 'actiSsgroupesacti') {
return "sous-groupes d'activités de base";
} else if ($psNomTable == 'users') {
return "utilisateurs de l'application";
} else if ($psNomTable == 'tmails2') {
return "mails";
} else if ($psNomTable == 'conventions') {
return "conventions collectives";
} else if ($psNomTable == 'joursferies') {
return "jours fériés";
} else if ($psNomTable == 'groupesDroits') {
return "groupes de droits des utilisateurs";
} else if ($psNomTable == 'caisses') {
return "organismes de rattachement des usagers";
} else if ($psNomTable == 'specialites') {
return "spécialités des intervenants";
} else if ($psNomTable == 'caissesType') {
return "types d'organismes";
} else if ($psNomTable == 'modelesHoraires') {
return "modèles horaires";
} else if ($psNomTable == 'contrainteshoraires') {
return "contraintes horaires";
} else if ($psNomTable == 'seances') {
return "séances";
} else if ($psNomTable == 'typesmatieres') {
return "types de matières";
} else if ($psNomTable == 'typesclasses') {
return "types de classes";
}
return $psNomTable;
}
public function pageEntityFormAction($psNomTable, request $request, $piId) {
if ($this->RedirectIfNotGranted($request, $this->isGranted(PaaVoter::VOIR . $psNomTable, $piId), $response))
return $response;
return $this->entityFormAction($request, $psNomTable, $piId, "", "", true);
}
// Déterminer si l'utilisateur a les droits d'écriture et/ou de lecture
// Si pas droits de lecture, lance une exception
// Sinon, renvoie true si droits d'écriture, false sinon
// LG 20191217
public function getDroitsEcritureLectureOrDie($psNomTable, $piId) {
$lbADroitDEcriture = $this->isGranted(PaaVoter::MODIFIER . $psNomTable, $piId);
if ($lbADroitDEcriture) {
$lbADroitDeLecture = true;
} else {
$lbADroitDeLecture = $this->isGranted(PaaVoter::VOIR . $psNomTable, $piId);
}
if (!$lbADroitDeLecture) {
throw new \Exception("Désolé, vous ne disposez pas de droits suffisants pour afficher ces informations.");
}
return $lbADroitDEcriture;
}
// $request : l'objet request Symfony
// $psNomTable : nom de la table/entité pour laquelle on souhaite récupérer une entité
// $piId : Id de l'entité demandée
// $psOnglet : l'onglet enttiyForm demandé
// $psContexte : informations de context (utilisé pour distinguer le contexte "usagers du groupes" du contexte "Groupes de l'usager")
//($pbDansPage) : ajouté par pageEntityFormAction pour spécifier ce ce sera une page complète (cad avec les menus)
public function entityFormAction(Request $request, $psNomTable, $piId, $psOnglet, $psContexte = null, $pbDansPage = false) {
if ($this->RedirectIfNotGranted($request, $this->isGranted(PaaVoter::VOIR . $psNomTable, $piId), $response)) {
return $response;
}
if (strtolower($psOnglet) == "null") $psOnglet = null ;
// Déterminer les droits de lecture et d'écriture
$lbADroitDEcriture = $this->getDroitsEcritureLectureOrDie($psNomTable, $piId);
// Reprise de cas particuliers de noms de table
if ($psNomTable == 'intervenantsAdresse') {
$psNomTable = 'intervenants';
} else if ($psNomTable == 'intervenantsSécurité') {
$psNomTable = 'intervenants';
} else if ($psNomTable == 'activitesTrad' || $psNomTable == 'activites') {
//Cas particulier, affichage de activitesTrad, mais form de activites demandé
$psNomTable = 'activites';
if (!$psOnglet) {
$psOnglet = 'OngletGénéral';
}
} else if ($psNomTable == 'seancesTrad' || $psNomTable == 'seances') {
//Cas particulier, affichage de seancesTrad, mais form de actiRealisation demandé
$psNomTable = 'seances';
if (!$psOnglet) {
$psOnglet = 'OngletGénéral';
}
}
$lsNomEntité = $psNomTable ;
if ($psNomTable == "creneaux") {
$lsNomEntité = "seances" ;
}
// LG 20240808 début
else if ($psNomTable == 'cours') {
// Cas particulier, affichage des cours
if (!$psOnglet) {
$psOnglet = 'OngletGénéral';
}
$lsNomEntité = 'activites';
$lsType = 'cours' ;
$lsTwig = 'cours' ;
}
// LG 20240808 fin
$em = $this->getDoctrineManager();
$loEntité = $em->getRepository("PaaBundle:" . $lsNomEntité)->find($piId);
if ($loEntité !== null) {
$loEntité->setEntityManager($em);
}
// LG 20230901 Pour tests
// $r = $em->getRepository("PaaBundle:seances") ;
// $a = $r->rtvCurCréneaux('G1000086', '1901/01/28', '1901/02/03') ;
// $o = new \stdClass();
// $o->iid_seance = 1 ;
// $o->ctype_res = 'G' ;
// $o->iid_res = 1 ;
// $o->tdebut = "1901-01-28 08:00:00" ;
// $o->tfin = "1901-01-28 10:00:00" ;
// $o->clibelle = "Lundi 8h00-10h00" ;
// $a[] = $o ;
$lsLstInfos = '';
$libelleActi = '';
$lstJoursFeries = '';
if ($psNomTable == 'activites') {
$liActiBase = 0 ;
$laLstRessourcesForcées = null ;
if ($loEntité) {
// Une activité est demandée
$laLstRessourcesForcées = $loEntité->getressources();
$liActiBase = $loEntité->getActibase()->getIidactibase() ;
} else if ($request->request->get("psLstRes")) {
// Pas d'activité demandée, mais liste de ressources fournie (sous forme de chaine séparée par des virgules)
$lsLstRessourcesForcées = $request->request->get("psLstRes") ;
$laLstRessourcesForcées = explode(",", $lsLstRessourcesForcées) ;
}
if ($laLstRessourcesForcées) {
// Récupérer la liste des activités de base communes à toutes les ressources sélectionnées
$lsLstInfos = $em->getRepository("PaaBundle:actibases")->rtvCurCompetencesCommunes($laLstRessourcesForcées, false, $liActiBase, $this->getIdEtablissementCourant());
} else if($liActiBase) {
// Récupérer au moins l'activité de base actuellement choisie
$lsLstInfos = $em->getRepository("PaaBundle:actibases")->rtvCurCompetencesCommunes([''], false, $liActiBase, $this->getIdEtablissementCourant());
} else {
$lsLstInfos = [] ;
}
if ($loEntité && $psOnglet== "OngletLibellé") {
$idActivite = $loEntité->getId();
$libelleActi = $em->getRepository("PaaBundle:" . $psNomTable)->rtvlibelleacti($idActivite, 400511 + pow(2, 21)); //1449087 sans balise body, mais visiblement aucun effet
if ($_ENV['APP_ENV'] === 'dev') {
$libelleActi = "Activité : " . $loEntité->getId() . "<br>" . $libelleActi ;
}
}
// LG 20240808 début
// }
// if ($psNomTable == 'seances') {
} else if ($psNomTable == 'seances') {
// LG 20240808 fin
if ($loEntité) {
$lbEstAbsenceOuPresence = $loEntité->estAbsenceOuPresence() ;
$lbEstSemaineType = estSemaineType($loEntité->getTdebut()) ;
if ($psOnglet == "OngletParticipants" && $lbEstAbsenceOuPresence) {
// L'onglet participants est masqué pour les absences et les présences
$psOnglet = "OngletGénéral" ;
}
if ($psOnglet == "OngletSérie" and ($lbEstAbsenceOuPresence or $lbEstSemaineType)) {
// L'onglet série est masqué pour les absences et les présences, et dans le cas de la semaine-type
$psOnglet = "OngletGénéral" ;
}
} else {
// Au cas où ...
$psOnglet = "OngletGénéral" ;
}
if ($psOnglet == "OngletParticipants") {
$lsLstInfos = $em->getRepository("PaaBundle:seancesRessources")->RtvCurRessourcesSeance_TtesInfos(
$piId // $piId_Seance
, '' // $psLstType_Res = ''
, true // $pbListeDesUsagersDuGroupe = 'false'
, true // $pbToutesRessources = 'false'
, 2 // $lcEvalueCompétence = 'null'
, 1 // $piEvalueSiDisponible = 'null'
, null // $piId_Acti = null
, null // $piId_ActiBase = null
, null // $ptDébutSéance = null
, null // $ptFinSéance = null
, false // $pbEvalueIncompatibilitésUsagers = false
, false // $pbEvalueHeuresFaitesEtAFaireUsagers = false
, null // $pcLstResFiltre = null
, false // $pbEvalueUneSéanceParJourUsagers = false
, false // $pbEvalueHeuresFaitesEtAFaireGroupes = false
, true // $pbInclParticipationsAnnulées = false
, false // $pbLblUsagerInclutNomGroupe = false
, null // $pvInfosSuppl = null
, null // $pbInclInfosFlags = null
);
}
if ($loEntité) {
$idActivite = $loEntité->getActivité()->getId();
$libelleActi = $em->getRepository("PaaBundle:activites")->rtvlibelleacti($idActivite, 5020799, 8, $loEntité->getId()); //6069375 sans balise body, mais visiblement aucun effet
if ($_ENV['APP_ENV'] === 'dev') {
$libelleActi = "Séance : " . $loEntité->getId() . "<br>" . $libelleActi ;
}
}
}
$laFormOptions = array();
if (!isset($lsType)) {
$lsType = $psNomTable;
}
$lsSousType = "";
if (!isset($lsTwig)) {
$lsTwig = $psNomTable;
}
$laOptionsSécurité = null;
if ($psNomTable == 'users') {
if ($this->isGranted("ROLE_ADMIN")) {
// L'utilisateur en cours a le droit de modifier les droits
$lsSousType = "PlusAdmin";
}
}
if ($psNomTable == 'intervenants') {
// Assigner le sous type dans intervenants
if ($psOnglet == 'OngletAdresse') {
$lsSousType = "Adresse";
}
if ($psOnglet == 'OngletSécurité') {
$lsSousType = "Sécurité";
$laOptionsSécurité = \App\PaaBundle\Component\Paa\Paa_Constantes_Sécurité::getOptionsSécurité();
}
}
if ($psNomTable == 'usagers' && $psOnglet == 'OngletUsagerStatuts') {
$lsSousType = "Statuts";
}
if ($psNomTable == 'groupesDroits') {
$laOptionsSécurité = \App\PaaBundle\Component\Paa\Paa_Constantes_Sécurité::getOptionsSécurité();
}
if (($psNomTable == 'intervenants' || $psNomTable == 'usagers' || $psNomTable == 'groupes' || $psNomTable == 'salles' || $psNomTable == 'seances' || $psNomTable == 'activites')
&& ($psOnglet == 'OngletCompétences') || substr($psOnglet, 0, 18) == 'OngletParticipants' || $psOnglet == 'OngletSérie' || $psOnglet == 'OngletLibellé' || $psOnglet == 'OngletSeanceGraphique' || $psOnglet == 'OngletSeanceListe') {
$lsSousType = "SansProprietes";
}
$lsRepertoire = '';
$lsSousRepTwig = '';
if (strtolower($psNomTable) == 'actiSsgroupesacti' || strtolower($psNomTable) == 'actigroupesacti' || strtolower($psNomTable) == 'actibases') {
$lsRepertoire = "ActiBases\\";
$lsSousRepTwig = 'actiBases/';
}
if (strtolower($psNomTable) == 'seances' && $psOnglet == 'OngletSérie') {
//Dans le cas de l'onglet Série, on utilise le formulaire de série
$lsType = 'seances_seriesseances';
$psNomTable = 'seances';
$lsTwig = 'seances' ;
$lstJoursFeries = $em->getRepository("PaaBundle:seriesseances")->getJoursFeries(date("Y") . '-01-01', date("Y") . '-12-31');
$lsLstSerie = [];
if ($loEntité && $loEntité->getIserie()) {
$lsLstSerie = $em->getRepository("PaaBundle:seriesseances")->findSeriesSeance($loEntité->getIserie(), 'null', 'null', 'null', 'false');
}
$lsSousType = '';
$lsLstInfos = $lsLstSerie;
}
$lsForm = 'App\PaaBundle\Form\\' . $lsRepertoire . $lsType . $lsSousType . 'Type';
if ($psNomTable == 'seances') {
// Nécessaire pour le cas où pbGèreLieuxSéances est true (LG 20230331)
$laFormOptions['pbGèreLieuxSéances'] = $this->getParamètresBDD()->lGèreLieuxSéances() ;
};
$laFormOptions['doctrine'] = $this->get('doctrine'); // Injecter Doctrine dans le form builder
$laFormOptions['controller'] = $this; // Injecter le controleur dans le form builder
$loForm = $this->createForm($lsForm, $loEntité, $laFormOptions);
if ($this->isGranted('ROLE_CONCEPTEUR')) {
$lbEstEnseignantRemarque = false;
} else if ($this->isGranted('ROLE_ENSEIGNANT_POSEDIVERS')) {
$lbEstEnseignantRemarque = true;
} else {
$lbEstEnseignantRemarque = false;
}
$laOptions = array(
'poEntité' => $loEntité,
'poForm' => $loForm->createView(),
'psNomTable' => $psNomTable,
'psLibelléTable' => $this->getLibelléTable($psNomTable),
'bAutoriseListing' => false,
'psOngletActif' => $psOnglet,
'lstJoursFeries' => $lstJoursFeries,
'lsLstInfos' => $lsLstInfos,
'libelleActi' => $libelleActi,
'poController' => $this, // Injecter le contrôleur
'paOptionsSécurité' => $laOptionsSécurité,
'pbEstEnseignantRemarque' => $lbEstEnseignantRemarque,
);
$laOptions["psContexte"] = $psContexte?:"toto"; // LG 20230120
if (isset($lsLstRessourcesForcées)) $laOptions["psLstRessourcesForcées"] = $lsLstRessourcesForcées ;
if (($psNomTable == 'intervenants') && $psOnglet == 'OngletAdresse') {
$laOptions["psURLTable"] = "intervenantsAdresse";
}
if (($psNomTable == 'intervenants') && $psOnglet == 'OngletSécurité') {
$laOptions["psURLTable"] = "intervenantsSécurité";
}
if (($psNomTable == 'intervenants' || $psNomTable == 'usagers' || $psNomTable == 'groupes' || $psNomTable == 'salles') && $psOnglet == 'OngletCompétences') {
//récupération de la liste des AB, GAB, SGAB depuis la bdd
$o = getORessources($a, $b);
$loConnexion = $this->getDoctrineConnection();
$liEtablissement = $this->getIdEtablissementCourant() ;
$resultat = $o->getActiGabSgabArthur($r, $loConnexion, $liEtablissement);
//convertion d'un array en un objet afin que l'on puisse créer le treeview
$loRepo = $this->get('doctrine')->getRepository("PaaBundle:ressourcesActibases");
$res = $loRepo->remplirNoeudArthur(null, $resultat);
//on rajoute le node 'tous' qui permet de séléctionner toutes les compétences.
array_unshift($res->nodes, (object) array('ctype' => 'GAB',
'cid' => 'GAB0',
'text' => 'Tous',
'icouleur' => 16777215,
'iid' => 0,
'cid_parent' => null));
$laOptions["psDataNodes"] = json_encode($res->nodes);
$loListeActiIntervenants = $loRepo->getActivitésOfRessource($psNomTable, $piId, '', null, $liEtablissement) ;
$laOptions["poListeActiBases"] = $loListeActiIntervenants;
$laOptions["pbAfficheCapacité"] = ($psNomTable == 'intervenants' || $psNomTable == 'usagers' || $psNomTable == 'salles');
$laOptions["psTitreColNom"] = "Activité de base";
}
if ((($psNomTable == 'seances')) || $psNomTable == 'caisses') {
$laOptions["pbGèreLieuxSéances"] = $this->getParamètresBDD()->lGèreLieuxSéances();
}
if ($psNomTable == 'seances') {
if (estPucette()) {
// On est dans le cas Pucette
// Faire la liste des créneaux pour la fournir au twig, si un groupe participe à la séance
$laCreneaux = [];
// TODO : faire passer l'info sur les créneaux en cache
$pbCreneauxEnCache = false ;
if ($pbCreneauxEnCache == "false") $pbCreneauxEnCache == false ;
if (!$pbCreneauxEnCache) {
$lsLstGroupes = $loEntité->getLstRessources("G") ;
}
if (!$pbCreneauxEnCache && $lsLstGroupes) {
// Cette séance concerne au moins un groupe
// Pas de créneaux en cache, on les récupère
$seancesRepo = $em->getRepository("PaaBundle:seances");
$ldDate = $loEntité->getDate() ;
if (estSemaineType($ldDate)) {
// Prendre toutes les dates de la ST
$liSemaine = -1 ;
} else {
// Prendre toutes les dates de la semaine de la date demandée
$liSemaine = getNoSemaine($ldDate) ;
}
$ldDébut = GetDateAvecJour(1, $liSemaine);
$ldFin = GetDateAvecJour(7, $liSemaine);
$laCreneaux = $seancesRepo->rtvCurCréneaux($lsLstGroupes, $ldDébut, $ldFin, false);
}
$laOptions['psResActive'] = $lsLstGroupes ;
$laOptions['paCreneaux'] = $laCreneaux ;
}
}
$laOptions["pbDroitEcriture"] = $lbADroitDEcriture;
if ($pbDansPage) {
$lsTwig = "pageEntityForm";
$lsRep = "Default";
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
} else {
$this->fillOptionsPourPopup($laOptions, $request) ;
$lsRep = "form";
}
$lsTwig = '@Paa/' . $lsRep . '/' . $lsSousRepTwig . $lsTwig . '.html.twig';
$lsResponse = $this->render($lsTwig, $laOptions);
return $lsResponse;
}
// Récupération du nom et de la description de l'entité fille de l'entité fournie en paramètre, pour l'onglet fourni en paramètre
// LG 20220720
public function getInfosEntiteFille($psNomEntiteMere, $psOnglet = "") {
$loInfos = new \stdClass() ;
$loInfos->nomEntite = "introuvable" ;
$loInfos->descEntite = "introuvable" ;
// LG 20231024 déac $lsNomTable = "";
// LG 20231024 déac $lsNomEntité = "";
if ($psNomEntiteMere !== "caisses"
&& $psNomEntiteMere !== "intervenants"
&& $psNomEntiteMere !== "compteurs"
&& $psNomEntiteMere !== "usagers"
&& $psNomEntiteMere !== "groupes"
&& $psNomEntiteMere !== "activites"
&& $psNomEntiteMere !== "trspSocietes"
&& $psNomEntiteMere !== "contrainteshoraires"
&& $psNomEntiteMere !== "diplomes"
) {
throw new \Exception("Attention, le nom de table n'est pas encore pris en charge dans defaultController.getInfosEntiteFille : " . $psNomEntiteMere) ;
}
if($psNomEntiteMere === "caisses" ){
$loInfos->nomEntite = "caissesPersonnes" ;
$loInfos->descEntite = "Contact de caisse" ;
} else if ($psNomEntiteMere === "intervenants") {
$loInfos->nomEntite = "intervenantsContrats";
$loInfos->descEntite = "Contrat d'intervenant";
} else if ($psNomEntiteMere === "compteurs") {
$loInfos->nomEntite = "compteursRegles";
$loInfos->descEntite = "Règles de compteurs";
} else if ($psNomEntiteMere === "usagers"
&& $psOnglet == "OngletContacts"){
$loInfos->nomEntite = "referents";
$loInfos->descEntite = "Contact d'usager" ;
} else if ($psNomEntiteMere === "usagers" && $psOnglet == "OngletGroupes"){
$loInfos->nomEntite = "usagersGroupes";
$loInfos->descEntite = "Groupes de l'usager" ;
$loInfos->contexte = "GroupesDeLUsager" ; // LG 20230120
} else if ($psNomEntiteMere === "usagers") {
// Cas anormal : on devrait être dans l'un des cas usagers ci-dessus
throw new \Exception("Cas d'onglet non prévu pour les usagers : " . $psOnglet) ;
} else if ($psNomEntiteMere === "groupes" && $psOnglet == "OngletSousGroupes"){
$loInfos->nomEntite = "sousGroupes";
$loInfos->descEntite = "Sous-groupes" ;
} else if ($psNomEntiteMere === "groupes" && $psOnglet == "OngletUsagers"){
$loInfos->nomEntite = "usagersGroupes";
$loInfos->descEntite = "Usagers du groupe";
$loInfos->contexte = "UsagersDuGroupe" ; // LG 20230120
} else if ($psNomEntiteMere === "groupes" && $psOnglet == "OngletMatieres"){
$loInfos->nomEntite = "matieres";
$loInfos->descEntite = "Matières du groupe";
// LG 20231024 début
} else if ($psNomEntiteMere === "groupes" && $psOnglet == "OngletCréneaux") {
$loInfos->nomEntite = "creneaux";
$loInfos->descEntite = "Créneaux horaires";
// LG 20231024 fin
} else if($psNomEntiteMere === "activites"){
$loInfos->nomEntite = "seances" ;
$loInfos->descEntite = " Séances de l'activité" ;
} else if($psNomEntiteMere === "trspSocietes"
&& $psOnglet == "OngletChauffeurs"){
$loInfos->nomEntite = "trspChauffeurs" ;
$loInfos->descEntite = "Chauffeurs" ;
} else if($psNomEntiteMere === "trspSocietes"
&& $psOnglet == "OngletVehicules"){
$loInfos->nomEntite = "trspVehicules" ;
$loInfos->descEntite = "Véhicules" ;
} else if ($psNomEntiteMere === "trspSocietes") {
// Cas anormal : on devrait être dans l'un des cas trspSocietes ci-dessus
throw new \Exception("Cas d'onglet non prévu pour les trspSocietes : " . $psOnglet) ;
} else if($psNomEntiteMere === "contrainteshoraires"){
$loInfos->nomEntite = "contrainteshorairesDetails" ;
$loInfos->descEntite = "Détails" ;
} else if ($psNomEntiteMere === "diplomes" && $psOnglet == "OngletModules") {
$loInfos->nomEntite = "modules";
$loInfos->descEntite = "module";
} else {
throw new \Exception("Cas non prévu : psNomEntiteMere = '$psNomEntiteMere' & psOnglet = '$psOnglet'") ;
}
return $loInfos ;
}
// Récupération du Type de table qui est contenu dans l'id
public function getCodeTable($piId) {
if (substr($piId, 0, 3) == 'GAB') {
$piId = substr($piId, 3, strlen($piId) - 3);
$psNomTable = "actiGroupesacti";
} elseif (substr($piId, 0, 4) == 'SGAB') {
$piId = substr($piId, 4, strlen($piId) - 4);
$psNomTable = "actiSsgroupesacti";
} elseif (substr($piId, 0, 2) == 'AB') {
$piId = substr($piId, 2, strlen($piId) - 2);
$psNomTable = "actibases";
} else {
throw new exception("Cas non prévu : " . $piId);
}
$res = array('id' => $piId, 'nomTable' => $psNomTable);
return $res;
}
// Validation des modifications d'un item préexistant
public function updateAction(Request $request, $psNomTable, $piId) {
$lsRepertoire = '';
$lsSousType = '';
$lbFlush = true;
if (!$request->isMethod('POST')) {
throw new \Exception("La requête de mise à jour doit être effectuée en POST");
}
if ($this->RedirectIfNotGranted($request, $this->isGranted(PaaVoter::MODIFIER . $psNomTable, $piId), $response))
return $response;
$lajAllFormData = $request->request->all();
if (strtolower($psNomTable) == 'actibasesousgroupegroupe' || strtolower($psNomTable) == 'actibases') {
$donnesacti = $this->getCodeTable($piId);
$piId = $donnesacti['id'];
$lsRepertoire = "ActiBases\\";
$psNomTable = $donnesacti['nomTable'];
if ($piId == 0 || $piId == 'NaN') {
$this->addAction($request, $psNomTable);
$response = new Response(
'{"status": "OK", "idEntite": 0}', Response::HTTP_OK, array('content-type' => 'text/json')
);
return $response;
}
if (isset($lajAllFormData["fEntityForm_actibases"])) {
// On traite les activités de base
$liSousGroupe = $lajAllFormData["fEntityForm_actibases"]["isousgroupe"];
$lsSousType = $this->getSousTypeFormActibase($liSousGroupe);
}
} else if ($psNomTable == "actibases") {
$liSousGroupe = $lajAllFormData["fEntityForm_actibases"]["isousgroupe"];
$lsSousType = $this->getSousTypeFormActibase($liSousGroupe);
} else if ($psNomTable == 'intervenantsAdresse') {
$psNomTable = 'intervenants';
$lsSousType = 'Adresse';
} else if ($psNomTable == 'intervenantsSécurité') {
$psNomTable = 'intervenants';
$lsSousType = 'Sécurité';
} else if ($psNomTable == 'seances' && isset($lajAllFormData['OngletSérie'])) {
// Ce qu'on doit enregistrer, c'est la série, avec le form "seances_seriesseancesType"
$lsSousType = '_seriesseances';
} else if ($psNomTable == 'usagers' && isset($lajAllFormData['OngletStatuts'])) {
$lsSousType = "Statuts";
}
// LG 20241004 début
if (($psNomTable == 'intervenants' || $psNomTable == 'usagers' || $psNomTable == 'groupes' || $psNomTable == 'salles' || $psNomTable == 'seances' || $psNomTable == 'activites')
// && ($psOnglet == 'OngletCompétences') || substr($psOnglet, 0, 18) == 'OngletParticipants' || $psOnglet == 'OngletSérie' || $psOnglet == 'OngletLibellé' || $psOnglet == 'OngletSeanceGraphique' || $psOnglet == 'OngletSeanceListe'
&& isset($lajAllFormData['OngletCompétences'])) {
$lsSousType = "SansProprietes";
}
// LG 20241004 fin
$em = $this->getDoctrineManager();
if ($psNomTable == 'seances' && $piId && isset($lajAllFormData['ConfirmeModification']) && $lajAllFormData['ConfirmeModification']) {
// On est en modification d'une séance d'une série, et on dispose de la réponse au dialogue de la portée de la modification
// Il faut mémoriser la séance avant qu'elle ne soit altérée pér l'exploitation des données saisies par l'utilisateur
$loEntitéInitiale = $this->get('doctrine')->getRepository("PaaBundle:seances")->find($piId) ;
// Faire en sorte que l'entité séance initiale ne se rafraichisse pas toute seule avec les nouvelles données
// A noter : Detach est dit déprécié, mais des références disent que finalement c'est dé-déprécié
$em->detach($loEntitéInitiale) ;
if (isset($lajAllFormData['OngletParticipants'])) {
// On vient de l'onglet Participants
// Il faut récupérer aussi les participants actuels de la séance, avant enregistrement
$lsLstResSeanceOriginale = "" ;
$this->get('doctrine')->getRepository("PaaBundle:seances")->RtvLstRessourcesSéance($loEntitéInitiale, $lsLstResSeanceOriginale) ;
$loEntitéInitiale->sLstRes = $lsLstResSeanceOriginale ;
}
}
$lsNomEntité = $psNomTable ;
if ($psNomTable == "creneaux") {
$lsNomEntité = "seances" ;
}
// LG 20240808 début
if ($psNomTable == "cours") {
$lsNomEntité = "activites" ;
}
// LG 20240808 fin
$loRepository = $em->getRepository("PaaBundle:" . $lsNomEntité) ;
$loEntité = $loRepository->find($piId);
if ($loEntité) {
$loEntité->setEntityManager($em); // Injecter le entityManager ici est une (TRES) mauvaise pratique, mais je ne trouve pas d'autre solution pour que les div générées par Form pour les clés étrangères ne deviennent pas des select qui incluent toutes les lignes de la table mère de la relation
} else {
$className = $loRepository->getClassName();
$loEntité = new $className($em); // Injecter le entityManager ici est une (TRES) mauvaise pratique, mais je ne trouve pas d'autre solution pour que les div générées par Form pour les clés étrangères ne deviennent pas des select qui incluent toutes les lignes de la table mère de la relation
}
$loEntitéOriginale = clone $loEntité ; // LG 20230818
$laFormOptions = array();
if ($psNomTable == 'users') {
// On doit mémoriser le mot de passe actuel pour le comparer ultérieurement avec le mdp à enregistrer
$userBDD = $loRepository->find($piId);
$pwdBDD = $userBDD->getPassword();
if ($this->isGranted("ROLE_ADMIN")) {
// L'utilisateur en cours a le droit de modifier les droits
$lsSousType = "PlusAdmin";
}
// Pour éviter l'erreur "Ce formulaire ne doit pas contenir des champs supplémentaires."
// selon https://stackoverflow.com/questions/23018907/symfony2-4-form-this-form-should-not-contain-extra-fields-error
$laFormOptions['allow_extra_fields'] = true;
}
if ($psNomTable == 'seances') {
$laFormOptions['pbGèreLieuxSéances'] = $this->getParamètresBDD()->lGèreLieuxSéances();
};
// LG 20240825 début
if ($psNomTable == "cours") {
// Remettre à zéro les listes de ressources impliquées
// Sans quoi vendor/symfony/form/Extension/Core/DataMapper/PropertyPathMapper.php.mapFormsToData()
// considère que les données n'ont pas changé, et ne les enregistre pas
$loEntité->setIntervenantsArray([]) ;
$loEntité->setGroupesArray([]) ;
$loEntité->setSallesArray([]) ;
}
// LG 20240825 fin
$laFormOptions['doctrine'] = $this->get('doctrine'); // Injecter Doctrine dans le form builder
$laFormOptions['controller'] = $this; // Injecter le controleur dans le form builder // LG 20220415
$lsForm = 'App\PaaBundle\Form\\' . $lsRepertoire . $psNomTable . $lsSousType . 'Type';
$loForm = $this->createForm($lsForm, $loEntité, $laFormOptions);
if ($psNomTable == 'actibases' && $piId > 0 || isset($lajAllFormData['OngletCompétences'])) {
// On enregistre une activité de base ou les compétences d'une ressource
// Il faut enregistrer les compétences
$loRepo = $this->get('doctrine')->getRepository("PaaBundle:ressourcesActibases");
if ($psNomTable == 'actibases') {
// On traite les ressources compétentes pour une actiBase
$loRepo->EnregistreCompétencesAvecCoches('I', $piId, $lajAllFormData);
$loRepo->EnregistreCompétencesAvecCoches('U', $piId, $lajAllFormData);
$loRepo->EnregistreCompétencesAvecCoches('G', $piId, $lajAllFormData);
$loRepo->EnregistreCompétencesAvecCoches('S', $piId, $lajAllFormData);
}
if (isset($lajAllFormData['OngletCompétences'])) {
// On traite les compétences d'une ressource
$lsType_Res = strtoupper(substr($psNomTable, 0, 1));
$loRepo->EnregistreCompétencesAvecCoches('C', $lsType_Res . $piId, $lajAllFormData);
// On ne doit pas poursuivre l'enregistrement sinon on crée un enregistrement vide (????)
$lbFlush = false;
}
}
$loHandleRequest = $loForm->handleRequest($request);
if (!$loHandleRequest->isSubmitted()) {
// A partir de Symfony4, le form doit être submitted
throw new \Exception("Erreur Limoog : La requête de mise à jour n'a pas été \"Submitted\"");
}
if ($loHandleRequest->isValid()) {
if ($psNomTable == 'users') {
// Pour les users, il faut encoder le mdp s'il a changé
// A noter que ca semble fait dans D:\Luc\Dev\DevWeb\Symfony\applicationPAA\src\PaaBundle\Controller\UserController.php, qui n'est utilisé nulle part
$pwd = $loEntité->getPassword();
$encoder = $this->get("security.password_encoder");
$pwdEndodé = $encoder->encodePassword($loEntité, $pwd);
if ($pwd === null) {
$loEntité->setPassword($pwdBDD);
} else if ($pwdEndodé !== $pwdBDD) {
// Le password a changé, l'encoder avant de l'enregistrer
$loEntité->setPassword($pwdEndodé);
}
}
if ($psNomTable == 'actibases'){
$newssgrp = $loEntité -> getSousgroupe();
$oldssgrp = $loEntitéOriginale -> getSousgroupe();
if($oldssgrp !== $newssgrp)
$lsToastMsg = "Les données ont été enregistrées avec succès. <br>Pour voir la nouvelle arborescence, veuillez recharger la page.";
}
if ($psNomTable == 'actiSsgroupesacti'){
$newgrp = $loEntité -> getGroupe();
$oldgrp = $loEntitéOriginale -> getGroupe();
if($oldgrp !== $newgrp)
$lsToastMsg = "Les données ont été enregistrées avec succès. <br>Pour voir la nouvelle arborescence, veuillez recharger la page.";
}
// DM 20240515 fin
$em = $this->getDoctrineManager();
$repo = $em->getRepository("PaaBundle:" . $lsNomEntité);
if (method_exists($repo, 'checkValidité')) {
$msgErreur = $repo->checkValidité($loEntité);
} else {
$msgErreur = false;
}
if ($msgErreur) {
return new Response('{"msgErreur": ' . json_encode($msgErreur) . '}', Response::HTTP_OK, array('content-type' => 'text/json'));
}
if ($lbFlush) {
if (!isset($lajAllFormData['URL'])) {
// L'information sur l'URL appellante n'est pas encore dans les data de la requête : l'ajouter maintenant
$lsURL = $request->getPathInfo() ;
if (substr($lsURL, 0, 1) == "/") {
// Enlever le 1er slash
$lsURL = substr($lsURL, 1) ;
}
$lajAllFormData['URL'] = $lsURL ;
}
$lsTypeDiffusionSérie = "" ;
// LG 20240826 old if ($psNomTable == 'seances' && !isset($lajAllFormData['OngletSérie']) && $liSérie = $repo->getSérieSéance($loEntité->getId())) {
if ($psNomTable == 'seances' && !isset($lajAllFormData['OngletSérie']) && $liSérie = $loRepository->getSérieSéance($loEntité->getId())) {
// Enregistrement d'une séance qui fait partie d'une série (sauf onglet série)
$lsTypeDiffusionSérie = isset($lajAllFormData['ConfirmeModification'])?$lajAllFormData['ConfirmeModification']:"" ;
if (!$lsTypeDiffusionSérie) {
// La question de la portée de la modification n'a pas encore été posée : la poser maintenant
$lsJSONDialogue = $this->jsonDialogue_SérieSéances("" // $pcMsgAvertissement
, $lajAllFormData // $paDemandeInitiale
, $loEntité // $poSéance
, "Modification" // $psTypeModification = "Déplacement"
, false // $pbScinderDisabled = false
) ;
$response = new Response($lsJSONDialogue, Response::HTTP_OK, array('content-type' => 'text/json')
);
return $response ;
}
}
if ($psNomTable == 'seances' && isset($lajAllFormData['OngletParticipants'])) {
// Cas de l'onglet Participants d'une séance
// On enregistre des participants de la séance
$loRepo = $this->get('doctrine')->getRepository("PaaBundle:seancesRessources");
$lsLstTypeRes = "" ;
if (isset($lajAllFormData['OngletParticipants_I'])) {
// Sous-onglet Intervenants
$lsLstTypeRes .= "I" ;
}
if (isset($lajAllFormData['OngletParticipants_U'])) {
// Sous-onglet Usagers
$lsLstTypeRes .= "U" ;
}
if (isset($lajAllFormData['OngletParticipants_G'])) {
// Sous-onglet Groupes
$lsLstTypeRes .= "G" ;
}
if (isset($lajAllFormData['OngletParticipants_S'])) {
// Sous-onglet Salles
$lsLstTypeRes .= "S" ;
}
$lsMsgAnomalie = $loRepo->EnregistreParticipationAvecCoches($lsLstTypeRes, $piId, $lajAllFormData);
if ($lsMsgAnomalie) {
// Les ressources ajoutées sont en conflit
$lsToastMsg = "Attention, $lsMsgAnomalie" ;
$lsAction = <<<ACTION
window.oPlanning.oControleur.getGestionnaireActions().lanceActionSymfony({"URL": "montreConflits", "iId_Seance": $piId});
ACTION ;
$lsToastBoutons = '[{"texte": "Voir les conflits", "action": ' . json_encode($lsAction) . '}]' ;
}
// On ne doit pas poursuivre l'enregistrement sinon on crée une séance invalide (début et fin nulls)
$lbFlush = false;
}
}
$lbReturnRafraichirTout = false ;
if ($lbFlush) {
if (strtolower($psNomTable) == 'matieres') {
// Matière pour laquelle l'Id de l'activité de base n'est pas encore défini : on va aussi insérer une activité de base pour cette matière
// $fieldMappings = $em->getClassMetadata("App\PaaBundle\Entity\matieres")->fieldMappings ;
// if (!$liActiBase && $loEntité->getId()) {
// // L'entité matière n'a pas d'activité de base
// // Cela peut être lié à l'enregistrement de modifications faites sur une matière nouvelle créée avec une nouvella activité de base
// // Essayer de retrouver la matière dans la BDD, pour en retrouver l'activité de base
// $loEntitéPrécédente = $em->getRepository("PaaBundle:matieres" )->find([$loEntité->getId()]);
// $liActiBase = $loEntitéPrécédente->getActibase()->getId() ;
// }
// En principe, on est en modification d'une matière préexistante
if (!$loEntité->getId()) {
throw new \Exception("La matière modifiée n'a pas encore d'Id") ;
} else if ($loEntité->getIactibase() == $loEntitéOriginale->getIactibase()) {
// L'id de l'activité de base n'a pas changé : RAS
} else {
// Mémoriser les modifications que l'utilisateur souhaitait éventuellement appliquer à l'activité de base nouvellement sélectionnée
$loActiBaseSouhaitée = clone $loEntité->getActibase() ;
// Annuler les changements sur l'AB qui était auparavant liée à la matière
// (car sinon Doctrine, remplacer les données de l'ancienne AB par celles de la nouvelle, y compris l'identifiant)
$em->refresh($loEntité->getActibase());
// Récupérer l'activité de base qui est maintenant liée à cette matière
$loRepoActiBases = $this->get('doctrine')->getRepository("PaaBundle:actibases");
if ($loEntité->getIactibase()) {
// L'activité de base qui vient d'être associée est une AB préexistante (qui a peut-être été modifiée par l'utilisateur)
// Recharger cette AB préexistante pour lui appliquer les changements apportés dans le form
$loActiBaseFinale = $loRepoActiBases->find($loEntité->getIactibase()) ;
} else {
if ($loActiBaseFinale = $loRepoActiBases->findIdentiqueA($loEntité->getActibase())) {
// On a trouvé une activité de base identique à celle qu'on cherche à insérer, l'utiliser
} else {
// L'activité de base qui vient d'être associée est une nouvelle AB
$loActiBaseFinale = new actibases() ;
}
}
$loActiBaseFinale->setEntityManager($em) ;
if (!$loActiBaseFinale->getIsousgroupe()) {
// Le sous-groupe d'AB n'est pas encore défini : le faire maintenant
$loActiBaseFinale->setIsousgroupe(Paa_Constantes::eiActiSsGpeMatiere) ;
}
// Reporter dans la nouvelle activité de base les modifications apportées dans le formulaire
$loActiBaseFinale->setCnom($loActiBaseSouhaitée->getCnom()) ;
$loActiBaseFinale->setCnomcourt($loActiBaseSouhaitée->getCnomcourt()) ;
$loActiBaseFinale->setCcode($loActiBaseSouhaitée->getCcode()) ;
$loActiBaseFinale->setIcouleur($loActiBaseSouhaitée->getIcouleur()) ;
$loActiBaseFinale->setIcouleurtexte($loActiBaseSouhaitée->getIcouleurtexte()) ;
$em->persist($loActiBaseFinale) ;
if (!$loEntité->getIactibase()) {
// On vient de persister la nouvelle activité de base : fournir l'information à l'entité matière
$loEntité->setIactibase($loActiBaseFinale->getIidactibase()) ;
}
}
} // Fin du cas spécifique de l'entité Matières
// LG 20240823 début
if (strtolower($psNomTable) == 'cours') {
// LG 20240826 début
// Il faut s'assurer que la liste des groupes ne soist pas vide : si aucun sous-groupe n'est choisi il faut ajouter le groupe classe
if (count($loEntité->getGroupes()) == 0) {
$loEntité->addGroupe($loEntité->getClasse()) ;
}
// LG 20240826 fin
// Doctrine efface les ressources avant de les recréer, ce qui cause une erreur du trigger Pucette.ftribaiud_acti_ressources_CIF_RessourcesMatiere
$this->getDoctrineManager()->getConnection()->executeStatement( "set flags.DoctrineSupprimeUneActivité to 'on';") ;
$em->flush();
$this->getDoctrineManager()->getConnection()->executeStatement( "set flags.DoctrineSupprimeUneActivité to 'off';") ;
}
// LG 20240823 fin
// Sauvegarder les changements
$em->flush();
if ($psNomTable == 'seances' && isset($lajAllFormData['OngletSérie'])) {
// Enregistrement des séances de la série
$loRepo = $this->get('doctrine')->getRepository("PaaBundle:seriesSeances");
$loRepo->EnregistreSéancesSériesAvecCoches($piId, $lajAllFormData);
}
} // Fin de si on doit faire le flush
if ($psNomTable == 'seances' && $lsTypeDiffusionSérie && ($lbFlush || isset($lajAllFormData['OngletParticipants']))) {
// On est en modification d'une séance d'une série, et on dispose de la réponse au dialogue de la portée de la modification
// Exécuter la diffusion sur la série
$liIdSeance = $loEntité->getId() ;
$ldDate = $loEntité->getDate() ;
// Faire en sorte que l'entité séance finale sot ectement remplie dans tous les cas (sans quoi le find ci-dessous ne charge pas les données qui n'ont pas été fournies par le form)
// A noter : Detach est dit déprécié, mais des références disent que finalement c'est dé-déprécié
$em->detach($loEntité) ;
$loEntitéFinale = $this->get('doctrine')->getRepository("PaaBundle:seances")->find($loEntité->getId()) ; // Il faut recharger l'entité pour être certain qu'elle dispose de toutes les propriétés, même celles qui n'ont pas été fournies par le form
if (isset($lajAllFormData['OngletParticipants'])) {
// On vient de l'onglet Participants
// Il faut récupérer aussi les nouveaux participants de la séance
$lsLstResSeance = "" ;
$this->get('doctrine')->getRepository("PaaBundle:seances")->RtvLstRessourcesSéance($loEntité, $lsLstResSeance) ;
$loEntitéFinale->sLstRes = $lsLstResSeance ;
}
$lbResult = $this->serieSeances_DiffuseModificationSurSérie($lsTypeDiffusionSérie // $psTypeDiffusionSérie
, $liIdSeance // $piIdSeance
, $liSérie // $piIdSérie
, $ldDate // $pdDate
, $loEntitéInitiale // poSeanceInitiale, LG 20220729
, $loEntitéFinale // poSeanceFinale, LG 20220729
) ;
if ($lbResult) {
$lbReturnRafraichirTout = true ;
}
}
// Le return permet de ne pas actualiser le formulaire lors d'une sauvegarde
if ($loEntité == NULL) {
$lsJSON = '"idEntite": 0' ;
} else {
$lsJSON = '"status": "OK", "idEntite": ' . $loEntité->getId() ;
}
if ($lbReturnRafraichirTout) {
$lsJSON .= ', "bRafraichirTout": true' ;
}
if (isset($lsToastMsg) && $lsToastMsg) {
// Il y a un toast à présenter à l'utilisateur
if (isset($lsToastBoutons) && $lsToastBoutons) {
$lsToastBoutons = ', "boutons":' . $lsToastBoutons ;
} else {
$lsToastBoutons = '' ;
}
$lsJSON .= ', "toast": {"msg": "' . $lsToastMsg . '", "niveau": "warning", "durée": 0' . $lsToastBoutons . '}' ;
} else {
$lsJSON .= ', "toast": {"msg": "Modifications enregistrées", "niveau": "success"}' ;
}
$response = new Response("{" . $lsJSON . "}", Response::HTTP_OK, array('content-type' => 'text/json')
);
return $response;
} else {
// Au moins une saisie est invalide
$lsErreurs = $this->getStringErrorsForm($loForm) . "<br>" . $lsForm;
if (false) {
// pour déboguer le cas "Ce formulaire ne doit pas contenir des champs supplémentaires"
// Ce code permet d'avoir la liste des champs supplémentaires
// Selon https://askcodez.com/symfony-2-ce-formulaire-ne-doit-pas-contenir-de-champs-supplementaires.html
$data = $request->request->all();
print("REQUEST DATA<br/>");
foreach ($data as $k => $d) {
print("$k: <pre>"); print_r($d); print("</pre>");
}
$children = $loForm->all();
print("<br/>FORM CHILDREN<br/>");
foreach ($children as $ch) {
print($ch->getName() . "<br/>");
}
$data = array_diff_key($data, $children);
//$data contains now extra fields
print("<br/>DIFF DATA<br/>");
foreach ($data as $k => $d) {
print("$k: <pre>"); print_r($d); print("</pre>");
}
}
if (strpos($lsErreurs, "Le jeton CSRF est invalide. Veuillez renvoyer le formulaire.")) {
$lsErreurs = "Le délai de validité du formulaire de saisie est dépassé, ou vous avez été déconnecté depuis son affichage.<br>Il vous faut annuler puis recommencer votre saisie." ;
}
$lsJSONDialogue = '{"Dialogue": {"Message": ' . json_encode($lsErreurs) . ', "Titre":"Erreur lors de l'enregistrement"'
. ', "Boutons": [{"text":"OK", "Action":"closeDialog"}]}'
. '}';
$response = new Response($lsJSONDialogue);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}
// Validation des modifications d'un nouvel item
public function addAction(Request $request, $psNomTable) {
$lsNomForm = $psNomTable;
if (!$request->isMethod('POST')) {
throw new \Exception("La requête d'ajout doit être effectuée en POST");
}
$lsRepertoire = '';
$lsSousType = '' ;
if (strtolower($psNomTable) == 'actibasesousgroupegroupe') {
$psNomTable = $request->request->all()["NomEntité"];
$lsNomForm = $psNomTable;
if ($psNomTable == "actibases") {
// Il faut détecter le sous-type d'activité de base (absence intervenant, ...)
$liSousGroupe = $request->request->all()["fEntityForm_" . $psNomTable]["isousgroupe"];
$lsSousType = $this->getSousTypeFormActibase($liSousGroupe);
}
}
if (strtolower($psNomTable) == 'actissgroupesacti' || strtolower($psNomTable) == 'actigroupesacti' || strtolower($psNomTable) == 'actibases') {
$lsRepertoire = "ActiBases\\";
}
$lsNomEntité = $psNomTable ;
if ($psNomTable == "creneaux") {
$lsNomEntité = "seances" ;
}
// LG 20240816 début
else if ($psNomTable == "cours") {
$lsNomEntité = "activites" ;
}
// LG 20240816 fin
//$this->denyAccessUnlessGranted(PaaVoter::AJOUTER . $psNomTable, null, 'Désolé, vous ne disposez pas de droits d\'ajout d\'éléments de ce type.');
$em = $this->getDoctrineManager();
$repo = $em->getRepository("PaaBundle:" . $lsNomEntité);
$className = $repo->getClassName();
$loEntité = new $className($em); // Injecter le entityManager ici est une (TRES) mauvaise pratique, mais je ne trouve pas d'autre solution pour que les div générées par Form pour les clés étrangères ne deviennent pas des select qui incluent toutes les lignes de la table mère de la relation
if ($psNomTable == "matieres") {
// Pour les matières, le form a besoin de la liste des sous-groupes (dans matieresType.getFiltreGroupe())
// Pour ça, il faut que le groupe de la matière soit défini
$la = $request->request->all() ;
$liGroupe = $la["fEntityForm_matieres"]["igroupe"] ;
$loEntité->setIgroupe($liGroupe) ;
}
$laFormOptions = array();
if ($psNomTable == 'users') {
// Pour éviter l'erreur "Ce formulaire ne doit pas contenir des champs supplémentaires."
// selon https://stackoverflow.com/questions/23018907/symfony2-4-form-this-form-should-not-contain-extra-fields-error
$laFormOptions['allow_extra_fields'] = true;
}
$laFormOptions['doctrine'] = $this->get('doctrine'); // Pour injecter Doctrine dans le form builder
$laFormOptions['controller'] = $this; // Injecter le controleur dans le form builder // LG 20220415
$lsForm = 'App\PaaBundle\Form' . '\\' . $lsRepertoire . $lsNomForm . $lsSousType . 'Type';
$loForm = $this->get('form.factory')->create($lsForm, $loEntité, $laFormOptions);
$loHandleRequest = $loForm->handleRequest($request);
if ($loHandleRequest->isValid()) {
// Les saisies sont valides
$loEntité = $loForm->getData();
$loEntité->setEntityManager($em) ; // LG 20230804
if ($psNomTable == 'users') {
// Pour les users, il faut encoder le mdp
$encoder = $this->get("security.password_encoder");
$pwd = $loEntité->getPassword();
$pwdEndodé = $encoder->encodePassword($loEntité, $pwd);
$loEntité->setPassword($pwdEndodé);
// Et pour une raison inconnue les rôles ne sont pas enregistrés
if (count($loEntité->getRoles()) < 2) { // 2 car il y a toujours le role "user" par défaut
// Aucun rôle remonté dans l'entité
if (isset($request->request->All()["fEntityForm_users"]) && isset($request->request->All()["fEntityForm_users"]["roles"])) {
$laRoles = $request->request->All()["fEntityForm_users"]["roles"] ;
$loEntité->setRoles($laRoles) ;
}
}
}
if (strtolower($psNomTable) == 'matieres' /*&& !$loEntité->getActibase()->getId()*/) {
// Matière pour laquelle l'Id de l'activité de base n'est pas encore défini : on va aussi insérer une activité de base pour cette matière
$loActiBase = $loEntité->getActibase() ;
$loActiBase->setEntityManager($em) ;
if (!$loEntité->getActibase()->getIsousgroupe()) {
// Il faut forcer le sous-groupe d'appartenance de l'activité de base créée avec la matière
$loActiBase->setIsousgroupe(\App\PaaBundle\Component\Paa\Paa_Constantes::eiActiSsGpeMatiere) ;
} else if (!$loActiBase->getSousgroupe()) {
// L'objet sousgroupe n'est pas set : le mettre à jour maintenant en imposant l'id du sous-groupe
$loActiBase->setIsousgroupe($loActiBase->getIsousgroupe(), true) ;
}
// LG 20240819 début
// if ($loEntité->getActibase()->getId()) {
$liActiBase = $loEntité->getActibase()->getId() ;
if ($liActiBase) {
// LG 20240819 fin
// Il s'agit d'une activité de base préexistante : Doctrine a envie de la réinsérer
// Ne fait rien $em->detach($loEntité->getActibase()) ;
// LG 20240819 déac $liActiBase = $loEntité->getActibase()->getId() ;
$loEntité->setActibase(null) ;
$loEntité->setiActibase($liActiBase) ;
}
}
if (method_exists($repo, 'checkValidité')) {
// Ici on appelle la fonction checkValidité en fonction de si on est en mode démo ou pas
// Si on est en démo, on lui passe en paramètre l'id de l'établissement courant
if($this->estDemoMode()) {
$lidEtablissement = $this->getIdEtablissementCourant();
$msgErreur = $repo->checkValidité($loEntité, $lidEtablissement);
} else {
$msgErreur = $repo->checkValidité($loEntité);
}
} else {
$msgErreur = false;
}
if ($msgErreur) {
return new Response('{"status": "KO", "msgErreur": ' . json_encode($msgErreur) . '}', Response::HTTP_OK, array('content-type' => 'text/json'));
}
if (method_exists($loEntité, 'getEtablissement')) {
// Astuce pour que l'id d'établissement d'un nouvel enregistrement soit correctement enregistré
$loEntité->setEntityManager($em) ;
if($etablissement = $loEntité->getEtablissement()) {
$toto = $etablissement->getId();
}
}
// LG 20240822 début
if ($psNomTable == "cours" && $loDataCours = $loEntité->getActiviteDatacours()) {
// Il faut s'assurer que la liste des groupes ne soist pas vide : si aucun sous-groupe n'est choisi il faut ajouter le groupe classe
if (count($loEntité->getGroupes()) == 0) {
$loEntité->addGroupe($loEntité->getClasse()) ;
}
if ($loDataCours->estVide()) {
// Pas besoin d'enregistrer des données vides
$loEntité->setActiviteDatacours(null) ;
} else {
// Astuce pour les dataCours des activités de type cours : un nouveau cours n'a pas encore d'id avant d'être persisté
// Il faut persister le cours puis y rajouter le dataCours pour que ce dernier puisse connaitre son id
$loDataCours = clone($loDataCours) ;
$loEntité->setActiviteDatacours(null) ;
$em->persist($loEntité);
$em->flush();
$loEntité->setActiviteDatacours($loDataCours) ;
$em->persist($loEntité);
}
}
// LG 20240822 fin
$em->persist($loEntité);
$em->flush();
if (strtolower($psNomTable) == 'intervenants') {
// Le contrat de l'intervenant a été créé par le trigger PG avec établissement NULL
// Modifier le contrat pour y mettre l'établissement courant
$loContrat = $em->getRepository("PaaBundle:intervenantsContrats" )->findOneBy(['iintervenant' => $loEntité->getId()]);
if ($loContrat !== null) {
$loContrat->setEntityManager($em);
$loContrat->setIetablissement(intval($this->getIdEtablissementCourant())) ;
$em->persist($loContrat);
$em->flush();
}
}
} else {
// Au moins une saisie est invalide
$lsErreurs = $this->getStringErrorsForm($loForm) ;
// LG 20230920 début
throw new \Exception("La requête d'ajout n'est pas valide : " . $lsErreurs);
// FINALEMENT, mieux vaut lancer une exception
// $lsMsgErr = json_encode("La requête d'ajout n'est pas valide : " . $lsErreurs) ;
// $response = new Response(
// '{"status": "KO", "msgErreur": ' . $lsMsgErr . '}', Response::HTTP_OK, array('content-type' => 'text/json')
// );
// return $response;
// LG 20230920 fin
}
$response = new Response(
'{"status": "OK", "idEntite": ' . $loEntité->getId() . '}', Response::HTTP_OK, array('content-type' => 'text/json')
);
return $response;
}
public function deleteAction(Request $request, $psNomTable, $piId) {
if ($this->RedirectIfNotGranted($request, $this->isGranted(PaaVoter::MODIFIER . $psNomTable, $piId), $response))
return $response;
if ($psNomTable === "actiBases") $psNomTable ="actibases" ;
if (strtolower($psNomTable) === "actissgroupesacti") $psNomTable ="actiSsgroupesacti" ;
if (strtolower($psNomTable) === "getidactivites") $psNomTable ="activites" ;
if (strtolower($psNomTable) === "sousgroupes") $psNomTable ="groupes" ; // LG 20230829
if (strtolower($psNomTable) === "cours") $psNomTable ="activites" ; // LG 20240822
// Retrouver l'entité à supprimer
$lsNomEntité = $psNomTable ;
if ($psNomTable == "creneaux") {
$lsNomEntité = "seances" ;
}
$em = $this->getDoctrineManager();
$loRepo = $em->getRepository("PaaBundle:" . $lsNomEntité) ;
$loEntité = $loRepo->find($piId);
if (!$loEntité) {
// L'entité n'a pas été trouvée
// RAS
} else {
if ($request->query->has("msgConfirm")) {
// On est en mode "demande de message de confirmation
if (!method_exists($loRepo, "estSupprimable")) {
// Le repository ne dispose pas des méthodes personnalisées
$lsMsgConfimation = "Confirmez-vous la suppression de cet élément ?" ;
$response = new Response('{"status": "OK", "msgConfirm": ' . json_encode($lsMsgConfimation) . '}', Response::HTTP_OK, array('content-type' => 'text/json'));
return $response ;
} else {
// Le Repository dispose des méthodes de test de supprimabilité
// Tester si l'entité est supprimable
$lsMsgErr = "" ;
if ($loEntité && !$loRepo->estSupprimable($loEntité, $lsMsgErr)) {
// Cette entité n'est pas supprimable du tout
$lsMsgErr = $lsMsgErr?:"Désolé, cet item n'est pas supprimable." ;
}
if ($lsMsgErr) {
// Une règle interdit la suppression
$response = new Response('{"status": "KO", "msgErreur": ' . json_encode($lsMsgErr) . '}', Response::HTTP_OK, array('content-type' => 'text/json'));
return $response ;
} else {
// Cette entité est supprimable, renvoyer un message de demande de confirmation adéquat
$lsLibelleEntitéType = $loRepo->getLibelléEntité() ;
$lsLibelleEntité = $loEntité->__toString() ;
$lbFéminin = $loRepo->estLibelléEntitéFéminin() ;
if ($lbFéminin) $lsPronom = "cette" ;
else if (in_array(mb_substr($lsLibelleEntitéType, 0, 1), ["a", "à", "e", "é", "è", "i", "o", "u", "y"])) $lsPronom = "cet" ;
else $lsPronom = "ce" ;
$lsMsgConfimation = "Confirmez-vous la suppression de " . $lsPronom . " $lsLibelleEntitéType ($lsLibelleEntité) ?" ;
if ($lsMsgConfimation2 = $loRepo->rtvMsgConfirmationSuppression($loEntité)) {
// Il y a une alerte supplémentaire à afficher à l'utilisateur
$lsMsgConfimation .= "<br><br><strong>Attention</strong> : " . $lsMsgConfimation2 ;
}
$response = new Response('{"status": "OK", "msgConfirm": ' . json_encode($lsMsgConfimation) . '}', Response::HTTP_OK, array('content-type' => 'text/json'));
return $response ;
}
}
}
// Effectuer la suppression
// Pour corriger le bug "'Tentative de modification d'une semaine validée' se produit quand on supprime une ressource qui n'a que des présences et absences standard (ex interv @test@)"
$loRepo->supprimeEntite($loEntité);
$em->flush();
}
$response = new Response('{"status": "OK"}', Response::HTTP_OK, array('content-type' => 'text/json'));
return $response;
}
protected function autoriseListing($psNomTable) {
return in_array($psNomTable, array("annees", "intervenants", "salles", "usagers", "groupes", "actibases"));
}
public function listingTableAction(Request $request, $psNomTable, $psParametres) {
require_once(dirname(__DIR__) . "/Resources/editions/listings.php");
// Simple exécution en PDF pour l'instant
executeListing($psNomTable, "PDF", $psParametres, $this->getDoctrineConnection());
$response = new Response(
'Table : ' . $psNomTable . '<br>Paramètres : ' . $psParametres, Response::HTTP_OK, array('content-type' => 'text/html')
);
return $response;
}
/**
* @Security("has_role('ROLE_USER')")
*/
public function setParametreAction($psNomParametre, $pvValeur, $psType) {
// LG 20230331 old $lsRep = $this->getParamètresBDD()->setParamètre($psNomParametre, $pvValeur, $psType);
// LG 20240201 début
$pvValeur = str_replace("@lb@", "\n", $pvValeur) ; // Les LineBreak sont à présent interdits dans les URLS ?
$pvValeur = str_replace("@sp@", " ", $pvValeur) ; // Les espaces sont à présent interdits dans les URLS ?
$pvValeur = str_replace("@vide@", "", $pvValeur) ; // L'URL avec un paramètre vide n'est pas valide ?
// LG 20240201 fin
$lsRep = $this->setParamètre($psNomParametre, $pvValeur, $psType);
$response = new Response($lsRep, Response::HTTP_OK, array('content-type' => 'text/html'));
return $response;
}
protected function getDataPourEnTeteMenu($poDoctrineManager, &$paAnnees, &$paEtablissements/* , &$paSemaine */) {
$paAnnees = $poDoctrineManager->getRepository("PaaBundle:annees")->findListe();
$paEtablissements = $poDoctrineManager->getRepository("PaaBundle:ressources")->findAllFiltrée("E");
// pour tests $paAbsences = $poDoctrineManager->getRepository("PaaBundle:actiBases")->rtvCurActiBasesAbsence("I");
return;
}
// Remplissage de données d'options spécifiques aux pages popup (utile en particulier pour Activités)
// LG 20230831
function fillOptionsPourPopup(&$paOptions, Request $request) {
// LG 20231025 old $session = $request->getSession();
$session = $this->refreshSession($request);
$ldDebut = $session->get('dateDebut');
$ldFin = $session->get('dateFin');
// LG 20231024 début
$paOptions["pdDebutSélectionSemaines"] = $ldDebut ;
$paOptions["pdFinSélectionSemaines"] = $ldFin ;
// LG 20231024 fin
$paOptions["piIdAnnee"] = $this->trouveAnnéeAvecDates($ldDebut, $ldFin);
if (estSemaineType($ldDebut)) {
// La date demandée est dans la semaine-type
// Prendre les bornes de l'année scolaire actuelle
$loAnnée = $this->getEntitéAnnéeCourante() ;
$ldDebut = date_format($loAnnée->getDdebut(), "Y-m-d") ;
$ldFin = date_format($loAnnée->getDFin(), "Y-m-d") ;
}
$paOptions["pdDebut"] = $ldDebut; // LG 20231024 DANGER : ces paramètres ont le même nom mais pas le même contenu dans ce cas (appellé pour les entityForm) que dans fillOptionsPourRenderEnTeteMenu (appellé par les pages de + haut niveau)
$paOptions["pdFin"] = $ldFin;
}
//Utilisation de l'object request pour acceder a la session afin de garder certains parametres entre les pages
function fillOptionsPourRenderEnTeteMenu(&$paOptions, Request $request) {
// LG 20231025 old $session = $this->refreshDatesSession($request);
$session = $this->refreshSession($request);
$paOptions["pdDebut"] = $session->get('dateDebut'); // LG 20231024 DANGER : ces paramètres ont le même nom mais pas le même contenu dans ce cas (appellé par les pages de + haut niveau) que dans fillOptionsPourPopup (appellé pour les entityForm)
$paOptions["pdFin"] = $session->get('dateFin');
$m = $this->getDoctrineManager(); // Récupérer le manager Doctrine
// Listes des années et des établissements, pour affichage dans la barre de menu
$this->getDataPourEnTeteMenu($m, $laAnnees, $laEtablissements);
// Remplir le tableau des options
$paOptions["paAnnées"] = $laAnnees;
// LG 20230831 début
$paOptions["piIdAnnee"] = $this->trouveAnnéeAvecDates($paOptions["pdDebut"], $paOptions["pdFin"], $laAnnees);
// $liAnnée = $this->trouveAnnéeAvecDates($paOptions["pdDebut"], $paOptions["pdFin"], $laAnnees);
// $paOptions["piIdAnnee"] = $liAnnée ;
// $this->setIdAnnéeCourante($liAnnée) ; // Enregistrer le paramètre, en particulier pour utilisation dans les popups
// LG 20230831 fin
$paOptions["paEtablissements"] = $laEtablissements;
$paOptions["piIdEtablissement"] = $this->getIdEtablissementCourant();
$paOptions["poController"] = $this;
if (isset($paOptions["psNomTable"])) {
$paOptions["psLibelléTable"] = $this->getLibelléTable($paOptions["psNomTable"]);
$paOptions["bAutoriseListing"] = $this->autoriseListing($paOptions["psNomTable"]);
}
}
// Renvoyer l'id de la période dans laquelle est contenue au moins la 1ere des dates fournies
// $psDate1, $psDate2, $paAnnées
// LG 20230126
private function trouveAnnéeAvecDates($psDate1, $psDate2, $paAnnées = null) {
if (!$paAnnées) {
$paAnnées = $this->getDoctrine_Secure()->getRepository("PaaBundle:annees")->findListe(); // LG 20230831
}
$ldDate1 = DateTime::createFromFormat('Y-m-d', $psDate1);
$ldDate2 = DateTime::createFromFormat('Y-m-d', $psDate2);
$liAnnéeCourante = $this->getIdAnnéeCourante() ;
$liAnnée = $this->trouveAnnéeAvecDates2($ldDate1, $ldDate2, $paAnnées) ;
if (!$liAnnée) {
// L'année n'a pas été trouvée : prendre l'année mémorisée
$liAnnée = $liAnnéeCourante ;
}
if (!$liAnnée) {
// L'année n'a pas été trouvée : prendre l'année de la date du jour
$liAnnée = $this->trouveAnnéeAvecDates2(new DateTime(), new DateTime(), $paAnnées) ;
}
if ($liAnnée != $liAnnéeCourante) {
// On change d'année; il faut mémoriser cette nouvelle année
$this->setIdAnnéeCourante($liAnnée) ;
}
return $liAnnée ;
}
// Renvoyer l'id de la période dans laquelle est contenue au moins la 1ere des dates fournies
// $psDate1, $psDate2, $paAnnées
// LG 20230126
private function trouveAnnéeAvecDates2($pdDate1, $pdDate2, $paAnnées) {
$ldDate1 = $pdDate1 ;
$ldDate2 = $pdDate2 ;
$liAnnée = 0 ;
if (estSemaineRéelle($ldDate1)) {
// On est dans le contexte d'une semaine réelle : chercher dans la liste des années celle qui correspond le mieux
$liLastProximité = 99999999999 ;
$liAnnéeLaPlusProche = null ;
for($i = count($paAnnées) - 1; $i >= 0; $i--) {
$laAnnée = $paAnnées[$i] ;
$ldDateDébut = $laAnnée->getDDebut() ;
$ldDateFin = $laAnnée->getDFin() ;
if (Between($ldDate1, $ldDateDébut, $ldDateFin) && Between($ldDate2, $ldDateDébut, $ldDateFin)) {
// Les deux dates sont incluses dans cette période : c'est la bonne
$liAnnée = $laAnnée->getId() ;
break;
} else if(Between($ldDate1, $ldDateDébut, $ldDateFin) || Between($ldDate2, $ldDateDébut, $ldDateFin)) {
// L'une des deux dates sont incluses dans cette période, c'est la bone si on ne trouve pas mieux plus loin
if (!$liAnnée) {
// On n'en a pas encore trouvé
$liAnnée = $laAnnée->getId() ;
}
}
else {
// On n'a pas encore trouvé d'année proche
// Calculer la proximité de cette année avec les dates demandées
$liProximité = ($ldDate1->diff($ldDateDébut)->format("%a") + $ldDate2->diff($ldDateFin)->format("%a")) / 2 ;
if ($liProximité < $liLastProximité) {
// Cette année est + proche des dates demandées que la précédente : la mémoriser
$liAnnéeLaPlusProche = $laAnnée->getId() ;
$liLastProximité = $liProximité ;
}
}
}
if (!$liAnnée && $liAnnéeLaPlusProche) {
// On n'a pas trouvée d'année exacte, mais on a l'année la + proche : prendre celle-là
$liAnnée = $liAnnéeLaPlusProche ;
}
}
return $liAnnée ;
}
// Sur réception d'une notification (d'erreur en général)
// e.g. "OnNotifie?Message=ErreurJS : Erreur de JavaScript : Uncaught TypeError: Cannot read property 'oAut' of undefined@Chr(13)@dans le fichier http://www.paa.localhost.net/Limoog/Planning/cGrd_HTML-V2/src/cMenu_Grd.js@Chr(13)@à la ligne 237@Chr(13)@+ de détails : TypeError: Cannot read property 'oAut' of undefined@Chr(13)@ at _Class.buildItemsList_Seance (http://www.paa.localhost.net/Limoog/Planning/cGrd_HTML-V2/src/cMenu_Grd.js:237:40)@Chr(13)@ at _Class.BuildItemsList (http://www.paa.localhost.net/Limoog/Planning/cGrd_HTML-V2/src/cMenu_Grd.js:198:16)@Chr(13)@ at Object.build (http://www.paa.localhost.net/Limoog/Planning/cGrd_HTML-V2/src/cMenu_Grd.js:29:41)@Chr(13)@ at Object.contextmenuTermine [as callbackPoséParbuildAvecCallback] (http://www.paa.localhost.net/jQuery.contextMenu/jquery.contextMenu.js:287:24)@Chr(13)@ at buildCallback (http://www.paa.localhost.net/Limoog/Planning/cGrd_HTML-V2/src/cMenu_Grd.js:65:13)@Chr(13)@ at XMLHttpRequest.LG_Ajax_GetText_Navigateur.xhr_object.onreadystatechange (http://www.paa.localhost.net/Limoog/Partages/src/functions_AJAX.js:264:5)"
// Valeur de retour : JSON validant le succès de l'enegistrement de la notification
function onNotifieAction(Request $request) {
$lsMsg = $request->get('Message');
$lsIdLog = $request->get('idLog');
$lsMsg = str_replace("@Chr(13)@", PHP_EOL, $lsMsg);
$lsProjectDir = $this->get('kernel')->getProjectDir();
$logger = new \App\PaaBundle\Component\MyLogger('onNotifieAction', $lsProjectDir, null, $lsIdLog ?: null);
$idLog = $logger->Log($lsMsg, "info", array(), false);
$lsRep = '{"OK":"true","idLog":"' . $idLog . '"}';
$response = new Response($lsRep);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function ongletGeneralAction(Request $request, $psNomTable, $piId) {
throw new Exception("Fonction marquée comme obsolète");
$em = $this->getDoctrineManager();
$loEntité = $em->getRepository("PaaBundle:" . $psNomTable)->find($piId);
$loForm = $this->get('form.factory')->create('App\PaaBundle\Form' . '\\' . $psNomTable . 'Type', $loEntité);
if ($request->isMethod('POST') && $loForm->handleRequest($request)->isValid()) {
// Inutile de persister ici, Doctrine connait déjà notre annonce
$em->flush();
// Ce return permet de ne pas actualiser le formulaire lors d'une sauvegarde
return new \Symfony\Component\HttpFoundation\Response();
}
return $this->render('@Paa/form:' . $psNomTable . 'OngletGeneral.html.twig', array(
'poEntité' => $loEntité,
'poForm' => $loForm->createView(),
'psNomTable' => $psNomTable,
'id' => $piId
));
}
// LG 20230427
private function calcNbSemainesAvance($dateCible) {
$dateCibleStr = $dateCible->format('Y-m-d') ;
if ($dateCible < new DateTime('1950-01-01')) {
// Semaine-type
$liSemaineType = getNoSemaine($dateCible) ;
if ($liSemaineType == eiSemaineInexistante) $liSemaineType = -1 ;
return 10000 - abs($liSemaineType) ;
}
$countSem = 0;
$jourSem = 0;
$dateAujourdhui = new DateTime();
$dateActuelle = new DateTime();
$dateActuelleStr = $dateActuelle->format('Y-m-d');
while($dateActuelleStr != $dateCibleStr) {
if($dateActuelle < $dateCible) {
$dateActuelle->modify('+1 days');
$jourSem = 1;
} else if($dateActuelle > $dateCible) {
$dateActuelle->modify('-1 days');
$jourSem = 7;
} else {break;}
$dateActuelleStr = $dateActuelle->format('Y-m-d');
if($dateActuelle->format('N') == $jourSem){
if($dateAujourdhui < $dateCible) {
$countSem++;
}
else if ($dateAujourdhui > $dateCible) {
$countSem = $countSem-1;
}
}
}
return $countSem;
}
// LG 20230427
private function calcDateAvecNbSemainesAvance($piNbSemAvance, $pvTime) {
if ($piNbSemAvance > 5000) {
// Le nb de semaines d'avance est encodé pour une semaine-type
$liSemaineType = $piNbSemAvance - 10000 ;
$ldDate = GetDateAvecJour(date('Y-m-d', $pvTime), $liSemaineType) ;
} else if ($piNbSemAvance < -5000) {
// Le nb de semaines d'avance est mal encodé pour une semaine-type (on a quitté PAA sur une semaine-type, on s'y reconnecte la semaine suivante)
$liSemaineType = -1 ;
$ldDate = GetDateAvecJour(date('Y-m-d', $pvTime), $liSemaineType) ;
} else {
// Semaine réelle
$ldDate = date("Y-m-d", strtotime("+" . $piNbSemAvance . "week", $pvTime)) ;
}
return $ldDate ;
}
// LG 20231025 old public function refreshDatesSession(Request $request) {
public function refreshSession(Request $request) {
require_once('../src/Limoog/PartageBundle/Component/fonctions.php');
$loCnxn = $this->getDoctrineConnection();
$loUser = $this->getUser();
if ($loUser) {
$laRolesUser = $loUser->getRoles();
} else {
$laRolesUser = [];
}
$session = $request->getSession();
$params = $request->query;
// Gestion de la date de début
if ($params->get('dateDebut')) {
// On a fourni la date de début : la mémoriser, ainsi que le nb de semaines d'avance
$session->set('dateDebut', $params->get('dateDebut'));
$dateCible = new DateTime($params->get('dateDebut'));
$giNbSemAvance = (int) $this->setParamètre('giNbSemAvance', $this->calcNbSemainesAvance($dateCible), 'N');
} else if (!$params->get('dateDebut') && !$session->get('dateDebut')) {
// On n'a pas fourni la date de début, et on ne la connait pas encore
// La retrouver en utilisant le nb de semaines d'avance mémorisé
$giNbSemAvance = (int) $this->getParamètre('giNbSemAvance', '0', 'N');
$today = getdate();
if ($today['wday'] == 1) {
$session->set('dateDebut', $this->calcDateAvecNbSemainesAvance($giNbSemAvance, strtotime("today")));
} else {
$session->set('dateDebut', $this->calcDateAvecNbSemainesAvance($giNbSemAvance, strtotime("last monday"))) ;
}
} else {
// On n'a pas fourni la date de début, mais on l'avait déjà mémorisée : utiliser celle-là
$session->set('dateDebut', $session->get('dateDebut'));
}
// Gestion de la date de fin
if ($params->get('dateFin')) {
// On a fourni la date de fin : la mémoriser
$session->set('dateFin', $params->get('dateFin'));
} else if (!$params->get('dateFin') && !$session->get('dateFin')) {
// On n'a pas fourni la date de fin, et on ne la connait pas encore
// La retrouver en utilisant le nb de semaines d'avance mémorisé
if (!isset($giNbSemAvance)) {
$giNbSemAvance = (int) $this->getParamètre('giNbSemAvance', '0', 'N');
}
$session->set('dateFin', $this->calcDateAvecNbSemainesAvance($giNbSemAvance, strtotime("next sunday")));
} else if (!$params->get('dateFin') && !$session->get('dateFin') && $laRolesUser[0] === 'ROLE_CONCEPTEUR') {
// On n'a pas fourni la date de fin, et on ne la connait pas encore
// POURQUOI $laRolesUser[0] === 'ROLE_CONCEPTEUR' ????
// LG 20231025 début
if ($this->estDevMode()) {
// Mode dev, lancer une exception pour voir quand on passe dans ce cas, en principe inatteignable
throw new \Exception("refreshSession : CE CODE EST EN PRINCIPE INATTEIGNABLE") ;
}
// LG 20231025 fin
$session->set('dateFin', $this->calcDateAvecNbSemainesAvance($giNbSemAvance, strtotime("sunday")));
} else {
// On n'a pas fourni la date de fin, mais on l'avait déjà mémorisée : utiliser celle-là
$session->set('dateFin', $session->get('dateFin'));
}
if ($params->get('iEtablissement')) {
// On a reçu l'Id d'établissement en paramètres : le mémoriser
$session->set('iEtablissement', $params->get('iEtablissement'));
$this->setParamètre("giEtablissement", $params->get('iEtablissement'), "NU");
} else if (!$params->get('iEtablissement') && !$session->get('iEtablissement')) {
// On a pas reçu l'information en paramètre et elle n'est pas encore en session : prendre l'info dans les paramètres
$session->set('iEtablissement', (int)$this->getParamètre("giEtablissement", "-1", "NU"));
}
if ($params->get('iAnnee')) {
// On a reçu l'Id d'année en paramètres : le mémoriser
$session->set('iAnnee', $params->get('iAnnee'));
$this->setParamètre("giAnnée", $params->get('iAnnee'), "NU");
} else if (!$params->get('iAnnee') && !$session->get('iAnnee')) {
// On a pas reçu l'information en paramètre et elle n'est pas encore en session : prendre l'info dans les paramètres
$session->set('iAnnee', (int)$this->getParamètre("giAnnee", "1", "NU"));
}
$paramsFiltre = $request->request;
if(isset($_POST["dansFiltreIntervenant"]) && $_POST["dansFiltreIntervenant"] == "1") {
// Exploitation des données de filtre de la page de liste de intervenants
if($paramsFiltre->get('lAffiche_Présents')) {
if($paramsFiltre->get('lAffiche_Présents') == "on"){
$session->set('intervenantAffichePresent', 'true');
} else {
$session->set('intervenantAffichePresent', 'false');
}
} else {
$session->set('intervenantAffichePresent', 'false');
}
if($paramsFiltre->get('lAffiche_Sortis')) {
if($paramsFiltre->get('lAffiche_Sortis') == "on"){
$session->set('intervenantAfficheSortis', 'true');
} else {
$session->set('intervenantAfficheSortis', 'false');
}
} else {
$session->set('intervenantAfficheSortis', 'false');
}
if($paramsFiltre->get('lAffiche_PasEntrés')) {
if($paramsFiltre->get('lAffiche_PasEntrés') == "on"){
$session->set('intervenantAffichePasEntrés', 'true');
} else {
$session->set('intervenantAffichePasEntrés', 'false');
}
} else {
$session->set('intervenantAffichePasEntrés', 'false');
}
if($paramsFiltre->get('iGroupe')) {
if(count($paramsFiltre->get('iGroupe')) == 0) {
// Aucun groupe sélectionné -> tous les groupes
$session->set('intervenantiGroupe', null);
} else {
$lsLstGroupes = "" ;
foreach ($paramsFiltre->get('iGroupe') As $lsGroupe) {
if ($lsLstGroupes) $lsLstGroupes .= "," ;
$lsLstGroupes .= substr($lsGroupe, 1) ;
}
$session->set('intervenantiGroupe', $lsLstGroupes);
}
} else {
$session->set('intervenantiGroupe', null);
}
if($paramsFiltre->get('iService')) {
if($paramsFiltre->get('iService') == "Tous") {
$session->set('intervenantiService', null);
} else {
$session->set('intervenantiService', $paramsFiltre->get('iService'));
}
} else {
$session->set('intervenantiService', null);
}
if($paramsFiltre->get('iSpécialité')) {
if($paramsFiltre->get('iSpécialité') == "Tous") {
$session->set('intervenantiSpecialité', null);
} else {
$session->set('intervenantiSpecialité', $paramsFiltre->get('iSpécialité'));
}
} else {
$session->set('intervenantiSpecialité', null);
}
if($paramsFiltre->get('lAffiche_Remplacants')) {
if($paramsFiltre->get('lAffiche_Remplacants') == "on"){
$session->set('intervenantRemplaçants', 'true');
} else {
$session->set('intervenantRemplaçants', 'false');
}
} else {
$session->set('intervenantRemplaçants', 'false');
}
if($paramsFiltre->get('lAffiche_Extérieurs')) {
if($paramsFiltre->get('lAffiche_Extérieurs') == "on"){
$session->set('intervenantIntervExt', 'true');
} else {
$session->set('intervenantIntervExt', 'false');
}
} else {
$session->set('intervenantIntervExt', 'false');
}
if($paramsFiltre->get('cIntervenant_Libre1')) {
if($paramsFiltre->get('cIntervenant_Libre1') == "Tous") {
$session->set('intervenantcIntervenant_Libre1', null);
} else {
$session->set('intervenantcIntervenant_Libre1', $paramsFiltre->get('cIntervenant_Libre1'));
}
} else {
$session->set('intervenantcIntervenant_Libre1', null);
}
if($paramsFiltre->get('cIntervenant_Libre2')) {
if($paramsFiltre->get('cIntervenant_Libre2') == "Tous") {
$session->set('intervenantcIntervenant_Libre2', null);
} else {
$session->set('intervenantcIntervenant_Libre2', $paramsFiltre->get('cIntervenant_Libre2'));
}
} else {
$session->set('intervenantcIntervenant_Libre2', null);
}
if($paramsFiltre->get('iEtablissement')) {
$session->set('iEtablissement', $paramsFiltre->get('iEtablissement'));
}
if($paramsFiltre->get('dateDebutAnnee')) {
$session->set('dateDebut', $paramsFiltre->get('dateDebutAnnee'));
}
if($paramsFiltre->get('dateFinAnnee')) {
$session->set('dateFin', $paramsFiltre->get('dateFinAnnee'));
}
} else if(isset($_POST["dansFiltreUsager"]) && $_POST["dansFiltreUsager"] == "1") {
// Exploitation des données de filtre de la page de liste des usagers
if($paramsFiltre->get('lAffiche_Présents')) {
if($paramsFiltre->get('lAffiche_Présents') == "on"){
$session->set('usagersAffichePresents', 'true');
} else {
$session->set('usagersAffichePresents', 'false');
}
} else {
$session->set('usagersAffichePresents', 'false');
}
if($paramsFiltre->get('lAffiche_Sortis')) {
if($paramsFiltre->get('lAffiche_Sortis') == "on"){
$session->set('usagersAfficheSortis', 'true');
} else {
$session->set('usagersAfficheSortis', 'false');
}
} else {
$session->set('usagersAfficheSortis', 'false');
}
if($paramsFiltre->get('lAffiche_PasEntrés')) {
if($paramsFiltre->get('lAffiche_PasEntrés') == "on"){
$session->set('usagersAffichePasEntrés', 'true');
} else {
$session->set('usagersAffichePasEntrés', 'false');
}
} else {
$session->set('usagersAffichePasEntrés', 'false');
}
if($paramsFiltre->get('lGroupePourPériodeDemandée')) {
if($paramsFiltre->get('lGroupePourPériodeDemandée') == "on"){
$session->set('usagersPeriodeDemandée', 'true');
} else {
$session->set('usagersPeriodeDemandée', 'false');
}
} else {
$session->set('usagersPeriodeDemandée', 'false');
}
if($paramsFiltre->get('iGroupe')) {
$session->set('usagersiGroupe', $paramsFiltre->get('iGroupe'));
} else {
$session->set('usagersiGroupe', null);
}
if($paramsFiltre->get('iEtablissement')) {
$session->set('iEtablissement', $paramsFiltre->get('iEtablissement'));
}
if($paramsFiltre->get('dateDebutAnnee')) {
$session->set('dateDebut', $paramsFiltre->get('dateDebutAnnee'));
}
if($paramsFiltre->get('dateFinAnnee')) {
$session->set('dateFin', $paramsFiltre->get('dateFinAnnee'));
}
// LG 20240219 début
} else if(isset($_POST["dansFiltreGroupe"]) && $_POST["dansFiltreGroupe"] == "1") {
// Exploitation des données de filtre de la page de liste des usagers
if($paramsFiltre->get('lAffiche_Présents')) {
if($paramsFiltre->get('lAffiche_Présents') == "on"){
$session->set('groupesAffichePresents', 'true');
} else {
$session->set('groupesAffichePresents', 'false');
}
} else {
$session->set('groupesAffichePresents', 'false');
}
if($paramsFiltre->get('lAffiche_Sortis')) {
if($paramsFiltre->get('lAffiche_Sortis') == "on"){
$session->set('groupesAfficheSortis', 'true');
} else {
$session->set('groupesAfficheSortis', 'false');
}
} else {
$session->set('groupesAfficheSortis', 'false');
}
if($paramsFiltre->get('lAffiche_PasEntrés')) {
if($paramsFiltre->get('lAffiche_PasEntrés') == "on"){
$session->set('groupesAffichePasEntrés', 'true');
} else {
$session->set('groupesAffichePasEntrés', 'false');
}
} else {
$session->set('groupesAffichePasEntrés', 'false');
}
if($paramsFiltre->get('iIntervenant')) {
$session->set('groupesiIntervenant', $paramsFiltre->get('iIntervenant'));
} else {
$session->set('groupesiIntervenant', null);
}
if($paramsFiltre->get('iEtablissement')) {
$session->set('iEtablissement', $paramsFiltre->get('iEtablissement'));
}
if($paramsFiltre->get('dateDebutAnnee')) {
$session->set('dateDebut', $paramsFiltre->get('dateDebutAnnee'));
}
if($paramsFiltre->get('dateFinAnnee')) {
$session->set('dateFin', $paramsFiltre->get('dateFinAnnee'));
}
// LG 20240219 fin
} else if(isset($_POST["dansFiltreActivité"]) && $_POST["dansFiltreActivité"] == "1") {
// Exploitation des données de filtre de la page de liste des activités
if($paramsFiltre->get('llMasqueActivitésSystème')) {
if($paramsFiltre->get('llMasqueActivitésSystème') == "on"){
$session->set('activitésActiSysteme', 'true');
} else {
$session->set('activitésActiSysteme', 'false');
}
} else {
$session->set('activitésActiSysteme', 'false');
}
if($paramsFiltre->get('pbExclActivitésGénériques')) {
if($paramsFiltre->get('pbExclActivitésGénériques') == "on"){
$session->set('activitésActiGenerique', 'true');
} else {
$session->set('activitésActiGenerique', 'false');
}
} else {
$session->set('activitésActiGenerique', 'false');
}
// LG 20240219 début
// if($paramsFiltre->get('iActi')) {
// $session->set('activitésActiBase', '\''.$paramsFiltre->get('iActi').'\'');
//
if($paramsFiltre->get('iActiBase')) {
$session->set('activitésActiBase', '\''.$paramsFiltre->get('iActiBase').'\'');
// LG 20240219 fin
} else {
$session->set('activitésActiBase', '\'SansFiltre\'');
}
if($paramsFiltre->get('iIntervenant')) {
$session->set('activitésInterv', '\''.$paramsFiltre->get('iIntervenant').'\'');
} else {
$session->set('activitésInterv', '\'SansFiltre\'');
}
if($paramsFiltre->get('iUsager')) {
$session->set('activitésUsager', '\''.$paramsFiltre->get('iUsager').'\'');
} else {
$session->set('activitésUsager', '\'SansFiltre\'');
}
if($paramsFiltre->get('iSalle')) {
$session->set('activitésSalle', '\''.$paramsFiltre->get('iSalle').'\'');
} else {
$session->set('activitésSalle', '\'SansFiltre\'');
}
if($paramsFiltre->get('iGroupe')) {
$session->set('activitésGroupe', '\''.$paramsFiltre->get('iGroupe').'\'');
} else {
$session->set('activitésGroupe', '\'SansFiltre\'');
}
if($paramsFiltre->get('iEtablissement')) {
$session->set('iEtablissement', $paramsFiltre->get('iEtablissement'));
}
}
// Remettre à zéro les variables d'environnement de filtre si c'est demandé
if(isset($_POST["resetFiltreIntervenant"]) && $_POST["resetFiltreIntervenant"] == "1") {
$session->remove('intervenantAffichePresent');
$session->remove('intervenantAfficheSortis');
$session->remove('intervenantAffichePasEntrés');
$session->remove('intervenantiGroupe');
$session->remove('intervenantiService');
$session->remove('intervenantiSpecialité');
$session->remove('intervenantRemplaçants');
$session->remove('intervenantcIntervenant_Libre1');
$session->remove('intervenantcIntervenant_Libre2');
} else if (isset($_POST["resetFiltreUsager"]) && $_POST["resetFiltreUsager"] == "1") {
$session->remove('usagersAffichePresents');
$session->remove('usagersAfficheSortis');
$session->remove('usagersAffichePasEntrés');
$session->remove('usagersPeriodeDemandée');
$session->remove('usagersiGroupe');
// LG 20240219 début
} else if (isset($_POST["resetFiltreGroupe"]) && $_POST["resetFiltreGroupe"] == "1") {
$session->remove('groupesAffichePresents');
$session->remove('groupesAfficheSortis');
$session->remove('groupesAffichePasEntrés');
$session->remove('groupesiIntervenant');
// LG 20240219 fin
} else if (isset($_POST["resetFiltreActivité"]) && $_POST["resetFiltreActivité"] == "1") {
$session->remove('activitésActiSysteme');
$session->remove('activitésActiGenerique');
$session->remove('activitésActiBase');
$session->remove('activitésInterv');
$session->remove('activitésUsager');
$session->remove('activitésSalle');
$session->remove('activitésGroupe');
}
// ---------------------------------------------------------------------------------------------
// Remettre les valeurs par défaut des variables d'environnement de filtres si elles sont indéfinies
// ---------------------------------------------------------------------------------------------
// Variables des filtres d'intervenants
if($session->get('intervenantAffichePresent')) {
// OK
} else {
$session->set('intervenantAffichePresent', 'true');
}
if($session->get('intervenantAfficheSortis')) {
// OK
} else {
$session->set('intervenantAfficheSortis', 'false');
}
if($session->get('intervenantAffichePasEntrés')) {
// OK
} else {
$session->set('intervenantAffichePasEntrés', 'false');
}
if($session->get('intervenantiGroupe')) {
// OK
} else {
$session->set('intervenantiGroupe', null);
}
if($session->get('intervenantiService')) {
// OK
} else {
$session->set('intervenantiService', -1);
}
if($session->get('intervenantiSpecialité')) {
// OK
} else {
$session->set('intervenantiSpecialité', -1);
}
if($session->get('intervenantRemplaçants')) {
// OK
} else {
$session->set('intervenantRemplaçants', 'false');
}
if($session->get('intervenantcIntervenant_Libre1')) {
// OK
} else {
$session->set('intervenantcIntervenant_Libre1', null);
}
if($session->get('intervenantcIntervenant_Libre2')) {
// OK
} else {
$session->set('intervenantcIntervenant_Libre2', null);
}
if($session->get('intervenantiService')) {
// OK
} else {
$session->set('intervenantiService', -1);
}
// ---------------------------------------------------------------------------------------------
// Variables des filtres d'usagers
if($session->get('usagersAffichePresents')) {
// OK
} else {
$session->set('usagersAffichePresents', 'true');
}
if($session->get('usagersAfficheSortis')) {
// OK
} else {
$session->set('usagersAfficheSortis', 'false');
}
if($session->get('usagersAffichePasEntrés')) {
// OK
} else {
$session->set('usagersAffichePasEntrés', 'false');
}
if($session->get('usagersPeriodeDemandée')) {
// OK
} else {
$session->set('usagersPeriodeDemandée', 'false');
}
if($session->get('usagersiGroupe')) {
// OK
} else {
$session->set('usagersiGroupe', null);
}
// LG 20240219 début
// ---------------------------------------------------------------------------------------------
// Variables des filtres de groupes
if($session->get('groupesAffichePresents')) {
// OK
} else {
$session->set('groupesAffichePresents', 'true');
}
if($session->get('groupesAfficheSortis')) {
// OK
} else {
$session->set('groupesAfficheSortis', 'false');
}
if($session->get('groupesAffichePasEntrés')) {
// OK
} else {
$session->set('groupesAffichePasEntrés', 'false');
}
if($session->get('groupesiIntervenant')) {
// OK
} else {
$session->set('groupesiIntervenant', null);
}
// LG 20240219 fin
// ---------------------------------------------------------------------------------------------
// Variables des filtres d'usagers
if($session->get('activitésActiSysteme')) {
// OK
} else {
$session->set('activitésActiSysteme', 'true');
}
if($session->get('activitésActiGenerique')) {
// OK
} else {
$session->set('activitésActiGenerique', 'true');
}
if($session->get('activitésActiBase')) {
// OK
} else {
$session->set('activitésActiBase', '\'SansFiltre\'');
}
if($session->get('activitésInterv')) {
// OK
} else {
$session->set('activitésInterv', '\'SansFiltre\'');
}
if($session->get('activitésUsager')) {
// OK
} else {
$session->set('activitésUsager', '\'SansFiltre\'');
}
if($session->get('activitésSalle')) {
// OK
} else {
$session->set('activitésSalle', '\'SansFiltre\'');
}
if($session->get('activitésGroupe')) {
// OK
} else {
$session->set('activitésGroupe', '\'SansFiltre\'');
}
// JM 20220304 fin
return $session;
}
public function setVariableDeSession($psNomParametre, $pvValeur, $psType, Request $request) {
$session = $request->getSession();
if ($psNomParametre === 'dateDebut') {
$session->set('dateDebut', $pvValeur);
// LG 20240409 début
// Recalculer et enregistrer le nb de semaines d'avance
$dateCible = new DateTime($pvValeur);
$giNbSemAvance = (int) $this->setParamètre('giNbSemAvance', $this->calcNbSemainesAvance($dateCible), 'N');
// LG 20240409 fin
}
if ($psNomParametre === 'dateFin') {
$session->set('dateFin', $pvValeur);
}
if ($psNomParametre === 'giEtablissement') {
$session->set('giEtablissement', $pvValeur);
$this->setParamètre("giEtablissement", $pvValeur, "NU");
}
if ($psNomParametre === 'giAnnée') {
$session->set('giAnnée', $pvValeur);
$this->setParamètre("giAnnée", $pvValeur, "NU");
}
$response = new Response('{"status": "OK"}', Response::HTTP_OK, array('content-type' => 'text/json'));
return $response;
}
public function entityForActiviteAction($psNomTable, $piId, $psOnglet, Request $request) {
$em = $this->getDoctrineManager();
if ($psNomTable === "seancesTrad") {
return $this->entityFormAction($request, 'seances', $piId, $psOnglet);
} else if ($psNomTable === "activitesTrad") {
$seances = $em->getRepository("PaaBundle:seances")->find($piId);
$idActivite = $seances->getActivité();
return $this->entityFormAction($request, 'activites', $idActivite, "");
} else {
throw new \Exception("Cas non prévu : table " . $psNomTable);
}
}
/*
* recuperation du html pour afficher la page d'option de cration de semaine
* MC 20201023
* retounre le fichier twig
*/
function pageCreeSemaineAction(request $request, $pdDebut, $pdFin) {
//si pas concepteur retunr echec A faire
if (!$this->get('security.authorization_checker')->isGranted('ROLE_CONCEPTEUR')) {
// L'utilisateur en cours ne dispose pas des droits sur cette page
$loUser = $this->getUser();
if ($loUser) {
$lcUser = " " . $loUser->getusername();
} else {
$lcUser = "";
}
$lsHTML = "Désolé" . $lcUser . ", vous n'avez pas accès à cette information.";
return new \Symfony\Component\HttpFoundation\Response($lsHTML);
}
$laOptions = array(
'psLstTypesRes' => "@Tous@"
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
$laOptions['pdDebut'] = $pdDebut ;
$laOptions['pdFin'] = $pdFin ;
return $this->render('@Paa/Dialog/creeSemaine/creeSemaine.html.twig', $laOptions);
}
//Utilisé pour traiter les données recu du formulaire du popup cree semaine
function creeSemaineAction(Request $request) {
if (!$this->get('security.authorization_checker')->isGranted('ROLE_CONCEPTEUR')) {
// L'utilisateur en cours ne dispose pas des droits sur cette page
$loUser = $this->getUser();
if ($loUser) {
$lcUser = " " . $loUser->getusername();
} else {
$lcUser = "";
}
$lsHTML = "Désolé" . $lcUser . ", vous n'avez pas accès à cette information.";
return new \Symfony\Component\HttpFoundation\Response($lsHTML);
}
$ltFormData = $request->request->all();
$loFormData = new \stdClass;
$loFormData->isLstRes = "";
//pour chaque ligne du tableau on convertie la valeur "on" en true pour la preparer avant envoie dans le repositorie
foreach ($ltFormData as $key => $value) {
if ($value == "on") {
$value = 'true';
$loFormData->$key = $value;
} elseif ($key == "listeRessources") {
//sert a cree la chaine de caractere si il y a une liste de ressources
if (is_null($value)) {
$loFormData->isLstRes = null;
} else {
foreach ($value as $key => $ressource) {
$loFormData->isLstRes .= $ressource . ",";
}
}
} elseif ($key == "listeChoixRessources") {
if ($value == "allRessources") {
$loFormData->isLstRes = null;
}
} else {
$loFormData->$key = $value;
}
}
// var_dump($loFormData);
$creeSemaine = $this->getDoctrineRepository("PaaBundle:etablissementsSemaines")->creeSemaine($loFormData);
if ($creeSemaine) {
// La fonction a renvoyé un message d'erreur
$ress = "ko";
} else {
$ress = "ok";
}
$response = new Response(
'{"status": "' . $ress . '", "message": "' . $creeSemaine . '" }', Response::HTTP_OK, array('content-type' => 'text/json')
);
return $response;
}
//MC 20210419 debut
function pageCollageSpecialAction(request $request, $libelle, $dateDest, $timeDebut, $timeFin,$estSeanceVide, $estSeanceVirtuel) {
if (!$this->get('security.authorization_checker')->isGranted('ROLE_CONCEPTEUR')) {
// L'utilisateur en cours ne dispose pas des droits sur cette page
$loUser = $this->getUser();
if ($loUser) {
$lcUser = " " . $loUser->getusername();
} else {
$lcUser = "";
}
$lsHTML = "Désolé" . $lcUser . ", vous n'avez pas accès à cette information.";
return new \Symfony\Component\HttpFoundation\Response($lsHTML);
}
$laOptions = array(
'libelle' => $libelle,
'dateDest' => $dateDest,
'timeDebut' => uNumVersHeure($timeDebut/60,false,true,true),
'timeFin' => uNumVersHeure($timeFin/60,false,true,true),
'estSeanceVide' => $estSeanceVide,
'estSeanceVirtuel' => $estSeanceVirtuel,
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa/Dialog/colagespecial/colagespecial.html.twig', $laOptions);
}
//MC 20210419 Fin
//MC 20210518 debut
function pageEnvoiMailAction(request $request, $liidSeance) {
if (!$this->get('security.authorization_checker')->isGranted('ROLE_CONCEPTEUR')) {
// L'utilisateur en cours ne dispose pas des droits sur cette page
$loUser = $this->getUser();
if ($loUser) {
$lcUser = " " . $loUser->getusername();
} else {
$lcUser = "";
}
$lsHTML = "Désolé" . $lcUser . ", vous n'avez pas accès à cette information.";
return new \Symfony\Component\HttpFoundation\Response($lsHTML);
}
$em = $this->getDoctrineManager();
$repository = $em->getRepository("PaaBundle:seances");
$loSeance = $repository->find($liidSeance);
$lsSujet = "";
$lsCorp = $repository->envoieEnvoieSeanceParMail_RtvCorps($loSeance->getid(),$lsSujet);
$laOptions = array(
'texte' => $lsCorp,
'sujet' => $lsSujet
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa/Dialog/envoimail/envoimail.html.twig', $laOptions);
}
//MC 20210518 fin
// LG 20210610 : cette méthode doit être dans un controleur héritant d'un controleur standard Symphony (par exemple, pas dans ErrorController)
function rapportErreurClientAction(Request $request) {
$LogId = $request->request->get('iderreur');
$Message = $request->request->get('Message');
// Si le message n'est pas vide, il sera envoyé dans les logs
if ($Message != "") {
$Rapport = "Message Utilisateur en commentaire du bug [logId: " . $LogId . "] : \"" . $Message . '"' ;
$lsProjectDir = $this->get('kernel')->getProjectDir();
$logger = new \App\PaaBundle\Component\MyLogger('PAABaseController', $lsProjectDir);
$logger->Log($Rapport, "info", array(), false);
}
if (isset($_POST['retourpage'])) {
// LG 20210210 old return $this->redirectToRoute($_SERVER['HTTP_REFERER']);
return $this->redirect($_SERVER['HTTP_REFERER']);
} else if (isset($_POST['accueil'])) {
return $this->redirectToRoute('paa_index');
} else {
return new Response('{"status": "OK"}', Response::HTTP_OK, array('content-type' => 'text/json')) ;
}
}
// $request : l'objet request Symfony
// $psNomTable : nom de la table/entité pour laquelle on souhaite récupérer une entité
// $piId : Id de l'entité demandée
// $psOnglet : l'onglet enttiyForm demandé, inutilisé ici
// $psContexte : informations de context, inutilisé ici (utilisé dans entityFormAction pour distinguer le contexte "usagers du groupes" du contexte "Groupes de l'usager")
public function entityFormAction_ActiBaseSousGroupeGroupe(request $request, $psId, $psOnglet, $psContexte) {
if ($this->RedirectIfNotGranted($request, $this->isGranted(PaaVoter::VOIR . 'actibases'), $response))
return $response;
$laOptions = Array();
$lbADroitDEcriture = $this->getDroitsEcritureLectureOrDie('actibases', $psId);
$laOptions["pbDroitEcriture"] = $lbADroitDEcriture;
$psSousType = "";
if (substr($psId, 0, 3) == 'GAB') {
$Type = 'GAB';
$Id = substr($psId, 3, strlen($psId) - 3);
$lsNomTable = "actiGroupesacti";
} elseif (substr($psId, 0, 4) == 'SGAB') {
$Type = 'SGAB';
$Id = substr($psId, 4, strlen($psId) - 4);
$lsNomTable = "actiSsgroupesacti";
} elseif (substr($psId, 0, 2) == 'AB') {
$Type = 'AB';
$Id = substr($psId, 2, strlen($psId) - 2);
if (substr($Id, 0, 17) == "_NouvellePourSGAB") {
// On cherche à créer une nouvelle activité de base et on fournit l'Id du SGAB concerné
$liSousGroupe = substr($Id, 17, strlen($Id) - 17);
$Id = 0 ;
}
$lsNomTable = "actibases";
} else {
$lsNomTable = "";
$Type = null;
// throw new exception("Cas non prévu : " . $psId);
}
$laOptions["bAutoriseListing"] = $this->autoriseListing($lsNomTable);
$laOptions["psNomTable"] = strtolower($lsNomTable);
$laOptions["psURLTable"] = "actiBaseSousGroupeGroupe";
$laOptions["psLibelléTable"] = "Arborescence des activités de base";
$laOptions["Type"] = $Type;
//modifier le cas pour changer d'entity en fonction de l'onglet et mettre l'onglet intervenant de base
if ($Type == 'AB') {
$lRepo = $this->getDoctrineRepository("PaaBundle:ressourcesActibases");
$loListeIntervenants = $lRepo->findAllPourActiBase('I', $Id, $this);
$loListeUsagers = $lRepo->findAllPourActiBase('U', $Id, $this);
$loListeGroupes = $lRepo->findAllPourActiBase('G', $Id, $this);
$loListeSalles = $lRepo->findAllPourActiBase('S', $Id, $this);
$laOptions["poListeIntervenants"] = $loListeIntervenants;
$laOptions["poListeUsagers"] = $loListeUsagers;
$laOptions["poListeGroupes"] = $loListeGroupes;
$laOptions["poListeSalles"] = $loListeSalles;
}
$em = $this->getDoctrineManager();
if (!$Id) {
if ($Type == 'AB') {
$loEntité = new \App\PaaBundle\Entity\actibases($this->getDoctrineManager());
if (isset($liSousGroupe)) {
$loEntité->setIsousgroupe($liSousGroupe) ;
} else {
$toto = "toto" ; // Pour mettre un point d'arrêt
}
$loEntité->setIetablissement(intval($this->getIdEtablissementCourant())) ;
} else if ($Type == "GAB") {
$loEntité = new \App\PaaBundle\Entity\actiGroupesacti($this->getDoctrineManager());
$loEntité->setIetablissement(intval($this->getIdEtablissementCourant())) ;
} else if ($Type == "SGAB") {
$loEntité = new \App\PaaBundle\Entity\actiSsgroupesacti($this->getDoctrineManager());
$loEntité->setIetablissement(intval($this->getIdEtablissementCourant())) ;
} else {
$loEntité = null ;
}
} else {
$loEntité = $em->getRepository("PaaBundle:" . $lsNomTable)->find($Id);
if ($loEntité == null) {
return new \Symfony\Component\HttpFoundation\Response("Enregistrement inexistant ;"
, Response::HTTP_NOT_FOUND
, array('content-type' => 'text/html')
);
}
}
if ($lsNomTable == "actibases") {
$psSousType = $this->getSousTypeFormActibase($loEntité->getiSousGroupe());
} else {
$psSousType = "" ;
}
$laFormOptions = array();
$laFormOptions['doctrine'] = $this->get('doctrine'); // Injecter Doctrine dans le form builder
$laFormOptions['controller'] = $this; // Injecter le controleur dans le form builder // LG 20220415
$loForm = $this->createForm('App\PaaBundle\Form\ActiBases\\' . $lsNomTable . $psSousType . 'Type', $loEntité, $laFormOptions);
$laOptions['poForm'] = $loForm->createView();
$laOptions['poEntité'] = $loEntité;
$laOptions["poController"] = $this; //JM 20220413 ajout controller
return $this->render('@Paa/form/actiBases/actiBaseSousGroupeGroupe.html.twig', $laOptions);
}
// LG 20210720 passé de <PlanningController début
// Préparer la boite de dialogue pour affichage à l'utilisateur
// Lors d'une action sur le planning pour une séance sans série
// private function jsonDialogue($pcMsgErr, $pcMsgAvertissement, $paDemandeInitiale) {
protected function jsonDialogue($pcMsgErr, $pcMsgAvertissement, $paDemandeInitiale, $psAfterAction = '"refreshAfterAction_Dialog_OK"') {
if ($pcMsgErr) {
// Préparer l'affichage de l'erreur
$lsJSONDialogue = '{"Dialogue": {"Message": ' . json_encode($pcMsgErr) . ', "Titre":"Déplacement de la séance"'
. ', "Boutons": [{"text":"OK", "Action":"refreshAfterAction_Dialog_Annuler"}]}'
. '}';
} else if ($pcMsgAvertissement) {
$lsJSONDialogue = '{"Dialogue": {"Message": ' . json_encode($pcMsgAvertissement) . ', "Titre":"Déplacement de la séance"'
. ', "Boutons": [{"text":"OK", "class": "cmdOk", "Action":"refreshAfterAction_Dialog_OK"}'
. ', {"text":"Annuler", "class": "cmdCancel", "Action":"refreshAfterAction_Dialog_Annuler"}]}'
. ', "DemandeInitiale": ' . json_encode($paDemandeInitiale)
. ', "DialogueEnCours": "ConfirmeDéplacement"'
. '}';
} else {
$lsJSONDialogue = '';
}
return $lsJSONDialogue;
}
// Préparer la boite de dialogue pour affichage à l'utilisateur
// Lors d'une action sur le planning pour une séance avec série
// $pcMsgAvertissement : le texte du message à afficher
// $paDemandeInitiale : le tableau des données de la requête initiale
// $poSéance : l'entité séance initialement concerné par la demande
// $psTypeModification : valeurs possibles : "Déplacement", "SuppressionSurSérie"
// LG 20210716 old private function jsonDialogue_SérieSéances($pcMsgAvertissement, $paDemandeInitiale, $poSéance) {
protected function jsonDialogue_SérieSéances($pcMsgAvertissement, $paDemandeInitiale, $poSéance, $psTypeModification = "Déplacement", $pbScinderDisabled = false) {
$lcMsgAvertissement = "Cette séance fait partie d'une série de séances dont les caractéristiques sont résumées ci-dessous.\n"
. "Souhaitez-vous répercuter le changement fait sur cette séance aux autres séances de cette série ?";
if ($pcMsgAvertissement) {
$lcMsgAvertissement .= "<br><br>" . $pcMsgAvertissement ;
}
//LP 08/07/2021 On Mémorise le choix de l'utilisateur debut
// LG 20230331 old $liBoutonActif = $this->getParamètresBDD()->getParamètre("gsDemandeTypeModifSerie", "2", "NU");
$liBoutonActif = $this->getParamètre("gsDemandeTypeModifSerie", "2", "NU");
$CetteSeanceFocused = "";
$ToutLaSerieFocused = "";
$IciFocused = "";
$ScinderFocused = "";
$ChaqueFocused = "";
if ($liBoutonActif == 1) {
$CetteSeanceFocused = '"focused": true, ';
} else if ($liBoutonActif == 2) {
$ToutLaSerieFocused = '"focused": true, ';
} else if ($liBoutonActif == 3) {
$IciFocused = '"focused": true, ';
} else if ($liBoutonActif == 4){
$ScinderFocused = '"focused": true,';
} else {
$ChaqueFocused = '"focused": true,';
}
$lsOptionScinder = ', {"text":"Scinder ici", "id":"cmdScinder", "disabled": ' . ($pbScinderDisabled?'true':'false') . ','.$ScinderFocused.' "Action":"refreshAfterAction_Dialog_Série_Scinder"}' ;
$lsJSONDialogue = '{"Dialogue": {"Message": ' . json_encode($lcMsgAvertissement) . ', "Titre":"Modification d‘une séance faisant partie d‘une série"'
. ', "Boutons": [{"text":"Cette seance", "id":"cmdCetteSeance", '.$CetteSeanceFocused.' "Action":"refreshAfterAction_Dialog_Série_CetteSéance"}'
. ', {"text":"Toute la série", "id":"cmdTouteLaSerie", '.$ToutLaSerieFocused.' "Action":"refreshAfterAction_Dialog_Série_TouteLaSérie"}'
. ', {"text":"A partir d\'ici (inclus)", "id":"cmdIci",'.$IciFocused.' "Action":"refreshAfterAction_Dialog_Série_APartirDeCetteSéance"}'
. $lsOptionScinder
. ', {"text":"Chaque ' . strtolower($poSéance->getNomJour()) . '", "id":"cmdChaque", '.$ChaqueFocused.' "Action":"refreshAfterAction_Dialog_Série_CeJourDeLaSemaine"}'
. ', {"text":"Annuler", "class": "cmdCancel", "Action":"refreshAfterAction_Dialog_Annuler"}]}'
. ', "DemandeInitiale": ' . json_encode($paDemandeInitiale)
. ', "DialogueEnCours": "Confirme' . $psTypeModification . '"'
. '}';
return $lsJSONDialogue;
}
//LP 08/07/2021 On Mémorise le choix de l'utilisateur fin
// LG 20210720 passé de <PlanningController fin
// Diffuser les caractéristiques d'une séance sur toutes les autres séances de la même série de séances
// psTypeDiffusionSérie : le type de diffusion : Série_CetteSéance, Série_TouteLaSérie, Série_APartirDeCetteSéance, Série_Scinder, Série_CeJourDeLaSemaine
// piIdSeance : id de la séance à l'origine de la modification
// piIdSérie : id de la série de cette séance
// pdDate : date de cette séance
//(poSeanceInitiale) : entité séance, données avant modification (+ propriété facultative sLstRes : liste des participants "I1,G2,...")
//(poSeanceFinale) : entité séance, données après modification (+ propriété facultative sLstRes : liste des participants "I1,G2,...")
// LG 20210719
protected function serieSeances_DiffuseModificationSurSérie($psTypeDiffusionSérie
, $piIdSeance
, $piIdSérie
, $pdDate
, $poSeanceInitiale = null // LG 20220729
, $poSeanceFinale = null // LG 20220729
) {
// Mémoriser le choix de l'utilisateur
$this->serieSeances_EnregistreChoixUtilisateur($psTypeDiffusionSérie) ;
// Effectuer la diffusion
// LG 20230830 old if ($psTypeDiffusionSérie == "Série_CetteSéance") {
if ($psTypeDiffusionSérie == "Série_CetteSéance" || $psTypeDiffusionSérie == "Serie_CetteSéance") {
// RAS
return ;
} else if ($psTypeDiffusionSérie == "Série_TouteLaSérie") {
$liPortée = 0 ;
$pdDate = null ;
} else if ($psTypeDiffusionSérie == "Série_APartirDeCetteSéance") {
// Appliquer les changements à partir de cette séance
$liPortée = 1 ;
} else if ($psTypeDiffusionSérie == "Série_Scinder") {
// Scinder à partir de la date de la séance
$liPortée = 3 ;
} else if ($psTypeDiffusionSérie == "Série_CeJourDeLaSemaine") {
// Appliquer le changement à chaque jour de la semaine qui est le même que celui de la séance modifiée, à partir de la date de la séance modifiée
$liPortée = 2 ;
} else {
throw new \Exception("Cas de type de diffusion sur la série non prévu : " . $psTypeDiffusionSérie) ;
}
$lbResult = $this->getDoctrineManager()
->getRepository("PaaBundle:seriesseances")
->serieseances_diffusesurserie($piIdSeance // $piséancemodèle
, $piIdSérie // &$pisérie
, $pdDate // $pdDate
, $liPortée // $piPortée
, 0 // $pitypedépendance
, $poSeanceInitiale // $poSeanceInitiale, LG 20220729
, $poSeanceFinale // $poSeanceFinale, LG 20220729
);
return $lbResult ;
}
// Obtenir la liste des évolutions de PAA
public function evolutionsAction(request $request) {
$m = $this->getDoctrineManager();
$laListeVersion = $m->getRepository("PaaBundle:changelog")->getAllVersions();
if (count($laListeVersion) > 0) {
$ldVersionChoisieDebut = $laListeVersion[count($laListeVersion) - 1]->d_version ;
$ldVersionChoisieFin = $laListeVersion[0]->d_version ;
} else {
$ldVersionChoisieDebut = date('Y-m-d') ;
$ldVersionChoisieFin = date('Y-m-d') ;
}
$lbCategories = false ;
$laParamètres = $request->request->all() ;
if (isset($laParamètres["deDateVersion"])) $ldVersionChoisieDebut = $laParamètres["deDateVersion"] ;
if (isset($laParamètres["aDateVersion"])) $ldVersionChoisieFin = $laParamètres["aDateVersion"] ;
if (isset($laParamètres["categories"])) $lbCategories = ($laParamètres["categories"] =="on") ;
$laListeEntites = $m->getRepository("PaaBundle:changelog")->getAllHierarchiqueParType($ldVersionChoisieDebut, $ldVersionChoisieFin, $lbCategories);
$laOptions = array(
'paListeVersion' => $laListeVersion,
'pdVersionChoisieDebut' => $ldVersionChoisieDebut,
'pdVersionChoisieFin' => $ldVersionChoisieFin,
'poListeEntites' => $laListeEntites,
'psNomTable' => 'changelog',
'pbCategories' => $lbCategories
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa/Default/evolutions.html.twig', $laOptions);
}
// Obtenir une aide pour bien démarrer avec PAA
// LG 20220914
public function aidePriseEnMainAction(request $request) {
$laOptions = array() ;
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa/Default/aidePriseEnMain.html.twig', $laOptions);
}
// Mémoriser le choix de l'utilisateur en réponse à jsonDialogue_SérieSéances
// LG 20210719
protected function serieSeances_EnregistreChoixUtilisateur($psTypeDiffusionSérie) {
if ($psTypeDiffusionSérie == "Série_TouteLaSérie") {
$this->setParamètre("gsDemandeTypeModifSerie", "2", "NU");
} else if ($psTypeDiffusionSérie == "Série_APartirDeCetteSéance") {
$this->setParamètre("gsDemandeTypeModifSerie", "3", "NU");
} else if ($psTypeDiffusionSérie == "Série_Scinder") {
$this->setParamètre("gsDemandeTypeModifSerie", "4", "NU");
} else if ($psTypeDiffusionSérie == "Série_CeJourDeLaSemaine") {
$this->setParamètre("gsDemandeTypeModifSerie", "5", "NU");
}
}
// JM 20211102 Début
// LG 20240219 old function filtresAction(request $request, $psNomTable){
function filtresAction(request $request, $psNomTable, $pbNoReinit){
// LG 20231025 dédupliqué début
$m = $this->getDoctrineManager();
$session = $this->refreshSession($request);
$laOptions = Array();
$laOptions['poController'] = $this;
// LG 20231025 dédupliqué fin
// LG 20240219 début
$laOptions["pbNoReinit"] = $pbNoReinit ? true : false ;
// LG 20240219 fin
if($psNomTable == "intervenants"){
// LG 20231025 passé + haut $m = $this->getDoctrineManager();
// LG 20231025 passé + haut $session = $this->refreshDatesSession($request);
$liEtablissement = $request->getSession()->get('iEtablissement');
$lsParamètres = "iEtablissement=$liEtablissement";
$repo = $m->getRepository("PaaBundle:groupes");
$loListeGroupes = $repo->findAllAvecParametres($lsParamètres);
$loListeEtablissements = $m->getRepository("PaaBundle:ressources")->findAllFiltrée("E");
$loListeService = $m->getRepository("PaaBundle:services")->findAll();
$loListeSpecialite = $m->getRepository("PaaBundle:specialites")->findAll();
$loListeLibre1 = $m->getRepository("PaaBundle:intervenants")->getAllLibre1();
$loListeLibre2 = $m->getRepository("PaaBundle:intervenants")->getAllLibre2();
$pdDebut = $session->get('dateDebut');
$pdFin = $session->get('dateFin');
// LG 20231025 passé + haut $laOptions = Array();
// LG 20231025 passé + haut $laOptions['poController'] = $this;
$laOptions["pdDebut"] = $pdDebut;
$laOptions["pdFin"] = $pdFin;
$laOptions['entityGroupe'] = $loListeGroupes;
$laOptions['paEtablissements'] = $loListeEtablissements;
$laOptions['entityService'] = $loListeService;
$laOptions['entitySpecialite'] = $loListeSpecialite;
$laOptions['entityLibre1'] = $loListeLibre1;
$laOptions['entityLibre2'] = $loListeLibre2;
$anneeCourante = $this->getIdAnnéeCourante();
$paAnnées = $m->getRepository("PaaBundle:annees")->find(intval($anneeCourante));
$laOptions['paAnnées'] = $paAnnées;
$laOptions["affichePresent"] = $session->get('intervenantAffichePresent');
$laOptions["afficheSortis"] = $session->get('intervenantAfficheSortis');
$laOptions["affichePasEntrés"] = $session->get('intervenantAffichePasEntrés');
$laOptions["iGroupe"] = "G" . str_replace(",", ",G", $session->get('intervenantiGroupe'));
$laOptions["iEtablissement"] = $session->get('iEtablissement');
$laOptions["iService"] = $session->get('intervenantiService');
$laOptions["iSpecialité"] = $session->get('intervenantiSpecialité');
$laOptions["Remplaçants"] = $session->get('intervenantRemplaçants');
$laOptions["IntervExt"] = $session->get('intervenantIntervExt');
$laOptions['libre1'] = $session->get('intervenantcIntervenant_Libre1');
$laOptions['libre2'] = $session->get('intervenantcIntervenant_Libre2');
return $this->render('@Paa/Dialog/filtres/filtreIntervenants.html.twig', $laOptions);
} else if($psNomTable == "usagers"){
// LG 20231025 passé + haut $m = $this->getDoctrineManager();
// LG 20231025 passé + haut $session = $this->refreshDatesSession($request);
$liEtablissement = $session->get('iEtablissement');
$lsParamètres = "iEtablissement=$liEtablissement";
$repo = $m->getRepository("PaaBundle:groupes");
// LG 20240201 déac inutilisé $loListeGroupes = $repo->findAllAvecParametres($lsParamètres);
$loListeEtablissements = $m->getRepository("PaaBundle:ressources")->findAllFiltrée("E");
$pdDebut = $session->get('dateDebut');
$pdFin = $session->get('dateFin');
// LG 20231025 passé + haut $laOptions = Array();
$anneeCourante = $this->getIdAnnéeCourante();
$loAnnée = $m->getRepository("PaaBundle:annees")->find(intval($anneeCourante));
// LG 20231025 passé + haut $laOptions['poController'] = $this;
$laOptions['pdDebut'] = $pdDebut;
$laOptions['pdFin'] = $pdFin;
// LG 20240201 déac inutilisé $laOptions['entityGroupe'] = $loListeGroupes;
$laOptions['paEtablissements'] = $loListeEtablissements;
$laOptions['poAnnée'] = $loAnnée;
$laOptions["affichePresent"] = $session->get('usagersAffichePresents');
$laOptions["afficheSortis"] = $session->get('usagersAfficheSortis');
$laOptions["affichePasEntrés"] = $session->get('usagersAffichePasEntrés');
// LG 20240201 début
// $laOptions["iGroupe"] = $session->get('usagersiGroupe');
$lvGroupes = $session->get('usagersiGroupe') ;
if (is_array($lvGroupes)) {
$laOptions["iGroupe"] = implode(",", $lvGroupes);
} else {
$laOptions["iGroupe"] = $lvGroupes ;
}
// LG 20240201 fin
$laOptions["iEtablissement"] = $session->get('iEtablissement');
$laOptions["pbGroupesDeLaPeriodeDemandée"] = $session->get('usagersPeriodeDemandée');
return $this->render('@Paa/Dialog/filtres/filtreUsagers.html.twig', $laOptions);
// LG 20240219 début
} else if($psNomTable == "groupes"){
$liEtablissement = $session->get('iEtablissement');
$lsParamètres = "iEtablissement=$liEtablissement";
$repo = $m->getRepository("PaaBundle:groupes");
$loListeEtablissements = $m->getRepository("PaaBundle:ressources")->findAllFiltrée("E");
$pdDebut = $session->get('dateDebut');
$pdFin = $session->get('dateFin');
$anneeCourante = $this->getIdAnnéeCourante();
$loAnnée = $m->getRepository("PaaBundle:annees")->find(intval($anneeCourante));
$laOptions['pdDebut'] = $pdDebut;
$laOptions['pdFin'] = $pdFin;
$laOptions['paEtablissements'] = $loListeEtablissements;
$laOptions['poAnnée'] = $loAnnée;
$laOptions["affichePresent"] = $session->get('groupesAffichePresents');
$laOptions["afficheSortis"] = $session->get('groupesAfficheSortis');
$laOptions["affichePasEntrés"] = $session->get('groupesAffichePasEntrés');
$lvIntervenants = $session->get('groupesiIntervenant') ;
if (is_array($lvIntervenants)) {
$laOptions["iIntervenant"] = implode(",", $lvIntervenants);
} else {
$laOptions["iIntervenant"] = $lvIntervenants ;
}
$laOptions["iEtablissement"] = $session->get('iEtablissement');
return $this->render('@Paa/Dialog/filtres/filtreGroupes.html.twig', $laOptions);
// LG 20240219 fin
// LG 20240215 old } else if($psNomTable == "activites"){
} else if($psNomTable == "activites" || $psNomTable == "activités"){
// LG 20231025 passé + haut $m = $this->getDoctrineManager();
// LG 20231025 passé + haut $session = $this->refreshDatesSession($request);
$liEtablissement = $session->get('iEtablissement');
$lsParamètres = "iEtablissement=$liEtablissement";
$repo = $m->getRepository("PaaBundle:groupes");
$loListeGroupes = $repo->findAllAvecParametres($lsParamètres);
$repo = $this->getDoctrineRepository("PaaBundle:actibases");
$loListeActiBase = $repo->findAll();
$repo = $this->getDoctrineRepository("PaaBundle:intervenants");
$loListeIntervenants = $repo->findAllAvecParametres($lsParamètres);
$repo = $this->getDoctrineRepository("PaaBundle:usagers");
$loListeUsagers = $repo->findAllAvecParametres($lsParamètres);
$repo = $this->getDoctrineRepository("PaaBundle:groupes");
$loListeGroupes = $repo->findAllAvecParametres($lsParamètres);
$repo = $this->getDoctrineRepository("PaaBundle:salles");
$loListeSalles = $repo->findAllAvecParametres($lsParamètres);
$loListeEtablissements = $m->getRepository("PaaBundle:ressources")->findAllFiltrée("E"); // JM 20220425
// LG 20231025 passé + haut $laOptions = Array();
$laOptions["entityActiBase"] = $loListeActiBase;
$laOptions['entityIntervenant'] = $loListeIntervenants;
$laOptions['entityUsager'] = $loListeUsagers;
$laOptions['entitySalle'] = $loListeSalles;
$laOptions['entityGroupe'] = $loListeGroupes;
$laOptions['paEtablissements'] = $loListeEtablissements; // JM 20220425
// LG 20231025 passé + haut $laOptions['poController'] = $this; // JM 20220425
$laOptions["actiSysteme"] = $session->get('activitésActiSysteme');
$laOptions['actiGenerique'] = $session->get('activitésActiGenerique');
$laOptions['actiBase'] = substr($session->get('activitésActiBase'), 1);
$laOptions['actiInterv'] = substr($session->get('activitésInterv'), 1);
$laOptions['actiUsager'] = substr($session->get('activitésUsager'), 1);
$laOptions['actiSalle'] = substr($session->get('activitésSalle'), 1);
$laOptions['actiGroupe'] = substr($session->get('activitésGroupe'), 1);
$laOptions['actiEtablissement'] = $session->get('iEtablissement');
return $this->render('@Paa/Dialog/filtres/filtreActivites.html.twig', $laOptions);
}
// LG 20240215 début
else {
return new Response("Désolé, le filtre n'est pas encore implémenté pour ce type de ressource ($psNomTable).") ;
}
// LG 20240215 fin
}
// JM 20211102 Fin
// JM 20211124 début ajout function pour popup visualisation séance quand clic
function visualisationSeanceAction($idSeance){
$em = $this->getDoctrineManager();
$loEntité = $em->getRepository("PaaBundle:seances")->find($idSeance);
$idActivite = $loEntité->getActivité()->getId();
$libelleActi = $em->getRepository("PaaBundle:activites")->rtvlibelleacti($idActivite, 5020799, 8, $idSeance); //1449087 sans balise body, mais visiblement aucun effet
$laOptions["libelleActi"] = $libelleActi;
return $this->render('@Paa/Dialog/visualisation/visualisationSeance.html.twig', $laOptions);
}
// JM 20211124 fin ajout function pour popup visualisation séance quand clic
//HL 20220616
public function getLiensAction() {
$em = $this->getDoctrineManager();
$loListeLiens = $em->getRepository("PaaBundle:referents")->getLiens();
$laListeLiens = json_decode(json_encode($loListeLiens), true);
return $laListeLiens;
}
//HL 20220629
// LG 20220720 TODO : renommer en getUsagersScolarite_AnneesScolairesDistinct
public function getAnneeScolaireAction() {
$em = $this->getDoctrineManager();
// LG 20220701 old $loListeAnneeScolaire = $em->getRepository("PaaBundle:usagers_scolarite")->getAnneeScolaire();
// LG 20220720 TODO : renommer en getUsagersScolarite_AnneesScolairesDistinct
$loListeAnneeScolaire = $em->getRepository("PaaBundle:usagersScolarite")->getAnneeScolaire();
$laListeAnneeScolaire = json_decode(json_encode($loListeAnneeScolaire), true);
return $laListeAnneeScolaire;
}
// LG 20220720 TODO : renommer en getUsagersScolarite_ClassesDistinct
public function getClasseAction() {
$em = $this->getDoctrineManager();
// LG 20220720 TODO : renommer en getUsagersScolarite_ClassesDistinct
$loListeClasse = $em->getRepository("PaaBundle:usagersScolarite")->getClasse();
$laListeClasse = json_decode(json_encode($loListeClasse), true);
return $laListeClasse;
}
function modelesHorairesform() {
$form = $this->createForm(modelesHorairesType::class);
return $this->render('@Paa/Resources/form/modelesHoraires.html.twig', [
'modeleshorairesform' => $form->createView()
]);
}
// LP 27/05/2021
// $NomTable : toujours "actibases"
// $piSousGroupe
// LG 20221219 : déplacé comme méthode private de la classe
private function getSousTypeFormActibase($piSousGroupeAB){
$psSousType = '';
switch ($piSousGroupeAB) {
case '-2':
$psSousType = 'AbsenceIntervenant';
break;
case '-3':
$psSousType = 'AbsenceAutre';
break;
case '-4':
$psSousType = 'AbsenceAutre';
break;
case '-6':
$psSousType = 'AbsenceUsager';
break;
case '-7':
// CB 20230216 old $psSousType = 'AbsenceAutre';
$psSousType = 'AbsenceGroupe';
break;
case '-11':
$psSousType = 'Base';
break;
case '-5':
$psSousType = 'Base';
break;
default:
$psSousType = '';
}
return $psSousType;
}
// Page de saisie des plans de formation
public function planFormationAction(request $request) {
// LG 20240604 début
if ($LoginResponse = $this->RedirectIfDisconnected($request, 'ROLE_CONCEPTEUR', $request->headers->get('referer'))) {
// L'utilisateur en cours n'est pas authentifié, ou sa session a expiré
// On retourne à la page appellante ($request->headers->get('referer'))
return $LoginResponse;
}
// LG 20240604 fin
$m = $this->getDoctrineManager();
$loAnnée = $this->getEntitéAnnéeCourante() ;
$ldDebut = date_format($loAnnée->getDdebut(), "Y-m-d") ; // Début de l'année en cours
$ldFin = date_format($loAnnée->getDFin(), "Y-m-d") ;
$laOptions = array(
'pdDebut' => $ldDebut,
'pdFin' => $ldFin,
'poController' => $this,
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa\form\planFormation.html.twig', $laOptions);
}
// LG 20240618
public function pageImportePlanFormationAction(request $request) {
//si pas concepteur return echec
if (!$this->get('security.authorization_checker')->isGranted('ROLE_CONCEPTEUR')) {
// L'utilisateur en cours ne dispose pas des droits sur cette page
$loUser = $this->getUser();
if ($loUser) {
$lcUser = " " . $loUser->getusername();
} else {
$lcUser = "";
}
$lsHTML = "Désolé" . $lcUser . ", vous n'avez pas accès à cette information.";
return new \Symfony\Component\HttpFoundation\Response($lsHTML);
}
$loAnnée = $this->getEntitéAnnéeCourante() ;
$ldDebut = date_format($loAnnée->getDdebut(), "Y-m-d") ; // Début de l'année en cours
$ldFin = date_format($loAnnée->getDFin(), "Y-m-d") ;
$laOptions = array(
'pdDebut' => $ldDebut,
'pdFin' => $ldFin,
'poController' => $this,
);
// LG 20240807 old return $this->render('@Paa/Dialog/planFormation/importePF.html.twig', $laOptions);
return $this->render('@Paa/Dialog/planFormation/PF_Importe.html.twig', $laOptions);
}
//SM 20240626
public function pageExportePlanFormationAction(request $request) {
//si pas concepteur return echec
if (!$this->get('security.authorization_checker')->isGranted('ROLE_CONCEPTEUR')) {
// L'utilisateur en cours ne dispose pas des droits sur cette page
$loUser = $this->getUser();
if ($loUser) {
$lcUser = " " . $loUser->getusername();
} else {
$lcUser = "";
}
$lsHTML = "Désolé" . $lcUser . ", vous n'avez pas accès à cette information.";
return new \Symfony\Component\HttpFoundation\Response($lsHTML);
}
$loAnnée = $this->getEntitéAnnéeCourante() ;
$ldDebut = date_format($loAnnée->getDdebut(), "Y-m-d") ; // Début de l'année en cours
$ldFin = date_format($loAnnée->getDFin(), "Y-m-d") ;
$laOptions = array(
'pdDebut' => $ldDebut,
'pdFin' => $ldFin,
'poController' => $this,
);
// LG 20240807 old return $this->render('@Paa/Dialog/planFormation/exportePF.html.twig', $laOptions);
return $this->render('@Paa/Dialog/planFormation/PF_Exporte.html.twig', $laOptions);
}
// Page de saisie des présences des classes
// LG 20240516
public function presencesClassesAction(request $request) {
// LG 20240604 début
if ($LoginResponse = $this->RedirectIfDisconnected($request, 'ROLE_CONCEPTEUR', $request->headers->get('referer'))) {
// L'utilisateur en cours n'est pas authentifié, ou sa session a expiré
// On retourne à la page appellante ($request->headers->get('referer'))
return $LoginResponse;
}
// LG 20240604 fin
$m = $this->getDoctrineManager();
$loAnnée = $this->getEntitéAnnéeCourante() ;
$ldDebut = date_format($loAnnée->getDdebut(), "Y-m-d") ; // Début de l'année en cours
$ldFin = date_format($loAnnée->getDFin(), "Y-m-d") ;
$laOptions = array(
'pdDebut' => $ldDebut,
'pdFin' => $ldFin,
'poController' => $this,
);
$this->fillOptionsPourRenderEnTeteMenu($laOptions, $request);
return $this->render('@Paa\form\presencesClasses.html.twig', $laOptions);
}
public function checkSecondsToExpireAction(): JsonResponse {
return new JsonResponse(['secToExp' => 0]);
//throw new \Exception("On ne devrait jamais passer dans cette action puisqu'elle est gérée dans la function onKernelRequest de la classe SessionIdleHandler") ;
}
}