source: spip-zone/_plugins_/svp_stats/trunk/inc/svp_statistiquer.php @ 113675

Last change on this file since 113675 was 113675, checked in by eric@…, 4 months ago

En croyant corriger une erreur de sql_quote en intval on a mis en évidence une autre erreur d'utilisation d'un fetsel au lieu d'un getfetsel.

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5// - Adresse de la page fournissant les statistiques par json
6if (!defined('_SVP_SOURCE_STATS')) {
7        define('_SVP_SOURCE_STATS', 'https://stats.spip.net/spip.php?page=stats.json');
8}
9
10// ----------------------- Traitements des stats ---------------------------------
11
12/**
13 * Actualisation des statistiques des plugins presents dans la base.
14 * @return boolean
15 */
16
17function svp_actualiser_stats() {
18       
19        // Initialisation du retour
20        $retour = true;
21
22        // Récupération des statistiques globales (toute version SPIP) et mise en base dans la table spip_plugins
23        include_spip('inc/distant');
24        $page = recuperer_page(_SVP_SOURCE_STATS);
25        $infos = json_decode($page);
26        if (!$stats = $infos->plugins) {
27                // On ne fait que loger l'erreur car celle-ci n'a pas d'incidence sur le comportement
28                // de SVP
29                spip_log('MODULE STATS - Réponse du serveur incorrecte ou mal formée. Les statistiques ne seront pas mises à jour', 'svp_actions.' . _LOG_ERREUR);
30                $retour = false;
31        } else {
32                foreach ($stats as $_stat) {
33                        $prefixe = strtoupper($_stat->nom);
34                        if ($id_plugin = sql_getfetsel('id_plugin', 'spip_plugins', array('prefixe='. sql_quote($prefixe)))) {
35                                // Si le plugin est bien dans la base on peut lui mettre a jour ses statistiques
36                                sql_updateq('spip_plugins', 
37                                                        array('nbr_sites'=> $_stat->sites, 'popularite'=> floatval(trim($_stat->pourcentage, '%'))),
38                                                        'id_plugin=' . intval($id_plugin));
39                        }
40                }
41        }
42
43        // Détermination de la date (mois année) pour l'historique.
44        $date = date('m-y');
45
46        // Récupération des statistiques par branche SPIP et mise en base dans la table spip_plugins_stats.
47        // La liste des branches en cours est fournie par SVP dans un tableau global.
48        include_spip('inc/svp_outiller');
49        foreach (array_keys($GLOBALS['infos_branches_spip']) as $_branche) {
50                // On charge le JSON des stats pour chaque branche SPIP
51                $page = recuperer_page(_SVP_SOURCE_STATS . "&v=${_branche}");
52                $infos = json_decode($page);
53                if (!$stats = $infos->plugins) {
54                        // On ne fait que loger l'erreur car celle-ci n'a pas d'incidence sur le comportement
55                        // de SVP
56                        spip_log("MODULE STATS - Réponse du serveur incorrecte ou mal formée. Les statistiques de la branche ${_branche} ne seront pas mises à jour", 'svp_actions.' . _LOG_ERREUR);
57                        $retour = false;
58                } else {
59                        foreach ($stats as $_stat) {
60                                $prefixe = strtoupper($_stat->nom);
61                                $where = array('prefixe='. sql_quote($prefixe), 'branche_spip=' . sql_quote($_branche));
62                                // Suivant que l'enregistrement du plugin pour la branche donnée existe ou pas, on met à jour
63                                // ou on insère les statistiques.
64                                $historique = array();
65                                if ($historique_existant = sql_getfetsel('historique', 'spip_plugins_stats', $where)) {
66                                        // Les stats existent déjà, on les met à jour avec l'historique mensuel.
67                                        $historique = unserialize($historique_existant);
68                                        $historique[$date] = $_stat->sites;
69                                        sql_updateq(
70                                                'spip_plugins_stats', 
71                                                array(
72                                                        'nbr_sites'  => $_stat->sites,
73                                                        'popularite' => floatval(trim($_stat->pourcentage, '%')),
74                                                        'historique' => serialize($historique)
75                                                ),
76                                                $where
77                                        );
78                                } else {
79                                        // Les stats n'existent pas on les insèrent pour la première fois.
80                                        $historique[$date] = $_stat->sites;
81                                        sql_insertq(
82                                                'spip_plugins_stats', 
83                                                array(
84                                                        'prefixe'      => $prefixe,
85                                                        'branche_spip' => $_branche,
86                                                        'nbr_sites'    => $_stat->sites,
87                                                        'popularite'   => floatval(trim($_stat->pourcentage, '%')),
88                                                        'historique'   => serialize($historique)
89                                                )
90                                        );
91                                }
92                        }
93                }
94        }
95       
96        return $retour;
97}
Note: See TracBrowser for help on using the repository browser.