From 551b984bdc7095b539643f6653851167dd663cd4 Mon Sep 17 00:00:00 2001 From: Kevin Ditscheid <kevin.ditscheid@sgalinski.de> Date: Thu, 19 Nov 2020 19:40:53 +0100 Subject: [PATCH] [BUGFIX] Fix fetching of next and previous news --- Classes/Domain/Repository/NewsRepository.php | 64 ++++++++++++-------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/Classes/Domain/Repository/NewsRepository.php b/Classes/Domain/Repository/NewsRepository.php index fa88b22..a1da829 100644 --- a/Classes/Domain/Repository/NewsRepository.php +++ b/Classes/Domain/Repository/NewsRepository.php @@ -371,21 +371,29 @@ class NewsRepository extends AbstractRepository { * @return QueryResult * @throws \InvalidArgumentException */ - public function findNextNewsEntryFromCurrentNews(News $news, $sortBy = 'date'): QueryResult { + public function findNextNewsEntryFromCurrentNews(News $news, $sortBy = 'date'): QueryResultInterface { $query = $this->createQuery(); - $orderBy = 'ORDER BY sorting ASC, lastUpdated DESC, crdate DESC'; + $query->getQuerySettings()->setRespectStoragePage(TRUE); + $query->getQuerySettings()->setStoragePageIds([$news->getPid()]); if ($sortBy === 'date') { - $orderBy = 'ORDER BY lastUpdated DESC, crdate DESC'; - } - - $statement = 'SELECT * FROM pages WHERE uid = - (SELECT MIN(uid) FROM pages WHERE pid = ' . $news->getPid() . ' AND uid > ' . $news->getUid() . - $this->getEnableFieldsStatement('pages') . ' ' . $orderBy . ')' . - $this->getEnableFieldsStatement('pages'); - - /** @noinspection PhpUndefinedMethodInspection */ - return $query->statement($statement)->execute(); + $query->setOrderings([ + 'lastUpdated' => QueryInterface::ORDER_DESCENDING, + 'crdate' => QueryInterface::ORDER_DESCENDING + ]); + return $query->matching( + $query->lessThan('lastUpdated', $news->getLastUpdated()) + )->execute(); + } + + $query->setOrderings([ + 'sorting' => QueryInterface::ORDER_ASCENDING, + 'lastUpdated' => QueryInterface::ORDER_DESCENDING, + 'crdate' => QueryInterface::ORDER_DESCENDING + ]); + return $query->matching( + $query->lessThan('sorting', $news->getSorting()) + )->execute(); } /** @@ -396,21 +404,29 @@ class NewsRepository extends AbstractRepository { * @return QueryResult * @throws \InvalidArgumentException */ - public function findPreviousNewsEntryFromCurrentNews(News $news, $sortBy = 'date'): QueryResult { + public function findPreviousNewsEntryFromCurrentNews(News $news, $sortBy = 'date'): QueryResultInterface { $query = $this->createQuery(); - $orderBy = 'ORDER BY sorting ASC, lastUpdated DESC, crdate DESC'; + $query->getQuerySettings()->setRespectStoragePage(TRUE); + $query->getQuerySettings()->setStoragePageIds([$news->getPid()]); if ($sortBy === 'date') { - $orderBy = 'ORDER BY lastUpdated DESC, crdate DESC'; - } - - $statement = 'SELECT * FROM pages WHERE uid = - (SELECT MAX(uid) FROM pages WHERE pid = ' . $news->getPid() . ' AND uid < ' . $news->getUid() . - $this->getEnableFieldsStatement('pages') . ' ' . $orderBy . ')' . - $this->getEnableFieldsStatement('pages'); - - /** @noinspection PhpUndefinedMethodInspection */ - return $query->statement($statement)->execute(); + $query->setOrderings([ + 'lastUpdated' => QueryInterface::ORDER_ASCENDING, + 'crdate' => QueryInterface::ORDER_ASCENDING + ]); + return $query->matching( + $query->greaterThan('lastUpdated', $news->getLastUpdated()) + )->execute(); + } + + $query->setOrderings([ + 'sorting' => QueryInterface::ORDER_DESCENDING, + 'lastUpdated' => QueryInterface::ORDER_ASCENDING, + 'crdate' => QueryInterface::ORDER_ASCENDING + ]); + return $query->matching( + $query->greaterThan('sorting', $news->getSorting()) + )->execute(); } /** -- GitLab