From 6e4059d86c8268e6870de1d15b41c49604987269 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Thu, 18 Feb 2010 10:01:23 +0000
Subject: [PATCH] Report de [15240] [15241] [15245] [15257] [15248] [15249]
 [15250] [15251] [15252]

---
 ecrire/exec/demande_mise_a_jour.php | 10 ++++++++++
 ecrire/inc/autoriser.php            |  7 +++++--
 ecrire/inc/filtres.php              |  2 +-
 ecrire/inc/notes.php                |  2 +-
 ecrire/inc/plugin.php               |  4 ++++
 ecrire/inc/syndic.php               | 10 ++++++++++
 ecrire/inc/texte.php                |  3 +--
 ecrire/public/criteres.php          |  2 +-
 ecrire/public/references.php        |  2 +-
 9 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/ecrire/exec/demande_mise_a_jour.php b/ecrire/exec/demande_mise_a_jour.php
index 22f0c04566..8813bc9476 100644
--- a/ecrire/exec/demande_mise_a_jour.php
+++ b/ecrire/exec/demande_mise_a_jour.php
@@ -15,6 +15,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // http://doc.spip.org/@exec_demande_mise_a_jour_dist
 function exec_demande_mise_a_jour_dist() {
+	// on fait la verif du path avant tout,
+	// et l'installation des qu'on est dans la colonne principale
+	// si jamais la liste des plugins actifs change, il faut faire un refresh du hit
+	// pour etre sur que les bons fichiers seront charges lors de l'install
+	include_spip('inc/plugin');
+	if (actualise_plugins_actifs()==-1){
+		include_spip('inc/headers');
+		redirige_par_entete(self());
+	}
+
 	include_spip('inc/presentation');
 	$commencer_page = charger_fonction('commencer_page', 'inc');
 	echo $commencer_page('','','','',true,false,false);
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 425f7e2518..277b86e775 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -400,7 +400,9 @@ function autoriser_modererpetition_dist($faire, $type, $id, $qui, $opt) {
 // http://doc.spip.org/@autoriser_webmestre_dist
 function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) {
 	return
-		$qui['webmestre']=='oui'
+		(defined('_ID_WEBMESTRES')?
+			in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
+			:$qui['webmestre']=='oui')
 		AND $qui['statut'] == '0minirezo'
 		AND !$qui['restreint']
 		;
@@ -500,7 +502,8 @@ function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) {
 	if ($id == $qui['id_auteur'] && $opt['statut'])
 		return false;
 	// et toucher au statut webmestre si il ne l'est pas lui meme
-	elseif ($opt['webmestre'] AND !autoriser('webmestre'))
+	// ou si les webmestres sont fixes par constante (securite)
+	elseif ($opt['webmestre'] AND (defined('_ID_WEBMESTRES') OR !autoriser('webmestre')))
 		return false;
 	// et toucher au statut d'un webmestre si il ne l'est pas lui meme
 	elseif ($opt['statut'] AND autoriser('webmestre','',0,$id) AND !autoriser('webmestre'))
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 805bfc07fc..1893204f5f 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -670,7 +670,7 @@ function securiser_acces($id_auteur, $cle, $dir, $op='', $args='')
 // attention c'est compile directement dans inc/references
 // http://doc.spip.org/@sinon
 function sinon ($texte, $sinon='') {
-	if (strlen($texte))
+	if ($texte OR (is_string($texte) AND strlen($texte)))
 		return $texte;
 	else
 		return $sinon;
diff --git a/ecrire/inc/notes.php b/ecrire/inc/notes.php
index a64b38831b..1b921e419b 100644
--- a/ecrire/inc/notes.php
+++ b/ecrire/inc/notes.php
@@ -28,7 +28,7 @@ function inc_notes_dist($arg)
 {	  
 	static $pile = array();
 	global $les_notes, $compt_note, $notes_vues;
-	if (is_string($arg)) return traiter_raccourci_notes($arg, count($pile));
+	if (is_string($arg)) return traiter_raccourci_notes($arg, count($pile)>1?count($pile):'');
 	elseif (is_array($arg)) return traiter_les_notes($arg);
 	elseif ($arg === true) {
 	  array_push($pile, array(@$les_notes, @$compt_note, $notes_vues));
diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php
index 3938ba9c9f..99517aadda 100644
--- a/ecrire/inc/plugin.php
+++ b/ecrire/inc/plugin.php
@@ -285,6 +285,10 @@ function liste_plugin_actifs(){
 function liste_chemin_plugin_actifs($dir_plugins=_DIR_PLUGINS){
 	$liste = liste_plugin_actifs();
 	foreach ($liste as $prefix=>$infos) {
+		// compat au moment d'une migration depuis version anterieure
+		// si pas de dir_type, alors c'est _DIR_PLUGINS
+		if (!isset($infos['dir_type']))
+			$infos['dir_type'] = "_DIR_PLUGINS";
 		if (defined($infos['dir_type']) 
 		AND constant($infos['dir_type'])==$dir_plugins)
 			$liste[$prefix] = $infos['dir'];
diff --git a/ecrire/inc/syndic.php b/ecrire/inc/syndic.php
index 78a3d99070..4673232096 100644
--- a/ecrire/inc/syndic.php
+++ b/ecrire/inc/syndic.php
@@ -66,10 +66,14 @@ function analyser_backend($rss, $url_syndic='') {
 	OR ($l = extraire_attribut(extraire_balise($header, 'feed'), 'xml:lang'))
 	)
 		$langue_du_site = $l;
+	// atom
+	elseif (preg_match(',<feed\s[^>]*xml:lang=[\'"]([^<>\'"]+)[\'"],i', $header, $match))
+		$langue_du_site = $match[1];
 
 	// Recuperer les blocs item et entry
 	$items = array_merge(extraire_balises($rss, 'item'), extraire_balises($rss, 'entry'));
 
+
 	//
 	// Analyser chaque <item>...</item> du backend et le transformer en tableau
 	//
@@ -372,8 +376,14 @@ function ajouter_tags($matches, $item) {
 			// cas atom1, a faire apres flickr
 			$term = extraire_attribut($match[0], 'term')
 		) {
+<<<<<<< .working
 				$scheme = extraire_attribut($match[0], 'scheme');
+=======
+			if ($scheme = extraire_attribut($match[0], 'scheme'))
+>>>>>>> .merge-right.r15241
 				$url = suivre_lien($scheme,$term);
+			else
+				$url = $term;
 		}
 		else {
 			# type delicious.com
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index 1fbd688567..1cacbec74b 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -413,12 +413,11 @@ function protege_js_modeles($t) {
 // aussi les balises des squelettes qui ne passent pas forcement par propre ou typo apres
 // http://doc.spip.org/@interdire_scripts
 function interdire_scripts($arg) {
-
 	// on memorise le resultat sur les arguments non triviaux
 	static $dejavu = array();
 
 	// Attention, si ce n'est pas une chaine, laisser intact
-	if (!is_string($arg) OR !strstr($arg, '<')) return $arg; 
+	if (!$arg OR !is_string($arg) OR !strstr($arg, '<')) return $arg; 
 
 	if (isset($dejavu[$arg])) return $dejavu[$arg];
 
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 363773a80d..611fe920fb 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -632,7 +632,7 @@ function calculer_parties(&$boucles, $id_boucle, $debut, $mode) {
 
 		// cas {x,n-1}
 		if ($op2 == '-') {
-			$fin = '$debut_boucle + $nombre_boucle - '
+			$fin = '$debut_boucle + '.$nombre_boucle.' - '
 			. (is_numeric($total_parties) ? ($total_parties+1) :
 			   ($total_parties . ' - 1'));
 		} else {
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 8d0e091889..2f67320cc4 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -464,7 +464,7 @@ function filtre_logique($fonc, $code, $arg)
 		case ($fonc == 'xor') OR ($fonc == 'xou'):
 			return "((($code) XOR ($arg)) ?' ' :'')";
 		case ($fonc == 'sinon'):
-			return "(strlen(\$a = $code) ? \$a : $arg)";
+			return "((\$a OR (is_string(\$a) AND strlen(\$a = $code))) ? \$a : $arg)";
 		case ($fonc == 'not') OR ($fonc == 'non'):
 			return "(($code) ?'' :' ')";
 		case ($fonc == 'yes') OR ($fonc == 'oui'):
-- 
GitLab