From 12367f37cf243ec65c2de39c4cfdca9bb2167e93 Mon Sep 17 00:00:00 2001 From: Benni Mack <benni@typo3.org> Date: Tue, 5 Sep 2023 17:12:30 +0200 Subject: [PATCH] [BUGFIX] Ensure online media without author works When an oembed provider does not send an "author_name" property, then the request fails, and there is a sys_file without a sys_file_metadata. This then results that the show info popup does not work. Resolves: #101877 Releases: main, 12.4, 11.5 Change-Id: If6ead0084664372b9133fdd544ede90aa8a0e5d7 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/80903 Reviewed-by: Benjamin Franzke <ben@bnf.dev> Tested-by: Benjamin Franzke <ben@bnf.dev> Tested-by: core-ci <typo3@b13.com> --- .../ElementInformationController.php | 44 ++++++++++--------- .../Helpers/AbstractOEmbedHelper.php | 8 ++-- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php b/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php index a7aa92e9d2c7..775fae8d716e 100644 --- a/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php +++ b/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php @@ -295,27 +295,31 @@ class ElementInformationController $table = 'sys_file_metadata'; $metaDataRepository = GeneralUtility::makeInstance(MetaDataRepository::class); /** @var array<string, string> $metaData */ - $metaData = $metaDataRepository->findByFileUid($this->row['uid']); - $allowedFields = $this->getFieldList($request, $table, (int)$metaData['uid']); - - foreach ($metaData as $name => $value) { - if (in_array($name, $allowedFields, true)) { - if (!isset($GLOBALS['TCA'][$table]['columns'][$name])) { - continue; - } - - $isExcluded = !(!($GLOBALS['TCA'][$table]['columns'][$name]['exclude'] ?? false) || $this->getBackendUser()->check('non_exclude_fields', $table . ':' . $name)); - if ($isExcluded) { - continue; + $metaData = $metaDataRepository->findByFileUid($this->row['uid'] ?? 0); + + // If there is no metadata record, skip it + if ($metaData !== []) { + $allowedFields = $this->getFieldList($request, $table, (int)$metaData['uid']); + + foreach ($metaData as $name => $value) { + if (in_array($name, $allowedFields, true)) { + if (!isset($GLOBALS['TCA'][$table]['columns'][$name])) { + continue; + } + + $isExcluded = !(!($GLOBALS['TCA'][$table]['columns'][$name]['exclude'] ?? false) || $this->getBackendUser()->check('non_exclude_fields', $table . ':' . $name)); + if ($isExcluded) { + continue; + } + + $label = $lang->sL(BackendUtility::getItemLabel($table, $name)); + $label = $label ?: $name; + + $propertiesForTable['fields'][] = [ + 'fieldValue' => BackendUtility::getProcessedValue($table, $name, $metaData[$name], 0, false, false, (int)$metaData['uid']), + 'fieldLabel' => htmlspecialchars($label), + ]; } - - $label = $lang->sL(BackendUtility::getItemLabel($table, $name)); - $label = $label ?: $name; - - $propertiesForTable['fields'][] = [ - 'fieldValue' => BackendUtility::getProcessedValue($table, $name, $metaData[$name], 0, false, false, (int)$metaData['uid']), - 'fieldLabel' => htmlspecialchars($label), - ]; } } } diff --git a/typo3/sysext/core/Classes/Resource/OnlineMedia/Helpers/AbstractOEmbedHelper.php b/typo3/sysext/core/Classes/Resource/OnlineMedia/Helpers/AbstractOEmbedHelper.php index 0eb3f174988e..cbd374ca45b0 100644 --- a/typo3/sysext/core/Classes/Resource/OnlineMedia/Helpers/AbstractOEmbedHelper.php +++ b/typo3/sysext/core/Classes/Resource/OnlineMedia/Helpers/AbstractOEmbedHelper.php @@ -89,12 +89,12 @@ abstract class AbstractOEmbedHelper extends AbstractOnlineMediaHelper $oEmbed = $this->getOEmbedData($this->getOnlineMediaId($file)); if (is_array($oEmbed) && $oEmbed !== []) { - $metadata['width'] = (int)$oEmbed['width']; - $metadata['height'] = (int)$oEmbed['height']; + $metadata['width'] = (int)($oEmbed['width'] ?? 0); + $metadata['height'] = (int)($oEmbed['height'] ?? 0); if (empty($file->getProperty('title'))) { - $metadata['title'] = strip_tags($oEmbed['title']); + $metadata['title'] = strip_tags($oEmbed['title'] ?? ''); } - $metadata['author'] = $oEmbed['author_name']; + $metadata['author'] = $oEmbed['author_name'] ?? ''; } return $metadata; -- GitLab