فهرست منبع

Fixing lang menu in the login page. It was set always with the first item.

Julio Montoya 12 سال پیش
والد
کامیت
c5a90d0ba7
4فایلهای تغییر یافته به همراه123 افزوده شده و 114 حذف شده
  1. 23 27
      main/inc/global.inc.php
  2. 97 72
      main/inc/lib/main_api.lib.php
  3. 2 2
      main/inc/lib/page.lib.php
  4. 1 13
      main/inc/lib/template.lib.php

+ 23 - 27
main/inc/global.inc.php

@@ -103,12 +103,6 @@ if (isset($urlInfo['path'])) {
     $_configuration['url_append'] = '/'.basename($urlInfo['path']);
 }
 
-// Inclusion of internationalization libraries
-require_once $includePath.'/lib/internationalization.lib.php';
-
-// Functions for internal use behind this API
-require_once $includePath.'/lib/internationalization_internal.lib.php';
-
 // Do not over-use this variable. It is only for this scripts local use.
 $libPath = $includePath.'/lib/';
 
@@ -268,13 +262,13 @@ if (isset($app['configuration']['main_database'])) {
             $charset = 'UTF-8';
         }*/
         //Charset is UTF-8
-
+        /*
         if (api_is_utf8($charset)) {
             // See Bug #1802: For UTF-8 systems we prefer to use "SET NAMES 'utf8'" statement in order to avoid a bizarre problem with Chinese language.
             Database::query("SET NAMES 'utf8';");
         } else {
             Database::query("SET CHARACTER SET '".Database::to_db_encoding($charset)."';");
-        }
+        }*/
         Database::query("SET NAMES 'utf8';");
     }
 }
@@ -282,10 +276,6 @@ if (isset($app['configuration']['main_database'])) {
 // Manage Chamilo error messages
 $app->error(
     function (\Exception $e, $code) use ($app) {
-
-        if ($e instanceof PDOException) {
-        }
-
         if ($app['debug']) {
             //return;
         }
@@ -319,11 +309,6 @@ $app->error(
 // Preserving the value of the global variable $charset.
 $charset_initial_value = $charset;
 
-// Initialization of the internationalization library.
-api_initialize_internationalization();
-// Initialization of the default encoding that will be used by the multibyte string routines in the internationalization library.
-api_set_internationalization_default_encoding($charset);
-
 // Start session after the internationalization library has been initialized
 
 // @todo use silex session provider instead of a custom class
@@ -356,15 +341,33 @@ $app['plugins'] = $_plugins;
 // Section (tabs in the main chamilo menu)
 $app['this_section'] = SECTION_GLOBAL;
 
+// Inclusion of internationalization libraries
+require_once $libPath.'internationalization.lib.php';
+// Functions for internal use behind this API
+require_once $libPath.'internationalization_internal.lib.php';
+
+// Setting languages
+$app['api_get_languages'] = api_get_languages();
+
+// Checking if we have a valid language. If not we set it to the platform language.
+if ($alreadyInstalled) {
+    $app['language_interface'] = $language_interface = api_get_language_interface();
+} else {
+    $app['language_interface'] = $language_interface = 'english';
+}
+
+// Initialization of the internationalization library.
+api_initialize_internationalization();
+
+// Initialization of the default encoding that will be used by the multibyte string routines in the internationalization library.
+api_set_internationalization_default_encoding($charset);
+
 // include the local (contextual) parameters of this course or section
 require $includePath.'/local.inc.php';
 
 // reconfigure templat now we know the user
 $app['template.hide_global_chat'] = !api_is_global_chat_enabled();
 
-// Setting languages
-$app['api_get_languages'] = api_get_languages();
-
 /**	Loading languages and sublanguages **/
 // @todo improve the language loading
 
@@ -374,13 +377,6 @@ $app['api_get_languages'] = api_get_languages();
 // Include all files (first english and then current interface language)
 $app['this_script'] = isset($this_script) ? $this_script : null;
 
-// Checking if we have a valid language. If not we set it to the platform language.
-if ($alreadyInstalled) {
-    $app['language_interface'] = $language_interface = api_get_language_interface();
-} else {
-    $app['language_interface'] = $language_interface = 'english';
-}
-
 // Sometimes the variable $language_interface is changed
 // temporarily for achieving translation in different language.
 // We need to save the genuine value of this variable and

+ 97 - 72
main/inc/lib/main_api.lib.php

@@ -487,6 +487,8 @@ define ('SKILL_TYPE_BOTH',          'both');
  * api_get_path(SYS_TEMPLATE_PATH)              /var/www/chamilo/main/template/
  *
  * api_get_path(WEB_SERVER_ROOT_PATH)           http://www.mychamilo.org/
+ *
+ * api_get_path(WEB_PUBLIC_PATH)                http://www.mychamilo.org/chamilo/web/
  * api_get_path(WEB_PATH)                       http://www.mychamilo.org/chamilo/
  * api_get_path(WEB_COURSE_PATH)                http://www.mychamilo.org/chamilo/courses/
  * api_get_path(WEB_CODE_PATH)                  http://www.mychamilo.org/chamilo/main/
@@ -1197,6 +1199,7 @@ function _api_format_user($user, $add_password = false) {
     if (isset($user['is_anonymous']) && $user['is_anonymous']) {
         return $user;
     }
+
     $firstname = $lastname = null;
 
     if (isset($user['firstname']) && isset($user['lastname'])) {
@@ -1208,7 +1211,7 @@ function _api_format_user($user, $add_password = false) {
     }
     $result['phone']= $user['phone'];
 
-    $result['complete_name'] 	= api_get_person_name($firstname, $lastname);
+    $result['complete_name'] = api_get_person_name($firstname, $lastname);
 
     $result['complete_name_with_username'] = $result['complete_name'];
     if (!empty($user['username'])) {
@@ -3425,21 +3428,13 @@ function api_get_item_property_info($course_id, $tool, $ref, $session_id = 0) {
 
 function api_get_languages_combo($name = 'language', $chozen=true) {
     $ret = '';
-    $platformLanguage = api_get_setting('platformLanguage');
-
     // Retrieve a complete list of all the languages.
     $language_list = api_get_languages();
 
     if (count($language_list['name']) < 2) {
         return $ret;
     }
-
-    // The the current language of the user so that his/her language occurs as selected in the dropdown menu.
-    if (isset($_SESSION['user_language_choice'])) {
-        $default = $_SESSION['user_language_choice'];
-    } else {
-        $default = $platformLanguage;
-    }
+    $default = api_get_user_language();
 
     $languages  = $language_list['name'];
     $folder		= $language_list['folder'];
@@ -3472,13 +3467,12 @@ function api_display_language_form($hide_if_no_choice = false) {
         return; // Don't show any form
     }
 
-    $user_selected_language = api_get_user_language();
+    $user_selected_language = api_get_language_selected_in_login();
 
     $original_languages = $language_list['name'];
     $folder = $language_list['folder']; // This line is probably no longer needed.
-	$html = '
-    <script>
-    function jumpMenu(targ,selObj,restore){ // v3.0
+	$html = '<script>
+    function jumpMenu(targ, selObj, restore){ // v3.0
         eval(targ+".location=\'"+selObj.options[selObj.selectedIndex].value+"\'");
         if (restore) selObj.selectedIndex=0;
     }
@@ -3492,7 +3486,7 @@ function api_display_language_form($hide_if_no_choice = false) {
         } else {
             $option_end = '>';
         }
-        $html .=  '<option value="'.api_get_self().'?language='.$folder[$key].'"'.$option_end;
+        $html .=  '<option value="'.api_get_path(WEB_PUBLIC_PATH).'index?language='.$folder[$key].'"'.$option_end;
         $html .=  $value.'</option>';
     }
     $html .=  '</select>';
@@ -3515,7 +3509,7 @@ function api_get_languages() {
     }
 
     $tbl_language = Database::get_main_table(TABLE_MAIN_LANGUAGE);
-    $sql = "SELECT * FROM $tbl_language WHERE available='1' ORDER BY original_name ASC";
+    $sql = "SELECT * FROM $tbl_language WHERE available = '1' ORDER BY original_name ASC";
 
     $result = Database::query($sql);
     $language_list = array();
@@ -3523,6 +3517,7 @@ function api_get_languages() {
         $language_list['name'][] = $row['original_name'];
         $language_list['folder'][] = $row['dokeos_folder'];
     }
+    $app['api_get_languages'] = $language_list;
     return $language_list;
 }
 
@@ -3551,35 +3546,39 @@ function api_get_language_id($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;
-    $_course = api_get_course_info();
-    $toreturn = false;
+function api_get_language_from_type($lang_type)
+{
+    $language = false;
     switch ($lang_type) {
-        case 'platform_lang' :
-            $temp_lang = api_get_setting('platformLanguage');
-            if (!empty($temp_lang))
-                $toreturn = $temp_lang;
+        case 'platform_lang':
+            $platformLanguage = api_get_setting('platformLanguage');
+            if (!empty($platformLanguage)) {
+                $language = $platformLanguage;
+            }
             break;
-        case 'user_profil_lang' :
-            if (isset($_user['language']) && !empty($_user['language']) )
-                $toreturn = $_user['language'];
+        case 'user_profil_lang':
+            //$_user = api_get_user_info();
+            $_user = Session::read('_user');
+            if (isset($_user['language']) && !empty($_user['language']) ) {
+                $language = $_user['language'];
+            }
             break;
-        case 'user_selected_lang' :
-            if (isset($_SESSION['user_language_choice']) && !empty($_SESSION['user_language_choice']) )
-                $toreturn = ($_SESSION['user_language_choice']);
+        case 'user_selected_lang':
+            $language = api_get_language_selected_in_login();
             break;
-        case 'course_lang' :
+        case 'course_lang':
+            $_course = api_get_course_info();
             if (isset($_course['language']) && !empty($_course['language']) )
-                $toreturn = $_course['language'];
+                $language = $_course['language'];
             break;
         default :
-            $toreturn = false;
-        break;
+            $language = false;
+            break;
     }
-    return $toreturn;
+    return $language;
 }
 
+
 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).'"';
@@ -6737,21 +6736,47 @@ function api_mail_html($recipient_name, $recipient_email, $subject, $body, $send
     */
 }
 
-function api_get_user_language() {
-    $user_language = null;
+function api_set_login_language($lang) {
+    global $app;
+    $valid_languages = array();
+    if ($app['installed']) {
+        $valid_languages = api_get_languages();
+    }
+    if (isset($lang) && isset($valid_languages)) {
+        if (in_array($lang, $valid_languages['folder'])) {
+            $_SESSION['user_language_choice'] = $lang;
+        }
+    }
+}
 
+function api_get_language_selected_in_login() {
+    $language = api_get_setting('platformLanguage');
     if (isset($_SESSION['user_language_choice']) && !empty($_SESSION['user_language_choice'])) {
-        $user_language = $_SESSION['user_language_choice'];
-    } elseif (!empty($_SESSION['_user']['language'])) {
-        $user_language = $_SESSION['_user']['language'];
+        $language = $_SESSION['user_language_choice'];
     }
+    return $language;
+}
 
-    if (isset($_GET['language']) && !empty($_GET['language'])) {
-        $user_language = $_GET['language'];
+function api_get_user_language() {
+    $user_language = null;
+
+    if (!api_is_anonymous()) {
+        $userInfo = api_get_user_info();
+        if (isset($userInfo['language'])) {
+            $user_language = $userInfo['language'];
+        }
     }
 
+    // When this is use?
+    /*
     if (isset($_POST['language_list']) && !empty($_POST['language_list'])) {
-        $user_language = str_replace('index.php?language=', '', $_POST['language_list']);
+        if (in_array($_GET['language'], $valid_languages)) {
+            $user_language = str_replace('index.php?language=', '', $_POST['language_list']);
+        }
+    }*/
+
+    if (isset($_REQUEST['language']) && !empty($_REQUEST['language'])) {
+        api_set_login_language($_REQUEST['language']);
     }
 
     // Last chance we get the platform language
@@ -6763,66 +6788,66 @@ function api_get_user_language() {
 
 function api_get_language_interface() {
     global $app;
-
     $valid_languages = array();
+
     if ($app['installed']) {
         $valid_languages = api_get_languages();
     }
 
     $user_language = api_get_user_language();
-    $_course = api_get_course_info();
+    $courseInfo = api_get_course_info();
     $language_interface = 'english';
 
+    $languageFromLogin = api_get_language_selected_in_login();
+
+    if (!empty($languageFromLogin)) {
+        $language_interface = $languageFromLogin;
+    }
+
     if (!empty($valid_languages)) {
 
-        if (!in_array($user_language, $valid_languages['folder'])) {
-            $user_language = api_get_setting('platformLanguage');
+        // User language or platform lang
+        $language_interface = $user_language;
+
+        // Course language
+        if (!empty($courseInfo) && isset($courseInfo['language'])) {
+            $language_interface = $courseInfo['language'];
         }
-        /* @todo fix the language priority feature */
+
+        // Lang priorities could be: course_lang, user_profil_lang, user_selected_lang , platform_lang
+
         $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;
-            $_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');
+            error_log($language_interface);
         }
 
         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'];
-            }
+            error_log($language_interface);
         }
 
         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'];
-            }
+            error_log($language_interface);
         }
+
         if (!empty($language_priority1) && api_get_language_from_type($language_priority1) !== false) {
             $language_interface = api_get_language_from_type($language_priority1);
-        } else {
-            if (isset($_course['language']) && !empty($_course['language'])) {
-                $language_interface = $_course['language'];
-            }
+            error_log($language_interface);
         }
+
+        // If user lang is not valid get the default platform lang
+        if (empty($language_interface) || !in_array($language_interface, $valid_languages['folder'])) {
+            $language_interface = api_get_setting('platformLanguage');
+        }
+        error_log($language_interface);
     }
+
     return $language_interface;
 }
 

+ 2 - 2
main/inc/lib/page.lib.php

@@ -392,7 +392,7 @@ class PageController
      * @return string The portal's homepage as an HTML string
      * @assert () != ''
      */
-    public function return_home_page()
+    public function returnHomePage()
     {
         // Including the page for the news
         $html          = null;
@@ -1428,4 +1428,4 @@ class PageController
         $tpl->assign('count_courses', $count_courses);
         $tpl->assign('welcome_to_course_block', 1);
     }
-}
+}

+ 1 - 13
main/inc/lib/template.lib.php

@@ -762,19 +762,7 @@ class Template
         $navigation = $navigation['navigation'];
 
         // Displaying the tabs
-
-        $lang = null; //el for "Edit Language"
-        $user_language_choice = isset($_SESSION['user_language_choice']) ? $_SESSION['user_language_choice'] : null;
-
-        $user_info = $this->app['current_user'];
-
-        if (!empty($user_language_choice)) {
-            $lang = $user_language_choice;
-        } elseif (!empty($user_info['language'])) {
-            $lang = $user_info['language'];
-        } else {
-            $lang = api_get_setting('platformLanguage');
-        }
+        $lang = api_get_user_language();
 
         //Preparing home folder for multiple urls