diff --git a/phpBB/adm/admin_language.php b/phpBB/adm/admin_language.php index 0054e18d16..eb99c67e6f 100644 --- a/phpBB/adm/admin_language.php +++ b/phpBB/adm/admin_language.php @@ -16,10 +16,8 @@ // * add ability to change uninstalled language packs // * add ability to create new language pack from existing one // * add documentation/help -// * safe mode checks // * Ability to add/remove entries to/from help files? // * Extend help entries to textarea -// * Check for missing help and email files too if (!empty($setmodules)) { @@ -67,6 +65,9 @@ if (is_array($cur_file)) } $cur_file = (strpos($cur_file, 'email/') !== false) ? 'email/' . basename($cur_file) : basename($cur_file) . '.' . $phpEx; +$safe_mode = (@ini_get('safe_mode') || @strtolower(ini_get('safe_mode')) == 'on') ? true : false; + +$language_files = array('common', 'groups', 'mcp', 'memberlist', 'posting', 'search', 'ucp', 'viewforum', 'viewtopic', 'admin', 'help_bbcode', 'help_faq'); if (!$mode) { @@ -166,27 +167,30 @@ switch ($action) $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); - $mkdir_ary = array('language', 'language/' . $row['lang_iso']); - if (strpos($cur_file, 'email/') !== false) + if (!$safe_mode) { - $mkdir_ary[] = 'language/' . $row['lang_iso'] . '/email'; - } - - foreach ($mkdir_ary as $dir) - { - $dir = $phpbb_root_path . 'store/' . $dir; - - if (!is_dir($dir)) + $mkdir_ary = array('language', 'language/' . $row['lang_iso']); + if (strpos($cur_file, 'email/') !== false) { - if (!@mkdir($dir, 0777)) + $mkdir_ary[] = 'language/' . $row['lang_iso'] . '/email'; + } + + foreach ($mkdir_ary as $dir) + { + $dir = $phpbb_root_path . 'store/' . $dir; + + if (!is_dir($dir)) { - trigger_error("Could not create directory $dir"); + if (!@mkdir($dir, 0777)) + { + trigger_error("Could not create directory $dir"); + } + @chmod($dir, 0777); } - @chmod($dir, 0777); } } - $filename = "{$phpbb_root_path}store/language/{$row['lang_iso']}/{$cur_file}"; + $filename = get_filename($row['lang_iso'], $cur_file, true); $fp = fopen($filename, 'wb'); if (strpos($cur_file, 'email/') !== false) @@ -334,35 +338,33 @@ $lang += array( trigger_error('NO_LANGUAGE_PACK_DEFINED'); } - $sql = 'SELECT * FROM ' . LANG_TABLE . " - WHERE lang_id = $lang_id - OR lang_iso = '{$config['default_lang']}'"; + $sql = 'SELECT * FROM ' . LANG_TABLE . ' + WHERE lang_id = ' . $lang_id; $result = $db->sql_query($sql); - - while ($row = $db->sql_fetchrow($result)) - { - $lang_entries[$row['lang_id']] = $row; - } + $lang_entries = $db->sql_fetchrow($result); $db->sql_freeresult($result); - $lang_iso = $lang_entries[$lang_id]['lang_iso']; - - $language_files = array('common', 'groups', 'mcp', 'memberlist', 'posting', 'search', 'ucp', 'viewforum', 'viewtopic', 'admin'); - $help_files = array('help_bbcode', 'help_faq'); - - $email_templates = filelist($phpbb_root_path . 'language/' . $lang_iso, 'email', 'txt'); - $email_templates = $email_templates['email/']; - + $lang_iso = $lang_entries['lang_iso']; $missing_vars = $missing_files = array(); + + $email_templates = filelist($phpbb_root_path . 'language/' . $config['default_lang'], 'email', 'txt'); + $email_templates = $email_templates['email/']; - if (!in_array(str_replace(".{$phpEx}", '', $cur_file), $language_files) && !in_array(str_replace(".{$phpEx}", '', $cur_file), $help_files) && !in_array(basename($cur_file), $email_templates)) + if (!in_array(str_replace(".{$phpEx}", '', $cur_file), $language_files) && !in_array(basename($cur_file), $email_templates)) { trigger_error('WRONG_LANGUAGE_FILE'); } if (isset($_POST['remove_store'])) { - @unlink($phpbb_root_path . 'store/language/' . $lang_iso . '/' . $cur_file); + if (!$safe_mode) + { + @unlink(get_filename($lang_iso, $cur_file)); + } + else + { + @unlink(get_filename($lang_iso, $cur_file, true)); + } } ?> @@ -371,23 +373,23 @@ $lang += array(