diff --git a/src/Controller/EventRedirectController.php b/src/Controller/EventRedirectController.php new file mode 100644 index 0000000..32a84a9 --- /dev/null +++ b/src/Controller/EventRedirectController.php @@ -0,0 +1,70 @@ +eventRepository = new EventRepository(); + } + + public function isAuthenticationRequired(): bool + { + return true; + } + + public function getEvent() + { + $currentEvent = $this->getCurrentEvent(); + if ($currentEvent === null) { + return new HtmlContent('event_redirect/no_event'); + } + + return new Redirect( + \Container::$routeCollection->getRoute('community.event') + ->generateLink([ + 'communitySlug' => $currentEvent->getCommunity()->getSlug(), + 'eventSlug' => $currentEvent->getSlug() + ]), + IRedirect::TEMPORARY + ); + } + + public function getEventNewTransaction() + { + $currentEvent = $this->getCurrentEvent(); + if ($currentEvent === null) { + return new HtmlContent('event_redirect/no_event'); + } + + return new Redirect( + \Container::$routeCollection->getRoute('community.transactions.new') + ->generateLink([ + 'communitySlug' => $currentEvent->getCommunity()->getSlug(), + 'event' => $currentEvent->getSlug() + ]), + IRedirect::TEMPORARY + ); + } + + private function getCurrentEvent(): ?Event + { + /** + * @var User $user + */ + $user = Container::$request->user(); + + return $this->eventRepository->getCurrentByUser($user, new DateTime(), 30, true, ['community']); + } +} diff --git a/src/Repository/EventRepository.php b/src/Repository/EventRepository.php index e40e083..e1aa287 100644 --- a/src/Repository/EventRepository.php +++ b/src/Repository/EventRepository.php @@ -53,6 +53,16 @@ class EventRepository yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); } + public function getCurrentByUser(User $user, DateTime $from, int $days, bool $useRelations = false, array $withRelations = []): ?Event + { + $select = $this->selectAllByUser($user); + $this->selectUpcomingAndRecent($select, $from, $days); + $select->orderBy('start', 'DESC'); + $select->limit(1, 0); + + return Container::$persistentDataManager->selectFromDb($select, Event::class, $useRelations, $withRelations); + } + public function getPagedByCommunity(Community $community, int $page, int $itemsPerPage, bool $useRelations = false, array $withRelations = []): Generator { $select = $this->selectAllByCommunity($community); diff --git a/views/event_redirect/no_event.php b/views/event_redirect/no_event.php new file mode 100644 index 0000000..9c71404 --- /dev/null +++ b/views/event_redirect/no_event.php @@ -0,0 +1,8 @@ +@extends(templates/layout_normal) + +@section(main) +
No upcoming or recent event was found. Back to start.
+