aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/extension/finder.php2
-rw-r--r--phpBB/includes/extension/manager.php5
-rw-r--r--phpBB/includes/functions_module.php19
-rw-r--r--phpBB/includes/session.php68
4 files changed, 76 insertions, 18 deletions
diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php
index 0c8c5d337c..6084d2672a 100644
--- a/phpBB/includes/extension/finder.php
+++ b/phpBB/includes/extension/finder.php
@@ -268,7 +268,7 @@ class phpbb_extension_finder
* @param bool $is_dir Whether the found items should be directories
* @return array An array of paths to found items
*/
- protected function find($cache = true, $is_dir = false)
+ public function find($cache = true, $is_dir = false)
{
$this->query['is_dir'] = $is_dir;
$query = md5(serialize($this->query));
diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php
index ef714638c3..0b3189df96 100644
--- a/phpBB/includes/extension/manager.php
+++ b/phpBB/includes/extension/manager.php
@@ -89,11 +89,12 @@ class phpbb_extension_manager
* Generates the path to an extension
*
* @param string $name The name of the extension
+ * @param bool $phpbb_relative Whether the path should be relative to phpbb root
* @return string Path to an extension
*/
- public function get_extension_path($name)
+ public function get_extension_path($name, $phpbb_relative = false)
{
- return 'ext/' . basename($name) . '/';
+ return (($phpbb_relative) ? $this->phpbb_root_path : '') . 'ext/' . basename($name) . '/';
}
/**
diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php
index 9226a75d4c..946e7d2b8d 100644
--- a/phpBB/includes/functions_module.php
+++ b/phpBB/includes/functions_module.php
@@ -865,7 +865,7 @@ class p_master
function add_mod_info($module_class)
{
global $user, $phpEx;
-
+/*
if (file_exists($user->lang_path . $user->lang_name . '/mods'))
{
$add_files = array();
@@ -888,6 +888,23 @@ class p_master
{
$user->add_lang($add_files);
}
+ }*/
+
+ global $phpbb_extension_manager;
+
+ $finder = $phpbb_extension_manager->get_finder();
+
+ $lang_files = $finder
+ ->prefix('info_' . strtolower($module_class) . '_')
+ ->suffix(".$phpEx")
+ ->directory('/language/' . $user->lang_name)
+ ->default_path('language/' . $user->lang_name . '/mods/')
+ ->default_directory('')
+ ->find();
+
+ foreach ($lang_files as $lang_file => $ext_name)
+ {
+ $user->add_lang_ext($ext_name, $lang_file);
}
}
diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php
index bd2257c139..cbef1af30a 100644
--- a/phpBB/includes/session.php
+++ b/phpBB/includes/session.php
@@ -1901,6 +1901,7 @@ class user extends 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
+ * @param string $ext_name The extension to load language from, or empty for global files
*
* Examples:
* <code>
@@ -1911,7 +1912,7 @@ class user extends session
* $lang_set = array('help' => 'faq', 'db' => array('help:faq', 'posting'))
* </code>
*/
- function add_lang($lang_set, $use_db = false, $use_help = false)
+ function add_lang($lang_set, $use_db = false, $use_help = false, $ext_name = '')
{
global $phpEx;
@@ -1925,36 +1926,54 @@ class user extends session
if ($key == 'db')
{
- $this->add_lang($lang_file, true, $use_help);
+ $this->add_lang($lang_file, true, $use_help, $ext_name);
}
else if ($key == 'help')
{
- $this->add_lang($lang_file, $use_db, true);
+ $this->add_lang($lang_file, $use_db, true, $ext_name);
}
else if (!is_array($lang_file))
{
- $this->set_lang($this->lang, $this->help, $lang_file, $use_db, $use_help);
+ $this->set_lang($this->lang, $this->help, $lang_file, $use_db, $use_help, $ext_name);
}
else
{
- $this->add_lang($lang_file, $use_db, $use_help);
+ $this->add_lang($lang_file, $use_db, $use_help, $ext_name);
}
}
unset($lang_set);
}
else if ($lang_set)
{
- $this->set_lang($this->lang, $this->help, $lang_set, $use_db, $use_help);
+ $this->set_lang($this->lang, $this->help, $lang_set, $use_db, $use_help, $ext_name);
}
}
/**
+ * Add Language Items from an extension - use_db and use_help are assigned where needed (only use them to force inclusion)
+ *
+ * @param string $ext_name The extension to load language from, or empty for global files
+ * @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
+ */
+ function add_lang_ext($ext_name, $lang_set, $use_db = false, $use_help = false)
+ {
+ if ($ext_name === '/')
+ {
+ $ext_name = '';
+ }
+
+ $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)
+ function set_lang(&$lang, &$help, $lang_file, $use_db = false, $use_help = false, $ext_name = '')
{
- global $phpEx;
+ 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)
@@ -1970,11 +1989,32 @@ class user extends session
{
if ($use_help && strpos($lang_file, '/') !== false)
{
- $language_filename = $this->lang_path . $this->lang_name . '/' . substr($lang_file, 0, stripos($lang_file, '/') + 1) . 'help_' . substr($lang_file, stripos($lang_file, '/') + 1) . '.' . $phpEx;
+ $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 = $this->lang_path . $this->lang_name . '/' . (($use_help) ? 'help_' : '') . $lang_file . '.' . $phpEx;
+ $language_filename = $lang_path . $this->lang_name . '/' . $filename . '.' . $phpEx;
}
if (!file_exists($language_filename))
@@ -1984,24 +2024,24 @@ class user extends session
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($this->lang_path . 'en', $this->lang_path . $this->data['user_lang'], $language_filename);
+ $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
$this->lang_name = 'en';
- $this->set_lang($lang, $help, $lang_file, $use_db, $use_help);
+ $this->set_lang($lang, $help, $lang_file, $use_db, $use_help, $ext_name);
}
else if ($this->lang_name == $this->data['user_lang'])
{
// Fall back to the board default language
$this->lang_name = basename($config['default_lang']);
- $this->set_lang($lang, $help, $lang_file, $use_db, $use_help);
+ $this->set_lang($lang, $help, $lang_file, $use_db, $use_help, $ext_name);
}
// Reset the lang name
- $this->lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']);
+ $this->lang_name = (file_exists($lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']);
return;
}