diff --git a/Classes/Domain/Repository/NewsRepository.php b/Classes/Domain/Repository/NewsRepository.php index fa88b22a3e7df4e91bd4a48de01dd40896dc3c42..a1da829a89447309610c0bca5842f9ee1400c088 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(); } /**