diff --git a/ecrire/inc_base.php3 b/ecrire/inc_base.php3
index f98ed31a58adb9505a033f4c4471686030d6d117..da52e732f6dc04d7da12214aed902685f565d878 100644
--- a/ecrire/inc_base.php3
+++ b/ecrire/inc_base.php3
@@ -30,7 +30,8 @@ function creer_base() {
 		export VARCHAR(10) DEFAULT 'oui',
 		date_redac datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
 		visites INTEGER DEFAULT '0' NOT NULL,
-		referers BLOB NOT NULL,
+		referers INTEGER DEFAULT '0' NOT NULL,
+		popularite INTEGER DEFAULT '0' NOT NULL,
 		accepter_forum CHAR(3) NOT NULL,
 		auteur_modif bigint(21) DEFAULT '0' NOT NULL,
 		date_modif datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
@@ -838,6 +839,14 @@ function maj_base() {
 		spip_query($query);
 	}
 
+	if ($version_installee < 1.432) {
+		spip_query("ALTER TABLE spip_articles DROP referers");
+		$query = "ALTER TABLE spip_articles ADD referers INTEGER DEFAULT '0' NOT NULL";
+		spip_query($query);
+		$query = "ALTER TABLE spip_articles ADD popularite INTEGER DEFAULT '0' NOT NULL";
+		spip_query($query);
+	}
+
 
 	//
 	// Mettre a jour le numero de version installee
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 79a8be8a02ed4e635d30521b363eabebe8e8eb9c..d81243a16f940a8c7dd463d6046c6ed951f5d0e9 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -1573,7 +1573,7 @@ if (ereg("index.php3$", $GLOBALS['REQUEST_URI'])) {
 	echo "<br>Les icones de l'interface sont de <a href='http://jimmac.musichall.cz/'>Jakub 'Jimmac' Steiner</a>";
 }
 if (ereg("statistiques_visites.php3$", $GLOBALS['REQUEST_URI']) OR ereg("statistiques_referers.php3$", $GLOBALS['REQUEST_URI'])) {
-	echo "<br>L'affichage des requ&ecirc;tes des moteurs de recherche est r&eacute;alis&eacute;<br>&agrave; partir d'un extrait du code de <a href='http://www.phpinfo.net/'>Visiteurs</a>,<br> par Jean-Pierre D&eacute;z&eacute;lus.";
+	echo "<br>L'affichage des requ&ecirc;tes des moteurs de recherche est r&eacute;alis&eacute;<br>&agrave; partir d'un extrait du code de <a href='http://www.phpinfo.net/'>Visiteurs</a>, par Jean-Pierre D&eacute;z&eacute;lus";
 }
 ?>
 </div></blockquote>
diff --git a/ecrire/inc_statistiques.php3 b/ecrire/inc_statistiques.php3
index 1cacc24f7f34c027185dc54e6ad576c6021e3a15..cdfade70eed0e947279c60db234cf14d0b53c8b6 100644
--- a/ecrire/inc_statistiques.php3
+++ b/ecrire/inc_statistiques.php3
@@ -201,10 +201,71 @@ function calculer_visites(){
 		$result_effacer = spip_query($query_effacer);	
 			
 	}	
-	$query_effacer = "DELETE FROM spip_visites_referers WHERE date < DATE_SUB(NOW(),INTERVAL 7 DAY) AND visites = '1'";
-	$result_effacer = spip_query($query_effacer);	
 }
 
 
+function supprimer_referers($type){
+
+	// Recuperer les 100 plus gros referers de ce type
+	$query = "SELECT id_referer, visites FROM spip_visites_referers WHERE type ='$type' ORDER BY visites DESC LIMIT 0,100";
+	$result = spip_query($query);
+	while ($row = mysql_fetch_array($result)) {
+		$id_referer[] = $row['id_referer'];
+		$visites = $visites + $row['visites'];
+	}
+	
+	// Supprimer les autres s'ils datent de plus d'une semaine
+	if ($id_referer){
+		$referers = join($id_referer, ",");
+		$query = "DELETE FROM spip_visites_referers WHERE type ='$type' AND id_referer NOT IN ($referers) AND date < DATE_SUB(NOW(),INTERVAL 7 DAY)";
+		$result = spip_query($query);		
+	}
+	
+	// Reinjecter total des visites des referers dans spip_articles
+	if (ereg("article([0-9]+)", $type, $regs)){
+		$id_article = $regs[1];
+		if ($visites<1) $visites = 1;
+		$query = "UPDATE spip_articles SET referers = '$visites' WHERE id_article = '$id_article'";
+		$result = spip_query($query);
+	}
+	
+}
+
+function optimiser_referers(){
+
+	// Supprimer referers inutiles
+	
+	supprimer_referers("tout");
+	
+	$query = "SELECT id_article FROM spip_articles WHERE statut = 'publie'";
+	$result = spip_query($query);
+	while ($row = mysql_fetch_array($result)) {
+		$id_article = $row['id_article'];
+		supprimer_referers("article$id_article");
+	}
+	
+	
+	// Calculer et reinjecter popularite
+	$query = "SELECT id_article, visites, referers FROM spip_articles WHERE statut = 'publie'";
+	$result = spip_query($query);
+	while ($row = mysql_fetch_array($result)) {
+		$id_article = $row['id_article'];
+		$visites = $row['visites'];
+		$referers  = $row['referers'];
+		$popularite[$id_article] = $visites * $referers;
+	}
+	if (count($popularite)>0){
+		$max_pop = max($popularite);
+		while (list($id_article, $pop) = each($popularite)) {
+			$relatif = round($pop/$max_pop*1000000);
+			$query = "UPDATE spip_articles SET popularite = '$relatif' WHERE id_article = '$id_article'";
+			$result = spip_query($query);
+		}
+	}
+}
+
+
+
+
 ?>
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index a2ea15431e575c8299d1a3655d5f0199e662f0f4..539a0910d22a2545b62dfa7ee245ee6445e68f5b 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -13,7 +13,7 @@ define("_ECRIRE_INC_VERSION", "1");
 //
 
 // version de la base
-$spip_version = 1.431;
+$spip_version = 1.432;
 
 // version de spip
 // (mettre a jour a la main et conserver la mention "CVS")
diff --git a/ecrire/index.php3 b/ecrire/index.php3
index a4af2a4f5a5da68d9c06b3b38b92386a5694b6ca..e24a45757e9b662d8dc7e2c1bd827a5278596305 100644
--- a/ecrire/index.php3
+++ b/ecrire/index.php3
@@ -456,6 +456,12 @@ if (($date - $date_opt) > 8 * 3600) {
 	calculer_visites();
 }
 
+// Optimiser les referers
+if (($date - $date_opt) > 19 * 3600) {
+	include ("inc_statistiques.php3");
+	optimiser_referers();
+}
+
 
 include_local ("inc_mail.php3");
 include_local ("inc_sites.php3");
diff --git a/ecrire/statistiques_recents.php3 b/ecrire/statistiques_recents.php3
index 5bb77ae156aadf76c1c16aa3d005bbcf4b472a5c..9f6184301ad1ebba3c82fd3467ae7b4e362d48a0 100644
--- a/ecrire/statistiques_recents.php3
+++ b/ecrire/statistiques_recents.php3
@@ -47,10 +47,30 @@ if ($row = mysql_fetch_array($result)) {
 	$date = $row['cnt'];
 }
 
-afficher_articles("Les articles r&eacute;cents (3 mois) les plus visit&eacute;s",
+echo "<font size=2 face='verdana,arial,helvetica'><b>";
+echo "[<a href='statistiques_recents.php3'>par nombre de visites</a>] ";
+echo "[<a href='statistiques_recents.php3?critere=referers'>par arriv&eacute;es directes sur la page</a>] ";
+echo "[<a href='statistiques_recents.php3?critere=popularite'>par popularit&eacute;</a>] ";
+echo "</b></font><p>";
+
+if ($critere == "referers"){
+	afficher_articles("Les articles r&eacute;cents (3 mois) les plus r&eacute;f&eacute;renc&eacute;s",
 "SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ".
-"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY visites DESC LIMIT 0,100", true);
+"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY referers DESC LIMIT 0,100", true);
+}
+else if ($critere == "popularite"){
 
+	echo propre("La Çpopularit&eacute;È est calcul&eacute;e d'apr&egrave;s le nombre d'arriv&eacute;es directes sur un article, multipli&eacute; par le nombre de visites. Un article devient donc &laquo;populaire&raquo; lorsqu'il fait l'objet d'un r&eacute;f&eacute;rencement sur d'autres sites et lorsqu'il est tr&egrave;s visit&eacute;.")."<p>";
+
+	afficher_articles("Les articles r&eacute;cents (3 mois) les plus populaires",
+"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ".
+"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY popularite DESC LIMIT 0,100", true);
+}
+else{
+	afficher_articles("Les articles r&eacute;cents (3 mois) les plus visit&eacute;s",
+"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ".
+"FROM spip_articles WHERE visites > 0 AND date>DATE_SUB('$date',INTERVAL 90 DAY) ORDER BY visites DESC LIMIT 0,100", true);
+}
 
 fin_page();
 
diff --git a/ecrire/statistiques_tous.php3 b/ecrire/statistiques_tous.php3
index a2dc54ce19e764ab7e3b891b8eaf220d621b6161..49b38f0edf02e6c48df3e7159c8092fe3cf84fd6 100644
--- a/ecrire/statistiques_tous.php3
+++ b/ecrire/statistiques_tous.php3
@@ -47,9 +47,36 @@ if ($row = mysql_fetch_array($result)) {
 }
 
 
-afficher_articles("Les articles les plus visit&eacute;s depuis le d&eacute;but",
+
+
+
+echo "<font size=2 face='verdana,arial,helvetica'><b>";
+echo "[<a href='statistiques_tous.php3'>par nombre de visites</a>] ";
+echo "[<a href='statistiques_tous.php3?critere=referers'>par arriv&eacute;es directes sur la page</a>] ";
+echo "[<a href='statistiques_tous.php3?critere=popularite'>par popularit&eacute;</a>] ";
+echo "</b></font><p>";
+
+if ($critere == "referers"){
+	afficher_articles("Les articles les plus visit&eacute;s depuis le d&eacute;but",
+"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ".
+"FROM spip_articles WHERE visites > 0 ORDER BY referers DESC LIMIT 0,100", true);
+}
+else if ($critere == "popularite"){
+
+	echo propre("La Çpopularit&eacute;È est calcul&eacute;e d'apr&egrave;s le nombre d'arriv&eacute;es directes sur un article, multipli&eacute; par le nombre de visites. Un article devient donc &laquo;populaire&raquo; lorsqu'il fait l'objet d'un r&eacute;f&eacute;rencement sur d'autres sites et lorsqu'il est tr&egrave;s visit&eacute;.")."<p>";
+	afficher_articles("Les articles les plus visit&eacute;s depuis le d&eacute;but",
+"SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ".
+"FROM spip_articles WHERE visites > 0 ORDER BY popularite DESC LIMIT 0,100", true);
+}
+else{
+	afficher_articles("Les articles les plus visit&eacute;s depuis le d&eacute;but",
 "SELECT id_article, surtitre, titre, soustitre, descriptif, chapo, date, visites, id_rubrique, statut ".
 "FROM spip_articles WHERE visites > 0 ORDER BY visites DESC LIMIT 0,100", true);
+}
+
+
+
+
 
 fin_page();