source: spip-zone/_core_/plugins/statistiques/stats_pipelines.php @ 93100

Last change on this file since 93100 was 93100, checked in by marcimat@…, 5 years ago

Notice en moins lorsque les méta ne sont pas encore calculées ou n'ont pas pu l'être.

File size: 6.4 KB
Line 
1<?php
2
3/**
4 * Déclarations d'autorisations et utilisations de pipelines
5 *
6 * @plugin Statistiques pour SPIP
7 * @license GNU/GPL
8 * @package SPIP\Stats\Pipelines
9**/
10
11if (!defined('_ECRIRE_INC_VERSION')) return;
12
13
14/**
15 * Compter les visites sur les pages HTML
16 *
17 * Uniquement si les statistiques sont activées dans la configuration :
18 * - permet de compter par défaut toutes les pages de type HTML
19 * - sauf si on explicite, pour une page donnée, l'entête
20 *   header `X-Spip-Visites` à `oui` ou `non`.
21 *   Indiquer `oui` pour forcer le comptage de la page, ou `non` pour au contraire l'éviter
22 *
23 * @uses public_stats_dist() si la page doit être comptée.
24 * @pipeline affichage_entetes_final
25 * @param array $entetes liste des entêtes de la page
26 * @return array
27**/
28function stats_affichage_entetes_final($entetes){
29        if (isset($GLOBALS['meta']["activer_statistiques"]) and $GLOBALS['meta']["activer_statistiques"] != "non") {
30                $html = preg_match(',^\s*text/html,', $entetes['Content-Type']);
31
32                // decomptage des visites, on peut forcer a oui ou non avec le header X-Spip-Visites
33                // par defaut on ne compte que les pages en html (ce qui exclue les js,css et flux rss)
34                $spip_compter_visites = $html?'oui':'non';
35                if (isset($entetes['X-Spip-Visites'])){
36                        $spip_compter_visites = in_array($entetes['X-Spip-Visites'],array('oui','non'))
37                                ?$entetes['X-Spip-Visites']
38                                :$spip_compter_visites;
39                        unset($entetes['X-Spip-Visites']);
40                }
41
42                // Gestion des statistiques du site public
43                if ($spip_compter_visites!='non') {
44                        $stats = charger_fonction('stats', 'public');
45                        $stats();
46                }
47        }
48        return $entetes;
49}
50
51
52/**
53 * Compléter des pages de l'espace privé
54 *
55 * - Ajoute les formulaire de configuration des statistiques dans les configurations avancées
56 * - Ajoute les formulaire de suppression des statistiques dans la maintenance technique
57 *
58 * @pipeline affiche_milieu
59 * @param array $flux  Données du pipeline
60 * @return array       Données du pipeline
61**/
62function stats_affiche_milieu($flux){
63        // afficher le formulaire de configuration (activer ou desactiver les statistiques).
64        if ($flux['args']['exec'] == 'configurer_avancees') {
65                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_compteur'));
66        }
67
68        // afficher le formulaire de suppression des visites (configuration > maintenance du site).
69        if ($flux['args']['exec'] == 'admin_tech') {
70                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/admin_effacer_stats',array());
71        }
72        return $flux;
73}
74
75
76/**
77 * Ajoute les boutons d'administration indiquant la popularité et les visites d'un objet
78 *
79 * @uses admin_stats()
80 * @pipeline formulaire_admin
81 * @param array $flux  Données du pipeline
82 * @return array       Données du pipeline
83**/
84function stats_formulaire_admin($flux) {
85        if (
86         isset($flux['args']['contexte']['objet'])
87         AND $objet = $flux['args']['contexte']['objet']
88         AND isset($flux['args']['contexte']['id_objet'])
89         AND $id_objet = $flux['args']['contexte']['id_objet']
90         ) {
91                if ($l = admin_stats($objet, $id_objet, defined('_VAR_PREVIEW') ? _VAR_PREVIEW : '')) {
92                        $btn = recuperer_fond('prive/bouton/statistiques', array(
93                                'visites' => $l[0],
94                                'popularite' => $l[1],
95                                'statistiques' => $l[2],
96                        ));
97                        $flux['data'] = preg_replace('%(<!--extra-->)%is', $btn.'$1', $flux['data']);
98                }
99        }
100        return $flux;
101}
102
103/**
104 * Calcule les visites et popularite d'un objet éditorial
105 *
106 * @note
107 *     Actuellement uniquement valable pour les articles.
108 *
109 * @param string $objet
110 * @param int $id_objet
111 * @param string $var_preview
112 *     Indique si on est en prévisualisation : pas de statistiques dans ce cas.
113 * @return false|array
114 *     - false : pas de statistiques disponibles
115 *     - array : Tableau les stats `[visites, popularité, url]`
116**/
117function admin_stats($objet, $id_objet, $var_preview = "")
118{
119        if ($GLOBALS['meta']["activer_statistiques"] != "non" 
120        AND $objet == 'article'
121        AND !$var_preview
122        AND autoriser('voirstats')
123        ) {
124                $row = sql_fetsel("visites, popularite", "spip_articles", "id_article=$id_objet AND statut='publie'");
125
126                if ($row) {
127                        return array(intval($row['visites']),
128                               ceil($row['popularite']),
129                               str_replace('&amp;', '&', generer_url_ecrire_statistiques($id_objet)));
130                }
131        }
132        return false;
133}
134
135/**
136 * Génère URL de la page dans l'espace privé permettant de visualiser les statistiques d'un article
137 *
138 * @param int $id_article
139 * @return string URL
140**/
141function generer_url_ecrire_statistiques($id_article) {
142        return generer_url_ecrire('stats_visites', "id_article=$id_article");
143}
144
145
146
147/**
148 * Ajoute le cron de traitement des statistiques et calcul des popularités
149 *
150 * @pipeline taches_generales_cron
151 * @param array $taches_generales
152 *     Tableau `[nom de la tache => intervalle en secondes]`
153 * @return array
154 *     Tableau `[nom de la tache => intervalle en secondes]`
155**/
156function stats_taches_generales_cron($taches_generales){
157
158        // stats : toutes les 5 minutes on peut vider un panier de visites
159        if (isset($GLOBALS['meta']["activer_statistiques"])
160                AND $GLOBALS['meta']["activer_statistiques"] == "oui")
161        {
162                $taches_generales['visites'] = 300; 
163                $taches_generales['popularites'] = 7200; # calcul lourd
164        }
165
166        return $taches_generales;
167}
168
169/**
170 * Lister les metas de statistiques et leurs valeurs par défaut
171 *
172 * @pipeline configurer_liste_metas
173 * @param array $metas
174 *     Couples nom de la méta => valeur par défaut
175 * @return array
176 *    Couples nom de la méta => valeur par défaut
177 */
178function stats_configurer_liste_metas($metas){
179        $metas['activer_statistiques']='non';
180        $metas['activer_captures_referers']='non';
181        return $metas;
182}
183
184/**
185 * Afficher le lien vers la page de statistique sur la vue d'un article dans l'espace privé
186 *
187 * @pipeline boite_infos
188 * @param array $flux  Données du pipeline
189 * @return array       Données du pipeline
190 */
191function stats_boite_infos($flux){
192        if ($GLOBALS['meta']["activer_statistiques"] == "oui") {
193                if ($flux['args']['type']=='article'
194                        AND $id_article=$flux['args']['id']
195                        AND autoriser('voirstats','article',$id_article)){
196                        $visites = sql_getfetsel('visites','spip_articles','id_article='.intval($id_article));
197                        if ($visites>0){
198                                $icone_horizontale=chercher_filtre('icone_horizontale');
199                                $flux['data'].=$icone_horizontale(generer_url_ecrire("stats_visites","id_article=$id_article"),_T('statistiques:icone_evolution_visites', array('visites' => $visites)),"statistique-24.png");
200                        }
201                }
202        }
203  return $flux;
204}
205
206?>
Note: See TracBrowser for help on using the repository browser.