From 2fa9100e7a4b2f0dab222276417e76442da98f3d Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 7 Jun 2005 21:12:24 +0000
Subject: [PATCH] =?UTF-8?q?toujours=20plus=20de=20SPIP=20RSS=20:=20-=20mes?=
 =?UTF-8?q?sagerie=20personnelle=20-=20articles,=20br=C3=A8ves,=20sites=20?=
 =?UTF-8?q?en=20attente=20de=20publication?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc_forum.php3          |  43 -------
 ecrire/inc_presentation.php3   |   2 +-
 ecrire/inc_sites.php3          |  21 +++-
 ecrire/inc_suivi_revisions.php |  24 ++--
 ecrire/index.php3              |  19 ++-
 ecrire/messagerie.php3         |  15 +++
 spip_rss.php                   | 215 ++++++++++++++++++++++++++++++++-
 7 files changed, 265 insertions(+), 74 deletions(-)

diff --git a/ecrire/inc_forum.php3 b/ecrire/inc_forum.php3
index 3572db69be..02fc0d32ce 100644
--- a/ecrire/inc_forum.php3
+++ b/ecrire/inc_forum.php3
@@ -300,47 +300,4 @@ function generer_url_forum_dist($id_forum, $show_thread=false) {
 	}
 }
 
-// Interface pour SPIP RSS
-function rss_suivi_forums($a, $query_forum='', $lien_moderation=false) {
-	include_ecrire("inc_forum.php3");
-
-	$result_forum = spip_query("
-	SELECT	*
-	FROM	spip_forum
-	WHERE " . $query_forum . "
-	ORDER BY date_heure DESC LIMIT 0,20"
-	);
-
-	while ($t = spip_fetch_array($result_forum)) {
-		$item = array();
-		$item['title'] = typo($t['titre']);
-		if ($a['page'] == 'public'
-		AND $t['statut']<>'publie'
-		)
-			$item['title'] .= ' ('.$t['statut'].')';
-		$item['date'] = $t['date_heure'];
-		$item['author'] = $t['auteur'];
-		if ($t['email_auteur'])
-			$item['author'] .= ' &lt;'.$t['email_auteur'].'&gt;';
-
-		if ($lien_moderation)
-			$item['url'] = lire_meta('adresse_site').'/'._DIR_RESTREINT_ABS
-			.'controle_forum.php3?page='.$a['page'].'&debut_id_forum='.$t['id_forum'];
-		else
-			$item['url'] = lire_meta('adresse_site').'/'.generer_url_forum($t['id_forum']);
-
-		$item['description'] = propre($t['texte']);
-		if ($GLOBALS['les_notes']) {
-			$item['description'] .= '<hr />'.$GLOBALS['les_notes'];
-			$GLOBALS['les_notes'] = '';
-		}
-		if ($t['nom_site'] OR vider_url($t['url_site']))
-			$item['description'] .= propre("\n- [".$t['nom_site']."->".$t['url_site']."]<br />");
-
-		$rss[] = $item;
-	}
-
-	return $rss;
-}
-
 ?>
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index f48782a5f1..4d07aca148 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -1167,7 +1167,7 @@ function afficher_messages($titre_table, $query_message, $afficher_auteurs = tru
 	}
 
 
-	if ($afficher_auteurs) $cols = 3;
+	if ($afficher_auteurs) $cols = 4;
 	else $cols = 2;
 	$query_message .= ' ORDER BY date_heure DESC';
 	$tranches = afficher_tranches_requete($query_message, $cols);
diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3
index df109449c1..bff0f2d9a3 100644
--- a/ecrire/inc_sites.php3
+++ b/ecrire/inc_sites.php3
@@ -235,8 +235,13 @@ function my_strtotime($la_date) {
 // (fonction inverse de analyser_backend)
 // A completer (il manque des tests, des valeurs par defaut, les enclosures, differents formats de sortie, etc.)
 //
-function affiche_rss($rss, $intro = '') {
 
+// mais d'abord un tri par date (inverse)
+function trier_par_date($a, $b) {
+	return ($a['date'] < $b['date']);
+}
+
+function affiche_rss($rss, $intro = '') {
 	// entetes
 	$u = '<'.'?xml version="1.0" encoding="'.lire_meta('charset').'"?'.">\n";
 
@@ -244,18 +249,21 @@ function affiche_rss($rss, $intro = '') {
 <rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <channel>
 	<title>'.texte_backend($intro['title']).'</title>
-	<link>'.texte_backend($intro['url']).'</link>
+	<link>'.texte_backend(url_absolue($intro['url'])).'</link>
 	<description>'.texte_backend($intro['description']).'</description>
 	<language>'.texte_backend($intro['language']).'</language>
 	';
 
 	// elements
-	if (is_array($rss))
-	foreach ($rss as $article) {
-		$u .= '
+	if (is_array($rss)) {
+		usort($rss, 'trier_par_date');
+		foreach ($rss as $article) {
+			if ($article['email'])
+				$article['author'].=' &lt;'.$article['email'].'&gt;';
+			$u .= '
 	<item>
 		<title>'.texte_backend($article['title']).'</title>
-		<link>'.texte_backend(liens_absolus($article['url'])).'</link>
+		<link>'.texte_backend(url_absolue($article['url'])).'</link>
 		<date>'.texte_backend($article['date']).'</date>
 		<description>'.
 			texte_backend(liens_absolus($article['description']))
@@ -267,6 +275,7 @@ function affiche_rss($rss, $intro = '') {
 		<dc:creator>'.texte_backend($article['author']).'</dc:creator>
 	</item>
 ';
+		}
 	}
 
 	// pied
diff --git a/ecrire/inc_suivi_revisions.php b/ecrire/inc_suivi_revisions.php
index 416a521a89..f2285f88dd 100644
--- a/ecrire/inc_suivi_revisions.php
+++ b/ecrire/inc_suivi_revisions.php
@@ -94,16 +94,14 @@ function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $id_auteur = fals
 			$date = $row['date'];
 			$id_article = $row['id_article'];
 			$statut = $row['statut'];
-			$titre = propre($row['titre']);	
-			$nom = "";
+			$titre = propre($row['titre']);
 			$query_auteur = "
-				SELECT nom
+				SELECT nom,email
 				FROM spip_auteurs
 				WHERE id_auteur = $id_auteur";
-			$result_auteur = spip_query($query_auteur);
-			if ($row_auteur = spip_fetch_array($result_auteur)) {
-				$nom = typo($row_auteur["nom"]);
-			}
+			$row_auteur = spip_fetch_array(spip_query($query_auteur));
+			$nom = typo($row_auteur["nom"]);
+			$email = $row_auteur['email'];
 	
 	
 			$logo_statut = "puce-".puce_statut($statut).".gif";
@@ -125,7 +123,8 @@ function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $id_auteur = fals
 					'title' => $titre,
 					'url' => lire_meta('adresse_site').'/'._DIR_RESTREINT_ABS."articles_versions.php3?id_article=$id_article&id_version=$id_version",
 					'date' => $date,
-					'author' => $nom
+					'author' => $nom,
+					'email' => $email
 				);
 			}
 
@@ -216,13 +215,4 @@ function afficher_suivi_versions ($debut = 0, $id_secteur = 0, $id_auteur = fals
 		return $items;
 }
 
-// Interface pour SPIP RSS
-function rss_suivi_versions($a) {
-	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;
-}
-
 ?>
diff --git a/ecrire/index.php3 b/ecrire/index.php3
index c94d3ac192..e6ec04c692 100644
--- a/ecrire/index.php3
+++ b/ecrire/index.php3
@@ -407,10 +407,23 @@ if ($flag_ob) {
 	if ($a) {
 		debut_cadre_couleur_foncee("",false, "", _T('texte_en_cours_validation'));
 		echo $a;
-		fin_cadre_couleur_foncee();
-	}
-} else
+	} else
+		$non_affiche = true;
+}
+
+
+if (!$non_affiche) {
+	// Afficher le lien RSS
+	include_ecrire('inc_sites.php3');
+	$op = 'a-suivre';
+	$args = array();
+	echo "<div style='text-align: "
+		. $GLOBALS['spip_lang_right']
+		. ";'>"
+		. bouton_spip_rss($op, $args)
+		."</div>";
 	fin_cadre_couleur_foncee();
+}
 
 
 
diff --git a/ecrire/messagerie.php3 b/ecrire/messagerie.php3
index 728e95a9e6..a66fb5143d 100644
--- a/ecrire/messagerie.php3
+++ b/ecrire/messagerie.php3
@@ -101,6 +101,21 @@ $query_message = "SELECT * FROM spip_messages AS messages, spip_auteurs_messages
 afficher_messages(_T('info_discussion_cours'), $query_message, true, false);
 
 
+// Afficher le lien RSS
+include_ecrire('inc_sites.php3');
+$op = 'messagerie';
+$args = array(
+	'id_auteur' => $connect_id_auteur
+);
+echo "<div style='text-align: "
+	. $GLOBALS['spip_lang_right']
+	. ";'>"
+	. bouton_spip_rss($op, $args)
+	."</div>";
+
+
+
+
 $query_message = "SELECT * FROM spip_messages AS messages WHERE id_auteur=$connect_id_auteur AND statut='redac'";
 afficher_messages(_T('info_message_en_redaction'), $query_message, true, false, false);
 
diff --git a/spip_rss.php b/spip_rss.php
index 255bf881e2..0a84d1f555 100644
--- a/spip_rss.php
+++ b/spip_rss.php
@@ -35,7 +35,8 @@ else
 spip_timer('rss');
 if (!verifier_low_sec ($id, $cle,
 "rss $op $args"
-)) {
+)
+OR ($a['id_auteur']>0 AND $id<>$a['id_auteur'])) {
 	$op = 'erreur securite';
 	unset($a);
 } else {
@@ -54,7 +55,6 @@ if (!verifier_low_sec ($id, $cle,
 switch($op) {
 	# forum public
 	case 'forum':
-		include_ecrire("inc_forum.php3");
 		if ($id = intval($a['id_article'])) {
 			$critere = "statut='publie' AND id_article=$id";
 			$url = generer_url_article($id);
@@ -88,13 +88,24 @@ switch($op) {
 		break;
 	# revisions des articles
 	case 'revisions':
-		include_ecrire("inc_suivi_revisions.php");
 		$rss = rss_suivi_versions($a);
 		$title = _T("icone_suivi_revisions");
 		$url = _DIR_RESTREINT_ABS .'suivi_revisions.php3?';
 		foreach (array('id_secteur', 'id_auteur', 'lang_choisie') as $var)
 			if ($a[$var]) $url.= '&'.$var.'='.$a[$var];
 		break;
+	# messagerie privee
+	case 'messagerie':
+		$rss = rss_suivi_messagerie($a);
+		$title = _T("icone_suivi_revisions");
+		$url = _DIR_RESTREINT_ABS .'messagerie.php3';
+		break;
+	# a suivre
+	case 'a-suivre':
+		$rss = rss_a_suivre($a);
+		$title = _T("icone_a_suivre");
+		$url = _DIR_RESTREINT_ABS .'';
+		break;
 	case 'erreur securite':
 		$rss = array(array('title' => _L('Erreur de s&eacute;curit&eacute;')));
 		$title = _L('Erreur de s&eacute;curit&eacute;');
@@ -114,11 +125,207 @@ switch($op) {
 
 $intro = array(
 	'title' => "[".lire_meta('nom_site')."] RSS ".$title,
-	'url' => lire_meta('adresse_site').'/'.$url
+	'url' => $url
 );
 
 echo affiche_rss($rss, $intro);
 spip_log("spip_rss: ".spip_timer('rss'));
 exit;
 
+
+
+
+//
+// Fonctions de remplissage du RSS
+//
+
+
+// Suivi des revisions d'articles
+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;
+}
+
+// Suivi des forums
+function rss_suivi_forums($a, $query_forum='', $lien_moderation=false) {
+	include_ecrire("inc_forum.php3");
+
+	$result_forum = spip_query("
+	SELECT	*
+	FROM	spip_forum
+	WHERE " . $query_forum . "
+	ORDER BY date_heure DESC LIMIT 0,20"
+	);
+
+	while ($t = spip_fetch_array($result_forum)) {
+		$item = array();
+		$item['title'] = typo($t['titre']);
+		if ($a['page'] == 'public'
+		AND $t['statut']<>'publie'
+		)
+			$item['title'] .= ' ('.$t['statut'].')';
+		$item['date'] = $t['date_heure'];
+		$item['author'] = $t['auteur'];
+		$item['email'] = $t['email_auteur'];
+
+		if ($lien_moderation)
+			$item['url'] = _DIR_RESTREINT_ABS
+			.'controle_forum.php3?page='.$a['page']
+			.'&debut_id_forum='.$t['id_forum'];
+		else
+			$item['url'] = generer_url_forum($t['id_forum']);
+
+		$item['description'] = propre($t['texte']);
+		if ($GLOBALS['les_notes']) {
+			$item['description'] .= '<hr />'.$GLOBALS['les_notes'];
+			$GLOBALS['les_notes'] = '';
+		}
+		if ($t['nom_site'] OR vider_url($t['url_site']))
+			$item['description'] .= propre("\n- [".$t['nom_site']."->".$t['url_site']."]<br />");
+
+		$rss[] = $item;
+	}
+
+	return $rss;
+}
+
+
+
+// Suivi de la messagerie privee
+function rss_suivi_messagerie($a) {
+	$rss = array();
+
+	// 1. les messages
+	$s = spip_query("SELECT * FROM spip_messages AS messages,
+	spip_auteurs_messages AS lien WHERE lien.id_auteur=".$a['id_auteur']
+	." AND lien.id_message=messages.id_message
+	GROUP BY messages.id_message ORDER BY messages.date_heure DESC");
+	while ($t = spip_fetch_array($s)) {
+		if ($compte++<10) {
+			$auteur = spip_fetch_array(spip_query("SELECT
+			auteurs.nom AS nom, auteurs.email AS email
+			FROM spip_auteurs AS auteurs,
+			spip_auteurs_messages AS lien
+			WHERE lien.id_message=".$t['id_message']."
+			AND lien.id_auteur!=".$t['id_auteur']."
+			AND lien.id_auteur = auteurs.id_auteur"));
+			$item = array(
+				'title' => typo($t['titre']),
+				'date' => $t['date_heure'],
+				'author' => typo($auteur['nom']),
+				'email' => $auteur['email'],
+				'description' => propre($t['texte']),
+				'url' => _DIR_RESTREINT_ABS
+					.'message.php3?id_message='.$t['id_message']
+			);
+			$rss[] = $item;
+		}
+		$messages_vus[] = $t['id_message'];
+	}
+
+	// 2. les reponses aux messages
+	if ($messages_vus) {
+		$s = spip_query("SELECT * FROM spip_forum WHERE id_message
+		IN (".join(',', $messages_vus).")
+		ORDER BY date_heure DESC LIMIT 0,10");
+
+		while ($t = spip_fetch_array($s)) {
+			$item = array(
+				'title' => typo($t['titre']),
+				'date' => $t['date_heure'],
+				'description' => propre($t['texte']),
+				'author' => typo($t['auteur']),
+				'email' => $t['email_auteur'],
+				'url' => _DIR_RESTREINT_ABS
+					.'message.php3?id_message='.$t['id_message']
+					.'#'.$t['id_forum']
+			);
+			$rss[] = $item;
+		}
+	}
+
+	return $rss;
+}
+
+// Suivi de la page "a suivre" : articles, breves, sites proposes et publies
+function rss_a_suivre($a) {
+	$rss_articles = rss_articles("statut = 'prop'");
+	$rss_breves = rss_breves("statut = 'prop'");
+	$rss_sites = rss_sites("statut = 'prop'");
+
+	return array_merge($rss_articles, $rss_breves, $rss_sites);
+}
+
+function rss_articles($critere) {
+	$s = spip_query("SELECT * FROM spip_articles WHERE $critere
+	ORDER BY date DESC LIMIT 0,10");
+	while ($t = spip_fetch_array($s)) {
+		$auteur = spip_fetch_array(spip_query("SELECT
+			auteurs.nom AS nom, auteurs.email AS email
+			FROM spip_auteurs AS auteurs,
+			spip_auteurs_articles AS lien
+			WHERE lien.id_article=".$t['id_article']."
+			AND lien.id_auteur = auteurs.id_auteur"));
+		$item = array(
+			'title' => typo($t['titre']),
+			'date' => $t['date'],
+			'author' => typo($auteur['nom']),
+			'email' => $auteur['email'],
+			'description' => propre(couper("{{".$t['chapo']."}}\n\n".$t['texte'],300)),
+			'url' => _DIR_RESTREINT_ABS
+				.'articles.php3?id_article='.$t['id_article']
+		);
+		if ($t['statut'] == 'prop')
+			$item['title'] = _T('info_article_propose').' : '.$item['title'];
+
+		$rss[] = $item;
+	}
+	return $rss;
+}
+
+
+function rss_breves($critere) {
+	$s = spip_query("SELECT * FROM spip_breves WHERE $critere
+	ORDER BY date_heure DESC LIMIT 0,10");
+	while ($t = spip_fetch_array($s)) {
+		$item = array(
+			'title' => typo($t['titre']),
+			'date' => $t['date_heure'],
+			'description' => propre(couper($t['texte'],300)),
+			'url' => _DIR_RESTREINT_ABS
+				.'breves.php3?id_breve='.$t['id_breve']
+		);
+		if ($t['statut'] == 'prop')
+			$item['title'] = _T('titre_breve_proposee').' : '.$item['title'];
+
+		$rss[] = $item;
+	}
+	return $rss;
+}
+
+
+function rss_sites($critere) {
+	$s = spip_query("SELECT * FROM spip_syndic WHERE $critere
+	ORDER BY date DESC LIMIT 0,10");
+	while ($t = spip_fetch_array($s)) {
+		$item = array(
+			'title' => typo($t['titre']." ".$t['url_site']),
+			'date' => $t['date'],
+			'description' => propre(couper($t['texte'],300)),
+			'url' => _DIR_RESTREINT_ABS
+				.'sites.php3?id_syndic='.$t['id_syndic']
+		);
+		if ($t['statut'] == 'prop')
+			$item['title'] = _T('info_site_attente').' : '.$item['title'];
+
+		$rss[] = $item;
+	}
+	return $rss;
+}
+
+
 ?>
-- 
GitLab