Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
42.86% |
3 / 7 |
CRAP | |
50.91% |
28 / 55 |
| language_file_loader | |
0.00% |
0 / 1 |
|
42.86% |
3 / 7 |
41.62 | |
50.91% |
28 / 55 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| set_extension_manager | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| load | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| load_extension | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
|||
| load_file | |
0.00% |
0 / 1 |
5.44 | |
35.29% |
6 / 17 |
|||
| get_language_file_path | |
0.00% |
0 / 1 |
7.54 | |
53.33% |
8 / 15 |
|||
| load_language_file | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
4 / 6 |
|||
| <?php | |
| /** | |
| * | |
| * This file is part of the phpBB Forum Software package. | |
| * | |
| * @copyright (c) phpBB Limited <https://www.phpbb.com> | |
| * @license GNU General Public License, version 2 (GPL-2.0) | |
| * | |
| * For full copyright and license information, please see | |
| * the docs/CREDITS.txt file. | |
| * | |
| */ | |
| namespace phpbb\language; | |
| use \phpbb\language\exception\language_file_not_found; | |
| /** | |
| * Language file loader | |
| */ | |
| class language_file_loader | |
| { | |
| /** | |
| * @var string Path to phpBB's root | |
| */ | |
| protected $phpbb_root_path; | |
| /** | |
| * @var string Extension of PHP files | |
| */ | |
| protected $php_ext; | |
| /** | |
| * @var \phpbb\extension\manager Extension manager | |
| */ | |
| protected $extension_manager; | |
| /** | |
| * Constructor | |
| * | |
| * @param string $phpbb_root_path Path to phpBB's root | |
| * @param string $php_ext Extension of PHP files | |
| */ | |
| public function __construct($phpbb_root_path, $php_ext) | |
| { | |
| $this->phpbb_root_path = $phpbb_root_path; | |
| $this->php_ext = $php_ext; | |
| $this->extension_manager = null; | |
| } | |
| /** | |
| * Extension manager setter | |
| * | |
| * @param \phpbb\extension\manager $extension_manager Extension manager | |
| */ | |
| public function set_extension_manager(\phpbb\extension\manager $extension_manager) | |
| { | |
| $this->extension_manager = $extension_manager; | |
| } | |
| /** | |
| * Loads language array for the given component | |
| * | |
| * @param string $component Name of the language component | |
| * @param string|array $locale ISO code of the language to load, or array of ISO codes if you want to | |
| * specify additional language fallback steps | |
| * @param array $lang Array reference containing language strings | |
| */ | |
| public function load($component, $locale, &$lang) | |
| { | |
| $locale = (array) $locale; | |
| // Determine path to language directory | |
| $path = $this->phpbb_root_path . 'language/'; | |
| $this->load_file($path, $component, $locale, $lang); | |
| } | |
| /** | |
| * Loads language array for the given extension component | |
| * | |
| * @param string $extension Name of the extension | |
| * @param string $component Name of the language component | |
| * @param string|array $locale ISO code of the language to load, or array of ISO codes if you want to | |
| * specify additional language fallback steps | |
| * @param array $lang Array reference containing language strings | |
| */ | |
| public function load_extension($extension, $component, $locale, &$lang) | |
| { | |
| // Check if extension manager was loaded | |
| if ($this->extension_manager === null) | |
| { | |
| // If not, let's return | |
| return; | |
| } | |
| $locale = (array) $locale; | |
| // Determine path to language directory | |
| $path = $this->extension_manager->get_extension_path($extension, true) . 'language/'; | |
| $this->load_file($path, $component, $locale, $lang); | |
| } | |
| /** | |
| * Prepares language file loading | |
| * | |
| * @param string $path Path to search for file in | |
| * @param string $component Name of the language component | |
| * @param array $locale Array containing language fallback options | |
| * @param array $lang Array reference of language strings | |
| */ | |
| protected function load_file($path, $component, $locale, &$lang) | |
| { | |
| // This is BC stuff and not the best idea as it makes language fallback | |
| // implementation quite hard like below. | |
| if (strpos($this->phpbb_root_path . $component, $path) === 0) | |
| { | |
| // Filter out the path | |
| $path_diff = str_replace($path, '', dirname($this->phpbb_root_path . $component)); | |
| $language_file = basename($component, '.' . $this->php_ext); | |
| $component = ''; | |
| // This step is needed to resolve language/en/subdir style $component | |
| // $path already points to the language base directory so we need to eliminate | |
| // the first directory from the path (that should be the language directory) | |
| $path_diff_parts = explode('/', $path_diff); | |
| if (count($path_diff_parts) > 1) | |
| { | |
| array_shift($path_diff_parts); | |
| $component = implode('/', $path_diff_parts) . '/'; | |
| } | |
| $component .= $language_file; | |
| } | |
| // Determine filename | |
| $filename = $component . '.' . $this->php_ext; | |
| // Determine path to file | |
| $file_path = $this->get_language_file_path($path, $filename, $locale); | |
| // Load language array | |
| $this->load_language_file($file_path, $lang); | |
| } | |
| /** | |
| * This function implements language fallback logic | |
| * | |
| * @param string $path Path to language directory | |
| * @param string $filename Filename to load language strings from | |
| * | |
| * @return string Relative path to language file | |
| * | |
| * @throws language_file_not_found When the path to the file cannot be resolved | |
| */ | |
| protected function get_language_file_path($path, $filename, $locales) | |
| { | |
| $language_file_path = $filename; | |
| // Language fallback logic | |
| foreach ($locales as $locale) | |
| { | |
| $language_file_path = $path . $locale . '/' . $filename; | |
| // If we are in install, try to use the updated version, when available | |
| if (defined('IN_INSTALL')) | |
| { | |
| $install_language_path = str_replace('language/', 'install/update/new/language/', $language_file_path); | |
| if (file_exists($install_language_path)) | |
| { | |
| return $install_language_path; | |
| } | |
| } | |
| if (file_exists($language_file_path)) | |
| { | |
| return $language_file_path; | |
| } | |
| } | |
| // The language file is not exist | |
| throw new language_file_not_found('Language file ' . $language_file_path . ' couldn\'t be opened.'); | |
| } | |
| /** | |
| * Loads language file | |
| * | |
| * @param string $path Path to language file to load | |
| * @param array $lang Reference of the array of language strings | |
| */ | |
| protected function load_language_file($path, &$lang) | |
| { | |
| // Do not suppress error if in DEBUG mode | |
| if (defined('DEBUG')) | |
| { | |
| include $path; | |
| } | |
| else | |
| { | |
| @include $path; | |
| } | |
| } | |
| } |