Commit e8c928eb authored by Johnny Leveneur's avatar Johnny Leveneur
Browse files

ajout filtre evenement

parent 5f2c898b
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -62,9 +62,23 @@ class EvenementController extends AbstractActionController
     */
    public function indexAction(): ViewModel
    {
        $entities = $this->getEvenementService()->getEntities();
        $anneeUnivAsOptions = $this->getEvenementService()->getAnneeUniv();

        $paramsQuery = $this->params()->fromQuery();

        // si anneeUniv nest pas défini on utilise la derniere année universitaire disponible
        if (!array_key_exists('annee', $paramsQuery)) {
            $paramsQuery['annee'] = array_key_last($anneeUnivAsOptions);
            $paramsFiltre['annee_univ'] = array_key_last($anneeUnivAsOptions);
        }else{
            $paramsFiltre['annee_univ'] = $paramsQuery['annee'];
        }

        $entities = $this->getEvenementService()->getEvenementsWithFiltre($paramsFiltre);
        return new ViewModel([
            "entities" => $entities,
            'paramsQuery' => $paramsQuery,
            'anneeUnivAsOptions' => $anneeUnivAsOptions
        ]);
    }

+65 −1
Original line number Diff line number Diff line
@@ -141,6 +141,33 @@ class EvenementService
        return $this->getEntity($id);
    }

    public function getEvenementsWithFiltre(array $params = [], string $champ = 'id', string $ordre = 'ASC'): array
    {
        foreach ($params as $key => $value) {
            if ($value == null) {
                unset($params[$key]);
            }
        }

        $qb = $this->createQueryBuilder();

        foreach ($params as $key => $value) {
            if ($key == 'annee_univ') {
                $debut = new \DateTimeImmutable($value  . '-09-01 00:00:00');
                $fin = $debut->modify('+1 year');

                $qb->andWhere('entity.jour >= :debutAnneeUniv')
                    ->andWhere('entity.jour < :finAnneeUniv')
                    ->setParameter('debutAnneeUniv', $debut)
                    ->setParameter('finAnneeUniv', $fin);
            }
        }

        $qb = $qb->orderBy('entity.' . $champ, $ordre);
        $result = $qb->getQuery()->getResult();
        return $result;
    }

    /**
     * Get entities as options for a select input
     *
@@ -265,5 +292,42 @@ class EvenementService
        return false;
    }

    public function getAnneeUniv(string $ordre = 'ASC'): array{
        $evenements = $this->getEntities('jour', $ordre);
        $annees = [];

        foreach ($evenements as $evenement) {
            $jour = $evenement->getJour();
            if ($jour === null) {
                continue;
            }

            $annee = self::getAnneeUniversitaire($jour);
            $annees[$annee] = sprintf('%d - %d', $annee, $annee + 1 );
        }

        if (strtoupper($ordre) === 'DESC') {
            krsort($annees);
        } else {
            ksort($annees);
        }

        return $annees;
    }

    public static function getAnneeUniversitaire(?DateTime $date = null): int
    {
        if ($date === null) {
            $date = new DateTime();
        }

        $year = (int) $date->format('Y');
        $month = (int) $date->format('m');

        if ($month >= 9) {
            return $year;
        }

        return $year - 1  ;
    }
}
+10 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@
 * @see EvenementController::indexAction
 *
 * @var Evenement[] $entities
 * @var array $anneeUnivAsOptions
 * @var array $paramsQuery
 */

use Evenementiel\Provider\Privilege\EvenementPrivileges;
@@ -42,6 +44,14 @@ $this->headTitle("Evenements");

<br>

<?php echo $this->partial('partial/filtre',
        [
                'anneeUnivAsOptions' => $anneeUnivAsOptions,
                'paramsQuery' => $paramsQuery
        ], [], true); ?>

<br>

<?php echo $this->messenger()->addMessagesFromFlashMessenger(); ?>

<div class="table-responsive">
+70 −0
Original line number Diff line number Diff line
<?php

/**
 * @var array $anneeUnivAsOptions
 * @var array $paramsQuery
 */

?>

<div class="card card-default">
    <div class="card-header" style="font-variant: small-caps; font-weight: bold">
        <span class="icon icon-filtrer"></span>
        Filtre de recherche des participants
    </div>
    <div class="card-body">

        <form id="filtre" action="<?php echo $this->url(); ?>" method="get">
            <div class="row g-3 align-items-en">
                <div class="col-12 col-md-6 col-xl-3">
                    <label for="annee"> Année Universitaire : </label>
                    <select id="annee" name="annee" class="selectpicker" data-live-search="true">
                        <option value="">Toutes les années</option>
                        <?php foreach ($anneeUnivAsOptions as $key => $annee): ?>
                            <option value="<?php echo $key; ?>"
                                <?php if (isset($paramsQuery['annee']) && $paramsQuery['annee'] == $key) echo " selected "; ?>
                            >
                                <?php echo $annee; ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <!-- BOUTON -->
                <div class="col-12 col-md-6 col-xl-3">
                    <div class="d-grid gap-2 d-sm-flex justify-content-sm-end">
                        <button class="btn btn-primary" id="clear">
                            <span class="icon icon-gommer"></span>
                            R.A.Z.
                        </button>

                        <button class="btn btn-primary" id="filter">
                            <span class="icon icon-filtrer"></span>
                            Filtrer
                        </button>
                    </div>
                </div>
            </div>
        </form>
    </div>
</div>


<script>
    $("form#filtre").submit(function (e) {
        e.preventDefault();
    });

    $('button#clear').on("click", function (e) {
        e.preventDefault();
        window.location.href = '?';
    });

    $('button#filter').click(function () {
        let anneeValue = $('select#annee :selected').val();

        let query = "";
        query += "&annee=" + anneeValue
        window.location.href = '?' + query;
    });

</script>