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écurité'))); + $title = _L('Erreur de sécurité'); + $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