Use view to render 'content not visible' block
authorMarcel Werk <burntime@woltlab.com>
Mon, 19 Aug 2024 11:36:04 +0000 (13:36 +0200)
committerMarcel Werk <burntime@woltlab.com>
Mon, 19 Aug 2024 11:36:04 +0000 (13:36 +0200)
com.woltlab.wcf/templates/shared_contentNotVisible.tpl
wcfsetup/install/files/lib/system/bbcode/AttachmentBBCode.class.php
wcfsetup/install/files/lib/system/bbcode/WoltLabSuiteArticleBBCode.class.php
wcfsetup/install/files/lib/system/bbcode/WoltLabSuiteMediaBBCode.class.php
wcfsetup/install/files/lib/system/bbcode/WoltLabSuitePageBBCode.class.php
wcfsetup/install/files/lib/system/view/ContentNotVisibleView.class.php [new file with mode: 0644]

index 0d07cb0222648586029d3464369cbfdb53cfee75..adde8729ad34ada3db6df28be6bb4ef9f2fa9e7b 100644 (file)
@@ -3,6 +3,6 @@
                {icon name='face-frown' size=32}
        </span>
        <span class="contentNotVisible__title">
-               {if $message|isset}{@$message}{else}{lang}wcf.message.content.not.available.title{/lang}{/if}
+               {unsafe:$message}
        </span>
 </div>
index 39b4d2850b9351c889c6a9a3537607c2f42e5969..7ef7e20bcbf004370036bbd13f691b433120bdd9 100644 (file)
@@ -5,6 +5,7 @@ namespace wcf\system\bbcode;
 use wcf\data\attachment\Attachment;
 use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
 use wcf\system\style\FontAwesomeIcon;
+use wcf\system\view\ContentNotVisibleView;
 use wcf\system\WCF;
 use wcf\util\StringUtil;
 
@@ -26,7 +27,7 @@ final class AttachmentBBCode extends AbstractBBCode
 
         $attachment = $this->getAttachment($attachmentID);
         if ($attachment === null) {
-            return WCF::getTPL()->fetch('shared_contentNotVisible', sandbox: true);
+            return new ContentNotVisibleView();
         }
 
         $outputType = $parser->getOutputType();
@@ -54,9 +55,9 @@ final class AttachmentBBCode extends AbstractBBCode
         } elseif (\substr($attachment->fileType, 0, 6) === 'audio/' && $outputType == 'text/html') {
             return $this->showAudioPlayer($attachment);
         } elseif (!$attachment->canDownload()) {
-            return WCF::getTPL()->fetch('shared_contentNotVisible', 'wcf', [
-                'message' => WCF::getLanguage()->getDynamicVariable('wcf.message.content.no.permission.title')
-            ], true);
+            return new ContentNotVisibleView(
+                WCF::getLanguage()->getDynamicVariable('wcf.message.content.no.permission.title')
+            );
         }
 
         return StringUtil::getAnchorTag($attachment->getLink(), $attachment->filename);
index fcdbfdd084f1977dd5204070da6096554c387b06..eb9e89c33d87e6f07a9dce679631dff5d92d9894 100644 (file)
@@ -4,6 +4,7 @@ namespace wcf\system\bbcode;
 
 use wcf\data\article\ViewableArticle;
 use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
+use wcf\system\view\ContentNotVisibleView;
 use wcf\system\WCF;
 use wcf\util\StringUtil;
 
@@ -32,13 +33,13 @@ final class WoltLabSuiteArticleBBCode extends AbstractBBCode
 
         $article = $this->getArticle($articleID);
         if ($article === null) {
-            return WCF::getTPL()->fetch('shared_contentNotVisible', sandbox: true);
+            return new ContentNotVisibleView();
         }
 
         if (!$article->canRead()) {
-            return WCF::getTPL()->fetch('shared_contentNotVisible', 'wcf', [
-                'message' => WCF::getLanguage()->getDynamicVariable('wcf.message.content.no.permission.title')
-            ], true);
+            return new ContentNotVisibleView(
+                WCF::getLanguage()->getDynamicVariable('wcf.message.content.no.permission.title')
+            );
         } elseif ($parser->getOutputType() == 'text/html') {
             return WCF::getTPL()->fetch('shared_bbcode_wsa', 'wcf', [
                 'article' => $article,
index dbeebb58a3bd18664ebcc1da7e0c9f5a8278dc97..45e6b2f0be0ed5cecb899120b89561805e61d471 100644 (file)
@@ -4,6 +4,7 @@ namespace wcf\system\bbcode;
 
 use wcf\data\media\ViewableMedia;
 use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
+use wcf\system\view\ContentNotVisibleView;
 use wcf\system\WCF;
 use wcf\util\StringUtil;
 
@@ -48,7 +49,7 @@ final class WoltLabSuiteMediaBBCode extends AbstractBBCode
         /** @var ViewableMedia $media */
         $media = MessageEmbeddedObjectManager::getInstance()->getObject('com.woltlab.wcf.media', $mediaID);
         if ($media === null) {
-            return WCF::getTPL()->fetch('shared_contentNotVisible', sandbox: true);
+            return new ContentNotVisibleView();
         }
 
         if ($media->isAccessible()) {
@@ -95,9 +96,9 @@ final class WoltLabSuiteMediaBBCode extends AbstractBBCode
 
             return StringUtil::encodeHTML($media->getLink());
         } else {
-            return WCF::getTPL()->fetch('shared_contentNotVisible', 'wcf', [
-                'message' => WCF::getLanguage()->getDynamicVariable('wcf.message.content.no.permission.title')
-            ], true);
+            return new ContentNotVisibleView(
+                WCF::getLanguage()->getDynamicVariable('wcf.message.content.no.permission.title')
+            );
         }
     }
 }
index 1934e4e27f13668712578c298da9dd3eef9dcf6b..5650f00618e78a6a63e2d58f6d1d7f50fce33878 100644 (file)
@@ -4,7 +4,7 @@ namespace wcf\system\bbcode;
 
 use wcf\data\page\Page;
 use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
-use wcf\system\WCF;
+use wcf\system\view\ContentNotVisibleView;
 use wcf\util\StringUtil;
 
 /**
@@ -35,6 +35,6 @@ final class WoltLabSuitePageBBCode extends AbstractBBCode
             return StringUtil::getAnchorTag($page->getLink(), $title ?: $page->getTitle());
         }
 
-        return WCF::getTPL()->fetch('shared_contentNotVisible', sandbox: true);
+        return new ContentNotVisibleView();
     }
 }
diff --git a/wcfsetup/install/files/lib/system/view/ContentNotVisibleView.class.php b/wcfsetup/install/files/lib/system/view/ContentNotVisibleView.class.php
new file mode 100644 (file)
index 0000000..977d2fa
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+namespace wcf\system\view;
+
+use wcf\system\WCF;
+
+/**
+ * Represents the view for a 'content not visible' block.
+ *
+ * @author      Marcel Werk
+ * @copyright   2001-2024 WoltLab GmbH
+ * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @since       6.1
+ */
+final class ContentNotVisibleView
+{
+    private readonly string $message;
+
+    public function __construct(
+        string $message = '',
+    ) {
+        if (!$message) {
+            $message = WCF::getLanguage()->get('wcf.message.content.not.available.title');
+        }
+
+        $this->message = $message;
+    }
+
+    public function __toString(): string
+    {
+        return WCF::getTPL()->fetch('shared_contentNotVisible', 'wcf', [
+            'message' => $this->message,
+        ], true);
+    }
+}