Changeset 112182 in spip-zone


Ignore:
Timestamp:
Oct 27, 2018, 8:08:30 PM (12 months ago)
Author:
jluc@…
Message:

nouvelle option : partie_chemin, pour indiquer si on teste tout le chemin, ou le dossier seul ou le nom de fichier (dédicace Pierrox)

File:
1 edited

Legend:

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

    r112135 r112182  
    6161        if ($session=='courante')
    6262                $session = spip_session();
     63
    6364        $chemin = (isset($conditions['chemin']) ? $conditions['chemin'] : null);
    6465        $chemins = explode('|', $chemin); // sert seulement pour methode_chemin == strpos
     66
    6567        $cle_objet = (isset($conditions['cle_objet']) ? $conditions['cle_objet'] : null);
    6668        $id_objet = (isset($conditions['id_objet']) ? $conditions['id_objet'] : null);
     
    6971                $cle_objet=null;
    7072        }
     73
    7174        // pour 'contexte' on simule un 'more' pour donner un exemple d'extension
    7275        if (isset($conditions['contexte']) and $conditions['contexte'] and !isset($conditions['more']))
     
    7578                $morefunc='cachelab_filtrecache_'.$more;
    7679                // Signature nécessaire : $morefunc ($action, $conditions, $options, &$stats)
    77                 if (!function_exists($morefunc))
    78                         die ("La fonction '$morefunc' n'est pas définie");
     80                if (!function_exists($morefunc)) {
     81                        spip_log ("La fonction '$morefunc' n'est pas définie", 'cachelab_erreur');
     82                        return;
     83                }
    7984        }
    8085
     
    8287        // explode+strpos par défaut pour les chemins
    8388        $methode_chemin = (isset ($options['methode_chemin']) ? $options['methode_chemin'] : 'strpos');
     89        $partie_chemin = (isset ($options['partie_chemin']) ? $options['partie_chemin'] : 'tout');
    8490        // clean par défaut
    8591        $do_clean = (isset ($options['clean']) ? $options['clean'] : (!defined('CACHELAB_CLEAN') or CACHELAB_CLEAN));
     
    110116
    111117                // on saute les caches d'autres origines
    112                 // (et les caches d'un précédent _CACHE_NAMESPACE pour ce même site)
     118                // (et les caches d'un autre _CACHE_NAMESPACE pour ce même site)
    113119                if (strpos ($cle, _CACHE_NAMESPACE) !== 0) {
    114120                        $stats['nb_alien']++;
     
    127133                                $del=$Memoization->del(substr($cle,$len_prefix));
    128134                                if (!$del)
    129                                         spip_log ("Echec du clean du cache $cle (création : {$d['creation_time']}, invalidation : $meta_derniere_modif)", "cachelab");
     135                                        spip_log ("Echec du clean du cache $cle (création : {$d['creation_time']}, invalidation : $meta_derniere_modif)", "cachelab_erreur");
    130136                                $stats['nb_clean']++;
    131137                        };
     
    144150                // 2eme filtrage : par le chemin
    145151                if ($chemin) {
     152                        switch ($partie_chemin) {
     153                        case 'tout' :
     154                        case 'chemin' :
     155                                $partie_cle = $cle;
     156                                break;
     157                        case 'fichier' :
     158                                $parties = explode('/', $cle);
     159                                $partie_cle = array_pop($parties);
     160                                break;
     161                        case 'dossier' :
     162                                $parties = explode('/', $cle);
     163                                $parties = array_pop($parties);
     164                                $partie_cle = array_pop($parties);
     165                                break;
     166                        default :
     167                                spip_log ("Option partie_chemin incorrecte : '$partie_chemin'", 'cachelab_erreur');
     168                                return;
     169                        }
    146170                        // mémo php : « continue resumes execution just before the closing curly bracket ( } ), and break resumes execution just after the closing curly bracket. »
    147171                        switch ($methode_chemin) {
    148172                        case 'strpos' :
    149173                                foreach ($chemins as $unchemin)
    150                                         if ($unchemin and (strpos ($cle, $unchemin) !== false))
     174                                        if ($unchemin and (strpos ($partie_cle, $unchemin) !== false))
    151175                                                break 2;        // trouvé : sort du foreach et du switch et poursuit le test des autres conditions
    152176                                continue 2;      // échec : passe à la $cle suivante
    153177                        case 'regexp' :
    154                                 if ($chemin and ($danslechemin = preg_match(",$chemin,i", $cle)))
     178                                if ($chemin and ($danslechemin = preg_match(",$chemin,i", $partie_cle)))
    155179                                        break;  // trouvé : poursuit le test des autres conditions
    156180                                continue 2;     // échec : passe à la clé suivante
    157181                        default :
    158                                 die("Méthode '$methode_chemin' pas prévue pour le filtrage par le chemin");
     182                                spip_log ("Méthode '$methode_chemin' pas prévue pour le filtrage par le chemin", 'cachelab_erreur');
     183                                return;
    159184                        };
    160185                }
Note: See TracChangeset for help on using the changeset viewer.