From 4e6e9ae87c5aec35a5350c1f4c84451eb491e856 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 20 Jan 2006 13:38:32 +0000
Subject: [PATCH] eclatement de inc_suivi_revisions pour qu'il ne soit plus
 charge a la fois automatiquement et manuellement.

---
 .gitattributes                 |   1 +
 ecrire/inc_rss.php3            | 428 ---------------------------------
 ecrire/inc_suivi_revisions.php | 203 +---------------
 ecrire/inc_suivi_versions.php  | 217 +++++++++++++++++
 4 files changed, 219 insertions(+), 630 deletions(-)
 delete mode 100644 ecrire/inc_rss.php3
 create mode 100644 ecrire/inc_suivi_versions.php

diff --git a/.gitattributes b/.gitattributes
index 61d1d36703..49d2fe7941 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -338,6 +338,7 @@ ecrire/inc_statistiques_referers.php -text
 ecrire/inc_statistiques_repartition.php -text
 ecrire/inc_statistiques_svg.php -text
 ecrire/inc_statistiques_visites.php -text
+ecrire/inc_suivi_versions.php -text
 ecrire/inc_synchro.php -text
 ecrire/inc_upgrade.php -text
 ecrire/inc_utils.php -text
diff --git a/ecrire/inc_rss.php3 b/ecrire/inc_rss.php3
deleted file mode 100644
index 63efac1257..0000000000
--- a/ecrire/inc_rss.php3
+++ /dev/null
@@ -1,428 +0,0 @@
-<?php
-
-/***************************************************************************\
- *  SPIP, Systeme de publication pour l'internet                           *
- *                                                                         *
- *  Copyright (c) 2001-2006                                                *
- *  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_ecrire("inc_minipres");
-include_ecrire("inc_acces");
-include_ecrire("inc_texte"); // utile pour l'espace public, deja fait sinon
-
-// mais d'abord un tri par date (inverse)
-function trier_par_date($a, $b) {
-	return ($a['date'] < $b['date']);
-}
-
-
-//
-// Prend un tableau et l'affiche au format rss
-// (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 = '', $fmt='') {
-	if (!$fmt) $fmt = 'rss';
-	if (function_exists($f = 'affiche_rss_'.$fmt)) {
-		return $f($rss, $intro);
-	}
-	else
-		spip_log("Format $fmt inconnu");
-}
-
-function affiche_rss_rss($rss, $intro = '') {
-	// entetes
-	$u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset'].'"?'.">\n";
-
-	$u .= '
-<rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-	<title>'.texte_backend($intro['title']).'</title>
-	<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)) {
-		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(url_absolue($article['url'])).'</link>
-		<date>'.texte_backend($article['date']).'</date>
-		<description>'.
-			texte_backend(liens_absolus($article['description']))
-		.'</description>
-		<author>'.texte_backend($article['author']).'</author>
-		<dc:date>'.date_iso($article['date']).'</dc:date>
-		<dc:format>text/html</dc:format>
-		<dc:language>'.texte_backend($article['lang']).'</dc:language>
-		<dc:creator>'.texte_backend($article['author']).'</dc:creator>
-	</item>
-';
-		}
-	}
-
-	// pied
-	$u .= '
-	</channel>
-</rss>
-';
-
-	return array($u, 'Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']);
-}
-
-function affiche_rss_ical($rss, $intro = '') {
-
-	// entetes
-	$u =
-'BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-X-WR-CALNAME;VALUE=TEXT:'.filtrer_ical($intro['title']).'
-X-WR-RELCALID:'.filtrer_ical(url_absolue($intro['url'])).'
-';
-
-	// elements
-	if (is_array($rss)) {
-		usort($rss, 'trier_par_date');
-		foreach ($rss as $article) {
-
-			// Regler la date de fin a h+60min
-			if (!$article['enddate'])
-				$article['enddate'] = date_ical($article['date'],60);
-			else
-				$article['enddate'] = date_ical($article['enddate']);
-
-			// Type d'evenement
-			if ($article['type'] == 'todo')
-				$type = 'VTODO';
-			else
-				$type = 'VEVENT';
-
-			$u .=
-'BEGIN:'.$type.'
-SUMMARY:'.filtrer_ical($article['title']).'
-URL:'.filtrer_ical(url_absolue($article['url'])).'
-DTSTAMP:'. date_ical($article['date']).'
-DTSTART:'. date_ical($article['date']).'
-DTEND:'. $article['enddate'].'
-DESCRIPTION:'.filtrer_ical(liens_absolus($article['description'])).'
-ORGANIZER:'.filtrer_ical($article['author']).'
-CATEGORIES:--
-END:'.$type.'
-';
-		}
-	}
-
-	// pied
-	$u .= 'END:VCALENDAR';
-
-	return array($u, 'Content-Type: text/calendar; charset=utf-8');
-}
-
-//
-// Fonctions de remplissage du RSS
-//
-
-
-// Suivi des revisions d'articles
-function rss_suivi_versions($a) {
-	include_ecrire("inc_suivi_versions");
-	return  afficher_suivi_versions (0, $a['id_secteur'], $a['id_auteur'], $a['lang_choisie'], true, true);
-
-}
-
-// Suivi des forums
-function rss_suivi_forums($a, $query_forum='', $lien_moderation=false) {
-	include_ecrire("inc_forum");
-
-	$result_forum = spip_query("
-	SELECT	* " . $query_forum . "
-	ORDER BY date_heure DESC LIMIT 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'] = generer_url_ecrire('controle_forum', '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' => generer_url_ecrire('message', '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 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' => generer_url_ecrire('message', '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) {
-	$rss = array();
-	$s = spip_query("SELECT * FROM spip_articles WHERE $critere
-	ORDER BY date DESC LIMIT 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' => generer_url_ecrire('articles', '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) {
-	$rss = array();
-	$s = spip_query("SELECT * FROM spip_breves WHERE $critere
-	ORDER BY date_heure DESC LIMIT 10");
-	while ($t = spip_fetch_array($s)) {
-		$item = array(
-			'title' => typo($t['titre']),
-			'date' => $t['date_heure'],
-			'description' => propre(couper($t['texte'],300)),
-			'url' => generer_url_ecrire('breves_voir', '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) {
-	$rss = array();
-	$s = spip_query("SELECT * FROM spip_syndic WHERE $critere
-	ORDER BY date DESC LIMIT 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' => generer_url_ecrire('sites', 'id_syndic='.$t['id_syndic']   ));
-		if ($t['statut'] == 'prop')
-			$item['title'] = _T('info_site_attente').' : '.$item['title'];
-
-		$rss[] = $item;
-	}
-	return $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
-
-
-function spip_action_rss_dist()
-{
-  global $args, $cle, $fmt, $id, $lang, $op;
-
-  charger_generer_url();
-
-//
-// Verifier la securite du lien et decoder les arguments
-//
-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 {
-	$a = array();
-	foreach (split(':', $args) as $bout) {
-		list($var, $val) = split('-', $bout, 2);
-		$a[$var] = $val;
-	}
-	include_ecrire('inc_lang');
-	lang_select($lang);
-}
-
-//
-// Choisir la fonction de calcul du RSS
-//
-switch($op) {
-	# forum public
-	case 'forum':
-		if ($id = intval($a['id_article'])) {
-			$critere = "statut='publie' AND id_article=$id";
-			$url = generer_url_article($id);
-		}
-		else if ($id = intval($a['id_syndic'])) {
-			$critere = "statut='publie' AND id_syndic=$id";
-			$url = generer_url_site($id);
-		}
-		else if ($id = intval($a['id_breve'])) {
-			$critere = "statut='publie' AND id_breve=$id";
-			$url = generer_url_breve($id);
-		}
-		else if ($id = intval($a['id_rubrique'])) {
-			$critere = "statut='publie' AND id_rubrique=$id";
-			$url = generer_url_rubrique($id);
-		}
-		else if ($id = intval($a['id_thread'])) {
-			$critere = "statut='publie' AND id_thread=$id";
-			$url = generer_url_forum($id);
-		}
-		if ($id) $rss = rss_suivi_forums($a, "FROM spip_forum WHERE $critere", false);
-		$title = _T("ecrire:titre_page_forum_suivi");
-		break;
-	# suivi prive des forums
-	case 'forums':
-		include_ecrire("inc_forum");
-		$critere = critere_statut_controle_forum($a['page']);
-		$rss = rss_suivi_forums($a, $critere, true);
-		$title = _T("ecrire:titre_page_forum_suivi")." (".$a['page'].")";
-		$url = generer_url_ecrire('controle_forum', 'page='.$a['page']);
-		break;
-	# revisions des articles
-	case 'revisions':
-		$rss = rss_suivi_versions($a);
-		$title = _T("icone_suivi_revisions");
-		$url = "";
-		foreach (array('id_secteur', 'id_auteur', 'lang_choisie') as $var)
-			if ($a[$var]) $url.= $var.'='.$a[$var] . '&';
-		$url = generer_url_ecrire('suivi_revisions', $url);
-		break;
-	# messagerie privee
-	case 'messagerie':
-		$rss = rss_suivi_messagerie($a);
-		$title = _T("icone_messagerie_personnelle");
-		$url = generer_url_ecrire('messagerie');
-		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;');
-		$url = '';
-		break;
-	default:
-		$rss = array(array('title' => _L('Erreur')));
-		$title = _L('Erreur');
-		$url = '';
-		break;
-}
-
-//
-// Envoyer le RSS
-//
-$intro = array(
-	'title' => "[".$GLOBALS['meta']['nom_site']."] RSS ".$title,
-	'url' => $url
-);
-
-list($content,$header) = affiche_rss($rss, $intro, $fmt);
-if ($header) @header($header);
-echo $content;
-
-spip_log("spip_rss: ".spip_timer('rss'));
-}
-?>
diff --git a/ecrire/inc_suivi_revisions.php b/ecrire/inc_suivi_revisions.php
index 7dbe93191b..5a014e5e33 100644
--- a/ecrire/inc_suivi_revisions.php
+++ b/ecrire/inc_suivi_revisions.php
@@ -13,9 +13,7 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_ecrire("inc_presentation");
-include_ecrire('inc_rss');
-include_ecrire("lab_revisions");
-include_ecrire("lab_diff");
+include_ecrire("inc_suivi_versions");
 
 function suivi_revisions_dist()
 {
@@ -134,203 +132,4 @@ afficher_suivi_versions ($debut, $id_secteur,
 fin_page();
 }
 
-function afficher_para_modifies ($texte, $court = false) {
-	// Limiter la taille de l'affichage
-	if ($court) $max = 200;
-	else $max = 2000;
-	
-	$paras = explode ("\n",$texte);
-	for ($i = 0; $i < count($paras) AND strlen($texte_ret) < $max; $i++) {
-		if (strpos($paras[$i], '"diff-')) $texte_ret .= $paras[$i]."\n\n";
-	}
-	$texte = $texte_ret;
-	return $texte;
-}
-
-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 ($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 (strlen($lang) > 0) $req_where .= " AND articles.lang='$lang'";
-
-	if ($id_secteur > 0) $req_where .= " AND articles.id_secteur = $id_secteur";
-
-	$query = "
-		SELECT versions.*, articles.statut, articles.titre 
-		FROM spip_versions AS versions, spip_articles AS articles 
-		WHERE versions.id_article = articles.id_article AND versions.id_version > 1 $req_where ";
-	
-	$result = spip_query($query . " ORDER BY versions.date DESC LIMIT $debut, $nb_aff");
-	if (spip_num_rows($result) > 0) {
-
-		// Afficher l'entete de la boite
-		if (!$rss) {
-			$titre_table = _T('icone_suivi_revisions').aide('suivimodif');
-			if ($court)
-				$titre_table = afficher_plus(generer_url_ecrire("suivi_revisions"))
-				. $titre_table;
-
-			echo "<div style='height: 12px;'></div>";
-			echo "<div class='liste'>";
-			bandeau_titre_boite2($titre_table, "historique-24.gif");
-	
-			$total = spip_num_rows(spip_query($query . "LIMIT 0, 149"));
-		
-			if ($total > $nb_aff) {
-				$nb_tranches = ceil($total / $nb_aff);
-			
-				echo "<div class='arial2' style='background-color: #dddddd; padding: 5px;'>";
-		
-				for ($i = 0; $i < $nb_tranches; $i++) {
-					if ($i > 0) echo " | ";
-					if ($i*$nb_aff == $debut) echo "<b>";
-					else {
-					  $next = ($i * $nb_aff);
-echo "<a href='", generer_url_ecrire('suivi_revisions', "debut=$next&id_secteur=$id_secteur&uniq_auteur=$uniq_auteur&lang_choisie=$lang"),"'>";
-					}
-					echo (($i * $nb_aff) + 1);
-					if ($i*$nb_aff == $debut) echo "</b>";
-					else echo "</a>";
-				}
-				echo "</div>";
-			}
-		}
-
-		// Afficher les 10 elements
-		while ($row = spip_fetch_array($result)) {
-			$id_version = $row['id_version'];
-			$id_auteur = $row['id_auteur'];
-			$date = $row['date'];
-			$id_article = $row['id_article'];
-			$statut = $row['statut'];
-			$titre = propre($row['titre']);
-			$query_auteur = "
-				SELECT nom,email
-				FROM spip_auteurs
-				WHERE id_auteur = $id_auteur";
-			$row_auteur = spip_fetch_array(spip_query($query_auteur));
-			$nom = typo($row_auteur["nom"]);
-			$email = $row_auteur['email'];
-	
-	
-
-			if (!$rss) {
-				$logo_statut = "puce-".puce_statut($statut).".gif";
-				echo "<div class='tr_liste' style='padding: 5px; border-top: 1px solid #aaaaaa;'>";
-	
-				echo "<span class='arial2'>";
-				if (!$court) echo bouton_block_visible("$id_version-$id_article-$id_auteur");
-				echo "<img src='" . _DIR_IMG_PACK . "$logo_statut' border='0'>&nbsp;";
-				echo "<a class='$statut' style='font-weight: bold;' href='" . generer_url_ecrire("articles_versions","id_article=$id_article") . "'>$titre</a>";
-				echo "</span>";
-				echo "<span class='arial1'$dir_lang>";
-				echo " ".date_relative($date)." ";
-				if (strlen($nom)>0) echo "($nom)";
-				echo "</span>";
-			} else {
-				$item = array(
-					'title' => $titre,
-					'url' => generer_url_ecrire("articles_versions","id_article=$id_article&id_version=$id_version"),
-					'date' => $date,
-					'author' => $nom,
-					'email' => $email
-				);
-			}
-
-			if (!$court) { 
-				$query_diff = "
-					SELECT id_version
-					FROM spip_versions
-					WHERE id_article=$id_article AND id_version<$id_version 
-					ORDER BY id_version DESC LIMIT 0,1";
-					if ($result_diff = spip_query($query_diff)) {
-						$row_diff = spip_fetch_array($result_diff);
-						$id_diff = $row_diff['id_version'];
-				}
-		
-		
-				$query_art = "
-					SELECT *
-					FROM spip_articles
-					WHERE id_article='$id_article'";
-				$result_art = spip_query($query_art);
-				
-				if ($row_art = spip_fetch_array($result_art)) {
-					$id_article = $row_art["id_article"];
-					$id_rubrique = $row_art["id_rubrique"];
-					$date = $row_art["date"];
-					$statut_article = $row_art["statut"];
-					$maj = $row_art["maj"];
-					$date_redac = $row_art["date_redac"];
-					$visites = $row_art["visites"];
-					$referers = $row_art["referers"];
-					$extra = $row_art["extra"];
-					$id_trad = $row_art["id_trad"];
-				}
-				
-				$textes = recuperer_version($id_article, $id_version);		
-						
-				if ($id_version && $id_diff) {		
-					if ($id_diff > $id_version) {
-						$t = $id_version;
-						$id_version = $id_diff;
-						$id_diff = $t;
-						$old = $textes;
-						$new = $textes = recuperer_version($id_article, $id_version);
-					}
-					else {
-						$old = recuperer_version($id_article, $id_diff);
-						$new = $textes;
-					}		
-					$textes = array();			
-					foreach ($champs as $champ) {
-						if (!$new[$champ] && !$old[$champ]) continue;
-						$diff = new Diff(new DiffTexte);
-						$textes[$champ] = afficher_para_modifies(afficher_diff($diff->comparer(preparer_diff($new[$champ]), preparer_diff($old[$champ]))), $court);
-					}
-				}
-				
-				if (!$rss)
-					echo debut_block_visible("$id_version-$id_article-$id_auteur");
-
-				if (is_array($textes))
-				foreach ($textes as $var => $t) {
-					if (strlen($t) > 0) {
-						if (!$rss) echo "<blockquote class='serif1'>";
-						$aff = propre_diff($t);
-						if ($GLOBALS['les_notes']) {
-							$aff .= '<p>'.$GLOBALS['les_notes'];
-							$GLOBALS['les_notes'] = '';
-						}
-						if (!$rss) {
-							echo $aff;
-							echo "</blockquote>";
-						} else
-							$item['description'] = $aff;
-					}
-				}
-				if (!$rss) echo fin_block();
-			}
-			
-			if (!$rss) echo "</div>";
-
-			if ($rss)
-				$items[] = $item;
-		}		
-		if (!$rss) echo "</div>";
-	}
-
-	if ($rss)
-		return $items;
-}
-
 ?>
diff --git a/ecrire/inc_suivi_versions.php b/ecrire/inc_suivi_versions.php
new file mode 100644
index 0000000000..435b4d7097
--- /dev/null
+++ b/ecrire/inc_suivi_versions.php
@@ -0,0 +1,217 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  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_ecrire("lab_revisions");
+include_ecrire("lab_diff");
+
+function afficher_para_modifies ($texte, $court = false) {
+	// Limiter la taille de l'affichage
+	if ($court) $max = 200;
+	else $max = 2000;
+	
+	$paras = explode ("\n",$texte);
+	for ($i = 0; $i < count($paras) AND strlen($texte_ret) < $max; $i++) {
+		if (strpos($paras[$i], '"diff-')) $texte_ret .= $paras[$i]."\n\n";
+	}
+	$texte = $texte_ret;
+	return $texte;
+}
+
+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 ($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 (strlen($lang) > 0) $req_where .= " AND articles.lang='$lang'";
+
+	if ($id_secteur > 0) $req_where .= " AND articles.id_secteur = $id_secteur";
+
+	$query = "
+		SELECT versions.*, articles.statut, articles.titre 
+		FROM spip_versions AS versions, spip_articles AS articles 
+		WHERE versions.id_article = articles.id_article AND versions.id_version > 1 $req_where ";
+	
+	$result = spip_query($query . " ORDER BY versions.date DESC LIMIT $debut, $nb_aff");
+	if (spip_num_rows($result) > 0) {
+
+		// Afficher l'entete de la boite
+		if (!$rss) {
+			$titre_table = _T('icone_suivi_revisions').aide('suivimodif');
+			if ($court)
+				$titre_table = afficher_plus(generer_url_ecrire("suivi_revisions"))
+				. $titre_table;
+
+			echo "<div style='height: 12px;'></div>";
+			echo "<div class='liste'>";
+			bandeau_titre_boite2($titre_table, "historique-24.gif");
+	
+			$total = spip_num_rows(spip_query($query . "LIMIT 0, 149"));
+		
+			if ($total > $nb_aff) {
+				$nb_tranches = ceil($total / $nb_aff);
+			
+				echo "<div class='arial2' style='background-color: #dddddd; padding: 5px;'>";
+		
+				for ($i = 0; $i < $nb_tranches; $i++) {
+					if ($i > 0) echo " | ";
+					if ($i*$nb_aff == $debut) echo "<b>";
+					else {
+					  $next = ($i * $nb_aff);
+echo "<a href='", generer_url_ecrire('suivi_revisions', "debut=$next&id_secteur=$id_secteur&uniq_auteur=$uniq_auteur&lang_choisie=$lang"),"'>";
+					}
+					echo (($i * $nb_aff) + 1);
+					if ($i*$nb_aff == $debut) echo "</b>";
+					else echo "</a>";
+				}
+				echo "</div>";
+			}
+		}
+
+		// Afficher les 10 elements
+		while ($row = spip_fetch_array($result)) {
+			$id_version = $row['id_version'];
+			$id_auteur = $row['id_auteur'];
+			$date = $row['date'];
+			$id_article = $row['id_article'];
+			$statut = $row['statut'];
+			$titre = propre($row['titre']);
+			$query_auteur = "
+				SELECT nom,email
+				FROM spip_auteurs
+				WHERE id_auteur = $id_auteur";
+			$row_auteur = spip_fetch_array(spip_query($query_auteur));
+			$nom = typo($row_auteur["nom"]);
+			$email = $row_auteur['email'];
+	
+	
+
+			if (!$rss) {
+				$logo_statut = "puce-".puce_statut($statut).".gif";
+				echo "<div class='tr_liste' style='padding: 5px; border-top: 1px solid #aaaaaa;'>";
+	
+				echo "<span class='arial2'>";
+				if (!$court) echo bouton_block_visible("$id_version-$id_article-$id_auteur");
+				echo "<img src='" . _DIR_IMG_PACK . "$logo_statut' border='0'>&nbsp;";
+				echo "<a class='$statut' style='font-weight: bold;' href='" . generer_url_ecrire("articles_versions","id_article=$id_article") . "'>$titre</a>";
+				echo "</span>";
+				echo "<span class='arial1'$dir_lang>";
+				echo " ".date_relative($date)." ";
+				if (strlen($nom)>0) echo "($nom)";
+				echo "</span>";
+			} else {
+				$item = array(
+					'title' => $titre,
+					'url' => generer_url_ecrire("articles_versions","id_article=$id_article&id_version=$id_version"),
+					'date' => $date,
+					'author' => $nom,
+					'email' => $email
+				);
+			}
+
+			if (!$court) { 
+				$query_diff = "
+					SELECT id_version
+					FROM spip_versions
+					WHERE id_article=$id_article AND id_version<$id_version 
+					ORDER BY id_version DESC LIMIT 0,1";
+					if ($result_diff = spip_query($query_diff)) {
+						$row_diff = spip_fetch_array($result_diff);
+						$id_diff = $row_diff['id_version'];
+				}
+		
+		
+				$query_art = "
+					SELECT *
+					FROM spip_articles
+					WHERE id_article='$id_article'";
+				$result_art = spip_query($query_art);
+				
+				if ($row_art = spip_fetch_array($result_art)) {
+					$id_article = $row_art["id_article"];
+					$id_rubrique = $row_art["id_rubrique"];
+					$date = $row_art["date"];
+					$statut_article = $row_art["statut"];
+					$maj = $row_art["maj"];
+					$date_redac = $row_art["date_redac"];
+					$visites = $row_art["visites"];
+					$referers = $row_art["referers"];
+					$extra = $row_art["extra"];
+					$id_trad = $row_art["id_trad"];
+				}
+				
+				$textes = recuperer_version($id_article, $id_version);		
+						
+				if ($id_version && $id_diff) {		
+					if ($id_diff > $id_version) {
+						$t = $id_version;
+						$id_version = $id_diff;
+						$id_diff = $t;
+						$old = $textes;
+						$new = $textes = recuperer_version($id_article, $id_version);
+					}
+					else {
+						$old = recuperer_version($id_article, $id_diff);
+						$new = $textes;
+					}		
+					$textes = array();			
+					foreach ($champs as $champ) {
+						if (!$new[$champ] && !$old[$champ]) continue;
+						$diff = new Diff(new DiffTexte);
+						$textes[$champ] = afficher_para_modifies(afficher_diff($diff->comparer(preparer_diff($new[$champ]), preparer_diff($old[$champ]))), $court);
+					}
+				}
+				
+				if (!$rss)
+					echo debut_block_visible("$id_version-$id_article-$id_auteur");
+
+				if (is_array($textes))
+				foreach ($textes as $var => $t) {
+					if (strlen($t) > 0) {
+						if (!$rss) echo "<blockquote class='serif1'>";
+						$aff = propre_diff($t);
+						if ($GLOBALS['les_notes']) {
+							$aff .= '<p>'.$GLOBALS['les_notes'];
+							$GLOBALS['les_notes'] = '';
+						}
+						if (!$rss) {
+							echo $aff;
+							echo "</blockquote>";
+						} else
+							$item['description'] = $aff;
+					}
+				}
+				if (!$rss) echo fin_block();
+			}
+			
+			if (!$rss) echo "</div>";
+
+			if ($rss)
+				$items[] = $item;
+		}		
+		if (!$rss) echo "</div>";
+	}
+
+	if ($rss)
+		return $items;
+}
+
+?>
-- 
GitLab