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'] .= ' <'.$t['email_auteur'].'>'; - - 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'].=' <'.$article['email'].'>'; + $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écurité'))); $title = _L('Erreur de sécurité'); @@ -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