From 75d502af031966d675fe9ceda6ce5be36d9360f7 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 22 Mar 2020 15:31:46 +0100 Subject: [PATCH] add events filter --- src/Controller/EventController.php | 22 +++++++++++-- src/Motion/SnapshotRepository.php | 53 +++++++++++++++++++----------- templates/events.html.twig | 20 ++++++++--- 3 files changed, 69 insertions(+), 26 deletions(-) diff --git a/src/Controller/EventController.php b/src/Controller/EventController.php index 26405aa..0260322 100644 --- a/src/Controller/EventController.php +++ b/src/Controller/EventController.php @@ -10,14 +10,30 @@ use App\Motion\SnapshotRepository; class EventController extends AbstractController { /** - * @Route("/events", name="events") + * @Route("/events/{date}", name="events") */ - public function events(SnapshotRepository $snapshotRepository) + public function events(SnapshotRepository $snapshotRepository, string $date = null) { - $snapshots = $snapshotRepository->find(); + $date = $date ?? date('Y-m-d'); + + $snapshots = $snapshotRepository->find([ + 'order' => 'DESC', + ]); + + $days = []; + + foreach ($snapshots as $snapshot) { + $day = $snapshot->getDate()->format('d/m'); + + if (!in_array($day, $days)) { + $days[$snapshot->getDate()->format('Y-m-d')] = $day; + } + } return $this->render('events.html.twig', [ 'snapshots' => $snapshots, + 'days' => $days, + 'date' => $date, ]); } } diff --git a/src/Motion/SnapshotRepository.php b/src/Motion/SnapshotRepository.php index 3e77ba2..62b0a51 100644 --- a/src/Motion/SnapshotRepository.php +++ b/src/Motion/SnapshotRepository.php @@ -14,40 +14,55 @@ use App\Motion\Snapshot; */ class SnapshotRepository { - protected Finder $finder; - protected ParameterBagInterface $parameters; public function __construct(ParameterBagInterface $parameters) { - $this->finder = new Finder(); $this->parameters = $parameters; } - public function find(): array + public function find(array $criteria = []): array { $objects = []; - $files = $this->finder - ->files() + $criteria['order'] ??= 'ASC'; + + $directoriesFinder = new Finder(); + + $directories = $directoriesFinder + ->directories() ->in($this->parameters->get('motion_snapshots_directory')) - ->name('/.*\.mp4$/s') - ->sortByModifiedTime(); + ->sortByName(); - foreach ($files as $file) { - $date = basename($file->getPath()); - $time = str_replace(['.mp4', '-'], ['', ':'], $file->getBasename()); + $directories->sortByName(); - $movie = $file->getPath().'/'.$file->getBasename(); - $thumbnail = str_replace('.mp4', '.jpg', $movie); + foreach ($directories as $directory) { + $moviesFinder = new Finder(); - $snapshot = new Snapshot(); - $snapshot - ->setDate(new \DateTime($date.' '.$time)) - ->setMovie($movie) - ->setThumbnail($thumbnail); + $files = $moviesFinder + ->files() + ->in($directory->getPathName()) + ->name('*.mp4') + ->sortByName(); - $objects[] = $snapshot; + $date = $directory->getFilename(); + + foreach ($files as $file) { + $time = str_replace(['.mp4', '-'], ['', ':'], $file->getBasename()); + $thumbnail = str_replace('.mp4', '.jpg', $file->getPathName()); + + $snapshot = new Snapshot(); + $snapshot + ->setDate(new \DateTime($date.' '.$time)) + ->setMovie($file->getPathName()) + ->setThumbnail($thumbnail); + + $objects[] = $snapshot; + } + } + + if ($criteria['order'] === 'DESC') { + $objects = array_reverse($objects); } return $objects; diff --git a/templates/events.html.twig b/templates/events.html.twig index 363930f..1d5e3e4 100644 --- a/templates/events.html.twig +++ b/templates/events.html.twig @@ -3,11 +3,23 @@ {% block title %}{{ parent() }} - Évènements{% endblock %} {% block body %} +
+ +
+
- {% for snapshot in snapshots|reverse %} - - {{ snapshot.date.format('d/m/Y H:i:s') }} - + {% for snapshot in snapshots %} + {% if date == snapshot.date.format('Y-m-d') %} + + {{ snapshot.date.format('d/m/Y H:i:s') }} + + {% endif %} {% endfor %}