Move the URL generation for the phrase preloader into the template
authorAlexander Ebert <ebert@woltlab.com>
Thu, 10 Nov 2022 16:46:33 +0000 (17:46 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Sun, 13 Nov 2022 14:28:21 +0000 (15:28 +0100)
com.woltlab.wcf/templates/headIncludeJavaScript.tpl
wcfsetup/install/files/acp/templates/header.tpl
wcfsetup/install/files/lib/bootstrap/com.woltlab.wcf.php
wcfsetup/install/files/lib/system/language/preload/PhrasePreloader.class.php [new file with mode: 0644]

index 85e6469c8ea5d37609e1e34d31bb6739c7d35730..3343cb7f43312196e346c5f684c14c51048a128d 100644 (file)
@@ -24,6 +24,7 @@
        {/if}
 </script>
 
+<script src="{$phrasePreloader->getUrl($__wcf->language)}"></script>
 <script src="{$__wcf->getPath()}js/WoltLabSuite/WebComponent.js"></script>
 
 {js application='wcf' file='require' bundle='WoltLabSuite.Core' core='true' hasTiny=true}
index 0cc2de83c78f57557ff4b789a6b8bf26c23c1efb..18b312f64beee00e1d8eb23101c90b60f1c93cc7 100644 (file)
@@ -48,6 +48,7 @@
                var COMPILER_TARGET_DEFAULT = true;
        </script>
 
+       <script data-eager="true" src="{$phrasePreloader->getUrl($__wcf->language)}"></script>
        <script data-eager="true" src="{$__wcf->getPath()}js/WoltLabSuite/WebComponent.js"></script>
        
        {js application='wcf' file='require' bundle='WoltLabSuite.Core' core='true'}
index 372edebee0441979855cc43a9cc5a4dab1f16183..d7dc6fc5cf3dcc40304169771959a93300196070 100644 (file)
@@ -8,7 +8,7 @@ use wcf\system\language\event\LanguageImported;
 use wcf\system\language\event\PhraseChanged;
 use wcf\system\language\LanguageFactory;
 use wcf\system\language\preload\command\ResetPreloadCache;
-use wcf\system\language\preload\PhrasePreloadCache;
+use wcf\system\language\preload\PhrasePreloader;
 use wcf\system\package\event\PackageListChanged;
 use wcf\system\user\authentication\event\UserLoggedIn;
 use wcf\system\WCF;
@@ -32,5 +32,5 @@ return static function (): void {
         $command();
     });
     EventHandler::getInstance()->register(PhraseChanged::class, PhraseChangedPreloadListener::class);
-    WCF::getTPL()->assign('__phrasePreloadCacheUrl', PhrasePreloadCache::getUrl(WCF::getLanguage()));
+    WCF::getTPL()->assign('phrasePreloader', new PhrasePreloader());
 };
diff --git a/wcfsetup/install/files/lib/system/language/preload/PhrasePreloader.class.php b/wcfsetup/install/files/lib/system/language/preload/PhrasePreloader.class.php
new file mode 100644 (file)
index 0000000..417119e
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+
+namespace wcf\system\language\preload;
+
+use wcf\data\language\Language;
+use wcf\system\language\preload\command\CachePreloadPhrases;
+use wcf\system\WCF;
+
+/**
+ * Provides the URL to the preload cache for
+ * phrases and creates it if it is missing.
+ *
+ * @author Alexander Ebert
+ * @copyright 2001-2022 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package WoltLabSuite\Core\System\Language\Preload\Command
+ * @since 6.0
+ */
+final class PhrasePreloader
+{
+    /**
+     * Returns the URL to the preload cache. Will implicitly
+     * create the cache if it does not exist.
+     */
+    public function getUrl(Language $language): string
+    {
+        if ($this->needsRebuild($language)) {
+            $this->rebuild($language);
+        }
+
+        return WCF::getPath() . $language->getPreloadCacheFilename();
+    }
+
+    private function needsRebuild(Language $language): bool
+    {
+        return \file_exists(\WCF_DIR . $language->getPreloadCacheFilename());
+    }
+
+    private function rebuild(Language $language): void
+    {
+        $command = new CachePreloadPhrases($language);
+        $command();
+    }
+}