<?php
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Déclarations d'autorisations et utilisations de pipelines
+ *
+ * @plugin Statistiques pour SPIP
+ * @license GNU/GPL
+ * @package SPIP\Stats\Pipelines
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
+
-// sur les envois html,
-// compter les visites.
-function stats_affichage_entetes_final($entetes){
- if ($GLOBALS['meta']["activer_statistiques"] != "non") {
+/**
+ * Compter les visites sur les pages HTML
+ *
+ * Uniquement si les statistiques sont activées dans la configuration :
+ * - permet de compter par défaut toutes les pages de type HTML
+ * - sauf si on explicite, pour une page donnée, l'entête
+ * header `X-Spip-Visites` à `oui` ou `non`.
+ * Indiquer `oui` pour forcer le comptage de la page, ou `non` pour au contraire l'éviter
+ *
+ * @uses public_stats_dist() si la page doit être comptée.
+ * @pipeline affichage_entetes_final
+ * @param array $entetes liste des entêtes de la page
+ * @return array
+ **/
+function stats_affichage_entetes_final($entetes) {
+ if (isset($GLOBALS['meta']["activer_statistiques"]) and $GLOBALS['meta']["activer_statistiques"] != "non") {
$html = preg_match(',^\s*text/html,', $entetes['Content-Type']);
// decomptage des visites, on peut forcer a oui ou non avec le header X-Spip-Visites
// par defaut on ne compte que les pages en html (ce qui exclue les js,css et flux rss)
- $spip_compter_visites = $html?'oui':'non';
- if (isset($entetes['X-Spip-Visites'])){
- $spip_compter_visites = in_array($entetes['X-Spip-Visites'],array('oui','non'))
- ?$entetes['X-Spip-Visites']
- :$spip_compter_visites;
+ $spip_compter_visites = $html ? 'oui' : 'non';
+ if (isset($entetes['X-Spip-Visites'])) {
+ $spip_compter_visites = in_array($entetes['X-Spip-Visites'], array('oui', 'non'))
+ ? $entetes['X-Spip-Visites']
+ : $spip_compter_visites;
unset($entetes['X-Spip-Visites']);
}
-
+
// Gestion des statistiques du site public
-
- if ($spip_compter_visites!='non') {
+ if ($spip_compter_visites != 'non') {
$stats = charger_fonction('stats', 'public');
$stats();
}
}
+
return $entetes;
}
-// contenus des pages exec
-function stats_affiche_milieu($flux){
+/**
+ * Compléter des pages de l'espace privé
+ *
+ * - Ajoute les formulaire de configuration des statistiques dans les configurations avancées
+ * - Ajoute les formulaire de suppression des statistiques dans la maintenance technique
+ *
+ * @pipeline affiche_milieu
+ * @param array $flux Données du pipeline
+ * @return array Données du pipeline
+ **/
+function stats_affiche_milieu($flux) {
// afficher le formulaire de configuration (activer ou desactiver les statistiques).
- if ($flux['args']['exec'] == 'configurer_avancees')
- $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_compteur'));
+ if ($flux['args']['exec'] == 'configurer_avancees') {
+ $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',
+ array('configurer' => 'configurer_compteur'));
+ }
-
// afficher le formulaire de suppression des visites (configuration > maintenance du site).
if ($flux['args']['exec'] == 'admin_tech') {
-
- $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats',array());
-
+ $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_stats_archiver', array());
+ $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats', array());
}
+
return $flux;
}
-// les boutons d'administration : ajouter les popularites et visites
+/**
+ * Ajoute les boutons d'administration indiquant la popularité et les visites d'un objet
+ *
+ * @uses admin_stats()
+ * @pipeline formulaire_admin
+ * @param array $flux Données du pipeline
+ * @return array Données du pipeline
+ **/
function stats_formulaire_admin($flux) {
if (
- isset($flux['args']['contexte']['objet'])
- AND $objet = $flux['args']['contexte']['objet']
- AND isset($flux['args']['contexte']['id_objet'])
- AND $id_objet = $flux['args']['contexte']['id_objet']
- ) {
+ isset($flux['args']['contexte']['objet'])
+ and $objet = $flux['args']['contexte']['objet']
+ and isset($flux['args']['contexte']['id_objet'])
+ and $id_objet = $flux['args']['contexte']['id_objet']
+ ) {
if ($l = admin_stats($objet, $id_objet, defined('_VAR_PREVIEW') ? _VAR_PREVIEW : '')) {
$btn = recuperer_fond('prive/bouton/statistiques', array(
'visites' => $l[0],
'popularite' => $l[1],
'statistiques' => $l[2],
));
- $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn.'$1', $flux['data']);
+ $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn . '$1', $flux['data']);
}
}
+
return $flux;
}
-// calculer les visites et popularite d'un objet/id_objet
-// (uniquement valable pour les articles) ...
-// https://code.spip.net/@admin_stats
-function admin_stats($objet, $id_objet, $var_preview)
-{
- if ($GLOBALS['meta']["activer_statistiques"] != "non"
- AND $objet == 'article'
- AND !$var_preview
- AND autoriser('voirstats')
+/**
+ * Calcule les visites et popularite d'un objet éditorial
+ *
+ * @note
+ * Actuellement uniquement valable pour les articles.
+ *
+ * @param string $objet
+ * @param int $id_objet
+ * @param string $var_preview
+ * Indique si on est en prévisualisation : pas de statistiques dans ce cas.
+ * @return false|array
+ * - false : pas de statistiques disponibles
+ * - array : Tableau les stats `[visites, popularité, url]`
+ **/
+function admin_stats($objet, $id_objet, $var_preview = "") {
+ if ($GLOBALS['meta']["activer_statistiques"] != "non"
+ and $objet == 'article'
+ and !$var_preview
+ and autoriser('voirstats')
) {
$row = sql_fetsel("visites, popularite", "spip_articles", "id_article=$id_objet AND statut='publie'");
if ($row) {
- return array(intval($row['visites']),
- ceil($row['popularite']),
- str_replace('&', '&', generer_url_ecrire_statistiques($id_objet)));
+ return array(
+ intval($row['visites']),
+ ceil($row['popularite']),
+ str_replace('&', '&', generer_url_ecrire_statistiques($id_objet))
+ );
}
}
+
return false;
}
-// https://code.spip.net/@generer_url_ecrire_statistiques
+/**
+ * Génère URL de la page dans l'espace privé permettant de visualiser les statistiques d'un article
+ *
+ * @param int $id_article
+ * @return string URL
+ **/
function generer_url_ecrire_statistiques($id_article) {
return generer_url_ecrire('stats_visites', "id_article=$id_article");
}
-
-// les taches crons
-function stats_taches_generales_cron($taches_generales){
+/**
+ * Ajoute le cron de traitement des statistiques et calcul des popularités
+ *
+ * @pipeline taches_generales_cron
+ * @param array $taches_generales
+ * Tableau `[nom de la tache => intervalle en secondes]`
+ * @return array
+ * Tableau `[nom de la tache => intervalle en secondes]`
+ **/
+function stats_taches_generales_cron($taches_generales) {
// stats : toutes les 5 minutes on peut vider un panier de visites
- if ($GLOBALS['meta']["activer_statistiques"] == "oui") {
- $taches_generales['visites'] = 300;
+ if (isset($GLOBALS['meta']["activer_statistiques"])
+ and $GLOBALS['meta']["activer_statistiques"] == "oui"
+ ) {
+ $taches_generales['visites'] = 300;
$taches_generales['popularites'] = 7200; # calcul lourd
}
-
+
return $taches_generales;
}
-function stats_configurer_liste_metas($metas){
- $metas['activer_statistiques']='non';
- $metas['activer_captures_referers']='non';
+/**
+ * Lister les metas de statistiques et leurs valeurs par défaut
+ *
+ * @pipeline configurer_liste_metas
+ * @param array $metas
+ * Couples nom de la méta => valeur par défaut
+ * @return array
+ * Couples nom de la méta => valeur par défaut
+ */
+function stats_configurer_liste_metas($metas) {
+ $metas['activer_statistiques'] = 'non';
+ $metas['activer_captures_referers'] = 'non';
+ $metas['activer_referers']='oui';
+
return $metas;
}
-function stats_boite_infos($flux){
+/**
+ * Afficher le lien vers la page de statistique sur la vue d'un article dans l'espace privé
+ *
+ * @pipeline boite_infos
+ * @param array $flux Données du pipeline
+ * @return array Données du pipeline
+ */
+function stats_boite_infos($flux) {
if ($GLOBALS['meta']["activer_statistiques"] == "oui") {
- if ($flux['args']['type']=='article'
- AND $id_article=$flux['args']['id']
- AND autoriser('voirstats','article',$id_article)){
- $visites = sql_getfetsel('visites','spip_articles','id_article='.intval($id_article));
- if ($visites>0){
- $icone_horizontale=chercher_filtre('icone_horizontale');
- $flux['data'].=$icone_horizontale(generer_url_ecrire("stats_visites","id_article=$id_article"),_T('statistiques:icone_evolution_visites', array('visites' => $visites)),"statistique-24.png");
+ if ($flux['args']['type'] == 'article'
+ and $id_article = $flux['args']['id']
+ and autoriser('voirstats', 'article', $id_article)
+ ) {
+ $visites = sql_getfetsel('visites', 'spip_articles', 'id_article=' . intval($id_article));
+ if ($visites > 0) {
+ $icone_horizontale = chercher_filtre('icone_horizontale');
+ $flux['data'] .= $icone_horizontale(generer_url_ecrire("stats_visites", "id_article=$id_article"),
+ _T('statistiques:icone_evolution_visites', array('visites' => $visites)), "statistique-24.png");
}
}
}
- return $flux;
-}
-?>
\ No newline at end of file
+ return $flux;
+}