From 8dfddd60396f15e56da8f78b9f8722dc1824930e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=A0pa=C4=8Dek?= Date: Sat, 22 Jul 2023 03:22:04 +0200 Subject: [PATCH] Display trainings on a venue page again This was a regression introduced in #143 in commit f0fc5462b5d6e3d4b8ee1a74de9e4664773a26b2 when I've converted included pages to a component and forgot there's no variable anymore. They were right, empty() shouldn't be considered harmless. --- .../DateList/UpcomingTrainingDatesList.php | 34 ++++++++++++++++--- site/app/Www/Presenters/VenuesPresenter.php | 5 ++- .../Presenters/templates/Venues/venue.latte | 2 +- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/site/app/Training/DateList/UpcomingTrainingDatesList.php b/site/app/Training/DateList/UpcomingTrainingDatesList.php index 21656361b..187c8f11d 100644 --- a/site/app/Training/DateList/UpcomingTrainingDatesList.php +++ b/site/app/Training/DateList/UpcomingTrainingDatesList.php @@ -3,13 +3,19 @@ namespace MichalSpacekCz\Training\DateList; +use Countable; use MichalSpacekCz\Application\UiControl; +use MichalSpacekCz\Training\Dates\UpcomingTraining; use MichalSpacekCz\Training\Dates\UpcomingTrainingDates; use MichalSpacekCz\Training\FreeSeats; -class UpcomingTrainingDatesList extends UiControl +class UpcomingTrainingDatesList extends UiControl implements Countable { + /** @var array|null */ + private ?array $upcomingTrainings = null; + + public function __construct( private readonly UpcomingTrainingDates $upcomingTrainingDates, private readonly FreeSeats $freeSeats, @@ -22,13 +28,31 @@ public function __construct( public function render(): void { - $upcomingTrainings = $this->venueId ? $this->upcomingTrainingDates->getPublicUpcomingAtVenue($this->venueId) : $this->upcomingTrainingDates->getPublicUpcoming(); - if ($this->excludeTraining) { - unset($upcomingTrainings[$this->excludeTraining]); - } + $upcomingTrainings = $this->getUpcomingTrainingDates(); $this->template->lastFreeSeats = $this->showLastFreeSeats && $this->freeSeats->lastFreeSeatsAnyTraining($upcomingTrainings); $this->template->upcomingTrainings = $upcomingTrainings; $this->template->render(__DIR__ . '/upcomingTrainingDatesList.latte'); } + + /** + * @return array + */ + private function getUpcomingTrainingDates(): array + { + if ($this->upcomingTrainings === null) { + $this->upcomingTrainings = $this->venueId ? $this->upcomingTrainingDates->getPublicUpcomingAtVenue($this->venueId) : $this->upcomingTrainingDates->getPublicUpcoming(); + if ($this->excludeTraining) { + unset($this->upcomingTrainings[$this->excludeTraining]); + } + } + return $this->upcomingTrainings; + } + + + public function count(): int + { + return count($this->getUpcomingTrainingDates()); + } + } diff --git a/site/app/Www/Presenters/VenuesPresenter.php b/site/app/Www/Presenters/VenuesPresenter.php index 4a78d37e1..479418d0f 100644 --- a/site/app/Www/Presenters/VenuesPresenter.php +++ b/site/app/Www/Presenters/VenuesPresenter.php @@ -14,6 +14,7 @@ class VenuesPresenter extends BasePresenter { private int $venueId; + private UpcomingTrainingDatesList $upcomingTrainingDatesList; public function __construct( @@ -33,15 +34,17 @@ public function actionVenue(string $name): void throw new BadRequestException("Where in the world is {$name}?", previous: $e); } $this->venueId = $venue->getId(); + $this->upcomingTrainingDatesList = $this->upcomingTrainingDatesListFactory->createForVenue($this->venueId); $this->template->pageTitle = $this->texyFormatter->translate('messages.title.venue', [$venue->getName()]); $this->template->venue = $venue; + $this->template->hasUpcomingTrainings = count($this->upcomingTrainingDatesList) > 0; } protected function createComponentUpcomingDatesList(): UpcomingTrainingDatesList { - return $this->upcomingTrainingDatesListFactory->createForVenue($this->venueId); + return $this->upcomingTrainingDatesList; } } diff --git a/site/app/Www/Presenters/templates/Venues/venue.latte b/site/app/Www/Presenters/templates/Venues/venue.latte index 276d6d2d0..1fcec494c 100644 --- a/site/app/Www/Presenters/templates/Venues/venue.latte +++ b/site/app/Www/Presenters/templates/Venues/venue.latte @@ -17,7 +17,7 @@

{_messages.venues.trainingshere}

-{if empty($upcomingTrainings)} +{if !$hasUpcomingTrainings}

{_messages.venues.notraininghere|format:"link:Www:Contact:"}

{else} {control upcomingDatesList}