Commit 8083bba9 authored by Johnny Leveneur's avatar Johnny Leveneur
Browse files

filtre persistant de la recherche dans l'affichage d'un évènement

parent 5f48f4ae
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
        ]);
    }

+29 −24
Original line number Diff line number Diff line
@@ -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 &nbsp; &nbsp; </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>';
                    }
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ $etatActif = $inscription->getEtatActif();
                                </a>
                                <br>
                            <?php endif; ?>
                            <?php echo $evenement->getDateToString(); ?>
                            <?php echo $evenement->getDateEtHoraire(); ?>
                        </div>
                    </div>
                </div>
+2 −1
Original line number Diff line number Diff line
@@ -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() . "]");
@@ -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 ?>

+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();
@@ -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; ?>
@@ -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,
@@ -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