Subversion Repositories Sites.tela-botanica.org

Rev

Details | 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_POPULARITES")) return;
16
define("_ECRIRE_INC_POPULARITES", "1");
17
 
18
//
19
// Popularite, modele logarithmique
20
//
21
 
22
function calculer_popularites($t) {
23
 
24
	$duree = time() - $t;
25
	// duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
26
	$demivie = 1;
27
	// periode de reference en jours
28
	$periode = 1;
29
	// $a est le coefficient d'amortissement depuis la derniere mesure
30
	$a = pow(2, - $duree / ($demivie * 24 * 3600));
31
	// $b est la constante multiplicative permettant d'avoir
32
	// une visite par jour (periode de reference) = un point de popularite
33
	// (en regime stationnaire)
34
	// or, magie des maths, ca vaut log(2) * duree journee/demi-vie
35
	// si la demi-vie n'est pas trop proche de la seconde ;)
36
	$b = log(2) * $periode / $demivie;
37
 
38
	// oublier un peu le passe
39
	spip_query("UPDATE spip_articles SET maj=maj, popularite = popularite * $a");
40
 
41
	// ajouter les points visites
42
	$count_article = Array();
43
	$query = "SELECT COUNT(*) as count,id_objet FROM spip_visites_temp WHERE maj > DATE_SUB(NOW(), INTERVAL $duree SECOND) AND type='article' GROUP BY id_objet";
44
	$res = spip_query($query);
45
	while ($row = @spip_fetch_array($res)) {
46
		$count_article[$row['count']] .= ','.$row['id_objet'];	// l'objet a count visites
47
	}
48
 
49
	foreach($count_article as $count => $articles) {
50
		$query = "UPDATE spip_articles
51
			SET maj=maj, popularite = GREATEST(1,popularite) + $b * $count
52
			WHERE id_article IN (0$articles)";
53
		spip_query($query);
54
	}
55
 
56
	// ajouter les points referers
57
	$count_article = Array();
58
	$query = "SELECT COUNT(*) as count,id_objet FROM spip_referers_temp WHERE maj > DATE_SUB(NOW(), INTERVAL $duree SECOND) AND type='article' GROUP BY id_objet";
59
	$res = spip_query($query);
60
	while ($row = @spip_fetch_array($res)) {
61
		$count_article[$row['count']] .= ','.$row['id_objet'];	// l'objet a count referers
62
	}
63
 
64
	foreach($count_article as $count => $articles) {
65
		$query = "UPDATE spip_articles
66
			SET maj=maj, popularite = GREATEST(1,popularite) + $b * $count
67
			WHERE id_article IN (0$articles)";
68
		spip_query($query);
69
	}
70
 
71
	// et enregistrer les metas...
72
	list($maxpop, $totalpop) = spip_fetch_array(spip_query("SELECT MAX(popularite), SUM(popularite) FROM spip_articles"));
73
	ecrire_meta("popularite_max", $maxpop);
74
	ecrire_meta("popularite_total", $totalpop);
75
	ecrire_metas();
76
}
77
?>