diff --git a/main/inc/global.inc.php b/main/inc/global.inc.php index a539ebc51b..49efec9e38 100644 --- a/main/inc/global.inc.php +++ b/main/inc/global.inc.php @@ -414,31 +414,49 @@ $valid_languages = api_get_languages(); if (!empty($valid_languages)) { - if (!in_array($user_language, $valid_languages['folder'])) { - $user_language = api_get_setting('platformLanguage'); - } - - if (in_array($user_language, $valid_languages['folder']) && (isset($_GET['language']) || isset($_POST['language_list']))) { - $user_selected_language = $user_language; // $_GET['language']; - $_SESSION['user_language_choice'] = $user_selected_language; - $platformLanguage = $user_selected_language; - } else { - $platformLanguage = api_get_setting('platformLanguage'); - } - - if (isset($_SESSION['user_language_choice'])) { - $language_interface = $_SESSION['user_language_choice']; - } else { - $language_interface = api_get_setting('platformLanguage'); - } - - if (isset($_user['language'])) { - $language_interface = $_user['language']; - } - - if ($_course['language']) { - $language_interface = $_course['language']; - } + if (!in_array($user_language, $valid_languages['folder'])) { + $user_language = api_get_setting('platformLanguage'); + } + $language_priority1 = api_get_setting('languagePriority1'); + $language_priority2 = api_get_setting('languagePriority2'); + $language_priority3 = api_get_setting('languagePriority3'); + $language_priority4 = api_get_setting('languagePriority4'); + + if (in_array($user_language, $valid_languages['folder']) && (isset($_GET['language']) || isset($_POST['language_list']))) { + $user_selected_language = $user_language; // $_GET['language']; + $_SESSION['user_language_choice'] = $user_selected_language; + $platformLanguage = $user_selected_language; + } + + if (!empty($language_priority4) && api_get_language_from_type($language_priority4) !== false ) { + $language_interface = api_get_language_from_type($language_priority4); + } + else { + $language_interface = api_get_setting('platformLanguage'); + } + + if (!empty($language_priority3) && api_get_language_from_type($language_priority3) !== false ) { + $language_interface = api_get_language_from_type($language_priority3); + }else { + if (isset($_SESSION['user_language_choice'])) { + $language_interface = $_SESSION['user_language_choice']; + } + } + + if (!empty($language_priority2) && api_get_language_from_type($language_priority2) !== false ) { + $language_interface = api_get_language_from_type($language_priority2); + }else { + if (isset($_user['language'])) { + $language_interface = $_user['language']; + } + } + if (!empty($language_priority1) && api_get_language_from_type($language_priority1) !== false ) { + $language_interface = api_get_language_from_type($language_priority1); + }else { + if ($_course['language']) { + $language_interface = $_course['language']; + } + } } // Sometimes the variable $language_interface is changed diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index f94254fe4c..6b9cfea31b 100644 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -2646,6 +2646,42 @@ function api_get_language_id($language) { $row = Database::fetch_array($result); return $row['id']; } +/** + * Gets language of the requested type for the current user. Types are : + * user_profil_lang : profile language of current user + * user_select_lang : language selected by user at login + * course_lang : language of the current course + * platform_lang : default platform language + * @param string lang_type + * @param return language of the requested type or false if the language is not available + **/ +function api_get_language_from_type($lang_type){ + global $_user; + $toreturn = false; + switch ($lang_type) { + case 'platform_lang' : + $temp_lang = api_get_setting('platformLanguage'); + if (!empty($temp_lang)) + $toreturn = $temp_lang; + break; + case 'user_profil_lang' : + if (isset($_user['language'])) + $toreturn = $_user['language']; + break; + case 'user_selected_lang' : + if (isset($_SESSION['user_language_choice'])) + $toreturn = ($_SESSION['user_language_choice']); + break; + case 'course_lang' : + if ($_course['language']) + $language_interface = $_course['language']; + break; + default : + $toreturn = false; + break; + } + return $toreturn; +} /** * Returns a list of CSS themes currently available in the CSS folder diff --git a/main/install/db_main.sql b/main/install/db_main.sql index b0687da303..4144dcf46a 100644 --- a/main/install/db_main.sql +++ b/main/install/db_main.sql @@ -791,6 +791,10 @@ VALUES ('custom_tab_2_url', NULL, 'textfield', 'Platform', '', 'CustomTab2URLTitle', 'CustomTab2URLComment', NULL, NULL, 0), ('custom_tab_3_name', NULL, 'textfield', 'Platform', '', 'CustomTab3NameTitle', 'CustomTab3NameComment', NULL, NULL, 0), ('custom_tab_3_url', NULL, 'textfield', 'Platform', '', 'CustomTab3URLTitle', 'CustomTab3URLComment', NULL, NULL, 0); +('languagePriority1', NULL, 'radio', 'Languages', 'LanguagePriority1Title', 'LanguagePriority1Comment', NULL, NULL, 0); +('languagePriority2', NULL, 'radio', 'Languages', 'LanguagePriority2Title', 'LanguagePriority2Comment', NULL, NULL, 0); +('languagePriority3', NULL, 'radio', 'Languages', 'LanguagePriority3Title', 'LanguagePriority3Comment', NULL, NULL, 0); +('languagePriority4', NULL, 'radio', 'Languages', 'LanguagePriority4Title', 'LanguagePriority4Comment', NULL, NULL, 0); UNLOCK TABLES; @@ -1013,7 +1017,23 @@ VALUES ('cas_add_user_activate', 'true', 'Yes'), ('cas_add_user_activate', 'false', 'No'), ('use_custom_pages','true','Yes'), -('use_custom_pages','false','No'); +('use_custom_pages','false','No'), +('languagePriority1','platform_lang','PlatformLanguage'), +('languagePriority1','user_profil_lang','UserLanguage'), +('languagePriority1','user_selected_lang','UserSelectedLanguage'), +('languagePriority1','course_lang','CourseLanguage'), +('languagePriority2','platform_lang','PlatformLanguage'), +('languagePriority2','user_profil_lang','UserLanguage'), +('languagePriority2','user_selected_lang','UserSelectedLanguage'), +('languagePriority2','course_lang','CourseLanguage'), +('languagePriority3','platform_lang','PlatformLanguage'), +('languagePriority3','user_profil_lang','UserLanguage'), +('languagePriority3','user_selected_lang','UserSelectedLanguage'), +('languagePriority3','course_lang','CourseLanguage'), +('languagePriority4','platform_lang','PlatformLanguage'), +('languagePriority4','user_profil_lang','UserLanguage'), +('languagePriority4','user_selected_lang','UserSelectedLanguage'), +('languagePriority4','course_lang','CourseLanguage'); UNLOCK TABLES; diff --git a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql index 5c3b887e8f..4396000d46 100644 --- a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql +++ b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql @@ -136,6 +136,13 @@ INSERT INTO `event_type` VALUES (1, 'course_deleted','courseDeletedTitle','cours INSERT INTO `event_type_message` (`id`,`event_type_id`, `language_id`, `message`,`subject`) VALUES (1,4,10,'Bonjour, \r\n\r\nL\'utilisateur %username% (%firstname% %lastname%) a été créé.\r\nEmail : %mail%\r\n\r\nBien à vous.',''),(2,1,10,'Delete formation',''),(3,2,10,'Create formation',''),(4,3,10,'Bonjour, \r\n\r\nL\'utilisateur %username% (%firstname% %lastname%) a été supprimé.\r\n\r\nBien à vous.',''),(6,5,10,'Create session test',''),(7,6,10,'Delete session',''),(8,7,10,'Create category session',''),(9,8,10,'Delete category session',''),(10,9,10,'Change setting',''),(11,10,10,'Subscribe',''),(12,11,10,'Unsubscribe',''); CREATE TABLE announcement_rel_group (group_id int NOT NULL, announcement_id int NOT NULL, PRIMARY KEY (group_id, announcement_id)); + +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority1', NULL, 'radio', 'Languages', 'LanguagePriority1Title', 'LanguagePriority1Comment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority2', NULL, 'radio', 'Languages', 'LanguagePriority2Title', 'LanguagePriority2Comment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority3', NULL, 'radio', 'Languages', 'LanguagePriority3Title', 'LanguagePriority3Comment', NULL, NULL, 0); +INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('languagePriority4', NULL, 'radio', 'Languages', 'LanguagePriority4Title', 'LanguagePriority4Comment', NULL, NULL, 0); +INSERT INTO settings_options (variable, value, display_text) VALUES ('languagePriority1','platform_lang','PlatformLanguage'), ('languagePriority1','user_profil_lang','UserLanguage'), ('languagePriority1','user_selected_lang','UserSelectedLanguage'), ('languagePriority1','course_lang','CourseLanguage'), ('languagePriority2','platform_lang','PlatformLanguage'), ('languagePriority2','user_profil_lang','UserLanguage'), ('languagePriority2','user_selected_lang','UserSelectedLanguage'), ('languagePriority2','course_lang','CourseLanguage'), ('languagePriority3','platform_lang','PlatformLanguage'), ('languagePriority3','user_profil_lang','UserLanguage'), ('languagePriority3','user_selected_lang','UserSelectedLanguage'), ('languagePriority3','course_lang','CourseLanguage'), ('languagePriority4','platform_lang','PlatformLanguage'), ('languagePriority4','user_profil_lang','UserLanguage'), ('languagePriority4','user_selected_lang','UserSelectedLanguage'), ('languagePriority4','course_lang','CourseLanguage'); + -- -- Table structure for LP custom storage API -- diff --git a/main/lang/english/admin.inc.php b/main/lang/english/admin.inc.php index e25f858d25..e7e651af26 100644 --- a/main/lang/english/admin.inc.php +++ b/main/lang/english/admin.inc.php @@ -1331,4 +1331,14 @@ $GroupParentship = 'Parent group'; $NoParentship = 'No parent group'; $HumanResourcesManager = "Human resources manager"; $IamAHRM = "I am a human resources manager"; +$UserLanguage = 'User profile language'; +$UserSelectedLanguage = 'Language chosen by the user at login'; +$LanguagePriority1Title = 'First priority language'; +$LanguagePriority2Title = 'Second priority language'; +$LanguagePriority3Title = 'Third priority language'; +$LanguagePriority4Title = 'Fourth priority language'; +$LanguagePriority1Comment = ''; +$LanguagePriority2Comment = ''; +$LanguagePriority3Comment = ''; +$LanguagePriority4Comment = ''; ?> diff --git a/main/lang/french/admin.inc.php b/main/lang/french/admin.inc.php index bc64c5b2ab..ecd5195e02 100644 --- a/main/lang/french/admin.inc.php +++ b/main/lang/french/admin.inc.php @@ -1308,4 +1308,14 @@ $GroupParentship = 'Groupe parent'; $NoParentship = 'Aucun groupe parent'; $HumanResourcesManager = "Gestionnaire des ressources humaines"; $IamAHRM = "Je suis un gestionnaire des ressources humaines"; +$UserLanguage = 'Langue du profil utilisateur'; +$UserSelectedLanguage = 'Langue sélectionnée par l\'utilisateur lors du login'; +$LanguagePriority1Title = 'Langue à choisir en première priorité'; +$LanguagePriority2Title = 'Langue à choisir en deuxième priorité'; +$LanguagePriority3Title = 'Langue à choisir en troisième priorité'; +$LanguagePriority4Title = 'Langue à choisir en quatrième priorité'; +$LanguagePriority1Comment = ''; +$LanguagePriority2Comment = ''; +$LanguagePriority3Comment = ''; +$LanguagePriority4Comment = ''; ?>