From b69076e3187ab905ece6d1c1148df9473c088cf2 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sun, 11 Feb 2007 09:07:43 +0000
Subject: [PATCH] =?UTF-8?q?En=20remplacement=20du=20bouton=20disparu=20en?=
 =?UTF-8?q?=20[8319],=20le=20validateur=20de=20Spip=20est=20appelable=20pa?=
 =?UTF-8?q?r=20un=20script=20assez=20semblable=20au=20script=20de=20recher?=
 =?UTF-8?q?che:=20valider=5Fxml.=20Afin=20de=20conserver=20une=20unit?=
 =?UTF-8?q?=C3=A9=20graphique=20et=20am=C3=A9liorer=20l'ergonomie,=20le=20?=
 =?UTF-8?q?r=C3=A9sultat=20de=20la=20validation=20est=20pr=C3=A9sent=C3=A9?=
 =?UTF-8?q?=20sous=20le=20bandeau=20habituel=20de=20l'espace=20priv=C3=A9,?=
 =?UTF-8?q?=20avec=20une=20zone=20de=20saisie=20pour=20redemander=20la=20v?=
 =?UTF-8?q?alidation=20au=20besoin,=20apr=C3=A8s=20correction.=20Il=20suff?=
 =?UTF-8?q?it=20alors=20de=20donner=20le=20nom=20du=20script=20(accueil,?=
 =?UTF-8?q?=20admin=5Ftech=20etc)=20ou=20l'URL=20compl=C3=A8te=20http:...?=
 =?UTF-8?q?=20etc=20si=20l'on=20veut=20mettre=20des=20param=C3=A8tres=20d'?=
 =?UTF-8?q?URL.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

C'est moins ergonomique que le bouton, mais ça a comme conséquence que ce script est applicable à n'importe quelle page Web, pas seulement celles créées par le site. Télécharger Spip 1.9.2, le validateur XML avec CMS intégré ;-).
---
 .gitattributes              |  1 +
 ecrire/exec/valider_xml.php | 71 +++++++++++++++++++++++++++++++++++++
 ecrire/index.php            | 21 +++++++----
 ecrire/public/debug.php     | 61 +++++++++----------------------
 4 files changed, 103 insertions(+), 51 deletions(-)
 create mode 100644 ecrire/exec/valider_xml.php

diff --git a/.gitattributes b/.gitattributes
index f15146fea2..1ae4290d61 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -479,6 +479,7 @@ ecrire/exec/statistiques_visites.php -text
 ecrire/exec/synchro.php -text
 ecrire/exec/tourner.php -text
 ecrire/exec/upgrade.php -text
+ecrire/exec/valider_xml.php -text
 ecrire/exec/virtualiser.php -text
 ecrire/inc/actions.php -text
 ecrire/inc/agenda.php -text
diff --git a/ecrire/exec/valider_xml.php b/ecrire/exec/valider_xml.php
new file mode 100644
index 0000000000..60371b0b8a
--- /dev/null
+++ b/ecrire/exec/valider_xml.php
@@ -0,0 +1,71 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2007                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+include_spip('inc/presentation');
+
+// http://doc.spip.org/@exec_recherche_dist
+function exec_valider_xml_dist()
+{
+	if ($GLOBALS['connect_statut'] != '0minirezo') {
+		echo minipres();
+		exit;
+	}
+
+	$url = urldecode(_request('var_url'));
+
+	if (!$url) {
+	  $url_aff = 'http://';
+	  $onfocus = "this.value='';";
+	  $texte = $err = '';
+
+	} else {
+
+	  list($server, $script) = preg_split('/[?]/', $url);
+	  if ((!$server) OR ($server == './') 
+	      OR strpos($server, url_de_base()) === 0) {
+	    	    include_spip('inc/headers');
+	    	    redirige_par_entete(parametre_url($url,'transformer_xml','valider_xml', '&'));
+	  }
+
+	  include_spip('public/debug');
+	  include_spip('inc/distant');
+	  $url_aff = entites_html($url);
+	  $onfocus = "this.value='" . addslashes($url) . "';";
+
+	  $transformer_xml = charger_fonction('valider_xml', 'inc');
+
+	  if (preg_match(',^[a-z][0-9a-z_]*$,i', $url))
+		$texte = $transformer_xml(charger_fonction($url, 'exec'), true);
+	  else 	$texte = $transformer_xml(recuperer_page($url));
+
+	  if (isset($GLOBALS['xhtml_error'])) 
+	  	list($texte, $err) = emboite_texte($texte);
+	  else {
+	    $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>';
+	    list($texte, ) = emboite_texte($texte);
+	  }
+	}
+	$titre = _T('analyse_xml');
+	$commencer_page = charger_fonction('commencer_page', 'inc');
+	echo $commencer_page($titre);
+
+	echo "<div style='margin: 10px; text-align: center'>", "<h1>", $titre, '</h1>';
+	echo "<form style='margin: 0px;' action='", generer_url_ecrire('valider_xml') . "'>";
+	echo "<div><input type='hidden' name='exec' value='valider_xml' />";
+	echo '<input type="text" size="70" value="',$url_aff,'" name="var_url" onfocus="'.$onfocus . '" />';
+	echo "</div></form>";
+
+	echo  $err, "</div>";
+	echo "<div style='margin: 10px; text-align: left'>",$texte, '</div>', fin_page();
+}
+?>
diff --git a/ecrire/index.php b/ecrire/index.php
index b39da2d028..6347f81830 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -192,12 +192,19 @@ AND $l = @unserialize($l)) {
 	}
 }
 
-// Trouver la fonction eventuellement surchagee et l'appeler.
-$var_f = charger_fonction($exec);
-if (!isset($GLOBALS['transformer_xml'])
-OR $GLOBALS['auteur_session']['statut']!='0minirezo')
-	$var_f();
- else { include('public/debug.php');
-   debug_script($var_f, true);
+// Passer la main aux outils XML a la demande.
+if (isset($GLOBALS['transformer_xml'])
+AND $GLOBALS['auteur_session']['statut']=='0minirezo') {
+	set_request('var_url', $exec);
+	$exec = $GLOBALS['transformer_xml'];
  }
+
+// Trouver la fonction eventuellement surchagee
+
+$var_f = charger_fonction($exec);
+
+// Feu !
+
+$var_f();
+
 ?>
diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php
index 4a816a5402..6c155fa55d 100644
--- a/ecrire/public/debug.php
+++ b/ecrire/public/debug.php
@@ -42,10 +42,12 @@ function afficher_debug_contexte($env) {
 
 // Si le code php produit des erreurs, on les affiche en surimpression
 // sauf pour un visiteur non admin (lui ne voit rien de special)
+// et en mode validation (fausse erreur "double occurrence insert_head")
 // ajouter &var_mode=debug pour voir les erreurs et en parler sur spip@rezo.net
 // http://doc.spip.org/@affiche_erreurs_page
 function affiche_erreurs_page($tableau_des_erreurs) {
 
+	if ($GLOBALS['exec']=='valider_xml') return '';
 	$GLOBALS['bouton_admin_debug'] = true;
 	$res = '';
 	foreach ($tableau_des_erreurs as $err) {
@@ -308,6 +310,7 @@ function ancre_texte($texte, $fautifs=array())
 	global $var_mode_ligne;
 	if ($var_mode_ligne) $fautifs[]= array($var_mode_ligne);
 	$res ='';
+
 	$s = highlight_string(str_replace('</script>','</@@@@@>',$texte),true);
 
 	$s = str_replace('/@@@@@','/script', // bug de highlight_string
@@ -318,6 +321,7 @@ function ancre_texte($texte, $fautifs=array())
 	$s = preg_replace(',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
 			  '<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
 			  $s);
+
 	$tableau = explode("<br />", $s);
 
 	$ancre = md5($texte);
@@ -377,7 +381,7 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	$self = str_replace("\\'", '&#39;', self());
 	$self = parametre_url($self,'var_mode', 'debug');
 
-	debug_debut($fonc);
+	echo debug_debut($fonc);
 	if ($var_mode_affiche !== 'validation') {
 		$self = parametre_url($self,'var_mode', 'debug');
 	  foreach ($debug_objets['sourcefile'] as $nom_skel => $sourcefile) {
@@ -480,39 +484,6 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	exit;
 }
 
-// Fonction pour l'espace de redaction, appeler par ecrire/index.php
-
-// http://doc.spip.org/@debug_script
-function debug_script ($f, $apply=false) {
-
-	$transformer_xml=charger_fonction($GLOBALS['transformer_xml'], 'inc');
-	$t = $transformer_xml($f, $apply);
-
-	debug_debut($GLOBALS['exec']);
-	if (!isset($GLOBALS['xhtml_error'])) {
-		list (,$top, $avail, $grammaire, $rotlvl) = analyser_doctype($t);
-		$err = '<h3>' . _T('spip_conforme_dtd')
-		. "<br /><a href='" 
-		. $grammaire
-		. "'>"
-		. $rotlvl
-		. '</a></h3>';
-		list($t, ) = emboite_texte($t);
-	} else {
-		list($t, $err) = emboite_texte($t);
-	}
-
-	echo "<div style='text-align: center'><h1>", _T('analyse_xml') . '</h1>',
-	  $err,
-	   "<br /><a href='"
-	    . parametre_url(self(),'transformer_xml', '')
-	    . "'>"
-	    .  _T("access_interface_graphique")
-	    . "</a></div>";
-	echo $t;
-	echo "\n</div></div></body></html>";
-}
-
 // http://doc.spip.org/@debug_debut
 function debug_debut($titre)
 {
@@ -521,19 +492,19 @@ function debug_debut($titre)
 	include_spip('inc/filtres');
 	http_no_cache();
 	lang_select($auteur_session['lang']);
-	echo _DOCTYPE_ECRIRE,
-	  html_lang_attributes(),
-	  "<head>\n<title>",
+	return _DOCTYPE_ECRIRE .
+	  html_lang_attributes() .
+	  "<head>\n<title>" .
 	  ('Spip ' . $GLOBALS['spip_version_affichee'] . ' ' .
 	   _T('admin_debug') . ' ' . $titre . ' (' .
-	   supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site']))), 
-	  ")</title>\n",
-	  "<meta http-equiv='Content-Type' content='text/html",
-	  (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : ''),
-	  "' />\n",
+	   supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site']))) . 
+	  ")</title>\n" .
+	  "<meta http-equiv='Content-Type' content='text/html" .
+	  (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
+	  "' />\n" .
 	  "<link rel='stylesheet' href='".url_absolue(find_in_path('spip_admin.css'))
-	  . "' type='text/css' />",
-	  "</head>\n<body style='margin:0 10px;'>",
+	  . "' type='text/css' />" .
+	  "</head>\n<body style='margin:0 10px;'>" .
 	  "\n<div id='spip-debug' style='position: absolute; top: 22px; z-index: 1000;height:97%;left:10px;right:10px;'><div id='spip-boucles'>\n"; 
 }
 
@@ -559,6 +530,7 @@ function emboite_texte($texte, $fonc='',$self='')
 	elseif (!ereg("^[[:space:]]*([^<][^0-9]*)([0-9]*)(.*[^0-9])([0-9]*)$",
                      $GLOBALS['xhtml_error'],
                      $eregs))
+
 		return array(ancre_texte($texte, array('', '')), true);
 	if (!isset($GLOBALS['debug_objets'])) {
 		preg_match_all(",(.*?)(\d+)(\D+(\d+)<br />),",
@@ -588,6 +560,7 @@ function emboite_texte($texte, $fonc='',$self='')
 		}			
 		$encore2 = array();
 		$colors = array('#e0e0f0', '#f8f8ff');
+
 		foreach($regs as $r) {
 			$i++;
 			list(,$msg, $ligne, $fin, $col) = $r;
-- 
GitLab