From 4190d45633774dd78a4814e96fc78bcb2d21235d Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 3 May 2007 21:21:56 +0000
Subject: [PATCH] =?UTF-8?q?M=C3=A9nage=20dans=20les=20langues?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* bug qui faisait qu'à l'install la langue du visiteur n'était pas prise en compte;

* bug sur le changement de langue dans l'espace privé qui n'était pas mémorisé dans le fichier de session;

* migration dans vielles_def des globales all_langs et langue_site, qui doublonnait avec des metas.
---
 ecrire/action/configurer.php         |  1 -
 ecrire/action/test_dirs.php          |  5 ++--
 ecrire/balise/menu_lang_ecrire.php   |  3 +-
 ecrire/configuration/langue.php      |  3 +-
 ecrire/configuration/locuteur.php    |  2 +-
 ecrire/configuration/transcodeur.php |  1 -
 ecrire/exec/install.php              |  8 ++---
 ecrire/inc/commencer_page.php        |  2 +-
 ecrire/inc/config.php                |  8 ++---
 ecrire/inc/lang.php                  | 45 +++++++++++++++-------------
 ecrire/inc/utils.php                 | 16 ++--------
 ecrire/inc/vieilles_defs.php         |  5 +++-
 ecrire/index.php                     |  2 +-
 ecrire/install/etape_.php            |  1 +
 14 files changed, 46 insertions(+), 56 deletions(-)

diff --git a/ecrire/action/configurer.php b/ecrire/action/configurer.php
index fb9d7d4900..e54fdcd30d 100644
--- a/ecrire/action/configurer.php
+++ b/ecrire/action/configurer.php
@@ -17,7 +17,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // on traite a part seulement le cas du proxy car c'est indispensable
 // (message d'erreur eventuel a afficher)
 
-include_spip('inc/lang');
 include_spip('inc/config');
 
 // http://doc.spip.org/@action_configurer_dist
diff --git a/ecrire/action/test_dirs.php b/ecrire/action/test_dirs.php
index 0d2cf47df4..99fa338dd4 100644
--- a/ecrire/action/test_dirs.php
+++ b/ecrire/action/test_dirs.php
@@ -16,6 +16,7 @@ if (defined("_TEST_DIRS")) return;
 define("_TEST_DIRS", "1");
 
 include_spip('inc/minipres');
+#include_spip('inc/headers'); // fait dans inc/public
 utiliser_langue_visiteur();
 
 //
@@ -133,9 +134,9 @@ function action_test_dirs_dist()
 
  } else {
 	if (!_FILE_CONNECT)
-	  header("Location: " . generer_url_ecrire("install", "etape=1&chmod=".$chmod, true));
+	  redirige_par_entete(generer_url_ecrire("install", "etape=1&chmod=".$chmod, true));
 	else
-		header("Location: " . _DIR_RESTREINT_ABS);
+		redirige_par_entete(_DIR_RESTREINT_ABS);
  }
 }
 ?>
diff --git a/ecrire/balise/menu_lang_ecrire.php b/ecrire/balise/menu_lang_ecrire.php
index 6cdb74f047..5f630de55c 100644
--- a/ecrire/balise/menu_lang_ecrire.php
+++ b/ecrire/balise/menu_lang_ecrire.php
@@ -25,9 +25,8 @@ function balise_MENU_LANG_ECRIRE ($p) {
 // s'il n'y a qu'une langue proposee eviter definitivement la balise ?php 
 // http://doc.spip.org/@balise_MENU_LANG_ECRIRE_stat
 function balise_MENU_LANG_ECRIRE_stat ($args, $filtres) {
-	global $all_langs;
 	include_spip('inc/lang');
-	if (strpos($all_langs,',') === false) return '';
+	if (strpos($GLOBALS['meta']['langues_proposees'],',') === false) return '';
 	return $filtres ? $filtres : $args;
 }
 
diff --git a/ecrire/configuration/langue.php b/ecrire/configuration/langue.php
index 0d17206752..1bfdfd28e4 100644
--- a/ecrire/configuration/langue.php
+++ b/ecrire/configuration/langue.php
@@ -16,7 +16,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Configuration i18n
 //
 
-include_spip('inc/lang');
 include_spip('inc/presentation');
 
 function configuration_langue_dist()
@@ -26,7 +25,7 @@ function configuration_langue_dist()
 
  $res = "<option value='$l_site' selected='selected'>$langue_site</option>\n";
  
- foreach (split(",",$GLOBALS['all_langs']) as $l) {
+ foreach (split(",",$GLOBALS['meta']['langues_proposees']) as $l) {
 	if ($l <> $l_site)
 		$res .= "<option value='$l'>".traduire_nom_langue($l)."</option>\n";
  }
diff --git a/ecrire/configuration/locuteur.php b/ecrire/configuration/locuteur.php
index 9f4d2c7307..515a83220e 100644
--- a/ecrire/configuration/locuteur.php
+++ b/ecrire/configuration/locuteur.php
@@ -23,7 +23,7 @@ function configuration_locuteur_dist()
 	$langues = $GLOBALS['codes_langues'];
 	$cesure = floor((count($langues) + 1) / 2);
 
-	$langues_installees = explode(',', $GLOBALS['all_langs']);
+	$langues_installees = explode(',', $GLOBALS['meta']['langues_proposees']);
 	$langues_autorisees = explode(',', $GLOBALS['meta']['langues_multilingue']);
 
 	while (list(,$l) = each ($langues_installees)) {
diff --git a/ecrire/configuration/transcodeur.php b/ecrire/configuration/transcodeur.php
index c7234de494..f9efc3b69f 100644
--- a/ecrire/configuration/transcodeur.php
+++ b/ecrire/configuration/transcodeur.php
@@ -12,7 +12,6 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-include_spip('inc/lang');
 include_spip('inc/presentation');
 
 function configuration_transcodeur_dist()
diff --git a/ecrire/exec/install.php b/ecrire/exec/install.php
index 7884a55476..f1e497f260 100644
--- a/ecrire/exec/install.php
+++ b/ecrire/exec/install.php
@@ -26,13 +26,11 @@ function exec_install_dist()
 	} else {
 
 	// On va supprimer les eventuelles vieilles valeurs de meta,
-	// mais il faut relancer init_langues pour savoir quelles
-	// sont les langues disponibles pour l'installation
+	// mais du coup on perd le boulout qui vient d'etre fait par init_langues
+	// qu'il faut donc relancer (pour langue_site et langues_proposees)
 	@unlink(_FILE_META);
-	unset($GLOBALS['meta']);
-	include_spip('inc/lang'); // contient du code en ligne
+	$GLOBALS['meta'] = array();
 	init_langues();
-
 	include_spip('base/create');
 	include_spip('base/db_mysql');
 
diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php
index 3d5a0a01b4..3a1cecdc8a 100644
--- a/ecrire/inc/commencer_page.php
+++ b/ecrire/inc/commencer_page.php
@@ -157,7 +157,7 @@ function init_body($rubrique='accueil', $sous_rubrique='accueil', $id_rubrique='
 		. "</div></li>";
 
 		// choix de la langue
-		if ($GLOBALS['all_langs']) {
+		if ($GLOBALS['meta']['langues_proposees']) {
 			$res .= "<li id='bandeau_couleur5' class='bandeau_couleur'><div class='menu-item'>"
 			. menu_langues('var_lang_ecrire')
 			. "</div></li>";
diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php
index 12eef713b0..3fbb483e5b 100644
--- a/ecrire/inc/config.php
+++ b/ecrire/inc/config.php
@@ -16,12 +16,10 @@ include_spip('inc/meta');
 
 //
 // Appliquer les valeurs par defaut pour les options non initialisees
+// (pour les langues c'est fait)
 //
 // http://doc.spip.org/@init_config
 function init_config() {
-	// langue par defaut du site = langue d'installation (cookie spip_lang) sinon francais
-	if (!$lang = $GLOBALS['spip_lang'])
-		$lang = 'fr';
 
 	$liste_meta = array(
 		'nom_site' => _T('info_mon_site_spip'),
@@ -70,13 +68,10 @@ function init_config() {
 		'creer_htpasswd' => 'non',
 		'creer_htaccess' => 'non',
 
-		'langue_site' => $lang,
-
 		'multi_articles' => 'non',
 		'multi_rubriques' => 'non',
 		'multi_secteurs' => 'non',
 		'gerer_trad' => 'non',
-		'langues_multilingue' => $GLOBALS['all_langs']
 	);
 	while (list($nom, $valeur) = each($liste_meta)) {
 		if (!$GLOBALS['meta'][$nom]) {
@@ -293,6 +288,7 @@ function appliquer_modifs_config() {
 	// langue_site : la globale est mangee par inc_version
 	if ($lang = $GLOBALS['changer_langue_site']) {
 		$lang2 = $GLOBALS['spip_lang'];
+		include_spip('inc/lang');
 		if (changer_langue($lang)) {
 			ecrire_meta('langue_site', $lang);
 			changer_langue($lang2);
diff --git a/ecrire/inc/lang.php b/ecrire/inc/lang.php
index e222fdd2e9..52f5cda353 100644
--- a/ecrire/inc/lang.php
+++ b/ecrire/inc/lang.php
@@ -19,9 +19,10 @@ include_spip('inc/actions');
 //
 // http://doc.spip.org/@changer_langue
 function changer_langue($lang) {
-	global $all_langs, $spip_lang_rtl, $spip_lang_right, $spip_lang_left;
+	global $spip_lang_rtl, $spip_lang_right, $spip_lang_left;
 
-	$liste_langues = ',' . $all_langs.','.@$GLOBALS['meta']['langues_multilingue'] . ',';
+	$liste_langues = ',' . @$GLOBALS['meta']['langues_proposees']
+	. ',' . @$GLOBALS['meta']['langues_multilingue'] . ',';
 
 	// Si la langue demandee n'existe pas, on essaie d'autres variantes
 	// Exemple : 'pt-br' => 'pt_br' => 'pt'
@@ -289,38 +290,42 @@ function repertoire_lang($module='spip', $lang='fr') {
 }
 
 //
-// Initialisation
+// Initialisation de
+// - la meta langues proposees (qui ne change pas)
+// - la globale spip_lang: langue courante (qui peut changer)
 //
 // http://doc.spip.org/@init_langues
 function init_langues() {
-	global $all_langs, $langue_site,  $lang_dir;
+	global $spip_lang;
+
+	// liste des langues dans les meta, sauf a l'install
 
 	$all_langs = @$GLOBALS['meta']['langues_proposees'];
-	$lang_dir = '';
 
-	$toutes_langs = Array();
-	if (!$all_langs || !$langue_site || !_DIR_RESTREINT) {
+	$tout = array();
+	if (!$all_langs || !isset($GLOBALS['meta']['langue_site']) || !_DIR_RESTREINT) {
 		if (!$d = @opendir(repertoire_lang())) return;
 		while (($f = readdir($d)) !== false) {
 			if (preg_match(',^spip_([a-z_]+)\.php[3]?$,', $f, $regs))
-				$toutes_langs[] = $regs[1];
+				$tout[] = $regs[1];
 		}
 		closedir($d);
-		sort($toutes_langs);
-		$all_langs2 = join(',', $toutes_langs);
+		sort($tout);
+		if (!isset($GLOBALS['meta']['langue_site'])) {
+// Initialisation : le francais si dispo, sinon la premiere langue trouvee
+			$spip_lang = $GLOBALS['meta']['langue_site'] =
+			(strpos(',fr,',",$all_langs,")!==false)
+			? 'fr' :  $tout[0];
+			ecrire_meta('langue_site', $spip_lang);
+		}
+		$tout = join(',', $tout);
 		// Si les langues n'ont pas change, ne rien faire
-		if ($all_langs2 != $all_langs) {
+		if ($tout != $all_langs) {
 			include_spip('inc/meta');
-			$all_langs = $all_langs2;
-			if (!$langue_site) {
-				// Initialisation : le francais par defaut, sinon la premiere langue trouvee
-				if (strpos(',fr,',",$all_langs,")!==false) $langue_site = 'fr';
-				else list(, $langue_site) = each($toutes_langs);
-				ecrire_meta('langue_site', $langue_site);
-			}
-			ecrire_meta('langues_proposees', $all_langs);
-			ecrire_metas();
+			$GLOBALS['meta']['langues_proposees'] =	$tout;
+			ecrire_meta('langues_proposees', $tout);
 		}
+		ecrire_metas();
 	}
 }
 
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f28b83a7ff..64fd6c253f 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1268,22 +1268,12 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 			include_spip('inc/acces');
 			renouvelle_alea();
 		}
+		// s'il y a un cookie ou PHP_AUTH, initialiser auteur_session
+		verifier_visiteur();
 	}
 
-	// La meta est indefinie a la premiere installation
-	$GLOBALS['langue_site'] = @$GLOBALS['meta']['langue_site'];
-	
-	// Langue principale du site
-
-	if (!isset($GLOBALS['langue_site'])) include_spip('inc/lang');
-	$GLOBALS['spip_lang'] = $GLOBALS['langue_site'];
-
-	// Verifier le visiteur
-	if (_FILE_CONNECT) verifier_visiteur();
-
 	# nombre de pixels maxi pour calcul de la vignette avec gd
 	define('_IMG_GD_MAX_PIXELS', isset($GLOBALS['meta']['max_taille_vignettes'])?$GLOBALS['meta']['max_taille_vignettes']:0); 
-
 }
 
 // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ;
@@ -1331,7 +1321,7 @@ function verifier_visiteur() {
 // selectionne la langue donnee en argument et memorise la courante
 // ou restaure l'ancienne si appel sans argument
 // On pourrait economiser l'empilement en cas de non changemnt
-// et lui faire retour False pour prevenir l'appelant
+// et lui faire retourner False pour prevenir l'appelant
 // Le noyau de Spip sait le faire, mais pour assurer la compatibilite
 // cette fonction retourne toujours non False
 
diff --git a/ecrire/inc/vieilles_defs.php b/ecrire/inc/vieilles_defs.php
index 66329831c4..7da2b5f632 100644
--- a/ecrire/inc/vieilles_defs.php
+++ b/ecrire/inc/vieilles_defs.php
@@ -244,9 +244,12 @@ function lang_dselect () {
 // toujours disponible pour PHP > 4.0.1
 $GLOBALS['flag_revisions'] = function_exists("gzcompress");
 
-// eviter de planter les plugins qui le testent
+// toujours a cette valeur a present
 $GLOBALS['options'] = 'avancees';
 
+// synonyme plus jamais utile
+$GLOBALS['langue_site'] = $GLOBALS['meta']['langue_site'];
+$GLOBALS['all_langs'] = @$GLOBALS['meta']['langues_proposees'];
 // http://doc.spip.org/@generer_url_post_ecrire
 function generer_url_post_ecrire($script, $args='', $name='', $ancre='', $onchange='') {
 	spip_log("generer_url_post_ecrire utiliser generer_form_ecrire");
diff --git a/ecrire/index.php b/ecrire/index.php
index 04eafd7546..7da696081f 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -94,7 +94,7 @@ if (isset($_COOKIE['spip_lang_ecrire'])) {
 	else {	if (($spip_lang_ecrire <> $GLOBALS['auteur_session']['lang'])
 		AND changer_langue($spip_lang_ecrire)) {
 			spip_query("UPDATE spip_auteurs SET lang = " . _q($spip_lang_ecrire) . " WHERE id_auteur = " . intval($GLOBALS['auteur_session']['id_auteur']));
-			$GLOBALS['auteur_session']['lang'] = $var_lang_ecrire;
+			$GLOBALS['auteur_session']['lang'] = $spip_lang_ecrire;
 			$session = charger_fonction('session', 'inc');
 			$session($GLOBALS['auteur_session']);
 		}
diff --git a/ecrire/install/etape_.php b/ecrire/install/etape_.php
index 4c2a0c7f4d..294ff94d84 100644
--- a/ecrire/install/etape_.php
+++ b/ecrire/install/etape_.php
@@ -18,6 +18,7 @@ function install_etape__dist()
 	global $spip_lang_right;
 
 	include_spip('inc/headers');
+	utiliser_langue_visiteur();
 	$menu_langues = menu_langues('var_lang_ecrire');
 	if (!$menu_langues) {
 		redirige_par_entete(generer_test_dirs());
-- 
GitLab