From 9d8b44a7ba252eb758ef96a0c3d2a6a22908e9e5 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 31 Mar 2006 17:07:57 +0000
Subject: [PATCH] =?UTF-8?q?Incoh=C3=A9rences=20dans=20la=20mise=20=C3=A0?=
 =?UTF-8?q?=20jour=20des=20pr=C3=A9f=C3=A9rences=20pour=20l'authentificati?=
 =?UTF-8?q?on=20sans=20cookie.=20Tant=20qu'=C3=A0=20faire=20partager=20le?=
 =?UTF-8?q?=20code.=20Et=20retirer=20des=20includes=20superflus.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/action/cookie.php | 10 +++-------
 ecrire/inc/session.php   | 17 +++++++++++++++--
 ecrire/inc/utils.php     |  2 +-
 ecrire/index.php         | 17 ++++++-----------
 4 files changed, 25 insertions(+), 21 deletions(-)

diff --git a/ecrire/action/cookie.php b/ecrire/action/cookie.php
index 96bc674116..106057dc66 100644
--- a/ecrire/action/cookie.php
+++ b/ecrire/action/cookie.php
@@ -221,9 +221,8 @@ if ($cookie_session) {
 
 	$prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array();
 	$prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
-	spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = ".$row_auteur['id_auteur']);
-
-}
+	update_prefs_session($prefs, $row_auteur['id_auteur']);
+ }
 
 // changement de langue espace public
 if ($var_lang) {
@@ -244,11 +243,8 @@ if ($var_lang_ecrire) {
 	spip_setcookie('spip_lang', $var_lang_ecrire, time() + 365 * 24 * 3600);
 
 	if (_FILE_CONNECT AND $id_auteur) {
-		include_spip('inc/admin');
 		if (verifier_action_auteur('var_lang_ecrire', $valeur, $id_auteur)) {
-			spip_query ("UPDATE spip_auteurs SET lang = '".addslashes($var_lang_ecrire)."' WHERE id_auteur = ".$id_auteur);
-			$auteur_session['lang'] = $var_lang_ecrire;
-			ajouter_session($auteur_session, $spip_session);	// enregistrer dans le fichier de session
+			ajouter_session($auteur_session, $spip_session, $var_lang_ecrire);
 		}
 	}
 
diff --git a/ecrire/inc/session.php b/ecrire/inc/session.php
index bd4969584d..75c1e10844 100644
--- a/ecrire/inc/session.php
+++ b/ecrire/inc/session.php
@@ -44,7 +44,16 @@ function fichier_session($id_session, $alea) {
 //
 // Ajouter une session pour l'auteur specifie
 //
-function ajouter_session($auteur, $id_session) {
+function ajouter_session($auteur, $id_session, $lang='') {
+
+	global $connect_id_auteur, $auteur_session;
+
+	if ($lang) {
+		spip_query ("UPDATE spip_auteurs SET lang = '".	addslashes($lang) .
+				"' WHERE id_auteur = $connect_id_auteur");
+		$auteur_session['lang'] = $lang;
+	}
+
 	renouvelle_alea();
 	$fichier_session = fichier_session($id_session, $GLOBALS['meta']['alea_ephemere']);
 	$vars = array('id_auteur', 'nom', 'login', 'email', 'statut', 'lang', 'ip_change', 'hash_env');
@@ -60,6 +69,11 @@ function ajouter_session($auteur, $id_session) {
 		redirige_par_entete(generer_url_action('test_dirs','',true));
 }
 
+function update_prefs_session($prefs, $id_auteur)
+{
+	spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = $id_auteur");
+}
+
 //
 // Verifier et inclure une session
 //
@@ -236,7 +250,6 @@ function renouvelle_alea()
 {
 	if (abs(time() -  $GLOBALS['meta']['alea_ephemere_date']) > 2 * 24*3600) {
 	  	spip_log("renouvellement de l'alea_ephemere");
-		include_spip('inc/session');
 		$alea = md5(creer_uniqid());
 		ecrire_meta('alea_ephemere_ancien', $GLOBALS['meta']['alea_ephemere']);
 		ecrire_meta('alea_ephemere', $alea);
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 63c7a96890..66d948eea0 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -638,7 +638,7 @@ function find_in_path ($filename) {
 
 function autoriser_sans_cookie($nom)
 {
-  static $autsanscookie = array('aide_index', 'install', 'admin_repair', 'spip_cookie');
+  static $autsanscookie = array('aide_index', 'install', 'admin_repair');
   $nom = preg_replace('/.php[3]?$/', '', basename($nom));
   return in_array($nom, $autsanscookie);
 }
diff --git a/ecrire/index.php b/ecrire/index.php
index 4eee1d1dc9..8f5b3cfbbe 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -78,15 +78,15 @@ if (!preg_match(',^[a-z][0-9a-z_]*$,i', $exec)) $exec = "accueil";
 // Authentification, redefinissable
 //
 
-$var_auth ="";
 if (autoriser_sans_cookie($exec)) {
 	if (!isset($reinstall)) $reinstall = 'non';
+	$var_auth = true;
 } else {
 	include_spip('inc/session');
 	$var_auth = charger_fonction('auth', 'inc');
 	$var_auth = $var_auth();
 	if ($var_auth) redirige_par_entete($var_auth);
-}
+ }
 
 //
 // Preferences de presentation
@@ -104,9 +104,8 @@ if ($set_options == 'avancees' OR $set_options == 'basiques') {
 	$prefs['options'] = $set_options;
 	$prefs_mod = true;
 }
-if ($prefs_mod) {
-	spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = $connect_id_auteur");
-}
+if ($prefs_mod AND !$var_auth)
+	update_prefs_session($prefs, $connect_id_auteur);
 
 if ($set_ecran) {
 	// Poser un cookie, car ce reglage depend plus du navigateur que de l'utilisateur
@@ -141,16 +140,12 @@ include_spip('inc/minipres');
 if ($spip_lang_ecrire = $GLOBALS['_COOKIE']['spip_lang_ecrire']) {
 
 	// si pas authentifie, changer juste pour cette execution
-	if (!$var_auth)
+	if ($var_auth)
 		changer_langue($spip_lang_ecrire);
 	// si authentifie, changer definitivement si ce n'est fait
 	else {	if (($spip_lang_ecrire <> $auteur_session['lang'])
 		AND changer_langue($spip_lang_ecrire)) {
-			spip_query ("UPDATE spip_auteurs SET lang = '".
-				addslashes($spip_lang_ecrire) .
-				"' WHERE id_auteur = $connect_id_auteur");
-			$auteur_session['lang'] = $spip_lang_ecrire;
-			ajouter_session($auteur_session, $spip_session);
+		ajouter_session($auteur_session, $spip_session, $spip_lang_ecrire);
 	       }
 	}
  }
-- 
GitLab