Changeset 112536 in spip-zone


Ignore:
Timestamp:
Nov 27, 2018, 11:28:19 AM (3 weeks ago)
Author:
jluc@…
Message:

filtrage des caches non sessionnés + des 'talons' de squelettes sessionnés

Location:
_plugins_/xray/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/xray/trunk/paquet.xml

    r112521 r112536  
    22        prefix="xray"
    33        categorie="outil"
    4         version="0.16.0"
     4        version="0.17.0"
    55        etat="test"
    66        compatibilite="[2.1.0;3.2.*]"
  • _plugins_/xray/trunk/plugin.xml

    r111838 r112536  
    99        <licence>GPL</licence>
    1010        <licence>PHP</licence>
    11         <version>0.15.0</version>
     11        <version>0.17.0</version>
    1212        <etat>test</etat>
    1313        <description>
  • _plugins_/xray/trunk/xray_apc.php

    r111821 r112536  
    2929        return;
    3030}
    31 
    3231include_spip ('inc/autoriser');
    33 
    3432if (!autoriser('webmestre'))
    3533        die("Autorisation non accordée : devenez webmestre d'abord.");
     
    6866// _CACHE_NAMESPACE est défini par memoization et préfixe chaque nom de cache SPIP
    6967// On ne souhaite pas que cette partie du nom s'affiche sur chaque ligne
    70 define('XRAY_NEPASAFFICHER_DEBUTNOMCACHE', _CACHE_NAMESPACE);
     68define('XRAY_NEPASAFFICHER_DEBUTNOMCACHE', _CACHE_NAMESPACE.'cache:');
    7169
    7270////////// END OF DEFAULT CONFIG AREA /////////////////////////////////////////////////////////////
     
    106104}
    107105
    108 function get_apc_data($info, &$success) {
     106function get_apc_data($info, &$data_success) {
    109107        if (apcu_exists($info)
    110                 and ($data = apcu_fetch($info, $success))
    111                 and $success
     108                and ($data = apcu_fetch($info, $data_success))
     109                and $data_success
    112110                and is_array($data) and (count($data) == 1)
    113111                and is_serialized($data[0])
     
    119117        };
    120118
    121         $success = false;
     119        $data_success = false;
    122120        return null;
    123121}
     
    144142}
    145143
    146 function print_contexte($extra, $tostring)
    147 {
     144function print_contexte($extra, $tostring) {
    148145        $print = print_r($extra, 1);
    149146        if (stripos($print, 'Array') === 0) {
     
    181178}
    182179
    183 function bouton_objet($objet, $id_objet, $extra)
    184 {
     180function bouton_objet($objet, $id_objet, $extra) {
    185181        $objet_visible = $objet;
    186182        if ($objet == 'secteur')
     
    205201        return str_replace('/', '\/', $str);
    206202}
     203
     204define ('XRAY_PATTERN_SESSION', '/_([a-f0-9]{8}|)$/i');
     205define ('XRAY_PATTERN_SESSION_AUTH', '/_([a-f0-9]{8})$/i');
     206define ('XRAY_PATTERN_SESSION_ANON', '/_$/i');
     207define ('XRAY_PATTERN_NON_SESSION', '/[^_](?<!_[a-f0-9]{8})$/i');
     208define ('XRAY_PATTERN_TALON', '/^(.*)(?<!_[a-f0-9]{8})(?<!_)(_([a-f0-9]{8})?|)$/i');
     209
     210if (!function_exists('cache_est_sessionne')) {
     211        function cache_est_sessionne ($nomcache) {
     212                if (preg_match (XRAY_PATTERN_SESSION_AUTH, $nomcache))
     213                        return 'session_auth';
     214                elseif (preg_match (XRAY_PATTERN_SESSION_ANON, $nomcache))
     215                        return 'session_anon';
     216                else
     217                        return false;
     218        }
     219
     220        function cache_est_talon ($nomcache,&$data='') {
     221                if (preg_match(XRAY_PATTERN_SESSION, $nomcache))
     222                        return false;
     223                spip_log (print_r($data,1)."\n\n\n", "DEBUG_cache_est_talon");
     224                if (!is_array($data)) // textwheels par exemple
     225                        return false;
     226                return !isset($data['contexte']);
     227        }
     228}
     229
    207230////////////////////////////////////////////////////////////////////////
    208231
    209232// "define if not defined"
    210 function defaults($d, $v)
    211 {
     233function defaults($d, $v) {
    212234        if (!defined($d))
    213235                define($d, $v); // or just @define(...)
     
    252274        'AGGR' => '/^\d+$/', // aggregation by dir level
    253275        'SEARCH' => '~.*~',
    254         'TYPECACHE' => '/^(|ALL|SESSIONS|SESSIONS_AUTH|SESSIONS_NONAUTH|FORMULAIRES)$/', //
     276        'TYPECACHE' => '/^(|ALL|NON_SESSIONS|SESSIONS|SESSIONS_AUTH|SESSIONS_NONAUTH|SESSIONS_TALON|FORMULAIRES)$/', //
    255277        'ZOOM' => '/^(|TEXTECOURT|TEXTELONG)$/', //
    256278        'WHERE' => '/^(|ALL|HTML|META)$/', // recherche dans le contenu
     
    12271249                <select name=TYPECACHE  onChange="form.submit()">
    12281250                        <option value=ALL', $MYREQUEST['TYPECACHE'] == 'ALL' ? ' selected' : '', '>Tous</option>
     1251                        <option value=NON_SESSIONS', $MYREQUEST['TYPECACHE'] == 'NON_SESSIONS' ? ' selected' : '', '>Non sessionnés</option>
    12291252                        <option value=SESSIONS', $MYREQUEST['TYPECACHE'] == 'SESSIONS' ? ' selected' : '', '>Sessionnés</option>
    12301253                        <option value=SESSIONS_AUTH', $MYREQUEST['TYPECACHE'] == 'SESSIONS_AUTH' ? ' selected' : '', '>Sessionnés identifiés</option>
    12311254                        <option value=SESSIONS_NONAUTH', $MYREQUEST['TYPECACHE'] == 'SESSIONS_NONAUTH' ? ' selected' : '', '>Sessionnés non identifiés</option>
     1255                        <option value=SESSIONS_TALON', $MYREQUEST['TYPECACHE'] == 'SESSIONS_TALON' ? ' selected' : '', '>Talons de session</option>
    12321256                        <option value=FORMULAIRES', $MYREQUEST['TYPECACHE'] == 'FORMULAIRES' ? ' selected' : '', '>Formulaires</option>
    12331257                </select>
     
    13291353                       
    13301354                        $TYPECACHE = (isset($MYREQUEST['TYPECACHE']) ? $MYREQUEST['TYPECACHE'] : 'ALL');
     1355                        $also_required='';
     1356                        $also_required_bool = true;
    13311357                        switch ($TYPECACHE) {
    13321358                                case 'ALL':
    13331359                                        $pattern_typecache = '';
    13341360                                        break;
     1361                                case 'NON_SESSIONS':
     1362                                        $pattern_typecache = XRAY_PATTERN_NON_SESSION;
     1363                                        $also_required = 'cache_est_talon';
     1364                                        $also_required_bool = false;
     1365                                        break;
    13351366                                case 'SESSIONS':
    1336                                         $pattern_typecache = '/_([a-f0-9]{8}|)$/i';
     1367                                        $pattern_typecache = XRAY_PATTERN_SESSION;
    13371368                                        break;
    13381369                                case 'SESSIONS_AUTH':
    1339                                         $pattern_typecache = '/_[a-f0-9]{8}$/i';
     1370                                        $pattern_typecache = XRAY_PATTERN_SESSION_AUTH;
    13401371                                        break;
    13411372                                case 'SESSIONS_NONAUTH':
    1342                                         $pattern_typecache = '/_$/i';
     1373                                        $pattern_typecache = XRAY_PATTERN_SESSION_ANON;
     1374                                        break;
     1375                                case 'SESSIONS_TALON':
     1376                                        $pattern_typecache = XRAY_PATTERN_NON_SESSION;
     1377                                        $also_required = 'cache_est_talon';
    13431378                                        break;
    13441379                                case 'FORMULAIRES':
     
    13511386                        foreach ($list as $k => $entry) {
    13521387                                $data=$searched=null;
    1353                                 $success = false;
    1354                                 $tried_get_apc_data = false;
     1388                                $data_success = false;
     1389// plus de restrictions, on cherche toujours data
     1390                                $searched = $data = get_apc_data($entry['info'], $data_success);
     1391
    13551392                                if ($MYREQUEST['SEARCH'] and $MYREQUEST['WHERE']) {
    1356                                         $searched = $data = get_apc_data($entry['info'], $success);
    1357                                         $tried_get_apc_data = true;
    13581393                                        switch ($MYREQUEST['WHERE']) {
    13591394                                        case 'ALL' :
     
    13771412                                                        and preg_match($MYREQUEST['SEARCH'], $entry[$fieldname]))
    13781413                                                or ($MYREQUEST['WHERE']
    1379                                                         and preg_match($MYREQUEST['SEARCH'].'m', print_r($searched,1))))) {
     1414                                                        and preg_match($MYREQUEST['SEARCH'].'m', print_r($searched,1))))
     1415                                        and (!$also_required
     1416                                                or ($also_required($entry[$fieldname], $data)== $also_required_bool))) {
    13801417                                        $sh = md5($entry["info"]);
    13811418                                       
    1382                                         $field_value = htmlentities(strip_tags($entry[$fieldname], ''), ENT_QUOTES, 'UTF-8');
     1419                                        $displayed_name = htmlentities(strip_tags($entry[$fieldname], ''), ENT_QUOTES, 'UTF-8');
    13831420                                        if (defined('XRAY_NEPASAFFICHER_DEBUTNOMCACHE'))
    1384                                                 $field_value = str_replace(XRAY_NEPASAFFICHER_DEBUTNOMCACHE, '...', $field_value);
    1385                                         echo '<tr id="key-' . $sh . '" class=tr-', $i % 2, '>', "<td class='td-0' style='position: relative'>
    1386                         <a href='$MY_SELF&SH={$sh}#key-{$sh}'>$field_value</a>";
     1421                                                $displayed_name = str_replace(XRAY_NEPASAFFICHER_DEBUTNOMCACHE, '', $displayed_name);
     1422                                        echo '<tr id="key-' . $sh . '" class=tr-', $i % 2, '>',
     1423                                                        "<td class='td-0' style='position: relative'>
     1424                                                                <a href='$MY_SELF&SH={$sh}#key-{$sh}'>
     1425                                                                        $displayed_name
     1426                                                                </a>";
     1427
     1428                                        if ($data and cache_est_talon($entry[$fieldname], $data))
     1429                                                echo "<span style='margin-left:2em' title='Talon des caches sessionnés avec ce squelette et le même contexte'>[talon]</span>";
    13871430                                       
    1388                                         if ($p = preg_match('/_([0-9a-f]{8})$/i', $field_value, $match)
     1431                                        $boutons_liens = '';
     1432                                        if ($p = preg_match(XRAY_PATTERN_SESSION_AUTH, $displayed_name, $match)
    13891433                                                and $MYREQUEST['SEARCH'] != "/{$match[1]}/i") {
    13901434                                                $url_session = parametre_url($MY_SELF, 'SEARCH', $match[1]);
    1391                                                 echo "<a href='$url_session' style='float: right'>[session]</a>";
     1435                                                $boutons_liens .= "<a href='$url_session' title='Caches sessionnés pour le même internaute'>[session]</a>";
    13921436                                        }
     1437                                        if (is_array($data)
     1438                                                and isset($data['invalideurs']['session'])) {
     1439                                                $p = preg_match(XRAY_PATTERN_TALON, $displayed_name, $match);
     1440                                                $url_mm_talon = '';
     1441                                                $bouton_mm_talon='[mm talon]';
     1442                                                if ($p and $match[1] and ($MYREQUEST['SEARCH']!=$match[1])) {
     1443                                                        $url_mm_talon = parametre_url($MY_SELF, 'TYPECACHE', 'ALL');
     1444                                                        $url_mm_talon = parametre_url($url_mm_talon, 'SEARCH', $match[1]);
     1445                                                }
     1446                                                else
     1447                                                        $bouton_mm_talon='(! Err get talon !)';
     1448                                                $boutons_liens .= "<a href='$url_mm_talon' title='Caches du même squelette et avec le même contexte'>$bouton_mm_talon</a>";
     1449                                        }
     1450                                        echo '<span style="float: right">'.$boutons_liens.'</span>';
     1451
     1452                                       
    13931453                                        if ($MYREQUEST['EXTRA'] and ($sh != $MYREQUEST["SH"]) // sinon yaura un zoom après et c'est inutile de répéter ici
    1394                                                 and (($tried_get_apc_data and $success)
    1395                                                         or (!$tried_get_apc_data
    1396                                                                 and ($data = get_apc_data($entry['info'], $success))))) {
     1454                                                and $data_success) {
    13971455                                                $extra = null;
    13981456                                                $liens = '';
     
    15231581                                                $menuzoom .= "<a href='$url' class='menuzoom'>Replier</a>";
    15241582                                               
    1525                                                 if (apcu_exists($entry['info'])) {
    1526                                                         $d = apcu_fetch($entry['info'], $success);
    1527                                                         if ($success) {
    1528                                                                 echo "<p>$menuzoom</p>";
    1529                                                                 if (is_array($d) and (count($d) == 1) and is_serialized($d[0]))
    1530                                                                         echo "<xmp>" . spipsafe_unserialize($d[0]) . "</xmp>";
    1531                                                                 else
    1532                                                                         echo "fetch ok, val non sérialisée :<br><xmp>" . print_r($d, 1) . "</xmp>";
    1533                                                         } else
    1534                                                                 echo "fetch failed";
    1535                                                 } else
    1536                                                         echo '(doesnt exist in apc)';
     1583                                                if ($data_success) {
     1584                                                        echo "<p>$menuzoom</p>";
     1585                                                        echo '<xmp>' . print_r($data, 1) . '</xmp>';
     1586                                                } else {
     1587                                                        if (!apcu_exists($entry['info']))
     1588                                                                echo '(! doesnt exist anymore !)';
     1589                                                        else
     1590                                                                echo '(! fetch failed !)';
     1591                                                }
    15371592                                                echo '</td>';
    15381593                                                echo '</tr>';
Note: See TracChangeset for help on using the changeset viewer.