]> git.mjollnir.org Git - s9y.git/commitdiff
EXPERIMENTAL: Shuffled language, required for future authentication themes like OpenI...
authorgarvinhicking <garvinhicking>
Fri, 23 Feb 2007 13:57:39 +0000 (13:57 +0000)
committergarvinhicking <garvinhicking>
Fri, 23 Feb 2007 13:57:39 +0000 (13:57 +0000)
include/admin/personal.inc.php
include/functions_config.inc.php
serendipity_config.inc.php

index be329a053d197df11dd48229c0b84c289386119b..333a2fa29f2f385575984e68b1b42c598ab46d02 100644 (file)
@@ -17,6 +17,8 @@ if ($serendipity['GET']['adminAction'] == 'save' && serendipity_checkFormToken()
     if ( (!serendipity_checkPermission('adminUsersEditUserlevel') || !serendipity_checkPermission('adminUsersMaintainOthers') )
           && (int)$_POST['userlevel'] > $serendipity['serendipityUserlevel']) {
         echo '<div class="serendipityAdminMsgError">' . CREATE_NOT_AUTHORIZED_USERLEVEL . '</div>';
+    } elseif (empty($_POST['username'])) {
+        echo '<div class="serendipityAdminMsgError">' . USERCONF_CHECK_USERNAME_ERROR . '</div>';
     } elseif (!empty($_POST['password']) && $_POST['check_password'] != $_SESSION['serendipityPassword'] && md5($_POST['check_password']) != $_SESSION['serendipityPassword']) {
         echo '<div class="serendipityAdminMsgError">' . USERCONF_CHECK_PASSWORD_ERROR . '</div>';
     } else {
@@ -77,6 +79,11 @@ if ($serendipity['GET']['adminAction'] == 'save' && serendipity_checkFormToken()
             serendipity_updatePermalink($pl_data, 'author');
             serendipity_plugin_api::hook_event('backend_users_edit', $pl_data);
         }
+        if ($serendipity['authorid'] === $_SESSION['serendipityAuthorid']) {
+            if (is_null($serendipity['detected_lang'])) {
+                $_SESSION['serendipityLanguage'] = $serendipity['lang'];
+            }
+        }
         $from = $_POST;
 ?>
     <div class="serendipityAdminMsgSuccess"><?php echo sprintf(MODIFIED_USER, $_POST['realname']) ?></div>
index b64582988cc94db2cffa3e91af71a0cd47880375..5b3cb541f7c06f12c95cb875fd4c8357a8f87a4a 100644 (file)
@@ -323,6 +323,9 @@ function serendipity_load_configuration($author = null) {
         }
     }
     $config_loaded[$author] = true;
+
+    // Store default language
+    $serendipity['default_lang'] = $serendipity['lang'];
 }
 
 /**
@@ -471,6 +474,12 @@ function serendipity_authenticate_author($username = '', $password = '', $is_md5
         $is_md5 = true;
     }
 
+    $is_authenticated = false;
+    serendipity_plugin_api::hook_event('backend_login', $is_authenticated, NULL);
+    if ($is_authenticated) {
+        return true;
+    }
+
     if ($username != '') {
         if ($use_external) {
             serendipity_plugin_api::hook_event('backend_auth', $is_md5, array('username' => $username, 'password' => $password));
@@ -503,6 +512,7 @@ function serendipity_authenticate_author($username = '', $password = '', $is_md5
             $_SESSION['serendipityAuthedUser']  = $serendipity['serendipityAuthedUser']   = true;
             $_SESSION['serendipityRightPublish']= $serendipity['serendipityRightPublish'] = $row['right_publish'];
             serendipity_load_configuration($serendipity['authorid']);
+            serendipity_setCookie('userDefLang', $serendipity['lang'], false);
             return true;
         } else {
             $_SESSION['serendipityAuthedUser'] = false;
@@ -814,9 +824,6 @@ function serendipity_header($header) {
 function serendipity_getSessionLanguage() {
     global $serendipity;
 
-    // Store default language
-    $serendipity['default_lang'] = $serendipity['lang'];
-
     // DISABLE THIS!
 /*
     if ($_SESSION['serendipityAuthedUser']) {
@@ -826,7 +833,7 @@ function serendipity_getSessionLanguage() {
 */
 
     if (isset($_REQUEST['user_language']) && (!empty($serendipity['languages'][$_REQUEST['user_language']])) && !headers_sent()) {
-        serendipity_setCookie('serendipityLanguage', $_REQUEST['user_language']);
+        serendipity_setCookie('serendipityLanguage', $_REQUEST['user_language'], false);
     }
 
     if (isset($serendipity['COOKIE']['serendipityLanguage'])) {
@@ -838,15 +845,64 @@ function serendipity_getSessionLanguage() {
     } elseif (serendipity_db_bool($serendipity['lang_content_negotiation'])) {
         if ($serendipity['expose_s9y']) serendipity_header('X-Serendipity-InterfaceLangSource: Content-Negotiation');
         $lang = serendipity_detectLang();
-    } elseif ($_SESSION['serendipityAuthedUser']) {
+    }
+
+    if (isset($lang)) {
+        $serendipity['detected_lang'] = $lang;
+    } else {
+        if (! empty($_SESSION['serendipityLanguage'])) {
+            $lang = $_SESSION['serendipityLanguage'];
+        } else {
+            if (isset($serendipity['COOKIE']['userDefLang']) && ! empty($serendipity['COOKIE']['userDefLang'])) {
+                $lang = $serendipity['COOKIE']['userDefLang'];
+            } else {
+                $lang = $serendipity['lang'];
+               }
+        }
+        $serendipity['detected_lang'] = null;
+    }
+
+    if (!isset($serendipity['languages'][$lang])) {
+        $serendipity['detected_lang'] = null;
+        return $serendipity['lang'];
+    } else {
+        $_SESSION['serendipityLanguage'] = $lang;
+        if (! is_null($serendipity['detected_lang'])) {
+            if ($serendipity['expose_s9y']) serendipity_header('X-Serendipity-InterfaceLang: ' . $lang);
+        }
+    }
+
+    return $lang;
+}
+
+/**
+ * Gets the selected language from personal configuration if needed
+ *
+ * This function also sets HTTP Headers and cookies to contain the language for follow-up requests
+ *
+ * @access public
+ * @return  string      Returns the name of the selected language.
+ */
+function serendipity_getPostAuthSessionLanguage() {
+    global $serendipity;
+
+    if (! is_null($serendipity['detected_lang'])) {
+        return $serendipity['detected_lang'];
+    }
+
+    if ($_SESSION['serendipityAuthedUser']) {
         if ($serendipity['expose_s9y']) serendipity_header('X-Serendipity-InterfaceLangSource: Database');
         $lang = $serendipity['lang'];
+    } else {
+        $lang = (isset($_SESSION['serendipityLanguage']))?$_SESSION['serendipityLanguage']:$serendipity['lang'];
     }
 
-    if (!isset($lang) || !isset($serendipity['languages'][$lang])) {
+    if (!isset($serendipity['languages'][$lang])) {
         $lang = $serendipity['lang'];
     }
 
+    $_SESSION['serendipityLanguage'] = $lang;
+
     if ($serendipity['expose_s9y']) serendipity_header('X-Serendipity-InterfaceLang: ' . $lang);
 
     if ($lang != $serendipity['lang']) {
index cd033f3674a2a553b033724df20f8009aa9b04f0..0ecf000a780592b6446f605731bfc3a5a0206300 100644 (file)
@@ -251,6 +251,7 @@ if (!serendipity_db_connect()) {
  */
 
 serendipity_load_configuration();
+$serendipity['lang'] = serendipity_getSessionLanguage();
 
 /*
  * If a user is logged in, fetch his preferences. He possibly wants to have a different language
@@ -281,10 +282,9 @@ if (IS_installed === true) {
 
 if (isset($_SESSION['serendipityAuthorid'])) {
     serendipity_load_configuration($_SESSION['serendipityAuthorid']);
+    $serendipity['lang'] = serendipity_getPostAuthSessionLanguage();
 }
 
-$serendipity['lang'] = serendipity_getSessionLanguage(); // @see function declaration for todo
-
 // Try to fix some path settings. It seems common users have this setting wrong
 // when s9y is installed into the root directory, especially 0.7.1 upgrade users.
 if (empty($serendipity['serendipityHTTPPath'])) {