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}”]]>