diff --git a/src/Controller/CommunityController.php b/src/Controller/CommunityController.php index 74ee8f1..159dbde 100644 --- a/src/Controller/CommunityController.php +++ b/src/Controller/CommunityController.php @@ -79,7 +79,7 @@ class CommunityController implements IAuthenticationRequired return new HtmlContent('communities/community', [ 'community' => $community, - 'upcomingEvents' => iterator_to_array($this->eventRepository->getUpcomingByCommunity($community, new DateTime(), 3)), + 'upcomingAndRecentEvents' => iterator_to_array($this->eventRepository->getUpcomingAndRecentByCommunity($community, new DateTime(), 30, 3)), 'debtItems' => $debtItems, 'debtBalance' => $debtBalance, 'outstandingItems' => $outstandingItems, diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index a5af7ff..b66f6e2 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -44,7 +44,7 @@ class HomeController implements IAuthenticationRequired return new HtmlContent('home', [ 'communities' => $communities, - 'upcomingEvents' => iterator_to_array($this->eventRepository->getUpcomingByUser($user, new DateTime(), 3, true, ['community'])) + 'upcomingAndRecentEvents' => iterator_to_array($this->eventRepository->getUpcomingAndRecentByUser($user, new DateTime(), 30, 3, true, ['community'])) ]); } } diff --git a/src/Repository/EventRepository.php b/src/Repository/EventRepository.php index 3767c67..e40e083 100644 --- a/src/Repository/EventRepository.php +++ b/src/Repository/EventRepository.php @@ -2,6 +2,7 @@ use Container; use DateTime; +use DateInterval; use Generator; use RVR\PersistentData\Model\Community; use RVR\PersistentData\Model\Event; @@ -32,21 +33,21 @@ class EventRepository return $this->selectAllByCommunity($community)->count(); } - public function getUpcomingByCommunity(Community $community, DateTime $from, int $limit, bool $useRelations = false, array $withRelations = []): Generator + public function getUpcomingAndRecentByCommunity(Community $community, DateTime $from, int $days, int $limit, bool $useRelations = false, array $withRelations = []): Generator { $select = $this->selectAllByCommunity($community); - $select->where('end', '>', $from->format('Y-m-d H:i:s')); - $select->orderBy('start', 'ASC'); + $this->selectUpcomingAndRecent($select, $from, $days); + $select->orderBy('start', 'DESC'); $select->limit($limit, 0); yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); } - public function getUpcomingByUser(User $user, DateTime $from, int $limit, bool $useRelations = false, array $withRelations = []): Generator + public function getUpcomingAndRecentByUser(User $user, DateTime $from, int $days, int $limit, bool $useRelations = false, array $withRelations = []): Generator { $select = $this->selectAllByUser($user); - $select->where('end', '>', $from->format('Y-m-d H:i:s')); - $select->orderBy('start', 'ASC'); + $this->selectUpcomingAndRecent($select, $from, $days); + $select->orderBy('start', 'DESC'); $select->limit($limit, 0); yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); @@ -86,4 +87,12 @@ class EventRepository $select->where(['community_members', 'user_id'], '=', $user->getId()); return $select; } + + private function selectUpcomingAndRecent(Select $select, DateTime $from, int $days) + { + $select->where(function (Select $select) use ($from, $days) { + $select->where('start', '<', (clone $from)->add(DateInterval::createFromDateString("$days days"))->format('Y-m-d H:i:s')); + $select->orWhere('end', '>', (clone $from)->sub(DateInterval::createFromDateString("$days days"))->format('Y-m-d H:i:s')); + }); + } } diff --git a/views/communities/community.php b/views/communities/community.php index 78406ec..722d540 100644 --- a/views/communities/community.php +++ b/views/communities/community.php @@ -12,16 +12,16 @@
= $event->getTitle() ?> = $event->getStartDate()->format('Y-m-d') ?> – = $event->getEndDate()->format('Y-m-d') ?>
-There is no upcoming event.
+There is no event to show.
= $event->getTitle() ?> @@ -28,7 +28,7 @@
-There is no upcoming event.
+There is no event to show.