[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / statistiques / genie / popularites.php
index 98de11c..2c504ba 100644 (file)
@@ -3,25 +3,45 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2019                                                *
  *  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.   *
 \***************************************************************************/
 
-if (!defined("_ECRIRE_INC_VERSION")) return;
+/**
+ * Gestion du calcul des popularités (cron)
+ *
+ * @plugin Statistiques pour SPIP
+ * @license GNU/GPL
+ * @package SPIP\Statistiques\Genie
+ **/
 
-//
-// Popularite, modele logarithmique
-//
-function genie_popularite_constantes($duree){
+if (!defined("_ECRIRE_INC_VERSION")) {
+       return;
+}
+
+
+/**
+ * Calcule des coefficients de popularité en fonction de l'intervalle
+ * écoulé depuis le précédent calcul
+ *
+ * Popularite, modele logarithmique
+ *
+ * @param int $duree Intervalle écoulé depuis le précédent calcul
+ * @return array {
+ * @type float $a Coefficient d'amortissement
+ * @type float $b Constante multiplicative
+ * }
+ **/
+function genie_popularite_constantes($duree) {
        // duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
        $demivie = 0.5;
        // periode de reference en jours
        $periode = 1;
        // $a est le coefficient d'amortissement depuis la derniere mesure
-       $a = pow(2, - $duree / ($demivie * 24 * 3600));
+       $a = pow(2, -$duree / ($demivie * 24 * 3600));
        // $b est la constante multiplicative permettant d'avoir
        // une visite par jour (periode de reference) = un point de popularite
        // (en regime stationnaire)
@@ -29,24 +49,34 @@ function genie_popularite_constantes($duree){
        // si la demi-vie n'est pas trop proche de la seconde ;)
        $b = log(2) * $periode / $demivie;
 
-       return array($a,$b);
+       return array($a, $b);
 }
 
-// https://code.spip.net/@genie_popularites_dist
+/**
+ * Cron de calcul des popularités des articles
+ *
+ * @uses genie_popularite_constantes()
+ *
+ * @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_popularites_dist($t) {
 
        // Si c'est le premier appel, ne pas calculer
        $t = $GLOBALS['meta']['date_popularites'];
        ecrire_meta('date_popularites', time());
 
-       if (!$t)
+       if (!$t) {
                return 1;
+       }
 
        $duree = time() - $t;
-       list($a,$b) = genie_popularite_constantes($duree);
+       list($a, $b) = genie_popularite_constantes($duree);
 
        // du passe, faisons table (SQL) rase
-       sql_update('spip_articles', array('maj'=>'maj', 'popularite' => "popularite * $a"), 'popularite>1');
+       sql_update('spip_articles', array('maj' => 'maj', 'popularite' => "popularite * $a"), 'popularite>1');
 
        // enregistrer les metas...
        $row = sql_fetsel('MAX(popularite) AS max, SUM(popularite) AS tot', "spip_articles");
@@ -64,22 +94,22 @@ function genie_popularites_dist($t) {
        if (($d = $GLOBALS['meta']['date_statistiques']) != $aujourdhui) {
                spip_log("Popularite: purger referer depuis $d");
                ecrire_meta('date_statistiques', $aujourdhui);
-               if (strncmp($GLOBALS['connexions'][0]['type'],'sqlite',6)==0)
+               if (strncmp($GLOBALS['connexions'][0]['type'], 'sqlite', 6) == 0) {
                        spip_query("UPDATE spip_referers SET visites_veille=visites_jour, visites_jour=0");
-         else
+               } else
                        // version 3 fois plus rapide, mais en 2 requetes
                        #spip_query("ALTER TABLE spip_referers CHANGE visites_jour visites_veille INT( 10 ) UNSIGNED NOT NULL DEFAULT '0',CHANGE visites_veille visites_jour INT( 10 ) UNSIGNED NOT NULL DEFAULT '0'");
                        #spip_query("UPDATE spip_referers SET visites_jour=0");
                        // version 4 fois plus rapide que la premiere, en une seule requete
-                 // ATTENTION : peut poser probleme cf https://core.spip.net/issues/2505
+                       // ATTENTION : peut poser probleme cf https://core.spip.net/issues/2505
+               {
                        sql_alter("TABLE spip_referers DROP visites_veille,
                        CHANGE visites_jour visites_veille INT(10) UNSIGNED NOT NULL DEFAULT '0',
                        ADD visites_jour INT(10) UNSIGNED NOT NULL DEFAULT '0'");
+               }
        }
+
        // et c'est fini pour cette fois-ci
        return 1;
 
 }
-
-?>
\ No newline at end of file