From 6e46b169a67654318cf016b5c31c3455fbdbb7cf Mon Sep 17 00:00:00 2001
From: Torsten Oppermann <torsten@sgalinski.de>
Date: Fri, 15 Dec 2017 17:48:29 +0100
Subject: [PATCH] [TASK] Final review, scrollbrowser offset fixes

---
 Classes/Controller/OverviewController.php | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/Classes/Controller/OverviewController.php b/Classes/Controller/OverviewController.php
index 7bda7b5..e924a01 100644
--- a/Classes/Controller/OverviewController.php
+++ b/Classes/Controller/OverviewController.php
@@ -120,18 +120,22 @@ class OverviewController extends AbstractController {
 	 * @param array $newsByCategory
 	 * @param array $allNews
 	 * @param array $newsFilter
+	 * @param boolean $isInitialCall
 	 * @return void
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
 	 */
-	protected function overviewWithCategories(array $newsByCategory = [], array $allNews = [], array $newsFilter = []) {
+	protected function overviewWithCategories(
+		array $newsByCategory = [], array $allNews = [], array $newsFilter = [], $isInitialCall = TRUE
+	) {
 		$newsLimitPerCategory = (int) $this->settings['newsLimit'];
 		$this->categoryRepository->setDefaultOrderings(['sorting' => Query::ORDER_ASCENDING]);
 
 		$offset = 0;
+
 		$currentPageBrowserPage = (int) GeneralUtility::_GP('tx_sgnews_pagebrowser')['currentPage'];
 		if ($currentPageBrowserPage && $newsLimitPerCategory) {
-			$offset = $currentPageBrowserPage * $newsLimitPerCategory;
+			$offset = ($currentPageBrowserPage * $newsLimitPerCategory) - ($isInitialCall ? 0 : 1);
 		}
 
 		if ($this->settings['onlyNewsWithinThisPageSection']) {
@@ -230,7 +234,7 @@ class OverviewController extends AbstractController {
 			$nextPage = $currentPageBrowserPage + 1;
 			if ($nextPage <= $numberOfPages) {
 				GeneralUtility::_GETset(['tx_sgnews_pagebrowser' => ['currentPage' => $nextPage]]);
-				$this->overviewWithCategories($newsByCategory, $allNews, $newsFilter);
+				$this->overviewWithCategories($newsByCategory, $allNews, $newsFilter, FALSE);
 				return;
 			}
 		}
@@ -262,18 +266,21 @@ class OverviewController extends AbstractController {
 	 * @param array $newsByTag
 	 * @param array $allNews
 	 * @param array $newsFilter
+	 * @param boolean $isInitialCall
 	 * @return void
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
 	 */
-	protected function overviewWithTags(array $newsByTag = [], array $allNews = [], array $newsFilter = []) {
+	protected function overviewWithTags(
+		array $newsByTag = [], array $allNews = [], array $newsFilter = [], $isInitialCall = TRUE
+	) {
 		$newsLimitPerTag = (int) $this->settings['newsLimit'];
 		$this->tagRepository->setDefaultOrderings(['sorting' => Query::ORDER_ASCENDING]);
 
 		$offset = 0;
 		$currentPageBrowserPage = (int) GeneralUtility::_GP('tx_sgnews_pagebrowser')['currentPage'];
 		if ($currentPageBrowserPage && $newsLimitPerTag) {
-			$offset = $currentPageBrowserPage * $newsLimitPerTag;
+			$offset = ($currentPageBrowserPage * $newsLimitPerTag) - ($isInitialCall ? 0 : 1);
 		}
 
 		$tagPid = (int) $this->settings['tagPid'];
@@ -381,7 +388,7 @@ class OverviewController extends AbstractController {
 			$nextPage = $currentPageBrowserPage + 1;
 			if ($nextPage <= $numberOfPages) {
 				GeneralUtility::_GETset(['tx_sgnews_pagebrowser' => ['currentPage' => $nextPage]]);
-				$this->overviewWithTags($newsByTag, $allNews, $newsFilter);
+				$this->overviewWithTags($newsByTag, $allNews, $newsFilter, FALSE);
 				return;
 			}
 		}
-- 
GitLab