Subversion Repositories Sites.tela-botanica.org

Rev

Rev 609 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 david 1
<?php
2
 
3
/***************************************************************************\
4
 *  SPIP, Systeme de publication pour l'internet                           *
5
 *                                                                         *
6
 *  Copyright (c) 2001-2005                                                *
7
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8
 *                                                                         *
9
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11
\***************************************************************************/
12
 
13
 
14
// Ce fichier ne sera execute qu'une fois
15
if (defined("_ECRIRE_INC_VISITES")) return;
16
define("_ECRIRE_INC_VISITES", "1");
17
 
18
function calculer_visites() {
19
 
20
	// La date des enregistrements de spip_visites_temp correspond a la veille
21
	// du calcul.
22
	$hier = date("Y-m-d", time() - 24*3600);
23
 
24
	// Sur tout le site, nombre de visiteurs uniques pendant la periode
25
	// qui precede (normalement, une journee)
26
	$query = "SELECT COUNT(DISTINCT ip) AS total_visites FROM spip_visites_temp";
27
	$result = spip_query($query);
28
	if ($row = @spip_fetch_array($result))
29
		$total_visites = $row['total_visites'];
30
	else
31
		$total_visites = 0;
32
	spip_query("INSERT IGNORE INTO spip_visites
33
		(date, visites) VALUES ('$hier', 0)");
34
	spip_query("UPDATE spip_visites SET visites = visites+$total_visites
35
		WHERE date='$hier'");
36
 
37
	// Nombre de visiteurs uniques par article
38
	$query = "SELECT COUNT(DISTINCT ip) AS visites, id_objet
39
		FROM spip_visites_temp WHERE type='article' GROUP BY id_objet";
40
	$result = spip_query($query);
41
 
42
	$visites_insert = array();
43
	$visites_update = array();
44
 
45
	while ($row = @spip_fetch_array($result)) {
46
		$id_article = $row['id_objet'];
47
		$visites = $row['visites'];
48
		$visites_update[$visites][] = $id_article;
49
	}
50
 
51
	$query_effacer = "DELETE FROM spip_visites_temp";
52
	$result_effacer = spip_query($query_effacer);
53
 
54
	// Mise a jour de la base
55
	foreach ($visites_update as $visites => $articles) {
56
		// Augmenter les stats totales des articles
57
		spip_query("UPDATE spip_articles SET maj=maj,
58
			visites = visites + $visites
59
			WHERE id_article IN (".join(',', $articles).")");
60
		// Inserer des visites pour la journee (si pas deja fait)
61
		$insert = "('$hier',0,". join ("),('$hier',0,", $articles) . ')';
62
		spip_query("INSERT IGNORE INTO spip_visites_articles
63
			(date, visites, id_article) VALUES $insert");
64
		// Augmenter les stats des visites de la journee
65
		spip_query("UPDATE spip_visites_articles
66
			SET visites=visites+$visites WHERE date='$hier'
67
			AND id_article IN (".join(',', $articles).")");
68
	}
69
 
70
	// Une fois par jour purger les referers du jour ; qui deviennent
71
	// donc ceux de la veille ; au passage on stocke une date_statistiques
72
	// dans spip_meta - cela permet au code d'etre "reentrant", ie ce cron
73
	// peut etre appele par deux bases SPIP ne partageant pas le meme
74
	// _DIR_SESSIONS, sans tout casser...
75
	$aujourdhui = date("Y-m-d");
76
	if ($date_referers = lire_meta('date_statistiques')
77
	AND $date_referers != $aujourdhui) {
78
		spip_query("UPDATE spip_referers SET visites_veille=visites_jour, visites_jour=0");
79
	}
80
	ecrire_meta('date_statistiques', $aujourdhui);
81
	ecrire_metas();
82
	return 1;
83
}
84
 
85
?>