mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
[ticket/13762] Moving language related functionality into a separate class
PHPBB3-13762
This commit is contained in:
parent
2f480be02d
commit
179a470022
67 changed files with 1663 additions and 679 deletions
|
@ -35,6 +35,7 @@
|
|||
"symfony/dependency-injection": "2.8.*@dev",
|
||||
"symfony/event-dispatcher": "2.8.*@dev",
|
||||
"symfony/filesystem": "2.8.*@dev",
|
||||
"symfony/finder": "2.8.*@dev",
|
||||
"symfony/http-kernel": "2.8.*@dev",
|
||||
"symfony/routing": "2.8.*@dev",
|
||||
"symfony/security-core": "2.8.*@dev",
|
||||
|
@ -54,7 +55,6 @@
|
|||
"symfony/css-selector": "2.8.*@dev",
|
||||
"symfony/debug": "2.8.*@dev",
|
||||
"symfony/dom-crawler": "2.8.*@dev",
|
||||
"symfony/finder": "2.8.*@dev",
|
||||
"symfony/http-foundation": "2.8.*@dev",
|
||||
"symfony/process": "2.8.*@dev"
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ imports:
|
|||
- { resource: services_event.yml }
|
||||
- { resource: services_feed.yml }
|
||||
- { resource: services_help.yml }
|
||||
- { resource: services_language.yml }
|
||||
- { resource: services_mimetype_guesser.yml }
|
||||
- { resource: services_notification.yml }
|
||||
- { resource: services_password.yml }
|
||||
|
|
22
phpBB/config/default/container/services_language.yml
Normal file
22
phpBB/config/default/container/services_language.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
services:
|
||||
language.helper.language_file:
|
||||
class: phpbb\language\language_file_helper
|
||||
arguments:
|
||||
- %core.root_path%
|
||||
|
||||
language:
|
||||
class: phpbb\language\language
|
||||
arguments:
|
||||
- @language.loader
|
||||
|
||||
language.loader_abstract:
|
||||
abstract: true
|
||||
class: phpbb\language\language_file_loader
|
||||
arguments:
|
||||
- %core.root_path%
|
||||
- %core.php_ext%
|
||||
|
||||
language.loader:
|
||||
parent: language.loader_abstract
|
||||
calls:
|
||||
- [set_extension_manager, ["@ext.manager"]]
|
|
@ -8,6 +8,7 @@ services:
|
|||
user:
|
||||
class: phpbb\user
|
||||
arguments:
|
||||
- @language
|
||||
- %datetime.class%
|
||||
|
||||
user_loader:
|
||||
|
|
|
@ -31,7 +31,7 @@ class acp_language
|
|||
|
||||
function main($id, $mode)
|
||||
{
|
||||
global $config, $db, $user, $template, $phpbb_log;
|
||||
global $config, $db, $user, $template, $phpbb_log, $phpbb_container;
|
||||
global $phpbb_root_path, $phpEx, $request;
|
||||
|
||||
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||
|
@ -377,38 +377,20 @@ class acp_language
|
|||
$db->sql_freeresult($result);
|
||||
|
||||
$new_ary = $iso = array();
|
||||
$dp = @opendir("{$phpbb_root_path}language");
|
||||
|
||||
if ($dp)
|
||||
{
|
||||
while (($file = readdir($dp)) !== false)
|
||||
{
|
||||
if ($file[0] == '.' || !is_dir($phpbb_root_path . 'language/' . $file))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
/** @var \phpbb\language\language_file_helper $language_helper */
|
||||
$language_helper = $phpbb_container->get('language.helper.language_file');
|
||||
$iso = $language_helper->get_available_languages();
|
||||
|
||||
if (file_exists("{$phpbb_root_path}language/$file/iso.txt"))
|
||||
foreach ($iso as $lang_array)
|
||||
{
|
||||
if (!in_array($file, $installed))
|
||||
$lang_iso = $lang_array['iso'];
|
||||
|
||||
if (!in_array($lang_iso, $installed))
|
||||
{
|
||||
if ($iso = file("{$phpbb_root_path}language/$file/iso.txt"))
|
||||
{
|
||||
if (sizeof($iso) == 3)
|
||||
{
|
||||
$new_ary[$file] = array(
|
||||
'iso' => $file,
|
||||
'name' => trim($iso[0]),
|
||||
'local_name'=> trim($iso[1]),
|
||||
'author' => trim($iso[2])
|
||||
);
|
||||
$new_ary[$lang_iso] = $lang_array;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dp);
|
||||
}
|
||||
|
||||
unset($installed);
|
||||
|
||||
|
|
|
@ -1719,7 +1719,7 @@ function redirect($url, $return = false, $disable_cd_check = false)
|
|||
|
||||
$failover_flag = false;
|
||||
|
||||
if (empty($user->lang))
|
||||
if (!$user->is_setup())
|
||||
{
|
||||
$user->add_lang('common');
|
||||
}
|
||||
|
@ -2243,7 +2243,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
|
|||
$err = '';
|
||||
|
||||
// Make sure user->setup() has been called
|
||||
if (empty($user->lang))
|
||||
if (!$user->is_setup())
|
||||
{
|
||||
$user->setup();
|
||||
}
|
||||
|
@ -3268,7 +3268,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
|
|||
|
||||
case E_USER_ERROR:
|
||||
|
||||
if (!empty($user) && !empty($user->lang))
|
||||
if (!empty($user) && $user->is_setup())
|
||||
{
|
||||
$msg_text = (!empty($user->lang[$msg_text])) ? $user->lang[$msg_text] : $msg_text;
|
||||
$msg_title = (!isset($msg_title)) ? $user->lang['GENERAL_ERROR'] : ((!empty($user->lang[$msg_title])) ? $user->lang[$msg_title] : $msg_title);
|
||||
|
@ -3388,7 +3388,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
|
|||
// We re-init the auth array to get correct results on login/logout
|
||||
$auth->acl($user->data);
|
||||
|
||||
if (empty($user->lang))
|
||||
if (!$user->is_setup())
|
||||
{
|
||||
$user->setup();
|
||||
}
|
||||
|
@ -3761,178 +3761,6 @@ function phpbb_optionset($bit, $set, $data)
|
|||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine which plural form we should use.
|
||||
* For some languages this is not as simple as for English.
|
||||
*
|
||||
* @param $rule int ID of the plural rule we want to use, see http://wiki.phpbb.com/Plural_Rules#Plural_Rules
|
||||
* @param $number int|float The number we want to get the plural case for. Float numbers are floored.
|
||||
* @return int The plural-case we need to use for the number plural-rule combination
|
||||
*/
|
||||
function phpbb_get_plural_form($rule, $number)
|
||||
{
|
||||
$number = (int) $number;
|
||||
|
||||
if ($rule > 15 || $rule < 0)
|
||||
{
|
||||
trigger_error('INVALID_PLURAL_RULE');
|
||||
}
|
||||
|
||||
/**
|
||||
* The following plural rules are based on a list published by the Mozilla Developer Network
|
||||
* https://developer.mozilla.org/en/Localization_and_Plurals
|
||||
*/
|
||||
switch ($rule)
|
||||
{
|
||||
case 0:
|
||||
/**
|
||||
* Families: Asian (Chinese, Japanese, Korean, Vietnamese), Persian, Turkic/Altaic (Turkish), Thai, Lao
|
||||
* 1 - everything: 0, 1, 2, ...
|
||||
*/
|
||||
return 1;
|
||||
|
||||
case 1:
|
||||
/**
|
||||
* Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan)
|
||||
* 1 - 1
|
||||
* 2 - everything else: 0, 2, 3, ...
|
||||
*/
|
||||
return ($number == 1) ? 1 : 2;
|
||||
|
||||
case 2:
|
||||
/**
|
||||
* Families: Romanic (French, Brazilian Portuguese)
|
||||
* 1 - 0, 1
|
||||
* 2 - everything else: 2, 3, ...
|
||||
*/
|
||||
return (($number == 0) || ($number == 1)) ? 1 : 2;
|
||||
|
||||
case 3:
|
||||
/**
|
||||
* Families: Baltic (Latvian)
|
||||
* 1 - 0
|
||||
* 2 - ends in 1, not 11: 1, 21, ... 101, 121, ...
|
||||
* 3 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ...
|
||||
*/
|
||||
return ($number == 0) ? 1 : ((($number % 10 == 1) && ($number % 100 != 11)) ? 2 : 3);
|
||||
|
||||
case 4:
|
||||
/**
|
||||
* Families: Celtic (Scottish Gaelic)
|
||||
* 1 - is 1 or 11: 1, 11
|
||||
* 2 - is 2 or 12: 2, 12
|
||||
* 3 - others between 3 and 19: 3, 4, ... 10, 13, ... 18, 19
|
||||
* 4 - everything else: 0, 20, 21, ...
|
||||
*/
|
||||
return ($number == 1 || $number == 11) ? 1 : (($number == 2 || $number == 12) ? 2 : (($number >= 3 && $number <= 19) ? 3 : 4));
|
||||
|
||||
case 5:
|
||||
/**
|
||||
* Families: Romanic (Romanian)
|
||||
* 1 - 1
|
||||
* 2 - is 0 or ends in 01-19: 0, 2, 3, ... 19, 101, 102, ... 119, 201, ...
|
||||
* 3 - everything else: 20, 21, ...
|
||||
*/
|
||||
return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 2 : 3);
|
||||
|
||||
case 6:
|
||||
/**
|
||||
* Families: Baltic (Lithuanian)
|
||||
* 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ...
|
||||
* 2 - ends in 0 or ends in 10-20: 0, 10, 11, 12, ... 19, 20, 30, 40, ...
|
||||
* 3 - everything else: 2, 3, ... 8, 9, 22, 23, ... 29, 32, 33, ...
|
||||
*/
|
||||
return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 < 2) || (($number % 100 >= 10) && ($number % 100 < 20))) ? 2 : 3);
|
||||
|
||||
case 7:
|
||||
/**
|
||||
* Families: Slavic (Croatian, Serbian, Russian, Ukrainian)
|
||||
* 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ...
|
||||
* 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ...
|
||||
* 3 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ...
|
||||
*/
|
||||
return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 2 : 3);
|
||||
|
||||
case 8:
|
||||
/**
|
||||
* Families: Slavic (Slovak, Czech)
|
||||
* 1 - 1
|
||||
* 2 - 2, 3, 4
|
||||
* 3 - everything else: 0, 5, 6, 7, ...
|
||||
*/
|
||||
return ($number == 1) ? 1 : ((($number >= 2) && ($number <= 4)) ? 2 : 3);
|
||||
|
||||
case 9:
|
||||
/**
|
||||
* Families: Slavic (Polish)
|
||||
* 1 - 1
|
||||
* 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... 104, 122, ...
|
||||
* 3 - everything else: 0, 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ...
|
||||
*/
|
||||
return ($number == 1) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 2 : 3);
|
||||
|
||||
case 10:
|
||||
/**
|
||||
* Families: Slavic (Slovenian, Sorbian)
|
||||
* 1 - ends in 01: 1, 101, 201, ...
|
||||
* 2 - ends in 02: 2, 102, 202, ...
|
||||
* 3 - ends in 03-04: 3, 4, 103, 104, 203, 204, ...
|
||||
* 4 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, ...
|
||||
*/
|
||||
return ($number % 100 == 1) ? 1 : (($number % 100 == 2) ? 2 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 3 : 4));
|
||||
|
||||
case 11:
|
||||
/**
|
||||
* Families: Celtic (Irish Gaeilge)
|
||||
* 1 - 1
|
||||
* 2 - 2
|
||||
* 3 - is 3-6: 3, 4, 5, 6
|
||||
* 4 - is 7-10: 7, 8, 9, 10
|
||||
* 5 - everything else: 0, 11, 12, ...
|
||||
*/
|
||||
return ($number == 1) ? 1 : (($number == 2) ? 2 : (($number >= 3 && $number <= 6) ? 3 : (($number >= 7 && $number <= 10) ? 4 : 5)));
|
||||
|
||||
case 12:
|
||||
/**
|
||||
* Families: Semitic (Arabic)
|
||||
* 1 - 1
|
||||
* 2 - 2
|
||||
* 3 - ends in 03-10: 3, 4, ... 10, 103, 104, ... 110, 203, 204, ...
|
||||
* 4 - ends in 11-99: 11, ... 99, 111, 112, ...
|
||||
* 5 - everything else: 100, 101, 102, 200, 201, 202, ...
|
||||
* 6 - 0
|
||||
*/
|
||||
return ($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : (($number != 0) ? 5 : 6))));
|
||||
|
||||
case 13:
|
||||
/**
|
||||
* Families: Semitic (Maltese)
|
||||
* 1 - 1
|
||||
* 2 - is 0 or ends in 01-10: 0, 2, 3, ... 9, 10, 101, 102, ...
|
||||
* 3 - ends in 11-19: 11, 12, ... 18, 19, 111, 112, ...
|
||||
* 4 - everything else: 20, 21, ...
|
||||
*/
|
||||
return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 2 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 3 : 4));
|
||||
|
||||
case 14:
|
||||
/**
|
||||
* Families: Slavic (Macedonian)
|
||||
* 1 - ends in 1: 1, 11, 21, ...
|
||||
* 2 - ends in 2: 2, 12, 22, ...
|
||||
* 3 - everything else: 0, 3, 4, ... 10, 13, 14, ... 20, 23, ...
|
||||
*/
|
||||
return ($number % 10 == 1) ? 1 : (($number % 10 == 2) ? 2 : 3);
|
||||
|
||||
case 15:
|
||||
/**
|
||||
* Families: Icelandic
|
||||
* 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, 131, ...
|
||||
* 2 - everything else: 0, 2, 3, ... 10, 11, 12, ... 20, 22, ...
|
||||
*/
|
||||
return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Login using http authenticate.
|
||||
*
|
||||
|
|
|
@ -482,3 +482,22 @@ function phpbb_realpath($path)
|
|||
|
||||
return $phpbb_filesystem->realpath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine which plural form we should use.
|
||||
* For some languages this is not as simple as for English.
|
||||
*
|
||||
* @param $rule int ID of the plural rule we want to use, see http://wiki.phpbb.com/Plural_Rules#Plural_Rules
|
||||
* @param $number int|float The number we want to get the plural case for. Float numbers are floored.
|
||||
* @return int The plural-case we need to use for the number plural-rule combination
|
||||
*
|
||||
* @deprecated 3.2.0-dev (To be removed: 3.3.0)
|
||||
*/
|
||||
function phpbb_get_plural_form($rule, $number)
|
||||
{
|
||||
global $phpbb_container;
|
||||
|
||||
/** @var \phpbb\language\language $language */
|
||||
$language = $phpbb_container->get('language');
|
||||
return $language->get_plural_form($number, $rule);
|
||||
}
|
||||
|
|
|
@ -3384,7 +3384,7 @@ function get_group_name($group_id)
|
|||
$row = $db->sql_fetchrow($result);
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
if (!$row || ($row['group_type'] == GROUP_SPECIAL && empty($user->lang)))
|
||||
if (!$row || ($row['group_type'] == GROUP_SPECIAL && !$user->is_setup()))
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -241,7 +241,8 @@ $sub = $request->variable('sub', '');
|
|||
// Set PHP error handler to ours
|
||||
set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');
|
||||
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_service = new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx));
|
||||
$user = new \phpbb\user($lang_service, '\phpbb\datetime');
|
||||
$auth = new \phpbb\auth\auth();
|
||||
|
||||
// Add own hook handler, if present. :o
|
||||
|
@ -287,14 +288,15 @@ $twig_environment = new \phpbb\template\twig\environment(
|
|||
);
|
||||
|
||||
$phpbb_container->set('template.twig.environment', $twig_environment);
|
||||
$twig_context = new \phpbb\template\context();
|
||||
$template = new \phpbb\template\twig\twig(
|
||||
$phpbb_path_helper,
|
||||
$config,
|
||||
$user,
|
||||
new \phpbb\template\context(),
|
||||
$twig_context,
|
||||
$twig_environment,
|
||||
$cache_path,
|
||||
array($phpbb_container->get('template.twig.extensions.phpbb'))
|
||||
array(new \phpbb\template\twig\extension($twig_context, $user))
|
||||
);
|
||||
|
||||
$paths = array($phpbb_root_path . 'install/update/new/adm/style', $phpbb_admin_path . 'style');
|
||||
|
|
|
@ -195,7 +195,7 @@ abstract class captcha_abstract
|
|||
{
|
||||
global $config, $db, $user;
|
||||
|
||||
if (empty($user->lang))
|
||||
if (!$user->is_setup())
|
||||
{
|
||||
$user->setup();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?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\exception;
|
||||
|
||||
/**
|
||||
* Thrown when nonexistent plural rule is specified
|
||||
*/
|
||||
class invalid_plural_rule_exception extends language_exception
|
||||
{
|
||||
|
||||
}
|
22
phpBB/phpbb/language/exception/language_exception.php
Normal file
22
phpBB/phpbb/language/exception/language_exception.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?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\exception;
|
||||
|
||||
/**
|
||||
* Base exception class for language exceptions
|
||||
*/
|
||||
class language_exception extends \phpbb\exception\runtime_exception
|
||||
{
|
||||
|
||||
}
|
22
phpBB/phpbb/language/exception/language_file_not_found.php
Normal file
22
phpBB/phpbb/language/exception/language_file_not_found.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?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\exception;
|
||||
|
||||
/**
|
||||
* This exception is thrown when the language file is not found
|
||||
*/
|
||||
class language_file_not_found extends language_exception
|
||||
{
|
||||
|
||||
}
|
562
phpBB/phpbb/language/language.php
Normal file
562
phpBB/phpbb/language/language.php
Normal file
|
@ -0,0 +1,562 @@
|
|||
<?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\invalid_plural_rule_exception;
|
||||
|
||||
/**
|
||||
* Wrapper class for loading translations
|
||||
*/
|
||||
class language
|
||||
{
|
||||
/**
|
||||
* Global fallback language
|
||||
*
|
||||
* ISO code of the language to fallback to when the specified language entries
|
||||
* cannot be found.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const FALLBACK_LANGUAGE = 'en';
|
||||
|
||||
/**
|
||||
* @var array List of common language files
|
||||
*/
|
||||
protected $common_language_files;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $common_language_files_loaded;
|
||||
|
||||
/**
|
||||
* @var string ISO code of the default board language
|
||||
*/
|
||||
protected $default_language;
|
||||
|
||||
/**
|
||||
* @var string ISO code of the User's language
|
||||
*/
|
||||
protected $user_language;
|
||||
|
||||
/**
|
||||
* @var array Language fallback array (the order is important)
|
||||
*/
|
||||
protected $language_fallback;
|
||||
|
||||
/**
|
||||
* @var array Array of language variables
|
||||
*/
|
||||
protected $lang;
|
||||
|
||||
/**
|
||||
* @var array Loaded language sets
|
||||
*/
|
||||
protected $loaded_language_sets;
|
||||
|
||||
/**
|
||||
* @var \phpbb\language\language_file_loader Language file loader
|
||||
*/
|
||||
protected $loader;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param \phpbb\language\language_file_loader $loader Language file loader
|
||||
*/
|
||||
public function __construct(language_file_loader $loader)
|
||||
{
|
||||
$this->loader = $loader;
|
||||
|
||||
// Set up default information
|
||||
$this->user_language = false;
|
||||
$this->default_language = false;
|
||||
$this->lang = array(
|
||||
// For BC with user::help array
|
||||
'__help' => array(),
|
||||
);
|
||||
$this->loaded_language_sets = array(
|
||||
'core' => array(),
|
||||
'ext' => array(),
|
||||
);
|
||||
|
||||
// Common language files
|
||||
$this->common_language_files = array(
|
||||
'common',
|
||||
);
|
||||
$this->common_language_files_loaded = false;
|
||||
|
||||
$this->language_fallback = array(self::FALLBACK_LANGUAGE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to set user's language to display.
|
||||
*
|
||||
* @param string $user_lang_iso ISO code of the User's language
|
||||
*/
|
||||
public function set_user_language($user_lang_iso)
|
||||
{
|
||||
$this->user_language = $user_lang_iso;
|
||||
|
||||
$this->set_fallback_array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to set the board's default language to display.
|
||||
*
|
||||
* @param string $default_lang_iso ISO code of the board's default language
|
||||
*/
|
||||
public function set_default_language($default_lang_iso)
|
||||
{
|
||||
$this->default_language = $default_lang_iso;
|
||||
|
||||
$this->set_fallback_array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns language array
|
||||
*
|
||||
* Note: This function is needed for the BC purposes, until \phpbb\user::lang[] is
|
||||
* not removed.
|
||||
*
|
||||
* @return array Array of loaded language strings
|
||||
*/
|
||||
public function get_lang_array()
|
||||
{
|
||||
// Load common language files if they not loaded yet
|
||||
if (!$this->common_language_files_loaded)
|
||||
{
|
||||
$this->load_common_language_files();
|
||||
}
|
||||
|
||||
return $this->lang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Language Items
|
||||
*
|
||||
* Note: $use_help is assigned where needed (only use them to force inclusion).
|
||||
*
|
||||
* Examples:
|
||||
* <code>
|
||||
* $component = array('posting');
|
||||
* $component = array('posting', 'viewtopic')
|
||||
* $component = 'posting'
|
||||
* </code>
|
||||
*
|
||||
* @param string|array $component The name of the language component to load
|
||||
* @param string|null $extension_name Name of the extension to load component from, or null for core file
|
||||
*/
|
||||
public function add_lang($component, $extension_name = null)
|
||||
{
|
||||
// Load common language files if they not loaded yet
|
||||
// This needs to be here to correctly merge language arrays
|
||||
if (!$this->common_language_files_loaded)
|
||||
{
|
||||
$this->load_common_language_files();
|
||||
}
|
||||
|
||||
if (!is_array($component))
|
||||
{
|
||||
if (!is_null($extension_name))
|
||||
{
|
||||
$this->load_extension($extension_name, $component);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->load_core_file($component);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($component as $lang_file)
|
||||
{
|
||||
$this->add_lang($lang_file, $extension_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Advanced language substitution
|
||||
*
|
||||
* Function to mimic sprintf() with the possibility of using phpBB's language system to substitute nullar/singular/plural forms.
|
||||
* Params are the language key and the parameters to be substituted.
|
||||
* This function/functionality is inspired by SHS` and Ashe.
|
||||
*
|
||||
* Example call: <samp>$user->lang('NUM_POSTS_IN_QUEUE', 1);</samp>
|
||||
*
|
||||
* If the first parameter is an array, the elements are used as keys and subkeys to get the language entry:
|
||||
* Example: <samp>$user->lang(array('datetime', 'AGO'), 1)</samp> uses $user->lang['datetime']['AGO'] as language entry.
|
||||
*
|
||||
* @return string Return localized string or the language key if the translation is not available
|
||||
*/
|
||||
public function lang()
|
||||
{
|
||||
// Load common language files if they not loaded yet
|
||||
if (!$this->common_language_files_loaded)
|
||||
{
|
||||
$this->load_common_language_files();
|
||||
}
|
||||
|
||||
$args = func_get_args();
|
||||
$key = $args[0];
|
||||
|
||||
if (is_array($key))
|
||||
{
|
||||
$lang = &$this->lang[array_shift($key)];
|
||||
|
||||
foreach ($key as $_key)
|
||||
{
|
||||
$lang = &$lang[$_key];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$lang = &$this->lang[$key];
|
||||
}
|
||||
|
||||
// Return if language string does not exist
|
||||
if (!isset($lang) || (!is_string($lang) && !is_array($lang)))
|
||||
{
|
||||
return $key;
|
||||
}
|
||||
|
||||
// If the language entry is a string, we simply mimic sprintf() behaviour
|
||||
if (is_string($lang))
|
||||
{
|
||||
if (sizeof($args) == 1)
|
||||
{
|
||||
return $lang;
|
||||
}
|
||||
|
||||
// Replace key with language entry and simply pass along...
|
||||
$args[0] = $lang;
|
||||
return call_user_func_array('sprintf', $args);
|
||||
}
|
||||
else if (sizeof($lang) == 0)
|
||||
{
|
||||
// If the language entry is an empty array, we just return the language key
|
||||
return $args[0];
|
||||
}
|
||||
|
||||
// It is an array... now handle different nullar/singular/plural forms
|
||||
$key_found = false;
|
||||
|
||||
// We now get the first number passed and will select the key based upon this number
|
||||
for ($i = 1, $num_args = sizeof($args); $i < $num_args; $i++)
|
||||
{
|
||||
if (is_int($args[$i]) || is_float($args[$i]))
|
||||
{
|
||||
if ($args[$i] == 0 && isset($lang[0]))
|
||||
{
|
||||
// We allow each translation using plural forms to specify a version for the case of 0 things,
|
||||
// so that "0 users" may be displayed as "No users".
|
||||
$key_found = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$use_plural_form = $this->get_plural_form($args[$i]);
|
||||
if (isset($lang[$use_plural_form]))
|
||||
{
|
||||
// The key we should use exists, so we use it.
|
||||
$key_found = $use_plural_form;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the key we need to use does not exist, we fall back to the previous one.
|
||||
$numbers = array_keys($lang);
|
||||
|
||||
foreach ($numbers as $num)
|
||||
{
|
||||
if ($num > $use_plural_form)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
$key_found = $num;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ok, let's check if the key was found, else use the last entry (because it is mostly the plural form)
|
||||
if ($key_found === false)
|
||||
{
|
||||
$numbers = array_keys($lang);
|
||||
$key_found = end($numbers);
|
||||
}
|
||||
|
||||
// Use the language string we determined and pass it to sprintf()
|
||||
$args[0] = $lang[$key_found];
|
||||
return call_user_func_array('sprintf', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads common language files
|
||||
*/
|
||||
protected function load_common_language_files()
|
||||
{
|
||||
if (!$this->common_language_files_loaded)
|
||||
{
|
||||
foreach ($this->common_language_files as $lang_file)
|
||||
{
|
||||
$this->load_core_file($lang_file);
|
||||
}
|
||||
|
||||
$this->common_language_files_loaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine which plural form we should use.
|
||||
*
|
||||
* For some languages this is not as simple as for English.
|
||||
*
|
||||
* @param int|float $number The number we want to get the plural case for. Float numbers are floored.
|
||||
* @param int|bool $force_rule False to use the plural rule of the language package
|
||||
* or an integer to force a certain plural rule
|
||||
*
|
||||
* @return int The plural-case we need to use for the number plural-rule combination
|
||||
*
|
||||
* @throws \phpbb\language\exception\invalid_plural_rule_exception When $force_rule has an invalid value
|
||||
*/
|
||||
public function get_plural_form($number, $force_rule = false)
|
||||
{
|
||||
$number = (int) $number;
|
||||
$plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1);
|
||||
|
||||
if ($plural_rule > 15 || $plural_rule < 0)
|
||||
{
|
||||
throw new invalid_plural_rule_exception('INVALID_PLURAL_RULE', array(
|
||||
'plural_rule' => $plural_rule,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* The following plural rules are based on a list published by the Mozilla Developer Network
|
||||
* https://developer.mozilla.org/en/Localization_and_Plurals
|
||||
*/
|
||||
switch ($plural_rule)
|
||||
{
|
||||
case 0:
|
||||
/**
|
||||
* Families: Asian (Chinese, Japanese, Korean, Vietnamese), Persian, Turkic/Altaic (Turkish), Thai, Lao
|
||||
* 1 - everything: 0, 1, 2, ...
|
||||
*/
|
||||
return 1;
|
||||
|
||||
case 1:
|
||||
/**
|
||||
* Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan)
|
||||
* 1 - 1
|
||||
* 2 - everything else: 0, 2, 3, ...
|
||||
*/
|
||||
return ($number === 1) ? 1 : 2;
|
||||
|
||||
case 2:
|
||||
/**
|
||||
* Families: Romanic (French, Brazilian Portuguese)
|
||||
* 1 - 0, 1
|
||||
* 2 - everything else: 2, 3, ...
|
||||
*/
|
||||
return (($number === 0) || ($number === 1)) ? 1 : 2;
|
||||
|
||||
case 3:
|
||||
/**
|
||||
* Families: Baltic (Latvian)
|
||||
* 1 - 0
|
||||
* 2 - ends in 1, not 11: 1, 21, ... 101, 121, ...
|
||||
* 3 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ...
|
||||
*/
|
||||
return ($number === 0) ? 1 : ((($number % 10 === 1) && ($number % 100 != 11)) ? 2 : 3);
|
||||
|
||||
case 4:
|
||||
/**
|
||||
* Families: Celtic (Scottish Gaelic)
|
||||
* 1 - is 1 or 11: 1, 11
|
||||
* 2 - is 2 or 12: 2, 12
|
||||
* 3 - others between 3 and 19: 3, 4, ... 10, 13, ... 18, 19
|
||||
* 4 - everything else: 0, 20, 21, ...
|
||||
*/
|
||||
return ($number === 1 || $number === 11) ? 1 : (($number === 2 || $number === 12) ? 2 : (($number >= 3 && $number <= 19) ? 3 : 4));
|
||||
|
||||
case 5:
|
||||
/**
|
||||
* Families: Romanic (Romanian)
|
||||
* 1 - 1
|
||||
* 2 - is 0 or ends in 01-19: 0, 2, 3, ... 19, 101, 102, ... 119, 201, ...
|
||||
* 3 - everything else: 20, 21, ...
|
||||
*/
|
||||
return ($number === 1) ? 1 : ((($number === 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 2 : 3);
|
||||
|
||||
case 6:
|
||||
/**
|
||||
* Families: Baltic (Lithuanian)
|
||||
* 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ...
|
||||
* 2 - ends in 0 or ends in 10-20: 0, 10, 11, 12, ... 19, 20, 30, 40, ...
|
||||
* 3 - everything else: 2, 3, ... 8, 9, 22, 23, ... 29, 32, 33, ...
|
||||
*/
|
||||
return (($number % 10 === 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 < 2) || (($number % 100 >= 10) && ($number % 100 < 20))) ? 2 : 3);
|
||||
|
||||
case 7:
|
||||
/**
|
||||
* Families: Slavic (Croatian, Serbian, Russian, Ukrainian)
|
||||
* 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ...
|
||||
* 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ...
|
||||
* 3 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ...
|
||||
*/
|
||||
return (($number % 10 === 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 2 : 3);
|
||||
|
||||
case 8:
|
||||
/**
|
||||
* Families: Slavic (Slovak, Czech)
|
||||
* 1 - 1
|
||||
* 2 - 2, 3, 4
|
||||
* 3 - everything else: 0, 5, 6, 7, ...
|
||||
*/
|
||||
return ($number === 1) ? 1 : ((($number >= 2) && ($number <= 4)) ? 2 : 3);
|
||||
|
||||
case 9:
|
||||
/**
|
||||
* Families: Slavic (Polish)
|
||||
* 1 - 1
|
||||
* 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... 104, 122, ...
|
||||
* 3 - everything else: 0, 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ...
|
||||
*/
|
||||
return ($number === 1) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 2 : 3);
|
||||
|
||||
case 10:
|
||||
/**
|
||||
* Families: Slavic (Slovenian, Sorbian)
|
||||
* 1 - ends in 01: 1, 101, 201, ...
|
||||
* 2 - ends in 02: 2, 102, 202, ...
|
||||
* 3 - ends in 03-04: 3, 4, 103, 104, 203, 204, ...
|
||||
* 4 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, ...
|
||||
*/
|
||||
return ($number % 100 === 1) ? 1 : (($number % 100 === 2) ? 2 : ((($number % 100 === 3) || ($number % 100 === 4)) ? 3 : 4));
|
||||
|
||||
case 11:
|
||||
/**
|
||||
* Families: Celtic (Irish Gaeilge)
|
||||
* 1 - 1
|
||||
* 2 - 2
|
||||
* 3 - is 3-6: 3, 4, 5, 6
|
||||
* 4 - is 7-10: 7, 8, 9, 10
|
||||
* 5 - everything else: 0, 11, 12, ...
|
||||
*/
|
||||
return ($number === 1) ? 1 : (($number === 2) ? 2 : (($number >= 3 && $number <= 6) ? 3 : (($number >= 7 && $number <= 10) ? 4 : 5)));
|
||||
|
||||
case 12:
|
||||
/**
|
||||
* Families: Semitic (Arabic)
|
||||
* 1 - 1
|
||||
* 2 - 2
|
||||
* 3 - ends in 03-10: 3, 4, ... 10, 103, 104, ... 110, 203, 204, ...
|
||||
* 4 - ends in 11-99: 11, ... 99, 111, 112, ...
|
||||
* 5 - everything else: 100, 101, 102, 200, 201, 202, ...
|
||||
* 6 - 0
|
||||
*/
|
||||
return ($number === 1) ? 1 : (($number === 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : (($number != 0) ? 5 : 6))));
|
||||
|
||||
case 13:
|
||||
/**
|
||||
* Families: Semitic (Maltese)
|
||||
* 1 - 1
|
||||
* 2 - is 0 or ends in 01-10: 0, 2, 3, ... 9, 10, 101, 102, ...
|
||||
* 3 - ends in 11-19: 11, 12, ... 18, 19, 111, 112, ...
|
||||
* 4 - everything else: 20, 21, ...
|
||||
*/
|
||||
return ($number === 1) ? 1 : ((($number === 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 2 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 3 : 4));
|
||||
|
||||
case 14:
|
||||
/**
|
||||
* Families: Slavic (Macedonian)
|
||||
* 1 - ends in 1: 1, 11, 21, ...
|
||||
* 2 - ends in 2: 2, 12, 22, ...
|
||||
* 3 - everything else: 0, 3, 4, ... 10, 13, 14, ... 20, 23, ...
|
||||
*/
|
||||
return ($number % 10 === 1) ? 1 : (($number % 10 === 2) ? 2 : 3);
|
||||
|
||||
case 15:
|
||||
/**
|
||||
* Families: Icelandic
|
||||
* 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, 131, ...
|
||||
* 2 - everything else: 0, 2, 3, ... 10, 11, 12, ... 20, 22, ...
|
||||
*/
|
||||
return (($number % 10 === 1) && ($number % 100 != 11)) ? 1 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns language fallback data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function set_fallback_array()
|
||||
{
|
||||
$fallback_array = array();
|
||||
|
||||
if ($this->user_language !== false)
|
||||
{
|
||||
$fallback_array[] = $this->user_language;
|
||||
}
|
||||
|
||||
if ($this->default_language !== false)
|
||||
{
|
||||
$fallback_array[] = $this->default_language;
|
||||
}
|
||||
|
||||
$fallback_array[] = self::FALLBACK_LANGUAGE;
|
||||
|
||||
$this->language_fallback = $fallback_array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load core language file
|
||||
*
|
||||
* @param string $component Name of the component to load
|
||||
*/
|
||||
protected function load_core_file($component)
|
||||
{
|
||||
// Check if the component is already loaded
|
||||
if (isset($this->loaded_language_sets['core'][$component]))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$this->loader->load($component, $this->language_fallback, $this->lang);
|
||||
$this->loaded_language_sets['core'][$component] = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load extension language file
|
||||
*
|
||||
* @param string $extension_name Name of the extension to load language from
|
||||
* @param string $component Name of the component to load
|
||||
*/
|
||||
protected function load_extension($extension_name, $component)
|
||||
{
|
||||
// Check if the component is already loaded
|
||||
if (isset($this->loaded_language_sets['ext'][$extension_name][$component]))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$this->loader->load_extension($extension_name, $component, $this->language_fallback, $this->lang);
|
||||
$this->loaded_language_sets['ext'][$extension_name][$component] = true;
|
||||
}
|
||||
}
|
71
phpBB/phpbb/language/language_file_helper.php
Normal file
71
phpBB/phpbb/language/language_file_helper.php
Normal file
|
@ -0,0 +1,71 @@
|
|||
<?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 Symfony\Component\Finder\Finder;
|
||||
|
||||
/**
|
||||
* Helper class for language file related functions
|
||||
*/
|
||||
class language_file_helper
|
||||
{
|
||||
/**
|
||||
* @var string Path to phpBB's root
|
||||
*/
|
||||
protected $phpbb_root_path;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $phpbb_root_path Path to phpBB's root
|
||||
*/
|
||||
public function __construct($phpbb_root_path)
|
||||
{
|
||||
$this->phpbb_root_path = $phpbb_root_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns available languages
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_available_languages()
|
||||
{
|
||||
// Find available language packages
|
||||
$finder = new Finder();
|
||||
$finder->files()
|
||||
->name('iso.txt')
|
||||
->depth('== 1')
|
||||
->in($this->phpbb_root_path . 'language');
|
||||
|
||||
$available_languages = array();
|
||||
foreach ($finder as $file)
|
||||
{
|
||||
$path = $file->getRelativePath();
|
||||
$info = explode("\n", $file->getContents());
|
||||
|
||||
$available_languages[] = array(
|
||||
// Get the name of the directory containing iso.txt
|
||||
'iso' => $path,
|
||||
|
||||
// Recover data from file
|
||||
'name' => trim($info[0]),
|
||||
'local_name' => trim($info[1]),
|
||||
'author' => trim($info[2])
|
||||
);
|
||||
}
|
||||
|
||||
return $available_languages;
|
||||
}
|
||||
}
|
212
phpBB/phpbb/language/language_file_loader.php
Normal file
212
phpBB/phpbb/language/language_file_loader.php
Normal file
|
@ -0,0 +1,212 @@
|
|||
<?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 (sizeof($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 \phpbb\language\exception\language_file_not_exists When the path to the file cannot be resolved
|
||||
*/
|
||||
protected function get_language_file_path($path, $filename, $locales)
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
// BC code for language files with help
|
||||
$help = array();
|
||||
|
||||
// Do not suppress error if in DEBUG mode
|
||||
if (defined('DEBUG'))
|
||||
{
|
||||
include $path;
|
||||
}
|
||||
else
|
||||
{
|
||||
@include $path;
|
||||
}
|
||||
|
||||
if (!empty($help))
|
||||
{
|
||||
$lang['__help'] = array_merge($lang['__help'], $help);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,8 +21,11 @@ namespace phpbb;
|
|||
*/
|
||||
class user extends \phpbb\session
|
||||
{
|
||||
var $lang = array();
|
||||
var $help = array();
|
||||
/**
|
||||
* @var \phpbb\language\language
|
||||
*/
|
||||
protected $language;
|
||||
|
||||
var $style = array();
|
||||
var $date_format;
|
||||
|
||||
|
@ -42,35 +45,63 @@ class user extends \phpbb\session
|
|||
var $img_lang;
|
||||
var $img_array = array();
|
||||
|
||||
/** @var bool */
|
||||
protected $is_setup_flag;
|
||||
|
||||
// Able to add new options (up to id 31)
|
||||
var $keyoptions = array('viewimg' => 0, 'viewflash' => 1, 'viewsmilies' => 2, 'viewsigs' => 3, 'viewavatars' => 4, 'viewcensors' => 5, 'attachsig' => 6, 'bbcode' => 8, 'smilies' => 9, 'sig_bbcode' => 15, 'sig_smilies' => 16, 'sig_links' => 17);
|
||||
|
||||
/**
|
||||
* Constructor to set the lang path
|
||||
*
|
||||
* @param string $datetime_class Class name of datetime class
|
||||
* @param \phpbb\language\language $lang phpBB's Language loader
|
||||
*/
|
||||
function __construct($datetime_class)
|
||||
function __construct(\phpbb\language\language $lang, $datetime_class)
|
||||
{
|
||||
global $phpbb_root_path;
|
||||
|
||||
$this->lang_path = $phpbb_root_path . 'language/';
|
||||
$this->language = $lang;
|
||||
$this->datetime = $datetime_class;
|
||||
|
||||
$this->is_setup_flag = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to set custom language path (able to use directory outside of phpBB)
|
||||
* Returns whether user::setup was called
|
||||
*
|
||||
* @param string $lang_path New language path used.
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
function set_custom_lang_path($lang_path)
|
||||
public function is_setup()
|
||||
{
|
||||
$this->lang_path = $lang_path;
|
||||
|
||||
if (substr($this->lang_path, -1) != '/')
|
||||
{
|
||||
$this->lang_path .= '/';
|
||||
return $this->is_setup_flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic getter for BC compatibility
|
||||
*
|
||||
* Implement array access for user::lang.
|
||||
*
|
||||
* @param string $param_name Name of the BC component the user want to access
|
||||
*
|
||||
* @return array The appropriate array
|
||||
*
|
||||
* @deprecated 3.2.0-dev (To be removed: 4.0.0)
|
||||
*/
|
||||
public function __get($param_name)
|
||||
{
|
||||
if ($param_name === 'lang')
|
||||
{
|
||||
return $this->language->get_lang_array();
|
||||
}
|
||||
else if ($param_name === 'help')
|
||||
{
|
||||
$help_array = $this->language->get_lang_array();
|
||||
return $help_array['__help'];
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -81,6 +112,8 @@ class user extends \phpbb\session
|
|||
global $db, $request, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache;
|
||||
global $phpbb_dispatcher;
|
||||
|
||||
$this->language->set_default_language($config['default_lang']);
|
||||
|
||||
if ($this->data['user_id'] != ANONYMOUS)
|
||||
{
|
||||
$user_lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']);
|
||||
|
@ -98,6 +131,7 @@ class user extends \phpbb\session
|
|||
{
|
||||
$lang_override = $request->variable($config['cookie_name'] . '_lang', '', true, \phpbb\request\request_interface::COOKIE);
|
||||
}
|
||||
|
||||
if ($lang_override)
|
||||
{
|
||||
$use_lang = basename($lang_override);
|
||||
|
@ -108,6 +142,7 @@ class user extends \phpbb\session
|
|||
{
|
||||
$user_lang_name = basename($config['default_lang']);
|
||||
}
|
||||
|
||||
$user_date_format = $config['default_dateformat'];
|
||||
$user_timezone = $config['board_timezone'];
|
||||
|
||||
|
@ -187,6 +222,8 @@ class user extends \phpbb\session
|
|||
$this->lang_name = $user_lang_name;
|
||||
$this->date_format = $user_date_format;
|
||||
|
||||
$this->language->set_user_language($user_lang_name);
|
||||
|
||||
try
|
||||
{
|
||||
$this->timezone = new \DateTimeZone($user_timezone);
|
||||
|
@ -197,17 +234,6 @@ class user extends \phpbb\session
|
|||
$this->timezone = new \DateTimeZone('UTC');
|
||||
}
|
||||
|
||||
// We include common language file here to not load it every time a custom language file is included
|
||||
$lang = &$this->lang;
|
||||
|
||||
// Do not suppress error if in DEBUG mode
|
||||
$include_result = (defined('DEBUG')) ? (include $this->lang_path . $this->lang_name . "/common.$phpEx") : (@include $this->lang_path . $this->lang_name . "/common.$phpEx");
|
||||
|
||||
if ($include_result === false)
|
||||
{
|
||||
die('Language file ' . $this->lang_path . $this->lang_name . "/common.$phpEx" . " couldn't be opened.");
|
||||
}
|
||||
|
||||
$this->add_lang($lang_set);
|
||||
unset($lang_set);
|
||||
|
||||
|
@ -393,6 +419,8 @@ class user extends \phpbb\session
|
|||
}
|
||||
}
|
||||
|
||||
$this->is_setup_flag = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -406,103 +434,13 @@ class user extends \phpbb\session
|
|||
*
|
||||
* If the first parameter is an array, the elements are used as keys and subkeys to get the language entry:
|
||||
* Example: <samp>$user->lang(array('datetime', 'AGO'), 1)</samp> uses $user->lang['datetime']['AGO'] as language entry.
|
||||
*
|
||||
* @deprecated 3.2.0-dev (To be removed 4.0.0)
|
||||
*/
|
||||
function lang()
|
||||
{
|
||||
$args = func_get_args();
|
||||
$key = $args[0];
|
||||
|
||||
if (is_array($key))
|
||||
{
|
||||
$lang = &$this->lang[array_shift($key)];
|
||||
|
||||
foreach ($key as $_key)
|
||||
{
|
||||
$lang = &$lang[$_key];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$lang = &$this->lang[$key];
|
||||
}
|
||||
|
||||
// Return if language string does not exist
|
||||
if (!isset($lang) || (!is_string($lang) && !is_array($lang)))
|
||||
{
|
||||
return $key;
|
||||
}
|
||||
|
||||
// If the language entry is a string, we simply mimic sprintf() behaviour
|
||||
if (is_string($lang))
|
||||
{
|
||||
if (sizeof($args) == 1)
|
||||
{
|
||||
return $lang;
|
||||
}
|
||||
|
||||
// Replace key with language entry and simply pass along...
|
||||
$args[0] = $lang;
|
||||
return call_user_func_array('sprintf', $args);
|
||||
}
|
||||
else if (sizeof($lang) == 0)
|
||||
{
|
||||
// If the language entry is an empty array, we just return the language key
|
||||
return $args[0];
|
||||
}
|
||||
|
||||
// It is an array... now handle different nullar/singular/plural forms
|
||||
$key_found = false;
|
||||
|
||||
// We now get the first number passed and will select the key based upon this number
|
||||
for ($i = 1, $num_args = sizeof($args); $i < $num_args; $i++)
|
||||
{
|
||||
if (is_int($args[$i]) || is_float($args[$i]))
|
||||
{
|
||||
if ($args[$i] == 0 && isset($lang[0]))
|
||||
{
|
||||
// We allow each translation using plural forms to specify a version for the case of 0 things,
|
||||
// so that "0 users" may be displayed as "No users".
|
||||
$key_found = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
$use_plural_form = $this->get_plural_form($args[$i]);
|
||||
if (isset($lang[$use_plural_form]))
|
||||
{
|
||||
// The key we should use exists, so we use it.
|
||||
$key_found = $use_plural_form;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the key we need to use does not exist, we fall back to the previous one.
|
||||
$numbers = array_keys($lang);
|
||||
|
||||
foreach ($numbers as $num)
|
||||
{
|
||||
if ($num > $use_plural_form)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
$key_found = $num;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ok, let's check if the key was found, else use the last entry (because it is mostly the plural form)
|
||||
if ($key_found === false)
|
||||
{
|
||||
$numbers = array_keys($lang);
|
||||
$key_found = end($numbers);
|
||||
}
|
||||
|
||||
// Use the language string we determined and pass it to sprintf()
|
||||
$args[0] = $lang[$key_found];
|
||||
return call_user_func_array('sprintf', $args);
|
||||
return call_user_func_array(array($this->language, 'lang'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -512,24 +450,22 @@ class user extends \phpbb\session
|
|||
* @param $number int|float The number we want to get the plural case for. Float numbers are floored.
|
||||
* @param $force_rule mixed False to use the plural rule of the language package
|
||||
* or an integer to force a certain plural rule
|
||||
* @return int The plural-case we need to use for the number plural-rule combination
|
||||
* @return int|bool The plural-case we need to use for the number plural-rule combination, false if $force_rule
|
||||
* was invalid.
|
||||
*
|
||||
* @deprecated: 3.2.0-dev (To be removed: 3.3.0)
|
||||
*/
|
||||
function get_plural_form($number, $force_rule = false)
|
||||
{
|
||||
$number = (int) $number;
|
||||
|
||||
// Default to English system
|
||||
$plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1);
|
||||
|
||||
return phpbb_get_plural_form($plural_rule, $number);
|
||||
return $this->language->get_plural_form($number, $force_rule);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Language Items - use_db and use_help are assigned where needed (only use them to force inclusion)
|
||||
*
|
||||
* @param mixed $lang_set specifies the language entries to include
|
||||
* @param bool $use_db internal variable for recursion, do not use
|
||||
* @param bool $use_help internal variable for recursion, do not use
|
||||
* @param bool $use_db internal variable for recursion, do not use @deprecated 3.2.0-dev (To be removed: 3.3.0)
|
||||
* @param bool $use_help internal variable for recursion, do not use @deprecated 3.2.0-dev (To be removed: 3.3.0)
|
||||
* @param string $ext_name The extension to load language from, or empty for core files
|
||||
*
|
||||
* Examples:
|
||||
|
@ -540,11 +476,14 @@ class user extends \phpbb\session
|
|||
* $lang_set = 'posting'
|
||||
* $lang_set = array('help' => 'faq', 'db' => array('help:faq', 'posting'))
|
||||
* </code>
|
||||
*
|
||||
* Note: $use_db and $use_help should be removed. The old function was kept for BC purposes,
|
||||
* so the BC logic is handled here.
|
||||
*
|
||||
* @deprecated: 3.2.0-dev (To be removed: 3.3.0)
|
||||
*/
|
||||
function add_lang($lang_set, $use_db = false, $use_help = false, $ext_name = '')
|
||||
{
|
||||
global $phpEx;
|
||||
|
||||
if (is_array($lang_set))
|
||||
{
|
||||
foreach ($lang_set as $key => $lang_file)
|
||||
|
@ -555,6 +494,7 @@ class user extends \phpbb\session
|
|||
|
||||
if ($key == 'db')
|
||||
{
|
||||
// This is never used
|
||||
$this->add_lang($lang_file, true, $use_help, $ext_name);
|
||||
}
|
||||
else if ($key == 'help')
|
||||
|
@ -563,7 +503,7 @@ class user extends \phpbb\session
|
|||
}
|
||||
else if (!is_array($lang_file))
|
||||
{
|
||||
$this->set_lang($this->lang, $this->help, $lang_file, $use_db, $use_help, $ext_name);
|
||||
$this->set_lang($lang_file, $use_help, $ext_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -574,10 +514,39 @@ class user extends \phpbb\session
|
|||
}
|
||||
else if ($lang_set)
|
||||
{
|
||||
$this->set_lang($this->lang, $this->help, $lang_set, $use_db, $use_help, $ext_name);
|
||||
$this->set_lang($lang_set, $use_help, $ext_name);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* BC function for loading language files
|
||||
*
|
||||
* @deprecated 3.2.0-dev (To be removed: 3.3.0)
|
||||
*/
|
||||
private function set_lang($lang_set, $use_help, $ext_name)
|
||||
{
|
||||
if (empty($ext_name))
|
||||
{
|
||||
$ext_name = null;
|
||||
}
|
||||
|
||||
if ($use_help && strpos($lang_set, '/') !== false)
|
||||
{
|
||||
$component = dirname($lang_set) . '/help_' . basename($lang_set);
|
||||
|
||||
if ($component[0] === '/')
|
||||
{
|
||||
$component = substr($component, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$component = (($use_help) ? 'help_' : '') . $lang_set;
|
||||
}
|
||||
|
||||
$this->language->add_lang($component, $ext_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Language Items from an extension - use_db and use_help are assigned where needed (only use them to force inclusion)
|
||||
*
|
||||
|
@ -585,6 +554,10 @@ class user extends \phpbb\session
|
|||
* @param mixed $lang_set specifies the language entries to include
|
||||
* @param bool $use_db internal variable for recursion, do not use
|
||||
* @param bool $use_help internal variable for recursion, do not use
|
||||
*
|
||||
* Note: $use_db and $use_help should be removed. Kept for BC purposes.
|
||||
*
|
||||
* @deprecated: 3.2.0-dev (To be removed: 3.3.0)
|
||||
*/
|
||||
function add_lang_ext($ext_name, $lang_set, $use_db = false, $use_help = false)
|
||||
{
|
||||
|
@ -596,109 +569,6 @@ class user extends \phpbb\session
|
|||
$this->add_lang($lang_set, $use_db, $use_help, $ext_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set language entry (called by add_lang)
|
||||
* @access private
|
||||
*/
|
||||
function set_lang(&$lang, &$help, $lang_file, $use_db = false, $use_help = false, $ext_name = '')
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
// Make sure the language name is set (if the user setup did not happen it is not set)
|
||||
if (!$this->lang_name)
|
||||
{
|
||||
global $config;
|
||||
$this->lang_name = basename($config['default_lang']);
|
||||
}
|
||||
|
||||
// $lang == $this->lang
|
||||
// $help == $this->help
|
||||
// - add appropriate variables here, name them as they are used within the language file...
|
||||
if (!$use_db)
|
||||
{
|
||||
if ($use_help && strpos($lang_file, '/') !== false)
|
||||
{
|
||||
$filename = dirname($lang_file) . '/help_' . basename($lang_file);
|
||||
}
|
||||
else
|
||||
{
|
||||
$filename = (($use_help) ? 'help_' : '') . $lang_file;
|
||||
}
|
||||
|
||||
if ($ext_name)
|
||||
{
|
||||
global $phpbb_extension_manager;
|
||||
$ext_path = $phpbb_extension_manager->get_extension_path($ext_name, true);
|
||||
|
||||
$lang_path = $ext_path . 'language/';
|
||||
}
|
||||
else
|
||||
{
|
||||
$lang_path = $this->lang_path;
|
||||
}
|
||||
|
||||
if (strpos($phpbb_root_path . $filename, $lang_path . $this->lang_name . '/') === 0)
|
||||
{
|
||||
$language_filename = $phpbb_root_path . $filename;
|
||||
}
|
||||
else
|
||||
{
|
||||
$language_filename = $lang_path . $this->lang_name . '/' . $filename . '.' . $phpEx;
|
||||
}
|
||||
|
||||
// If we are in install, try to use the updated version, when available
|
||||
$install_language_filename = str_replace('language/', 'install/update/new/language/', $language_filename);
|
||||
if (defined('IN_INSTALL') && file_exists($install_language_filename))
|
||||
{
|
||||
$language_filename = $install_language_filename;
|
||||
}
|
||||
|
||||
if (!file_exists($language_filename))
|
||||
{
|
||||
global $config;
|
||||
|
||||
if ($this->lang_name == 'en')
|
||||
{
|
||||
// The user's selected language is missing the file, the board default's language is missing the file, and the file doesn't exist in /en.
|
||||
$language_filename = str_replace($lang_path . 'en', $lang_path . $this->data['user_lang'], $language_filename);
|
||||
trigger_error('Language file ' . $language_filename . ' couldn\'t be opened.', E_USER_ERROR);
|
||||
}
|
||||
else if ($this->lang_name == basename($config['default_lang']))
|
||||
{
|
||||
// Fall back to the English Language
|
||||
$reset_lang_name = $this->lang_name;
|
||||
$this->lang_name = 'en';
|
||||
$this->set_lang($lang, $help, $lang_file, $use_db, $use_help, $ext_name);
|
||||
$this->lang_name = $reset_lang_name;
|
||||
}
|
||||
else if ($this->lang_name == $this->data['user_lang'])
|
||||
{
|
||||
// Fall back to the board default language
|
||||
$reset_lang_name = $this->lang_name;
|
||||
$this->lang_name = basename($config['default_lang']);
|
||||
$this->set_lang($lang, $help, $lang_file, $use_db, $use_help, $ext_name);
|
||||
$this->lang_name = $reset_lang_name;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Do not suppress error if in DEBUG mode
|
||||
$include_result = (defined('DEBUG')) ? (include $language_filename) : (@include $language_filename);
|
||||
|
||||
if ($include_result === false)
|
||||
{
|
||||
trigger_error('Language file ' . $language_filename . ' couldn\'t be opened.', E_USER_ERROR);
|
||||
}
|
||||
}
|
||||
else if ($use_db)
|
||||
{
|
||||
// Get Database Language Strings
|
||||
// Put them into $lang if nothing is prefixed, put them into $help if help: is prefixed
|
||||
// For example: help:faq, posting
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Format user date
|
||||
*
|
||||
|
@ -808,7 +678,7 @@ class user extends \phpbb\session
|
|||
|
||||
if ($alt)
|
||||
{
|
||||
$alt = $this->lang($alt);
|
||||
$alt = $this->language->lang($alt);
|
||||
$title = ' title="' . $alt . '"';
|
||||
}
|
||||
return '<span class="imageset ' . $img . '"' . $title . '>' . $alt . '</span>';
|
||||
|
|
|
@ -28,8 +28,10 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case
|
|||
|
||||
$db = $this->new_dbal();
|
||||
$config = new \phpbb\config\config(array());
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$this->request = $this->getMock('\phpbb\request\request');
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$this->user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$driver_helper = new \phpbb\passwords\driver\helper($config);
|
||||
$passwords_drivers = array(
|
||||
'passwords.driver.bcrypt_2y' => new \phpbb\passwords\driver\bcrypt_2y($config, $driver_helper),
|
||||
|
|
|
@ -38,8 +38,10 @@ class phpbb_auth_provider_db_test extends phpbb_database_test_case
|
|||
'ip_login_limit_use_forwarded' => 0,
|
||||
'max_login_attempts' => 0,
|
||||
));
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$driver_helper = new \phpbb\passwords\driver\helper($config);
|
||||
$passwords_drivers = array(
|
||||
'passwords.driver.bcrypt_2y' => new \phpbb\passwords\driver\bcrypt_2y($config, $driver_helper),
|
||||
|
|
|
@ -31,7 +31,9 @@ class phpbb_auth_provider_oauth_token_storage_test extends phpbb_database_test_c
|
|||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$this->user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$this->service_name = 'auth.provider.oauth.service.testing';
|
||||
$this->token_storage_table = 'phpbb_oauth_tokens';
|
||||
|
||||
|
|
|
@ -94,7 +94,9 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case
|
|||
// Set up avatar manager
|
||||
$this->manager = new \phpbb\avatar\manager($this->config, $avatar_drivers, $phpbb_container);
|
||||
$this->db = $this->new_dbal();
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$this->user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
}
|
||||
|
||||
protected function avatar_drivers()
|
||||
|
@ -277,7 +279,12 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case
|
|||
|
||||
public function test_localize_errors()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime')
|
||||
);
|
||||
$lang_array = array(
|
||||
array('FOOBAR_OFF', 'foobar_off'),
|
||||
array('FOOBAR_EXPLAIN', 'FOOBAR_EXPLAIN %s'),
|
||||
|
|
7
tests/console/cache/purge_test.php
vendored
7
tests/console/cache/purge_test.php
vendored
|
@ -32,6 +32,8 @@ class phpbb_console_command_cache_purge_test extends phpbb_test_case
|
|||
|
||||
protected function setUp()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
if (file_exists($this->cache_dir))
|
||||
{
|
||||
// cache directory possibly left after aborted
|
||||
|
@ -45,7 +47,10 @@ class phpbb_console_command_cache_purge_test extends phpbb_test_case
|
|||
$this->db = $this->getMock('\phpbb\db\driver\driver_interface');
|
||||
|
||||
$this->config = new \phpbb\config\config(array('assets_version' => 1));
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime')
|
||||
);
|
||||
}
|
||||
|
||||
public function test_purge()
|
||||
|
|
|
@ -22,9 +22,14 @@ class phpbb_console_command_config_test extends phpbb_test_case
|
|||
|
||||
public function setUp()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$this->config = new \phpbb\config\config(array());
|
||||
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime')
|
||||
);
|
||||
$this->user->method('lang')->will($this->returnArgument(0));
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,12 @@ class phpbb_console_command_cron_list_test extends phpbb_test_case
|
|||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$this->user->method('lang')->will($this->returnArgument(0));
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,10 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case
|
|||
$config = $this->config = new \phpbb\config\config(array('cron_lock' => '0'));
|
||||
$this->lock = new \phpbb\lock\db('cron_lock', $this->config, $this->db);
|
||||
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$this->user->method('lang')->will($this->returnArgument(0));
|
||||
|
||||
$this->task = new phpbb_cron_task_simple();
|
||||
|
|
|
@ -309,7 +309,9 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case
|
|||
->will($this->returnValueMap(array(
|
||||
array('m_approve', 1, true),
|
||||
)));
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
|
||||
|
|
|
@ -134,7 +134,9 @@ class phpbb_content_visibility_get_forums_visibility_sql_test extends phpbb_data
|
|||
->method('acl_getf')
|
||||
->with($this->stringContains('_'), $this->anything())
|
||||
->will($this->returnValueMap($permissions));
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$config = new phpbb\config\config(array());
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$content_visibility = new \phpbb\content_visibility($auth, $config, $phpbb_dispatcher, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE);
|
||||
|
|
|
@ -134,7 +134,9 @@ class phpbb_content_visibility_get_global_visibility_sql_test extends phpbb_data
|
|||
->method('acl_getf')
|
||||
->with($this->stringContains('_'), $this->anything())
|
||||
->will($this->returnValueMap($permissions));
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$config = new phpbb\config\config(array());
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$content_visibility = new \phpbb\content_visibility($auth, $config, $phpbb_dispatcher, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE);
|
||||
|
|
|
@ -81,7 +81,9 @@ class phpbb_content_visibility_get_visibility_sql_test extends phpbb_database_te
|
|||
->method('acl_get')
|
||||
->with($this->stringContains('_'), $this->anything())
|
||||
->will($this->returnValueMap($permissions));
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$config = new phpbb\config\config(array());
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$content_visibility = new \phpbb\content_visibility($auth, $config, $phpbb_dispatcher, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE);
|
||||
|
|
|
@ -124,7 +124,9 @@ class phpbb_content_visibility_set_post_visibility_test extends phpbb_database_t
|
|||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$config = new phpbb\config\config(array());
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$content_visibility = new \phpbb\content_visibility($auth, $config, $phpbb_dispatcher, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE);
|
||||
|
@ -175,7 +177,9 @@ class phpbb_content_visibility_set_post_visibility_test extends phpbb_database_t
|
|||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$config = new phpbb\config\config(array());
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$content_visibility = new \phpbb\content_visibility($auth, $config, $phpbb_dispatcher, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE);
|
||||
|
|
|
@ -88,7 +88,9 @@ class phpbb_content_visibility_set_topic_visibility_test extends phpbb_database_
|
|||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$config = new phpbb\config\config(array());
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$content_visibility = new \phpbb\content_visibility($auth, $config, $phpbb_dispatcher, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE);
|
||||
|
|
|
@ -84,7 +84,9 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
|
|||
);
|
||||
|
||||
$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0'));
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$this->user = new \phpbb\user($lang, '\phpbb\datetime');;
|
||||
|
||||
$container = new phpbb_mock_container_builder();
|
||||
$cache_path = $phpbb_root_path . 'cache/twig';
|
||||
|
|
|
@ -37,7 +37,11 @@ class phpbb_datetime_from_format_test extends phpbb_test_case
|
|||
*/
|
||||
public function test_from_format($timezone, $format, $expected)
|
||||
{
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->timezone = new DateTimeZone($timezone);
|
||||
$user->lang['datetime'] = array(
|
||||
'TODAY' => 'Today',
|
||||
|
@ -107,7 +111,11 @@ class phpbb_datetime_from_format_test extends phpbb_test_case
|
|||
*/
|
||||
public function test_relative_format_date($timestamp, $forcedate, $expected)
|
||||
{
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->timezone = new DateTimeZone('UTC');
|
||||
$user->lang['datetime'] = array(
|
||||
'TODAY' => 'Today',
|
||||
|
|
|
@ -32,7 +32,9 @@ class phpbb_dbal_migrator_tool_module_test extends phpbb_database_test_case
|
|||
|
||||
$db = $this->db = $this->new_dbal();
|
||||
$this->cache = new \phpbb\cache\service(new \phpbb\cache\driver\null(), new \phpbb\config\config(array()), $this->db, $phpbb_root_path, $phpEx);
|
||||
$user = $this->user = new \phpbb\user('\phpbb\user');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = $this->user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
|
|
|
@ -79,7 +79,11 @@ class exception_listener extends phpbb_test_case
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->add_lang('common');
|
||||
|
||||
$exception_listener = new \phpbb\event\kernel_exception_subscriber($template, $user);
|
||||
|
|
|
@ -45,7 +45,6 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
|||
$this->db_tools = $factory->get($this->db);
|
||||
$this->phpbb_root_path = dirname(__FILE__) . '/';
|
||||
$this->phpEx = 'php';
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$this->table_prefix = 'phpbb_';
|
||||
|
||||
$container = new phpbb_mock_container_builder();
|
||||
|
@ -75,8 +74,6 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
|||
'autoescape' => false,
|
||||
)
|
||||
);
|
||||
$this->template = new phpbb\template\twig\twig($phpbb_path_helper, $this->config, $this->user, $context, $twig, $cache_path, array(new \phpbb\template\twig\extension($context, $this->user)));
|
||||
$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig));
|
||||
|
||||
$container = new phpbb_mock_container_builder();
|
||||
|
||||
|
@ -104,6 +101,16 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
|||
$this->phpEx,
|
||||
$this->cache
|
||||
);
|
||||
|
||||
global $phpbb_root_path;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $this->phpEx);
|
||||
$lang_loader->set_extension_manager($this->extension_manager);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$this->user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
|
||||
$this->template = new phpbb\template\twig\twig($phpbb_path_helper, $this->config, $this->user, $context, $twig, $cache_path, array(new \phpbb\template\twig\extension($context, $this->user)));
|
||||
$container->set('template.twig.lexer', new \phpbb\template\twig\lexer($twig));
|
||||
}
|
||||
|
||||
// Should fail from missing composer.json
|
||||
|
@ -262,7 +269,6 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
|||
catch (\phpbb\extension\exception $e)
|
||||
{
|
||||
$message = call_user_func_array(array($this->user, 'lang'), array_merge(array($e->getMessage()), $e->get_parameters()));
|
||||
$this->fail($message);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,12 @@ class phpbb_generate_string_list_test extends phpbb_test_case
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$this->user = $user;
|
||||
$this->user->data = array('user_lang' => 'en');
|
||||
$this->user->add_lang('common');
|
||||
}
|
||||
|
|
|
@ -33,11 +33,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_get_group_value($group_id, $expected, $throws_exception)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
if ($throws_exception)
|
||||
|
@ -51,11 +53,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
|
||||
public function test_get_group_count()
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\legend($db, $user);
|
||||
|
@ -91,11 +95,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_add_group($group_id, $expected_added, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\legend($db, $user);
|
||||
|
@ -179,11 +185,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_delete_group($group_id, $skip_group, $expected_deleted, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\legend($db, $user);
|
||||
|
@ -234,11 +242,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_move_up($group_id, $excepted_moved, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\legend($db, $user);
|
||||
|
@ -289,11 +299,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_move_down($group_id, $excepted_moved, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\legend($db, $user);
|
||||
|
@ -387,11 +399,13 @@ class phpbb_groupposition_legend_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_move($group_id, $increment, $excepted_moved, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\legend($db, $user);
|
||||
|
|
|
@ -35,11 +35,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_get_group_value($group_id, $expected, $throws_exception)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
if ($throws_exception)
|
||||
|
@ -53,11 +55,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
|
||||
public function test_get_group_count()
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
@ -137,11 +141,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_add_group_teampage($group_id, $parent_id, $expected_added, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
@ -180,11 +186,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_add_category_teampage($group_name, $expected_added, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
@ -247,11 +255,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_delete_group($group_id, $expected_deleted, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
@ -299,11 +309,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_delete_teampage($teampage_id, $expected_deleted, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
@ -462,11 +474,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_move($group_id, $move_delta, $excepted_moved, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
@ -625,11 +639,13 @@ class phpbb_groupposition_teampage_test extends phpbb_database_test_case
|
|||
*/
|
||||
public function test_move_teampage($teampage_id, $move_delta, $excepted_moved, $expected)
|
||||
{
|
||||
global $cache;
|
||||
global $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$db = $this->new_dbal();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = array();
|
||||
|
||||
$test_class = new \phpbb\groupposition\teampage($db, $user, $cache);
|
||||
|
|
210
tests/language/language_test.php
Normal file
210
tests/language/language_test.php
Normal file
|
@ -0,0 +1,210 @@
|
|||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_language_test extends phpbb_test_case
|
||||
{
|
||||
/** @var \phpbb\language\language */
|
||||
protected $lang;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
// Set up language service
|
||||
$this->lang = new \phpbb\language\language(
|
||||
new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)
|
||||
);
|
||||
|
||||
// Set up language data for testing
|
||||
$reflection_class = new ReflectionClass('\phpbb\language\language');
|
||||
|
||||
// Set default language files loaded flag to true
|
||||
$loaded_flag = $reflection_class->getProperty('common_language_files_loaded');
|
||||
$loaded_flag->setAccessible(true);
|
||||
$loaded_flag->setValue($this->lang, true);
|
||||
|
||||
// Set up test language data
|
||||
$lang_array = $reflection_class->getProperty('lang');
|
||||
$lang_array->setAccessible(true);
|
||||
$lang_array->setValue($this->lang, $this->get_test_data_set());
|
||||
}
|
||||
|
||||
public function test_lang()
|
||||
{
|
||||
// No param
|
||||
$this->assertEquals($this->lang->lang('FOO'), 'BAR');
|
||||
$this->assertEquals($this->lang->lang('EMPTY'), '');
|
||||
$this->assertEquals($this->lang->lang('ZERO'), '0');
|
||||
|
||||
// Invalid index
|
||||
$this->assertEquals($this->lang->lang('VOID'), 'VOID');
|
||||
|
||||
// Unnecessary param
|
||||
$this->assertEquals($this->lang->lang('FOO', 2), 'BAR');
|
||||
$this->assertEquals($this->lang->lang('FOO', 2, 3), 'BAR');
|
||||
$this->assertEquals($this->lang->lang('FOO', 2, 3, 'BARZ'), 'BAR');
|
||||
|
||||
// String
|
||||
$this->assertEquals($this->lang->lang('STR', 24, 'x', 42), '24 x, 42 topics');
|
||||
$this->assertEquals($this->lang->lang('STR2', 64), '64 foos');
|
||||
|
||||
// Array
|
||||
$this->assertEquals($this->lang->lang('ARRY', 0), 'No posts');
|
||||
$this->assertEquals($this->lang->lang('ARRY', 1), '1 post');
|
||||
$this->assertEquals($this->lang->lang('ARRY', 2), '2 posts');
|
||||
$this->assertEquals($this->lang->lang('ARRY', 123), '123 posts');
|
||||
|
||||
// Empty array returns the language key
|
||||
$this->assertEquals($this->lang->lang('ARRY_EMPTY', 123), 'ARRY_EMPTY');
|
||||
|
||||
// No 0 key defined
|
||||
$this->assertEquals($this->lang->lang('ARRY_NO_ZERO', 0), '0 posts');
|
||||
$this->assertEquals($this->lang->lang('ARRY_NO_ZERO', 1), '1 post');
|
||||
$this->assertEquals($this->lang->lang('ARRY_NO_ZERO', 2), '2 posts');
|
||||
|
||||
// Array with missing keys
|
||||
$this->assertEquals($this->lang->lang('ARRY_MISSING', 2), '2 post');
|
||||
|
||||
// Floats as array key
|
||||
$this->assertEquals($this->lang->lang('ARRY_FLOAT', 1.3), '1 post');
|
||||
$this->assertEquals($this->lang->lang('ARRY_FLOAT', 2.0), '2.0 posts');
|
||||
$this->assertEquals($this->lang->lang('ARRY_FLOAT', 2.51), '2.5 posts');
|
||||
|
||||
// Use sub key, if first paramenter is an array
|
||||
$this->assertEquals($this->lang->lang(array('dateformat', 'AGO'), 2), '2 seconds');
|
||||
|
||||
// ticket PHPBB3-9949 - use first int to determinate the plural-form to use
|
||||
$this->assertEquals($this->lang->lang('ARRY', 1, 2), '1 post');
|
||||
$this->assertEquals($this->lang->lang('ARRY', 1, 's', 2), '1 post');
|
||||
}
|
||||
|
||||
public function test_lang_plural_rules()
|
||||
{
|
||||
$this->assertEquals($this->lang->lang('PLURAL_ARRY', 0), '0 is 0');
|
||||
$this->assertEquals($this->lang->lang('PLURAL_ARRY', 1), '1 is 1');
|
||||
$this->assertEquals($this->lang->lang('PLURAL_ARRY', 103), '103 ends with 01-10');
|
||||
$this->assertEquals($this->lang->lang('PLURAL_ARRY', 15), '15 ends with 11-19');
|
||||
$this->assertEquals($this->lang->lang('PLURAL_ARRY', 300), '300 is part of the last rule');
|
||||
}
|
||||
|
||||
public function test_lang_bc()
|
||||
{
|
||||
$user = new \phpbb\user($this->lang, '\phpbb\datetime');
|
||||
|
||||
// Test lang array access
|
||||
$this->assertEquals($user->lang['FOO'], 'BAR');
|
||||
|
||||
// No param
|
||||
$this->assertEquals($user->lang('FOO'), 'BAR');
|
||||
$this->assertEquals($user->lang('EMPTY'), '');
|
||||
$this->assertEquals($user->lang('ZERO'), '0');
|
||||
|
||||
// Invalid index
|
||||
$this->assertEquals($user->lang('VOID'), 'VOID');
|
||||
|
||||
// Unnecessary param
|
||||
$this->assertEquals($user->lang('FOO', 2), 'BAR');
|
||||
$this->assertEquals($user->lang('FOO', 2, 3), 'BAR');
|
||||
$this->assertEquals($user->lang('FOO', 2, 3, 'BARZ'), 'BAR');
|
||||
|
||||
// String
|
||||
$this->assertEquals($user->lang('STR', 24, 'x', 42), '24 x, 42 topics');
|
||||
$this->assertEquals($user->lang('STR2', 64), '64 foos');
|
||||
|
||||
// Array
|
||||
$this->assertEquals($user->lang('ARRY', 0), 'No posts');
|
||||
$this->assertEquals($user->lang('ARRY', 1), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY', 2), '2 posts');
|
||||
$this->assertEquals($user->lang('ARRY', 123), '123 posts');
|
||||
|
||||
// Empty array returns the language key
|
||||
$this->assertEquals($user->lang('ARRY_EMPTY', 123), 'ARRY_EMPTY');
|
||||
|
||||
// No 0 key defined
|
||||
$this->assertEquals($user->lang('ARRY_NO_ZERO', 0), '0 posts');
|
||||
$this->assertEquals($user->lang('ARRY_NO_ZERO', 1), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY_NO_ZERO', 2), '2 posts');
|
||||
|
||||
// Array with missing keys
|
||||
$this->assertEquals($user->lang('ARRY_MISSING', 2), '2 post');
|
||||
|
||||
// Floats as array key
|
||||
$this->assertEquals($user->lang('ARRY_FLOAT', 1.3), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY_FLOAT', 2.0), '2.0 posts');
|
||||
$this->assertEquals($user->lang('ARRY_FLOAT', 2.51), '2.5 posts');
|
||||
|
||||
// Use sub key, if first paramenter is an array
|
||||
$this->assertEquals($user->lang(array('dateformat', 'AGO'), 2), '2 seconds');
|
||||
|
||||
// ticket PHPBB3-9949 - use first int to determinate the plural-form to use
|
||||
$this->assertEquals($user->lang('ARRY', 1, 2), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY', 1, 's', 2), '1 post');
|
||||
}
|
||||
|
||||
public function test_lang_plural_rules_bc()
|
||||
{
|
||||
$user = new \phpbb\user($this->lang, '\phpbb\datetime');
|
||||
|
||||
// ticket PHPBB3-10345 - different plural rules, not just 0/1/2+
|
||||
$this->assertEquals($user->lang('PLURAL_ARRY', 0), '0 is 0');
|
||||
$this->assertEquals($user->lang('PLURAL_ARRY', 1), '1 is 1');
|
||||
$this->assertEquals($user->lang('PLURAL_ARRY', 103), '103 ends with 01-10');
|
||||
$this->assertEquals($user->lang('PLURAL_ARRY', 15), '15 ends with 11-19');
|
||||
$this->assertEquals($user->lang('PLURAL_ARRY', 300), '300 is part of the last rule');
|
||||
}
|
||||
|
||||
protected function get_test_data_set()
|
||||
{
|
||||
return array(
|
||||
'FOO' => 'BAR',
|
||||
'BARZ' => 'PENG',
|
||||
'EMPTY' => '',
|
||||
'ZERO' => '0',
|
||||
'STR' => '%d %s, %d topics',
|
||||
'STR2' => '%d foos',
|
||||
'ARRY' => array(
|
||||
0 => 'No posts', // 0
|
||||
1 => '1 post', // 1
|
||||
2 => '%d posts', // 2+
|
||||
),
|
||||
'ARRY_NO_ZERO' => array(
|
||||
1 => '1 post', // 1
|
||||
2 => '%d posts', // 0, 2+
|
||||
),
|
||||
'ARRY_MISSING' => array(
|
||||
1 => '%d post', // 1
|
||||
//Missing second plural
|
||||
),
|
||||
'ARRY_FLOAT' => array(
|
||||
1 => '1 post', // 1.x
|
||||
2 => '%1$.1f posts', // 0.x, 2+.x
|
||||
),
|
||||
'ARRY_EMPTY' => array(
|
||||
),
|
||||
'dateformat' => array(
|
||||
'AGO' => array(
|
||||
1 => '%d second',
|
||||
2 => '%d seconds',
|
||||
),
|
||||
),
|
||||
'PLURAL_RULE' => 13,
|
||||
'PLURAL_ARRY' => array(
|
||||
0 => '%d is 0', // 0
|
||||
1 => '%d is 1', // 1
|
||||
2 => '%d ends with 01-10', // ending with 01-10
|
||||
3 => '%d ends with 11-19', // ending with 11-19
|
||||
4 => '%d is part of the last rule', // everything else
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -27,7 +27,9 @@ class phpbb_log_add_test extends phpbb_database_test_case
|
|||
$db = $this->new_dbal();
|
||||
$cache = new phpbb_mock_cache;
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
|
||||
$log = new \phpbb\log\log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
|
||||
|
@ -56,7 +58,9 @@ class phpbb_log_add_test extends phpbb_database_test_case
|
|||
$db = $this->new_dbal();
|
||||
$cache = new phpbb_mock_cache;
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
|
||||
$log = new \phpbb\log\log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
|
||||
|
|
|
@ -30,7 +30,9 @@ class phpbb_log_delete_test extends phpbb_database_test_case
|
|||
|
||||
$db = $this->new_dbal();
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->data['user_id'] = 1;
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
|
||||
|
|
|
@ -161,7 +161,10 @@ class phpbb_log_function_add_log_test extends phpbb_database_test_case
|
|||
$db = $this->new_dbal();
|
||||
$cache = new phpbb_mock_cache;
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
|
||||
$phpbb_log = new \phpbb\log\log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
|
||||
|
|
|
@ -56,7 +56,10 @@ abstract class phpbb_tests_notification_base extends phpbb_database_test_case
|
|||
'allow_topic_notify' => true,
|
||||
'allow_forum_notify' => true,
|
||||
));
|
||||
$user = $this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$this->user = $user;
|
||||
$this->user_loader = new \phpbb\user_loader($this->db, $phpbb_root_path, $phpEx, 'phpbb_users');
|
||||
$auth = $this->auth = new phpbb_mock_notifications_auth();
|
||||
$cache = $this->cache = new \phpbb\cache\service(
|
||||
|
|
|
@ -83,7 +83,10 @@ abstract class phpbb_notification_submit_post_base extends phpbb_database_test_c
|
|||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
|
||||
// User
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$user->ip = '';
|
||||
$user->data = array(
|
||||
'user_id' => 2,
|
||||
|
|
|
@ -51,7 +51,9 @@ class phpbb_notification_user_list_trim_test extends phpbb_database_test_case
|
|||
array('u_viewprofile', 1, false),
|
||||
)));
|
||||
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->data = array('user_lang' => 'en');
|
||||
$user->add_lang('common');
|
||||
|
||||
|
|
|
@ -26,10 +26,13 @@ class phpbb_pagination_pagination_test extends phpbb_template_template_test_case
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
global $phpbb_dispatcher;
|
||||
global $phpbb_dispatcher, $phpbb_root_path, $phpEx;
|
||||
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$this->user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
|
|
@ -34,6 +34,10 @@ class phpbb_plupload_test extends phpbb_test_case
|
|||
*/
|
||||
public function test_generate_resize_string($config_width, $config_height, $expected)
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang = new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx));
|
||||
|
||||
$config = new \phpbb\config\config(array(
|
||||
'img_max_width' => $config_width,
|
||||
'img_max_height' => $config_height,
|
||||
|
@ -43,7 +47,7 @@ class phpbb_plupload_test extends phpbb_test_case
|
|||
'',
|
||||
$config,
|
||||
new phpbb_mock_request,
|
||||
new \phpbb\user('\phpbb\datetime'),
|
||||
new \phpbb\user($lang, '\phpbb\datetime'),
|
||||
new \phpbb\php\ini,
|
||||
new \phpbb\mimetype\guesser(array(new \phpbb\mimetype\extension_guesser))
|
||||
);
|
||||
|
|
|
@ -25,7 +25,12 @@ class phpbb_profilefield_type_bool_test extends phpbb_test_case
|
|||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
|
|
@ -25,7 +25,12 @@ class phpbb_profilefield_type_date_test extends phpbb_test_case
|
|||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$this->user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$this->user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
|
|
@ -25,7 +25,12 @@ class phpbb_profilefield_type_dropdown_test extends phpbb_test_case
|
|||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
|
|
@ -21,7 +21,11 @@ class phpbb_profilefield_type_googleplus_test extends phpbb_test_case
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->add_lang('ucp');
|
||||
$request = $this->getMock('\phpbb\request\request');
|
||||
$template = $this->getMock('\phpbb\template\template');
|
||||
|
|
|
@ -24,7 +24,12 @@ class phpbb_profilefield_type_int_test extends phpbb_test_case
|
|||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
|
|
@ -28,9 +28,12 @@ class phpbb_profilefield_type_string_test extends phpbb_test_case
|
|||
*/
|
||||
public function setUp()
|
||||
{
|
||||
global $request, $user, $cache;
|
||||
global $request, $user, $cache, $phpbb_root_path, $phpEx;
|
||||
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$cache = new phpbb_mock_cache;
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
|
|
|
@ -26,7 +26,12 @@ class phpbb_profilefield_type_url_test extends phpbb_test_case
|
|||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$user->expects($this->any())
|
||||
->method('lang')
|
||||
->will($this->returnCallback(array($this, 'return_callback_implode')));
|
||||
|
|
|
@ -49,7 +49,9 @@ abstract class phpbb_security_test_base extends phpbb_test_case
|
|||
$phpbb_filesystem = new \phpbb\filesystem\filesystem();
|
||||
|
||||
// Set no user and trick a bit to circumvent errors
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->lang = true;
|
||||
$user->browser = $this->server['HTTP_USER_AGENT'];
|
||||
$user->referer = '';
|
||||
|
|
|
@ -28,7 +28,10 @@ class phpbb_template_allfolder_test extends phpbb_template_template_test_case
|
|||
|
||||
$defaults = $this->config_defaults();
|
||||
$config = new \phpbb\config\config(array_merge($defaults, $new_config));
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$this->user = $user;
|
||||
|
||||
$path_helper = new \phpbb\path_helper(
|
||||
new \phpbb\symfony_request(
|
||||
|
|
|
@ -15,6 +15,7 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
|||
|
||||
class phpbb_template_template_test_case extends phpbb_test_case
|
||||
{
|
||||
protected $lang;
|
||||
protected $template;
|
||||
protected $template_path;
|
||||
protected $user;
|
||||
|
@ -24,6 +25,17 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
|||
// Keep the contents of the cache for debugging?
|
||||
const PRESERVE_CACHE = true;
|
||||
|
||||
static protected $language_reflection_lang;
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
$reflection = new ReflectionClass('\phpbb\language\language');
|
||||
self::$language_reflection_lang = $reflection->getProperty('lang');
|
||||
self::$language_reflection_lang->setAccessible(true);
|
||||
}
|
||||
|
||||
protected function display($handle)
|
||||
{
|
||||
ob_start();
|
||||
|
@ -65,7 +77,10 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
|||
|
||||
$defaults = $this->config_defaults();
|
||||
$config = new \phpbb\config\config(array_merge($defaults, $new_config));
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$this->lang = $lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$this->user = $user;
|
||||
|
||||
$path_helper = new \phpbb\path_helper(
|
||||
new \phpbb\symfony_request(
|
||||
|
@ -145,7 +160,10 @@ class phpbb_template_template_test_case extends phpbb_test_case
|
|||
{
|
||||
foreach ($lang_vars as $name => $value)
|
||||
{
|
||||
$this->user->lang[$name] = $value;
|
||||
self::$language_reflection_lang->setValue($this->lang, array_merge(
|
||||
self::$language_reflection_lang->getValue($this->lang),
|
||||
array($name => $value)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -614,7 +614,10 @@ class phpbb_functional_test_case extends phpbb_test_case
|
|||
|
||||
$db = $this->get_db();
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
|
||||
$phpbb_log = new \phpbb\log\log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
|
||||
|
@ -653,7 +656,10 @@ class phpbb_functional_test_case extends phpbb_test_case
|
|||
|
||||
$db = $this->get_db();
|
||||
$phpbb_dispatcher = new phpbb_mock_event_dispatcher();
|
||||
$user = $this->getMock('\phpbb\user', array(), array('\phpbb\datetime'));
|
||||
$user = $this->getMock('\phpbb\user', array(), array(
|
||||
new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),
|
||||
'\phpbb\datetime'
|
||||
));
|
||||
$auth = $this->getMock('\phpbb\auth\auth');
|
||||
|
||||
$phpbb_log = new \phpbb\log\log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE);
|
||||
|
|
|
@ -474,7 +474,9 @@ class phpbb_test_case_helpers
|
|||
}
|
||||
else
|
||||
{
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewcensors', true);
|
||||
$user->optionset('viewflash', true);
|
||||
$user->optionset('viewimg', true);
|
||||
|
|
|
@ -157,7 +157,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
'banana',
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewcensors', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
@ -168,7 +172,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
'banana',
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewcensors', false);
|
||||
|
||||
$config = new \phpbb\config\config(array('allow_nocensors' => true));
|
||||
|
@ -182,7 +190,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
'apple',
|
||||
function ($phpbb_container, $test)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewcensors', false);
|
||||
|
||||
$config = new \phpbb\config\config(array('allow_nocensors' => true));
|
||||
|
@ -207,7 +219,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
'http://localhost/foo.swf',
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewflash', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
@ -222,7 +238,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
'<a href="http://localhost/mrgreen.gif" class="postlink">http://localhost/mrgreen.gif</a>',
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewimg', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
@ -237,7 +257,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
':)',
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('smilies', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
@ -291,9 +315,13 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
2 => '<b>bold</b>'
|
||||
);
|
||||
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
foreach ($tests as $style_id => $expected)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->style = array('style_id' => $style_id);
|
||||
|
||||
$phpbb_container = new phpbb_mock_container_builder;
|
||||
|
@ -311,10 +339,12 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
|
||||
public function test_style_inheritance1()
|
||||
{
|
||||
global $phpbb_container;
|
||||
global $phpbb_container, $phpbb_root_path, $phpEx;
|
||||
|
||||
// Style 3 inherits from 2 which inherits from 1. Only style 1 has a bbcode.html
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->style = array('style_id' => 3);
|
||||
|
||||
$phpbb_container = new phpbb_mock_container_builder;
|
||||
|
@ -331,7 +361,7 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
|
||||
public function test_style_inheritance2()
|
||||
{
|
||||
global $phpbb_container;
|
||||
global $phpbb_container, $phpbb_root_path, $phpEx;
|
||||
|
||||
// Style 5 inherits from 4, but both have a bbcode.html
|
||||
$tests = array(
|
||||
|
@ -341,7 +371,9 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case
|
|||
|
||||
foreach ($tests as $style_id => $expected)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->style = array('style_id' => $style_id);
|
||||
|
||||
$phpbb_container = new phpbb_mock_container_builder;
|
||||
|
|
|
@ -34,8 +34,12 @@ class phpbb_text_processing_generate_text_for_display_test extends phpbb_test_ca
|
|||
{
|
||||
global $cache, $user;
|
||||
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$cache = new phpbb_mock_cache;
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewcensors', true);
|
||||
$user->optionset('viewflash', true);
|
||||
$user->optionset('viewimg', true);
|
||||
|
@ -66,7 +70,11 @@ class phpbb_text_processing_generate_text_for_display_test extends phpbb_test_ca
|
|||
|
||||
$phpbb_container = new phpbb_mock_container_builder;
|
||||
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewcensors', false);
|
||||
|
||||
$config = new \phpbb\config\config(array('allow_nocensors' => true));
|
||||
|
@ -153,7 +161,11 @@ class phpbb_text_processing_generate_text_for_display_test extends phpbb_test_ca
|
|||
true,
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewflash', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
@ -169,7 +181,11 @@ class phpbb_text_processing_generate_text_for_display_test extends phpbb_test_ca
|
|||
true,
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('viewimg', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
@ -185,7 +201,11 @@ class phpbb_text_processing_generate_text_for_display_test extends phpbb_test_ca
|
|||
true,
|
||||
function ($phpbb_container)
|
||||
{
|
||||
$user = new \phpbb\user('\\phpbb\\datetime');
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
$user = new \phpbb\user($lang, '\phpbb\datetime');
|
||||
$user->optionset('smilies', false);
|
||||
|
||||
$phpbb_container->set('user', $user);
|
||||
|
|
|
@ -1,119 +0,0 @@
|
|||
<?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.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_user_lang_test extends phpbb_test_case
|
||||
{
|
||||
public function test_user_lang_sprintf()
|
||||
{
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$user->lang = array(
|
||||
'FOO' => 'BAR',
|
||||
'BARZ' => 'PENG',
|
||||
'EMPTY' => '',
|
||||
'ZERO' => '0',
|
||||
'STR' => '%d %s, %d topics',
|
||||
'STR2' => '%d foos',
|
||||
'ARRY' => array(
|
||||
0 => 'No posts', // 0
|
||||
1 => '1 post', // 1
|
||||
2 => '%d posts', // 2+
|
||||
),
|
||||
'ARRY_NO_ZERO' => array(
|
||||
1 => '1 post', // 1
|
||||
2 => '%d posts', // 0, 2+
|
||||
),
|
||||
'ARRY_MISSING' => array(
|
||||
1 => '%d post', // 1
|
||||
//Missing second plural
|
||||
),
|
||||
'ARRY_FLOAT' => array(
|
||||
1 => '1 post', // 1.x
|
||||
2 => '%1$.1f posts', // 0.x, 2+.x
|
||||
),
|
||||
'ARRY_EMPTY' => array(
|
||||
),
|
||||
'dateformat' => array(
|
||||
'AGO' => array(
|
||||
1 => '%d second',
|
||||
2 => '%d seconds',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// No param
|
||||
$this->assertEquals($user->lang('FOO'), 'BAR');
|
||||
$this->assertEquals($user->lang('EMPTY'), '');
|
||||
$this->assertEquals($user->lang('ZERO'), '0');
|
||||
|
||||
// Invalid index
|
||||
$this->assertEquals($user->lang('VOID'), 'VOID');
|
||||
|
||||
// Unnecessary param
|
||||
$this->assertEquals($user->lang('FOO', 2), 'BAR');
|
||||
$this->assertEquals($user->lang('FOO', 2, 3), 'BAR');
|
||||
$this->assertEquals($user->lang('FOO', 2, 3, 'BARZ'), 'BAR');
|
||||
|
||||
// String
|
||||
$this->assertEquals($user->lang('STR', 24, 'x', 42), '24 x, 42 topics');
|
||||
$this->assertEquals($user->lang('STR2', 64), '64 foos');
|
||||
|
||||
// Array
|
||||
$this->assertEquals($user->lang('ARRY', 0), 'No posts');
|
||||
$this->assertEquals($user->lang('ARRY', 1), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY', 2), '2 posts');
|
||||
$this->assertEquals($user->lang('ARRY', 123), '123 posts');
|
||||
|
||||
// Empty array returns the language key
|
||||
$this->assertEquals($user->lang('ARRY_EMPTY', 123), 'ARRY_EMPTY');
|
||||
|
||||
// No 0 key defined
|
||||
$this->assertEquals($user->lang('ARRY_NO_ZERO', 0), '0 posts');
|
||||
$this->assertEquals($user->lang('ARRY_NO_ZERO', 1), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY_NO_ZERO', 2), '2 posts');
|
||||
|
||||
// Array with missing keys
|
||||
$this->assertEquals($user->lang('ARRY_MISSING', 2), '2 post');
|
||||
|
||||
// Floats as array key
|
||||
$this->assertEquals($user->lang('ARRY_FLOAT', 1.3), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY_FLOAT', 2.0), '2.0 posts');
|
||||
$this->assertEquals($user->lang('ARRY_FLOAT', 2.51), '2.5 posts');
|
||||
|
||||
// Use sub key, if first paramenter is an array
|
||||
$this->assertEquals($user->lang(array('dateformat', 'AGO'), 2), '2 seconds');
|
||||
|
||||
// ticket PHPBB3-9949 - use first int to determinate the plural-form to use
|
||||
$this->assertEquals($user->lang('ARRY', 1, 2), '1 post');
|
||||
$this->assertEquals($user->lang('ARRY', 1, 's', 2), '1 post');
|
||||
|
||||
// ticket PHPBB3-10345 - different plural rules, not just 0/1/2+
|
||||
$user = new \phpbb\user('\phpbb\datetime');
|
||||
$user->lang = array(
|
||||
'PLURAL_RULE' => 13,
|
||||
'ARRY' => array(
|
||||
0 => '%d is 0', // 0
|
||||
1 => '%d is 1', // 1
|
||||
2 => '%d ends with 01-10', // ending with 01-10
|
||||
3 => '%d ends with 11-19', // ending with 11-19
|
||||
4 => '%d is part of the last rule', // everything else
|
||||
),
|
||||
);
|
||||
$this->assertEquals($user->lang('ARRY', 0), '0 is 0');
|
||||
$this->assertEquals($user->lang('ARRY', 1), '1 is 1');
|
||||
$this->assertEquals($user->lang('ARRY', 103), '103 ends with 01-10');
|
||||
$this->assertEquals($user->lang('ARRY', 15), '15 ends with 11-19');
|
||||
$this->assertEquals($user->lang('ARRY', 300), '300 is part of the last rule');
|
||||
}
|
||||
}
|
|
@ -28,13 +28,15 @@ class phpbb_version_helper_fetch_test extends phpbb_test_case
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
|
||||
$this->version_helper = new \phpbb\version_helper(
|
||||
$this->cache,
|
||||
new \phpbb\config\config(array(
|
||||
'version' => '3.1.0',
|
||||
)),
|
||||
new \phpbb\file_downloader(),
|
||||
new \phpbb\user('\phpbb\datetime')
|
||||
new \phpbb\user(new \phpbb\language\language($lang_loader), '\phpbb\datetime')
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,13 +37,15 @@ class version_helper_remote_test extends \phpbb_test_case
|
|||
->will($this->returnValue(false));
|
||||
$this->file_downloader = new phpbb_mock_file_downloader();
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
|
||||
$this->version_helper = new \phpbb\version_helper(
|
||||
$this->cache,
|
||||
$config,
|
||||
$this->file_downloader,
|
||||
new \phpbb\user('\phpbb\datetime')
|
||||
new \phpbb\user(new \phpbb\language\language($lang_loader), '\phpbb\datetime')
|
||||
);
|
||||
$this->user = new \phpbb\user('\phpbb\datetime');
|
||||
$this->user = new \phpbb\user(new \phpbb\language\language($lang_loader), '\phpbb\datetime');
|
||||
$this->user->add_lang('acp/common');
|
||||
}
|
||||
|
||||
|
|
|
@ -25,13 +25,15 @@ class phpbb_version_helper_test extends phpbb_test_case
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
|
||||
$this->version_helper = new \phpbb\version_helper(
|
||||
$this->cache,
|
||||
new \phpbb\config\config(array(
|
||||
'version' => '3.1.0',
|
||||
)),
|
||||
new \phpbb\file_downloader(),
|
||||
new \phpbb\user('\phpbb\datetime')
|
||||
new \phpbb\user(new \phpbb\language\language($lang_loader), '\phpbb\datetime')
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -199,6 +201,11 @@ class phpbb_version_helper_test extends phpbb_test_case
|
|||
*/
|
||||
public function test_get_suggested_updates($current_version, $versions, $expected)
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
|
||||
$version_helper = $this
|
||||
->getMockBuilder('\phpbb\version_helper')
|
||||
->setMethods(array(
|
||||
|
@ -210,7 +217,7 @@ class phpbb_version_helper_test extends phpbb_test_case
|
|||
'version' => $current_version,
|
||||
)),
|
||||
new \phpbb\file_downloader(),
|
||||
new \phpbb\user('\phpbb\datetime'),
|
||||
new \phpbb\user($lang, '\phpbb\datetime'),
|
||||
))
|
||||
->getMock()
|
||||
;
|
||||
|
@ -310,6 +317,11 @@ class phpbb_version_helper_test extends phpbb_test_case
|
|||
*/
|
||||
public function test_get_latest_on_current_branch($current_version, $versions, $expected)
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
|
||||
$lang = new \phpbb\language\language($lang_loader);
|
||||
|
||||
$version_helper = $this
|
||||
->getMockBuilder('\phpbb\version_helper')
|
||||
->setMethods(array(
|
||||
|
@ -321,7 +333,7 @@ class phpbb_version_helper_test extends phpbb_test_case
|
|||
'version' => $current_version,
|
||||
)),
|
||||
new \phpbb\file_downloader(),
|
||||
new \phpbb\user('\phpbb\datetime'),
|
||||
new \phpbb\user($lang, '\phpbb\datetime'),
|
||||
))
|
||||
->getMock()
|
||||
;
|
||||
|
|
Loading…
Add table
Reference in a new issue