From 3b85de5dd11331c2fa37f666402d792bfec2cbd0 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Fri, 15 May 2026 16:35:31 +0200 Subject: [PATCH] Improve appearance of MediaBBCode for files without preview Closes #6510 --- .../templates/shared_bbcode_wsm_file.tpl | 12 ++++++++++++ .../install/files/lib/data/media/Media.class.php | 15 +++++++++++++++ .../files/lib/data/media/ViewableMedia.class.php | 10 +--------- .../bbcode/WoltLabSuiteMediaBBCode.class.php | 13 +++++++++---- .../install/files/lib/util/FileUtil.class.php | 2 +- wcfsetup/install/files/style/ui/attachment.scss | 1 + wcfsetup/install/lang/de.xml | 2 ++ wcfsetup/install/lang/en.xml | 2 ++ 8 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 com.woltlab.wcf/templates/shared_bbcode_wsm_file.tpl diff --git a/com.woltlab.wcf/templates/shared_bbcode_wsm_file.tpl b/com.woltlab.wcf/templates/shared_bbcode_wsm_file.tpl new file mode 100644 index 00000000000..16e338d5ca6 --- /dev/null +++ b/com.woltlab.wcf/templates/shared_bbcode_wsm_file.tpl @@ -0,0 +1,12 @@ + + + + {icon size=32 name=$media->getIconName()} + + + {icon size=32 name='download'} + + + {$media->getTitle()} + {lang}wcf.media.file.info{/lang} + diff --git a/wcfsetup/install/files/lib/data/media/Media.class.php b/wcfsetup/install/files/lib/data/media/Media.class.php index ee4959c6e8e..009f2e8da21 100644 --- a/wcfsetup/install/files/lib/data/media/Media.class.php +++ b/wcfsetup/install/files/lib/data/media/Media.class.php @@ -12,6 +12,7 @@ use wcf\system\request\IRouteController; use wcf\system\request\LinkHandler; use wcf\system\WCF; +use wcf\util\FileUtil; /** * Represents a media file. @@ -183,6 +184,20 @@ public function getTitle(): string return $this->filename; } + /** + * Returns the icon name for this media file based on its filename. + * + * @since 6.3 + */ + public function getIconName(): string + { + if ($iconName = FileUtil::getIconNameByFilename($this->filename)) { + return 'file-' . $iconName; + } + + return 'file'; + } + /** * Returns the i18n media data grouped by language id for all language. * diff --git a/wcfsetup/install/files/lib/data/media/ViewableMedia.class.php b/wcfsetup/install/files/lib/data/media/ViewableMedia.class.php index 3b376b53579..856a2f08fb6 100644 --- a/wcfsetup/install/files/lib/data/media/ViewableMedia.class.php +++ b/wcfsetup/install/files/lib/data/media/ViewableMedia.class.php @@ -6,7 +6,6 @@ use wcf\data\user\UserProfile; use wcf\system\cache\runtime\UserProfileRuntimeCache; use wcf\system\style\FontAwesomeIcon; -use wcf\util\FileUtil; use wcf\util\StringUtil; /** @@ -182,14 +181,7 @@ public function getElementTag(int $size) '; } - $icon = FileUtil::getIconNameByFilename($this->filename); - if ($icon) { - $icon = "file-{$icon}"; - } else { - $icon = 'file'; - } - - return FontAwesomeIcon::fromValues($icon, false)->toHtml($size); + return FontAwesomeIcon::fromValues($this->getIconName(), false)->toHtml($size); } /** diff --git a/wcfsetup/install/files/lib/system/bbcode/WoltLabSuiteMediaBBCode.class.php b/wcfsetup/install/files/lib/system/bbcode/WoltLabSuiteMediaBBCode.class.php index 85ebd9b8df8..06264c27171 100644 --- a/wcfsetup/install/files/lib/system/bbcode/WoltLabSuiteMediaBBCode.class.php +++ b/wcfsetup/install/files/lib/system/bbcode/WoltLabSuiteMediaBBCode.class.php @@ -60,6 +60,9 @@ public function getParsedTag(array $openingTag, string $content, array $closingT if ($parser->getOutputType() == 'text/html') { $float = (!empty($openingTag['attributes'][2])) ? $openingTag['attributes'][2] : 'none'; + $localizedMedia = MessageEmbeddedObjectManager::getInstance()->getActiveMessageLanguageID() + ? $media->getLocalizedVersion(MessageEmbeddedObjectManager::getInstance()->getActiveMessageLanguageID()) + : $media; if ($media->isImage) { $thumbnailSize = (!empty($openingTag['attributes'][1])) ? $openingTag['attributes'][1] : 'original'; @@ -72,7 +75,7 @@ public function getParsedTag(array $openingTag, string $content, array $closingT $thumbnailSize ) : '', 'float' => $float, - 'media' => $media->getLocalizedVersion(MessageEmbeddedObjectManager::getInstance()->getActiveMessageLanguageID()), + 'media' => $localizedMedia, 'thumbnailSize' => $thumbnailSize, 'width' => $width, 'activeMessageID' => MessageEmbeddedObjectManager::getInstance()->getActiveMessageID(), @@ -83,12 +86,14 @@ public function getParsedTag(array $openingTag, string $content, array $closingT 'mediaLink' => $media->getLink(), 'removeLinks' => $removeLinks, 'float' => $float, - 'media' => $media->getLocalizedVersion(MessageEmbeddedObjectManager::getInstance()->getActiveMessageLanguageID()), + 'media' => $localizedMedia, 'width' => 'auto', ]); + } else { + return WCF::getTPL()->render('wcf', 'shared_bbcode_wsm_file', [ + 'media' => $localizedMedia, + ]); } - - return StringUtil::getAnchorTag($media->getLink(), $media->getTitle()); } elseif ($parser->getOutputType() == 'text/simplified-html') { return StringUtil::getAnchorTag($media->getLink(), $media->getTitle()); } diff --git a/wcfsetup/install/files/lib/util/FileUtil.class.php b/wcfsetup/install/files/lib/util/FileUtil.class.php index 75f6d98ab56..fe7a8f9de98 100644 --- a/wcfsetup/install/files/lib/util/FileUtil.class.php +++ b/wcfsetup/install/files/lib/util/FileUtil.class.php @@ -571,7 +571,7 @@ public static function getIconNameByFilename(string $filename): string $lastDotPosition = \strrpos($filename, '.'); if ($lastDotPosition !== false) { - $extension = \substr($filename, $lastDotPosition + 1); + $extension = \strtolower(\substr($filename, $lastDotPosition + 1)); if (isset($mapping[$extension])) { return $mapping[$extension]; } diff --git a/wcfsetup/install/files/style/ui/attachment.scss b/wcfsetup/install/files/style/ui/attachment.scss index 6a5c11d42cd..08013df2f02 100644 --- a/wcfsetup/install/files/style/ui/attachment.scss +++ b/wcfsetup/install/files/style/ui/attachment.scss @@ -278,6 +278,7 @@ html[data-color-scheme="dark"] { "icon filename" "icon meta"; grid-template-columns: 32px auto; + max-width: 300px; padding: 8px; row-gap: 1px; user-select: none; diff --git a/wcfsetup/install/lang/de.xml b/wcfsetup/install/lang/de.xml index 5a7aec96035..03b69b201d4 100644 --- a/wcfsetup/install/lang/de.xml +++ b/wcfsetup/install/lang/de.xml @@ -4285,6 +4285,8 @@ Erlaubte Dateiendungen: gif, jpg, jpeg, png, webp]]> + filesize|filesize} – {plural value=$media->downloads 1="1 Download" other="# Downloads"}]]> + filename}“ herunterladen]]> diff --git a/wcfsetup/install/lang/en.xml b/wcfsetup/install/lang/en.xml index 7f1c156c221..7ff1d70d6ad 100644 --- a/wcfsetup/install/lang/en.xml +++ b/wcfsetup/install/lang/en.xml @@ -4231,6 +4231,8 @@ Allowed extensions: gif, jpg, jpeg, png, webp]]> + filesize|filesize} – {plural value=$media->downloads 1="1 Download" other="# Downloads"}]]> + filename}”]]>