Changeset 93626 in spip-zone
- Timestamp:
- Dec 13, 2015, 11:56:49 AM (5 years ago)
- Location:
- _core_/plugins/statistiques
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
_core_/plugins/statistiques/action/statistiques_archiver.php
r93092 r93626 17 17 * @license GNU/GPL 18 18 * @package SPIP\Stats\Actions 19 **/ 20 21 if (!defined("_ECRIRE_INC_VERSION")) return; 19 **/ 20 21 if (!defined("_ECRIRE_INC_VERSION")) { 22 return; 23 } 22 24 23 25 … … 25 27 /** 26 28 * Nombre d'années après quoi on permet de concaténer les statistiques de visites par mois 27 * 29 * 28 30 * Après ce nombre d'années, on peut concaténer les données de visites d'articles par mois 29 31 * pour prendre moins de place dans la base de données 30 32 * 31 * @var int Nombre d'années 32 **/33 * @var int Nombre d'années 34 **/ 33 35 define('STATISTIQUES_ARCHIVER_PAR_MOIS', 2); 34 36 } … … 37 39 /** 38 40 * Nombre d'années après quoi on permet de concaténer les statistiques de visites par an 39 * 41 * 40 42 * Après ce nombre d'années, on peut concaténer les données de visites d'articles par années 41 43 * pour prendre moins de place dans la base de données 42 44 * 43 * @var int Nombre d'années 44 **/45 * @var int Nombre d'années 46 **/ 45 47 define('STATISTIQUES_ARCHIVER_PAR_AN', 5); 46 48 } … … 49 51 /** 50 52 * Archiver ou nettoyer des statistiques 51 * 53 * 52 54 * @param string $arg 53 55 */ 54 function action_statistiques_archiver_dist($arg = null) {56 function action_statistiques_archiver_dist($arg = null) { 55 57 if (!$arg) { 56 58 $securiser_action = charger_fonction('securiser_action', 'inc'); … … 67 69 'nettoyer_visites_articles', 68 70 'nettoyer_referers_articles' 69 ))) { 71 )) 72 ) { 70 73 include_spip('inc/minipres'); 71 74 minipres("Argument non compris"); … … 82 85 * @uses spip_log() 83 86 * @param string $texte 84 **/87 **/ 85 88 function statistiques_archiver_log($texte) { 86 89 spip_log($texte, 'statistiques_archiver.' . _LOG_INFO_IMPORTANTE); … … 92 95 * Supprime toutes les lignes qui ne font pas partie 93 96 * d'un article présent en base 94 **/97 **/ 95 98 function statistiques_nettoyer_visites_articles() { 96 99 statistiques_archiver_log("Supprimer les visites d'articles qui n'existent pas dans spip_articles."); … … 104 107 * Supprime toutes les lignes qui ne font pas partie 105 108 * d'un article présent en base 106 **/109 **/ 107 110 function statistiques_nettoyer_referers_articles() { 108 111 statistiques_archiver_log("Supprimer les referers d'articles qui n'existent pas dans spip_articles."); … … 120 123 * Cet archivage réduit à 1.200.000 entrées en réduisant 121 124 * par mois jusqu'à 2012 inclu et par an jusqu'à 2009 inclu. 122 * 125 * 123 126 * Cela prenait 8 minutes sur ma machine locale 124 127 * (Intel Core i5-4258U CPU @ 2.40GHz × 4 avec disque SSD) … … 127 130 * On peut suivre l'avancement dans le fichier de log 128 131 * tail -f tmp/log/statistiques_archiver.log 129 * 132 * 130 133 * @note 131 134 * On ne peut pas vraiment avec le code actuel de la fonction … … 138 141 * @uses statistiques_concatener_visites_par_mois() 139 142 * @uses statistiques_concatener_visites_par_an() 140 **/143 **/ 141 144 function statistiques_archiver_visites_articles() { 142 145 143 146 // Tenter de donner du temps au temps 144 @set_time_limit(15 *60); // 15mn145 146 $annee_par_mois = date('Y') -STATISTIQUES_ARCHIVER_PAR_MOIS;147 $annee_par_an = date('Y') -STATISTIQUES_ARCHIVER_PAR_AN;147 @set_time_limit(15*60); // 15mn 148 149 $annee_par_mois = date('Y')-STATISTIQUES_ARCHIVER_PAR_MOIS; 150 $annee_par_an = date('Y')-STATISTIQUES_ARCHIVER_PAR_AN; 148 151 149 152 $annee_minimum = statistiques_concatener_annee_minimum(); … … 179 182 * 180 183 * @see statistiques_concatener_visites_entre_jours() 181 * 184 * 182 185 * @param int $annee 183 186 * On concatène ce qui est avant cette année là. 184 **/187 **/ 185 188 function statistiques_concatener_visites_par_mois($annee) { 186 189 return statistiques_concatener_visites_entre_jours($annee, 1, 31); 187 190 } 188 189 191 190 192 … … 201 203 * Toutes les entrées entre le jour $debut+1 et $fin seront supprimées 202 204 * et concaténées au jour $debut. 203 * 204 **/205 * 206 **/ 205 207 function statistiques_concatener_visites_entre_jours($annee, $debut, $fin) { 206 208 … … 212 214 if ($annee_minimum > $annee) { 213 215 statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes !"); 216 214 217 return false; 215 218 } … … 217 220 // on a besoin pour le champ date d'une écriture sur 2 chiffres. 218 221 $debut = str_pad($debut, 2, '0', STR_PAD_LEFT); 219 $fin = str_pad($fin,2, '0', STR_PAD_LEFT);222 $fin = str_pad($fin, 2, '0', STR_PAD_LEFT); 220 223 221 224 statistiques_archiver_log("\nConcaténer les visites d'articles (jours entre $debut et $fin)"); … … 223 226 224 227 $annees = range($annee_minimum, $annee); 225 $mois 228 $mois = range(1, 12); 226 229 227 230 foreach ($annees as $a) { … … 242 245 * - int : l'année 243 246 * - false : année non trouvée. 244 **/247 **/ 245 248 function statistiques_concatener_annee_minimum() { 246 249 static $annee_minimum = null; … … 253 256 if (!$annee_minimum) { 254 257 statistiques_archiver_log("Erreur de calcul de la plus petite année de statistiques !"); 258 255 259 return false; 256 260 } … … 262 266 /** 263 267 * Concatène les statistiques de visites d'articles par an 264 * 268 * 265 269 * @param int $annee 266 270 * On concatène ce qui est avant cette année là. 267 * 268 **/271 * 272 **/ 269 273 function statistiques_concatener_visites_par_an($annee) { 270 274 … … 276 280 if ($annee_minimum > $annee) { 277 281 statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes !"); 282 278 283 return false; 279 284 } … … 301 306 * - false : aucune visite sur cette période 302 307 * - true : il y avait des visites, elles ont été concaténées (ou l'étaient déjà) 303 * 304 **/308 * 309 **/ 305 310 function statistiques_concatener_visites_entre_periode($date_debut, $date_fin) { 306 311 -
_core_/plugins/statistiques/base/delete_referers.php
r93092 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; // securiser 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } // securiser 14 16 15 17 // faudrait plutot recuperer dans inc_serialbase et inc_auxbase … … 20 22 /** 21 23 * Supprimer les referers 24 * 22 25 * @param strinf $titre 23 26 * @param bool $reprise 24 27 * @return string 25 28 */ 26 function base_delete_referers_dist($titre = '', $reprise = '') 27 { 28 if (!$titre) return; // anti-testeur automatique 29 function base_delete_referers_dist($titre = '', $reprise = '') { 30 if (!$titre) { 31 return; 32 } // anti-testeur automatique 29 33 sql_delete("spip_referers"); 30 34 sql_delete("spip_referers_articles"); 31 sql_update("spip_articles", array('referers' =>0));35 sql_update("spip_articles", array('referers' => 0)); 32 36 33 37 // un pipeline pour detruire les tables de referers installees par les plugins ? 34 38 //pipeline('delete_referers', ''); 35 39 36 40 spip_log("raz des referers operee redirige vers " . _request('redirect')); 37 41 } 42 38 43 ?> -
_core_/plugins/statistiques/base/delete_stats.php
r93092 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; // securiser 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } // securiser 14 16 15 17 // faudrait plutot recuperer dans inc_serialbase et inc_auxbase … … 20 22 /** 21 23 * Supprimer les stats 24 * 22 25 * @param strinf $titre 23 26 * @param bool $reprise 24 27 * @return string 25 28 */ 26 function base_delete_stats_dist($titre = '', $reprise = '') 27 { 28 if (!$titre) return; // anti-testeur automatique 29 function base_delete_stats_dist($titre = '', $reprise = '') { 30 if (!$titre) { 31 return; 32 } // anti-testeur automatique 29 33 sql_delete("spip_visites"); 30 34 sql_delete("spip_visites_articles"); 31 35 sql_delete("spip_referers"); 32 36 sql_delete("spip_referers_articles"); 33 sql_update("spip_articles", array('visites' =>0, 'referers'=>0, 'popularite'=>0));37 sql_update("spip_articles", array('visites' => 0, 'referers' => 0, 'popularite' => 0)); 34 38 35 39 // un pipeline pour detruire les tables de stats installees par les plugins … … 37 41 spip_log("raz des stats operee redirige vers " . _request('redirect')); 38 42 } 43 39 44 ?> -
_core_/plugins/statistiques/base/stats.php
r92665 r93626 13 13 /** 14 14 * Déclarations relatives à la base de données 15 * 15 * 16 16 * @plugin Statistiques pour SPIP 17 17 * @license GNU/GPL 18 18 * @package SPIP\Stats\Pipelines 19 **/19 **/ 20 20 21 if (!defined("_ECRIRE_INC_VERSION")) return; 21 if (!defined("_ECRIRE_INC_VERSION")) { 22 return; 23 } 22 24 23 25 /** … … 36 38 * Description complétée des tables auxiliaires 37 39 */ 38 function stats_declarer_tables_auxiliaires($tables_auxiliaires) {40 function stats_declarer_tables_auxiliaires($tables_auxiliaires) { 39 41 40 42 $spip_visites = array( 41 "date" => "DATE NOT NULL", 42 "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", 43 "maj" => "TIMESTAMP"); 43 "date" => "DATE NOT NULL", 44 "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", 45 "maj" => "TIMESTAMP" 46 ); 44 47 45 48 $spip_visites_key = array( 46 "PRIMARY KEY" => "date"); 49 "PRIMARY KEY" => "date" 50 ); 47 51 48 52 $spip_visites_articles = array( 49 "date" => "DATE NOT NULL", 50 "id_article" => "int UNSIGNED NOT NULL", 51 "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", 52 "maj" => "TIMESTAMP"); 53 "date" => "DATE NOT NULL", 54 "id_article" => "int UNSIGNED NOT NULL", 55 "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", 56 "maj" => "TIMESTAMP" 57 ); 53 58 54 59 $spip_visites_articles_key = array( 55 "PRIMARY KEY" => "date, id_article");56 60 "PRIMARY KEY" => "date, id_article" 61 ); 57 62 58 63 59 64 $spip_referers = array( 60 "referer_md5" => "bigint UNSIGNED NOT NULL", 61 "date" => "DATE NOT NULL", 62 "referer" => "VARCHAR (255)", 63 "visites" => "int UNSIGNED NOT NULL", 64 "visites_jour" => "int UNSIGNED NOT NULL", 65 "visites_veille"=> "int UNSIGNED NOT NULL", 66 "maj" => "TIMESTAMP"); 65 "referer_md5" => "bigint UNSIGNED NOT NULL", 66 "date" => "DATE NOT NULL", 67 "referer" => "VARCHAR (255)", 68 "visites" => "int UNSIGNED NOT NULL", 69 "visites_jour" => "int UNSIGNED NOT NULL", 70 "visites_veille" => "int UNSIGNED NOT NULL", 71 "maj" => "TIMESTAMP" 72 ); 67 73 68 74 $spip_referers_key = array( 69 "PRIMARY KEY" => "referer_md5"); 75 "PRIMARY KEY" => "referer_md5" 76 ); 70 77 71 78 $spip_referers_articles = array( 72 "id_article" => "int UNSIGNED NOT NULL", 73 "referer_md5" => "bigint UNSIGNED NOT NULL", 74 "referer" => "VARCHAR (255) DEFAULT '' NOT NULL", 75 "visites" => "int UNSIGNED NOT NULL", 76 "maj" => "TIMESTAMP"); 79 "id_article" => "int UNSIGNED NOT NULL", 80 "referer_md5" => "bigint UNSIGNED NOT NULL", 81 "referer" => "VARCHAR (255) DEFAULT '' NOT NULL", 82 "visites" => "int UNSIGNED NOT NULL", 83 "maj" => "TIMESTAMP" 84 ); 77 85 78 86 $spip_referers_articles_key = array( 79 "PRIMARY KEY" => "id_article, referer_md5", 80 "KEY referer_md5" => "referer_md5"); 87 "PRIMARY KEY" => "id_article, referer_md5", 88 "KEY referer_md5" => "referer_md5" 89 ); 81 90 82 91 $tables_auxiliaires['spip_visites'] = array( 83 92 'field' => &$spip_visites, 84 'key' => &$spip_visites_key); 93 'key' => &$spip_visites_key 94 ); 85 95 $tables_auxiliaires['spip_visites_articles'] = array( 86 96 'field' => &$spip_visites_articles, 87 'key' => &$spip_visites_articles_key); 97 'key' => &$spip_visites_articles_key 98 ); 88 99 $tables_auxiliaires['spip_referers'] = array( 89 100 'field' => &$spip_referers, 90 'key' => &$spip_referers_key); 101 'key' => &$spip_referers_key 102 ); 91 103 $tables_auxiliaires['spip_referers_articles'] = array( 92 104 'field' => &$spip_referers_articles, 93 'key' => &$spip_referers_articles_key); 105 'key' => &$spip_referers_articles_key 106 ); 94 107 95 108 return $tables_auxiliaires; -
_core_/plugins/statistiques/exec/base_delete_referers.php
r82427 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 17 16 function exec_base_delete_referers_dist() 17 { 18 function exec_base_delete_referers_dist() { 18 19 include_spip('inc/autoriser'); 19 if (!autoriser('detruire', '_statistiques')) {20 if (!autoriser('detruire', '_statistiques')) { 20 21 include_spip('inc/minipres'); 21 22 echo minipres(); … … 24 25 $admin = charger_fonction('admin', 'inc'); 25 26 $res = $admin('delete_referers', _T('statistiques:bouton_effacer_referers'), ''); 26 if ($res) echo $res; else redirige_url_ecrire('stats_referers',''); 27 27 if ($res) { 28 echo $res; 29 } else { 30 redirige_url_ecrire('stats_referers', ''); 31 } 32 28 33 } 29 34 } 35 30 36 ?> -
_core_/plugins/statistiques/exec/base_delete_stats.php
r79783 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 17 16 function exec_base_delete_stats_dist() 17 { 18 function exec_base_delete_stats_dist() { 18 19 include_spip('inc/autoriser'); 19 if (!autoriser('detruire', '_statistiques')) {20 if (!autoriser('detruire', '_statistiques')) { 20 21 include_spip('inc/minipres'); 21 22 echo minipres(); … … 24 25 $admin = charger_fonction('admin', 'inc'); 25 26 $res = $admin('delete_stats', _T('statistiques:bouton_effacer_statistiques'), ''); 26 if ($res) echo $res; else redirige_url_ecrire('stats_visites',''); 27 27 if ($res) { 28 echo $res; 29 } else { 30 redirige_url_ecrire('stats_visites', ''); 31 } 32 28 33 } 29 34 } 35 30 36 ?> -
_core_/plugins/statistiques/formulaires/configurer_compteur.php
r79783 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 function formulaires_configurer_compteur_charger_dist() {17 function formulaires_configurer_compteur_charger_dist() { 16 18 17 19 $valeurs = array(); 18 20 19 21 $valeurs['activer_statistiques'] = $GLOBALS['meta']['activer_statistiques']; 20 22 $valeurs['activer_captures_referers'] = $GLOBALS['meta']['activer_captures_referers']; 21 23 22 24 return $valeurs; 23 25 24 26 } 25 27 26 function formulaires_configurer_compteur_verifier_dist() {28 function formulaires_configurer_compteur_verifier_dist() { 27 29 $erreurs = array(); 28 30 29 31 // les checkbox 30 foreach(array('activer_statistiques','activer_captures_referers') as $champ) 31 if (_request($champ)!='oui') 32 set_request($champ,'non'); 33 32 foreach (array('activer_statistiques', 'activer_captures_referers') as $champ) { 33 if (_request($champ) != 'oui') { 34 set_request($champ, 'non'); 35 } 36 } 37 34 38 return $erreurs; 35 39 } 36 40 37 function formulaires_configurer_compteur_traiter_dist() {41 function formulaires_configurer_compteur_traiter_dist() { 38 42 include_spip('inc/config'); 39 43 appliquer_modifs_config(); 40 41 return array('message_ok' =>_T('config_info_enregistree'));44 45 return array('message_ok' => _T('config_info_enregistree')); 42 46 } 43 47 -
_core_/plugins/statistiques/genie/popularites.php
r92685 r93626 13 13 /** 14 14 * Gestion du calcul des popularités (cron) 15 * 15 * 16 16 * @plugin Statistiques pour SPIP 17 17 * @license GNU/GPL 18 18 * @package SPIP\Statistiques\Genie 19 **/19 **/ 20 20 21 if (!defined("_ECRIRE_INC_VERSION")) return; 21 if (!defined("_ECRIRE_INC_VERSION")) { 22 return; 23 } 22 24 23 25 … … 25 27 * Calcule des coefficients de popularité en fonction de l'intervalle 26 28 * écoulé depuis le précédent calcul 27 * 29 * 28 30 * Popularite, modele logarithmique 29 31 * 30 32 * @param int $duree Intervalle écoulé depuis le précédent calcul 31 33 * @return array { 32 * 33 * 34 * @type float $a Coefficient d'amortissement 35 * @type float $b Constante multiplicative 34 36 * } 35 **/36 function genie_popularite_constantes($duree) {37 **/ 38 function genie_popularite_constantes($duree) { 37 39 // duree de demi-vie d'une visite dans le calcul de la popularite (en jours) 38 40 $demivie = 0.5; … … 40 42 $periode = 1; 41 43 // $a est le coefficient d'amortissement depuis la derniere mesure 42 $a = pow(2, - $duree / ($demivie * 24 *3600));44 $a = pow(2, -$duree/($demivie*24*3600)); 43 45 // $b est la constante multiplicative permettant d'avoir 44 46 // une visite par jour (periode de reference) = un point de popularite … … 46 48 // or, magie des maths, ca vaut log(2) * duree journee/demi-vie 47 49 // si la demi-vie n'est pas trop proche de la seconde ;) 48 $b = log(2) * $periode /$demivie;50 $b = log(2)*$periode/$demivie; 49 51 50 return array($a, $b);52 return array($a, $b); 51 53 } 52 54 53 55 /** 54 56 * Cron de calcul des popularités des articles 55 * 57 * 56 58 * @uses genie_popularite_constantes() 57 * 59 * 58 60 * @param int $t 59 61 * Timestamp de la dernière exécution de cette tâche 60 62 * @return int 61 63 * Positif si la tâche a été terminée, négatif pour réexécuter cette tâche 62 **/64 **/ 63 65 function genie_popularites_dist($t) { 64 66 … … 67 69 ecrire_meta('date_popularites', time()); 68 70 69 if (!$t) 71 if (!$t) { 70 72 return 1; 73 } 71 74 72 $duree = time() -$t;73 list($a, $b) = genie_popularite_constantes($duree);75 $duree = time()-$t; 76 list($a, $b) = genie_popularite_constantes($duree); 74 77 75 78 // du passe, faisons table (SQL) rase 76 sql_update('spip_articles', array('maj' =>'maj', 'popularite' => "popularite * $a"), 'popularite>1');79 sql_update('spip_articles', array('maj' => 'maj', 'popularite' => "popularite * $a"), 'popularite>1'); 77 80 78 81 // enregistrer les metas... … … 92 95 spip_log("Popularite: purger referer depuis $d"); 93 96 ecrire_meta('date_statistiques', $aujourdhui); 94 if (strncmp($GLOBALS['connexions'][0]['type'], 'sqlite',6)==0)97 if (strncmp($GLOBALS['connexions'][0]['type'], 'sqlite', 6) == 0) { 95 98 spip_query("UPDATE spip_referers SET visites_veille=visites_jour, visites_jour=0"); 96 99 } else 97 100 // version 3 fois plus rapide, mais en 2 requetes 98 101 #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'"); 99 102 #spip_query("UPDATE spip_referers SET visites_jour=0"); 100 103 // version 4 fois plus rapide que la premiere, en une seule requete 101 // ATTENTION : peut poser probleme cf https://core.spip.net/issues/2505 104 // ATTENTION : peut poser probleme cf https://core.spip.net/issues/2505 105 { 102 106 sql_alter("TABLE spip_referers DROP visites_veille, 103 107 CHANGE visites_jour visites_veille INT(10) UNSIGNED NOT NULL DEFAULT '0', 104 108 ADD visites_jour INT(10) UNSIGNED NOT NULL DEFAULT '0'"); 109 } 105 110 } 106 111 107 112 // et c'est fini pour cette fois-ci 108 113 return 1; -
_core_/plugins/statistiques/genie/visites.php
r92685 r93626 13 13 /** 14 14 * Gestion du compage des statistiques de visites (cron) 15 * 15 * 16 16 * @plugin Statistiques pour SPIP 17 17 * @license GNU/GPL 18 18 * @package SPIP\Statistiques\Genie 19 **/ 20 21 if (!defined("_ECRIRE_INC_VERSION")) return; 22 if (!defined('_CRON_LOT_FICHIERS_VISITE')) define('_CRON_LOT_FICHIERS_VISITE', 100); 19 **/ 20 21 if (!defined("_ECRIRE_INC_VERSION")) { 22 return; 23 } 24 if (!defined('_CRON_LOT_FICHIERS_VISITE')) { 25 define('_CRON_LOT_FICHIERS_VISITE', 100); 26 } 23 27 24 28 ### Pour se debarrasser du md5, comment faire ? Un index sur 'referer' ? … … 40 44 * Couples id_article => array (url_referer => nombre) : comptage par article puis url de referer 41 45 * @return void 42 **/46 **/ 43 47 function compte_fichier_visite($fichier, &$visites, &$visites_a, &$referers, &$referers_a) { 44 48 45 49 // Noter la visite du site (article 0) 46 $visites 50 $visites++; 47 51 48 52 $content = array(); 49 if (lire_fichier($fichier, $content)) 53 if (lire_fichier($fichier, $content)) { 50 54 $content = @unserialize($content); 51 if (!is_array($content)) return; 55 } 56 if (!is_array($content)) { 57 return; 58 } 52 59 53 60 foreach ($content as $source => $num) { 54 61 list($log_type, $log_id_num, $log_referer) 55 62 = preg_split(",\t,", $source, 3); 56 63 57 64 // Noter le referer 58 65 if ($log_referer) { … … 65 72 // S'il s'agit d'un article, noter ses visites 66 73 if ($log_type == 'article' 67 AND $id_article = intval($log_id_num)) { 74 AND $id_article = intval($log_id_num) 75 ) { 68 76 if (!isset($visites_a[$id_article])) { 69 77 $visites_a[$id_article] = 0; 70 78 } 71 $visites_a[$id_article] 79 $visites_a[$id_article]++; 72 80 if ($log_referer) { 73 81 if (!isset($referers_a[$id_article][$log_referer])) { … … 86 94 * @uses compte_fichier_visite() 87 95 * @uses genie_popularite_constantes() 88 * 96 * 89 97 * @param int $t 90 98 * Timestamp de la dernière exécution de cette tâche … … 92 100 * - null si aucune visite à prendre en compte ou si tous les fichiers de visite sont traités, 93 101 * - entier négatif s'il reste encore des fichiers à traiter 94 **/102 **/ 95 103 function calculer_visites($t) { 96 104 include_spip('base/abstract_sql'); … … 111 119 $date_init = time()-30*60; 112 120 foreach ($sessions as $item) { 113 if (($d=@filemtime($item)) < $date_init) { 114 if (!$d) $d = $date_init; // si le fs ne donne pas de date, on prend celle du traitement, mais tout cela risque d'etre bien douteux 115 $d = date("Y-m-d",$d); 121 if (($d = @filemtime($item)) < $date_init) { 122 if (!$d) { 123 $d = $date_init; 124 } // si le fs ne donne pas de date, on prend celle du traitement, mais tout cela risque d'etre bien douteux 125 $d = date("Y-m-d", $d); 116 126 spip_log("traite la session $item"); 117 127 compte_fichier_visite($item, 118 128 $visites[$d], $visites_a[$d], $referers[$d], $referers_a[$d]); 119 129 spip_unlink($item); 120 if (--$compteur <= 0) 130 if (--$compteur <= 0) { 121 131 break; 132 } 122 133 } 123 134 #else spip_log("$item pas vieux"); 124 135 } 125 if (!count($visites)) 136 if (!count($visites)) { 126 137 return; 138 } 127 139 128 140 include_spip('genie/popularites'); 129 list($a, $b) = genie_popularite_constantes(24*3600);141 list($a, $b) = genie_popularite_constantes(24*3600); 130 142 131 143 // Maintenant on dispose de plusieurs tableaux qu'il faut ventiler dans … … 133 145 // et spip_referers_articles ; attention a affecter tout ca a la bonne 134 146 // date (celle de la visite, pas celle du traitement) 135 foreach (array_keys($visites) as $date)147 foreach (array_keys($visites) as $date) { 136 148 if ($visites[$date]) { 137 149 138 150 // 1. les visites du site (facile) 139 if (!sql_countsel('spip_visites', "date='$date'")) 151 if (!sql_countsel('spip_visites', "date='$date'")) { 140 152 sql_insertq('spip_visites', 141 153 array('date' => $date, 'visites' => $visites[$date])); 142 else 143 sql_update('spip_visites', array('visites' => "visites+".intval($visites[$date])), "date='$date'"); 144 154 } else { 155 sql_update('spip_visites', array('visites' => "visites+" . intval($visites[$date])), "date='$date'"); 156 } 157 145 158 // 2. les visites des articles 146 159 if ($visites_a[$date]) { 147 $ar = array(); 148 foreach ($visites_a[$date] as $id_article => $n) {160 $ar = array(); # tableau num -> liste des articles ayant num visites 161 foreach ($visites_a[$date] as $id_article => $n) { 149 162 if (!sql_countsel('spip_visites_articles', 150 "id_article=$id_article AND date='$date'")){ 163 "id_article=$id_article AND date='$date'") 164 ) { 151 165 sql_insertq('spip_visites_articles', 152 array('id_article' => $id_article, 153 'visites' => 0, 154 'date' => $date)); 166 array( 167 'id_article' => $id_article, 168 'visites' => 0, 169 'date' => $date 170 )); 155 171 } 156 172 $ar[$n][] = $id_article; … … 160 176 sql_update('spip_visites_articles', 161 177 array('visites' => "visites+$n"), 162 163 178 "date='$date' AND $tous"); 179 164 180 $ref = $noref = array(); 165 foreach($liste as $id) { 166 if (isset($referers_a[$id])) 167 $ref[]= $id ; 168 else $noref[]=$id; 181 foreach ($liste as $id) { 182 if (isset($referers_a[$id])) { 183 $ref[] = $id; 184 } else { 185 $noref[] = $id; 186 } 169 187 } 170 188 // il faudrait ponderer la popularite ajoutee ($n) par son anciennete eventuelle 171 189 // sur le modele de ce que fait genie/popularites 172 if (count($noref)) 190 if (count($noref)) { 173 191 sql_update('spip_articles', 174 array('visites' => "visites+$n", 175 'popularite' => "popularite+".number_format(round($n*$b,2), 2, '.', ''), 176 'maj' => 'maj'), 177 sql_in('id_article',$noref)); 178 179 if (count($ref)) 192 array( 193 'visites' => "visites+$n", 194 'popularite' => "popularite+" . number_format(round($n*$b, 2), 2, '.', ''), 195 'maj' => 'maj' 196 ), 197 sql_in('id_article', $noref)); 198 } 199 200 if (count($ref)) { 180 201 sql_update('spip_articles', 181 array('visites' => "visites+".($n+1), 182 'popularite' => "popularite+".number_format(round($n*$b,2), 2, '.', ''), 183 'maj' => 'maj'), 184 sql_in('id_article',$ref)); 185 202 array( 203 'visites' => "visites+" . ($n+1), 204 'popularite' => "popularite+" . number_format(round($n*$b, 2), 2, '.', ''), 205 'maj' => 'maj' 206 ), 207 sql_in('id_article', $ref)); 208 } 209 186 210 ## Ajouter un JOIN sur le statut de l'article ? 187 211 } … … 193 217 $trouver_table = charger_fonction('trouver_table', 'base'); 194 218 $desc = $trouver_table('referers'); 195 $n = preg_match('/(\d+)/', $desc['field']['referer'], $r);219 $n = preg_match('/(\d+)/', $desc['field']['referer'], $r); 196 220 $n = $n ? $r[1] : 255; 197 221 foreach ($referers[$date] as $referer => $num) { 198 222 $referer_md5 = sql_hex(substr(md5($referer), 0, 15)); 199 $referer = substr($referer, 0,$n);200 if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) 223 $referer = substr($referer, 0, $n); 224 if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) { 201 225 sql_insertq('spip_referers', 202 array('visites' => $num, 203 'visites_jour' => $num, 204 'visites_veille' => $num, 205 'date' => $date, 206 'referer' => $referer, 207 'referer_md5' => $referer_md5)); 208 else $ar[$num][] = $referer_md5; 209 } 210 211 // appliquer les increments sur les anciens 212 // attention on appelle sql_in en mode texte et pas array 213 // pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849 226 array( 227 'visites' => $num, 228 'visites_jour' => $num, 229 'visites_veille' => $num, 230 'date' => $date, 231 'referer' => $referer, 232 'referer_md5' => $referer_md5 233 )); 234 } else { 235 $ar[$num][] = $referer_md5; 236 } 237 } 238 239 // appliquer les increments sur les anciens 240 // attention on appelle sql_in en mode texte et pas array 241 // pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849 214 242 foreach ($ar as $num => $liste) { 215 sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), sql_in('referer_md5',join(', ', $liste))); 216 } 217 } 218 243 sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), 244 sql_in('referer_md5', join(', ', $liste))); 245 } 246 } 247 219 248 // 4. Les referers d'articles 220 249 if ($referers_a[$date]) { … … 222 251 $insert = array(); 223 252 // s'assurer d'un slot pour chacun 224 foreach ($referers_a[$date] as $id_article => $referers) 253 foreach ($referers_a[$date] as $id_article => $referers) { 225 254 foreach ($referers as $referer => $num) { 226 255 $referer_md5 = sql_hex(substr(md5($referer), 0, 15)); 227 256 $prim = "(id_article=$id_article AND referer_md5=$referer_md5)"; 228 if (!sql_countsel('spip_referers_articles', $prim)) 257 if (!sql_countsel('spip_referers_articles', $prim)) { 229 258 sql_insertq('spip_referers_articles', 230 array('visites' => $num, 231 'id_article' => $id_article, 232 'referer' => $referer, 233 'referer_md5' => $referer_md5)); 234 else $ar[$num][] = $prim; 235 } 259 array( 260 'visites' => $num, 261 'id_article' => $id_article, 262 'referer' => $referer, 263 'referer_md5' => $referer_md5 264 )); 265 } else { 266 $ar[$num][] = $prim; 267 } 268 } 269 } 236 270 // ajouter les visites 237 271 foreach ($ar as $num => $liste) { … … 241 275 } 242 276 } 277 } 243 278 244 279 // S'il reste des fichiers a manger, le signaler pour reexecution rapide 245 if ($compteur ==0) {280 if ($compteur == 0) { 246 281 spip_log("il reste des visites a traiter..."); 282 247 283 return -$t; 248 284 } … … 252 288 * Nettoyer les IPs des flooders 24H apres leur dernier passage 253 289 */ 254 function visites_nettoyer_flood() {255 if (is_dir($dir =_DIR_TMP.'flood/')){290 function visites_nettoyer_flood() { 291 if (is_dir($dir = _DIR_TMP . 'flood/')) { 256 292 include_spip('inc/invalideur'); 257 if (!defined('_IP_FLOOD_TTL')) define('_IP_FLOOD_TTL',24*3600); // 24H par defaut 293 if (!defined('_IP_FLOOD_TTL')) { 294 define('_IP_FLOOD_TTL', 24*3600); 295 } // 24H par defaut 258 296 $options = array( 259 'mtime' => $_SERVER['REQUEST_TIME'] -_IP_FLOOD_TTL,297 'mtime' => $_SERVER['REQUEST_TIME']-_IP_FLOOD_TTL, 260 298 ); 261 purger_repertoire($dir, $options);299 purger_repertoire($dir, $options); 262 300 } 263 301 } … … 266 304 /** 267 305 * Cron de calcul de statistiques des visites 268 * 306 * 269 307 * Calcule les stats en plusieurs étapes 308 * 270 309 * @uses calculer_visites() 271 * 310 * 272 311 * @param int $t 273 312 * Timestamp de la dernière exécution de cette tâche 274 313 * @return int 275 314 * Positif si la tâche a été terminée, négatif pour réexécuter cette tâche 276 **/315 **/ 277 316 function genie_visites_dist($t) { 278 317 $encore = calculer_visites($t); … … 280 319 // Si ce n'est pas fini on redonne la meme date au fichier .lock 281 320 // pour etre prioritaire lors du cron suivant 282 if ($encore) 283 return (0 - $t); 321 if ($encore) { 322 return (0-$t); 323 } 284 324 285 325 // nettoyer les IP des floodeurs quand on a fini de compter les stats … … 288 328 return 1; 289 329 } 330 290 331 ?> -
_core_/plugins/statistiques/inc/referenceurs.php
r88959 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 17 /** … … 22 24 * @return array 23 25 */ 24 function stats_load_engines() {26 function stats_load_engines() { 25 27 $arr_engines = Array(); 26 28 lire_fichier(find_in_path('engines-list.txt'), $moteurs); 27 foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne) {29 foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne) { 28 30 $ligne = trim($ligne); 29 if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)) {31 if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)) { 30 32 $moteur = $regs[1]; 31 33 $query = ''; 32 } else if (preg_match(',=$,', $ligne, $regs)) 33 $query = $ligne; 34 else 35 $arr_engines[] = array($moteur, $query, $ligne); 34 } else { 35 if (preg_match(',=$,', $ligne, $regs)) { 36 $query = $ligne; 37 } else { 38 $arr_engines[] = array($moteur, $query, $ligne); 39 } 40 } 36 41 } 42 37 43 return $arr_engines; 38 44 } … … 40 46 /** 41 47 * Retrouver les mots cles de recherche dans une url de referer 42 * 48 * 43 49 * Adaptees du code des "Visiteurs", 44 50 * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/) … … 49 55 * @return array 50 56 */ 51 function stats_show_keywords($kw_referer) {57 function stats_show_keywords($kw_referer) { 52 58 static $arr_engines = ''; 53 59 static $url_site; 54 60 55 if (!is_array($arr_engines)) {61 if (!is_array($arr_engines)) { 56 62 // Charger les moteurs de recherche 57 63 $arr_engines = stats_load_engines(); … … 62 68 } 63 69 64 if ($url = @parse_url($kw_referer)) {70 if ($url = @parse_url($kw_referer)) { 65 71 $query = isset($url['query']) ? $url['query'] : ""; 66 72 $host = strtolower($url['host']); 67 73 $path = $url['path']; 68 74 $scheme = $url['scheme']; 75 } else { 76 $scheme = $query = $host = $path = ''; 69 77 } 70 else71 $scheme = $query = $host = $path = '';72 78 73 79 // construire un array des variables directement depuis la query-string … … 77 83 $found = false; 78 84 79 if (!empty($url_site)) {80 if (strpos('-' .$kw_referer, $url_site)!==false){81 if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs)) 85 if (!empty($url_site)) { 86 if (strpos('-' . $kw_referer, $url_site) !== false) { 87 if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs)) { 82 88 $keywords = urldecode($regs[2]); 83 else89 } else { 84 90 return array('host' => ''); 85 }86 else {87 for ($cnt = 0; $cnt <sizeof($arr_engines) && !$found; $cnt++)88 {89 if ($found = preg_match(','.$arr_engines[$cnt][2].',', $host)90 OR $found = preg_match(','.$arr_engines[$cnt][2].',', $path)){91 } 92 } else { 93 for ($cnt = 0; $cnt < sizeof($arr_engines) && !$found; $cnt++) { 94 if ($found = preg_match(',' . $arr_engines[$cnt][2] . ',', $host) 95 OR $found = preg_match(',' . $arr_engines[$cnt][2] . ',', $path) 96 ) { 91 97 $kw_referer_host = $arr_engines[$cnt][0]; 92 98 93 if (strpos($arr_engines[$cnt][1], '=') !==false){99 if (strpos($arr_engines[$cnt][1], '=') !== false) { 94 100 95 101 // Fonctionnement simple: la variable existe dans l'array 96 102 $v = str_replace('=', '', $arr_engines[$cnt][1]); 97 $keywords = isset($Tquery[$v]) ? $Tquery[$v] : "";103 $keywords = isset($Tquery[$v]) ? $Tquery[$v] : ""; 98 104 99 105 // Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable 100 if (!strlen($keywords) >0){101 if (preg_match("," .$arr_engines[$cnt][1]."([^\&]*),", $query, $vals)){106 if (!strlen($keywords) > 0) { 107 if (preg_match("," . $arr_engines[$cnt][1] . "([^\&]*),", $query, $vals)) { 102 108 $keywords = urldecode($vals[2]); 103 109 } … … 107 113 } 108 114 109 if (($kw_referer_host =="Google")110 || ($kw_referer_host=="AOL" && strpos($query, 'enc=iso')===false)111 || ($kw_referer_host=="MSN")112 ) {115 if (($kw_referer_host == "Google") 116 || ($kw_referer_host == "AOL" && strpos($query, 'enc=iso') === false) 117 || ($kw_referer_host == "MSN") 118 ) { 113 119 include_spip('inc/charsets'); 114 if (!isset($ie) OR !$cset = $ie) $cset = 'utf-8'; 120 if (!isset($ie) OR !$cset = $ie) { 121 $cset = 'utf-8'; 122 } 115 123 $keywords = importer_charset($keywords, $cset); 116 124 } … … 123 131 $buffer["host"] = $host; 124 132 $buffer["scheme"] = $scheme; 125 if (!isset($buffer["hostname"]) OR !$buffer["hostname"]) 133 if (!isset($buffer["hostname"]) OR !$buffer["hostname"]) { 126 134 $buffer["hostname"] = $host; 135 } 127 136 128 137 $buffer["path"] = substr($path, 1, strlen($path)); 129 138 $buffer["query"] = $query; 130 139 131 if ($keywords !=''){132 if (strlen($keywords) >150){140 if ($keywords != '') { 141 if (strlen($keywords) > 150) { 133 142 $keywords = spip_substr($keywords, 0, 148); 134 143 // supprimer l'eventuelle entite finale mal coupee … … 150 159 * @return string 151 160 */ 152 function referes($referermd5, $serveur = ''){ 153 $retarts = sql_allfetsel('J2.id_article, J2.titre', 'spip_referers_articles AS J1 LEFT JOIN spip_articles AS J2 ON J1.id_article = J2.id_article', "(referer_md5='$referermd5' AND J1.maj>=DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).", INTERVAL 2 DAY))", '', "titre", '', '', $serveur); 161 function referes($referermd5, $serveur = '') { 162 $retarts = sql_allfetsel('J2.id_article, J2.titre', 163 'spip_referers_articles AS J1 LEFT JOIN spip_articles AS J2 ON J1.id_article = J2.id_article', 164 "(referer_md5='$referermd5' AND J1.maj>=DATE_SUB(" . sql_quote(date('Y-m-d H:i:s')) . ", INTERVAL 2 DAY))", '', 165 "titre", '', '', $serveur); 154 166 155 foreach ($retarts as $k => $rowart) {167 foreach ($retarts as $k => $rowart) { 156 168 $titre = typo($rowart['titre']); 157 $url = generer_url_entite($rowart['id_article'], 'article', '', '', TRUE);169 $url = generer_url_entite($rowart['id_article'], 'article', '', '', true); 158 170 $retarts[$k] = "<a href='$url'><i>$titre</i></a>"; 159 171 } 160 172 161 if (count($retarts)>1) 162 return '→ '.join(',<br />→ ', $retarts); 163 if (count($retarts)==1) 164 return '→ '.array_shift($retarts); 173 if (count($retarts) > 1) { 174 return '→ ' . join(',<br />→ ', $retarts); 175 } 176 if (count($retarts) == 1) { 177 return '→ ' . array_shift($retarts); 178 } 179 165 180 return ''; 166 181 } -
_core_/plugins/statistiques/inc/statistiques.php
r93092 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 17 /** 16 18 * Calculer la moyenne glissante sur un nombre d'echantillons donnes 19 * 17 20 * @param int|bool $valeur 18 21 * @param int $glisse … … 24 27 if ($valeur === false) { 25 28 $v = array(); 29 26 30 return 0; 27 31 } … … 30 34 // surplus, on enleve... 31 35 $v[] = $valeur; 32 if (count($v) > $glisse) 36 if (count($v) > $glisse) { 33 37 array_shift($v); 38 } 34 39 35 return round(statistiques_moyenne($v), 2);40 return round(statistiques_moyenne($v), 2); 36 41 } 37 42 … … 44 49 * @return float 45 50 */ 46 function statistiques_moyenne($tab){ 47 if (!$tab) return 0; 51 function statistiques_moyenne($tab) { 52 if (!$tab) { 53 return 0; 54 } 48 55 $moyenne = 0; 49 foreach($tab as $v) $moyenne += $v; 50 return $moyenne / count($tab); 56 foreach ($tab as $v) { 57 $moyenne += $v; 58 } 59 60 return $moyenne/count($tab); 51 61 } 52 62 … … 54 64 * Construire un tableau par popularite 55 65 * classemnt => id_truc 66 * 56 67 * @param string $type 57 68 * @param string $serveur 58 69 * @return array 59 70 */ 60 function classement_populaires($type, $serveur = '') {71 function classement_populaires($type, $serveur = '') { 61 72 static $classement = array(); 62 if (isset($classement[$type])) 73 if (isset($classement[$type])) { 63 74 return $classement[$type]; 64 $classement[$type] = sql_allfetsel(id_table_objet($type, $serveur), table_objet_sql($type, $serveur), "statut='publie' AND popularite > 0", "", "popularite DESC",'','',$serveur); 65 $classement[$type] = array_map('reset',$classement[$type]); 75 } 76 $classement[$type] = sql_allfetsel(id_table_objet($type, $serveur), table_objet_sql($type, $serveur), 77 "statut='publie' AND popularite > 0", "", "popularite DESC", '', '', $serveur); 78 $classement[$type] = array_map('reset', $classement[$type]); 79 66 80 return $classement[$type]; 67 81 } -
_core_/plugins/statistiques/inc/stats_referers_to_array.php
r79783 r93626 12 12 13 13 14 if (!defined('_ECRIRE_INC_VERSION')) return; 14 if (!defined('_ECRIRE_INC_VERSION')) { 15 return; 16 } 15 17 16 18 include_spip('inc/statistiques'); … … 28 30 $serveur = ''; 29 31 30 if (in_array($jour, array('jour','veille'))){32 if (in_array($jour, array('jour', 'veille'))) { 31 33 $visites .= "_$jour"; 32 34 $where[] = "$visites>0"; … … 35 37 36 38 if ($id_article) { 37 38 $where[] = "id_article=".intval($id_article);39 $table = "spip_referers_articles"; 40 $where[] = "id_article=" . intval($id_article); 39 41 } 40 42 41 $where = implode(" AND ", $where);42 $limit = $limit ?"0,".intval($limit):'';43 $where = implode(" AND ", $where); 44 $limit = $limit ? "0," . intval($limit) : ''; 43 45 44 $result = sql_select("referer_md5, referer, $visites AS vis", $table, $where, '', "maj DESC", $limit, '',$serveur);46 $result = sql_select("referer_md5, referer, $visites AS vis", $table, $where, '', "maj DESC", $limit, '', $serveur); 45 47 46 48 $referers = array(); 47 49 $trivisites = array(); // pour le tri 48 while ($row = sql_fetch($result, $serveur)) {50 while ($row = sql_fetch($result, $serveur)) { 49 51 $referer = interdire_scripts($row['referer']); 50 52 $buff = stats_show_keywords($referer, $referer); … … 53 55 $refhost = $buff["hostname"]; 54 56 $visites = $row['vis']; 55 $host = $buff["scheme"] ."://".$buff["host"];56 57 $host = $buff["scheme"] . "://" . $buff["host"]; 58 57 59 $referers[$refhost]['referer_md5'] = $row['referer_md5']; 58 60 59 if (!isset($referers[$refhost]['liens'][$referer])) 61 if (!isset($referers[$refhost]['liens'][$referer])) { 60 62 $referers[$refhost]['liens'][$referer] = 0; 61 if (!isset($referers[$refhost]['hosts'][$host])) 63 } 64 if (!isset($referers[$refhost]['hosts'][$host])) { 62 65 $referers[$refhost]['hosts'][$host] = 0; 66 } 63 67 64 if (!isset($referers[$refhost]['visites'])) 68 if (!isset($referers[$refhost]['visites'])) { 65 69 $referers[$refhost]['visites'] = 0; 66 if (!isset($referers[$refhost]['visites_racine'])) 70 } 71 if (!isset($referers[$refhost]['visites_racine'])) { 67 72 $referers[$refhost]['visites_racine'] = 0; 68 if (!isset($referers[$refhost]['referers'])) 73 } 74 if (!isset($referers[$refhost]['referers'])) { 69 75 $referers[$refhost]['referers'] = array(); 76 } 70 77 71 78 $referers[$refhost]['hosts'][$host]++; 72 $referers[$refhost]['liens'][$referer]++ 79 $referers[$refhost]['liens'][$referer]++; 73 80 $referers[$refhost]['visites'] += $visites; 74 81 $trivisites[$refhost] = $referers[$refhost]['visites']; … … 76 83 $tmp = ""; 77 84 $set = array( 78 'referer' =>$referer,79 'visites' =>$visites,80 'referes' =>$id_article?'':referes($row['referer_md5'])85 'referer' => $referer, 86 'visites' => $visites, 87 'referes' => $id_article ? '' : referes($row['referer_md5']) 81 88 ); 82 89 if (isset($buff["keywords"]) 83 AND $c = $buff["keywords"]) { 90 AND $c = $buff["keywords"] 91 ) { 84 92 if (!isset($referers[$refhost]['keywords'][$c])) { 85 93 $referers[$refhost]['keywords'][$c] = true; 86 94 $set['keywords'] = $c; 87 95 } 96 } else { 97 $tmp = $buff["path"]; 98 if ($buff["query"]) { 99 $tmp .= "?" . $buff['query']; 100 } 101 if (strlen($tmp)) { 102 $set['path'] = "/$tmp"; 103 } 88 104 } 89 else { 90 $tmp = $buff["path"]; 91 if ($buff["query"]) 92 $tmp .= "?".$buff['query']; 93 if (strlen($tmp)) 94 $set['path'] = "/$tmp"; 105 if (isset($set['path']) OR isset($set['keywords'])) { 106 $referers[$refhost]['referers'][] = $set; 107 } else { 108 $referers[$refhost]['visites_racine'] += $visites; 95 109 } 96 if (isset($set['path']) OR isset($set['keywords']))97 $referers[$refhost]['referers'][] = $set;98 else99 $referers[$refhost]['visites_racine'] += $visites;100 110 } 101 111 } 102 112 103 113 // trier les liens pour trouver le principal 104 foreach ($referers as $k=>$r){114 foreach ($referers as $k => $r) { 105 115 arsort($referers[$k]['liens']); 106 116 $referers[$k]['liens'] = array_keys($referers[$k]['liens']); … … 110 120 } 111 121 112 if (count($trivisites)) {113 array_multisort($trivisites, SORT_DESC, $referers);122 if (count($trivisites)) { 123 array_multisort($trivisites, SORT_DESC, $referers); 114 124 } 115 125 116 126 return $referers; 117 127 } -
_core_/plugins/statistiques/inc/stats_visites_to_array.php
r79783 r93626 12 12 13 13 14 if (!defined('_ECRIRE_INC_VERSION')) return; 14 if (!defined('_ECRIRE_INC_VERSION')) { 15 return; 16 } 15 17 16 18 include_spip('inc/statistiques'); … … 23 25 $now = time(); 24 26 25 if (!in_array($unite, array('jour','mois')))27 if (!in_array($unite, array('jour', 'mois'))) { 26 28 $unite = 'jour'; 29 } 27 30 $serveur = ''; 28 31 … … 30 33 $order = "date"; 31 34 $where = array(); 32 if ($duree) 33 $where[] = sql_date_proche($order,-$duree,'day',$serveur); 35 if ($duree) { 36 $where[] = sql_date_proche($order, -$duree, 'day', $serveur); 37 } 34 38 35 39 if ($id_article) { 36 37 $where[] = "id_article=".intval($id_article);40 $table = "spip_visites_articles"; 41 $where[] = "id_article=" . intval($id_article); 38 42 } 39 43 40 $where = implode(" AND ", $where);41 $format = ($unite =='jour'?'%Y-%m-%d':'%Y-%m-01');44 $where = implode(" AND ", $where); 45 $format = ($unite == 'jour' ? '%Y-%m-%d' : '%Y-%m-01'); 42 46 43 $res = sql_select("SUM(visites) AS v, DATE_FORMAT($order,'$format') AS d", $table, $where, "d", "d", "",'',$serveur); 47 $res = sql_select("SUM(visites) AS v, DATE_FORMAT($order,'$format') AS d", $table, $where, "d", "d", "", '', 48 $serveur); 44 49 45 $format = str_replace('%', '',$format);46 $periode = ($unite =='jour'?24*3600:365*24*3600/12);47 $step = intval(round($periode*1.1, 0));48 $glisse = constant('MOYENNE_GLISSANTE_' .strtoupper($unite));50 $format = str_replace('%', '', $format); 51 $periode = ($unite == 'jour' ? 24*3600 : 365*24*3600/12); 52 $step = intval(round($periode*1.1, 0)); 53 $glisse = constant('MOYENNE_GLISSANTE_' . strtoupper($unite)); 49 54 moyenne_glissante(); 50 55 $data = array(); 51 $r = sql_fetch($res, $serveur);52 if (!$r) {53 $r = array('d' =>date($format,$now),'v'=>0);56 $r = sql_fetch($res, $serveur); 57 if (!$r) { 58 $r = array('d' => date($format, $now), 'v' => 0); 54 59 } 55 60 do { 56 $data[$r['d']] = array('visites' =>$r['v'],'moyenne'=>moyenne_glissante($r['v'], $glisse));61 $data[$r['d']] = array('visites' => $r['v'], 'moyenne' => moyenne_glissante($r['v'], $glisse)); 57 62 $last = $r['d']; 58 63 59 64 // donnee suivante 60 $r = sql_fetch($res, $serveur);65 $r = sql_fetch($res, $serveur); 61 66 // si la derniere n'est pas la date courante, l'ajouter 62 if (!$r AND $last!=date($format,$now)) 63 $r = array('d'=>date($format,$now),'v'=>0); 67 if (!$r AND $last != date($format, $now)) { 68 $r = array('d' => date($format, $now), 'v' => 0); 69 } 64 70 65 71 // completer les trous manquants si besoin 66 if ($r) {72 if ($r) { 67 73 $next = strtotime($last); 68 74 $current = strtotime($r['d']); 69 while (($next+=$step)<$current AND $d=date($format,$next)){ 70 if (!isset($data[$d])) 71 $data[$d] = array('visites'=>0,'moyenne'=>moyenne_glissante(0, $glisse)); 75 while (($next += $step) < $current AND $d = date($format, $next)) { 76 if (!isset($data[$d])) { 77 $data[$d] = array('visites' => 0, 'moyenne' => moyenne_glissante(0, $glisse)); 78 } 72 79 $last = $d; 73 80 $next = strtotime($last); 74 81 } 75 82 } 76 } 77 while ($r); 83 } while ($r); 78 84 79 85 // projection pour la derniere barre : … … 82 88 $moyenne = end($data); 83 89 $moyenne = prev($data); 84 $moyenne = ($moyenne AND isset($moyenne['moyenne'])) ?$moyenne['moyenne']:0;90 $moyenne = ($moyenne AND isset($moyenne['moyenne'])) ? $moyenne['moyenne'] : 0; 85 91 $data[$last]['moyenne'] = $moyenne; 86 92 87 93 // temps restant 88 $remaining = strtotime(date($format, strtotime(date($format,$now))+$step))-$now;94 $remaining = strtotime(date($format, strtotime(date($format, $now))+$step))-$now; 89 95 90 96 $prorata = $remaining/$periode; 91 97 92 98 // projection 93 $data[$last]['prevision'] = $data[$last]['visites'] +intval(round($moyenne*$prorata));99 $data[$last]['prevision'] = $data[$last]['visites']+intval(round($moyenne*$prorata)); 94 100 95 101 return $data; 96 102 } 97 103 -
_core_/plugins/statistiques/prive/squelettes/contenu/stats_lang_fonctions.php
r88959 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 17 include_spip('inc/presentation'); … … 35 37 } 36 38 37 $result = sql_select("lang, SUM(" .$critere.") AS cnt", "spip_articles", "statut='publie' ", "lang");38 39 $result = sql_select("lang, SUM(" . $critere . ") AS cnt", "spip_articles", "statut='publie' ", "lang"); 40 39 41 $out .= "\n<table cellpadding='2' cellspacing='0' border='0' width='100%' style='border: 1px solid #aaaaaa;'>"; 40 42 $ifond = 1; 41 43 42 44 $visites_abs = 0; 43 45 while ($row = sql_fetch($result)) { … … 45 47 $lang = $row['lang']; 46 48 if ($row['cnt']) { 47 $visites = round($row['cnt'] / $total_visites *$taille);48 $pourcent = round($row['cnt'] / $total_visites *100);49 $visites = round($row['cnt']/$total_visites*$taille); 50 $pourcent = round($row['cnt']/$total_visites*100); 49 51 } 50 52 51 53 if ($visites > 0) { 52 54 53 if ($ifond==0){ 54 $ifond=1; 55 $couleur="white"; 56 } 57 else{ 58 $ifond=0; 59 $couleur="eeeeee"; 60 } 61 62 $out .= "\n<tr style='background-color: $couleur'>"; 63 $dir=lang_dir($lang,'',' dir="rtl"'); 64 $out .= "<td style='width: 100%; border-bottom: 1px solid #cccccc;'><p $dir><span style='float: $spip_lang_right;'>$pourcent%</span>".traduire_nom_langue($lang)."</p></td>"; 65 66 $out .= "<td style='border-bottom: 1px solid #cccccc;'>"; 67 $out .= "\n<table cellpadding='0' cellspacing='0' border='0' width='".($taille+5)."'>"; 68 $out .= "\n<tr><td style='align:$spip_lang_right; background-color: #eeeeee; border: 1px solid #999999; white-space: nowrap;'>"; 69 if ($visites_abs > 0) 70 $out .= "<img src='" . chemin_image('rien.gif') . "' width='$visites_abs' height='10' alt=' ' />"; 71 if ($visites>0) 72 $out .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_langue' style='border: 0px;' width='$visites' height='8' alt=' ' />"; 73 $out .= "</td></tr></table>\n"; 74 75 $out .= "</td>"; 76 $out .= "</tr>"; 77 $visites_abs += $visites; 55 if ($ifond == 0) { 56 $ifond = 1; 57 $couleur = "white"; 58 } else { 59 $ifond = 0; 60 $couleur = "eeeeee"; 61 } 62 63 $out .= "\n<tr style='background-color: $couleur'>"; 64 $dir = lang_dir($lang, '', ' dir="rtl"'); 65 $out .= "<td style='width: 100%; border-bottom: 1px solid #cccccc;'><p $dir><span style='float: $spip_lang_right;'>$pourcent%</span>" . traduire_nom_langue($lang) . "</p></td>"; 66 67 $out .= "<td style='border-bottom: 1px solid #cccccc;'>"; 68 $out .= "\n<table cellpadding='0' cellspacing='0' border='0' width='" . ($taille+5) . "'>"; 69 $out .= "\n<tr><td style='align:$spip_lang_right; background-color: #eeeeee; border: 1px solid #999999; white-space: nowrap;'>"; 70 if ($visites_abs > 0) { 71 $out .= "<img src='" . chemin_image('rien.gif') . "' width='$visites_abs' height='10' alt=' ' />"; 72 } 73 if ($visites > 0) { 74 $out .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_langue' style='border: 0px;' width='$visites' height='8' alt=' ' />"; 75 } 76 $out .= "</td></tr></table>\n"; 77 78 $out .= "</td>"; 79 $out .= "</tr>"; 80 $visites_abs += $visites; 78 81 } 79 82 } 80 83 $out .= "</table>\n"; 84 81 85 return $out; 82 86 } 87 83 88 ?> -
_core_/plugins/statistiques/prive/squelettes/contenu/stats_referers_fonctions.php
r85117 r93626 1 1 <?php 2 2 3 if (!defined('_ECRIRE_INC_VERSION')) return; 3 if (!defined('_ECRIRE_INC_VERSION')) { 4 return; 5 } 4 6 5 7 // Vignettes de previsulation des referers … … 9 11 // Pour Alexa, penser a indiquer l'url du site dans l'id. 10 12 // Dans Alexa, si on supprimer size=small, alors vignettes tres grandes 11 // - apercite.fr : on conserve exactement la m ême expression pour insérer l'url du site12 if (!isset($GLOBALS['source_vignettes'])) 13 // - apercite.fr : on conserve exactement la m�me expression pour ins�rer l'url du site 14 if (!isset($GLOBALS['source_vignettes'])) { 13 15 $GLOBALS['source_vignettes'] = "http://www.apercite.fr/api/apercite/120x90/oui/oui/http://"; 16 } 14 17 // $source_vignettes = "http://pthumbnails.alexa.com/image_server.cgi?id=www.monsite.net&size=small&url=http://"; 15 18 16 function vigneter_referer($url) {19 function vigneter_referer($url) { 17 20 18 if (!strlen($GLOBALS['source_vignettes']) OR $GLOBALS['meta']["activer_captures_referers"] =='non')21 if (!strlen($GLOBALS['source_vignettes']) OR $GLOBALS['meta']["activer_captures_referers"] == 'non') { 19 22 return ''; 23 } 20 24 21 return $GLOBALS['source_vignettes'] .rawurlencode(preg_replace(";^[a-z]{3,6}://;","",$url));25 return $GLOBALS['source_vignettes'] . rawurlencode(preg_replace(";^[a-z]{3,6}://;", "", $url)); 22 26 } -
_core_/plugins/statistiques/prive/squelettes/contenu/stats_repartition_fonctions.php
r93092 r93626 11 11 \***************************************************************************/ 12 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 13 if (!defined("_ECRIRE_INC_VERSION")) { 14 return; 15 } 14 16 15 17 include_spip('inc/presentation'); 16 18 17 19 // http://code.spip.net/@enfants 18 function enfants($id_parent, $critere, &$nombre_branche, &$nombre_rub) {19 $result = sql_select("id_rubrique", "spip_rubriques", "id_parent=" .intval($id_parent));20 function enfants($id_parent, $critere, &$nombre_branche, &$nombre_rub) { 21 $result = sql_select("id_rubrique", "spip_rubriques", "id_parent=" . intval($id_parent)); 20 22 21 23 $nombre = 0; 22 24 23 while ($row = sql_fetch($result)) {25 while ($row = sql_fetch($result)) { 24 26 $id_rubrique = $row['id_rubrique']; 25 27 26 $visites = intval(sql_getfetsel("SUM(" .$critere.")", "spip_articles", "id_rubrique=".intval($id_rubrique)));28 $visites = intval(sql_getfetsel("SUM(" . $critere . ")", "spip_articles", "id_rubrique=" . intval($id_rubrique))); 27 29 $nombre_rub[$id_rubrique] = $visites; 28 30 $nombre_branche[$id_rubrique] = $visites; 29 $nombre += $visites +enfants($id_rubrique, $critere, $nombre_branche, $nombre_rub);31 $nombre += $visites+enfants($id_rubrique, $critere, $nombre_branche, $nombre_rub); 30 32 } 31 if (!isset($nombre_branche[$id_parent])) $nombre_branche[$id_parent]=0; 33 if (!isset($nombre_branche[$id_parent])) { 34 $nombre_branche[$id_parent] = 0; 35 } 32 36 $nombre_branche[$id_parent] += $nombre; 37 33 38 return $nombre; 34 39 } … … 38 43 function enfants_aff($id_parent, $decalage, $taille, $critere, $gauche = 0) { 39 44 global $spip_lang_right, $spip_lang_left; 40 static $total_site =null;41 static $niveau =0;45 static $total_site = null; 46 static $niveau = 0; 42 47 static $nombre_branche; 43 48 static $nombre_rub; 44 if (is_null($total_site)) {49 if (is_null($total_site)) { 45 50 $nombre_branche = array(); 46 51 $nombre_rub = array(); 47 52 $total_site = enfants(0, $critere, $nombre_branche, $nombre_rub); 48 if ($total_site<1) $total_site=1; 53 if ($total_site < 1) { 54 $total_site = 1; 55 } 49 56 } 50 57 $visites_abs = 0; … … 54 61 55 62 56 $result = sql_select("id_rubrique, titre, descriptif", "spip_rubriques", "id_parent=$id_parent", '', '0+titre,titre');63 $result = sql_select("id_rubrique, titre, descriptif", "spip_rubriques", "id_parent=$id_parent", '', '0+titre,titre'); 57 64 58 while ($row = sql_fetch($result)){65 while ($row = sql_fetch($result)) { 59 66 $id_rubrique = $row['id_rubrique']; 60 67 $titre = typo($row['titre']); 61 $descriptif = attribut_html(couper(typo($row['descriptif']), 80));68 $descriptif = attribut_html(couper(typo($row['descriptif']), 80)); 62 69 63 if ($nombre_branche[$id_rubrique] >0 OR $nombre_rub[$id_rubrique]>0){64 $largeur_branche = floor(($nombre_branche[$id_rubrique] - $nombre_rub[$id_rubrique]) * $taille /$total_site);65 $largeur_rub = floor($nombre_rub[$id_rubrique] * $taille /$total_site);66 67 if ($largeur_branche+$largeur_rub >0){68 70 if ($nombre_branche[$id_rubrique] > 0 OR $nombre_rub[$id_rubrique] > 0) { 71 $largeur_branche = floor(($nombre_branche[$id_rubrique]-$nombre_rub[$id_rubrique])*$taille/$total_site); 72 $largeur_rub = floor($nombre_rub[$id_rubrique]*$taille/$total_site); 73 74 if ($largeur_branche+$largeur_rub > 0) { 75 69 76 if ($niveau == 0) { 70 $couleur="#cccccc"; 71 } 72 73 else if ($niveau == 1) { 74 $couleur="#eeeeee"; 75 } 76 else { 77 $couleur="white"; 77 $couleur = "#cccccc"; 78 } else { 79 if ($niveau == 1) { 80 $couleur = "#eeeeee"; 81 } else { 82 $couleur = "white"; 83 } 78 84 } 79 85 $out .= "<table cellpadding='2' cellspacing='0' border='0' width='100%'>"; 80 86 $out .= "\n<tr style='background-color: $couleur'>"; 81 $out .= "\n<td style='border-bottom: 1px solid #aaaaaa; padding-$spip_lang_left: " .($niveau*20+5)."px;'>";87 $out .= "\n<td style='border-bottom: 1px solid #aaaaaa; padding-$spip_lang_left: " . ($niveau*20+5) . "px;'>"; 82 88 83 84 if ( $largeur_branche > 2) 85 $out .= bouton_block_depliable("<a href='" . generer_url_entite($id_rubrique,'rubrique') . "' style='color: black;' title=\"$descriptif\">$titre</a>","incertain", "stats$id_rubrique"); 86 else 89 90 if ($largeur_branche > 2) { 91 $out .= bouton_block_depliable("<a href='" . generer_url_entite($id_rubrique, 92 'rubrique') . "' style='color: black;' title=\"$descriptif\">$titre</a>", "incertain", 93 "stats$id_rubrique"); 94 } else { 87 95 $out .= "<div class='rubsimple' style='padding-left: 18px;'>" 88 . "<a href='" . generer_url_entite($id_rubrique,'rubrique') . "' style='color: black;' title=\"$descriptif\">$titre</a>" 96 . "<a href='" . generer_url_entite($id_rubrique, 97 'rubrique') . "' style='color: black;' title=\"$descriptif\">$titre</a>" 89 98 . "</div>"; 99 } 90 100 $out .= "</td>"; 91 101 92 102 93 103 // pourcentage de visites dans la branche par rapport au total du site … … 95 105 $out .= "\n<td class='verdana1' style='text-align: $spip_lang_right; width: 40px; border-bottom: 1px solid #aaaaaa;'>$pourcent%</td>"; 96 106 97 98 $out .= "\n<td align='right' style='border-bottom: 1px solid #aaaaaa; width:" . ($taille+5) . "px'>";99 100 101 $out .= "\n<table cellpadding='0' cellspacing='0' border='0' width='" .($decalage+1+$gauche)."'>";107 108 $out .= "\n<td align='right' style='border-bottom: 1px solid #aaaaaa; width:" . ($taille+5) . "px'>"; 109 110 111 $out .= "\n<table cellpadding='0' cellspacing='0' border='0' width='" . ($decalage+1+$gauche) . "'>"; 102 112 $out .= "\n<tr>"; 103 if ($gauche > 0) $out .= "<td style='width: " .$gauche."px'></td>"; 113 if ($gauche > 0) { 114 $out .= "<td style='width: " . $gauche . "px'></td>"; 115 } 104 116 $out .= "\n<td style='border: 0px; white-space: nowrap;'>"; 105 117 $out .= "<div style='border: 1px solid #999999; background-color: #dddddd; height: 1em; padding: 0px; margin: 0px;$width'>"; 106 if ($visites_abs > 0) $out .= "<img src='" . chemin_image('rien.gif') . "' style='vertical-align: top; height: 1em; border: 0px; width: ".$visites_abs."px;' alt= ' '/>"; 107 if ($largeur_branche>0) $out .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_cumul' style='vertical-align: top; height: 1em; border: 0px; width: " . $largeur_branche . "px;' alt=' ' />"; 108 if ($largeur_rub>0) $out .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_nombre' style='vertical-align: top; width: " . $largeur_rub ."px; height: 1em; border: 0px' alt=' ' />"; 118 if ($visites_abs > 0) { 119 $out .= "<img src='" . chemin_image('rien.gif') . "' style='vertical-align: top; height: 1em; border: 0px; width: " . $visites_abs . "px;' alt= ' '/>"; 120 } 121 if ($largeur_branche > 0) { 122 $out .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_cumul' style='vertical-align: top; height: 1em; border: 0px; width: " . $largeur_branche . "px;' alt=' ' />"; 123 } 124 if ($largeur_rub > 0) { 125 $out .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_nombre' style='vertical-align: top; width: " . $largeur_rub . "px; height: 1em; border: 0px' alt=' ' />"; 126 } 109 127 $out .= "</div>"; 110 128 $out .= "</td></tr></table>\n"; 111 129 $out .= "</td></tr></table>"; 112 } 130 } 113 131 } 114 132 115 133 if (isset($largeur_branche) && ($largeur_branche > 0)) { 116 134 $niveau++; 117 $out .= debut_block_depliable(false, "stats$id_rubrique");118 $out .= enfants_aff($id_rubrique, $largeur_branche, $taille, $critere, $visites_abs+$gauche);135 $out .= debut_block_depliable(false, "stats$id_rubrique"); 136 $out .= enfants_aff($id_rubrique, $largeur_branche, $taille, $critere, $visites_abs+$gauche); 119 137 $out .= fin_block(); 120 138 $niveau--; 121 139 } 122 $visites_abs = $visites_abs +round($nombre_branche[$id_rubrique]/$total_site*$taille);140 $visites_abs = $visites_abs+round($nombre_branche[$id_rubrique]/$total_site*$taille); 123 141 } 142 124 143 return $out; 125 144 } -
_core_/plugins/statistiques/prive/squelettes/inclure/stats-visites-data_fonctions.php
r93092 r93626 1 1 <?php 2 2 3 if (!defined('_ECRIRE_INC_VERSION')) return; 3 if (!defined('_ECRIRE_INC_VERSION')) { 4 return; 5 } 4 6 5 7 include_spip('inc/acces'); 6 8 include_spip('inc/statistiques'); 7 9 8 function duree_affiche($duree, $periode) {9 if (intval($duree)) 10 function duree_affiche($duree, $periode) { 11 if (intval($duree)) { 10 12 return $duree; 13 } 11 14 12 if ($periode =='mois'){13 $debut = sql_getfetsel("date", "spip_visites","","","date","0,1");15 if ($periode == 'mois') { 16 $debut = sql_getfetsel("date", "spip_visites", "", "", "date", "0,1"); 14 17 $debut = strtotime($debut); 15 18 $duree = ceil((time()-$debut)/24/3600); 19 16 20 return $duree; 17 21 } 22 18 23 return 90; 19 24 } 20 25 21 function duree_zoom($duree, $sens = 'plus') {26 function duree_zoom($duree, $sens = 'plus') { 22 27 $largeur_abs = 420/$duree; 23 28 24 29 if ($largeur_abs > 1) { 25 $inc = ceil($largeur_abs /5);26 $duree_plus = round(420 / ($largeur_abs -$inc));27 $duree_moins = round(420 / ($largeur_abs +$inc));30 $inc = ceil($largeur_abs/5); 31 $duree_plus = round(420/($largeur_abs-$inc)); 32 $duree_moins = round(420/($largeur_abs+$inc)); 28 33 } 29 34 … … 34 39 35 40 if ($largeur_abs < 1) { 36 $duree_plus = round(420 * ((1/$largeur_abs) +1));37 $duree_moins = round(420 * ((1/$largeur_abs) -1));41 $duree_plus = round(420*((1/$largeur_abs)+1)); 42 $duree_moins = round(420*((1/$largeur_abs)-1)); 38 43 } 39 return ($sens=='plus'?$duree_moins:$duree_plus); 44 45 return ($sens == 'plus' ? $duree_moins : $duree_plus); 40 46 } 41 47 42 function stats_total($serveur = ''){ 43 $row = sql_fetsel("SUM(visites) AS total_absolu", "spip_visites",'','','','','',$serveur); 48 function stats_total($serveur = '') { 49 $row = sql_fetsel("SUM(visites) AS total_absolu", "spip_visites", '', '', '', '', '', $serveur); 50 44 51 return $row ? $row['total_absolu'] : 0; 45 52 } -
_core_/plugins/statistiques/prive/squelettes/inclure/stats-visites-jours_fonctions.php
r53216 r93626 1 1 <?php 2 2 3 if (!defined('_ECRIRE_INC_VERSION')) return; 3 if (!defined('_ECRIRE_INC_VERSION')) { 4 return; 5 } 4 6 5 7 include_spip('prive/squelettes/inclure/stats-visites-data_fonctions'); -
_core_/plugins/statistiques/prive/squelettes/inclure/stats-visites-mois_fonctions.php
r53216 r93626 1 1 <?php 2 2 3 if (!defined('_ECRIRE_INC_VERSION')) return; 3 if (!defined('_ECRIRE_INC_VERSION')) { 4 return; 5 } 4 6 5 7 include_spip('prive/squelettes/inclure/stats-visites-data_fonctions'); -
_core_/plugins/statistiques/public/stats.php
r92685 r93626 13 13 /** 14 14 * Loguer une visite 15 * 15 * 16 16 * @plugin Statistiques pour SPIP 17 17 * @license GNU/GPL 18 18 * @package SPIP\Stats\Public 19 **/19 **/ 20 20 21 if (!defined("_ECRIRE_INC_VERSION")) return; 21 if (!defined("_ECRIRE_INC_VERSION")) { 22 return; 23 } 22 24 23 25 /** 24 * Logue une visite sur une page 26 * Logue une visite sur une page 25 27 * 26 28 * Enregistre le passage d'un visiteur sur la page demandée 27 * dans `tmp/visites/` qui seront ensuite traitées par une tache cron. 28 * 29 * dans `tmp/visites/` qui seront ensuite traitées par une tache cron. 30 * 29 31 * Ne tient pas compte 30 32 * - des visites de robots, 31 33 * - des 404, 32 34 * - des forum 33 * 35 * 34 36 * @see genie_visites_dist() Pour la tache cron qui traite les logs. 35 * 37 * 36 38 * @param array|null $contexte 37 39 * Contexte d'appel de la page ; retrouvé automatiquement sinon. … … 39 41 * Referer de provenance ; retrouvé automatiquement sinon. 40 42 * @return null|void 41 **/43 **/ 42 44 function public_stats_dist($contexte = null, $referer = null) { 43 if (!is_array($contexte)) {45 if (!is_array($contexte)) { 44 46 $contexte = $GLOBALS['contexte']; 45 47 } 46 if (is_null($referer)) {48 if (is_null($referer)) { 47 49 // $_SERVER["HTTP_REFERER"] ne fonctionne pas partout 48 if (isset($_SERVER['HTTP_REFERER'])) $referer = $_SERVER['HTTP_REFERER']; 49 else if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"]; 50 if (isset($_SERVER['HTTP_REFERER'])) { 51 $referer = $_SERVER['HTTP_REFERER']; 52 } else { 53 if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) { 54 $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"]; 55 } 56 } 50 57 } 51 58 52 59 // Rejet des robots (qui sont pourtant des humains comme les autres) 53 if (_IS_BOT OR (isset($referer) AND strpbrk($referer, '<>"\''))) return; 60 if (_IS_BOT OR (isset($referer) AND strpbrk($referer, '<>"\''))) { 61 return; 62 } 54 63 55 64 // Ne pas tenir compte des tentatives de spam des forums 56 65 if ($_SERVER['REQUEST_METHOD'] !== 'GET' 57 OR (isset($contexte['page']) AND $contexte['page'] == 'forum')) 66 OR (isset($contexte['page']) AND $contexte['page'] == 'forum') 67 ) { 58 68 return; 69 } 59 70 60 71 // rejet des pages 404 61 72 if (isset($GLOBALS['page']['status']) 62 AND $GLOBALS['page']['status'] == 404) 73 AND $GLOBALS['page']['status'] == 404 74 ) { 63 75 return; 76 } 64 77 65 78 // Identification du client … … 69 82 . (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '') 70 83 . (isset($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : '') 71 ), 0, 10);84 ), 0, 10); 72 85 73 86 // Analyse du referer … … 76 89 $url_site_spip = preg_replace(',/$,', '', 77 90 preg_replace(',^(https?://)?(www\.)?,i', '', 78 url_de_base())); 79 if (!(($url_site_spip<>'') 80 AND strpos('-'.strtolower($referer), strtolower($url_site_spip)) 81 AND strpos($referer,"recherche=")===false)) { 82 $log_referer =$referer; 91 url_de_base())); 92 if (!(($url_site_spip <> '') 93 AND strpos('-' . strtolower($referer), strtolower($url_site_spip)) 94 AND strpos($referer, "recherche=") === false) 95 ) { 96 $log_referer = $referer; 83 97 } 84 98 } … … 91 105 $content = array(); 92 106 $fichier = sous_repertoire(_DIR_TMP, 'visites') . $client_id; 93 if (lire_fichier($fichier, $content)) 107 if (lire_fichier($fichier, $content)) { 94 108 $content = @unserialize($content); 109 } 95 110 96 111 // 2. Plafonner le nombre de hits pris en compte pour un IP (robots etc.) … … 99 114 100 115 // Identification de l'element 101 if (isset($contexte['id_article'])) 116 if (isset($contexte['id_article'])) { 102 117 $log_type = "article"; 103 else if (isset($contexte['id_breve'])) 104 $log_type = "breve"; 105 else if (isset($contexte['id_rubrique'])) 106 $log_type = "rubrique"; 107 else 108 $log_type = ""; 118 } else { 119 if (isset($contexte['id_breve'])) { 120 $log_type = "breve"; 121 } else { 122 if (isset($contexte['id_rubrique'])) { 123 $log_type = "rubrique"; 124 } else { 125 $log_type = ""; 126 } 127 } 128 } 109 129 110 if ($log_type) 130 if ($log_type) { 111 131 $log_type .= "\t" . intval($contexte["id_$log_type"]); 112 else $log_type = "autre\t0"; 132 } else { 133 $log_type = "autre\t0"; 134 } 113 135 114 136 $log_type .= "\t" . trim($log_referer); 115 if (isset($content[$log_type])) 137 if (isset($content[$log_type])) { 116 138 $content[$log_type]++; 117 else $content[$log_type] = 1; // bienvenue au club 139 } else { 140 $content[$log_type] = 1; 141 } // bienvenue au club 118 142 119 143 ecrire_fichier($fichier, serialize($content)); 120 } 121 else { 144 } else { 122 145 $flood = sous_repertoire(_DIR_TMP, 'flood') . $GLOBALS['ip']; 123 146 @touch($flood); -
_core_/plugins/statistiques/stats_administrations.php
r92665 r93626 13 13 /** 14 14 * Fichier gérant l'installation et désinstallation du plugin Statistiques 15 * 15 * 16 16 * @plugin Statistiques pour SPIP 17 17 * @license GNU/GPL 18 18 * @package SPIP\Stats\Pipelines 19 **/19 **/ 20 20 21 if (!defined("_ECRIRE_INC_VERSION")) return; 21 if (!defined("_ECRIRE_INC_VERSION")) { 22 return; 23 } 22 24 23 25 /** … … 29 31 * Version du schéma de données dans ce plugin (déclaré dans paquet.xml) 30 32 * @return void 31 **/32 function stats_upgrade($nom_meta_base_version, $version_cible) {33 **/ 34 function stats_upgrade($nom_meta_base_version, $version_cible) { 33 35 // cas particulier : 34 36 // si plugin pas installe mais que la table existe 35 37 // considerer que c'est un upgrade depuis v 1.0.0 36 38 // pour gerer l'historique des installations SPIP <=2.1 37 if (!isset($GLOBALS['meta'][$nom_meta_base_version])) {38 $trouver_table = charger_fonction('trouver_table', 'base');39 if (!isset($GLOBALS['meta'][$nom_meta_base_version])) { 40 $trouver_table = charger_fonction('trouver_table', 'base'); 39 41 if ($desc = $trouver_table('spip_visites') 40 AND isset($desc['exist']) AND $desc['exist']){ 41 ecrire_meta($nom_meta_base_version,'1.0.0'); 42 AND isset($desc['exist']) AND $desc['exist'] 43 ) { 44 ecrire_meta($nom_meta_base_version, '1.0.0'); 42 45 } 43 46 // si pas de table en base, on fera une simple creation de base … … 46 49 $maj = array(); 47 50 $maj['create'] = array( 48 array('maj_tables', array('spip_visites','spip_visites_articles','spip_referers','spip_referers_articles')),51 array('maj_tables', array('spip_visites', 'spip_visites_articles', 'spip_referers', 'spip_referers_articles')), 49 52 ); 50 53 $maj['1.0.0'] = array(); … … 62 65 * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP 63 66 * @return void 64 **/67 **/ 65 68 function stats_vider_tables($nom_meta_base_version) { 66 69 sql_drop_table("spip_visites"); … … 74 77 effacer_meta($nom_meta_base_version); 75 78 } 79 76 80 ?> -
_core_/plugins/statistiques/stats_autoriser.php
r93092 r93626 3 3 /** 4 4 * Déclaration d'autorisations 5 * 5 * 6 6 * @plugin Statistiques pour SPIP 7 7 * @license GNU/GPL 8 8 * @package SPIP\Stats\Pipelines 9 **/9 **/ 10 10 11 if (!defined('_ECRIRE_INC_VERSION')) return; 11 if (!defined('_ECRIRE_INC_VERSION')) { 12 return; 13 } 12 14 13 15 /** 14 16 * Fonction du pipeline autoriser. N'a rien à faire 17 * 15 18 * @pipeline autoriser 16 19 */ 17 function stats_autoriser() {}20 function stats_autoriser() { } 18 21 19 22 /** … … 22 25 * @uses autoriser_voirstats_dist() 23 26 * @param string $faire Action demandée 24 * @param string $type 25 * @param int $idIdentifiant de l'objet26 * @param array $quiDescription de l'auteur demandant l'autorisation27 * @param array $optOptions de cette autorisation27 * @param string $type Type d'objet sur lequel appliquer l'action 28 * @param int $id Identifiant de l'objet 29 * @param array $qui Description de l'auteur demandant l'autorisation 30 * @param array $opt Options de cette autorisation 28 31 * @return bool true s'il a le droit, false sinon 29 32 */ 30 function autoriser_statistiques_menu_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL){33 function autoriser_statistiques_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { 31 34 return autoriser('voirstats', $type, $id, $qui, $opt); 32 35 } … … 37 40 * @uses autoriser_voirstats_dist() 38 41 * @param string $faire Action demandée 39 * @param string $type 40 * @param int $idIdentifiant de l'objet41 * @param array $quiDescription de l'auteur demandant l'autorisation42 * @param array $optOptions de cette autorisation42 * @param string $type Type d'objet sur lequel appliquer l'action 43 * @param int $id Identifiant de l'objet 44 * @param array $qui Description de l'auteur demandant l'autorisation 45 * @param array $opt Options de cette autorisation 43 46 * @return bool true s'il a le droit, false sinon 44 47 */ 45 function autoriser_referers_menu_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL){48 function autoriser_referers_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { 46 49 return autoriser('voirstats', $type, $id, $qui, $opt); 47 50 } … … 56 59 * 57 60 * @param string $faire Action demandée 58 * @param string $type 59 * @param int $idIdentifiant de l'objet60 * @param array $quiDescription de l'auteur demandant l'autorisation61 * @param array $optOptions de cette autorisation61 * @param string $type Type d'objet sur lequel appliquer l'action 62 * @param int $id Identifiant de l'objet 63 * @param array $qui Description de l'auteur demandant l'autorisation 64 * @param array $opt Options de cette autorisation 62 65 * @return bool true s'il a le droit, false sinon 63 66 */ 64 67 function autoriser_voirstats_dist($faire, $type, $id, $qui, $opt) { 65 68 return (($GLOBALS['meta']["activer_statistiques"] != 'non') 66 69 AND ($qui['statut'] == '0minirezo')); 67 70 } 68 71 … … 72 75 * @uses autoriser_voirstats_dist() 73 76 * @param string $faire Action demandée 74 * @param string $type 75 * @param int $idIdentifiant de l'objet76 * @param array $quiDescription de l'auteur demandant l'autorisation77 * @param array $optOptions de cette autorisation77 * @param string $type Type d'objet sur lequel appliquer l'action 78 * @param int $id Identifiant de l'objet 79 * @param array $qui Description de l'auteur demandant l'autorisation 80 * @param array $opt Options de cette autorisation 78 81 * @return bool true s'il a le droit, false sinon 79 82 */ … … 87 90 * @uses autoriser_voirstats_dist() 88 91 * @param string $faire Action demandée 89 * @param string $type 90 * @param int $idIdentifiant de l'objet91 * @param array $quiDescription de l'auteur demandant l'autorisation92 * @param array $optOptions de cette autorisation92 * @param string $type Type d'objet sur lequel appliquer l'action 93 * @param int $id Identifiant de l'objet 94 * @param array $qui Description de l'auteur demandant l'autorisation 95 * @param array $opt Options de cette autorisation 93 96 * @return bool true s'il a le droit, false sinon 94 97 */ … … 103 106 * @uses autoriser_voirstats_dist() 104 107 * @param string $faire Action demandée 105 * @param string $type 106 * @param int $idIdentifiant de l'objet107 * @param array $quiDescription de l'auteur demandant l'autorisation108 * @param array $optOptions de cette autorisation108 * @param string $type Type d'objet sur lequel appliquer l'action 109 * @param int $id Identifiant de l'objet 110 * @param array $qui Description de l'auteur demandant l'autorisation 111 * @param array $opt Options de cette autorisation 109 112 * @return bool true s'il a le droit, false sinon 110 113 */ 111 114 function autoriser_statslang_onglet_dist($faire, $type, $id, $qui, $opt) { 112 115 $objets = explode(',', isset($GLOBALS['meta']['multi_objets']) ? $GLOBALS['meta']['multi_objets'] : ''); 113 return (in_array('spip_articles', $objets) 114 OR in_array('spip_rubriques', $objets)) 115 AND autoriser('voirstats', $type, $id, $qui, $opt); 116 117 return (in_array('spip_articles', $objets) 118 OR in_array('spip_rubriques', $objets)) 119 AND autoriser('voirstats', $type, $id, $qui, $opt); 116 120 } 117 121 … … 121 125 * @uses autoriser_voirstats_dist() 122 126 * @param string $faire Action demandée 123 * @param string $type 124 * @param int $idIdentifiant de l'objet125 * @param array $quiDescription de l'auteur demandant l'autorisation126 * @param array $optOptions de cette autorisation127 * @param string $type Type d'objet sur lequel appliquer l'action 128 * @param int $id Identifiant de l'objet 129 * @param array $qui Description de l'auteur demandant l'autorisation 130 * @param array $opt Options de cette autorisation 127 131 * @return bool true s'il a le droit, false sinon 128 132 */ -
_core_/plugins/statistiques/stats_ieconfig.php
r92665 r93626 3 3 /** 4 4 * Déclarations des configurations qui peuvent être sauvegardées 5 * 5 * 6 6 * @plugin Statistiques pour SPIP 7 7 * @license GNU/GPL 8 8 * @package SPIP\Stats\Pipelines 9 **/9 **/ 10 10 11 if (!defined("_ECRIRE_INC_VERSION")) return; 11 if (!defined("_ECRIRE_INC_VERSION")) { 12 return; 13 } 12 14 13 15 /** … … 18 20 * @param array $table 19 21 * Déclaration des sauvegardes 20 * @return array 22 * @return array 21 23 * Déclaration des sauvegardes complétées 22 **/23 function stats_ieconfig_metas($table) {24 **/ 25 function stats_ieconfig_metas($table) { 24 26 $table['statistiques']['titre'] = _T('statistiques:info_forum_statistiques'); 25 27 $table['statistiques']['icone'] = 'statistique-16.png'; 26 28 $table['statistiques']['metas_brutes'] = 'activer_statistiques,activer_captures_referers'; 29 27 30 return $table; 28 31 } -
_core_/plugins/statistiques/stats_pipelines.php
r93100 r93626 3 3 /** 4 4 * Déclarations d'autorisations et utilisations de pipelines 5 * 5 * 6 6 * @plugin Statistiques pour SPIP 7 7 * @license GNU/GPL 8 8 * @package SPIP\Stats\Pipelines 9 **/ 10 11 if (!defined('_ECRIRE_INC_VERSION')) return; 9 **/ 10 11 if (!defined('_ECRIRE_INC_VERSION')) { 12 return; 13 } 12 14 13 15 … … 25 27 * @param array $entetes liste des entêtes de la page 26 28 * @return array 27 **/28 function stats_affichage_entetes_final($entetes) {29 **/ 30 function stats_affichage_entetes_final($entetes) { 29 31 if (isset($GLOBALS['meta']["activer_statistiques"]) and $GLOBALS['meta']["activer_statistiques"] != "non") { 30 32 $html = preg_match(',^\s*text/html,', $entetes['Content-Type']); … … 32 34 // decomptage des visites, on peut forcer a oui ou non avec le header X-Spip-Visites 33 35 // par defaut on ne compte que les pages en html (ce qui exclue les js,css et flux rss) 34 $spip_compter_visites = $html ?'oui':'non';35 if (isset($entetes['X-Spip-Visites'])) {36 $spip_compter_visites = in_array($entetes['X-Spip-Visites'], array('oui','non'))37 ? $entetes['X-Spip-Visites']38 : $spip_compter_visites;36 $spip_compter_visites = $html ? 'oui' : 'non'; 37 if (isset($entetes['X-Spip-Visites'])) { 38 $spip_compter_visites = in_array($entetes['X-Spip-Visites'], array('oui', 'non')) 39 ? $entetes['X-Spip-Visites'] 40 : $spip_compter_visites; 39 41 unset($entetes['X-Spip-Visites']); 40 42 } 41 43 42 44 // Gestion des statistiques du site public 43 if ($spip_compter_visites !='non') {45 if ($spip_compter_visites != 'non') { 44 46 $stats = charger_fonction('stats', 'public'); 45 47 $stats(); 46 48 } 47 49 } 50 48 51 return $entetes; 49 52 } … … 57 60 * 58 61 * @pipeline affiche_milieu 59 * @param array $flux 62 * @param array $flux Données du pipeline 60 63 * @return array Données du pipeline 61 **/62 function stats_affiche_milieu($flux) {64 **/ 65 function stats_affiche_milieu($flux) { 63 66 // afficher le formulaire de configuration (activer ou desactiver les statistiques). 64 67 if ($flux['args']['exec'] == 'configurer_avancees') { 65 $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_compteur')); 68 $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer', 69 array('configurer' => 'configurer_compteur')); 66 70 } 67 71 68 72 // afficher le formulaire de suppression des visites (configuration > maintenance du site). 69 73 if ($flux['args']['exec'] == 'admin_tech') { 70 $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats',array()); 71 } 74 $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats', array()); 75 } 76 72 77 return $flux; 73 78 } … … 79 84 * @uses admin_stats() 80 85 * @pipeline formulaire_admin 81 * @param array $flux 86 * @param array $flux Données du pipeline 82 87 * @return array Données du pipeline 83 **/88 **/ 84 89 function stats_formulaire_admin($flux) { 85 90 if ( 86 87 88 89 90 91 isset($flux['args']['contexte']['objet']) 92 AND $objet = $flux['args']['contexte']['objet'] 93 AND isset($flux['args']['contexte']['id_objet']) 94 AND $id_objet = $flux['args']['contexte']['id_objet'] 95 ) { 91 96 if ($l = admin_stats($objet, $id_objet, defined('_VAR_PREVIEW') ? _VAR_PREVIEW : '')) { 92 97 $btn = recuperer_fond('prive/bouton/statistiques', array( … … 95 100 'statistiques' => $l[2], 96 101 )); 97 $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn.'$1', $flux['data']); 98 } 99 } 102 $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn . '$1', $flux['data']); 103 } 104 } 105 100 106 return $flux; 101 107 } … … 107 113 * Actuellement uniquement valable pour les articles. 108 114 * 109 * @param string $objet 110 * @param int $id_objet 115 * @param string $objet 116 * @param int $id_objet 111 117 * @param string $var_preview 112 118 * Indique si on est en prévisualisation : pas de statistiques dans ce cas. … … 114 120 * - false : pas de statistiques disponibles 115 121 * - array : Tableau les stats `[visites, popularité, url]` 116 **/ 117 function admin_stats($objet, $id_objet, $var_preview = "") 118 { 119 if ($GLOBALS['meta']["activer_statistiques"] != "non" 120 AND $objet == 'article' 121 AND !$var_preview 122 AND autoriser('voirstats') 122 **/ 123 function admin_stats($objet, $id_objet, $var_preview = "") { 124 if ($GLOBALS['meta']["activer_statistiques"] != "non" 125 AND $objet == 'article' 126 AND !$var_preview 127 AND autoriser('voirstats') 123 128 ) { 124 129 $row = sql_fetsel("visites, popularite", "spip_articles", "id_article=$id_objet AND statut='publie'"); 125 130 126 131 if ($row) { 127 return array(intval($row['visites']), 128 ceil($row['popularite']), 129 str_replace('&', '&', generer_url_ecrire_statistiques($id_objet))); 130 } 131 } 132 return array( 133 intval($row['visites']), 134 ceil($row['popularite']), 135 str_replace('&', '&', generer_url_ecrire_statistiques($id_objet)) 136 ); 137 } 138 } 139 132 140 return false; 133 141 } … … 138 146 * @param int $id_article 139 147 * @return string URL 140 **/148 **/ 141 149 function generer_url_ecrire_statistiques($id_article) { 142 150 return generer_url_ecrire('stats_visites', "id_article=$id_article"); 143 151 } 144 145 152 146 153 … … 153 160 * @return array 154 161 * Tableau `[nom de la tache => intervalle en secondes]` 155 **/156 function stats_taches_generales_cron($taches_generales) {162 **/ 163 function stats_taches_generales_cron($taches_generales) { 157 164 158 165 // stats : toutes les 5 minutes on peut vider un panier de visites 159 166 if (isset($GLOBALS['meta']["activer_statistiques"]) 160 AND $GLOBALS['meta']["activer_statistiques"] == "oui" )161 {162 $taches_generales['visites'] = 300; 167 AND $GLOBALS['meta']["activer_statistiques"] == "oui" 168 ) { 169 $taches_generales['visites'] = 300; 163 170 $taches_generales['popularites'] = 7200; # calcul lourd 164 171 } … … 176 183 * Couples nom de la méta => valeur par défaut 177 184 */ 178 function stats_configurer_liste_metas($metas){ 179 $metas['activer_statistiques']='non'; 180 $metas['activer_captures_referers']='non'; 185 function stats_configurer_liste_metas($metas) { 186 $metas['activer_statistiques'] = 'non'; 187 $metas['activer_captures_referers'] = 'non'; 188 181 189 return $metas; 182 190 } … … 186 194 * 187 195 * @pipeline boite_infos 188 * @param array $flux 196 * @param array $flux Données du pipeline 189 197 * @return array Données du pipeline 190 198 */ 191 function stats_boite_infos($flux) {199 function stats_boite_infos($flux) { 192 200 if ($GLOBALS['meta']["activer_statistiques"] == "oui") { 193 if ($flux['args']['type']=='article' 194 AND $id_article=$flux['args']['id'] 195 AND autoriser('voirstats','article',$id_article)){ 196 $visites = sql_getfetsel('visites','spip_articles','id_article='.intval($id_article)); 197 if ($visites>0){ 198 $icone_horizontale=chercher_filtre('icone_horizontale'); 199 $flux['data'].=$icone_horizontale(generer_url_ecrire("stats_visites","id_article=$id_article"),_T('statistiques:icone_evolution_visites', array('visites' => $visites)),"statistique-24.png"); 201 if ($flux['args']['type'] == 'article' 202 AND $id_article = $flux['args']['id'] 203 AND autoriser('voirstats', 'article', $id_article) 204 ) { 205 $visites = sql_getfetsel('visites', 'spip_articles', 'id_article=' . intval($id_article)); 206 if ($visites > 0) { 207 $icone_horizontale = chercher_filtre('icone_horizontale'); 208 $flux['data'] .= $icone_horizontale(generer_url_ecrire("stats_visites", "id_article=$id_article"), 209 _T('statistiques:icone_evolution_visites', array('visites' => $visites)), "statistique-24.png"); 200 210 } 201 211 } 202 212 } 203 return $flux; 213 214 return $flux; 204 215 } 205 216
Note: See TracChangeset
for help on using the changeset viewer.