From 77b9215787a4999ce637c453db64adf97e0420e7 Mon Sep 17 00:00:00 2001
From: Stefan Galinski <stefan@sgalinski.de>
Date: Tue, 7 Sep 2021 19:29:05 +0200
Subject: [PATCH] [TASK] Release of version 4.1.3, Disallow pagination pages
 greater than the maximum allowed number of possible pages

---
 Classes/Controller/JoblistController.php | 15 +++++++++++++++
 composer.json                            |  2 +-
 ext_emconf.php                           |  2 +-
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php
index fa79eff8..d1224616 100644
--- a/Classes/Controller/JoblistController.php
+++ b/Classes/Controller/JoblistController.php
@@ -38,6 +38,7 @@ use SGalinski\SgJobs\Property\TypeConverter\UploadedFileReferenceConverter;
 use SGalinski\SgMail\Service\MailTemplateService;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Core\Environment;
+use TYPO3\CMS\Core\Http\ImmediateResponseException;
 use TYPO3\CMS\Core\Resource\ResourceFactory;
 use TYPO3\CMS\Core\Site\SiteFinder;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
@@ -45,6 +46,8 @@ use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
 use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
 use TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException;
 use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
+use TYPO3\CMS\Frontend\Controller\ErrorController;
+use TYPO3\CMS\Frontend\Page\PageAccessFailureReasons;
 
 /**
  * The joblist plugin controller
@@ -143,6 +146,8 @@ class JoblistController extends ActionController {
 	 * @param int $currentPageBrowserPage
 	 * @return void
 	 * @throws \TYPO3\CMS\Core\Context\Exception\AspectNotFoundException
+	 * @throws \TYPO3\CMS\Core\Error\Http\PageNotFoundException
+	 * @throws ImmediateResponseException
 	 */
 	public function indexAction(array $filters = [], int $jobId = NULL, int $currentPageBrowserPage = 0): void {
 		if ($filters) {
@@ -205,6 +210,16 @@ class JoblistController extends ActionController {
 			// get all jobs for the current page
 			$allJobs = $this->jobRepository->findJobsByFilter($filters)->toArray();
 			$numberOfPages = ($jobLimit <= 0 ? 0 : \ceil(\count($allJobs) / $jobLimit));
+			if ($currentPageBrowserPage >= $numberOfPages) {
+				/** @var ErrorController $errorController */
+				$errorController = GeneralUtility::makeInstance(ErrorController::class);
+				$response = $errorController->pageNotFoundAction(
+					$GLOBALS['TYPO3_REQUEST'],
+					'The requested page does not exist',
+					['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
+				);
+				throw new ImmediateResponseException($response);
+			}
 		}
 
 		$this->view->assign('jobs', $jobs);
diff --git a/composer.json b/composer.json
index 5d16065d..e8b239e0 100644
--- a/composer.json
+++ b/composer.json
@@ -6,7 +6,7 @@
 	"license": [
 		"GPL-2.0-or-later"
 	],
-	"version": "4.1.2",
+	"version": "4.1.3",
 	"support": {
 		"issues": "https://gitlab.sgalinski.de/typo3/sg_jobs"
 	},
diff --git a/ext_emconf.php b/ext_emconf.php
index 44e9bc8e..a29a2daa 100644
--- a/ext_emconf.php
+++ b/ext_emconf.php
@@ -4,7 +4,7 @@ $EM_CONF['sg_jobs'] = [
 	'title' => 'Jobs',
 	'description' => 'Manage and display your Job offers.',
 	'category' => 'plugin',
-	'version' => '4.1.2',
+	'version' => '4.1.3',
 	'state' => 'stable',
 	'uploadfolder' => FALSE,
 	'createDirs' => '',
-- 
GitLab