From 6b5afdf99249842e8dc1cefdc3b4e31b1494069c Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 5 Jun 2005 12:17:21 +0000
Subject: [PATCH] =?UTF-8?q?une=20esp=C3=A8ce=20d'API=20pour=20spip=5Frss?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_sites.php3          | 21 ++++++++
 ecrire/inc_suivi_revisions.php | 14 +++---
 ecrire/suivi_revisions.php3    | 63 +++++-------------------
 spip_rss.php                   | 89 ++++++++++++++++++++++++++++++++++
 4 files changed, 131 insertions(+), 56 deletions(-)
 create mode 100644 spip_rss.php

diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3
index e8a7bc2024..96aed8b791 100644
--- a/ecrire/inc_sites.php3
+++ b/ecrire/inc_sites.php3
@@ -278,6 +278,27 @@ function affiche_rss($rss, $intro = '') {
 	return $u;
 }
 
+//
+// Creer un bouton qui renvoie vers la bonne url spip_rss
+function bouton_spip_rss($op, $args) {
+	include_ecrire("inc_acces.php3");
+
+	if (is_array($args))
+		foreach ($args as $val => $var)
+			if ($var) $a .= $val.'-'.$var.':';
+	$a = substr($a,0,-1);
+	if ($a) $a = "&args=$a";
+
+	$link = new Link("../spip_rss.php?op=$op$a");
+	$link->addVar('id', $GLOBALS['connect_id_auteur']);
+	$link->addVar('cle', afficher_low_sec($GLOBALS['connect_id_auteur'], "rss $op $a"));
+	return "<a href='".$link->getUrl()."'>"
+	. http_img_pack("xml.gif", 'XML', "border='0' align='middle' valign='top'")
+	. "</a>";
+}
+
+
+
 function trouver_format($texte) {
 	$syndic_version = '';
 	
diff --git a/ecrire/inc_suivi_revisions.php b/ecrire/inc_suivi_revisions.php
index 73d2aa1568..8da40a1953 100644
--- a/ecrire/inc_suivi_revisions.php
+++ b/ecrire/inc_suivi_revisions.php
@@ -32,17 +32,19 @@ function afficher_para_modifies ($texte, $court = false) {
 	return $texte;
 }
 
-function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $uniq_auteur = false, $lang = "", $court = false, $rss = false) {
-	global $connect_id_auteur, $connect_statut, $dir_lang;
+function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $id_auteur = false, $lang = "", $court = false, $rss = false) {
+	global $dir_lang;
 	
 	$nb_aff = 10;
 	$champs = array('surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps');
 
-	if ($uniq_auteur) $req_where = " AND articles.statut IN ('prepa','prop','publie')"; 
-	else $req_where = " AND articles.statut IN ('prop','publie')"; 
+	if ($id_auteur) {
+		$req_where = " AND articles.statut IN ('prepa','prop','publie')"; 
+		$req_where = " AND versions.id_auteur = $id_auteur";
+	} else {
+		$req_where = " AND articles.statut IN ('prop','publie')";
+	}
 	
-	if ($uniq_auteur) $req_where = " AND versions.id_auteur = $connect_id_auteur";
-
 	if (strlen($lang) > 0) $req_where .= " AND articles.lang='$lang'";
 
 	if ($id_secteur > 0) $req_where .= " AND articles.id_secteur = $id_secteur";
diff --git a/ecrire/suivi_revisions.php3 b/ecrire/suivi_revisions.php3
index 96bcdb0177..c893da5537 100644
--- a/ecrire/suivi_revisions.php3
+++ b/ecrire/suivi_revisions.php3
@@ -11,52 +11,11 @@
 \***************************************************************************/
 
 
-//
-// Si le RSS est demande on ne passe pas par l'authentification de ecrire/
-// (hack rapide en attendant une meilleure solution)
-//
-if ($_GET['rss']) {
-	include("inc_version.php3");
-
-	$debut = intval($debut);
-	$uniq_auteur = ($uniq_auteur != false);
-	include_ecrire("inc_suivi_revisions.php");
-	include_ecrire("lab_revisions.php");
-	include_ecrire("lab_diff.php");
-	include_ecrire("inc_texte.php3");
-	include_ecrire("inc_presentation.php3");
-	include_ecrire("inc_acces.php3");
-
-
-	// verifier la securite du lien (rss = md5(arguments + low_sec(id_auteur))
-	if (!verifier_low_sec ($id_auteur, $rss,
-	"rss suivi $debut $id_secteur $uniq_auteur $lang_choisie"
-	))
-		$rss = array(array('title' => 'Erreur'));
-	else
-		$rss = afficher_suivi_versions ($debut, $id_secteur, $uniq_auteur, $lang_choisie, true, true);
-
-	include_ecrire('inc_sites.php3');
-	@header('Content-Type: text/xml; charset='.lire_meta('charset'));
-
-	$intro = array(
-		'title' => "[".lire_meta('nom_site')."] "
-			._T("icone_suivi_revisions"),
-		'url' => lire_meta('adresse_site').'/'
-			._DIR_RESTREINT_ABS .'suivi_revisions.php3'
-	);
-
-	echo affiche_rss($rss, $intro);
-	exit;
-}
-
-
 include("inc_lab.php");
 include_ecrire("inc_suivi_revisions.php");
 include_spip("ecrire.php");
 include_spip("revisions.php");
 include_spip("diff.php");
-include_ecrire("inc_acces.php3");
 
 $debut = intval($debut);
 $uniq_auteur = ($uniq_auteur != false);
@@ -133,16 +92,18 @@ WHERE versions.id_article = articles.id_article AND versions.id_version > 1 AND
 echo "</ul></div>\n";
 
 // lien vers le rss
-$link = new Link();
-$link->addVar('id_auteur', $connect_id_auteur);
-$link->addVar('rss', afficher_low_sec($connect_id_auteur,
-	"rss suivi $debut $id_secteur $uniq_auteur $lang_choisie"));
-
+include_ecrire('inc_sites.php3');
+$op = 'revisions';
+$args = array(
+	'id_secteur' => $id_secteur,
+	'id_auteur' => $uniq_auteur ? $connect_id_auteur : false,
+	'lang_choisie' => $lang_choisie
+);
 echo "<div style='text-align: "
 	. $GLOBALS['spip_lang_right']
-	. ";'><a href='".$link->getUrl()."'>"
-	. http_img_pack("xml.gif", 'XML', "border='0' align='middle' valign='top'")
-	. "</a></div>";
+	. ";'>"
+	. bouton_spip_rss($op, $args)
+	."</div>";
 
 
 fin_cadre_relief();
@@ -156,7 +117,9 @@ fin_cadre_relief();
 
 debut_droite();
 
-afficher_suivi_versions ($debut, $id_secteur, $uniq_auteur, $lang_choisie);
+afficher_suivi_versions ($debut, $id_secteur,
+	$uniq_auteur ? $connect_id_auteur : '',
+	$lang_choisie);
 
 fin_page();
 
diff --git a/spip_rss.php b/spip_rss.php
new file mode 100644
index 0000000000..d5f265f6c0
--- /dev/null
+++ b/spip_rss.php
@@ -0,0 +1,89 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2005                                                *
+ *  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.   *
+\***************************************************************************/
+
+
+// SPIP RSS
+//
+// On recoit un op (operation) + args (arguments)
+// + id (id_auteur) + cle (low_sec(id_auteur, "op args"))
+// On verifie que la cle correspond
+// On cree ensuite le RSS correspondant a l'operation
+
+include("ecrire/inc_version.php3");
+include_ecrire("inc_texte.php3");
+
+
+//
+// Verifier la securite du lien et decoder les arguments
+//
+include_ecrire("inc_acces.php3");
+if (!verifier_low_sec ($id, $cle,
+"rss $op $args"
+)) {
+	$op = 'erreur securite';
+	unset($a);
+} else {
+	$a = array();
+	foreach (split(':', $args) as $bout) {
+		list($var, $val) = split('-', $bout, 2);
+		$a[$var] = $val;
+	}
+}
+
+//
+// Choisir la fonction de calcul du RSS
+//
+switch($op) {
+	case 'revisions':
+		$rss = rss_suivi_versions($a);
+		$title = _T("icone_suivi_revisions");
+		$url = _DIR_RESTREINT_ABS .'suivi_revisions.php3';
+		break;
+	case 'erreur securite':
+		$rss = array(array('title' => _L('Erreur de s&eacute;curit&eacute;')));
+		$title = _L('Erreur de s&eacute;curit&eacute;');
+		$url = '';
+		break;
+	default:
+		$rss = array(array('title' => _L('Erreur')));
+		$title = _L('Erreur');
+		$url = '';
+		break;
+}
+
+//
+// Envoyer le RSS
+//
+include_ecrire('inc_sites.php3');
+@header('Content-Type: text/xml; charset='.lire_meta('charset'));
+
+$intro = array(
+	'title' => "[".lire_meta('nom_site')."] RSS ".$title,
+	'url' => lire_meta('adresse_site').'/'.$url
+);
+
+echo affiche_rss($rss, $intro);
+exit;
+
+//
+// Fonctions de calcul (a dispatcher dans les librairies)
+//
+function rss_suivi_versions($a) {
+	include_ecrire("inc_suivi_revisions.php");
+	include_ecrire("lab_revisions.php");
+	include_ecrire("lab_diff.php");
+	include_ecrire("inc_presentation.php3");
+	$rss = afficher_suivi_versions (0, $a['id_secteur'], $a['id_auteur'], $a['lang_choisie'], true, true);
+	return $rss;
+}
+
+?>
\ No newline at end of file
-- 
GitLab