Add LanguageEditor::validateItemName()
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 11 Aug 2021 12:17:49 +0000 (14:17 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 11 Aug 2021 12:18:12 +0000 (14:18 +0200)
wcfsetup/install/files/lib/data/language/LanguageEditor.class.php

index 5184ef7a12a62b27f91394ac9c1c7d18bb4840fb..e11db2e4e5fa76b352081adb72a82ad0331bb6e2 100644 (file)
@@ -361,24 +361,7 @@ class LanguageEditor extends DatabaseObjectEditor implements IEditableCachedObje
                 foreach ($elements as $element) {
                     $itemName = $element->getAttribute('name');
 
-                    // Safeguard against malformed phrases, an empty name has a strange side effect.
-                    if (empty($itemName)) {
-                        throw new \InvalidArgumentException("The name attribute is missing or empty.");
-                    }
-
-                    if ($itemName !== $categoryName && \strpos($itemName, $categoryName . '.') !== 0) {
-                        throw new \InvalidArgumentException(WCF::getLanguage()->getDynamicVariable(
-                            'wcf.acp.language.import.error.categoryMismatch',
-                            [
-                                'categoryName' => $categoryName,
-                                'languageItem' => $itemName,
-                            ]
-                        ));
-                    }
-
-                    if (StringUtil::trim($itemName) !== $itemName) {
-                        throw new \InvalidArgumentException("The name '{$itemName}' contains leading or trailing whitespaces.");
-                    }
+                    self::validateItemName($itemName, $categoryName);
 
                     $itemValue = $element->nodeValue;
 
@@ -610,6 +593,34 @@ class LanguageEditor extends DatabaseObjectEditor implements IEditableCachedObje
         $this->deleteCompiledTemplates();
     }
 
+    /**
+     * Verifies that the given variable is a valid variable within the given category.
+     * Throws an exception otherwise.
+     *
+     * @since 5.4
+     */
+    final public static function validateItemName(string $itemName, string $categoryName): void
+    {
+        // Safeguard against malformed phrases, an empty name has a strange side effect.
+        if (empty($itemName)) {
+            throw new \InvalidArgumentException("The name attribute is missing or empty.");
+        }
+
+        if ($itemName !== $categoryName && \strpos($itemName, $categoryName . '.') !== 0) {
+            throw new \InvalidArgumentException(WCF::getLanguage()->getDynamicVariable(
+                'wcf.acp.language.import.error.categoryMismatch',
+                [
+                    'categoryName' => $categoryName,
+                    'languageItem' => $itemName,
+                ]
+            ));
+        }
+
+        if (StringUtil::trim($itemName) !== $itemName) {
+            throw new \InvalidArgumentException("The name '{$itemName}' contains leading or trailing whitespaces.");
+        }
+    }
+
     /**
      * Deletes the language cache.
      *