Commit 55fcc5ef authored by Johnny Leveneur's avatar Johnny Leveneur
Browse files

le particiapnt peut modifier ses évènements

parent 1e855045
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ return [
                    [
                        'privileges' => [
                            EvenementielinscriptionPrivileges::ANNULER,
                            EvenementielinscriptionPrivileges::MODIFIER,
                        ],
                        'resources' => ['Inscription'],
                        'assertion' => InscriptionAssertion::class
@@ -92,6 +93,7 @@ return [
                    'privileges' => [
                        EvenementielinscriptionPrivileges::MODIFIER,
                    ],
                    'assertion' =>  InscriptionAssertion::class,
                ],
                [
                    'controller' => InscriptionController::class,
+16 −0
Original line number Diff line number Diff line
@@ -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;
    }
@@ -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,
        };
    }
+1 −1
Original line number Diff line number Diff line
@@ -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);
+22 −6
Original line number Diff line number Diff line
@@ -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.");
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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