Add option for a fallback value in user renderer
authorMarcel Werk <burntime@woltlab.com>
Tue, 10 Dec 2024 15:33:08 +0000 (16:33 +0100)
committerMarcel Werk <burntime@woltlab.com>
Tue, 10 Dec 2024 15:33:08 +0000 (16:33 +0100)
wcfsetup/install/files/lib/system/gridView/renderer/UserColumnRenderer.class.php
wcfsetup/install/files/lib/system/gridView/renderer/UserLinkColumnRenderer.class.php

index d610113057c1da696b9a79b0cd2fde7e991957a4..31ba9310ee3f21d71d92052aee00359fc967676b 100644 (file)
@@ -15,10 +15,22 @@ use wcf\util\StringUtil;
  */
 class UserColumnRenderer extends DefaultColumnRenderer
 {
+    public function __construct(
+        public readonly string $fallbackValue = 'username'
+    ) {}
+
     #[\Override]
     public function render(mixed $value, mixed $context = null): string
     {
         if (!$value) {
+            if ($this->fallbackValue) {
+                if (\is_array($context)) {
+                    return StringUtil::encodeHTML($context[$this->fallbackValue] ?? '');
+                } else {
+                    return StringUtil::encodeHTML($context->{$this->fallbackValue} ?? '');
+                }
+            }
+
             return '';
         }
 
index 374c7d3c7472410ed110cd7c201aeb6d419bdf69..4cd20e6e979bf39e89792c4eeba300fd8cbd8a28 100644 (file)
@@ -4,6 +4,7 @@ namespace wcf\system\gridView\renderer;
 
 use wcf\system\cache\runtime\AbstractRuntimeCache;
 use wcf\system\cache\runtime\UserRuntimeCache;
+use wcf\util\StringUtil;
 
 /**
  * Formats the content of a column as a user link. The value of the column must be a user id.
@@ -15,9 +16,36 @@ use wcf\system\cache\runtime\UserRuntimeCache;
  */
 class UserLinkColumnRenderer extends ObjectLinkColumnRenderer
 {
+    public function __construct(
+        string $controllerClass = '',
+        array $parameters = [],
+        string $titleLanguageItem = '',
+        public readonly string $fallbackValue = 'username'
+    ) {
+        parent::__construct($controllerClass, $parameters, $titleLanguageItem);
+    }
+
     #[\Override]
     protected function getRuntimeCache(): AbstractRuntimeCache
     {
         return UserRuntimeCache::getInstance();
     }
+
+    #[\Override]
+    public function render(mixed $value, mixed $context = null): string
+    {
+        if ($value) {
+            return parent::render($value);
+        }
+
+        if ($this->fallbackValue) {
+            if (\is_array($context)) {
+                return StringUtil::encodeHTML($context[$this->fallbackValue] ?? '');
+            } else {
+                return StringUtil::encodeHTML($context->{$this->fallbackValue} ?? '');
+            }
+        }
+
+        return '';
+    }
 }