From a4347cfb0652f880fd930e62e466ff6035392f72 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 31 May 2011 12:43:18 +0200 Subject: [PATCH] Adding a validation in the api_get_interface_language() file in order to check sub_language parent settings (firstname, lastname order) see BT#1598 --- main/admin/access_url_add_users_to_url.php | 16 +++++---- main/inc/lib/internationalization.lib.php | 41 +++++++++++++++++++--- main/inc/lib/main_api.lib.php | 22 +++++++++--- 3 files changed, 65 insertions(+), 14 deletions(-) diff --git a/main/admin/access_url_add_users_to_url.php b/main/admin/access_url_add_users_to_url.php index e272d06949..f1c30a550f 100755 --- a/main/admin/access_url_add_users_to_url.php +++ b/main/admin/access_url_add_users_to_url.php @@ -92,7 +92,8 @@ if(empty($first_letter_user)) { } $first_letter_user = Database::escape_string($first_letter_user); -$target_name = api_sort_by_first_name() ? 'firstname' : 'lastname'; +//$target_name = api_sort_by_first_name() ? 'firstname' : 'lastname'; +$target_name = 'lastname'; $sql = "SELECT user_id,lastname,firstname,username FROM $tbl_user WHERE ".$target_name." LIKE '".$first_letter_user."%' OR ".$target_name." LIKE '".api_strtolower($first_letter_user)."%' ORDER BY ". (count($users) > 0 ? "(user_id IN(".implode(',', $users).")) DESC," : "")." ".$target_name; @@ -128,11 +129,13 @@ unset($result); - - + @@ -146,7 +149,9 @@ unset($result); - + @@ -157,5 +162,4 @@ unset($result); \ No newline at end of file +Display :: display_footer(); \ No newline at end of file diff --git a/main/inc/lib/internationalization.lib.php b/main/inc/lib/internationalization.lib.php index e592ceee63..5dcaaf1b77 100755 --- a/main/inc/lib/internationalization.lib.php +++ b/main/inc/lib/internationalization.lib.php @@ -248,9 +248,39 @@ function api_is_translated($variable, $language = null) { * @param bool $purified (optional) When it is true, a purified (refined) language value will be returned, for example 'french' instead of 'french_unicode'. * @return string The current language of the interface. */ -function api_get_interface_language($purified = false) { +function api_get_interface_language($purified = false, $check_sub_language = false) { global $language_interface; - return empty($language_interface) ? 'english' : ($purified ? api_purify_language_id($language_interface) : $language_interface); + + if (empty($language_interface)) { + return 'english'; + } + + //1. Checking if current language is supported + $language_is_supported = api_is_language_supported($language_interface); + + if ($check_sub_language && !$language_is_supported) { + static $parent_language_name = null; + + if (!isset($parent_language_name)) { + //2. The current language is a sub language so we grab the father's setting according to the internalization_database/name_order_convetions.php file + $language_id = api_get_language_id($language_interface); + $language_info = api_get_language_info($language_id); + if (!empty($language_id) && !empty($language_info)) { + $language_info = api_get_language_info($language_info['parent_id']); + $parent_language_name = $language_info['english_name']; + if (!empty($parent_language_name)) { + return $parent_language_name; + } + } + return 'english'; + } else { + return $parent_language_name; + } + } else { + //2. Normal way + $interface_language = $purified ? api_purify_language_id($language_interface) : $language_interface; + } + return $interface_language; } /** @@ -260,7 +290,7 @@ function api_get_interface_language($purified = false) { */ function api_is_language_supported($language) { static $supported = array(); - if (!isset($supported[$language])) { + if (!isset($supported[$language])) { $supported[$language] = in_array(api_purify_language_id($language), array_keys(_api_non_utf8_encodings())); } return $supported[$language]; @@ -334,6 +364,7 @@ function api_get_language_isocode($language = null, $default_code = 'en') { return $iso_code[$language]; } + /** * Gets language isocode column from the language table * @@ -888,9 +919,11 @@ function api_get_person_name($first_name, $last_name, $title = null, $format = n if (empty($format)) { $format = PERSON_NAME_COMMON_CONVENTION; } + if (empty($language)) { - $language = api_get_interface_language(); + $language = api_get_interface_language(false, true); } + if (empty($encoding)) { $encoding = _api_mb_internal_encoding(); } diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index 4d904bfa91..6cffd2f7fa 100755 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -2803,18 +2803,32 @@ function api_get_languages() { /** * Returns the id (the database id) of a language - * @param string language name (the corresponding name of the language-folder in the filesystem) - * @return int id of the language + * @param string language name (the corresponding name of the language-folder in the filesystem) + * @return int id of the language */ function api_get_language_id($language) { $tbl_language = Database::get_main_table(TABLE_MAIN_LANGUAGE); + if (empty($language)) { + return null; + } $language = Database::escape_string($language); - $sql = "SELECT id FROM $tbl_language WHERE available='1' AND dokeos_folder = '$language' ORDER BY dokeos_folder ASC"; + $sql = "SELECT id FROM $tbl_language WHERE available='1' AND dokeos_folder = '$language' LIMIT 1"; $result = Database::query($sql); - $row = Database::fetch_array($result); + $row = Database::fetch_array($result); return $row['id']; } +function api_get_language_info($language_id) { + $tbl_admin_languages = Database :: get_main_table(TABLE_MAIN_LANGUAGE); + $sql = 'SELECT * FROM '.$tbl_admin_languages.' WHERE id = "'.intval($language_id).'"'; + $rs = Database::query($sql); + $language_info = array(); + if (Database::num_rows($rs)) { + $language_info = Database::fetch_array($rs,'ASSOC'); + } + return $language_info; +} + /** * Returns the name of the visual (CSS) theme to be applied on the current page. * The returned name depends on the platform, course or user -wide settings.