Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2005 *
* 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. *
\***************************************************************************/
// Ce fichier ne sera execute qu'une fois
if (defined("_ECRIRE_INC_VISITES")) return;
define("_ECRIRE_INC_VISITES", "1");
function calculer_visites() {
// La date des enregistrements de spip_visites_temp correspond a la veille
// du calcul.
$hier = date("Y-m-d", time() - 24*3600);
// Sur tout le site, nombre de visiteurs uniques pendant la periode
// qui precede (normalement, une journee)
$query = "SELECT COUNT(DISTINCT ip) AS total_visites FROM spip_visites_temp";
$result = spip_query($query);
if ($row = @spip_fetch_array($result))
$total_visites = $row['total_visites'];
else
$total_visites = 0;
spip_query("INSERT IGNORE INTO spip_visites
(date, visites) VALUES ('$hier', 0)");
spip_query("UPDATE spip_visites SET visites = visites+$total_visites
WHERE date='$hier'");
// Nombre de visiteurs uniques par article
$query = "SELECT COUNT(DISTINCT ip) AS visites, id_objet
FROM spip_visites_temp WHERE type='article' GROUP BY id_objet";
$result = spip_query($query);
$visites_insert = array();
$visites_update = array();
while ($row = @spip_fetch_array($result)) {
$id_article = $row['id_objet'];
$visites = $row['visites'];
$visites_update[$visites][] = $id_article;
}
$query_effacer = "DELETE FROM spip_visites_temp";
$result_effacer = spip_query($query_effacer);
// Mise a jour de la base
foreach ($visites_update as $visites => $articles) {
// Augmenter les stats totales des articles
spip_query("UPDATE spip_articles SET maj=maj,
visites = visites + $visites
WHERE id_article IN (".join(',', $articles).")");
// Inserer des visites pour la journee (si pas deja fait)
$insert = "('$hier',0,". join ("),('$hier',0,", $articles) . ')';
spip_query("INSERT IGNORE INTO spip_visites_articles
(date, visites, id_article) VALUES $insert");
// Augmenter les stats des visites de la journee
spip_query("UPDATE spip_visites_articles
SET visites=visites+$visites WHERE date='$hier'
AND id_article IN (".join(',', $articles).")");
}
// Une fois par jour purger les referers du jour ; qui deviennent
// donc ceux de la veille ; au passage on stocke une date_statistiques
// dans spip_meta - cela permet au code d'etre "reentrant", ie ce cron
// peut etre appele par deux bases SPIP ne partageant pas le meme
// _DIR_SESSIONS, sans tout casser...
$aujourdhui = date("Y-m-d");
if ($date_referers = lire_meta('date_statistiques')
AND $date_referers != $aujourdhui) {
spip_query("UPDATE spip_referers SET visites_veille=visites_jour, visites_jour=0");
}
ecrire_meta('date_statistiques', $aujourdhui);
ecrire_metas();
return 1;
}
?>