Changeset 111825 in spip-zone


Ignore:
Timestamp:
Oct 1, 2018, 10:47:44 PM (10 months ago)
Author:
jluc@…
Message:

cibler les caches sessionnés d'un internaute + petit refactoring

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/cachelab/trunk/inc/cachelab.php

    r111820 r111825  
    1212        }
    1313}
    14 
    15 if (!defined ('CACHELAB_LOG_ECHECS'))
    16         define ('CACHELAB_LOG_ECHECS', true);
    1714
    1815if ($cle_objet and !$id_objet)
     
    7269                die ("Il faut mémoization avec APC ou APCu");
    7370
     71        $session = (isset($conditions['session']) ? $conditions['session'] : null);
     72        if ($session=='courante')
     73                $session = spip_session();
    7474        $chemin = (isset($conditions['chemin']) ? $conditions['chemin'] : null);
    7575        $cle_objet = (isset($conditions['cle_objet']) ? $conditions['cle_objet'] : null);
     
    8484        }
    8585
     86        $nb_caches=$nb_no_data=$nb_data_not_array=$nb_cible=0;
     87        $nb_session=($session ? 0 : '_');
     88        $nb_matche_chemin=($chemin ? 0 : '_');
     89        $matche_chemin = $no_data = $data_not_array = $cible = array();
     90
    8691        $len_prefix = strlen(_CACHE_NAMESPACE);
    87 
    88         $matche_chemin = $no_data = $data_not_array = $cible = array();
    89         $nb_caches=$nb_matche_chemin=$nb_no_data=$nb_data_not_array=$nb_cible=0;
    90 
    9192        $chemins = explode('|', $chemin);
    9293        $cache = apcu_cache_info();
     
    9495                $cle = $d['info'];
    9596                if ($d and strpos ($cle, ':cache:') and  apcu_exists($cle)
    96                         //and ($meta_derniere_modif <= $d['creation_time'])
    97                         )
    98                 {
     97                        // and ($meta_derniere_modif <= $d['creation_time']) // OUI décommenter
     98                        ) {
    9999                        $nb_caches++;
    100                         $danslechemin = !$chemin;
     100
     101                        if ($session) {
     102                                if (substr ($cle, -9) != "_$session")
     103                                        continue;
     104                                else
     105                                        $nb_session++;
     106                        }
     107
    101108                        if ($chemin) {
    102109                                switch ($methode_chemin) {
    103110                                case 'strpos' :
    104                                         foreach ($chemins as $unchemin) {
    105                                                 if ($unchemin and (strpos ($cle, $unchemin) !== false)) {
    106                                                         $danslechemin = true;
    107                                                         cachelab_applique ($action, $cle, null, $options);
     111                                        foreach ($chemins as $unchemin)
     112                                                if ($unchemin and (strpos ($cle, $unchemin) !== false))
    108113                                                        break;
    109                                                 };
    110                                         }
    111                                         break;
     114                                        continue 2;
    112115                                case 'regexp' :
    113                                         if ($chemin and ($danslechemin = preg_match(",$chemin,i", $cle))) {
    114                                                 if ($avec_listes)
    115                                                         $matche_chemin[] = $cle;
    116                                                 cachelab_applique ($action, $cle, null, $options);
    117                                         }
    118                                         break;
     116                                        if ($chemin and ($danslechemin = preg_match(",$chemin,i", $cle)))
     117                                                break;
     118                                        continue 2;
    119119                                default :
    120                                         die("Pas prévu (TODO)");
     120                                        die("Méthode pas prévue pour chemin (TODO)");
    121121                                };
    122                                 if ($danslechemin) {
    123                                         $nb_matche_chemin++;
     122                                $nb_matche_chemin++;
     123                                if ($avec_listes)
     124                                        $matche_chemin[]=$cle;
     125                        }
     126
     127                        if ($cle_objet and $id_objet) {
     128                                global $Memoization;
     129                                $data = $Memoization->get(substr($cle, $len_prefix));
     130                                if (!$data) {
     131                                        $nb_no_data++;
     132                                        continue;
     133                                }
     134                                if (!is_array($data)) {
     135                                        spip_log ("clé=$cle : data n'est pas un tableau : ".print_r($data,1), 'cachelab');
     136                                        $nb_data_not_array++;
    124137                                        if ($avec_listes)
    125                                                 $matche_chemin[]=$cle;
     138                                                $data_not_array[] = $cle;
     139                                        continue;
    126140                                };
     141                                if (!isset ($data['contexte'][$cle_objet])
     142                                        or ($data['contexte'][$cle_objet]!=$id_objet))
     143                                        continue;
    127144                        }
    128                         else
    129                                 $nb_matche_chemin = '_';        // pas de filtrage par le chemin
    130 
    131                         if ($danslechemin and $cle_objet and $id_objet) {
    132                                 global $Memoization;
    133                                 if ($data = $Memoization->get(substr($cle, $len_prefix))) {
    134                                         if (is_array($data)) {
    135                                                 if (isset($data['contexte'])
    136                                                         and isset ($data['contexte'][$cle_objet])
    137                                                         and ($data['contexte'][$cle_objet]==$id_objet)
    138                                                         ) {
    139                                                         $nb_cible++;
    140                                                         if ($avec_listes)
    141                                                                 $cible[] = $cle;
    142                                                         cachelab_applique ($action, $cle, $data, $options);
    143                                                 }
    144                                         }
    145                                         else {
    146                                                 if (CACHELAB_LOG_ECHECS)
    147                                                         spip_log ("clé=$cle : data n'est pas un tableau : ".print_r($data,1), 'cachelab');
    148                                                 if ($avec_listes)
    149                                                         $data_not_array[]=$cle.($data ? ' not array' : ' empty');
    150                                                 $nb_data_not_array++;
    151                                         };
    152                                 }
    153                                 else
    154                                         $nb_no_data++;
    155                         }
    156                         elseif($danslechemin) {// condition sur chemin sans condition sur contexte
    157                                 $nb_cible++;
    158                                 cachelab_applique ($action, $cle, $data, $options);
    159                         }
     145                        // restent les cibles
     146                        $nb_cible++;
     147                        if ($avec_listes)
     148                                $cible[] = $cle;
     149                        cachelab_applique ($action, $cle, null, $options);
    160150                }
    161151        }
     
    163153        $stats = array(
    164154                'caches'=>$nb_caches,
     155                'session'=>$nb_session,
    165156                'matche_chemin'=>$nb_matche_chemin,
    166157                'no_data' => $nb_no_data,       // yen a plein (ça correspond à quoi ?)
Note: See TracChangeset for help on using the changeset viewer.