~maj v3.0.19-->v3.0.21
[ptitvelo/web/www.git] / www / plugins-dist / statistiques / genie / visites.php
index 053f013..8e789ab 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2013                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -20,7 +20,7 @@ if (!defined('_CRON_LOT_FICHIERS_VISITE')) define('_CRON_LOT_FICHIERS_VISITE', 1
 //
 // prendre en compte un fichier de visite
 //
-// http://doc.spip.org/@compte_fichier_visite
+// http://code.spip.net/@compte_fichier_visite
 function compte_fichier_visite($fichier, &$visites, &$visites_a, &$referers, &$referers_a) {
 
        // Noter la visite du site (article 0)
@@ -50,7 +50,7 @@ function compte_fichier_visite($fichier, &$visites, &$visites_a, &$referers, &$r
 }
 
 
-// http://doc.spip.org/@calculer_visites
+// http://code.spip.net/@calculer_visites
 function calculer_visites($t) {
        include_spip('base/abstract_sql');
 
@@ -131,14 +131,14 @@ function calculer_visites($t) {
                                        if (count($noref))
                                                sql_update('spip_articles',
                                                        array('visites' => "visites+$n",
-                                                        'popularite' => "popularite+".round($n*$b,2),
+                                                        'popularite' => "popularite+".number_format(round($n*$b,2), 2, '.', ''),
                                                         'maj' => 'maj'),
                                                        sql_in('id_article',$noref));
                                                           
                                        if (count($ref))
                                                sql_update('spip_articles',
                                                           array('visites' => "visites+".($n+1),
-                                                        'popularite' => "popularite+".round($n*$b,2),
+                                                        'popularite' => "popularite+".number_format(round($n*$b,2), 2, '.', ''),
                                                         'maj' => 'maj'),
                                                        sql_in('id_article',$ref));
                                                           
@@ -207,10 +207,32 @@ function calculer_visites($t) {
        }
 }
 
-//
-// Calcule les stats en plusieurs etapes
-//
-// http://doc.spip.org/@genie_visites_dist
+/**
+ * Nettoyer les IPs des flooders 24H apres leur dernier passage
+ */
+function visites_nettoyer_flood(){
+       if (is_dir($dir=_DIR_TMP.'flood/')){
+               include_spip('inc/invalideur');
+               if (!defined('_IP_FLOOD_TTL')) define('_IP_FLOOD_TTL',24*3600); // 24H par defaut
+               $options = array(
+                       'mtime' => $_SERVER['REQUEST_TIME'] - _IP_FLOOD_TTL,
+               );
+               purger_repertoire($dir,$options);
+       }
+}
+
+
+/**
+ * Cron de calcul de statistiques des visites
+ * 
+ * Calcule les stats en plusieurs étapes
+ * @uses calculer_visites()
+ * 
+ * @param int $t
+ *     Timestamp de la dernière exécution de cette tâche
+ * @return int
+ *     Positif si la tâche a été terminée, négatif pour réexécuter cette tâche
+**/
 function genie_visites_dist($t) {
        $encore = calculer_visites($t);
 
@@ -219,6 +241,9 @@ function genie_visites_dist($t) {
        if ($encore)
                return (0 - $t);
 
+       // nettoyer les IP des floodeurs quand on a fini de compter les stats
+       visites_nettoyer_flood();
+
        return 1;
 }
 ?>