src/Service/Historique.php line 50

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * Copyright (C) Office National de Publication et de Communication - All Rights Reserved
  5.  *
  6.  * Unauthorized copying of this file, via any medium is strictly prohibited by law
  7.  * This file is proprietary and confidential
  8.  */
  9. namespace App\Service;
  10. use App\Common\LieuInterface;
  11. use App\Common\QuoiInterface;
  12. use App\Entity\Etablissement;
  13. use DateTimeImmutable;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. final class Historique
  17. {
  18.     private const FICHE_INDEX __CLASS__.'_fiche';
  19.     private const RECHECHE_INDEX __CLASS__.'_recherche';
  20.     private const MAX 5;
  21.     /** @var RequestStack */
  22.     private $requestStack;
  23.     /** @var EntityManagerInterface */
  24.     private $entityManager;
  25.     /** @var Slugify */
  26.     private $slugify;
  27.     public function __construct(
  28.         RequestStack $requestStack,
  29.         EntityManagerInterface $entityManager,
  30.         Slugify $slugify
  31.     ) {
  32.         $this->requestStack $requestStack;
  33.         $this->entityManager $entityManager;
  34.         $this->slugify $slugify;
  35.     }
  36.     // ----- Fiche -------------------------------------------------------------
  37.     public function addFiche(Etablissement $etablissement): void
  38.     {
  39.         $list $this->requestStack->getSession()->get(self::FICHE_INDEX, []);
  40.         $id $etablissement->getId();
  41.         $list[$id] = new DateTimeImmutable();
  42.         arsort($list);
  43.         $list = \array_slice($list0self::MAX);
  44.         $this->requestStack->getSession()->set(self::FICHE_INDEX$list);
  45.     }
  46.     public function getFiches(string $sauf null): array
  47.     {
  48.         $list $this->requestStack->getSession()->get(self::FICHE_INDEX, []);
  49.         $ids array_diff(array_keys($list), (array) $sauf);
  50.         if (!$ids) {
  51.             return [];
  52.         }
  53.         $unsorted $this
  54.             ->entityManager
  55.             ->getRepository(Etablissement::class)
  56.             ->findBy(['id' => $ids]);
  57.         $sorted = [];
  58.         foreach ($ids as $id) {
  59.             /** @var Etablissement $etablissement */
  60.             foreach ($unsorted as $key => $etablissement) {
  61.                 if ($etablissement->getId() === $id) {
  62.                     $sorted[] = $etablissement;
  63.                     unset($unsorted[$key]);
  64.                     break;
  65.                 }
  66.             }
  67.         }
  68.         return $sorted;
  69.     }
  70.     // ----- Recherche ---------------------------------------------------------
  71.     public function addRecherche(QuoiInterface $quoiLieuInterface $lieustring $routestring $requestUri null): void
  72.     {
  73.         $list $this->requestStack->getSession()->get(self::RECHECHE_INDEX, []);
  74.         $key $quoi->getSlug().'#'.$lieu->getSlug();
  75.         $list[$key] = [
  76.             'quoi' => $quoi->getSlug(),
  77.             'lieu' => $lieu->getSlug(),
  78.             'route' => $route,
  79.             'date' => new DateTimeImmutable(),
  80.             'requestUri' => $requestUri
  81.         ];
  82.         uasort($list, static function ($a$b): int {
  83.             return $a['date'] < $b['date'] ? : -1;
  84.         });
  85.         $list = \array_slice($list0self::MAX);
  86.         $this->requestStack->getSession()->set(self::RECHECHE_INDEX$list);
  87.     }
  88.     public function getRecherches(): array
  89.     {
  90.         $list $this->requestStack->getSession()->get(self::RECHECHE_INDEX, []);
  91.         foreach ($list as &$item) {
  92.             $item['quoi'] = $this->slugify->revealQuoi($item['quoi']);
  93.             $item['lieu'] = $this->slugify->revealLieu($item['lieu']);
  94.         }
  95.         return $list;
  96.     }
  97. }