From 9ac0301af592b73a45fd95a2b26fe8868ec0c2df Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Sat, 13 Mar 2010 10:40:23 +0000
Subject: [PATCH] Report de [15444] [15449] [15451] [15452] [15454] [15456]
 [15457] [15458] [15459] [15460] [15462]

---
 ecrire/exec/articles.php    | 22 +++++++++++++++++
 ecrire/inc/lang.php         |  7 ++++--
 ecrire/inc/lien.php         |  2 +-
 ecrire/inc/utils.php        | 49 +++++++++++++++++++++----------------
 ecrire/inc_version.php      |  2 +-
 ecrire/public.php           | 24 +++++++++---------
 ecrire/public/assembler.php |  2 +-
 ecrire/public/cacher.php    |  5 ++--
 8 files changed, 74 insertions(+), 39 deletions(-)

diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index 478227af8a..4d1325c25f 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -141,6 +141,7 @@ function articles_affiche($id_article, $row, $cherche_auteur, $ids, $cherche_mot
 	  . (!$editer_mots ? '' : $editer_mots('article', $id_article, $cherche_mot, $select_groupe, $flag_editable, false, 'articles'))
 	  . (!$referencer_traduction ? '' : $referencer_traduction($id_article, $flag_editable, $id_rubrique, $id_trad, $trad_err))
 	  . pipeline('affiche_milieu',array('args'=>array('exec'=>'articles','id_article'=>$id_article),'data'=>''))
+		. bouton_proposer_article($id_article,$statut_article)
 	  ;
 
 	$onglet_documents = articles_documents('article', $id_article);
@@ -325,4 +326,25 @@ function afficher_corps_articles($id_article, $virtuel, $row)
 	return $res;
 }
 
+function bouton_proposer_article($id_article,$statut_article){
+	$ret = "";
+
+	if ($statut_article=='prepa'
+		AND $id_auteur = $GLOBALS["visiteur_session"]["id_auteur"]
+		AND $GLOBALS["visiteur_session"]["statut"] == "1comite"
+		AND autoriser('modifier', 'article', $id_article)
+		AND sql_fetsel("id_article", "spip_auteurs_articles", "id_article=".intval($id_article)." AND id_auteur=".intval($id_auteur))) {
+			$ret .= debut_cadre_relief("", true);
+			$ret .= "<div class='verdana3' style='text-align: center;'>";
+			$ret .= "<div>"._T("texte_proposer_publication")."</div>";
+
+			$ret .= bouton_action(_T("bouton_demande_publication"),
+							generer_action_auteur('instituer_article', "$id_article-prop", self()), '', _T('confirm_changer_statut'));
+
+			$ret .= "</div>";
+			$ret .= fin_cadre_relief(true);
+
+	}
+	return $ret;
+}
 ?>
diff --git a/ecrire/inc/lang.php b/ecrire/inc/lang.php
index 15860d21b5..18edb4d3c4 100644
--- a/ecrire/inc/lang.php
+++ b/ecrire/inc/lang.php
@@ -12,7 +12,6 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-include_spip('inc/actions');
 
 //
 // Changer la langue courante
@@ -138,6 +137,7 @@ function changer_typo($lang = '') {
 // 
 // http://doc.spip.org/@menu_langues
 function menu_langues($nom_select) {
+	include_spip('inc/actions');
 
 	$ret = liste_options_langues($nom_select);
 
@@ -265,7 +265,10 @@ function verifier_lang_url() {
 //
 // http://doc.spip.org/@utiliser_langue_site
 function utiliser_langue_site() {
-	return changer_langue(@$GLOBALS['meta']['langue_site']);//@:install
+	if (isset($GLOBALS['meta']['langue_site'])
+	  AND $GLOBALS['spip_lang']!=$GLOBALS['meta']['langue_site'])
+		return changer_langue($GLOBALS['meta']['langue_site']);//@:install
+	return $GLOBALS['spip_lang'];
 }
 
 // http://doc.spip.org/@utiliser_langue_visiteur
diff --git a/ecrire/inc/lien.php b/ecrire/inc/lien.php
index 3e656fee0c..531e78ae4f 100644
--- a/ecrire/inc/lien.php
+++ b/ecrire/inc/lien.php
@@ -319,7 +319,7 @@ function traiter_lien_implicite ($ref, $texte='', $pour='url', $connect='')
 	}
 	if ($pour === 'url') return $url;
 	$r = traiter_raccourci_titre($id, $type, $connect);
-	if ($r) $r['class'] =  'spip_in';
+	if ($r) $r['class'] =  ($type == 'site')?'spip_out':'spip_in';
 	if ($texte = trim($texte)) $r['titre'] = $texte;
 	if (!@$r['titre']) $r['titre'] =  _T($type) . " $id";
 	if ($pour=='titre') return $r['titre'];
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 9a66b74c32..8683e331d4 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -499,9 +499,6 @@ function action_cron() {
 // http://doc.spip.org/@cron
 function cron ($gourmand=false, $taches= array()) {
 
-	// Si base inaccessible, laisser tomber.
-	if (!spip_connect()) return false;
-
 	// Si on est gourmand, ou si le fichier gourmand n'existe pas
 	// ou est trop vieux (> 60 sec), on va voir si un cron est necessaire.
 	// Au passage si on est gourmand on le dit aux autres
@@ -516,6 +513,9 @@ function cron ($gourmand=false, $taches= array()) {
 
 	if (spip_touch(_DIR_TMP.'cron.lock',
 			(is_int($gourmand) ? $gourmand : 2))) {
+			// Si base inaccessible, laisser tomber.
+			if (!spip_connect()) return false;
+
 			$genie = charger_fonction('genie', 'inc', true);
 			if ($genie) {
 				$genie($taches);
@@ -601,19 +601,20 @@ function _chemin($dir_path=NULL){
 	if ($dir_path===NULL) return $path_full;
 
 	if (strlen($dir_path)){
-		if ($dir_path{0}!='/')
-			$dir_path = $dir_path;
-		if (substr($dir_path,-1) != '/')
-			$dir_path .= "/";
-		if (!in_array($dir_path,$path_base)){
-			$tete = "";
-			if (reset($path_base)==_DIR_RACINE.'squelettes/')
-				$tete = array_shift($path_base);
-
-			array_unshift($path_base,$dir_path);
-			if (strlen($tete))
-				array_unshift($path_base,$tete);
+		$tete = "";
+		if (reset($path_base)==_DIR_RACINE.'squelettes/')
+			$tete = array_shift($path_base);
+		$dirs = array_reverse(explode(':',$dir_path));
+		foreach($dirs as $dir_path){
+				#if ($dir_path{0}!='/')
+				#	$dir_path = $dir_path;
+				if (substr($dir_path,-1) != '/')
+					$dir_path .= "/";
+				if (!in_array($dir_path,$path_base))
+					array_unshift($path_base,$dir_path);
 		}
+		if (strlen($tete))
+			array_unshift($path_base,$tete);
 	}
 	$path_full = $path_base;
 	// Et le(s) dossier(s) des squelettes nommes
@@ -767,9 +768,15 @@ function load_path_cache(){
 		//AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo')
 		AND !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin'])
 		){
-		lire_fichier(_CACHE_CHEMIN,$contenu);
-		if (!$GLOBALS['path_files']=unserialize($contenu))
-			$GLOBALS['path_files'] = array();
+		// on essaye de lire directement sans verrou pour aller plus vite
+		if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)){
+			// mais si semble corrompu on relit avec un verrou
+			if (!$GLOBALS['path_files']=unserialize($contenu)){
+				lire_fichier(_CACHE_CHEMIN,$contenu);
+				if (!$GLOBALS['path_files']=unserialize($contenu))
+					$GLOBALS['path_files'] = array();
+			}
+		}
 	}
 	// pas de sauvegarde du chemin si on est pas dans le public
 	if (!_DIR_RESTREINT)
@@ -1257,9 +1264,6 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 	spip_desinfecte($_POST);
 	spip_desinfecte($_COOKIE);
 	spip_desinfecte($_REQUEST);
-	// ne pas desinfecter les globales en profondeur car elle contient aussi les
-	// precedentes, qui seraient desinfectees 2 fois.
-	spip_desinfecte($GLOBALS,false);
 
 	// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
 	@set_magic_quotes_runtime(0);
@@ -1269,6 +1273,9 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 	// il faut faire quelques verifications de base
 	if ($x = test_valeur_serveur(@ini_get('register_globals'))
 	OR  _FEED_GLOBALS) {
+		// ne pas desinfecter les globales en profondeur car elle contient aussi les
+		// precedentes, qui seraient desinfectees 2 fois.
+		spip_desinfecte($GLOBALS,false);
 		include_spip('inc/php3');
 		spip_register_globals($x);
 	}
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index efc39dd248..ad9ee024bd 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -383,7 +383,7 @@ $liste_des_authentifications = array(
 
 // Experimental : pour supprimer systematiquement l'affichage des numeros
 // de classement des titres, recopier la ligne suivante dans mes_options :
-# $table_des_traitements['TITRE'][]= 'typo(supprimer_numero(%s))';
+# $table_des_traitements['TITRE'][]= 'typo(supprimer_numero(%s), "TYPO", $connect)';
 
 // Droits d'acces maximum par defaut
 @umask(0);
diff --git a/ecrire/public.php b/ecrire/public.php
index 7cff5d4e4b..3214513538 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -86,17 +86,19 @@ if (isset($GLOBALS['_INC_PUBLIC'])) {
 
 	// Charger l'aiguilleur des traitements derogatoires
 	// (action en base SQL, formulaires CVT, AJax)
-	include_spip('public/aiguiller');
-	if (
-		// cas des appels actions ?action=xxx
-		traiter_appels_actions()
-	OR
-		// cas des hits ajax sur les inclusions ajax
-		traiter_appels_inclusions_ajax()
-	 OR 
-	 	// cas des formulaires charger/verifier/traiter
-	  traiter_formulaires_dynamiques())
-	  exit; // le hit est fini !
+	if (_request('action') OR _request('var_ajax') OR _request('formulaire_action')){
+		include_spip('public/aiguiller');
+		if (
+			// cas des appels actions ?action=xxx
+			traiter_appels_actions()
+		OR
+			// cas des hits ajax sur les inclusions ajax
+			traiter_appels_inclusions_ajax()
+		 OR
+			// cas des formulaires charger/verifier/traiter
+			traiter_formulaires_dynamiques())
+			exit; // le hit est fini !
+	}
 
 	// si signature de petition, l'enregistrer avant d'afficher la page
 	// afin que celle-ci contienne la signature
diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index 6217d2ec22..faa96106f4 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -201,7 +201,7 @@ function calculer_contexte_implicite(){
 	if (is_null($notes))
 		$notes = charger_fonction('notes','inc');
 	$contexte_implicite = array(
-		'squelettes' => $GLOBALS['dossier_squelettes'],
+		'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
 		'host' => $_SERVER['HTTP_HOST'],
 		'marqueur' => (isset($GLOBALS['marqueur']) ?  $GLOBALS['marqueur'] : ''),
 		'notes' => $notes('','contexter_cache'),
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index e20fcb03a9..812a2c81db 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -229,9 +229,11 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la
 
 	// Toute la suite correspond au premier appel
 
+	$contexte_implicite = $page['contexte_implicite'];
+
 	// Cas ignorant le cache car completement dynamique
 	if ($_SERVER['REQUEST_METHOD'] == 'POST'
-	OR (substr($page,0,8)=='modeles/') 
+	OR (substr($contexte_implicite['cache'],0,8)=='modeles/') 
 	OR (_request('connect'))
 // Mode auteur authentifie appelant de ecrire/ : il ne faut rien lire du cache
 // et n'y ecrire que la compilation des squelettes (pas les pages produites)
@@ -247,7 +249,6 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la
 	// Controler l'existence d'un cache nous correspondant, dans les
 	// deux versions possibles : session ou non
 	$chemin_cache = generer_nom_fichier_cache($contexte, $page);
-	$contexte_implicite = $page['contexte_implicite'];
 	$lastmodified = 0;
 	if (!lire_fichier(_DIR_CACHE . ($f = $chemin_cache), $page))
 		$fs = lire_fichier(_DIR_CACHE . ($f = cache_sessionne($f, spip_session())), $page);
-- 
GitLab