Browse Source

Ajout d’une fonction aux statistiques pour désactiver les referers. Des fois, on en a pas besoin, et ça prend de la place (beaucoup !) dans les tables SQL.

svn/root/tags/plugins/statistiques/1.0.2 v1.0.2
prigent.yohann@gmail.com 7 years ago
parent
commit
d303ea135d
  1. 36
      formulaires/configurer_compteur.html
  2. 3
      formulaires/configurer_compteur.php
  3. 104
      genie/visites.php
  4. 1
      lang/statistiques_fr.php
  5. 4
      paquet.xml
  6. 2
      prive/squelettes/contenu/stats_referers.html
  7. 3
      prive/squelettes/top/stats_referers.html
  8. 20
      public/stats.php
  9. 4
      stats_administrations.php
  10. 4
      stats_autoriser.php
  11. 1
      stats_pipelines.php

36
formulaires/configurer_compteur.html

@ -5,37 +5,51 @@
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form action="#ENV{action}#formulaire_configurer_compteur" method="post"><div>
[(#ACTION_FORMULAIRE{#ENV{action}})]
<div class="editer-groupe">
<div class='editer configurer_activer_statistiques[ (#ENV**{erreurs}|table_valeur{activer_statistiques}|oui)erreur]'>
<ul>
<li 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_captures_referers[ (#ENV**{erreurs}|table_valeur{activer_captures_referers}|oui)erreur]'>
</li>
<li 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>
</li>
<li 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>
</li>
</div>
</ul>
<p class='boutons'><input class='submit' type="submit" name="ok" value="<:bouton_enregistrer:>"/></p>
</div></form>
</div>
<script type='text/javascript'>
function actualise_capture_referers(){
if (jQuery('#activer_statistiques').prop('checked'))
function actualise_referers(){
if (jQuery('#activer_statistiques').prop('checked')) {
jQuery('#formulaire_configurer_compteur li.configurer_activer_captures_referers').show();
else
if (jQuery('#activer_referers').prop('checked'))
jQuery('#formulaire_configurer_compteur li.configurer_activer_referers').show();
else
jQuery('#formulaire_configurer_compteur li.configurer_activer_captures_referers').hide();
}
else {
jQuery('#formulaire_configurer_compteur li.configurer_activer_captures_referers').hide();
jQuery('#formulaire_configurer_compteur li.configurer_activer_referers').hide();
}
}
jQuery(document).ready(function(){
jQuery('#activer_statistiques').bind('change',actualise_capture_referers);
actualise_capture_referers();
jQuery('#activer_statistiques, #activer_referers').bind('change', actualise_referers);
actualise_referers();
});
</script>

3
formulaires/configurer_compteur.php

@ -19,6 +19,7 @@ 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;
@ -29,7 +30,7 @@ function formulaires_configurer_compteur_verifier_dist() {
$erreurs = array();
// les checkbox
foreach (array('activer_statistiques', 'activer_captures_referers') as $champ) {
foreach (array('activer_statistiques', 'activer_referers', 'activer_captures_referers') as $champ) {
if (_request($champ) != 'oui') {
set_request($champ, 'non');
}

104
genie/visites.php

@ -210,67 +210,69 @@ function calculer_visites($t) {
## Ajouter un JOIN sur le statut de l'article ?
}
}
// 3. Les referers du site
// insertion pour les nouveaux, au tableau des increments sinon
if ($referers[$date]) {
$ar = array();
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('referers');
$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")) {
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;
}
}
// 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)));
}
}
// 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 as $referer => $num) {
if ($GLOBALS['meta']["activer_referers"] == "oui") {
// 3. Les referers du site
// insertion pour les nouveaux, au tableau des increments sinon
if ($referers[$date]) {
$ar = array();
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('referers');
$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));
$prim = "(id_article=$id_article AND referer_md5=$referer_md5)";
if (!sql_countsel('spip_referers_articles', $prim)) {
sql_insertq('spip_referers_articles',
$referer = substr($referer, 0, $n);
if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) {
sql_insertq('spip_referers',
array(
'visites' => $num,
'id_article' => $id_article,
'visites_jour' => $num,
'visites_veille' => $num,
'date' => $date,
'referer' => $referer,
'referer_md5' => $referer_md5
));
} else {
$ar[$num][] = $prim;
$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
foreach ($ar as $num => $liste) {
sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"),
sql_in('referer_md5', join(', ', $liste)));
}
}
// ajouter les visites
foreach ($ar as $num => $liste) {
sql_update('spip_referers_articles', array('visites' => "visites+$num"), join(" OR ", $liste));
## Ajouter un JOIN sur le statut de l'article ?
// 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 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)) {
sql_insertq('spip_referers_articles',
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));
## Ajouter un JOIN sur le statut de l'article ?
}
}
}
}

1
lang/statistiques_fr.php

@ -44,6 +44,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_popularite_3' => 'popularité : @popularite@ ; visites : @visites@',
'info_popularite_5' => 'popularité :',
'info_previsions' => 'prévisions :',
'info_referer_oui' => 'Activer les referers',
'info_question_vignettes_referer' => 'Lorsque vous consultez les statistiques, vous pouvez visualiser des aperçus des sites d’origine des visites',
'info_question_vignettes_referer_oui' => 'Afficher les captures des sites d’origine des visites',
'info_tableaux' => 'Tableaux',

4
paquet.xml

@ -1,11 +1,11 @@
<paquet
prefix="stats"
categorie="statistique"
version="1.0.1"
version="1.0.2"
etat="stable"
compatibilite="[3.1.0;3.1.*]"
logo="prive/themes/spip/images/statistique-32.png"
schema="1.0.0"
schema="1.0.1"
>
<nom>Statistiques</nom>

2
prive/squelettes/contenu/stats_referers.html

@ -1,4 +1,4 @@
[(#AUTORISER{voirstats}|sinon_interdire_acces)]
[(#AUTORISER{voirstats}|et{#CONFIG{activer_referers}|=={oui}}|sinon_interdire_acces)]
<BOUCLE_expose(ARTICLES){id_article}{statut==.*}>
#BOITE_OUVRIR{'','note'}
<a class='annule_filtre ajax' href="[(#SELF|parametre_url{id_article,''})]" title="<:info_tout_afficher|attribut_html:>">[(#CHEMIN_IMAGE{fermer-16.png}|balise_img|inserer_attribut{alt,<:info_tout_afficher:>})]</a>

3
prive/squelettes/top/stats_referers.html

@ -1,2 +1,3 @@
[(#CONFIG{activer_referers, oui}|=={oui}|oui)
#LARGEUR_ECRAN{pleine_largeur}
[(#VAL{statistiques}|barre_onglets{stats_referers})]
[(#VAL{statistiques}|barre_onglets{stats_referers})]]

20
public/stats.php

@ -85,15 +85,17 @@ function public_stats_dist($contexte = null, $referer = null) {
// 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;
if ($GLOBALS['meta']["activer_referers"] == "oui") {
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;
}
}
}

4
stats_administrations.php

@ -51,6 +51,10 @@ function stats_upgrade($nom_meta_base_version, $version_cible) {
array('maj_tables', array('spip_visites', 'spip_visites_articles', 'spip_referers', 'spip_referers_articles')),
);
$maj['1.0.0'] = array();
$maj['1.0.1'] = array(
array('ecrire_meta','activer_referers', 'oui'),
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);

4
stats_autoriser.php

@ -46,7 +46,7 @@ function autoriser_statistiques_menu_dist($faire, $type = '', $id = 0, $qui = nu
* @return bool true s'il a le droit, false sinon
*/
function autoriser_referers_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) {
return autoriser('voirstats', $type, $id, $qui, $opt);
return ($GLOBALS['meta']["activer_referers"] == 'oui') && autoriser('voirstats', $type, $id, $qui, $opt);
}
@ -131,5 +131,5 @@ function autoriser_statslang_onglet_dist($faire, $type, $id, $qui, $opt) {
* @return bool true s'il a le droit, false sinon
*/
function autoriser_statsreferers_onglet_dist($faire, $type, $id, $qui, $opt) {
return autoriser('voirstats', $type, $id, $qui, $opt);
return ($GLOBALS['meta']["activer_referers"] == 'oui') && autoriser('voirstats', $type, $id, $qui, $opt);
}

1
stats_pipelines.php

@ -185,6 +185,7 @@ function stats_taches_generales_cron($taches_generales) {
function stats_configurer_liste_metas($metas) {
$metas['activer_statistiques'] = 'non';
$metas['activer_captures_referers'] = 'non';
$metas['activer_referers']='oui';
return $metas;
}

Loading…
Cancel
Save