diff --git a/action/statistiques_archiver.php b/action/statistiques_archiver.php index 4fa8131..48b4940 100644 --- a/action/statistiques_archiver.php +++ b/action/statistiques_archiver.php @@ -16,42 +16,44 @@ * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Stats\Actions -**/ + **/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} if (!defined('STATISTIQUES_ARCHIVER_PAR_MOIS')) { /** * Nombre d'années après quoi on permet de concaténer les statistiques de visites par mois - * + * * Après ce nombre d'années, on peut concaténer les données de visites d'articles par mois * pour prendre moins de place dans la base de données * - * @var int Nombre d'années - **/ + * @var int Nombre d'années + **/ define('STATISTIQUES_ARCHIVER_PAR_MOIS', 2); } if (!defined('STATISTIQUES_ARCHIVER_PAR_AN')) { /** * Nombre d'années après quoi on permet de concaténer les statistiques de visites par an - * + * * Après ce nombre d'années, on peut concaténer les données de visites d'articles par années * pour prendre moins de place dans la base de données * - * @var int Nombre d'années - **/ + * @var int Nombre d'années + **/ define('STATISTIQUES_ARCHIVER_PAR_AN', 5); } /** * Archiver ou nettoyer des statistiques - * + * * @param string $arg */ -function action_statistiques_archiver_dist($arg = null){ +function action_statistiques_archiver_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); @@ -66,7 +68,8 @@ function action_statistiques_archiver_dist($arg = null){ 'archiver_visites_articles', 'nettoyer_visites_articles', 'nettoyer_referers_articles' - ))) { + )) + ) { include_spip('inc/minipres'); minipres("Argument non compris"); } @@ -81,7 +84,7 @@ function action_statistiques_archiver_dist($arg = null){ * * @uses spip_log() * @param string $texte -**/ + **/ function statistiques_archiver_log($texte) { spip_log($texte, 'statistiques_archiver.' . _LOG_INFO_IMPORTANTE); } @@ -91,7 +94,7 @@ function statistiques_archiver_log($texte) { * * Supprime toutes les lignes qui ne font pas partie * d'un article présent en base -**/ + **/ function statistiques_nettoyer_visites_articles() { statistiques_archiver_log("Supprimer les visites d'articles qui n'existent pas dans spip_articles."); $i = sql_delete('spip_visites_articles', 'id_article NOT IN (SELECT id_article FROM spip_articles)'); @@ -103,7 +106,7 @@ function statistiques_nettoyer_visites_articles() { * * Supprime toutes les lignes qui ne font pas partie * d'un article présent en base -**/ + **/ function statistiques_nettoyer_referers_articles() { statistiques_archiver_log("Supprimer les referers d'articles qui n'existent pas dans spip_articles."); $i = sql_delete('spip_referers_articles', 'id_article NOT IN (SELECT id_article FROM spip_articles)'); @@ -119,14 +122,14 @@ function statistiques_nettoyer_referers_articles() { * La base de test avait (en 2014) 12.500.000 d'entrées depuis 2005. * Cet archivage réduit à 1.200.000 entrées en réduisant * par mois jusqu'à 2012 inclu et par an jusqu'à 2009 inclu. - * + * * Cela prenait 8 minutes sur ma machine locale * (Intel Core i5-4258U CPU @ 2.40GHz × 4 avec disque SSD) * * @note * On peut suivre l'avancement dans le fichier de log * tail -f tmp/log/statistiques_archiver.log - * + * * @note * On ne peut pas vraiment avec le code actuel de la fonction * appliquer les calculs sur l'ensemble d'un mois car cela @@ -137,14 +140,14 @@ function statistiques_nettoyer_referers_articles() { * @uses statistiques_concatener_visites_entre_jours() * @uses statistiques_concatener_visites_par_mois() * @uses statistiques_concatener_visites_par_an() -**/ + **/ function statistiques_archiver_visites_articles() { // Tenter de donner du temps au temps - @set_time_limit(15 * 60); // 15mn + @set_time_limit(15*60); // 15mn - $annee_par_mois = date('Y') - STATISTIQUES_ARCHIVER_PAR_MOIS; - $annee_par_an = date('Y') - STATISTIQUES_ARCHIVER_PAR_AN; + $annee_par_mois = date('Y')-STATISTIQUES_ARCHIVER_PAR_MOIS; + $annee_par_an = date('Y')-STATISTIQUES_ARCHIVER_PAR_AN; $annee_minimum = statistiques_concatener_annee_minimum(); if (!$annee_minimum) { @@ -178,16 +181,15 @@ function statistiques_archiver_visites_articles() { * Concatène les statistiques de visites d'articles par mois * * @see statistiques_concatener_visites_entre_jours() - * + * * @param int $annee * On concatène ce qui est avant cette année là. -**/ + **/ function statistiques_concatener_visites_par_mois($annee) { return statistiques_concatener_visites_entre_jours($annee, 1, 31); } - /** * Concatène les statistiques de visites d'articles par portion de mois (entre groupe de jours) * @@ -200,8 +202,8 @@ function statistiques_concatener_visites_par_mois($annee) { * Numéro de jour de fin de la concaténation, exemple 31. * Toutes les entrées entre le jour $debut+1 et $fin seront supprimées * et concaténées au jour $debut. - * -**/ + * + **/ function statistiques_concatener_visites_entre_jours($annee, $debut, $fin) { $annee_minimum = statistiques_concatener_annee_minimum(); @@ -211,18 +213,19 @@ function statistiques_concatener_visites_entre_jours($annee, $debut, $fin) { if ($annee_minimum > $annee) { statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes !"); + return false; } // on a besoin pour le champ date d'une écriture sur 2 chiffres. $debut = str_pad($debut, 2, '0', STR_PAD_LEFT); - $fin = str_pad($fin, 2, '0', STR_PAD_LEFT); + $fin = str_pad($fin, 2, '0', STR_PAD_LEFT); statistiques_archiver_log("\nConcaténer les visites d'articles (jours entre $debut et $fin)"); statistiques_archiver_log("==========================================================="); $annees = range($annee_minimum, $annee); - $mois = range(1, 12); + $mois = range(1, 12); foreach ($annees as $a) { statistiques_archiver_log("\n- Concaténer les visites de l'année : $a"); @@ -241,7 +244,7 @@ function statistiques_concatener_visites_entre_jours($annee, $debut, $fin) { * @return int|bool * - int : l'année * - false : année non trouvée. -**/ + **/ function statistiques_concatener_annee_minimum() { static $annee_minimum = null; @@ -252,6 +255,7 @@ function statistiques_concatener_annee_minimum() { if (!$annee_minimum) { statistiques_archiver_log("Erreur de calcul de la plus petite année de statistiques !"); + return false; } @@ -261,11 +265,11 @@ function statistiques_concatener_annee_minimum() { /** * Concatène les statistiques de visites d'articles par an - * + * * @param int $annee * On concatène ce qui est avant cette année là. - * -**/ + * + **/ function statistiques_concatener_visites_par_an($annee) { $annee_minimum = statistiques_concatener_annee_minimum(); @@ -275,6 +279,7 @@ function statistiques_concatener_visites_par_an($annee) { if ($annee_minimum > $annee) { statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes !"); + return false; } @@ -300,8 +305,8 @@ function statistiques_concatener_visites_par_an($annee) { * @return bool * - false : aucune visite sur cette période * - true : il y avait des visites, elles ont été concaténées (ou l'étaient déjà) - * -**/ + * + **/ function statistiques_concatener_visites_entre_periode($date_debut, $date_fin) { // récupérer toutes les visites de cette période (année, mois, entre jour début et fin) diff --git a/base/delete_referers.php b/base/delete_referers.php index 9317a84..fa7075e 100644 --- a/base/delete_referers.php +++ b/base/delete_referers.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; // securiser +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} // securiser // faudrait plutot recuperer dans inc_serialbase et inc_auxbase // mais il faudra prevenir ceux qui affectent les globales qui s'y trouvent @@ -19,20 +21,23 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser /** * Supprimer les referers + * * @param strinf $titre * @param bool $reprise * @return string */ -function base_delete_referers_dist($titre = '', $reprise = '') -{ - if (!$titre) return; // anti-testeur automatique +function base_delete_referers_dist($titre = '', $reprise = '') { + if (!$titre) { + return; + } // anti-testeur automatique sql_delete("spip_referers"); sql_delete("spip_referers_articles"); - sql_update("spip_articles", array('referers'=>0)); + sql_update("spip_articles", array('referers' => 0)); // un pipeline pour detruire les tables de referers installees par les plugins ? //pipeline('delete_referers', ''); - + spip_log("raz des referers operee redirige vers " . _request('redirect')); } + ?> diff --git a/base/delete_stats.php b/base/delete_stats.php index 52bcccf..cd39435 100644 --- a/base/delete_stats.php +++ b/base/delete_stats.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; // securiser +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} // securiser // faudrait plutot recuperer dans inc_serialbase et inc_auxbase // mais il faudra prevenir ceux qui affectent les globales qui s'y trouvent @@ -19,21 +21,24 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser /** * Supprimer les stats + * * @param strinf $titre * @param bool $reprise * @return string */ -function base_delete_stats_dist($titre = '', $reprise = '') -{ - if (!$titre) return; // anti-testeur automatique +function base_delete_stats_dist($titre = '', $reprise = '') { + if (!$titre) { + return; + } // anti-testeur automatique sql_delete("spip_visites"); sql_delete("spip_visites_articles"); sql_delete("spip_referers"); sql_delete("spip_referers_articles"); - sql_update("spip_articles", array('visites'=>0, 'referers'=>0, 'popularite'=>0)); + sql_update("spip_articles", array('visites' => 0, 'referers' => 0, 'popularite' => 0)); // un pipeline pour detruire les tables de stats installees par les plugins pipeline('delete_statistiques', ''); spip_log("raz des stats operee redirige vers " . _request('redirect')); } + ?> diff --git a/base/stats.php b/base/stats.php index 72a42bc..65c20ef 100644 --- a/base/stats.php +++ b/base/stats.php @@ -12,13 +12,15 @@ /** * Déclarations relatives à la base de données - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Stats\Pipelines -**/ + **/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Déclarer les tables de statistiques @@ -35,62 +37,73 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @return array * Description complétée des tables auxiliaires */ -function stats_declarer_tables_auxiliaires($tables_auxiliaires){ +function stats_declarer_tables_auxiliaires($tables_auxiliaires) { $spip_visites = array( - "date" => "DATE NOT NULL", - "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", - "maj" => "TIMESTAMP"); + "date" => "DATE NOT NULL", + "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", + "maj" => "TIMESTAMP" + ); $spip_visites_key = array( - "PRIMARY KEY" => "date"); + "PRIMARY KEY" => "date" + ); $spip_visites_articles = array( - "date" => "DATE NOT NULL", - "id_article" => "int UNSIGNED NOT NULL", - "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", - "maj" => "TIMESTAMP"); + "date" => "DATE NOT NULL", + "id_article" => "int UNSIGNED NOT NULL", + "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", + "maj" => "TIMESTAMP" + ); $spip_visites_articles_key = array( - "PRIMARY KEY" => "date, id_article"); - + "PRIMARY KEY" => "date, id_article" + ); $spip_referers = array( - "referer_md5" => "bigint UNSIGNED NOT NULL", - "date" => "DATE NOT NULL", - "referer" => "VARCHAR (255)", - "visites" => "int UNSIGNED NOT NULL", - "visites_jour" => "int UNSIGNED NOT NULL", - "visites_veille"=> "int UNSIGNED NOT NULL", - "maj" => "TIMESTAMP"); + "referer_md5" => "bigint UNSIGNED NOT NULL", + "date" => "DATE NOT NULL", + "referer" => "VARCHAR (255)", + "visites" => "int UNSIGNED NOT NULL", + "visites_jour" => "int UNSIGNED NOT NULL", + "visites_veille" => "int UNSIGNED NOT NULL", + "maj" => "TIMESTAMP" + ); $spip_referers_key = array( - "PRIMARY KEY" => "referer_md5"); + "PRIMARY KEY" => "referer_md5" + ); $spip_referers_articles = array( - "id_article" => "int UNSIGNED NOT NULL", - "referer_md5" => "bigint UNSIGNED NOT NULL", - "referer" => "VARCHAR (255) DEFAULT '' NOT NULL", - "visites" => "int UNSIGNED NOT NULL", - "maj" => "TIMESTAMP"); + "id_article" => "int UNSIGNED NOT NULL", + "referer_md5" => "bigint UNSIGNED NOT NULL", + "referer" => "VARCHAR (255) DEFAULT '' NOT NULL", + "visites" => "int UNSIGNED NOT NULL", + "maj" => "TIMESTAMP" + ); $spip_referers_articles_key = array( - "PRIMARY KEY" => "id_article, referer_md5", - "KEY referer_md5" => "referer_md5"); + "PRIMARY KEY" => "id_article, referer_md5", + "KEY referer_md5" => "referer_md5" + ); $tables_auxiliaires['spip_visites'] = array( 'field' => &$spip_visites, - 'key' => &$spip_visites_key); + 'key' => &$spip_visites_key + ); $tables_auxiliaires['spip_visites_articles'] = array( 'field' => &$spip_visites_articles, - 'key' => &$spip_visites_articles_key); + 'key' => &$spip_visites_articles_key + ); $tables_auxiliaires['spip_referers'] = array( 'field' => &$spip_referers, - 'key' => &$spip_referers_key); + 'key' => &$spip_referers_key + ); $tables_auxiliaires['spip_referers_articles'] = array( 'field' => &$spip_referers_articles, - 'key' => &$spip_referers_articles_key); + 'key' => &$spip_referers_articles_key + ); return $tables_auxiliaires; } diff --git a/exec/base_delete_referers.php b/exec/base_delete_referers.php index d99d1fc..3f2f666 100644 --- a/exec/base_delete_referers.php +++ b/exec/base_delete_referers.php @@ -10,21 +10,27 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function exec_base_delete_referers_dist() -{ +function exec_base_delete_referers_dist() { include_spip('inc/autoriser'); - if (!autoriser('detruire','_statistiques')) { + if (!autoriser('detruire', '_statistiques')) { include_spip('inc/minipres'); echo minipres(); } else { include_spip('inc/headers'); $admin = charger_fonction('admin', 'inc'); $res = $admin('delete_referers', _T('statistiques:bouton_effacer_referers'), ''); - if ($res) echo $res; else redirige_url_ecrire('stats_referers',''); - + if ($res) { + echo $res; + } else { + redirige_url_ecrire('stats_referers', ''); + } + } } + ?> diff --git a/exec/base_delete_stats.php b/exec/base_delete_stats.php index 703ca87..a1b5be8 100644 --- a/exec/base_delete_stats.php +++ b/exec/base_delete_stats.php @@ -10,21 +10,27 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function exec_base_delete_stats_dist() -{ +function exec_base_delete_stats_dist() { include_spip('inc/autoriser'); - if (!autoriser('detruire','_statistiques')) { + if (!autoriser('detruire', '_statistiques')) { include_spip('inc/minipres'); echo minipres(); } else { include_spip('inc/headers'); $admin = charger_fonction('admin', 'inc'); $res = $admin('delete_stats', _T('statistiques:bouton_effacer_statistiques'), ''); - if ($res) echo $res; else redirige_url_ecrire('stats_visites',''); - + if ($res) { + echo $res; + } else { + redirige_url_ecrire('stats_visites', ''); + } + } } + ?> diff --git a/formulaires/configurer_compteur.php b/formulaires/configurer_compteur.php index 605bfb7..062d059 100644 --- a/formulaires/configurer_compteur.php +++ b/formulaires/configurer_compteur.php @@ -10,35 +10,39 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function formulaires_configurer_compteur_charger_dist(){ +function formulaires_configurer_compteur_charger_dist() { $valeurs = array(); - + $valeurs['activer_statistiques'] = $GLOBALS['meta']['activer_statistiques']; $valeurs['activer_captures_referers'] = $GLOBALS['meta']['activer_captures_referers']; - + return $valeurs; - + } -function formulaires_configurer_compteur_verifier_dist(){ +function formulaires_configurer_compteur_verifier_dist() { $erreurs = array(); - + // les checkbox - foreach(array('activer_statistiques','activer_captures_referers') as $champ) - if (_request($champ)!='oui') - set_request($champ,'non'); - + foreach (array('activer_statistiques', 'activer_captures_referers') as $champ) { + if (_request($champ) != 'oui') { + set_request($champ, 'non'); + } + } + return $erreurs; } -function formulaires_configurer_compteur_traiter_dist(){ +function formulaires_configurer_compteur_traiter_dist() { include_spip('inc/config'); appliquer_modifs_config(); - - return array('message_ok'=>_T('config_info_enregistree')); + + return array('message_ok' => _T('config_info_enregistree')); } ?> \ No newline at end of file diff --git a/genie/popularites.php b/genie/popularites.php index 6bca162..de66979 100644 --- a/genie/popularites.php +++ b/genie/popularites.php @@ -12,68 +12,71 @@ /** * Gestion du calcul des popularités (cron) - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Statistiques\Genie -**/ + **/ -if (!defined("_ECRIRE_INC_VERSION")) return; +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 + * @type float $a Coefficient d'amortissement + * @type float $b Constante multiplicative * } -**/ -function genie_popularite_constantes($duree){ + **/ +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) // or, magie des maths, ca vaut log(2) * duree journee/demi-vie // si la demi-vie n'est pas trop proche de la seconde ;) - $b = log(2) * $periode / $demivie; + $b = log(2)*$periode/$demivie; - return array($a,$b); + return array($a, $b); } /** * 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); + $duree = time()-$t; + 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"); @@ -91,19 +94,21 @@ 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; diff --git a/genie/visites.php b/genie/visites.php index 00e11cc..d12b53b 100644 --- a/genie/visites.php +++ b/genie/visites.php @@ -12,14 +12,18 @@ /** * Gestion du compage des statistiques de visites (cron) - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Statistiques\Genie -**/ + **/ -if (!defined("_ECRIRE_INC_VERSION")) return; -if (!defined('_CRON_LOT_FICHIERS_VISITE')) define('_CRON_LOT_FICHIERS_VISITE', 100); +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} +if (!defined('_CRON_LOT_FICHIERS_VISITE')) { + define('_CRON_LOT_FICHIERS_VISITE', 100); +} ### Pour se debarrasser du md5, comment faire ? Un index sur 'referer' ? ### ou alors la meme notion, mais sans passer par des fonctions HEX ? @@ -39,21 +43,24 @@ if (!defined('_CRON_LOT_FICHIERS_VISITE')) define('_CRON_LOT_FICHIERS_VISITE', 1 * @param array $referers_a * Couples id_article => array (url_referer => nombre) : comptage par article puis url de referer * @return void -**/ + **/ function compte_fichier_visite($fichier, &$visites, &$visites_a, &$referers, &$referers_a) { // Noter la visite du site (article 0) - $visites ++; + $visites++; $content = array(); - if (lire_fichier($fichier, $content)) + if (lire_fichier($fichier, $content)) { $content = @unserialize($content); - if (!is_array($content)) return; + } + if (!is_array($content)) { + return; + } foreach ($content as $source => $num) { list($log_type, $log_id_num, $log_referer) = preg_split(",\t,", $source, 3); - + // Noter le referer if ($log_referer) { if (!isset($referers[$log_referer])) { @@ -64,11 +71,12 @@ function compte_fichier_visite($fichier, &$visites, &$visites_a, &$referers, &$r // S'il s'agit d'un article, noter ses visites if ($log_type == 'article' - AND $id_article = intval($log_id_num)) { + AND $id_article = intval($log_id_num) + ) { if (!isset($visites_a[$id_article])) { $visites_a[$id_article] = 0; } - $visites_a[$id_article] ++; + $visites_a[$id_article]++; if ($log_referer) { if (!isset($referers_a[$id_article][$log_referer])) { $referers_a[$id_article][$log_referer] = 0; @@ -85,13 +93,13 @@ function compte_fichier_visite($fichier, &$visites, &$visites_a, &$referers, &$r * * @uses compte_fichier_visite() * @uses genie_popularite_constantes() - * + * * @param int $t * Timestamp de la dernière exécution de cette tâche * @return null|int * - null si aucune visite à prendre en compte ou si tous les fichiers de visite sont traités, * - entier négatif s'il reste encore des fichiers à traiter -**/ + **/ function calculer_visites($t) { include_spip('base/abstract_sql'); @@ -110,48 +118,56 @@ function calculer_visites($t) { $compteur = _CRON_LOT_FICHIERS_VISITE; $date_init = time()-30*60; foreach ($sessions as $item) { - if (($d=@filemtime($item)) < $date_init) { - 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 - $d = date("Y-m-d",$d); + if (($d = @filemtime($item)) < $date_init) { + 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 + $d = date("Y-m-d", $d); spip_log("traite la session $item"); compte_fichier_visite($item, $visites[$d], $visites_a[$d], $referers[$d], $referers_a[$d]); spip_unlink($item); - if (--$compteur <= 0) + if (--$compteur <= 0) { break; + } } #else spip_log("$item pas vieux"); } - if (!count($visites)) + if (!count($visites)) { return; + } include_spip('genie/popularites'); - list($a,$b) = genie_popularite_constantes(24*3600); + list($a, $b) = genie_popularite_constantes(24*3600); // Maintenant on dispose de plusieurs tableaux qu'il faut ventiler dans // les tables spip_visites, spip_visites_articles, spip_referers // et spip_referers_articles ; attention a affecter tout ca a la bonne // date (celle de la visite, pas celle du traitement) - foreach(array_keys($visites) as $date) + foreach (array_keys($visites) as $date) { if ($visites[$date]) { // 1. les visites du site (facile) - if (!sql_countsel('spip_visites', "date='$date'")) + if (!sql_countsel('spip_visites', "date='$date'")) { sql_insertq('spip_visites', array('date' => $date, 'visites' => $visites[$date])); - else - sql_update('spip_visites', array('visites' => "visites+".intval($visites[$date])), "date='$date'"); - + } else { + sql_update('spip_visites', array('visites' => "visites+" . intval($visites[$date])), "date='$date'"); + } + // 2. les visites des articles if ($visites_a[$date]) { - $ar = array(); # tableau num -> liste des articles ayant num visites - foreach($visites_a[$date] as $id_article => $n) { + $ar = array(); # tableau num -> liste des articles ayant num visites + foreach ($visites_a[$date] as $id_article => $n) { if (!sql_countsel('spip_visites_articles', - "id_article=$id_article AND date='$date'")){ + "id_article=$id_article AND date='$date'") + ) { sql_insertq('spip_visites_articles', - array('id_article' => $id_article, - 'visites' => 0, - 'date' => $date)); + array( + 'id_article' => $id_article, + 'visites' => 0, + 'date' => $date + )); } $ar[$n][] = $id_article; } @@ -159,30 +175,38 @@ function calculer_visites($t) { $tous = sql_in('id_article', $liste); sql_update('spip_visites_articles', array('visites' => "visites+$n"), - "date='$date' AND $tous"); - + "date='$date' AND $tous"); + $ref = $noref = array(); - foreach($liste as $id) { - if (isset($referers_a[$id])) - $ref[]= $id ; - else $noref[]=$id; + foreach ($liste as $id) { + if (isset($referers_a[$id])) { + $ref[] = $id; + } else { + $noref[] = $id; + } } // il faudrait ponderer la popularite ajoutee ($n) par son anciennete eventuelle // sur le modele de ce que fait genie/popularites - if (count($noref)) + if (count($noref)) { sql_update('spip_articles', - array('visites' => "visites+$n", - 'popularite' => "popularite+".number_format(round($n*$b,2), 2, '.', ''), - 'maj' => 'maj'), - sql_in('id_article',$noref)); - - if (count($ref)) + array( + 'visites' => "visites+$n", + '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+".number_format(round($n*$b,2), 2, '.', ''), - 'maj' => 'maj'), - sql_in('id_article',$ref)); - + array( + 'visites' => "visites+" . ($n+1), + 'popularite' => "popularite+" . number_format(round($n*$b, 2), 2, '.', ''), + 'maj' => 'maj' + ), + sql_in('id_article', $ref)); + } + ## Ajouter un JOIN sur le statut de l'article ? } } @@ -192,47 +216,57 @@ function calculer_visites($t) { $ar = array(); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table('referers'); - $n = preg_match('/(\d+)/',$desc['field']['referer'], $r); + $n = preg_match('/(\d+)/', $desc['field']['referer'], $r); $n = $n ? $r[1] : 255; foreach ($referers[$date] as $referer => $num) { $referer_md5 = sql_hex(substr(md5($referer), 0, 15)); - $referer = substr($referer,0,$n); - if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) + $referer = substr($referer, 0, $n); + if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) { sql_insertq('spip_referers', - array('visites' => $num, - 'visites_jour' => $num, - 'visites_veille' => $num, - 'date' => $date, - 'referer' => $referer, - 'referer_md5' => $referer_md5)); - else $ar[$num][] = $referer_md5; + array( + 'visites' => $num, + 'visites_jour' => $num, + 'visites_veille' => $num, + 'date' => $date, + 'referer' => $referer, + 'referer_md5' => $referer_md5 + )); + } else { + $ar[$num][] = $referer_md5; + } } - - // appliquer les increments sur les anciens - // attention on appelle sql_in en mode texte et pas array - // pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849 + + // appliquer les increments sur les anciens + // attention on appelle sql_in en mode texte et pas array + // pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849 foreach ($ar as $num => $liste) { - sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), sql_in('referer_md5',join(', ', $liste))); + sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), + sql_in('referer_md5', join(', ', $liste))); } } - + // 4. Les referers d'articles if ($referers_a[$date]) { $ar = array(); $insert = array(); // s'assurer d'un slot pour chacun - foreach ($referers_a[$date] as $id_article => $referers) + foreach ($referers_a[$date] as $id_article => $referers) { foreach ($referers as $referer => $num) { $referer_md5 = sql_hex(substr(md5($referer), 0, 15)); $prim = "(id_article=$id_article AND referer_md5=$referer_md5)"; - if (!sql_countsel('spip_referers_articles', $prim)) + if (!sql_countsel('spip_referers_articles', $prim)) { sql_insertq('spip_referers_articles', - array('visites' => $num, - 'id_article' => $id_article, - 'referer' => $referer, - 'referer_md5' => $referer_md5)); - else $ar[$num][] = $prim; + array( + 'visites' => $num, + 'id_article' => $id_article, + 'referer' => $referer, + 'referer_md5' => $referer_md5 + )); + } else { + $ar[$num][] = $prim; + } } + } // ajouter les visites foreach ($ar as $num => $liste) { sql_update('spip_referers_articles', array('visites' => "visites+$num"), join(" OR ", $liste)); @@ -240,10 +274,12 @@ function calculer_visites($t) { } } } + } // S'il reste des fichiers a manger, le signaler pour reexecution rapide - if ($compteur==0) { + if ($compteur == 0) { spip_log("il reste des visites a traiter..."); + return -$t; } } @@ -251,40 +287,45 @@ function calculer_visites($t) { /** * Nettoyer les IPs des flooders 24H apres leur dernier passage */ -function visites_nettoyer_flood(){ - if (is_dir($dir=_DIR_TMP.'flood/')){ +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 + if (!defined('_IP_FLOOD_TTL')) { + define('_IP_FLOOD_TTL', 24*3600); + } // 24H par defaut $options = array( - 'mtime' => $_SERVER['REQUEST_TIME'] - _IP_FLOOD_TTL, + 'mtime' => $_SERVER['REQUEST_TIME']-_IP_FLOOD_TTL, ); - purger_repertoire($dir,$options); + 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); // Si ce n'est pas fini on redonne la meme date au fichier .lock // pour etre prioritaire lors du cron suivant - if ($encore) - return (0 - $t); + if ($encore) { + return (0-$t); + } // nettoyer les IP des floodeurs quand on a fini de compter les stats visites_nettoyer_flood(); return 1; } + ?> diff --git a/inc/referenceurs.php b/inc/referenceurs.php index d9497e8..158f686 100644 --- a/inc/referenceurs.php +++ b/inc/referenceurs.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Recuperer la liste des moteurs de recherche depuis un fichier txt @@ -21,25 +23,29 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * * @return array */ -function stats_load_engines(){ +function stats_load_engines() { $arr_engines = Array(); lire_fichier(find_in_path('engines-list.txt'), $moteurs); - foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne){ + foreach (array_filter(preg_split("/([\r\n]|#.*)+/", $moteurs)) as $ligne) { $ligne = trim($ligne); - if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)){ + if (preg_match(',^\[([^][]*)\]$,S', $ligne, $regs)) { $moteur = $regs[1]; $query = ''; - } else if (preg_match(',=$,', $ligne, $regs)) - $query = $ligne; - else - $arr_engines[] = array($moteur, $query, $ligne); + } else { + if (preg_match(',=$,', $ligne, $regs)) { + $query = $ligne; + } else { + $arr_engines[] = array($moteur, $query, $ligne); + } + } } + return $arr_engines; } /** * Retrouver les mots cles de recherche dans une url de referer - * + * * Adaptees du code des "Visiteurs", * par Jean-Paul Dezelus (http://www.phpinfo.net/applis/visiteurs/) * @@ -48,11 +54,11 @@ function stats_load_engines(){ * @param string $kw_referer * @return array */ -function stats_show_keywords($kw_referer){ +function stats_show_keywords($kw_referer) { static $arr_engines = ''; static $url_site; - if (!is_array($arr_engines)){ + if (!is_array($arr_engines)) { // Charger les moteurs de recherche $arr_engines = stats_load_engines(); @@ -61,14 +67,14 @@ function stats_show_keywords($kw_referer){ $url_site = preg_replace(",^((https?|ftp):?/?/?)?(www\.)?,", "", strtolower($url_site)); } - if ($url = @parse_url($kw_referer)){ + if ($url = @parse_url($kw_referer)) { $query = isset($url['query']) ? $url['query'] : ""; $host = strtolower($url['host']); $path = $url['path']; $scheme = $url['scheme']; - } - else + } else { $scheme = $query = $host = $path = ''; + } // construire un array des variables directement depuis la query-string parse_str($query, $Tquery); @@ -76,29 +82,29 @@ function stats_show_keywords($kw_referer){ $keywords = ''; $found = false; - if (!empty($url_site)){ - if (strpos('-'.$kw_referer, $url_site)!==false){ - if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs)) + if (!empty($url_site)) { + if (strpos('-' . $kw_referer, $url_site) !== false) { + if (preg_match(",(s|search|r|recherche)=([^&]+),i", $kw_referer, $regs)) { $keywords = urldecode($regs[2]); - else + } else { return array('host' => ''); - } - else { - for ($cnt = 0; $cnt0){ - if (preg_match(",".$arr_engines[$cnt][1]."([^\&]*),", $query, $vals)){ + if (!strlen($keywords) > 0) { + if (preg_match("," . $arr_engines[$cnt][1] . "([^\&]*),", $query, $vals)) { $keywords = urldecode($vals[2]); } } @@ -106,12 +112,14 @@ function stats_show_keywords($kw_referer){ $keywords = ""; } - if (($kw_referer_host=="Google") - || ($kw_referer_host=="AOL" && strpos($query, 'enc=iso')===false) - || ($kw_referer_host=="MSN") - ){ + if (($kw_referer_host == "Google") + || ($kw_referer_host == "AOL" && strpos($query, 'enc=iso') === false) + || ($kw_referer_host == "MSN") + ) { include_spip('inc/charsets'); - if (!isset($ie) OR !$cset = $ie) $cset = 'utf-8'; + if (!isset($ie) OR !$cset = $ie) { + $cset = 'utf-8'; + } $keywords = importer_charset($keywords, $cset); } $buffer["hostname"] = $kw_referer_host; @@ -122,14 +130,15 @@ function stats_show_keywords($kw_referer){ $buffer["host"] = $host; $buffer["scheme"] = $scheme; - if (!isset($buffer["hostname"]) OR !$buffer["hostname"]) + if (!isset($buffer["hostname"]) OR !$buffer["hostname"]) { $buffer["hostname"] = $host; + } $buffer["path"] = substr($path, 1, strlen($path)); $buffer["query"] = $query; - if ($keywords!=''){ - if (strlen($keywords)>150){ + if ($keywords != '') { + if (strlen($keywords) > 150) { $keywords = spip_substr($keywords, 0, 148); // supprimer l'eventuelle entite finale mal coupee $keywords = preg_replace('/&#?[a-z0-9]*$/', '', $keywords); @@ -149,19 +158,25 @@ function stats_show_keywords($kw_referer){ * @param string $serveur * @return string */ -function referes($referermd5, $serveur = ''){ - $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); +function referes($referermd5, $serveur = '') { + $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); - foreach ($retarts as $k => $rowart){ + foreach ($retarts as $k => $rowart) { $titre = typo($rowart['titre']); - $url = generer_url_entite($rowart['id_article'], 'article', '', '', TRUE); + $url = generer_url_entite($rowart['id_article'], 'article', '', '', true); $retarts[$k] = "$titre"; } - if (count($retarts)>1) - return '→ '.join(',
→ ', $retarts); - if (count($retarts)==1) - return '→ '.array_shift($retarts); + if (count($retarts) > 1) { + return '→ ' . join(',
→ ', $retarts); + } + if (count($retarts) == 1) { + return '→ ' . array_shift($retarts); + } + return ''; } diff --git a/inc/statistiques.php b/inc/statistiques.php index bcd5a0f..3a2d244 100644 --- a/inc/statistiques.php +++ b/inc/statistiques.php @@ -10,10 +10,13 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Calculer la moyenne glissante sur un nombre d'echantillons donnes + * * @param int|bool $valeur * @param int $glisse * @return float @@ -23,16 +26,18 @@ function moyenne_glissante($valeur = false, $glisse = 0) { // pas d'argument, raz de la moyenne if ($valeur === false) { $v = array(); + return 0; } // argument, on l'ajoute au tableau... // surplus, on enleve... $v[] = $valeur; - if (count($v) > $glisse) + if (count($v) > $glisse) { array_shift($v); + } - return round(statistiques_moyenne($v),2); + return round(statistiques_moyenne($v), 2); } /** @@ -43,26 +48,35 @@ function moyenne_glissante($valeur = false, $glisse = 0) { * @param array $tab * @return float */ -function statistiques_moyenne($tab){ - if (!$tab) return 0; +function statistiques_moyenne($tab) { + if (!$tab) { + return 0; + } $moyenne = 0; - foreach($tab as $v) $moyenne += $v; - return $moyenne / count($tab); + foreach ($tab as $v) { + $moyenne += $v; + } + + return $moyenne/count($tab); } /** * Construire un tableau par popularite * classemnt => id_truc + * * @param string $type * @param string $serveur * @return array */ -function classement_populaires($type, $serveur = ''){ +function classement_populaires($type, $serveur = '') { static $classement = array(); - if (isset($classement[$type])) + if (isset($classement[$type])) { return $classement[$type]; - $classement[$type] = sql_allfetsel(id_table_objet($type, $serveur), table_objet_sql($type, $serveur), "statut='publie' AND popularite > 0", "", "popularite DESC",'','',$serveur); - $classement[$type] = array_map('reset',$classement[$type]); + } + $classement[$type] = sql_allfetsel(id_table_objet($type, $serveur), table_objet_sql($type, $serveur), + "statut='publie' AND popularite > 0", "", "popularite DESC", '', '', $serveur); + $classement[$type] = array_map('reset', $classement[$type]); + return $classement[$type]; } diff --git a/inc/stats_referers_to_array.php b/inc/stats_referers_to_array.php index 9f60f3a..5580cd8 100644 --- a/inc/stats_referers_to_array.php +++ b/inc/stats_referers_to_array.php @@ -11,7 +11,9 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/statistiques'); // moyenne glissante sur 30 jours @@ -27,81 +29,89 @@ function inc_stats_referers_to_array_dist($limit, $jour, $id_article, $options = $where = array(); $serveur = ''; - if (in_array($jour,array('jour','veille'))){ + if (in_array($jour, array('jour', 'veille'))) { $visites .= "_$jour"; $where[] = "$visites>0"; } //$res = $referenceurs (0, "SUM(visites_$jour)", 'spip_referers', "visites_$jour>0", "referer", $limit); if ($id_article) { - $table = "spip_referers_articles"; - $where[] = "id_article=".intval($id_article); + $table = "spip_referers_articles"; + $where[] = "id_article=" . intval($id_article); } - $where = implode(" AND ",$where); - $limit = $limit?"0,".intval($limit):''; + $where = implode(" AND ", $where); + $limit = $limit ? "0," . intval($limit) : ''; - $result = sql_select("referer_md5, referer, $visites AS vis", $table, $where, '', "maj DESC", $limit,'',$serveur); + $result = sql_select("referer_md5, referer, $visites AS vis", $table, $where, '', "maj DESC", $limit, '', $serveur); $referers = array(); $trivisites = array(); // pour le tri - while ($row = sql_fetch($result,$serveur)) { + while ($row = sql_fetch($result, $serveur)) { $referer = interdire_scripts($row['referer']); $buff = stats_show_keywords($referer, $referer); if ($buff["host"]) { $refhost = $buff["hostname"]; $visites = $row['vis']; - $host = $buff["scheme"]."://".$buff["host"]; - + $host = $buff["scheme"] . "://" . $buff["host"]; + $referers[$refhost]['referer_md5'] = $row['referer_md5']; - if (!isset($referers[$refhost]['liens'][$referer])) + if (!isset($referers[$refhost]['liens'][$referer])) { $referers[$refhost]['liens'][$referer] = 0; - if (!isset($referers[$refhost]['hosts'][$host])) + } + if (!isset($referers[$refhost]['hosts'][$host])) { $referers[$refhost]['hosts'][$host] = 0; + } - if (!isset($referers[$refhost]['visites'])) + if (!isset($referers[$refhost]['visites'])) { $referers[$refhost]['visites'] = 0; - if (!isset($referers[$refhost]['visites_racine'])) + } + if (!isset($referers[$refhost]['visites_racine'])) { $referers[$refhost]['visites_racine'] = 0; - if (!isset($referers[$refhost]['referers'])) + } + if (!isset($referers[$refhost]['referers'])) { $referers[$refhost]['referers'] = array(); + } $referers[$refhost]['hosts'][$host]++; - $referers[$refhost]['liens'][$referer]++ ; + $referers[$refhost]['liens'][$referer]++; $referers[$refhost]['visites'] += $visites; $trivisites[$refhost] = $referers[$refhost]['visites']; $tmp = ""; $set = array( - 'referer'=>$referer, - 'visites'=>$visites, - 'referes'=>$id_article?'':referes($row['referer_md5']) + 'referer' => $referer, + 'visites' => $visites, + 'referes' => $id_article ? '' : referes($row['referer_md5']) ); if (isset($buff["keywords"]) - AND $c = $buff["keywords"]) { + AND $c = $buff["keywords"] + ) { if (!isset($referers[$refhost]['keywords'][$c])) { $referers[$refhost]['keywords'][$c] = true; $set['keywords'] = $c; } - } - else { + } else { $tmp = $buff["path"]; - if ($buff["query"]) - $tmp .= "?".$buff['query']; - if (strlen($tmp)) + if ($buff["query"]) { + $tmp .= "?" . $buff['query']; + } + if (strlen($tmp)) { $set['path'] = "/$tmp"; + } } - if (isset($set['path']) OR isset($set['keywords'])) + if (isset($set['path']) OR isset($set['keywords'])) { $referers[$refhost]['referers'][] = $set; - else + } else { $referers[$refhost]['visites_racine'] += $visites; + } } } // trier les liens pour trouver le principal - foreach($referers as $k=>$r){ + foreach ($referers as $k => $r) { arsort($referers[$k]['liens']); $referers[$k]['liens'] = array_keys($referers[$k]['liens']); arsort($referers[$k]['hosts']); @@ -109,10 +119,10 @@ function inc_stats_referers_to_array_dist($limit, $jour, $id_article, $options = $referers[$k]['url'] = reset($referers[$k]['hosts']); } - if (count($trivisites)){ - array_multisort($trivisites, SORT_DESC,$referers); + if (count($trivisites)) { + array_multisort($trivisites, SORT_DESC, $referers); } - + return $referers; } diff --git a/inc/stats_visites_to_array.php b/inc/stats_visites_to_array.php index b7a8eee..5af7c25 100644 --- a/inc/stats_visites_to_array.php +++ b/inc/stats_visites_to_array.php @@ -11,7 +11,9 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/statistiques'); // moyenne glissante sur 30 jours @@ -22,77 +24,81 @@ define('MOYENNE_GLISSANTE_MOIS', 12); function inc_stats_visites_to_array_dist($unite, $duree, $id_article, $options = array()) { $now = time(); - if (!in_array($unite,array('jour','mois'))) + if (!in_array($unite, array('jour', 'mois'))) { $unite = 'jour'; + } $serveur = ''; $table = "spip_visites"; $order = "date"; $where = array(); - if ($duree) - $where[] = sql_date_proche($order,-$duree,'day',$serveur); + if ($duree) { + $where[] = sql_date_proche($order, -$duree, 'day', $serveur); + } if ($id_article) { - $table = "spip_visites_articles"; - $where[] = "id_article=".intval($id_article); + $table = "spip_visites_articles"; + $where[] = "id_article=" . intval($id_article); } - $where = implode(" AND ",$where); - $format = ($unite=='jour'?'%Y-%m-%d':'%Y-%m-01'); + $where = implode(" AND ", $where); + $format = ($unite == 'jour' ? '%Y-%m-%d' : '%Y-%m-01'); - $res = sql_select("SUM(visites) AS v, DATE_FORMAT($order,'$format') AS d", $table, $where, "d", "d", "",'',$serveur); + $res = sql_select("SUM(visites) AS v, DATE_FORMAT($order,'$format') AS d", $table, $where, "d", "d", "", '', + $serveur); - $format = str_replace('%','',$format); - $periode = ($unite=='jour'?24*3600:365*24*3600/12); - $step = intval(round($periode*1.1,0)); - $glisse = constant('MOYENNE_GLISSANTE_'.strtoupper($unite)); + $format = str_replace('%', '', $format); + $periode = ($unite == 'jour' ? 24*3600 : 365*24*3600/12); + $step = intval(round($periode*1.1, 0)); + $glisse = constant('MOYENNE_GLISSANTE_' . strtoupper($unite)); moyenne_glissante(); $data = array(); - $r = sql_fetch($res,$serveur); - if (!$r){ - $r = array('d'=>date($format,$now),'v'=>0); + $r = sql_fetch($res, $serveur); + if (!$r) { + $r = array('d' => date($format, $now), 'v' => 0); } do { - $data[$r['d']] = array('visites'=>$r['v'],'moyenne'=>moyenne_glissante($r['v'], $glisse)); + $data[$r['d']] = array('visites' => $r['v'], 'moyenne' => moyenne_glissante($r['v'], $glisse)); $last = $r['d']; // donnee suivante - $r = sql_fetch($res,$serveur); + $r = sql_fetch($res, $serveur); // si la derniere n'est pas la date courante, l'ajouter - if (!$r AND $last!=date($format,$now)) - $r = array('d'=>date($format,$now),'v'=>0); + if (!$r AND $last != date($format, $now)) { + $r = array('d' => date($format, $now), 'v' => 0); + } // completer les trous manquants si besoin - if ($r){ + if ($r) { $next = strtotime($last); $current = strtotime($r['d']); - while (($next+=$step)<$current AND $d=date($format,$next)){ - if (!isset($data[$d])) - $data[$d] = array('visites'=>0,'moyenne'=>moyenne_glissante(0, $glisse)); + while (($next += $step) < $current AND $d = date($format, $next)) { + if (!isset($data[$d])) { + $data[$d] = array('visites' => 0, 'moyenne' => moyenne_glissante(0, $glisse)); + } $last = $d; $next = strtotime($last); } } - } - while ($r); + } while ($r); // projection pour la derniere barre : // mesure courante // + moyenne au pro rata du temps qui reste $moyenne = end($data); $moyenne = prev($data); - $moyenne = ($moyenne AND isset($moyenne['moyenne']))?$moyenne['moyenne']:0; + $moyenne = ($moyenne AND isset($moyenne['moyenne'])) ? $moyenne['moyenne'] : 0; $data[$last]['moyenne'] = $moyenne; // temps restant - $remaining = strtotime(date($format,strtotime(date($format,$now))+$step))-$now; + $remaining = strtotime(date($format, strtotime(date($format, $now))+$step))-$now; $prorata = $remaining/$periode; // projection - $data[$last]['prevision'] = $data[$last]['visites'] + intval(round($moyenne*$prorata)); + $data[$last]['prevision'] = $data[$last]['visites']+intval(round($moyenne*$prorata)); - return $data; + return $data; } diff --git a/prive/squelettes/contenu/stats_lang_fonctions.php b/prive/squelettes/contenu/stats_lang_fonctions.php index ea7fda5..fc38958 100644 --- a/prive/squelettes/contenu/stats_lang_fonctions.php +++ b/prive/squelettes/contenu/stats_lang_fonctions.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} include_spip('inc/presentation'); @@ -34,50 +36,53 @@ function affiche_stats_lang($critere) { $total_visites = 1; } - $result = sql_select("lang, SUM(".$critere.") AS cnt", "spip_articles", "statut='publie' ", "lang"); - + $result = sql_select("lang, SUM(" . $critere . ") AS cnt", "spip_articles", "statut='publie' ", "lang"); + $out .= "\n"; $ifond = 1; - + $visites_abs = 0; while ($row = sql_fetch($result)) { $lang = $row['lang']; if ($row['cnt']) { - $visites = round($row['cnt'] / $total_visites * $taille); - $pourcent = round($row['cnt'] / $total_visites * 100); + $visites = round($row['cnt']/$total_visites*$taille); + $pourcent = round($row['cnt']/$total_visites*100); } if ($visites > 0) { - if ($ifond==0){ - $ifond=1; - $couleur="white"; - } - else{ - $ifond=0; - $couleur="eeeeee"; - } - - $out .= "\n"; - $dir=lang_dir($lang,'',' dir="rtl"'); - $out .= ""; - - $out .= ""; - $out .= ""; - $visites_abs += $visites; + if ($ifond == 0) { + $ifond = 1; + $couleur = "white"; + } else { + $ifond = 0; + $couleur = "eeeeee"; + } + + $out .= "\n"; + $dir = lang_dir($lang, '', ' dir="rtl"'); + $out .= ""; + + $out .= ""; + $out .= ""; + $visites_abs += $visites; } } $out .= "

$pourcent%".traduire_nom_langue($lang)."

"; - $out .= "\n"; - $out .= "\n
"; - if ($visites_abs > 0) - $out .= " "; - if ($visites>0) - $out .= " "; - $out .= "
\n"; - - $out .= "

$pourcent%" . traduire_nom_langue($lang) . "

"; + $out .= "\n"; + $out .= "\n
"; + if ($visites_abs > 0) { + $out .= " "; + } + if ($visites > 0) { + $out .= " "; + } + $out .= "
\n"; + + $out .= "
\n"; + return $out; } + ?> diff --git a/prive/squelettes/contenu/stats_referers_fonctions.php b/prive/squelettes/contenu/stats_referers_fonctions.php index bdca3a8..d942a93 100644 --- a/prive/squelettes/contenu/stats_referers_fonctions.php +++ b/prive/squelettes/contenu/stats_referers_fonctions.php @@ -1,6 +1,8 @@ 0 OR $nombre_rub[$id_rubrique]>0){ - $largeur_branche = floor(($nombre_branche[$id_rubrique] - $nombre_rub[$id_rubrique]) * $taille / $total_site); - $largeur_rub = floor($nombre_rub[$id_rubrique] * $taille / $total_site); - - if ($largeur_branche+$largeur_rub>0){ - - if ($niveau == 0) { - $couleur="#cccccc"; - } + $descriptif = attribut_html(couper(typo($row['descriptif']), 80)); - else if ($niveau == 1) { - $couleur="#eeeeee"; - } - else { - $couleur="white"; + if ($nombre_branche[$id_rubrique] > 0 OR $nombre_rub[$id_rubrique] > 0) { + $largeur_branche = floor(($nombre_branche[$id_rubrique]-$nombre_rub[$id_rubrique])*$taille/$total_site); + $largeur_rub = floor($nombre_rub[$id_rubrique]*$taille/$total_site); + + if ($largeur_branche+$largeur_rub > 0) { + + if ($niveau == 0) { + $couleur = "#cccccc"; + } else { + if ($niveau == 1) { + $couleur = "#eeeeee"; + } else { + $couleur = "white"; + } } $out .= ""; $out .= "\n"; - $out .= "\n"; - + // pourcentage de visites dans la branche par rapport au total du site $pourcent = round($nombre_branche[$id_rubrique]/$total_site*1000)/10; $out .= "\n"; - - $out .= "\n
"; + $out .= "\n"; + - - if ( $largeur_branche > 2) - $out .= bouton_block_depliable("$titre","incertain", "stats$id_rubrique"); - else + if ($largeur_branche > 2) { + $out .= bouton_block_depliable("$titre", "incertain", + "stats$id_rubrique"); + } else { $out .= "
" - . "$titre" + . "$titre" . "
"; + } $out .= "
$pourcent%"; - - - $out .= "\n"; + + $out .= "\n
"; + + + $out .= "\n"; $out .= "\n"; - if ($gauche > 0) $out .= ""; + if ($gauche > 0) { + $out .= ""; + } $out .= "\n
"; $out .= "
"; - if ($visites_abs > 0) $out .= " "; - if ($largeur_branche>0) $out .= " "; - if ($largeur_rub>0) $out .= " "; + if ($visites_abs > 0) { + $out .= " "; + } + if ($largeur_branche > 0) { + $out .= " "; + } + if ($largeur_rub > 0) { + $out .= " "; + } $out .= "
"; $out .= "
\n"; $out .= "
"; - } + } } - + if (isset($largeur_branche) && ($largeur_branche > 0)) { $niveau++; - $out .= debut_block_depliable(false,"stats$id_rubrique"); - $out .= enfants_aff($id_rubrique,$largeur_branche, $taille, $critere, $visites_abs+$gauche); + $out .= debut_block_depliable(false, "stats$id_rubrique"); + $out .= enfants_aff($id_rubrique, $largeur_branche, $taille, $critere, $visites_abs+$gauche); $out .= fin_block(); $niveau--; } - $visites_abs = $visites_abs + round($nombre_branche[$id_rubrique]/$total_site*$taille); + $visites_abs = $visites_abs+round($nombre_branche[$id_rubrique]/$total_site*$taille); } + return $out; } diff --git a/prive/squelettes/inclure/stats-visites-data_fonctions.php b/prive/squelettes/inclure/stats-visites-data_fonctions.php index 3d9ffb0..0ac1967 100644 --- a/prive/squelettes/inclure/stats-visites-data_fonctions.php +++ b/prive/squelettes/inclure/stats-visites-data_fonctions.php @@ -1,30 +1,35 @@ 1) { - $inc = ceil($largeur_abs / 5); - $duree_plus = round(420 / ($largeur_abs - $inc)); - $duree_moins = round(420 / ($largeur_abs + $inc)); + $inc = ceil($largeur_abs/5); + $duree_plus = round(420/($largeur_abs-$inc)); + $duree_moins = round(420/($largeur_abs+$inc)); } if ($largeur_abs == 1) { @@ -33,13 +38,15 @@ function duree_zoom($duree, $sens = 'plus'){ } if ($largeur_abs < 1) { - $duree_plus = round(420 * ((1/$largeur_abs) + 1)); - $duree_moins = round(420 * ((1/$largeur_abs) - 1)); + $duree_plus = round(420*((1/$largeur_abs)+1)); + $duree_moins = round(420*((1/$largeur_abs)-1)); } - return ($sens=='plus'?$duree_moins:$duree_plus); + + return ($sens == 'plus' ? $duree_moins : $duree_plus); } -function stats_total($serveur = ''){ - $row = sql_fetsel("SUM(visites) AS total_absolu", "spip_visites",'','','','','',$serveur); +function stats_total($serveur = '') { + $row = sql_fetsel("SUM(visites) AS total_absolu", "spip_visites", '', '', '', '', '', $serveur); + return $row ? $row['total_absolu'] : 0; } \ No newline at end of file diff --git a/prive/squelettes/inclure/stats-visites-jours_fonctions.php b/prive/squelettes/inclure/stats-visites-jours_fonctions.php index 3830be4..f5a24ac 100644 --- a/prive/squelettes/inclure/stats-visites-jours_fonctions.php +++ b/prive/squelettes/inclure/stats-visites-jours_fonctions.php @@ -1,6 +1,8 @@ "\''))) return; + if (_IS_BOT OR (isset($referer) AND strpbrk($referer, '<>"\''))) { + return; + } // Ne pas tenir compte des tentatives de spam des forums if ($_SERVER['REQUEST_METHOD'] !== 'GET' - OR (isset($contexte['page']) AND $contexte['page'] == 'forum')) + OR (isset($contexte['page']) AND $contexte['page'] == 'forum') + ) { return; + } // rejet des pages 404 if (isset($GLOBALS['page']['status']) - AND $GLOBALS['page']['status'] == 404) + AND $GLOBALS['page']['status'] == 404 + ) { return; + } // Identification du client $client_id = substr(md5( @@ -68,18 +81,19 @@ function public_stats_dist($contexte = null, $referer = null) { // . $_SERVER['HTTP_ACCEPT'] # HTTP_ACCEPT peut etre present ou non selon que l'on est dans la requete initiale, ou dans les hits associes . (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '') . (isset($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : '') - ), 0,10); + ), 0, 10); // Analyse du referer $log_referer = ''; if (isset($referer)) { $url_site_spip = preg_replace(',/$,', '', preg_replace(',^(https?://)?(www\.)?,i', '', - url_de_base())); - if (!(($url_site_spip<>'') - AND strpos('-'.strtolower($referer), strtolower($url_site_spip)) - AND strpos($referer,"recherche=")===false)) { - $log_referer =$referer; + url_de_base())); + if (!(($url_site_spip <> '') + AND strpos('-' . strtolower($referer), strtolower($url_site_spip)) + AND strpos($referer, "recherche=") === false) + ) { + $log_referer = $referer; } } @@ -90,35 +104,44 @@ function public_stats_dist($contexte = null, $referer = null) { // 1. Chercher s'il existe deja une session pour ce numero IP. $content = array(); $fichier = sous_repertoire(_DIR_TMP, 'visites') . $client_id; - if (lire_fichier($fichier, $content)) + if (lire_fichier($fichier, $content)) { $content = @unserialize($content); + } // 2. Plafonner le nombre de hits pris en compte pour un IP (robots etc.) // et ecrire la session if (count($content) < 200) { // Identification de l'element - if (isset($contexte['id_article'])) + if (isset($contexte['id_article'])) { $log_type = "article"; - else if (isset($contexte['id_breve'])) - $log_type = "breve"; - else if (isset($contexte['id_rubrique'])) - $log_type = "rubrique"; - else - $log_type = ""; - - if ($log_type) + } else { + if (isset($contexte['id_breve'])) { + $log_type = "breve"; + } else { + if (isset($contexte['id_rubrique'])) { + $log_type = "rubrique"; + } else { + $log_type = ""; + } + } + } + + if ($log_type) { $log_type .= "\t" . intval($contexte["id_$log_type"]); - else $log_type = "autre\t0"; + } else { + $log_type = "autre\t0"; + } $log_type .= "\t" . trim($log_referer); - if (isset($content[$log_type])) + if (isset($content[$log_type])) { $content[$log_type]++; - else $content[$log_type] = 1; // bienvenue au club + } else { + $content[$log_type] = 1; + } // bienvenue au club ecrire_fichier($fichier, serialize($content)); - } - else { + } else { $flood = sous_repertoire(_DIR_TMP, 'flood') . $GLOBALS['ip']; @touch($flood); } diff --git a/stats_administrations.php b/stats_administrations.php index 42eaf55..a8f1d9a 100644 --- a/stats_administrations.php +++ b/stats_administrations.php @@ -12,13 +12,15 @@ /** * Fichier gérant l'installation et désinstallation du plugin Statistiques - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Stats\Pipelines -**/ + **/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Installation et mises à jour du plugin @@ -28,24 +30,25 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @param string $version_cible * Version du schéma de données dans ce plugin (déclaré dans paquet.xml) * @return void -**/ -function stats_upgrade($nom_meta_base_version, $version_cible){ + **/ +function stats_upgrade($nom_meta_base_version, $version_cible) { // cas particulier : // si plugin pas installe mais que la table existe // considerer que c'est un upgrade depuis v 1.0.0 // pour gerer l'historique des installations SPIP <=2.1 - if (!isset($GLOBALS['meta'][$nom_meta_base_version])){ - $trouver_table = charger_fonction('trouver_table','base'); + if (!isset($GLOBALS['meta'][$nom_meta_base_version])) { + $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table('spip_visites') - AND isset($desc['exist']) AND $desc['exist']){ - ecrire_meta($nom_meta_base_version,'1.0.0'); + AND isset($desc['exist']) AND $desc['exist'] + ) { + ecrire_meta($nom_meta_base_version, '1.0.0'); } // si pas de table en base, on fera une simple creation de base } $maj = array(); $maj['create'] = array( - array('maj_tables',array('spip_visites','spip_visites_articles','spip_referers','spip_referers_articles')), + array('maj_tables', array('spip_visites', 'spip_visites_articles', 'spip_referers', 'spip_referers_articles')), ); $maj['1.0.0'] = array(); @@ -61,7 +64,7 @@ function stats_upgrade($nom_meta_base_version, $version_cible){ * @param string $nom_meta_base_version * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP * @return void -**/ + **/ function stats_vider_tables($nom_meta_base_version) { sql_drop_table("spip_visites"); sql_drop_table("spip_visites_articles"); @@ -73,4 +76,5 @@ function stats_vider_tables($nom_meta_base_version) { effacer_meta($nom_meta_base_version); } + ?> diff --git a/stats_autoriser.php b/stats_autoriser.php index a30b7bc..53ddc6f 100644 --- a/stats_autoriser.php +++ b/stats_autoriser.php @@ -2,32 +2,35 @@ /** * Déclaration d'autorisations - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Stats\Pipelines -**/ + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Fonction du pipeline autoriser. N'a rien à faire + * * @pipeline autoriser */ -function stats_autoriser(){} +function stats_autoriser() { } /** * Autoriser l'affichage du menu de statistiques * * @uses autoriser_voirstats_dist() * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ -function autoriser_statistiques_menu_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL){ +function autoriser_statistiques_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { return autoriser('voirstats', $type, $id, $qui, $opt); } @@ -36,13 +39,13 @@ function autoriser_statistiques_menu_dist($faire, $type = '', $id = 0, $qui = NU * * @uses autoriser_voirstats_dist() * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ -function autoriser_referers_menu_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL){ +function autoriser_referers_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { return autoriser('voirstats', $type, $id, $qui, $opt); } @@ -55,15 +58,15 @@ function autoriser_referers_menu_dist($faire, $type = '', $id = 0, $qui = NULL, * - d'être administrateur * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_voirstats_dist($faire, $type, $id, $qui, $opt) { return (($GLOBALS['meta']["activer_statistiques"] != 'non') - AND ($qui['statut'] == '0minirezo')); + AND ($qui['statut'] == '0minirezo')); } /** @@ -71,10 +74,10 @@ function autoriser_voirstats_dist($faire, $type, $id, $qui, $opt) { * * @uses autoriser_voirstats_dist() * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_statsvisites_onglet_dist($faire, $type, $id, $qui, $opt) { @@ -86,10 +89,10 @@ function autoriser_statsvisites_onglet_dist($faire, $type, $id, $qui, $opt) { * * @uses autoriser_voirstats_dist() * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_statsrepartition_onglet_dist($faire, $type, $id, $qui, $opt) { @@ -102,17 +105,18 @@ function autoriser_statsrepartition_onglet_dist($faire, $type, $id, $qui, $opt) * * @uses autoriser_voirstats_dist() * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_statslang_onglet_dist($faire, $type, $id, $qui, $opt) { $objets = explode(',', isset($GLOBALS['meta']['multi_objets']) ? $GLOBALS['meta']['multi_objets'] : ''); - return (in_array('spip_articles', $objets) - OR in_array('spip_rubriques', $objets)) - AND autoriser('voirstats', $type, $id, $qui, $opt); + + return (in_array('spip_articles', $objets) + OR in_array('spip_rubriques', $objets)) + AND autoriser('voirstats', $type, $id, $qui, $opt); } /** @@ -120,10 +124,10 @@ function autoriser_statslang_onglet_dist($faire, $type, $id, $qui, $opt) { * * @uses autoriser_voirstats_dist() * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_statsreferers_onglet_dist($faire, $type, $id, $qui, $opt) { diff --git a/stats_ieconfig.php b/stats_ieconfig.php index e1ea918..4a35130 100644 --- a/stats_ieconfig.php +++ b/stats_ieconfig.php @@ -2,13 +2,15 @@ /** * Déclarations des configurations qui peuvent être sauvegardées - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Stats\Pipelines -**/ + **/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Ajoute les metas sauvegardables de Statistiques pour le plugin IEConfig @@ -17,13 +19,14 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * * @param array $table * Déclaration des sauvegardes - * @return array + * @return array * Déclaration des sauvegardes complétées -**/ -function stats_ieconfig_metas($table){ + **/ +function stats_ieconfig_metas($table) { $table['statistiques']['titre'] = _T('statistiques:info_forum_statistiques'); $table['statistiques']['icone'] = 'statistique-16.png'; $table['statistiques']['metas_brutes'] = 'activer_statistiques,activer_captures_referers'; + return $table; } diff --git a/stats_pipelines.php b/stats_pipelines.php index 6dbc0dc..2ee3faf 100644 --- a/stats_pipelines.php +++ b/stats_pipelines.php @@ -2,13 +2,15 @@ /** * Déclarations d'autorisations et utilisations de pipelines - * + * * @plugin Statistiques pour SPIP * @license GNU/GPL * @package SPIP\Stats\Pipelines -**/ + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -24,27 +26,28 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @pipeline affichage_entetes_final * @param array $entetes liste des entêtes de la page * @return array -**/ -function stats_affichage_entetes_final($entetes){ + **/ +function stats_affichage_entetes_final($entetes) { if (isset($GLOBALS['meta']["activer_statistiques"]) and $GLOBALS['meta']["activer_statistiques"] != "non") { $html = preg_match(',^\s*text/html,', $entetes['Content-Type']); // decomptage des visites, on peut forcer a oui ou non avec le header X-Spip-Visites // par defaut on ne compte que les pages en html (ce qui exclue les js,css et flux rss) - $spip_compter_visites = $html?'oui':'non'; - if (isset($entetes['X-Spip-Visites'])){ - $spip_compter_visites = in_array($entetes['X-Spip-Visites'],array('oui','non')) - ?$entetes['X-Spip-Visites'] - :$spip_compter_visites; + $spip_compter_visites = $html ? 'oui' : 'non'; + if (isset($entetes['X-Spip-Visites'])) { + $spip_compter_visites = in_array($entetes['X-Spip-Visites'], array('oui', 'non')) + ? $entetes['X-Spip-Visites'] + : $spip_compter_visites; unset($entetes['X-Spip-Visites']); } // Gestion des statistiques du site public - if ($spip_compter_visites!='non') { + if ($spip_compter_visites != 'non') { $stats = charger_fonction('stats', 'public'); $stats(); } } + return $entetes; } @@ -56,19 +59,21 @@ function stats_affichage_entetes_final($entetes){ * - Ajoute les formulaire de suppression des statistiques dans la maintenance technique * * @pipeline affiche_milieu - * @param array $flux Données du pipeline + * @param array $flux Données du pipeline * @return array Données du pipeline -**/ -function stats_affiche_milieu($flux){ + **/ +function stats_affiche_milieu($flux) { // afficher le formulaire de configuration (activer ou desactiver les statistiques). if ($flux['args']['exec'] == 'configurer_avancees') { - $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_compteur')); + $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer', + array('configurer' => 'configurer_compteur')); } // afficher le formulaire de suppression des visites (configuration > maintenance du site). if ($flux['args']['exec'] == 'admin_tech') { - $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats',array()); + $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats', array()); } + return $flux; } @@ -78,25 +83,26 @@ function stats_affiche_milieu($flux){ * * @uses admin_stats() * @pipeline formulaire_admin - * @param array $flux Données du pipeline + * @param array $flux Données du pipeline * @return array Données du pipeline -**/ + **/ function stats_formulaire_admin($flux) { if ( - isset($flux['args']['contexte']['objet']) - AND $objet = $flux['args']['contexte']['objet'] - AND isset($flux['args']['contexte']['id_objet']) - AND $id_objet = $flux['args']['contexte']['id_objet'] - ) { + isset($flux['args']['contexte']['objet']) + AND $objet = $flux['args']['contexte']['objet'] + AND isset($flux['args']['contexte']['id_objet']) + AND $id_objet = $flux['args']['contexte']['id_objet'] + ) { if ($l = admin_stats($objet, $id_objet, defined('_VAR_PREVIEW') ? _VAR_PREVIEW : '')) { $btn = recuperer_fond('prive/bouton/statistiques', array( 'visites' => $l[0], 'popularite' => $l[1], 'statistiques' => $l[2], )); - $flux['data'] = preg_replace('%()%is', $btn.'$1', $flux['data']); + $flux['data'] = preg_replace('%()%is', $btn . '$1', $flux['data']); } } + return $flux; } @@ -106,29 +112,31 @@ function stats_formulaire_admin($flux) { * @note * Actuellement uniquement valable pour les articles. * - * @param string $objet - * @param int $id_objet + * @param string $objet + * @param int $id_objet * @param string $var_preview * Indique si on est en prévisualisation : pas de statistiques dans ce cas. * @return false|array * - false : pas de statistiques disponibles * - array : Tableau les stats `[visites, popularité, url]` -**/ -function admin_stats($objet, $id_objet, $var_preview = "") -{ - if ($GLOBALS['meta']["activer_statistiques"] != "non" - AND $objet == 'article' - AND !$var_preview - AND autoriser('voirstats') + **/ +function admin_stats($objet, $id_objet, $var_preview = "") { + if ($GLOBALS['meta']["activer_statistiques"] != "non" + AND $objet == 'article' + AND !$var_preview + AND autoriser('voirstats') ) { $row = sql_fetsel("visites, popularite", "spip_articles", "id_article=$id_objet AND statut='publie'"); if ($row) { - return array(intval($row['visites']), - ceil($row['popularite']), - str_replace('&', '&', generer_url_ecrire_statistiques($id_objet))); + return array( + intval($row['visites']), + ceil($row['popularite']), + str_replace('&', '&', generer_url_ecrire_statistiques($id_objet)) + ); } } + return false; } @@ -137,13 +145,12 @@ function admin_stats($objet, $id_objet, $var_preview = "") * * @param int $id_article * @return string URL -**/ + **/ function generer_url_ecrire_statistiques($id_article) { return generer_url_ecrire('stats_visites', "id_article=$id_article"); } - /** * Ajoute le cron de traitement des statistiques et calcul des popularités * @@ -152,14 +159,14 @@ function generer_url_ecrire_statistiques($id_article) { * Tableau `[nom de la tache => intervalle en secondes]` * @return array * Tableau `[nom de la tache => intervalle en secondes]` -**/ -function stats_taches_generales_cron($taches_generales){ + **/ +function stats_taches_generales_cron($taches_generales) { // stats : toutes les 5 minutes on peut vider un panier de visites if (isset($GLOBALS['meta']["activer_statistiques"]) - AND $GLOBALS['meta']["activer_statistiques"] == "oui") - { - $taches_generales['visites'] = 300; + AND $GLOBALS['meta']["activer_statistiques"] == "oui" + ) { + $taches_generales['visites'] = 300; $taches_generales['popularites'] = 7200; # calcul lourd } @@ -175,9 +182,10 @@ function stats_taches_generales_cron($taches_generales){ * @return array * Couples nom de la méta => valeur par défaut */ -function stats_configurer_liste_metas($metas){ - $metas['activer_statistiques']='non'; - $metas['activer_captures_referers']='non'; +function stats_configurer_liste_metas($metas) { + $metas['activer_statistiques'] = 'non'; + $metas['activer_captures_referers'] = 'non'; + return $metas; } @@ -185,22 +193,25 @@ function stats_configurer_liste_metas($metas){ * Afficher le lien vers la page de statistique sur la vue d'un article dans l'espace privé * * @pipeline boite_infos - * @param array $flux Données du pipeline + * @param array $flux Données du pipeline * @return array Données du pipeline */ -function stats_boite_infos($flux){ +function stats_boite_infos($flux) { if ($GLOBALS['meta']["activer_statistiques"] == "oui") { - if ($flux['args']['type']=='article' - AND $id_article=$flux['args']['id'] - AND autoriser('voirstats','article',$id_article)){ - $visites = sql_getfetsel('visites','spip_articles','id_article='.intval($id_article)); - if ($visites>0){ - $icone_horizontale=chercher_filtre('icone_horizontale'); - $flux['data'].=$icone_horizontale(generer_url_ecrire("stats_visites","id_article=$id_article"),_T('statistiques:icone_evolution_visites', array('visites' => $visites)),"statistique-24.png"); + if ($flux['args']['type'] == 'article' + AND $id_article = $flux['args']['id'] + AND autoriser('voirstats', 'article', $id_article) + ) { + $visites = sql_getfetsel('visites', 'spip_articles', 'id_article=' . intval($id_article)); + if ($visites > 0) { + $icone_horizontale = chercher_filtre('icone_horizontale'); + $flux['data'] .= $icone_horizontale(generer_url_ecrire("stats_visites", "id_article=$id_article"), + _T('statistiques:icone_evolution_visites', array('visites' => $visites)), "statistique-24.png"); } } } - return $flux; + + return $flux; } ?>