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êtes des moteurs de recherche est réalisé<br>à partir d'un extrait du code de <a href='http://www.phpinfo.net/'>Visiteurs</a>,<br> par Jean-Pierre Dézélus."; + echo "<br>L'affichage des requêtes des moteurs de recherche est réalisé<br>à partir d'un extrait du code de <a href='http://www.phpinfo.net/'>Visiteurs</a>, par Jean-Pierre Dézé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écents (3 mois) les plus visité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ées directes sur la page</a>] "; +echo "[<a href='statistiques_recents.php3?critere=popularite'>par popularité</a>] "; +echo "</b></font><p>"; + +if ($critere == "referers"){ + afficher_articles("Les articles récents (3 mois) les plus référencé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éÈ est calculée d'après le nombre d'arrivées directes sur un article, multiplié par le nombre de visites. Un article devient donc «populaire» lorsqu'il fait l'objet d'un référencement sur d'autres sites et lorsqu'il est très visité.")."<p>"; + + afficher_articles("Les articles ré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écents (3 mois) les plus visité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és depuis le dé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ées directes sur la page</a>] "; +echo "[<a href='statistiques_tous.php3?critere=popularite'>par popularité</a>] "; +echo "</b></font><p>"; + +if ($critere == "referers"){ + afficher_articles("Les articles les plus visités depuis le dé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éÈ est calculée d'après le nombre d'arrivées directes sur un article, multiplié par le nombre de visites. Un article devient donc «populaire» lorsqu'il fait l'objet d'un référencement sur d'autres sites et lorsqu'il est très visité.")."<p>"; + afficher_articles("Les articles les plus visités depuis le dé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és depuis le dé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();