From 9d8d296e102d9240896e5eafc747f72e33929af1 Mon Sep 17 00:00:00 2001 From: Thomas Hohn <thomas@hohn.dk> Date: Mon, 20 Feb 2023 10:42:10 +0100 Subject: [PATCH] [BUGFIX] Fix PHP 8 warning in LinkValidatorController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The variable $row['url_response']['errorParams'] should always contain a value. Either the actual error message array or an empty array to avoid a PHP 8 warning. The corresponding getErrorMessage methods now have a guard clause to check if the array is empty to avoid further propagated warnings. In TYPO3 v13 that signature of the getErrorMessage should be changed to be array. The array $errorParams is always initialized to an empty array instead of null. IN TYPO3 v13 the default value of $errorParams should be [] instead of null. Resolves: #99988 Releases: main, 11.5 Change-Id: I0f7e10f45e0f5ec7e80b79d705b38fda9a3f1410 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/78812 Tested-by: core-ci <typo3@b13.com> Reviewed-by: Stefan Bürk <stefan@buerk.tech> Tested-by: Stefan Bürk <stefan@buerk.tech> --- .../sysext/linkvalidator/Classes/LinkAnalyzer.php | 2 +- .../Classes/Linktype/AbstractLinktype.php | 1 + .../Classes/Linktype/ExternalLinktype.php | 4 ++++ .../Classes/Linktype/FileLinktype.php | 1 + .../Classes/Linktype/InternalLinktype.php | 9 +++++++-- .../Classes/Linktype/LinktypeInterface.php | 2 ++ .../Classes/Repository/BrokenLinkRepository.php | 14 +++++++++++--- 7 files changed, 27 insertions(+), 6 deletions(-) diff --git a/typo3/sysext/linkvalidator/Classes/LinkAnalyzer.php b/typo3/sysext/linkvalidator/Classes/LinkAnalyzer.php index 548e786bd34b..6378c1a6c849 100644 --- a/typo3/sysext/linkvalidator/Classes/LinkAnalyzer.php +++ b/typo3/sysext/linkvalidator/Classes/LinkAnalyzer.php @@ -244,7 +244,7 @@ class LinkAnalyzer // Broken link found if (!$checkUrl) { - $this->brokenLinkRepository->addBrokenLink($record, false, $hookObj->getErrorParams()); + $this->brokenLinkRepository->addBrokenLink($record, false, $hookObj->getErrorParams() ?: []); $this->brokenLinkCounts[$table]++; } } diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/AbstractLinktype.php b/typo3/sysext/linkvalidator/Classes/Linktype/AbstractLinktype.php index 845222860d83..78f4d945b6d2 100644 --- a/typo3/sysext/linkvalidator/Classes/Linktype/AbstractLinktype.php +++ b/typo3/sysext/linkvalidator/Classes/Linktype/AbstractLinktype.php @@ -70,6 +70,7 @@ abstract class AbstractLinktype implements LinktypeInterface * Get the value of the private property errorParams * * @return array All parameters needed for the rendering of the error message + * @todo change return type to array in TYPO3 v13 */ public function getErrorParams() { diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php b/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php index dba7457613f1..a6b02614e10a 100644 --- a/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php +++ b/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php @@ -252,11 +252,15 @@ class ExternalLinktype extends AbstractLinktype * * @param array $errorParams All parameters needed for the rendering of the error message * @return string Validation error message + * @todo change input parameter type to array in TYPO3 v13 */ public function getErrorMessage($errorParams) { $lang = $this->getLanguageService(); $errorType = $errorParams['errorType'] ?? ''; + if ($errorType === '') { + return $lang->getLL('list.report.noinformation'); + } switch ($errorType) { case self::ERROR_TYPE_HTTP_STATUS_CODE: switch ($errorParams['errno'] ?? 0) { diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/FileLinktype.php b/typo3/sysext/linkvalidator/Classes/Linktype/FileLinktype.php index cbeb51bd5cc9..aeb376024937 100644 --- a/typo3/sysext/linkvalidator/Classes/Linktype/FileLinktype.php +++ b/typo3/sysext/linkvalidator/Classes/Linktype/FileLinktype.php @@ -66,6 +66,7 @@ class FileLinktype extends AbstractLinktype * * @param array $errorParams All parameters needed for the rendering of the error message * @return string Validation error message + * @todo change input parameter type to array in TYPO3 v13 */ public function getErrorMessage($errorParams) { diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/InternalLinktype.php b/typo3/sysext/linkvalidator/Classes/Linktype/InternalLinktype.php index c2df790ddde6..90423e81ae86 100644 --- a/typo3/sysext/linkvalidator/Classes/Linktype/InternalLinktype.php +++ b/typo3/sysext/linkvalidator/Classes/Linktype/InternalLinktype.php @@ -229,13 +229,18 @@ class InternalLinktype extends AbstractLinktype * * @param array $errorParams All parameters needed for the rendering of the error message * @return string Validation error message + * @todo change input parameter type to array in TYPO3 v13 */ public function getErrorMessage($errorParams) { + $lang = $this->getLanguageService(); + $errorType = $errorParams['errorType'] ?? ''; + if ($errorType === '') { + return $lang->sL('LLL:EXT:linkvalidator/Resources/Private/Language/Module/locallang.xlf:list.report.noinformation'); + } + $errorPage = null; $errorContent = null; - $lang = $this->getLanguageService(); - $errorType = $errorParams['errorType']; if (is_array($errorParams['page'] ?? false)) { switch ($errorType['page']) { case self::DELETED: diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/LinktypeInterface.php b/typo3/sysext/linkvalidator/Classes/Linktype/LinktypeInterface.php index 3c3a322d2d56..fe3b77c1fc1e 100644 --- a/typo3/sysext/linkvalidator/Classes/Linktype/LinktypeInterface.php +++ b/typo3/sysext/linkvalidator/Classes/Linktype/LinktypeInterface.php @@ -52,6 +52,7 @@ interface LinktypeInterface * Get the value of the private property errorParams. * * @return array All parameters needed for the rendering of the error message + * @todo change return type to array in TYPO3 v13 */ public function getErrorParams(); @@ -60,6 +61,7 @@ interface LinktypeInterface * * @param array $row Broken link record * @return string Parsed broken url + * @todo change input parameter type to array in TYPO3 v13 */ public function getBrokenUrl($row); diff --git a/typo3/sysext/linkvalidator/Classes/Repository/BrokenLinkRepository.php b/typo3/sysext/linkvalidator/Classes/Repository/BrokenLinkRepository.php index 7507303c3948..e1dcdb929ec7 100644 --- a/typo3/sysext/linkvalidator/Classes/Repository/BrokenLinkRepository.php +++ b/typo3/sysext/linkvalidator/Classes/Repository/BrokenLinkRepository.php @@ -317,12 +317,20 @@ class BrokenLinkRepository return $results; } + /** + * Add broken link to table tx_linkvalidator_link + * + * @param array $record + * @param bool $isValid + * @param array|null $errorParams + * @throws \InvalidArgumentException + * @throws \UnexpectedValueException + * @todo Make default value of $errorParams [] instead of null and add strict typing in v13 + */ public function addBrokenLink($record, bool $isValid, array $errorParams = null): void { $response = ['valid' => $isValid]; - if ($errorParams) { - $response['errorParams'] = $errorParams; - } + $response['errorParams'] = $errorParams ?? []; $record['url_response'] = json_encode($response); GeneralUtility::makeInstance(ConnectionPool::class) ->getConnectionForTable(self::TABLE) -- GitLab