Changeset 98644 in spip-zone


Ignore:
Timestamp:
Jul 2, 2016, 6:53:40 PM (3 years ago)
Author:
tcharlss@…
Message:

v1.0.28 : reports du core : r97981, r98573, r98574, r98574, r98575, r98576
Prise en compte de la constante _STATS_COMPTE_EN_ATTENTE et de la meta activer_referer.
Ajout d'un squelette pour le formulaire de config, ce n'est pas forcément évident qu'on doit activer les objets dans le formulaire "normal" des statistiques.

Location:
_plugins_/statistiques_objets/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/statistiques_objets/trunk/genie/visites.php

    r95864 r98644  
    280280                        }
    281281
    282                         // 3. Les referers du site
    283                         // insertion pour les nouveaux, au tableau des increments sinon
    284                         if ($referers[$date]) {
    285                                 $ar = array();
    286                                 $trouver_table = charger_fonction('trouver_table', 'base');
    287                                 $desc = $trouver_table('referers');
    288                                 $n = preg_match('/(\d+)/', $desc['field']['referer'], $r);
    289                                 $n = $n ? $r[1] : 255;
    290                                 foreach ($referers[$date] as $referer => $num) {
    291                                         $referer_md5 = sql_hex(substr(md5($referer), 0, 15));
    292                                         $referer = substr($referer, 0, $n);
    293                                         if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) {
    294                                                 sql_insertq('spip_referers',
    295                                                         array(
    296                                                                 'visites' => $num,
    297                                                                 'visites_jour' => $num,
    298                                                                 'visites_veille' => $num,
    299                                                                 'date' => $date,
    300                                                                 'referer' => $referer,
    301                                                                 'referer_md5' => $referer_md5
    302                                                         ));
    303                                         } else {
    304                                                 $ar[$num][] = $referer_md5;
     282                        if (!isset($GLOBALS['meta']['activer_referers']) or $GLOBALS['meta']['activer_referers'] == "oui") {
     283                                // 3. Les referers du site
     284                                // insertion pour les nouveaux, au tableau des increments sinon
     285                                if ($referers[$date]) {
     286                                        $ar = array();
     287                                        $trouver_table = charger_fonction('trouver_table', 'base');
     288                                        $desc = $trouver_table('referers');
     289                                        $n = preg_match('/(\d+)/', $desc['field']['referer'], $r);
     290                                        $n = $n ? $r[1] : 255;
     291                                        foreach ($referers[$date] as $referer => $num) {
     292                                                $referer_md5 = sql_hex(substr(md5($referer), 0, 15));
     293                                                $referer = substr($referer, 0, $n);
     294                                                if (!sql_countsel('spip_referers', "referer_md5=$referer_md5")) {
     295                                                        sql_insertq('spip_referers',
     296                                                                array(
     297                                                                        'visites' => $num,
     298                                                                        'visites_jour' => $num,
     299                                                                        'visites_veille' => $num,
     300                                                                        'date' => $date,
     301                                                                        'referer' => $referer,
     302                                                                        'referer_md5' => $referer_md5
     303                                                                ));
     304                                                } else {
     305                                                        $ar[$num][] = $referer_md5;
     306                                                }
     307                                        }
     308
     309                                        // appliquer les increments sur les anciens
     310                                        // attention on appelle sql_in en mode texte et pas array
     311                                        // pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849
     312                                        foreach ($ar as $num => $liste) {
     313                                                sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"),
     314                                                        sql_in('referer_md5', join(', ', $liste)));
    305315                                        }
    306316                                }
    307317
    308                                 // appliquer les increments sur les anciens
    309                                 // attention on appelle sql_in en mode texte et pas array
    310                                 // pour ne pas passer sql_quote() sur les '0x1234' de referer_md5, cf #849
    311                                 foreach ($ar as $num => $liste) {
    312                                         sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"),
    313                                                 sql_in('referer_md5', join(', ', $liste)));
    314                                 }
    315                         }
    316 
    317                         // 4. Les referers des objets
    318                         if ($referers_objets[$date]) {
    319                                 $ar = array();
    320                                 $insert = array();
    321                                 foreach($referers_objets[$date] as $objet => $referers_objet){
    322                                         // s'assurer d'un slot pour chacun
    323                                 foreach ($referers_objet as $id_objet => $referers) {
    324                                         foreach ($referers as $referer => $num) {
    325                                                 $referer_md5 = sql_hex(substr(md5($referer), 0, 15));
    326                                                 $exp_referer   = array(
    327                                                         'visites'       => $num,
    328                                                         'referer'       => $referer,
    329                                                         'referer_md5'   => $referer_md5
    330                                                 );
    331                                                 // cas des articles
    332                                                 if ($objet == 'article'){
    333                                                         $prim                      = '(id_article='.intval($id_objet).' AND referer_md5='.sql_quote($referer_md5).')';
    334                                                         $table_referer             = 'spip_referers_articles';
    335                                                         $exp_referer['id_article'] = $id_objet;
    336                                                 }
    337                                                 // autres types d'objets
    338                                                 else {
    339                                                         $prim                    = '(objet='.sql_quote($objet).' AND id_objet='.intval($id_objet).' AND referer_md5='.sql_quote($referer_md5).')';
    340                                                         $table_referer           = 'spip_referers_objets';
    341                                                         $exp_referer['objet']    = $objet;
    342                                                         $exp_referer['id_objet'] = $id_objet;
    343                                                 }
    344                                                 if (!sql_countsel($table_referer, $prim)) {
    345                                                         sql_insertq($table_referer, $exp_referer);
    346                                                 } else {
    347                                                         $ar[$num][$objet][] = $prim;
     318                                // 4. Les referers des objets
     319                                if ($referers_objets[$date]) {
     320                                        $ar = array();
     321                                        $insert = array();
     322                                        foreach($referers_objets[$date] as $objet => $referers_objet){
     323                                                // s'assurer d'un slot pour chacun
     324                                                foreach ($referers_objet as $id_objet => $referers) {
     325                                                        foreach ($referers as $referer => $num) {
     326                                                                $referer_md5 = sql_hex(substr(md5($referer), 0, 15));
     327                                                                $exp_referer   = array(
     328                                                                        'visites'       => $num,
     329                                                                        'referer'       => $referer,
     330                                                                        'referer_md5'   => $referer_md5
     331                                                                );
     332                                                                // cas des articles
     333                                                                if ($objet == 'article'){
     334                                                                        $prim                      = '(id_article='.intval($id_objet).' AND referer_md5='.sql_quote($referer_md5).')';
     335                                                                        $table_referer             = 'spip_referers_articles';
     336                                                                        $exp_referer['id_article'] = $id_objet;
     337                                                                }
     338                                                                // autres types d'objets
     339                                                                else {
     340                                                                        $prim                    = '(objet='.sql_quote($objet).' AND id_objet='.intval($id_objet).' AND referer_md5='.sql_quote($referer_md5).')';
     341                                                                        $table_referer           = 'spip_referers_objets';
     342                                                                        $exp_referer['objet']    = $objet;
     343                                                                        $exp_referer['id_objet'] = $id_objet;
     344                                                                }
     345                                                                if (!sql_countsel($table_referer, $prim)) {
     346                                                                        sql_insertq($table_referer, $exp_referer);
     347                                                                } else {
     348                                                                        $ar[$num][$objet][] = $prim;
     349                                                                }
     350                                                        }
     351                                                }
     352                                                // ajouter les visites
     353                                                foreach ($ar as $num => $objets) {
     354                                                        foreach($objets as $objet => $liste) {
     355                                                                $exp_referers = array('visites' => "visites+$num");
     356                                                                if ($objet == 'article') {
     357                                                                        $table_referers = 'spip_referers_articles';
     358                                                                } else {
     359                                                                        $table_referers = 'spip_referers_objets';
     360                                                                        $exp_referers['objet'] = $objet;
     361                                                                }
     362                                                                sql_update($table_referers_objets, $exp_referers, join(" OR ", $liste));
     363                                                                ## Ajouter un JOIN sur le statut de l'article ?
     364                                                        }
    348365                                                }
    349366                                        }
    350                                 }
    351                                 // ajouter les visites
    352                                 foreach ($ar as $num => $objets) {
    353                                         foreach($objets as $objet => $liste){
    354                                                 $exp_referers = array('visites' => "visites+$num");
    355                                                 if ($objet == 'article') {
    356                                                         $table_referers = 'spip_referers_articles';
    357                                                 } else {
    358                                                         $table_referers = 'spip_referers_objets';
    359                                                         $exp_referers['objet'] = $objet;
    360                                                 }
    361                                                 sql_update($table_referers_objets, $exp_referers, join(" OR ", $liste));
    362                                                 ## Ajouter un JOIN sur le statut de l'article ?
    363                                         }
    364                                 }
    365367                                }
    366368                        }
  • _plugins_/statistiques_objets/trunk/inc/stats_visites_objet_to_array.php

    r95917 r98644  
    111111        $data[$last]['prevision'] = $data[$last]['visites'] + intval(round($moyenne * $prorata));
    112112
     113        /**
     114         * Compter les fichiers en attente de depouillement dans tmp/visites/
     115         * pour affiner la prediction.
     116         * A activer dans le mes_options si l'hebergement tient le coup en cas de gros pics de traffic
     117         */
     118        if (!$id_objet and defined('_STATS_COMPTE_EN_ATTENTE') AND _STATS_COMPTE_EN_ATTENTE) {
     119                // eviter un depassement memoire en mesurant un echantillon pour commencer
     120                $n = count(glob(_DIR_RACINE . "tmp/visites/0*"));
     121                if ($n < 10000) {
     122                        $n = count(glob(_DIR_RACINE . "tmp/visites/*"));
     123                } else {
     124                        $n += count(glob(_DIR_RACINE . "tmp/visites/4*"));
     125                        $n += count(glob(_DIR_RACINE . "tmp/visites/8*"));
     126                        $n += count(glob(_DIR_RACINE . "tmp/visites/c*"));
     127                        $n = 4 * $n;
     128                }
     129                $data[$last]['prevision'] += $n;
     130        }
     131
    113132        return $data;
    114133}
  • _plugins_/statistiques_objets/trunk/lang/paquet-statsobjets_fr.php

    r95865 r98644  
    99        'statsobjets_nom' => 'Statistiques des objets',
    1010        'statsobjets_slogan' => 'Étendre les statiques de SPIP à tous les objets éditoriaux',
    11         'statsobjets_description' => 'Ce plugin permet d\'activer les statistiques pour tous les objets éditoriaux, en plus des articles.',
    12        
     11        'statsobjets_description' => 'Ce plugin permet d\'activer les statistiques pour tous les objets éditoriaux, en plus des articles.
     12        Les objets à prendre en compte sont activables dans [le formulaire de configuration des statistiques->?exec=configurer_avancees#formulaire_configurer_compteur], dans le menu « Configuration &rarr; Fonctions avancées ». Si vous aviez activé les statistiques avant d\'installer ce plugin, les articles seront automatiquement activés.
     13        Les visites des articles continueront à être stockées dans la table spip_visites_articles, les visites des autres objets sont stockées dans la table spip_visites_objets.',
     14
    1315);
    1416?>
  • _plugins_/statistiques_objets/trunk/paquet.xml

    r98643 r98644  
    22        prefix="statsobjets"
    33        categorie="statistique"
    4         version="1.0.27"
     4        version="1.0.28"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.1.*]"
  • _plugins_/statistiques_objets/trunk/prive/squelettes/contenu/stats_referers.html

    r95920 r98644  
    44
    55]
    6 [(#AUTORISER{voirstats}|sinon_interdire_acces)]
     6[(#AUTORISER{voirstats}|et{#CONFIG{activer_referers}|=={oui}}|sinon_interdire_acces)]
    77
    88<h1 class="grostitre"><:statistiques:onglet_origine_visites:></h1>
  • _plugins_/statistiques_objets/trunk/public/stats.php

    r98642 r98644  
    8989        // Analyse du referer
    9090        $log_referer = '';
    91         if (isset($referer)) {
    92                 $url_site_spip = preg_replace(',/$,', '',
    93                         preg_replace(',^(https?://)?(www\.)?,i', '',
    94                                 url_de_base()));
    95                 if (!(($url_site_spip <> '')
    96                         and strpos('-' . strtolower($referer), strtolower($url_site_spip))
    97                         and strpos($referer, "recherche=") === false)
    98                 ) {
    99                         $log_referer = $referer;
     91        if (!isset($GLOBALS['meta']['activer_referers']) or $GLOBALS['meta']['activer_referers'] == "oui") {
     92                if (isset($referer)) {
     93                        $url_site_spip = preg_replace(',/$,', '',
     94                                preg_replace(',^(https?://)?(www\.)?,i', '',
     95                                        url_de_base()));
     96                        if (!(($url_site_spip <> '')
     97                                and strpos('-' . strtolower($referer), strtolower($url_site_spip))
     98                                and strpos($referer, "recherche=") === false)
     99                        ) {
     100                                $log_referer = $referer;
     101                        }
    100102                }
    101103        }
Note: See TracChangeset for help on using the changeset viewer.