Browse Source

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

spip-3.1
cedric@yterium.com 7 years ago
parent
commit
37a6b0a520
  1. 71
      action/statistiques_archiver.php
  2. 17
      base/delete_referers.php
  3. 15
      base/delete_stats.php
  4. 79
      base/stats.php
  5. 18
      exec/base_delete_referers.php
  6. 18
      exec/base_delete_stats.php
  7. 32
      formulaires/configurer_compteur.php
  8. 49
      genie/popularites.php
  9. 205
      genie/visites.php
  10. 103
      inc/referenceurs.php
  11. 36
      inc/statistiques.php
  12. 72
      inc/stats_referers_to_array.php
  13. 66
      inc/stats_visites_to_array.php
  14. 67
      prive/squelettes/contenu/stats_lang_fonctions.php
  15. 16
      prive/squelettes/contenu/stats_referers_fonctions.php
  16. 119
      prive/squelettes/contenu/stats_repartition_fonctions.php
  17. 35
      prive/squelettes/inclure/stats-visites-data_fonctions.php
  18. 4
      prive/squelettes/inclure/stats-visites-jours_fonctions.php
  19. 4
      prive/squelettes/inclure/stats-visites-mois_fonctions.php
  20. 97
      public/stats.php
  21. 26
      stats_administrations.php
  22. 80
      stats_autoriser.php
  23. 15
      stats_ieconfig.php
  24. 123
      stats_pipelines.php

71
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)

17
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'));
}
?>

15
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'));
}
?>

79
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;
}

18
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', '');
}
}
}
?>

18
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', '');
}
}
}
?>

32
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'));
}
?>

49
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;

205
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;
}
?>

103
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; $cnt<sizeof($arr_engines) && !$found; $cnt++)
{
if ($found = preg_match(','.$arr_engines[$cnt][2].',', $host)
OR $found = preg_match(','.$arr_engines[$cnt][2].',', $path)){
}
} else {
for ($cnt = 0; $cnt < sizeof($arr_engines) && !$found; $cnt++) {
if ($found = preg_match(',' . $arr_engines[$cnt][2] . ',', $host)
OR $found = preg_match(',' . $arr_engines[$cnt][2] . ',', $path)
) {
$kw_referer_host = $arr_engines[$cnt][0];
if (strpos($arr_engines[$cnt][1], '=')!==false){
if (strpos($arr_engines[$cnt][1], '=') !== false) {
// Fonctionnement simple: la variable existe dans l'array
$v = str_replace('=', '', $arr_engines[$cnt][1]);
$keywords = isset($Tquery[$v]) ? $Tquery[$v]: "";
$keywords = isset($Tquery[$v]) ? $Tquery[$v] : "";
// Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable
if (!strlen($keywords)>0){
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] = "<a href='$url'><i>$titre</i></a>";
}
if (count($retarts)>1)
return '&rarr; '.join(',<br />&rarr; ', $retarts);
if (count($retarts)==1)
return '&rarr; '.array_shift($retarts);
if (count($retarts) > 1) {
return '&rarr; ' . join(',<br />&rarr; ', $retarts);
}
if (count($retarts) == 1) {
return '&rarr; ' . array_shift($retarts);
}
return '';
}

36
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];
}

72
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;
}

66
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);
<