forked from spip/statistiques

commit
3827ecdb1a
148 changed files with 13618 additions and 0 deletions
@ -0,0 +1,144 @@
|
||||
* text=auto !eol |
||||
action/statistiques_archiver.php -text |
||||
base/delete_referers.php -text |
||||
base/delete_stats.php -text |
||||
base/stats.php -text |
||||
/engines-list.txt -text |
||||
exec/base_delete_referers.php -text |
||||
exec/base_delete_stats.php -text |
||||
formulaires/configurer_compteur.html -text |
||||
formulaires/configurer_compteur.php -text |
||||
genie/popularites.php -text |
||||
genie/visites.php -text |
||||
inc/referenceurs.php -text |
||||
inc/statistiques.php -text |
||||
inc/stats_referers_to_array.php -text |
||||
inc/stats_visites_to_array.php -text |
||||
javascript/excanvas.js -text |
||||
javascript/jquery.flot.js -text |
||||
javascript/jquery.flot.selection.js -text |
||||
javascript/jquery.flot.time.js -text |
||||
javascript/jquery.tflot.js -text |
||||
lang/paquet-stats.xml -text |
||||
lang/paquet-stats_de.php -text |
||||
lang/paquet-stats_es.php -text |
||||
lang/paquet-stats_fa.php -text |
||||
lang/paquet-stats_fr_fem.php -text |
||||
lang/paquet-stats_fr_tu.php -text |
||||
lang/paquet-stats_it.php -text |
||||
lang/paquet-stats_lb.php -text |
||||
lang/paquet-stats_nl.php -text |
||||
lang/paquet-stats_oc_ni_mis.php -text |
||||
lang/paquet-stats_pt.php -text |
||||
lang/paquet-stats_pt_br.php -text |
||||
lang/paquet-stats_ru.php -text |
||||
lang/paquet-stats_sk.php -text |
||||
lang/paquet-stats_uk.php -text |
||||
lang/statistiques.xml -text |
||||
lang/statistiques_ar.php -text |
||||
lang/statistiques_ast.php -text |
||||
lang/statistiques_ay.php -text |
||||
lang/statistiques_bg.php -text |
||||
lang/statistiques_br.php -text |
||||
lang/statistiques_bs.php -text |
||||
lang/statistiques_ca.php -text |
||||
lang/statistiques_co.php -text |
||||
lang/statistiques_cpf.php -text |
||||
lang/statistiques_cpf_hat.php -text |
||||
lang/statistiques_cs.php -text |
||||
lang/statistiques_da.php -text |
||||
lang/statistiques_de.php -text |
||||
lang/statistiques_el.php -text |
||||
lang/statistiques_en.php -text |
||||
lang/statistiques_en_hx.php -text |
||||
lang/statistiques_eo.php -text |
||||
lang/statistiques_es.php -text |
||||
lang/statistiques_eu.php -text |
||||
lang/statistiques_fa.php -text |
||||
lang/statistiques_fi.php -text |
||||
lang/statistiques_fon.php -text |
||||
lang/statistiques_fr.php -text |
||||
lang/statistiques_fr_fem.php -text |
||||
lang/statistiques_fr_tu.php -text |
||||
lang/statistiques_gl.php -text |
||||
lang/statistiques_hac.php -text |
||||
lang/statistiques_he.php -text |
||||
lang/statistiques_hu.php -text |
||||
lang/statistiques_id.php -text |
||||
lang/statistiques_is.php -text |
||||
lang/statistiques_it.php -text |
||||
lang/statistiques_it_fem.php -text |
||||
lang/statistiques_ja.php -text |
||||
lang/statistiques_km.php -text |
||||
lang/statistiques_lb.php -text |
||||
lang/statistiques_my.php -text |
||||
lang/statistiques_nb.php -text |
||||
lang/statistiques_nl.php -text |
||||
lang/statistiques_no.php -text |
||||
lang/statistiques_oc_auv.php -text |
||||
lang/statistiques_oc_gsc.php -text |
||||
lang/statistiques_oc_lms.php -text |
||||
lang/statistiques_oc_lnc.php -text |
||||
lang/statistiques_oc_ni.php -text |
||||
lang/statistiques_oc_ni_la.php -text |
||||
lang/statistiques_oc_ni_mis.php -text |
||||
lang/statistiques_oc_prv.php -text |
||||
lang/statistiques_oc_va.php -text |
||||
lang/statistiques_pl.php -text |
||||
lang/statistiques_pt.php -text |
||||
lang/statistiques_pt_br.php -text |
||||
lang/statistiques_ro.php -text |
||||
lang/statistiques_ru.php -text |
||||
lang/statistiques_sk.php -text |
||||
lang/statistiques_sv.php -text |
||||
lang/statistiques_tr.php -text |
||||
lang/statistiques_uk.php -text |
||||
lang/statistiques_vi.php -text |
||||
lang/statistiques_zh.php -text |
||||
prive/bouton/statistiques.html -text |
||||
prive/squelettes/contenu/stats_archiver.html -text |
||||
prive/squelettes/contenu/stats_lang.html -text |
||||
prive/squelettes/contenu/stats_lang_fonctions.php -text |
||||
prive/squelettes/contenu/stats_referers.html -text |
||||
prive/squelettes/contenu/stats_referers_fonctions.php -text |
||||
prive/squelettes/contenu/stats_repartition.html -text |
||||
prive/squelettes/contenu/stats_repartition_fonctions.php -text |
||||
prive/squelettes/contenu/stats_visites.html -text |
||||
prive/squelettes/inclure/admin_effacer_stats.html -text |
||||
prive/squelettes/inclure/admin_stats_archiver.html -text |
||||
prive/squelettes/inclure/stats-visites-data.html -text |
||||
prive/squelettes/inclure/stats-visites-data_fonctions.php -text |
||||
prive/squelettes/inclure/stats-visites-jours.html -text |
||||
prive/squelettes/inclure/stats-visites-jours_fonctions.php -text |
||||
prive/squelettes/inclure/stats-visites-mois.html -text |
||||
prive/squelettes/inclure/stats-visites-mois_fonctions.php -text |
||||
prive/squelettes/inclure/stats-visites-populaires.html -text |
||||
prive/squelettes/navigation/stats_archiver.html -text |
||||
prive/squelettes/top/stats_lang.html -text |
||||
prive/squelettes/top/stats_referers.html -text |
||||
prive/squelettes/top/stats_repartition.html -text |
||||
prive/squelettes/top/stats_visites.html -text |
||||
prive/stats/visites.html -text |
||||
prive/style_prive_plugin_stats.html -text |
||||
prive/themes/spip/images/licence.txt -text |
||||
prive/themes/spip/images/referers-16.png -text |
||||
prive/themes/spip/images/referers-24.png -text |
||||
prive/themes/spip/images/referers-32.png -text |
||||
prive/themes/spip/images/repartition-16.png -text |
||||
prive/themes/spip/images/repartition-24.png -text |
||||
prive/themes/spip/images/repartition-32.png -text |
||||
prive/themes/spip/images/statistique-16.png -text |
||||
prive/themes/spip/images/statistique-24.png -text |
||||
prive/themes/spip/images/statistique-32.png -text |
||||
prive/themes/spip/images/zoomin-16.png -text |
||||
prive/themes/spip/images/zoomin-24.png -text |
||||
prive/themes/spip/images/zoomin-32.png -text |
||||
prive/themes/spip/images/zoomout-16.png -text |
||||
prive/themes/spip/images/zoomout-24.png -text |
||||
prive/themes/spip/images/zoomout-32.png -text |
||||
prive/transmettre/statistiques.html -text |
||||
public/stats.php -text |
||||
/stats_administrations.php -text |
||||
/stats_autoriser.php -text |
||||
/stats_ieconfig.php -text |
||||
/stats_pipelines.php -text |
@ -0,0 +1,381 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
/** |
||||
* Action d'archivage des statistiques |
||||
* |
||||
* @plugin Statistiques pour SPIP |
||||
* @license GNU/GPL |
||||
* @package SPIP\Stats\Actions |
||||
**/ |
||||
|
||||
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 |
||||
**/ |
||||
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 |
||||
**/ |
||||
define('STATISTIQUES_ARCHIVER_PAR_AN', 5); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Archiver ou nettoyer des statistiques |
||||
* |
||||
* @param string $arg |
||||
*/ |
||||
function action_statistiques_archiver_dist($arg = null) { |
||||
if (!$arg) { |
||||
$securiser_action = charger_fonction('securiser_action', 'inc'); |
||||
$arg = $securiser_action(); |
||||
} |
||||
|
||||
if (!autoriser('webmestre')) { |
||||
include_spip('inc/minipres'); |
||||
minipres(); |
||||
} |
||||
|
||||
if (!in_array($arg, array( |
||||
'archiver_visites_articles', |
||||
'nettoyer_visites_articles', |
||||
'nettoyer_referers_articles' |
||||
)) |
||||
) { |
||||
include_spip('inc/minipres'); |
||||
minipres("Argument non compris"); |
||||
} |
||||
|
||||
$func = 'statistiques_' . $arg; |
||||
$func(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Logguer ces informations importantes. |
||||
* |
||||
* @uses spip_log() |
||||
* @param string $texte |
||||
**/ |
||||
function statistiques_archiver_log($texte) { |
||||
spip_log($texte, 'statistiques_archiver.' . _LOG_INFO_IMPORTANTE); |
||||
} |
||||
|
||||
/** |
||||
* Nettoyer des lignes de visites d'articles incorrectes |
||||
* |
||||
* 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)'); |
||||
statistiques_archiver_log("Fin de la suppression : $i lignes supprimées"); |
||||
} |
||||
|
||||
/** |
||||
* Nettoyer des lignes de referers d'articles incorrectes |
||||
* |
||||
* 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)'); |
||||
statistiques_archiver_log("Fin de la suppression : $i lignes supprimées"); |
||||
} |
||||
|
||||
/** |
||||
* Archiver les visites d'articles |
||||
* |
||||
* @note |
||||
* Cela peut prendre beaucoup de temps. |
||||
* |
||||
* 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 |
||||
* peut facilement surcharger la mémoire de php. |
||||
* |
||||
* Du coup, on applique par petit bouts d'abord. |
||||
* |
||||
* @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 |
||||
|
||||
$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) { |
||||
return false; |
||||
} |
||||
|
||||
if ($annee_minimum > $annee_par_mois) { |
||||
statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes pour concaténer par mois !"); |
||||
} else { |
||||
// en plusieurs temps pour éviter trop de mémoire ! |
||||
statistiques_concatener_visites_entre_jours($annee_par_mois, 1, 10); |
||||
statistiques_concatener_visites_entre_jours($annee_par_mois, 11, 20); |
||||
statistiques_concatener_visites_entre_jours($annee_par_mois, 21, 31); |
||||
|
||||
// et on regroupe tout en 1 seul morceau. |
||||
statistiques_concatener_visites_par_mois($annee_par_mois); |
||||
} |
||||
|
||||
if ($annee_minimum > $annee_par_an) { |
||||
statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes pour concaténer par an !"); |
||||
} else { |
||||
// et les vieilles années, on regroupe par an directement. |
||||
statistiques_concatener_visites_par_an($annee_par_an); |
||||
} |
||||
|
||||
statistiques_archiver_log("* Optimiser la table spip_visites_articles après les travaux."); |
||||
sql_optimize('spip_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) |
||||
* |
||||
* @param int $annee |
||||
* On concatène ce qui est avant cette année là. |
||||
* @param int $debut |
||||
* Numéro de jour du début de la concaténation, exemple 1. |
||||
* Le total des visites concaténé sera mis dans ce jour là. |
||||
* @param int $fin |
||||
* 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(); |
||||
if (!$annee_minimum) { |
||||
return false; |
||||
} |
||||
|
||||
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); |
||||
|
||||
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); |
||||
|
||||
foreach ($annees as $a) { |
||||
statistiques_archiver_log("\n- Concaténer les visites de l'année : $a"); |
||||
|
||||
foreach ($mois as $m) { |
||||
$m = str_pad($m, 2, '0', STR_PAD_LEFT); |
||||
statistiques_concatener_visites_entre_periode("$a-$m-$debut", "$a-$m-$fin"); |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Retourne la plus petite année des visites d'articles |
||||
* |
||||
* @return int|bool |
||||
* - int : l'année |
||||
* - false : année non trouvée. |
||||
**/ |
||||
function statistiques_concatener_annee_minimum() { |
||||
static $annee_minimum = null; |
||||
|
||||
// calcul de la plus petite année de statistiques |
||||
if (is_null($annee_minimum)) { |
||||
$annee_minimum = sql_getfetsel('YEAR(MIN(date))', 'spip_visites_articles', '', '', '', '0,1'); |
||||
} |
||||
|
||||
if (!$annee_minimum) { |
||||
statistiques_archiver_log("Erreur de calcul de la plus petite année de statistiques !"); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
return $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(); |
||||
if (!$annee_minimum) { |
||||
return false; |
||||
} |
||||
|
||||
if ($annee_minimum > $annee) { |
||||
statistiques_archiver_log("Il n'y a pas de statistiques assez anciennes !"); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
statistiques_archiver_log("\nConcaténer les visites d'articles (par an)"); |
||||
statistiques_archiver_log("==========================================================="); |
||||
|
||||
$annees = range($annee_minimum, $annee); |
||||
|
||||
foreach ($annees as $a) { |
||||
statistiques_archiver_log("\n- Concaténer les visites de l'année : $a"); |
||||
statistiques_concatener_visites_entre_periode("$a-01-01", "$a-12-31"); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Concatène les statistiques de visites d'articles entre 2 périodes. |
||||
* |
||||
* @param string $date_debut |
||||
* Date de début tel que '2010-01-01' |
||||
* @param string $date_fin |
||||
* Date de fin tel que '2010-12-31' |
||||
* @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) |
||||
$visites = sql_allfetsel('id_article, date, visites', 'spip_visites_articles', array( |
||||
"date >= " . sql_quote($date_debut), |
||||
"date <= " . sql_quote($date_fin), |
||||
)); |
||||
|
||||
if (!$visites) { |
||||
return false; |
||||
} |
||||
|
||||
$liste = $updates = array(); |
||||
$total = 0; |
||||
|
||||
// - Crée un tableau plus simple (id_article => total des visites de la période) (permettant un array_diff_key facile). |
||||
// - Calcule au passage le total des visites de la période (pour le log) |
||||
// - Rempli un autre tableau ($updates) qui indique si cet article doit avoir ses visites concaténées sur cette période, |
||||
// c'est à dire, si il y a une date qui n'est pas le début de période. |
||||
// (évite de nombreuses requêtes si l'on exécute plusieurs fois le script) |
||||
foreach ($visites as $v) { |
||||
$id_article = $v['id_article']; |
||||
if (!isset($liste[$id_article])) { |
||||
$liste[$id_article] = 0; |
||||
} |
||||
$liste[$id_article] += $v['visites']; |
||||
$total += $v['visites']; |
||||
if ($v['date'] != $date_debut) { |
||||
$updates[$id_article] = true; |
||||
} |
||||
} |
||||
|
||||
unset($visites); |
||||
|
||||
$nb_articles = count($liste); |
||||
|
||||
// juste ceux qui nécessitent une mise à jour (date <> de $debut de période) |
||||
$liste = array_intersect_key($liste, $updates); |
||||
|
||||
statistiques_archiver_log("-- du $date_debut au $date_fin : $total visites dans $nb_articles articles"); |
||||
|
||||
if ($liste) { |
||||
|
||||
// formater pour l'insertion dans la base. |
||||
$inserts = array(); |
||||
foreach ($liste as $id_article => $visites) { |
||||
$inserts[] = array( |
||||
'id_article' => $id_article, |
||||
'date' => $date_debut, |
||||
'visites' => $visites, |
||||
); |
||||
} |
||||
|
||||
statistiques_archiver_log("--- concaténer les statistiques de " . count($liste) . " articles"); |
||||
|
||||
// /!\ Attention, |
||||
// Entre ces 2 requêtes, on peut perdre des données (si timeout ou autre) |
||||
// Transaction à faire ? |
||||
|
||||
sql_delete('spip_visites_articles', array( |
||||
"date >= " . sql_quote($date_debut), |
||||
"date <= " . sql_quote($date_fin), |
||||
sql_in('id_article', array_keys($liste)), |
||||
)); |
||||
|
||||
sql_insertq_multi('spip_visites_articles', $inserts); |
||||
} |
||||
|
||||
unset($liste, $inserts); |
||||
|
||||
return true; |
||||
} |
@ -0,0 +1,41 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) { |
||||
return; |
||||
} // securiser |
||||
|
||||
// faudrait plutot recuperer dans inc_serialbase et inc_auxbase |
||||
// mais il faudra prevenir ceux qui affectent les globales qui s'y trouvent |
||||
// Afficher la liste de ce qu'on va detruire et demander confirmation |
||||
// ca vaudrait mieux |
||||
|
||||
/** |
||||
* Supprimer les referers |
||||
* |
||||
* @param strinf $titre |
||||
* @param bool $reprise |
||||
* @return string |
||||
*/ |
||||
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)); |
||||
|
||||
// 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')); |
||||
} |
@ -0,0 +1,42 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) { |
||||
return; |
||||
} // securiser |
||||
|
||||
// faudrait plutot recuperer dans inc_serialbase et inc_auxbase |
||||
// mais il faudra prevenir ceux qui affectent les globales qui s'y trouvent |
||||
// Afficher la liste de ce qu'on va detruire et demander confirmation |
||||
// ca vaudrait mieux |
||||
|
||||
/** |
||||
* Supprimer les stats |
||||
* |
||||
* @param strinf $titre |
||||
* @param bool $reprise |
||||
* @return string |
||||
*/ |
||||
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)); |
||||
|
||||
// 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')); |
||||
} |
@ -0,0 +1,109 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
/** |
||||
* 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; |
||||
} |
||||
|
||||
/** |
||||
* Déclarer les tables de statistiques |
||||
* |
||||
* Déclare les tables : |
||||
* - spip_visites |
||||
* - spip_visites_articles |
||||
* - spip_referers |
||||
* - spip_referers_articles |
||||
* |
||||
* @pipeline declarer_tables_auxiliaires |
||||
* @param array $tables_auxiliaires |
||||
* Description des tables auxiliaires |
||||
* @return array |
||||
* Description complétée des 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" |
||||
); |
||||
|
||||
$spip_visites_key = array( |
||||
"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" |
||||
); |
||||
|
||||
$spip_visites_articles_key = array( |
||||
"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" |
||||
); |
||||
|
||||
$spip_referers_key = array( |
||||
"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" |
||||
); |
||||
|
||||
$spip_referers_articles_key = array( |
||||
"PRIMARY KEY" => "id_article, referer_md5", |
||||
"KEY referer_md5" => "referer_md5" |
||||
); |
||||
|
||||
$tables_auxiliaires['spip_visites'] = array( |
||||
'field' => &$spip_visites, |
||||
'key' => &$spip_visites_key |
||||
); |
||||
$tables_auxiliaires['spip_visites_articles'] = array( |
||||
'field' => &$spip_visites_articles, |
||||
'key' => &$spip_visites_articles_key |
||||
); |
||||
$tables_auxiliaires['spip_referers'] = array( |
||||
'field' => &$spip_referers, |
||||
'key' => &$spip_referers_key |
||||
); |
||||
$tables_auxiliaires['spip_referers_articles'] = array( |
||||
'field' => &$spip_referers_articles, |
||||
'key' => &$spip_referers_articles_key |
||||
); |
||||
|
||||
return $tables_auxiliaires; |
||||
} |
@ -0,0 +1,420 @@
|
||||
# ----------------------------------------------------------------------------- |
||||
# Les Visiteurs - Engines List |
||||
# ----------------------------------------------------------------------------- |
||||
# [Engine Name] |
||||
# word= | word => query | directory |
||||
# host 1 |
||||
# host 2 |
||||
# hots ... |
||||
# ----------------------------------------------------------------------------- |
||||
# sort the list according your visits (see your referrers). |
||||
# ----------------------------------------------------------------------------- |
||||
|
||||
[IP] |
||||
rien= |
||||
[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ |
||||
|
||||
# ----------------------------------------------------------------------------- |
||||
# Services de mail |
||||
# ----------------------------------------------------------------------------- |
||||
|
||||
[(email)] |
||||
rien= |
||||
imp(.*)\.free\.fr |
||||
fc\.kayenta\.com |
||||
courrielweb\.cmaisonneuve\.qc\.ca |
||||
(.*)mail\.(.*)\.([a-z]+)$ |
||||
webmail([0-9]*)\.wanadoo\.fr |
||||
www\.laposte\.net |
||||
mail([0-9]*)\.voila\.fr |
||||
\/(web)?mail\/ |
||||
|
||||
|
||||
# ----------------------------------------------------------------------------- |
||||
# Les moteurs vivants - Engines List |
||||
# ----------------------------------------------------------------------------- |
||||
|
||||
[Accentice] |
||||
q= |
||||
(.*\.|)accentice\.com |
||||
|
||||
[Alice] |
||||
qs= |
||||
\.aliceadsl\. |
||||
|
||||
[alOt] |
||||
q= |
||||
search\.alot\.com |
||||
|
||||
[AOLsearch] |
||||
(query|q)= |
||||
(.*)search\.aol\.(.*) |
||||
|
||||
[AOL France] |
||||
(query|q|r)= |
||||
(.*)recherchet?\.aol\.fr |
||||
|
||||
[Ask] |
||||
(q|queryTerm|searchfor)= |
||||
(.*)\.ask\.com |
||||
|
||||
[Babylon] |
||||
q= |
||||
search\.babylon\.com |
||||
|
||||
[Baidu] |
||||
(wd|d)= |
||||
(.*\.|)baidu\.com |
||||
|
||||
[Bing] |
||||
q= |
||||
(.*)\.bing\.com |
||||
bing\.com |
||||
search\.live\.com |
||||
|
||||
[BlueWin] |
||||
query= |
||||
search\.bluewin\.ch |
||||
|
||||
[Copernic] |
||||
query= |
||||
find\.copernic\.com |
||||
|
||||
[Crawler] |
||||
q= |
||||
(www\.)crawler\.com |
||||
|
||||
[Delicious] |
||||
p= |
||||
delicious\.com |
||||
|
||||
[Delta Search] |
||||
q= |
||||
(.*\.|)delta-search\.com |
||||
|
||||
[EO] |
||||
q= |
||||
www\.eo\.st |
||||
|
||||
[Dogpile] |
||||
query= |
||||
(.*)dogpile\.com |
||||
|
||||
[Dogpile] |
||||
q= |
||||
(.*\.|)dogpile\.co\.uk |
||||
|
||||
[EasySearch] |
||||
s= |
||||
(.*\.|)easysearch\.org\.uk |
||||
|
||||
[Ecosia] |
||||
q= |
||||
(.*\.|)ecosia\.org |
||||
|
||||
[Exalead] |
||||
q= |
||||
www\.exalead\.fr |
||||
www\.exalead\.com |
||||
|
||||
[Excite] |
||||
search= |
||||
www\.excite\.fr |
||||
(.*)\.excite\.co\.jp |
||||
|
||||
[Facemoods] |
||||
s= |
||||
start\.facemoods\.com |
||||
|
||||
[FoxRef] |
||||
key= |
||||
www\.foxref\.org |
||||
|
||||
[francesurf] |
||||
q= |
||||
www\.francesurf\.net |
||||
|
||||
[Francite] |
||||
name= |
||||
recherche\.francite\.com |
||||
|
||||
[Free] |
||||
q= |
||||
search(.*)\.free\.fr |
||||
|
||||
[Freeserve] |
||||
q= |
||||
search\.freeserve\.com |
||||
|
||||
[Google] |
||||
(^q|\&q|as_q|qs)= |
||||
(www\.|ww\.|maps\.)?(google|gogole)\.(.*) |
||||
(web|www).toile.com |
||||
www\.cegetel\.net |
||||
search\.conduit\.com |
||||
search\.sweetim\.com |
||||
chello\.fr |
||||
isearch\.avg\.com |
||||
|
||||
[Govome] |
||||
q= |
||||
(.*\.|)govome\.com |
||||
|
||||
[Globososo] |
||||
q= |
||||
(.*\.|)globososo\.com |
||||
|
||||
[so] |
||||
q= |
||||
www\.so\.com |
||||
|
||||
[HolaSearch] |
||||
q= |
||||
(.*\.|)holasearch\.com |
||||
|
||||
[HelloSearch] |
||||
q= |
||||
(.*\.|)hellosearch\.fr |
||||
|
||||
[HooSeek] |
||||
recherche= |
||||
(www\.)?hooseek\.com |
||||
|
||||
[HotBot] |
||||
query= |
||||
www\.hotbot\.com |
||||
|
||||
[Iadah] |
||||
q= |
||||
(www\.|)iadah\.com |
||||
|
||||
[Incredibar] |
||||
q= |
||||
(search\.)incredibar\.com |
||||
|
||||
[ixquick] |
||||
query= |
||||
ixquick\.com |
||||
|
||||
[LemmeFind] |
||||
t= |
||||
www\.lemmefind\.fr |
||||
|
||||
[Libero.it] |
||||
query= |
||||
arianna\.libero\.it |
||||
|
||||
[Lilo] |
||||
q= |
||||
(.*\.|)(uselilo|search\.lilo)\.org |
||||
|
||||
[Lost] |
||||
x_query= |
||||
(www\.)?lo\.st |
||||
|
||||
[Lycos] |
||||
query= |
||||
search\.lycos\.com |
||||
vachercher\.lycos\.fr |
||||
|
||||
[Metacrawler] |
||||
query= |
||||
metacrawler\.com |
||||
|
||||
[Mirago] |
||||
qry= |
||||
www.mirago\.([a-z]+)$ |
||||
|
||||
[MonGenie] |
||||
Keywords= |
||||
www\.mongenie\.com |
||||
|
||||
[MozBot] |
||||
q= |
||||
www\.mozbot\.([a-z]+)$ |
||||
|
||||
[moteur-recherche.net] |
||||
keyword= |
||||
www\.moteur-recherche\.net |
||||
|
||||
[MSN] |
||||
(q|s)= |
||||
search(.*)\.msn\.([a-z.]+)$ |
||||
leguide(.*)\.msn\.([a-z]+)$ |
||||
(.*)\.msn\.([a-z]+)$ |
||||
search\.ninemsn\.com\.au |
||||
|
||||
[mySearchDial] |
||||
q= |
||||
(.*\.|)mysearchdial\.com |
||||
|
||||
[MyWay] |
||||
searchfor= |
||||
(.*)\.myway\.com |
||||
www\.mywebsearch\.com |
||||
(.*)\.mysearch\.com |
||||
|
||||
[MyWebSearch] |
||||
searchfor= |
||||
search\.mywebsearch\.com |
||||
|
||||
[Naver] |
||||
query= |
||||
search\.naver\.com |
||||
|
||||
[Need2Find] |
||||
searchfor= |
||||
kx\.search\.need2find\.com |
||||
|
||||
[Nomade] |
||||
s= |
||||
(.*)\.nomade\.fr |
||||
(.*)\.nomade\.tiscali\.fr |
||||
(.*)\.nomade\.aliceadsl\.fr |
||||
|
||||
[NovoNeo] |
||||
q= |
||||
www\.novoneo\.com |
||||
|
||||
[Orange, le moteur] |
||||
rdata= |
||||
www\.lemoteur\.fr |
||||
|
||||
[Orange, le moteur] |
||||
kw= |
||||
lemoteur\.orange\.fr |
||||
|
||||
[ParallaxSearch] |
||||
qs= |
||||
(.*\.|)parallaxsearch\.com |
||||
|
||||
[Pesquisa] |
||||
q= |
||||
pesquisa\.sapo\.pt |
||||
|
||||
[Qone8] |
||||
q= |
||||
(.*\.|)qone8\.com |
||||
|
||||
[Qwant] |
||||
q= |
||||
(.*\.|)qwant\.com |
||||
|
||||
[Search-Results] |
||||
q= |
||||
(.*\.|)search-results\.com |
||||
|
||||
[Searchqu] |
||||
q= |
||||
(www\.)searchqu\.com |
||||
|
||||
[SearchYa] |
||||
q= |
||||
(www\.|)searchya\.com |
||||
|
||||
[Seek] |
||||
qry_str= |
||||
\.seek\.fr |
||||
|
||||
[Seznam] |
||||
q= |
||||
(.*\.|)seznam\.cz |
||||
|
||||
[Skeech] |
||||
query= |
||||
skeech\.com |
||||
|
||||
[Sogou] |
||||
query= |
||||
www\.sogou\.com |
||||
|
||||
[Sympatico] |
||||
query= |
||||
search\.sli\.sympatico\.ca |
||||
|
||||
[Trouver] |
||||
q= |
||||
(.*\.|)trouver\.fr |
||||
|
||||
[Vi-View] |
||||
q= |
||||
(.*\.|)vi-view\.com |
||||
|
||||
[Virgilio.it] |
||||
qs= |
||||
search\.virgilio\.it |
||||
|
||||
[Yahoo!] |
||||
p= |
||||
(.*)(m|search|ink|dir|google)\.yahoo\.([a-z]+)$ |
||||
|
||||
[Yandex] |
||||
text= |
||||
(www\.)?yandex\.ru |
||||
|
||||
[Wow] |
||||
q= |
||||
(.*\.|)wow\.com |
||||
|
||||
[Xeoo] |
||||
k= |
||||
(www\.)?xeoo\.com |
||||
|
||||
|
||||
# ----------------------------------------------------------------------------- |
||||
# Les moteurs morts - Engines List |
||||
# ----------------------------------------------------------------------------- |
||||
|
||||
[9online] |
||||
query= |
||||
www\.9online\.fr |
||||
|
||||
[AltaVista] |
||||
q= |
||||
(.*)altavista\.com |
||||
|
||||
[AllTheWeb] |
||||
q= |
||||
www\.alltheweb\.com |
||||
|
||||
[Cegetel] |
||||
q= |
||||
(www\.)?cegetel\.([a-z]+)$ |
||||
|
||||
[Club Internet] |
||||
q= |
||||
recherche\.club-internet\.fr |
||||
|
||||
[dmoz.org] |
||||
rien= |
||||
(.*\.)?dmoz\.org |
||||
|
||||
[Haosou] |
||||
q= |
||||
www\.haosou\.com |
||||
|
||||
[n9uf] |
||||
((K|k)eywords|query)= |
||||
(www\.)?neuf\.fr |
||||
|
||||
[Netscape] |
||||
search= |
||||
search-intl\.netscape\.com |
||||
search\.netscape\.com |
||||
www\.netscape\.fr |
||||
|
||||
[OneBigWorld] |
||||
Keywords= |
||||
fr\.onebigworld\.com |
||||
|
||||
[Overture] |
||||
Keywords= |
||||
www\.overture\.com |
||||
|
||||
[Reacteur.com] |
||||
kw= |
||||
www\.reacteur\.com |
||||
|
||||
[Voila] |
||||
(kw|rdata)= |
||||
(search|moteur)(.*)\.voila\.(fr|com) |
@ -0,0 +1,34 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) { |
||||
return; |
||||
} |
||||
|
||||
|
||||
function exec_base_delete_referers_dist() { |
||||
include_spip('inc/autoriser'); |
||||
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', ''); |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) { |
||||
return; |
||||
} |
||||
|
||||
|
||||
function exec_base_delete_stats_dist() { |
||||
include_spip('inc/autoriser'); |
||||
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', ''); |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,55 @@
|
||||
<div class='formulaire_spip formulaire_configurer formulaire_configurer_compteur' id='formulaire_configurer_compteur'> |
||||
<h3 class='titrem'>[(#CHEMIN_IMAGE{statistique-24.png}|balise_img{'',cadre-icone})]<:statistiques:info_forum_statistiques:> #AIDER{confstat}</h3> |
||||
|
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] |
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] |
||||
<form action="#ENV{action}#formulaire_configurer_compteur" method="post"><div> |
||||
#ACTION_FORMULAIRE |
||||
<div class="editer-groupe"> |
||||
<div class='editer configurer_activer_statistiques[ (#ENV**{erreurs}|table_valeur{activer_statistiques}|oui)erreur]'> |
||||
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{activer_statistiques})</span>] |
||||
<div class='choix'> |
||||
<input class='checkbox' type="checkbox" name="activer_statistiques" value='oui' [checked="(#ENV{activer_statistiques}|=={oui}|?{checked})"] id="activer_statistiques"/> |
||||
<label for="activer_statistiques"><:statistiques:item_gerer_statistiques:></label> |
||||
</div> |
||||
</div> |
||||
<div class='editer configurer_activer_referers[ (#ENV**{erreurs}|table_valeur{activer_referers}|oui)erreur]'> |
||||
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{activer_referers})</span>] |
||||
<div class='choix'> |
||||
<input class='checkbox' type="checkbox" name="activer_referers" value='oui' [checked="(#ENV{activer_referers, oui}|=={oui}|?{checked})"] id="activer_referers"/> |
||||
<label for="activer_referers"><:statistiques:info_referer_oui:></label> |
||||
</div> |
||||
</div> |
||||
<div class='editer configurer_activer_captures_referers[ (#ENV**{erreurs}|table_valeur{activer_captures_referers}|oui)erreur]'> |
||||
<div class='explication'><:statistiques:info_question_vignettes_referer:></div> |
||||
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{activer_captures_referers})</span>] |
||||
<div class='choix'> |
||||
<input class='checkbox' type="checkbox" name="activer_captures_referers" value='oui' [checked="(#ENV{activer_captures_referers}|=={oui}|?{checked})"] id="activer_captures_referers"/> |
||||
<label for="activer_captures_referers"><:statistiques:info_question_vignettes_referer_oui:></label> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<p class='boutons'><input class='submit' type="submit" name="ok" value="<:bouton_enregistrer:>"/></p> |
||||
</div></form> |
||||
|
||||
</div> |
||||
<script type='text/javascript'> |
||||
function actualise_referers(){ |
||||
if (jQuery('#activer_statistiques').prop('checked')) { |
||||
jQuery('#formulaire_configurer_compteur .editer.configurer_activer_captures_referers').show(); |
||||
if (jQuery('#activer_referers').prop('checked')) { |
||||
jQuery('#formulaire_configurer_compteur .editer.configurer_activer_referers').show(); |
||||
} else { |
||||
jQuery('#formulaire_configurer_compteur .editer.configurer_activer_captures_referers').hide(); |
||||
} |
||||
} else { |
||||
jQuery('#formulaire_configurer_compteur .editer.configurer_activer_captures_referers').hide(); |
||||
jQuery('#formulaire_configurer_compteur .editer.configurer_activer_referers').hide(); |
||||
} |
||||
} |
||||
jQuery(function($){ |
||||
$('#activer_statistiques, #activer_referers').on('change', actualise_referers); |
||||
actualise_referers(); |
||||
}); |
||||
</script> |
@ -0,0 +1,47 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) { |
||||
return; |
||||
} |
||||
|
||||
function formulaires_configurer_compteur_charger_dist() { |
||||
|
||||
$valeurs = array(); |
||||
|
||||
$valeurs['activer_statistiques'] = $GLOBALS['meta']['activer_statistiques']; |
||||
$valeurs['activer_referers'] = $GLOBALS['meta']['activer_referers']; |
||||
$valeurs['activer_captures_referers'] = $GLOBALS['meta']['activer_captures_referers']; |
||||
|
||||
return $valeurs; |
||||
|
||||
} |
||||
|
||||
function formulaires_configurer_compteur_verifier_dist() { |
||||
$erreurs = array(); |
||||
|
||||
// les checkbox |
||||
foreach (array('activer_statistiques', 'activer_referers', 'activer_captures_referers') as $champ) { |
||||
if (_request($champ) != 'oui') { |
||||
set_request($champ, 'non'); |
||||
} |
||||
} |
||||
|
||||
return $erreurs; |
||||
} |
||||
|
||||
function formulaires_configurer_compteur_traiter_dist() { |
||||
include_spip('inc/config'); |
||||
appliquer_modifs_config(); |
||||
|
||||
return array('message_ok' => _T('config_info_enregistree')); |
||||
} |
@ -0,0 +1,115 @@
|
||||
<?php |
||||
|
||||
/***************************************************************************\ |
||||
* SPIP, Systeme de publication pour l'internet * |
||||
* * |
||||
* Copyright (c) 2001-2016 * |
||||
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
||||
* * |
||||
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
||||
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
||||
\***************************************************************************/ |
||||
|
||||
/** |
||||
* Gestion du calcul des popularités (cron) |
||||
* |
||||
* @plugin Statistiques pour SPIP |
||||
* @license GNU/GPL |
||||
* @package SPIP\Statistiques\Genie |
||||
**/ |
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) { |
||||
return; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Calcule des coefficients de popularité en fonction de l'intervalle |
||||
* écoulé depuis le précédent calcul |
||||
* |
||||
* Popularite, modele logarithmique |
||||
* |
||||
* @param int $duree Intervalle écoulé depuis le précédent calcul |
||||
* @return array { |
||||
* @type float $a Coefficient d'amortissement |
||||
* @type float $b Constante multiplicative |
||||
* } |
||||
**/ |
||||
function genie_popularite_constantes($duree) { |
||||
// duree de demi-vie d'une visite dans le calcul de la popularite (en jours) |
||||
$demivie = 0.5; |
||||
// periode de reference en jours |
||||
$periode = 1; |
||||
// $a est le coefficient d'amortissement depuis la derniere mesure |
||||
$a = pow(2, -$duree / ($demivie * 24 * 3600)); |
||||
// $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; |
||||
|
||||
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) { |
||||
return 1; |
||||
} |
||||
|
||||
$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'); |
||||
|
||||
// enregistrer les metas... |
||||
$row = sql_fetsel('MAX(popularite) AS max, SUM(popularite) AS tot', "spip_articles"); |
||||
ecrire_meta("popularite_max", $row['max']); |
||||
ecrire_meta("popularite_total", $row['tot']); |
||||
|
||||
|
||||
// Une fois par jour purger les referers du jour ; qui deviennent |
||||
// donc ceux de la veille ; au passage on stocke une date_statistiques |
||||
// dans spip_meta - cela permet au code d'etre "reentrant", ie ce cron |
||||
// peut etre appele par deux bases SPIP ne partageant pas le meme |
||||
// _DIR_TMP, sans tout casser... |
||||
|
||||
$aujourdhui = date("Y-m-d"); |
||||
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) { |
||||
spip_query("UPDATE spip_referers SET visites_veille=visites_jour, visites_jour=0"); |
||||
} 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 |
||||
{ |
||||
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; |
||||
|
||||
} |