Create the preload cache for phrases
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / language / preload / LanguagePreloader.class.php
CommitLineData
3e753e26
AE
1<?php
2
3namespace wcf\system\language\preload;
4
5use wcf\data\language\Language;
6use wcf\system\event\EventHandler;
7use wcf\system\Regex;
8use wcf\util\DirectoryUtil;
9use wcf\util\FileUtil;
10
11final class LanguagePreloader
12{
13 private readonly EventHandler $eventHandler;
14 private readonly Language $language;
15
16 private const STORAGE_PATH = \WCF_DIR . 'js/preload/';
17
18 public function __construct(Language $language)
19 {
20 $this->eventHandler = EventHandler::getInstance();
21 $this->language = $language;
22 }
23
24 public function rebuild(): void
25 {
26 $registerPreloadPhrases = new RegisterPreloadPhrases($this->language);
27 $this->eventHandler->fire($registerPreloadPhrases);
28
29 $payload = $this->generatePreloadPayload($registerPreloadPhrases->getPreloadPhrases());
30
31 $filename = $this->getPreloadFileName();
32 \file_put_contents($filename, $payload);
33 FileUtil::makeWritable($filename);
34 }
35
36 public function mustBeRebuild(): bool
37 {
38 return \file_exists($this->getPreloadFileName());
39 }
40
41 private function getPreloadFileName(): string
42 {
43 return \sprintf(
44 '%s%s.preload.js',
45 self::STORAGE_PATH,
46 $this->language->getLocale(),
47 );
48 }
49
50 /**
51 * @param PreloadPhrase[] $preloadPhrases
52 */
53 private function generatePreloadPayload(array $preloadPhrases): string
54 {
55 return '';
56 }
57
58 public static function reset(): void
59 {
60 DirectoryUtil::getInstance(self::STORAGE_PATH)->removePattern(new Regex('.*\.preload\.js$'));
61 }
62}