From 501b4f1e236fb2c0d14e6d6cab888c9b58c8d404 Mon Sep 17 00:00:00 2001 From: Benni Mack 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/+/80926 Tested-by: Benjamin Franzke Reviewed-by: Benjamin Franzke Tested-by: core-ci --- .../ElementInformationController.php | 38 ++++++++++--------- .../Helpers/AbstractOEmbedHelper.php | 8 ++-- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php b/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php index 0bd958f0478a..ee6442e2ed62 100644 --- a/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php +++ b/typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php @@ -414,27 +414,31 @@ protected function getPropertiesForTable(): array $table = 'sys_file_metadata'; $metaDataRepository = GeneralUtility::makeInstance(MetaDataRepository::class); /** @var array $metaData */ - $metaData = $metaDataRepository->findByFileUid($this->row['uid']); - $allowedFields = $this->getFieldList($table, (int)$metaData['uid']); + $metaData = $metaDataRepository->findByFileUid($this->row['uid'] ?? 0); - foreach ($metaData as $name => $value) { - if (in_array($name, $allowedFields, true)) { - if (!isset($GLOBALS['TCA'][$table]['columns'][$name])) { - continue; - } + // If there is no metadata record, skip it + if ($metaData !== []) { + $allowedFields = $this->getFieldList($table, (int)$metaData['uid']); - $isExcluded = !(!($GLOBALS['TCA'][$table]['columns'][$name]['exclude'] ?? false) || $this->getBackendUser()->check('non_exclude_fields', $table . ':' . $name)); - if ($isExcluded) { - continue; - } + foreach ($metaData as $name => $value) { + if (in_array($name, $allowedFields, true)) { + if (!isset($GLOBALS['TCA'][$table]['columns'][$name])) { + continue; + } - $label = $lang->sL(BackendUtility::getItemLabel($table, $name)); - $label = $label ?: $name; + $isExcluded = !(!($GLOBALS['TCA'][$table]['columns'][$name]['exclude'] ?? false) || $this->getBackendUser()->check('non_exclude_fields', $table . ':' . $name)); + if ($isExcluded) { + continue; + } - $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 5c37fa9a5f46..21bac58123e9 100644 --- a/typo3/sysext/core/Classes/Resource/OnlineMedia/Helpers/AbstractOEmbedHelper.php +++ b/typo3/sysext/core/Classes/Resource/OnlineMedia/Helpers/AbstractOEmbedHelper.php @@ -91,12 +91,12 @@ public function getMetaData(File $file) $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;