Loading module/Evenementiel/src/Controller/EvenementController.php +3 −0 Original line number Diff line number Diff line Loading @@ -85,11 +85,14 @@ class EvenementController extends AbstractActionController } $search = $this->params()->fromQuery('search-pointage', null); return new ViewModel([ "evenement" => $evenement, 'miniature' => $evenement->getMiniature(), 'contenu' => $contenu, 'mails' => $mails, 'search' => $search ]); } Loading module/Evenementiel/src/View/Helper/InscriptionPlaces.php +29 −24 Original line number Diff line number Diff line Loading @@ -56,42 +56,47 @@ class InscriptionPlaces extends AbstractHelper $html .= '<li><span class="nom">' . $e((string)$place->getDenomination()) . '</span>'; if ($canModifierInscription) { if (!$place->isPointee()) { $html .= ' <a class="btn btn-success action" href="' . $this->getView()->url('evenementiel/inscription/pointer', $html .= ' <a class="btn btn-success action js-retour-link" href="' . $this->getView()->url('evenementiel/inscription/pointer', [ 'entity' => $inscription->getId(), 'place' => $place->getId() ], ['query' => [ 'retour' => $this->getView()->url('evenementiel/evenement/afficher', [ 'entity' => $inscription->getEvenement()->getId() ], [ 'fragment' => 'pointage', 'force_canonical' => true ], true) ]], // commenter car ajouter dynamiquement en js dans pointage.html // reprend l'url en cours et ajoute ou remplace la variable seach // ['query' => [ // 'retour' => $this->getView()->url('evenementiel/evenement/afficher', // [ // 'entity' => $inscription->getEvenement()->getId() // ], // [ // 'fragment' => 'pointage', // 'query' => ['search' => $options['search']], // 'force_canonical' => true // ], // true) // ] // ], true) . '"><span class="icon icon-checked" title="Pointer"> Pointer </span></a>'; } else { $html .= ' <a class="btn btn-danger action" href="' . $this->getView()->url('evenementiel/inscription/depointer', $html .= ' <a class="btn btn-danger action js-retour-link" href="' . $this->getView()->url('evenementiel/inscription/depointer', [ 'entity' => $inscription->getId(), 'place' => $place->getId() ], ['query' => [ 'retour' => $this->getView()->url('evenementiel/evenement/afficher', [ 'entity' => $inscription->getEvenement()->getId() ], [ 'fragment' => 'pointage', 'force_canonical' => true ], true) ]], // ['query' => [ // 'retour' => $this->getView()->url('evenementiel/evenement/afficher', // [ // 'entity' => $inscription->getEvenement()->getId() // ], // [ // 'fragment' => 'pointage', // 'query' => ['search' => $options['search']], // 'force_canonical' => true // ], // true) // ]], true) . '"><span class="icon icon-unchecked" title="Dépointer"> Dépointer</span></a>'; } Loading module/Evenementiel/src/View/Helper/partial/inscription.phtml +1 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ $etatActif = $inscription->getEtatActif(); </a> <br> <?php endif; ?> <?php echo $evenement->getDateToString(); ?> <?php echo $evenement->getDateEtHoraire(); ?> </div> </div> </div> Loading module/Evenementiel/view/evenementiel/evenement/afficher.phtml +2 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ use Fichier\Entity\Db\Fichier; * @var ?Fichier $miniature * @var ?string $contenu * @var Mail[] $mails * @var ?string $search */ $this->headTitle("Évènement [" . $evenement->getLibelle() . "]"); Loading Loading @@ -191,7 +192,7 @@ $canModifierInscription = $this->isAllowed(EvenementielinscriptionPrivileges::ge <div id="pointage" class="tab-pane " role="tabpanel" aria-labelledby="pointage-tab" tabindex="0"> <?php echo $this->partial('partial/pointage', ['evenement' => $evenement], [], null); ?> <?php echo $this->partial('partial/pointage', ['evenement' => $evenement, 'search' => $search], [], null); ?> </div> <?php endif ?> Loading module/Evenementiel/view/evenementiel/evenement/partial/pointage.phtml +46 −4 Original line number Diff line number Diff line <?php /** * @var Evenementiel\Entity\Db\Evenement $evenement * @var string $search */ use Evenementiel\Entity\Db\Evenement; use Evenementiel\Provider\Etat\InscriptionEtats; use Evenementiel\Provider\Privilege\EvenementielinscriptionPrivileges; use Evenementiel\Provider\Privilege\EvenementielparticipantPrivileges; use Evenementiel\Provider\Privilege\EvenementPrivileges; $inscriptions = $evenement->getInscriptions(); Loading Loading @@ -72,7 +70,7 @@ $canInscrire = $this->isAllowed(EvenementPrivileges::getResourceId(EvenementPriv </td> <td> <?php echo $inscription->getNombrePlacesPointees() . ' / ' . $inscription->getNombrePlacesDemandees(); ?> <?php echo $this->inscriptionPlaces($inscription) ?> <?php echo $this->inscriptionPlaces($inscription, ['search' => $search]) ?> </td> </tr> <?php endforeach; ?> Loading @@ -82,7 +80,35 @@ $canInscrire = $this->isAllowed(EvenementPrivileges::getResourceId(EvenementPriv <?php endif; ?> <script> $(function () { // Lire le filtre dans l’URL au chargement const params = new URLSearchParams(window.location.search); const search = params.get('search-pointage'); var table = $('.datatable#liste_pointage').DataTable(); if(search){ table.search(search).draw(); } // Mettre à jour l’URL quand l’utilisateur filtre table.on('search.dt', function () { var searchValue = table.search(); var url = new URL(window.location); if(searchValue){ url.searchParams.set('search-pointage', searchValue); } else { url.searchParams.delete('search-pointage'); } window.history.replaceState({}, '', url); }); $('.datatable#liste_pointage').DataTable({ paging: false, autoWidth: false, Loading @@ -100,4 +126,20 @@ $canInscrire = $this->isAllowed(EvenementPrivileges::getResourceId(EvenementPriv , }); }); // generer le lien de retour dans les boutons (dé)pointer créer dans le viewHelper inscriptionPlaces // on n’attache pas l’événement directement sur le bouton, mais sur le document (event delegation). document.addEventListener('click', function (e) { // Trouver le lien concerné : closest remonter dans le DOM jusqu’à trouver un élément ayant la classe .js-retour-link const link = e.target.closest('.js-retour-link'); if (!link) return; // Transformer l’URL du lien en objet manipulable (objet URL) const url = new URL(link.href); // Ajouter ou remplacer le paramètre retour url.searchParams.set('retour', window.location.href); // Remplacer l’URL du lien link.href = url.toString(); }); </script> No newline at end of file Loading
module/Evenementiel/src/Controller/EvenementController.php +3 −0 Original line number Diff line number Diff line Loading @@ -85,11 +85,14 @@ class EvenementController extends AbstractActionController } $search = $this->params()->fromQuery('search-pointage', null); return new ViewModel([ "evenement" => $evenement, 'miniature' => $evenement->getMiniature(), 'contenu' => $contenu, 'mails' => $mails, 'search' => $search ]); } Loading
module/Evenementiel/src/View/Helper/InscriptionPlaces.php +29 −24 Original line number Diff line number Diff line Loading @@ -56,42 +56,47 @@ class InscriptionPlaces extends AbstractHelper $html .= '<li><span class="nom">' . $e((string)$place->getDenomination()) . '</span>'; if ($canModifierInscription) { if (!$place->isPointee()) { $html .= ' <a class="btn btn-success action" href="' . $this->getView()->url('evenementiel/inscription/pointer', $html .= ' <a class="btn btn-success action js-retour-link" href="' . $this->getView()->url('evenementiel/inscription/pointer', [ 'entity' => $inscription->getId(), 'place' => $place->getId() ], ['query' => [ 'retour' => $this->getView()->url('evenementiel/evenement/afficher', [ 'entity' => $inscription->getEvenement()->getId() ], [ 'fragment' => 'pointage', 'force_canonical' => true ], true) ]], // commenter car ajouter dynamiquement en js dans pointage.html // reprend l'url en cours et ajoute ou remplace la variable seach // ['query' => [ // 'retour' => $this->getView()->url('evenementiel/evenement/afficher', // [ // 'entity' => $inscription->getEvenement()->getId() // ], // [ // 'fragment' => 'pointage', // 'query' => ['search' => $options['search']], // 'force_canonical' => true // ], // true) // ] // ], true) . '"><span class="icon icon-checked" title="Pointer"> Pointer </span></a>'; } else { $html .= ' <a class="btn btn-danger action" href="' . $this->getView()->url('evenementiel/inscription/depointer', $html .= ' <a class="btn btn-danger action js-retour-link" href="' . $this->getView()->url('evenementiel/inscription/depointer', [ 'entity' => $inscription->getId(), 'place' => $place->getId() ], ['query' => [ 'retour' => $this->getView()->url('evenementiel/evenement/afficher', [ 'entity' => $inscription->getEvenement()->getId() ], [ 'fragment' => 'pointage', 'force_canonical' => true ], true) ]], // ['query' => [ // 'retour' => $this->getView()->url('evenementiel/evenement/afficher', // [ // 'entity' => $inscription->getEvenement()->getId() // ], // [ // 'fragment' => 'pointage', // 'query' => ['search' => $options['search']], // 'force_canonical' => true // ], // true) // ]], true) . '"><span class="icon icon-unchecked" title="Dépointer"> Dépointer</span></a>'; } Loading
module/Evenementiel/src/View/Helper/partial/inscription.phtml +1 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ $etatActif = $inscription->getEtatActif(); </a> <br> <?php endif; ?> <?php echo $evenement->getDateToString(); ?> <?php echo $evenement->getDateEtHoraire(); ?> </div> </div> </div> Loading
module/Evenementiel/view/evenementiel/evenement/afficher.phtml +2 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ use Fichier\Entity\Db\Fichier; * @var ?Fichier $miniature * @var ?string $contenu * @var Mail[] $mails * @var ?string $search */ $this->headTitle("Évènement [" . $evenement->getLibelle() . "]"); Loading Loading @@ -191,7 +192,7 @@ $canModifierInscription = $this->isAllowed(EvenementielinscriptionPrivileges::ge <div id="pointage" class="tab-pane " role="tabpanel" aria-labelledby="pointage-tab" tabindex="0"> <?php echo $this->partial('partial/pointage', ['evenement' => $evenement], [], null); ?> <?php echo $this->partial('partial/pointage', ['evenement' => $evenement, 'search' => $search], [], null); ?> </div> <?php endif ?> Loading
module/Evenementiel/view/evenementiel/evenement/partial/pointage.phtml +46 −4 Original line number Diff line number Diff line <?php /** * @var Evenementiel\Entity\Db\Evenement $evenement * @var string $search */ use Evenementiel\Entity\Db\Evenement; use Evenementiel\Provider\Etat\InscriptionEtats; use Evenementiel\Provider\Privilege\EvenementielinscriptionPrivileges; use Evenementiel\Provider\Privilege\EvenementielparticipantPrivileges; use Evenementiel\Provider\Privilege\EvenementPrivileges; $inscriptions = $evenement->getInscriptions(); Loading Loading @@ -72,7 +70,7 @@ $canInscrire = $this->isAllowed(EvenementPrivileges::getResourceId(EvenementPriv </td> <td> <?php echo $inscription->getNombrePlacesPointees() . ' / ' . $inscription->getNombrePlacesDemandees(); ?> <?php echo $this->inscriptionPlaces($inscription) ?> <?php echo $this->inscriptionPlaces($inscription, ['search' => $search]) ?> </td> </tr> <?php endforeach; ?> Loading @@ -82,7 +80,35 @@ $canInscrire = $this->isAllowed(EvenementPrivileges::getResourceId(EvenementPriv <?php endif; ?> <script> $(function () { // Lire le filtre dans l’URL au chargement const params = new URLSearchParams(window.location.search); const search = params.get('search-pointage'); var table = $('.datatable#liste_pointage').DataTable(); if(search){ table.search(search).draw(); } // Mettre à jour l’URL quand l’utilisateur filtre table.on('search.dt', function () { var searchValue = table.search(); var url = new URL(window.location); if(searchValue){ url.searchParams.set('search-pointage', searchValue); } else { url.searchParams.delete('search-pointage'); } window.history.replaceState({}, '', url); }); $('.datatable#liste_pointage').DataTable({ paging: false, autoWidth: false, Loading @@ -100,4 +126,20 @@ $canInscrire = $this->isAllowed(EvenementPrivileges::getResourceId(EvenementPriv , }); }); // generer le lien de retour dans les boutons (dé)pointer créer dans le viewHelper inscriptionPlaces // on n’attache pas l’événement directement sur le bouton, mais sur le document (event delegation). document.addEventListener('click', function (e) { // Trouver le lien concerné : closest remonter dans le DOM jusqu’à trouver un élément ayant la classe .js-retour-link const link = e.target.closest('.js-retour-link'); if (!link) return; // Transformer l’URL du lien en objet manipulable (objet URL) const url = new URL(link.href); // Ajouter ou remplacer le paramètre retour url.searchParams.set('retour', window.location.href); // Remplacer l’URL du lien link.href = url.toString(); }); </script> No newline at end of file