Loading module/Evenementiel/config/merged/Inscription.config.php +2 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ return [ [ 'privileges' => [ EvenementielinscriptionPrivileges::ANNULER, EvenementielinscriptionPrivileges::MODIFIER, ], 'resources' => ['Inscription'], 'assertion' => InscriptionAssertion::class Loading Loading @@ -92,6 +93,7 @@ return [ 'privileges' => [ EvenementielinscriptionPrivileges::MODIFIER, ], 'assertion' => InscriptionAssertion::class, ], [ 'controller' => InscriptionController::class, Loading module/Evenementiel/src/Assertion/InscriptionAssertion.php +16 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,21 @@ class InscriptionAssertion extends AbstractAssertion return true; } break; case EvenementielinscriptionPrivileges::MODIFIER: switch ($role->getRoleId()) { case EtudiantRolesProvider::ROLE_ETUDIANT: $etudiantOk = ($inscription->getParticipant()->getEtudiant() === $etudiant); return $etudiantOk && $inscriptionOk && $etatEvenementOk; case PersonnelRolesProvider::ROLE_PERSONNEL: $personnelOk = ($inscription->getParticipant()->getPersonnel() === $personnel); return $personnelOk && $inscriptionOk && $etatEvenementOk; case ExterneRolesProvider::ROLE_EXTERNE: $externeOk = ($inscription->getParticipant()->getEmail() === $user->getEmail()); return $externeOk && $inscriptionOk && $etatEvenementOk; default : return true; } break; } return true; } Loading @@ -82,6 +97,7 @@ class InscriptionAssertion extends AbstractAssertion if ($inscription === null) return true; return match ($action) { 'desinscription' => $this->computeAssertion($inscription, EvenementielinscriptionPrivileges::ANNULER), 'modifier' => $this->computeAssertion($inscription, EvenementielinscriptionPrivileges::MODIFIER), default => true, }; } Loading module/Evenementiel/src/Controller/EvenementController.php +1 −1 Original line number Diff line number Diff line Loading @@ -818,7 +818,7 @@ class EvenementController extends AbstractActionController if ($request->isGet()) { $evenement = $this->getEvenementService()->getRequestedEntity($this, 'entity'); $status = $this->params()->fromQuery('status'); if($evenement->getPlaceDisponible() >= 1) { if($evenement->getPlacesDisponibles() >= 1) { $ok = $evenement->incNbInscAnonyme($status); if ($ok) { $this->getEvenementService()->update($evenement); Loading module/Evenementiel/src/Controller/InscriptionController.php +22 −6 Original line number Diff line number Diff line Loading @@ -141,18 +141,34 @@ class InscriptionController extends AbstractActionController $form = $this->getInscriptionParticipantForm(); $form->setAttribute("action", $this->url()->fromRoute("evenementiel/inscription/modifier", ["entity" => $inscription->getId()])); $form->setAttribute("method", "post"); // désactiver les champs évènement et participant $form->get('evenement')->setAttribute('disabled', true); $form->get('participant')->setAttribute('disabled', true); $form->bind($inscription); $form->setBindOnValidate(false); // facultatif, mais évite la liaison “tardive” $form->prepare(); if ($this->getRequest()->isPost()) { $postData = $this->getRequest()->getPost()->toArray(); // ré-injecter les champs evenement et participant // car ils ne sont pas renvoyer dans le form si les champs sont désactivés $postData['evenement'] = ['id' => $inscription->getEvenement()->getId(), 'label' => $inscription->getEvenement()->getLibelle()]; $postData['participant'] = ['id' => $inscription->getParticipant()->getId(), 'label' => $inscription->getParticipant()->getDenomination()]; $form->setData($postData); if ($form->isValid()) { if ($inscription->getEvenement() !== null and $inscription->getParticipant() !== null and $inscription->getParticipant()->getId() != -1) { if ($this->getEvenementService()->estModifiableInscription($inscription)) { $this->getInscriptionService()->update($inscription); $this->flashMessenger()->addSuccessMessage("Inscription mise à jour."); } else { $this->flashMessenger()->addErrorMessage("Impossible de modifier cette inscription : plus aucune place disponible."); } exit(); } else { $this->flashMessenger()->addErrorMessage("Inscription non modifié, champ Evenement ou Participant vide."); Loading Loading @@ -313,7 +329,7 @@ class InscriptionController extends AbstractActionController { $inscription = $this->getInscriptionService()->getRequestedEntity($this); $evenement = $inscription->getEvenement(); if ($inscription->getNombrePlacesDemandees() <= $evenement->getPlaceDisponible()) { if ($inscription->getNombrePlacesDemandees() <= $evenement->getPlacesDisponibles()) { $inscription->setListe(Inscription::PRINCIPALE); $this->getInscriptionService()->update($inscription); $this->getNotificationService()->triggerListePrincipale($inscription); Loading module/Evenementiel/src/Entity/Db/Evenement.php +1 −1 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ class Evenement implements HistoriqueAwareInterface, HasEtatsInterface, Resource return $nombre; } public function getPlaceDisponible(): int public function getPlacesDisponibles(): int { return $this->getJauge() - $this->getNombrePlacesDemandees(); } Loading Loading
module/Evenementiel/config/merged/Inscription.config.php +2 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ return [ [ 'privileges' => [ EvenementielinscriptionPrivileges::ANNULER, EvenementielinscriptionPrivileges::MODIFIER, ], 'resources' => ['Inscription'], 'assertion' => InscriptionAssertion::class Loading Loading @@ -92,6 +93,7 @@ return [ 'privileges' => [ EvenementielinscriptionPrivileges::MODIFIER, ], 'assertion' => InscriptionAssertion::class, ], [ 'controller' => InscriptionController::class, Loading
module/Evenementiel/src/Assertion/InscriptionAssertion.php +16 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,21 @@ class InscriptionAssertion extends AbstractAssertion return true; } break; case EvenementielinscriptionPrivileges::MODIFIER: switch ($role->getRoleId()) { case EtudiantRolesProvider::ROLE_ETUDIANT: $etudiantOk = ($inscription->getParticipant()->getEtudiant() === $etudiant); return $etudiantOk && $inscriptionOk && $etatEvenementOk; case PersonnelRolesProvider::ROLE_PERSONNEL: $personnelOk = ($inscription->getParticipant()->getPersonnel() === $personnel); return $personnelOk && $inscriptionOk && $etatEvenementOk; case ExterneRolesProvider::ROLE_EXTERNE: $externeOk = ($inscription->getParticipant()->getEmail() === $user->getEmail()); return $externeOk && $inscriptionOk && $etatEvenementOk; default : return true; } break; } return true; } Loading @@ -82,6 +97,7 @@ class InscriptionAssertion extends AbstractAssertion if ($inscription === null) return true; return match ($action) { 'desinscription' => $this->computeAssertion($inscription, EvenementielinscriptionPrivileges::ANNULER), 'modifier' => $this->computeAssertion($inscription, EvenementielinscriptionPrivileges::MODIFIER), default => true, }; } Loading
module/Evenementiel/src/Controller/EvenementController.php +1 −1 Original line number Diff line number Diff line Loading @@ -818,7 +818,7 @@ class EvenementController extends AbstractActionController if ($request->isGet()) { $evenement = $this->getEvenementService()->getRequestedEntity($this, 'entity'); $status = $this->params()->fromQuery('status'); if($evenement->getPlaceDisponible() >= 1) { if($evenement->getPlacesDisponibles() >= 1) { $ok = $evenement->incNbInscAnonyme($status); if ($ok) { $this->getEvenementService()->update($evenement); Loading
module/Evenementiel/src/Controller/InscriptionController.php +22 −6 Original line number Diff line number Diff line Loading @@ -141,18 +141,34 @@ class InscriptionController extends AbstractActionController $form = $this->getInscriptionParticipantForm(); $form->setAttribute("action", $this->url()->fromRoute("evenementiel/inscription/modifier", ["entity" => $inscription->getId()])); $form->setAttribute("method", "post"); // désactiver les champs évènement et participant $form->get('evenement')->setAttribute('disabled', true); $form->get('participant')->setAttribute('disabled', true); $form->bind($inscription); $form->setBindOnValidate(false); // facultatif, mais évite la liaison “tardive” $form->prepare(); if ($this->getRequest()->isPost()) { $postData = $this->getRequest()->getPost()->toArray(); // ré-injecter les champs evenement et participant // car ils ne sont pas renvoyer dans le form si les champs sont désactivés $postData['evenement'] = ['id' => $inscription->getEvenement()->getId(), 'label' => $inscription->getEvenement()->getLibelle()]; $postData['participant'] = ['id' => $inscription->getParticipant()->getId(), 'label' => $inscription->getParticipant()->getDenomination()]; $form->setData($postData); if ($form->isValid()) { if ($inscription->getEvenement() !== null and $inscription->getParticipant() !== null and $inscription->getParticipant()->getId() != -1) { if ($this->getEvenementService()->estModifiableInscription($inscription)) { $this->getInscriptionService()->update($inscription); $this->flashMessenger()->addSuccessMessage("Inscription mise à jour."); } else { $this->flashMessenger()->addErrorMessage("Impossible de modifier cette inscription : plus aucune place disponible."); } exit(); } else { $this->flashMessenger()->addErrorMessage("Inscription non modifié, champ Evenement ou Participant vide."); Loading Loading @@ -313,7 +329,7 @@ class InscriptionController extends AbstractActionController { $inscription = $this->getInscriptionService()->getRequestedEntity($this); $evenement = $inscription->getEvenement(); if ($inscription->getNombrePlacesDemandees() <= $evenement->getPlaceDisponible()) { if ($inscription->getNombrePlacesDemandees() <= $evenement->getPlacesDisponibles()) { $inscription->setListe(Inscription::PRINCIPALE); $this->getInscriptionService()->update($inscription); $this->getNotificationService()->triggerListePrincipale($inscription); Loading
module/Evenementiel/src/Entity/Db/Evenement.php +1 −1 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ class Evenement implements HistoriqueAwareInterface, HasEtatsInterface, Resource return $nombre; } public function getPlaceDisponible(): int public function getPlacesDisponibles(): int { return $this->getJauge() - $this->getNombrePlacesDemandees(); } Loading