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}