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

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

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

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