Example #1
0
 public function execute()
 {
     // Prevent the script from timing out
     set_time_limit(0);
     ini_set("max_execution_time", 0);
     ini_set('memory_limit', -1);
     global $wgExtensionMessagesFiles, $IP;
     global $wgLocalisationUpdateRepositories;
     global $wgLocalisationUpdateRepository;
     $dir = LocalisationUpdate::getDirectory();
     if (!$dir) {
         $this->error("No cache directory configured", true);
         return;
     }
     $lc = Language::getLocalisationCache();
     if (is_callable(array($lc, 'getMessagesDirs'))) {
         // Introduced in 1.25
         $messagesDirs = $lc->getMessagesDirs();
     } else {
         global $wgMessagesDirs;
         $messagesDirs = $wgMessagesDirs;
     }
     $finder = new LU_Finder($wgExtensionMessagesFiles, $messagesDirs, $IP);
     $readerFactory = new LU_ReaderFactory();
     $fetcherFactory = new LU_FetcherFactory();
     $repoid = $this->getOption('repoid', $wgLocalisationUpdateRepository);
     if (!isset($wgLocalisationUpdateRepositories[$repoid])) {
         $known = implode(', ', array_keys($wgLocalisationUpdateRepositories));
         $this->error("Unknown repoid {$repoid}; known: {$known}", true);
         return;
     }
     $repos = $wgLocalisationUpdateRepositories[$repoid];
     // Do it ;)
     $updater = new LU_Updater();
     $updatedMessages = $updater->execute($finder, $readerFactory, $fetcherFactory, $repos);
     // Store it ;)
     $count = array_sum(array_map('count', $updatedMessages));
     if (!$count) {
         $this->output("Found no new translations\n");
         return;
     }
     foreach ($updatedMessages as $language => $messages) {
         $filename = "{$dir}/" . LocalisationUpdate::getFilename($language);
         file_put_contents($filename, FormatJson::encode($messages, true));
     }
     $this->output("Saved {$count} new translations\n");
 }
 /**
  * Hook: LocalisationCacheRecache
  */
 public static function onRecache(LocalisationCache $lc, $code, array &$cache)
 {
     $dir = LocalisationUpdate::getDirectory();
     if (!$dir) {
         return true;
     }
     $codeSequence = array_merge(array($code), $cache['fallbackSequence']);
     foreach ($codeSequence as $csCode) {
         $fileName = "{$dir}/" . self::getFilename($csCode);
         if (is_readable($fileName)) {
             $data = FormatJson::decode(file_get_contents($fileName), true);
             $cache['messages'] = array_merge($cache['messages'], $data);
         }
         $cache['deps'][] = new FileDependency($fileName);
     }
     return true;
 }
 /**
  * Hook: LocalisationCacheRecache
  */
 public static function onRecache(LocalisationCache $lc, $code, array &$cache)
 {
     $dir = LocalisationUpdate::getDirectory();
     if (!$dir) {
         return true;
     }
     $codeSequence = array_merge(array($code), $cache['fallbackSequence']);
     foreach ($codeSequence as $csCode) {
         $fileName = "{$dir}/" . self::getFilename($csCode);
         if (!self::$onRecacheFallbackCalled && is_readable($fileName)) {
             // We're on an old version of MW that doesn't have the hook
             // needed to do things correctly. L10n will be broken here in
             // certain reasonably-common situations (see bug 68781), but
             // there's nothing we can do about it.
             $data = FormatJson::decode(file_get_contents($fileName), true);
             $cache['messages'] = array_merge($cache['messages'], $data);
         }
         $cache['deps'][] = new FileDependency($fileName);
     }
     return true;
 }