From 5a0c73c95bc6f3f05265e8fbdf9fdd2ba5b592a6 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Wed, 24 Jun 2009 20:59:40 +0000
Subject: [PATCH] Report de [14127] [14128] [14129] [14130] [14131] [14132]
 [14133]

---
 ecrire/action/editer_site.php    |  4 ++--
 ecrire/inc/ajouter_documents.php |  2 +-
 ecrire/inc/filtres_mini.php      | 15 +++++++++------
 ecrire/inc/import.php            | 10 +++++++++-
 ecrire/inc/invalideur.php        |  4 ++--
 ecrire/index.php                 | 10 ++++++++--
 ecrire/public/assembler.php      | 14 +++++++++-----
 7 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php
index 4b1fe2c3e9..994c72744d 100644
--- a/ecrire/action/editer_site.php
+++ b/ecrire/action/editer_site.php
@@ -74,8 +74,8 @@ function action_editer_site_dist() {
 			OR !$t) {
 				if ($auto = vider_url(_request('url_auto'))) {
 					$auto = analyser_site($auto);
-					revisions_sites($id_syndic,
-					array('descriptif' => $auto['descriptif']));
+					if (!strlen($t) AND strlen($auto['descriptif']))
+						revisions_sites($id_syndic, array('descriptif' => $auto['descriptif']));
 				}
 				if (!$logo
 				AND $auto['logo'] AND $auto['format_logo'])
diff --git a/ecrire/inc/ajouter_documents.php b/ecrire/inc/ajouter_documents.php
index 44a15b7f9e..14b0347ae2 100644
--- a/ecrire/inc/ajouter_documents.php
+++ b/ecrire/inc/ajouter_documents.php
@@ -430,7 +430,7 @@ function traite_svg($file)
 // mysql> SELECT * FROM spip_types_documents WHERE extension="pdf ";
 // http://doc.spip.org/@corriger_extension
 function corriger_extension($ext) {
-	$ext = preg_replace(',[^a-z0-9],', '', $ext);
+	$ext = preg_replace(',[^a-z0-9],i', '', $ext);
 	switch ($ext) {
 	case 'docx':
 		return 'doc';
diff --git a/ecrire/inc/filtres_mini.php b/ecrire/inc/filtres_mini.php
index c5cb383622..4e094f6673 100644
--- a/ecrire/inc/filtres_mini.php
+++ b/ecrire/inc/filtres_mini.php
@@ -44,26 +44,29 @@ function suivre_lien($url, $lien) {
 		return $lien;
 	if (preg_match(',^([a-z0-9]+://.*?)(/.*)?$,iS', $lien, $r))
 		return $r[1].resolve_path($r[2]);
-	
+
 	# L'url site spip est un lien absolu aussi
 	if ($lien == $GLOBALS['meta']['adresse_site']){
 		return $lien;
 	}
-	
+
 	# lien relatif, il faut verifier l'url de base
-	if (preg_match(',^(.*?://[^/]+)(/.*?/?)?([^/#]*)(#.*)?$,S', $url, $regs)) {
+	# commencer par virer la chaine de get de l'url de base
+	if (preg_match(',^(.*?://[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$,S', $url, $regs)) {
 		$debut = $regs[1];
 		$dir = !strlen($regs[2]) ? '/' : $regs[2];
 		$mot = $regs[3];
-		$hash = isset($regs[4])?$regs[4]:"";
+		$get = isset($regs[4])?$regs[4]:"";
+		$hash = isset($regs[5])?$regs[5]:"";
 	}
+	#var_dump(array('url'=>$url,'debut'=>$debut,'dir'=>$dir,'mot'=>$mot,'get'=>$get,'hash'=>$hash));
 	switch (substr($lien,0,1)) {
 		case '/':
 			return $debut . resolve_path($lien);
 		case '#':
-			return $debut . resolve_path($dir.$mot.$lien);
+			return $debut . resolve_path($dir.$mot.$get.$lien);
 		case '':
-			return $debut . resolve_path($dir.$mot.$hash);
+			return $debut . resolve_path($dir.$mot.$get.$hash);
 		default:
 			return $debut . resolve_path($dir.$lien);
 	}
diff --git a/ecrire/inc/import.php b/ecrire/inc/import.php
index 10cd40de00..d54cf30a5b 100644
--- a/ecrire/inc/import.php
+++ b/ecrire/inc/import.php
@@ -30,6 +30,12 @@ if (@is_readable(_DIR_TMP."charger_plugins_fonctions.php")){
 
 global $IMPORT_tables_noerase;
 $IMPORT_tables_noerase[]='spip_meta';
+// par defaut on ne vide pas les stats, car elles ne figurent pas dans les dump
+// et le cas echeant, un bouton dans l'admin permet de les vider a la main...
+$IMPORT_tables_noerase[]='spip_referers';
+$IMPORT_tables_noerase[]='spip_referers_articles';
+$IMPORT_tables_noerase[]='spip_visites';
+$IMPORT_tables_noerase[]='spip_visites_articles';
 
 // Retourne la premiere balise XML figurant dans le buffet de la sauvegarde 
 // et avance dans ce buffet jusqu'au '>' de cette balise.
@@ -146,9 +152,11 @@ function import_init_tables($request)
 	// grand menage
 	// on vide toutes les tables dont la restauration est demandee
 	$tables = import_table_choix($request);
+	$tables = array_diff($tables,$IMPORT_tables_noerase);
+
 	foreach($tables as $table){
 		// regarder si il y a au moins un champ impt='non'
-		if (($table!='spip_auteurs')&&(!in_array($table,$IMPORT_tables_noerase))){
+		if (($table!='spip_auteurs')){
 			$desc = description_table($table);
 			if (isset($desc['field']['impt']))
 				sql_delete($table, "impt='oui'");
diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php
index 9648da39fb..44e60adf4c 100644
--- a/ecrire/inc/invalideur.php
+++ b/ecrire/inc/invalideur.php
@@ -166,12 +166,12 @@ function appliquer_quota_cache() {
 function retire_cache($cache) {
 
 	if (preg_match(
-	"|^([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+\.[0-9a-f]+(\.gz)?$|i",
+	"|^([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+--[0-9a-f]+(\.gz)?$|i",
 	$cache)) {
 		// supprimer le fichier (de facon propre)
 		supprimer_fichier(_DIR_CACHE . $cache);
 	} else
-		spip_log("Impossible de retirer $cache");
+		spip_log("Nom de fichier cache incorrect : $cache");
 }
 
 #######################################################################
diff --git a/ecrire/index.php b/ecrire/index.php
index b018384583..26e9c4aaaf 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -78,8 +78,14 @@ AND ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['ver
 // sinon c'est qu'elle a ete interrompue et il faut la reprendre
 
 elseif (isset($GLOBALS['meta']["admin"])) {
-	$n = preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']["admin"], $l);
-	if (_AJAX OR !isset($_COOKIE['spip_admin'])) {
+	if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']["admin"], $l))
+		list(,$var_f,$n) = $l;
+	if (_AJAX 
+		OR !(
+			isset($_COOKIE['spip_admin'])
+			OR (isset($GLOBALS['visiteur_session']) AND $GLOBALS['visiteur_session']['statut']=='0minirezo')
+			)
+		) {
 		spip_log("Quand la meta admin vaut " .
 			 $GLOBALS['meta']["admin"] .
 			 " seul un admin peut se connecter et sans AJAX." .
diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index c3153e1500..cb3a7e9f90 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -546,11 +546,6 @@ function evaluer_fond ($fond, $contexte=array(), $connect=null) {
 
 	$page = inclure_page($fond, $contexte, $connect);
 
-	// Lever un drapeau (global) si le fond utilise #SESSION
-	// a destination de public/parametrer
-	if (isset($page['invalideurs'])
-	AND isset($page['invalideurs']['session']))
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
 	if ($GLOBALS['flag_ob'] AND ($page['process_ins'] != 'html')) {
 		ob_start();
 		xml_hack($page, true);
@@ -562,6 +557,15 @@ function evaluer_fond ($fond, $contexte=array(), $connect=null) {
 	}
 	page_base_href($page['texte']);
 
+	// Lever un drapeau (global) si le fond utilise #SESSION
+	// a destination de public/parametrer
+	// pour remonter vers les inclusions appelantes
+	// il faut bien lever ce drapeau apres avoir evalue le fond
+	// pour ne pas faire descendre le flag vers les inclusions appelees
+	if (isset($page['invalideurs'])
+	AND isset($page['invalideurs']['session']))
+		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
+
 	return $page;
 }
 
-- 
GitLab