diff --git a/site/app/Www/Presenters/HomepagePresenter.php b/site/app/Www/Presenters/HomepagePresenter.php
index 1c0424233..8936de989 100644
--- a/site/app/Www/Presenters/HomepagePresenter.php
+++ b/site/app/Www/Presenters/HomepagePresenter.php
@@ -7,8 +7,8 @@
use MichalSpacekCz\Interviews\Interviews;
use MichalSpacekCz\Talks\Talks;
use MichalSpacekCz\Training\CompanyTrainings;
-use MichalSpacekCz\Training\Dates\UpcomingTrainingDates;
-use MichalSpacekCz\Training\FreeSeats;
+use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesList;
+use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory;
use MichalSpacekCz\Training\Trainings;
class HomepagePresenter extends BasePresenter
@@ -18,10 +18,9 @@ public function __construct(
private readonly Articles $articles,
private readonly Interviews $interviews,
private readonly Talks $talks,
- private readonly UpcomingTrainingDates $upcomingTrainingDates,
private readonly Trainings $trainings,
private readonly CompanyTrainings $companyTrainings,
- private readonly FreeSeats $freeSeats,
+ private readonly UpcomingTrainingDatesListFactory $upcomingTrainingDatesListFactory,
) {
parent::__construct();
}
@@ -29,17 +28,20 @@ public function __construct(
public function renderDefault(): void
{
- $upcomingTrainings = $this->upcomingTrainingDates->getPublicUpcoming();
$this->template->pageHeader = 'Michal Špaček';
$this->template->articles = $this->articles->getAll(3);
$this->template->talks = $this->talks->getAll(5);
$this->template->favoriteTalks = $this->talks->getFavorites();
$this->template->upcomingTalks = $this->talks->getUpcoming();
- $this->template->upcomingTrainings = $upcomingTrainings;
$this->template->companyTrainings = $this->companyTrainings->getWithoutPublicUpcoming();
$this->template->interviews = $this->interviews->getAll(5);
- $this->template->lastFreeSeats = $this->freeSeats->lastFreeSeatsAnyTraining($upcomingTrainings);
$this->template->discontinued = $this->trainings->getAllDiscontinued();
}
+
+ protected function createComponentUpcomingDatesList(): UpcomingTrainingDatesList
+ {
+ return $this->upcomingTrainingDatesListFactory->create(null, true);
+ }
+
}
diff --git a/site/app/Www/Presenters/TrainingsPresenter.php b/site/app/Www/Presenters/TrainingsPresenter.php
index 2caaad434..7c5aa5dd3 100644
--- a/site/app/Www/Presenters/TrainingsPresenter.php
+++ b/site/app/Www/Presenters/TrainingsPresenter.php
@@ -9,9 +9,10 @@
use MichalSpacekCz\Formatter\TexyFormatter;
use MichalSpacekCz\Training\Applications;
use MichalSpacekCz\Training\CompanyTrainings;
+use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesList;
+use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory;
use MichalSpacekCz\Training\Dates\TrainingDate;
use MichalSpacekCz\Training\Dates\TrainingDates;
-use MichalSpacekCz\Training\Dates\UpcomingTrainingDates;
use MichalSpacekCz\Training\Exceptions\TrainingApplicationDoesNotExistException;
use MichalSpacekCz\Training\Exceptions\TrainingDoesNotExistException;
use MichalSpacekCz\Training\Files\TrainingFiles;
@@ -40,7 +41,6 @@ public function __construct(
private readonly TexyFormatter $texyFormatter,
private readonly Applications $trainingApplications,
private readonly TrainingDates $trainingDates,
- private readonly UpcomingTrainingDates $upcomingTrainingDates,
private readonly TrainingFiles $trainingFiles,
private readonly Trainings $trainings,
private readonly FreeSeats $freeSeats,
@@ -49,6 +49,7 @@ public function __construct(
private readonly Reviews $trainingReviews,
private readonly TrainingApplicationFormFactory $trainingApplicationFactory,
private readonly TrainingApplicationPreliminaryFormFactory $trainingApplicationPreliminaryFactory,
+ private readonly UpcomingTrainingDatesListFactory $upcomingTrainingDatesListFactory,
private readonly CompanyInfo $companyInfo,
private readonly IResponse $httpResponse,
) {
@@ -58,15 +59,18 @@ public function __construct(
public function renderDefault(): void
{
- $upcomingTrainings = $this->upcomingTrainingDates->getPublicUpcoming();
$this->template->pageTitle = $this->translator->translate('messages.title.trainings');
- $this->template->upcomingTrainings = $upcomingTrainings;
$this->template->companyTrainings = $this->companyTrainings->getWithoutPublicUpcoming();
- $this->template->lastFreeSeats = $this->freeSeats->lastFreeSeatsAnyTraining($upcomingTrainings);
$this->template->discontinued = $this->trainings->getAllDiscontinued();
}
+ protected function createComponentUpcomingDatesList(): UpcomingTrainingDatesList
+ {
+ return $this->upcomingTrainingDatesListFactory->create(null, true);
+ }
+
+
public function actionTraining(string $name): void
{
$this->trainingAction = $name;
@@ -315,22 +319,22 @@ public function actionSuccess(string $name): void
$this->template->pageTitle = $this->texyFormatter->translate('messages.title.trainingapplication', [$this->training->name]);
$this->template->title = $this->training->name;
$this->template->description = $this->training->description;
- $this->template->lastFreeSeats = false;
$this->template->start = $date->getStart();
$this->template->end = $date->getEnd();
$this->template->remote = $date->isRemote();
$this->template->venueCity = $date->getVenueCity();
$this->template->tentative = $date->isTentative();
-
- $upcoming = $this->upcomingTrainingDates->getPublicUpcoming();
- unset($upcoming[$name]);
- $this->template->upcomingTrainings = $upcoming;
-
$this->template->form = $this->createComponentApplication();
$this->template->reviews = $this->trainingReviews->getVisibleReviews($this->training->trainingId, 3);
}
+ protected function createComponentOtherUpcomingDatesList(): UpcomingTrainingDatesList
+ {
+ return $this->upcomingTrainingDatesListFactory->create($this->trainingAction, false);
+ }
+
+
/**
* Translated locale parameters for trainings.
*
diff --git a/site/app/Www/Presenters/VenuesPresenter.php b/site/app/Www/Presenters/VenuesPresenter.php
index a10c27008..aacd12b2b 100644
--- a/site/app/Www/Presenters/VenuesPresenter.php
+++ b/site/app/Www/Presenters/VenuesPresenter.php
@@ -4,19 +4,21 @@
namespace MichalSpacekCz\Www\Presenters;
use MichalSpacekCz\Formatter\TexyFormatter;
-use MichalSpacekCz\Training\Dates\UpcomingTrainingDates;
-use MichalSpacekCz\Training\FreeSeats;
+use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesList;
+use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory;
use MichalSpacekCz\Training\Venues;
use Nette\Application\BadRequestException;
class VenuesPresenter extends BasePresenter
{
+ private int $venueId;
+
+
public function __construct(
private readonly TexyFormatter $texyFormatter,
- private readonly UpcomingTrainingDates $upcomingTrainingDates,
private readonly Venues $trainingVenues,
- private readonly FreeSeats $freeSeats,
+ private readonly UpcomingTrainingDatesListFactory $upcomingTrainingDatesListFactory,
) {
parent::__construct();
}
@@ -28,7 +30,7 @@ public function actionVenue(string $name): void
if (!$venue) {
throw new BadRequestException("Where in the world is {$name}?");
}
- $trainings = $this->upcomingTrainingDates->getPublicUpcomingAtVenue($venue->id);
+ $this->venueId = $venue->id;
$this->template->pageTitle = $this->texyFormatter->translate('messages.title.venue', [$venue->name]);
$this->template->name = $venue->name;
@@ -43,8 +45,12 @@ public function actionVenue(string $name): void
$this->template->streetview = $venue->streetview;
$this->template->parking = $venue->parking;
$this->template->publicTransport = $venue->publicTransport;
- $this->template->lastFreeSeats = $this->freeSeats->lastFreeSeatsAnyTraining($trainings);
- $this->template->upcomingTrainings = $trainings;
+ }
+
+
+ protected function createComponentUpcomingDatesList(): UpcomingTrainingDatesList
+ {
+ return $this->upcomingTrainingDatesListFactory->create(null, true, $this->venueId);
}
}
diff --git a/site/app/Www/Presenters/templates/Homepage/default.latte b/site/app/Www/Presenters/templates/Homepage/default.latte
index b74f2dfd3..172e71671 100644
--- a/site/app/Www/Presenters/templates/Homepage/default.latte
+++ b/site/app/Www/Presenters/templates/Homepage/default.latte
@@ -5,7 +5,7 @@
{_messages.trainings.intro.intro}: {_messages.trainings.intro.review} — {_messages.trainings.intro.author}
{_messages.label.publictrainings}
{_messages.homepage.trainings}:
-{include "../Trainings/common/dateList.latte"}
+{control upcomingDatesList}
{_messages.label.companytrainings}
{_messages.trainings.companyextratraining|format:'link:Www:CompanyTrainings:'}
{include "../Trainings/common/company.latte"}
diff --git a/site/app/Www/Presenters/templates/Trainings/default.latte b/site/app/Www/Presenters/templates/Trainings/default.latte
index 6d1ac2489..4d30108b8 100644
--- a/site/app/Www/Presenters/templates/Trainings/default.latte
+++ b/site/app/Www/Presenters/templates/Trainings/default.latte
@@ -6,7 +6,7 @@
{_messages.trainings.intro.review} — {_messages.trainings.intro.author}
{_messages.label.publictrainings}
{_messages.trainings.welcome}
-{include "common/dateList.latte"}
+{control upcomingDatesList}
{_messages.label.companytrainings}
{_messages.trainings.companyextratraining|format:'link:Www:CompanyTrainings:'}
{include "common/company.latte"}
diff --git a/site/app/Www/Presenters/templates/Trainings/success.latte b/site/app/Www/Presenters/templates/Trainings/success.latte
index fe0eccc13..7d6ab2b37 100644
--- a/site/app/Www/Presenters/templates/Trainings/success.latte
+++ b/site/app/Www/Presenters/templates/Trainings/success.latte
@@ -56,7 +56,7 @@
{_messages.label.othertrainings}
{_messages.trainings.cometoothertrainings}
-{include "common/dateList.latte"}
+{control otherUpcomingDatesList}
{if $reviews}
diff --git a/site/app/Www/Presenters/templates/Venues/venue.latte b/site/app/Www/Presenters/templates/Venues/venue.latte
index 042a1475a..a473ec6a8 100644
--- a/site/app/Www/Presenters/templates/Venues/venue.latte
+++ b/site/app/Www/Presenters/templates/Venues/venue.latte
@@ -19,6 +19,6 @@
{if empty($upcomingTrainings)}
{_messages.venues.notraininghere|format:"link:Www:Contact:"}
{else}
-{include "../Trainings/common/dateList.latte"}
+{control upcomingDatesList}
{/if}
{/define}
diff --git a/site/config/services.neon b/site/config/services.neon
index 05c4e8c6f..27e6b7768 100644
--- a/site/config/services.neon
+++ b/site/config/services.neon
@@ -94,6 +94,7 @@ services:
- MichalSpacekCz\Training\Applications(emailEncryption: @emailEncryption)
- MichalSpacekCz\Training\CompanyTrainings
- MichalSpacekCz\Training\DateList\TrainingApplicationsListFactory
+ - MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory
- MichalSpacekCz\Training\Dates\TrainingDateStatuses
- MichalSpacekCz\Training\Dates\TrainingDateFactory(texyFormatter: @texyFormatterNoPlaceholders)
- MichalSpacekCz\Training\Dates\TrainingDates