Changeset 107419 in spip-zone


Ignore:
Timestamp:
Nov 8, 2017, 1:01:04 PM (21 months ago)
Author:
jluc@…
Message:

tidy up

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/xray/trunk/xray_apc.php

    r107389 r107419  
    11<?php
    22/*
    3   +----------------------------------------------------------------------+
    4   | APC                                                                  |
    5   +----------------------------------------------------------------------+
    6   | Copyright (c) 2006-2011 The PHP Group                                |
    7   +----------------------------------------------------------------------+
    8   | This source file is subject to version 3.01 of the PHP license,      |
    9   | that is bundled with this package in the file LICENSE, and is        |
    10   | available through the world-wide-web at the following url:           |
    11   | http://www.php.net/license/3_01.txt                                  |
    12   | If you did not receive a copy of the PHP license and are unable to   |
    13   | obtain it through the world-wide-web, please send a note to          |
    14   | license@php.net so we can mail you a copy immediately.               |
    15   +----------------------------------------------------------------------+
    16   | Authors: Ralf Becker <beckerr@php.net>                               |
    17   |          Rasmus Lerdorf <rasmus@php.net>                             |
    18   |          Ilia Alshanetsky <ilia@prohost.org>                         |
    19   |          JLuc http://contrib.spip.net/JLuc                           |
    20   +----------------------------------------------------------------------+
    21 
    22    All other licensing and usage conditions are those of the PHP Group.
    23 
    24  */
    25  
     3+----------------------------------------------------------------------+
     4| APC                                                                  |
     5+----------------------------------------------------------------------+
     6| Copyright (c) 2006-2011 The PHP Group                                |
     7+----------------------------------------------------------------------+
     8| This source file is subject to version 3.01 of the PHP license,      |
     9| that is bundled with this package in the file LICENSE, and is        |
     10| available through the world-wide-web at the following url:           |
     11| http://www.php.net/license/3_01.txt                                  |
     12| If you did not receive a copy of the PHP license and are unable to   |
     13| obtain it through the world-wide-web, please send a note to          |
     14| license@php.net so we can mail you a copy immediately.               |
     15+----------------------------------------------------------------------+
     16| Authors: Ralf Becker <beckerr@php.net>                               |
     17|          Rasmus Lerdorf <rasmus@php.net>                             |
     18|          Ilia Alshanetsky <ilia@prohost.org>                         |
     19|          JLuc http://contrib.spip.net/JLuc                           |
     20+----------------------------------------------------------------------+
     21
     22All other licensing and usage conditions are those of the PHP Group.
     23
     24*/
     25
    2626if (!autoriser('webmestre'))
    27         die ("Autorisation non accordée : devenez webmestre d'abord.");
    28 
    29 $VERSION='$Id$';
     27        die("Autorisation non accordée : devenez webmestre d'abord.");
     28
     29$VERSION = '$Id$';
    3030
    3131////////// READ OPTIONAL CONFIGURATION FILE ////////////
    32 if (file_exists("apc.conf.php")) include("apc.conf.php");
     32if (file_exists("apc.conf.php"))
     33        include("apc.conf.php");
    3334////////////////////////////////////////////////////////
    3435
    3536////////// BEGIN OF DEFAULT CONFIG AREA ///////////////////////////////////////////////////////////
    3637
    37 defaults('USE_AUTHENTICATION',0);                       // Use (internal) authentication - best choice if
    38                                                                                         // no other authentication is available
    39                                                                                         // If set to 0:
    40                                                                                         //  There will be no further authentication. You
    41                                                                                         //  will have to handle this by yourself!
    42                                                                                         // If set to 1:
    43                                                                                         //  You need to change ADMIN_PASSWORD to make
    44                                                                                         //  this work!
    45 defaults('ADMIN_USERNAME','admin');                     // Admin Username
    46 defaults('ADMIN_PASSWORD', 'password');         // Admin Password - CHANGE THIS TO ENABLE!!!
     38defaults('USE_AUTHENTICATION', 0); // Use (internal) authentication - best choice if
     39// no other authentication is available
     40// If set to 0:
     41//  There will be no further authentication. You
     42//  will have to handle this by yourself!
     43// If set to 1:
     44//  You need to change ADMIN_PASSWORD to make
     45//  this work!
     46defaults('ADMIN_USERNAME', 'admin'); // Admin Username
     47defaults('ADMIN_PASSWORD', 'password'); // Admin Password - CHANGE THIS TO ENABLE!!!
    4748
    4849// (beckerr) I'm using a clear text password here, because I've no good idea how to let
     
    5051
    5152// defaults('DATE_FORMAT', "d.m.Y H:i:s");      // German
    52 defaults('DATE_FORMAT', 'Y/m/d H:i:s');         // US
    53 
    54 defaults('GRAPH_SIZE',400);                                     // Image size
     53defaults('DATE_FORMAT', 'Y/m/d H:i:s'); // US
     54
     55defaults('GRAPH_SIZE', 400); // Image size
    5556
    5657//defaults('PROXY', 'tcp://127.0.0.1:8080');
     
    5859// _CACHE_NAMESPACE est défini par memoization et préfixe chaque nom de cache SPIP
    5960// On ne souhaite pas que cette partie du nom s'affiche sur chaque ligne
    60 define ('XRAY_NEPASAFFICHER_DEBUTNOMCACHE', _CACHE_NAMESPACE);
     61define('XRAY_NEPASAFFICHER_DEBUTNOMCACHE', _CACHE_NAMESPACE);
    6162
    6263////////// END OF DEFAULT CONFIG AREA /////////////////////////////////////////////////////////////
     
    6465// Strings utils
    6566
    66 function is_serialized($str) {
    67     return ($str == serialize(false) || @unserialize($str) !== false);
    68 }
    69 function get_serial_class($serial) {
    70     $types = array('s' => 'string', 'a' => 'array', 'b' => 'bool', 'i' => 'int', 'd' => 'float', 'N;' => 'NULL');
    71    
    72     $parts = explode(':', $serial, 4);
    73     return isset($types[$parts[0]]) ? $types[$parts[0]] : trim($parts[2], '"');
    74 }
    75 function spipsafe_unserialize($str) {
     67function is_serialized($str)
     68{
     69        return ($str == serialize(false) || @unserialize($str) !== false);
     70}
     71function get_serial_class($serial)
     72{
     73        $types = array(
     74                's' => 'string',
     75                'a' => 'array',
     76                'b' => 'bool',
     77                'i' => 'int',
     78                'd' => 'float',
     79                'N;' => 'NULL'
     80        );
     81       
     82        $parts = explode(':', $serial, 4);
     83        return isset($types[$parts[0]]) ? $types[$parts[0]] : trim($parts[2], '"');
     84}
     85function spipsafe_unserialize($str)
     86{
    7687        if (strpos($str, "SPIPTextWheelRuleset") !== false) {
    77                 if (isset($_GET['ZOOM']) and ($_GET['ZOOM']=='TEXTECOURT'))
    78                         return "Début : ".substr(trim($str), 0, 80).'...';
     88                if (isset($_GET['ZOOM']) and ($_GET['ZOOM'] == 'TEXTECOURT'))
     89                        return "Début : " . substr(trim($str), 0, 80) . '...';
    7990                else
    8091                        return "Brut : $str";
    8192        }
    8293        $unser = unserialize($str);
    83         if (is_array($unser) and isset ($unser['texte'])
    84                 and isset($_GET['ZOOM']) and ($_GET['ZOOM']=='TEXTECOURT')) {
    85                 $unser['texte'] = trim(preg_replace ('/\s+/', ' ', $unser['texte']));
    86                 if (mb_strlen($unser['texte'])>80)
    87                         $unser['texte'] = mb_substr($unser['texte'], 0, 80).'...';
     94        if (is_array($unser) and isset($unser['texte']) and isset($_GET['ZOOM']) and ($_GET['ZOOM'] == 'TEXTECOURT')) {
     95                $unser['texte'] = trim(preg_replace('/\s+/', ' ', $unser['texte']));
     96                if (mb_strlen($unser['texte']) > 80)
     97                        $unser['texte'] = mb_substr($unser['texte'], 0, 80) . '...';
    8898                elseif (!$unser['texte'])
    89                         $unser['texte']='(vide)';
    90         }
    91         return "Unserialized : ".print_r($unser,1);
    92 }
    93 function print_contexte($extra, $tostring) {
     99                        $unser['texte'] = '(vide)';
     100        }
     101        return "Unserialized : " . print_r($unser, 1);
     102}
     103function print_contexte($extra, $tostring)
     104{
    94105        $print = print_r($extra, 1);
    95106        if (stripos($print, 'Array') === 0) {
    96                 $print = trim (substr($print, 5), " (\n\r\t");
    97                 $print = preg_replace_callback(
    98                         "/\[id_([a-z\-_]+)\]\s*=>\s*(\d+)$/im",
    99                         function ($match) { return $match[0].'</xmp>'.bouton_objet ($match[1], $match[2]).'<xmp>'; },
    100                         $print);
    101         };
     107                $print = trim(substr($print, 5), " (\n\r\t");
     108                $print = preg_replace_callback("/\[id_([a-z\-_]+)\]\s*=>\s*(\d+)$/im", function($match)
     109                {
     110                        return $match[0] . '</xmp>' . bouton_objet($match[1], $match[2]) . '<xmp>';
     111                }, $print);
     112        }
    102113        if ($tostring)
    103114                return $print;
    104115        echo $print;
    105 };
    106 
    107 function bouton_objet($objet, $id_objet) {
    108         $objet_visible=$objet;
    109         if ($objet=='secteur')
    110                 $objet='rubrique';
    111         else
    112                 $objet=$objet;
     116}
     117
     118function bouton_objet($objet, $id_objet)
     119{
     120        $objet_visible = $objet;
     121        if ($objet == 'secteur')
     122                $objet = 'rubrique';
     123        else
     124                $objet = $objet;
    113125        return "<a href='/ecrire/?exec=$objet&id_$objet=$id_objet' target='blank'
    114126                        style='position:absolute; right:0px'
    115                         title=".attribut_html(generer_info_entite($id_objet, $objet, 'titre', 'etoile')).">[voir $objet_visible]</a>";
     127                        title=" . attribut_html(generer_info_entite($id_objet, $objet, 'titre', 'etoile')) . ">[voir $objet_visible]</a>";
    116128}
    117129
     
    119131
    120132// "define if not defined"
    121 function defaults($d,$v) {
    122         if (!defined($d)) define($d,$v); // or just @define(...)
     133function defaults($d, $v)
     134{
     135        if (!defined($d))
     136                define($d, $v); // or just @define(...)
    123137}
    124138
    125139// rewrite $PHP_SELF to block XSS attacks
    126140//
    127 $PHP_SELF= isset($_SERVER['PHP_SELF']) ? htmlentities(strip_tags($_SERVER['PHP_SELF'],''), ENT_QUOTES, 'UTF-8') : '';
    128 $time = time();
    129 $host = php_uname('n');
    130 if($host) { $host = '('.$host.')'; }
     141$PHP_SELF = isset($_SERVER['PHP_SELF']) ? htmlentities(strip_tags($_SERVER['PHP_SELF'], ''), ENT_QUOTES, 'UTF-8') : '';
     142$time     = time();
     143$host     = php_uname('n');
     144if ($host) {
     145        $host = '(' . $host . ')';
     146}
    131147if (isset($_SERVER['SERVER_ADDR'])) {
    132   $host .= ' ('.$_SERVER['SERVER_ADDR'].')';
     148        $host .= ' (' . $_SERVER['SERVER_ADDR'] . ')';
    133149}
    134150
    135151// operation constants
    136 define('OB_HOST_STATS',1);
    137 define('OB_USER_CACHE',2);
    138 define('OB_VERSION_CHECK',3);
     152define('OB_HOST_STATS', 1);
     153define('OB_USER_CACHE', 2);
     154define('OB_VERSION_CHECK', 3);
    139155
    140156// check validity of input variables
    141 $vardom=array(
    142         'exec'  => '/^[a-zA-Z_\-0-9]+$/',       // pour #URL_ECRIRE{xray}
    143         'OB'    => '/^\d+$/',                   // operational mode switch
    144         'CC'    => '/^[01]$/',                  // clear cache requested
    145         'DU'    => '/^.*$/',                    // Delete User Key
    146         'SH'    => '/^[a-z0-9]*$/',             // shared object description
    147 
    148         'IMG'   => '/^[123]$/',                 // image to generate
    149         'LO'    => '/^1$/',                             // login requested
    150 
    151         'COUNT' => '/^\d+$/',                   // number of line displayed in list
    152         'SCOPE' => '/^[AD]$/',                  // list view scope
    153         'S_KEY' => '/^[AHSMCDTZ]$/',    // first sort key
    154         'SORT'  => '/^[DA]$/',                  // second sort key
    155         'AGGR'  => '/^\d+$/',                   // aggregation by dir level
    156         'SEARCH'        => '~^[a-zA-Z0-9/_.\-\$\^]*$~',                 // aggregation by dir level
    157         'TYPECACHE' => '/^(|ALL|SESSIONS|SESSIONS_AUTH|SESSIONS_NONAUTH|FORMULAIRES)$/',        //
    158         'ZOOM' => '/^(|TEXTECOURT|TEXTELONG)$/',        //
    159         'EXTRA' => '/^(|CONTEXTE|CONTEXTES_SPECIAUX|INFO_AUTEUR|INVALIDEURS|INVALIDEURS_SPECIAUX)$/',   //
     157$vardom = array(
     158        'exec' => '/^[a-zA-Z_\-0-9]+$/', // pour #URL_ECRIRE{xray}
     159        'OB' => '/^\d+$/', // operational mode switch
     160        'CC' => '/^[01]$/', // clear cache requested
     161        'DU' => '/^.*$/', // Delete User Key
     162        'SH' => '/^[a-z0-9]*$/', // shared object description
     163       
     164        'IMG' => '/^[123]$/', // image to generate
     165        'LO' => '/^1$/', // login requested
     166       
     167        'COUNT' => '/^\d+$/', // number of line displayed in list
     168        'SCOPE' => '/^[AD]$/', // list view scope
     169        'S_KEY' => '/^[AHSMCDTZ]$/', // first sort key
     170        'SORT' => '/^[DA]$/', // second sort key
     171        'AGGR' => '/^\d+$/', // aggregation by dir level
     172        'SEARCH' => '~^[a-zA-Z0-9/_.\-\$\^]*$~', // aggregation by dir level
     173        'TYPECACHE' => '/^(|ALL|SESSIONS|SESSIONS_AUTH|SESSIONS_NONAUTH|FORMULAIRES)$/', //
     174        'ZOOM' => '/^(|TEXTECOURT|TEXTELONG)$/', //
     175        'EXTRA' => '/^(|CONTEXTE|CONTEXTES_SPECIAUX|INFO_AUTEUR|INVALIDEURS|INVALIDEURS_SPECIAUX)$/' //
    160176);
    161177
    162178// cache scope
    163 $scope_list=array(
     179$scope_list = array(
    164180        'A' => 'cache_list',
    165181        'D' => 'deleted_list'
    166182);
    167183
    168 global $MYREQUEST;                                                                                                              // fix apcu
     184global $MYREQUEST; // fix apcu
    169185// handle POST and GET requests
    170186if (empty($_REQUEST)) {
     
    181197
    182198// check parameter syntax
    183 foreach($vardom as $var => $dom) {
     199foreach ($vardom as $var => $dom) {
    184200        if (!isset($_REQUEST[$var]))
    185                 $MYREQUEST[$var]=NULL;
    186         else if (!is_array($_REQUEST[$var]) && preg_match($dom.'D',$_REQUEST[$var]))
    187                 $MYREQUEST[$var]=$_REQUEST[$var];
     201                $MYREQUEST[$var] = NULL;
     202        else if (!is_array($_REQUEST[$var]) && preg_match($dom . 'D', $_REQUEST[$var]))
     203                $MYREQUEST[$var] = $_REQUEST[$var];
    188204        else {
    189205                echo "<xmp>ERREUR avec parametre d'url « $var » qui vaut « {$_REQUEST[$var]} »</xmp>";
    190                 $MYREQUEST[$var]=$_REQUEST[$var]=NULL;
     206                $MYREQUEST[$var] = $_REQUEST[$var] = NULL;
    191207        }
    192208}
    193209
    194210// check parameter sematics
    195 if (empty($MYREQUEST['SCOPE'])) $MYREQUEST['SCOPE']="A";
    196 if (empty($MYREQUEST['S_KEY'])) $MYREQUEST['S_KEY']="H";
    197 if (empty($MYREQUEST['SORT'])) $MYREQUEST['SORT']="D";
    198 if (empty($MYREQUEST['OB']))    $MYREQUEST['OB']=OB_HOST_STATS;
    199 if (!isset($MYREQUEST['COUNT'])) $MYREQUEST['COUNT']=20;
    200 if (!isset($scope_list[$MYREQUEST['SCOPE']])) $MYREQUEST['SCOPE']='A';
    201 
    202 global $MY_SELF;                                                                                                                // fix apcu
    203 global $MY_SELF_WO_SORT;                                                                                                // fix apcu
    204 $MY_SELF_WO_SORT=
    205         "$PHP_SELF"
    206         ."?SCOPE=".$MYREQUEST['SCOPE']
    207         ."&COUNT=".$MYREQUEST['COUNT']
    208         ."&SEARCH=".$MYREQUEST['SEARCH']
    209         ."&TYPECACHE=".$MYREQUEST['TYPECACHE']
    210         ."&ZOOM=".$MYREQUEST['ZOOM']
    211         ."&EXTRA=".$MYREQUEST['EXTRA']
    212         ."&exec=".$MYREQUEST['exec']
    213         ."&OB=".$MYREQUEST['OB']
    214         ;
    215 $MY_SELF=$MY_SELF_WO_SORT
    216         ."&S_KEY=".$MYREQUEST['S_KEY']
    217         ."&SORT=".$MYREQUEST['SORT']
    218         ;
    219 $self = "http".(!empty($_SERVER['HTTPS'])?"s":"")."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
     211if (empty($MYREQUEST['SCOPE']))
     212        $MYREQUEST['SCOPE'] = "A";
     213if (empty($MYREQUEST['S_KEY']))
     214        $MYREQUEST['S_KEY'] = "H";
     215if (empty($MYREQUEST['SORT']))
     216        $MYREQUEST['SORT'] = "D";
     217if (empty($MYREQUEST['OB']))
     218        $MYREQUEST['OB'] = OB_HOST_STATS;
     219if (!isset($MYREQUEST['COUNT']))
     220        $MYREQUEST['COUNT'] = 20;
     221if (!isset($scope_list[$MYREQUEST['SCOPE']]))
     222        $MYREQUEST['SCOPE'] = 'A';
     223
     224global $MY_SELF; // fix apcu
     225global $MY_SELF_WO_SORT; // fix apcu
     226$MY_SELF_WO_SORT = "$PHP_SELF" . "?SCOPE=" . $MYREQUEST['SCOPE'] . "&COUNT=" . $MYREQUEST['COUNT'] . "&SEARCH=" . $MYREQUEST['SEARCH'] . "&TYPECACHE=" . $MYREQUEST['TYPECACHE'] . "&ZOOM=" . $MYREQUEST['ZOOM'] . "&EXTRA=" . $MYREQUEST['EXTRA'] . "&exec=" . $MYREQUEST['exec'] . "&OB=" . $MYREQUEST['OB'];
     227$MY_SELF         = $MY_SELF_WO_SORT . "&S_KEY=" . $MYREQUEST['S_KEY'] . "&SORT=" . $MYREQUEST['SORT'];
     228$self            = "http" . (!empty($_SERVER['HTTPS']) ? "s" : "") . "://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    220229
    221230global $IMG_BASE;
    222 $IMG_BASE=
    223         "$PHP_SELF".
    224         "?exec=".$MYREQUEST['exec'];
     231$IMG_BASE = "$PHP_SELF" . "?exec=" . $MYREQUEST['exec'];
    225232
    226233// authentication needed?
    227234//
    228235if (!USE_AUTHENTICATION) {
    229         $AUTHENTICATED=1;
     236        $AUTHENTICATED = 1;
    230237} else {
    231         $AUTHENTICATED=0;
    232         if (ADMIN_PASSWORD!='password' && ($MYREQUEST['LO'] == 1 || isset($_SERVER['PHP_AUTH_USER']))) {
    233 
    234                 if (!isset($_SERVER['PHP_AUTH_USER']) ||
    235                         !isset($_SERVER['PHP_AUTH_PW']) ||
    236                         $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME ||
    237                         $_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
     238        $AUTHENTICATED = 0;
     239        if (ADMIN_PASSWORD != 'password' && ($MYREQUEST['LO'] == 1 || isset($_SERVER['PHP_AUTH_USER']))) {
     240               
     241                if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME || $_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
    238242                        Header("WWW-Authenticate: Basic realm=\"APC Login\"");
    239243                        Header("HTTP/1.0 401 Unauthorized");
    240 
     244                       
    241245                        echo <<<EOB
    242246                                <html><body>
     
    247251EOB;
    248252                        exit;
    249 
     253                       
    250254                } else {
    251                         $AUTHENTICATED=1;
     255                        $AUTHENTICATED = 1;
    252256                }
    253257        }
     
    263267}
    264268
    265 if(!function_exists('apcu_cache_info')) {
     269if (!function_exists('apcu_cache_info')) {
    266270        echo "No cache info available.  APC does not appear to be running.";
    267   exit;
     271        exit;
    268272}
    269273
    270274$cache = apcu_cache_info();
    271275
    272 $mem=apcu_sma_info();
     276$mem = apcu_sma_info();
    273277
    274278// don't cache this page
    275279//
    276 header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
     280header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
    277281header("Cache-Control: post-check=0, pre-check=0", false);
    278 header("Pragma: no-cache");                                    // HTTP/1.0
    279 
    280 function duration($ts) {
    281     global $time;
    282     $years = (int)((($time - $ts)/(7*86400))/52.177457);
    283     $rem = (int)(($time-$ts)-($years * 52.177457 * 7 * 86400));
    284     $weeks = (int)(($rem)/(7*86400));
    285     $days = (int)(($rem)/86400) - $weeks*7;
    286     $hours = (int)(($rem)/3600) - $days*24 - $weeks*7*24;
    287     $mins = (int)(($rem)/60) - $hours*60 - $days*24*60 - $weeks*7*24*60;
    288     $str = '';
    289     if($years==1) $str .= "$years year, ";
    290     if($years>1) $str .= "$years years, ";
    291     if($weeks==1) $str .= "$weeks week, ";
    292     if($weeks>1) $str .= "$weeks weeks, ";
    293     if($days==1) $str .= "$days day,";
    294     if($days>1) $str .= "$days days,";
    295     if($hours == 1) $str .= " $hours hour and";
    296     if($hours>1) $str .= " $hours hours and";
    297     if($mins == 1) $str .= " 1 minute";
    298     else $str .= " $mins minutes";
    299     return $str;
     282header("Pragma: no-cache"); // HTTP/1.0
     283
     284function duration($ts)
     285{
     286        global $time;
     287        $years = (int) ((($time - $ts) / (7 * 86400)) / 52.177457);
     288        $rem   = (int) (($time - $ts) - ($years * 52.177457 * 7 * 86400));
     289        $weeks = (int) (($rem) / (7 * 86400));
     290        $days  = (int) (($rem) / 86400) - $weeks * 7;
     291        $hours = (int) (($rem) / 3600) - $days * 24 - $weeks * 7 * 24;
     292        $mins  = (int) (($rem) / 60) - $hours * 60 - $days * 24 * 60 - $weeks * 7 * 24 * 60;
     293        $str   = '';
     294        if ($years == 1)
     295                $str .= "$years year, ";
     296        if ($years > 1)
     297                $str .= "$years years, ";
     298        if ($weeks == 1)
     299                $str .= "$weeks week, ";
     300        if ($weeks > 1)
     301                $str .= "$weeks weeks, ";
     302        if ($days == 1)
     303                $str .= "$days day,";
     304        if ($days > 1)
     305                $str .= "$days days,";
     306        if ($hours == 1)
     307                $str .= " $hours hour and";
     308        if ($hours > 1)
     309                $str .= " $hours hours and";
     310        if ($mins == 1)
     311                $str .= " 1 minute";
     312        else
     313                $str .= " $mins minutes";
     314        return $str;
    300315}
    301316
    302317// create graphics
    303318//
    304 function graphics_avail() {
     319function graphics_avail()
     320{
    305321        return extension_loaded('gd');
    306322}
    307 if (isset($MYREQUEST['IMG']))
    308 {
     323if (isset($MYREQUEST['IMG'])) {
    309324        if (!graphics_avail()) {
    310325                exit(0);
    311326        }
    312 
    313         function fill_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1,$color2,$text='',$placeindex=0) {
    314                 $r=$diameter/2;
    315                 $w=deg2rad((360+$start+($end-$start)/2)%360);
    316 
    317 
     327       
     328        function fill_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1, $color2, $text = '', $placeindex = 0)
     329        {
     330                $r = $diameter / 2;
     331                $w = deg2rad((360 + $start + ($end - $start) / 2) % 360);
     332               
     333               
    318334                if (function_exists("imagefilledarc")) {
    319335                        // exists only if GD 2.0.1 is avaliable
    320                         imagefilledarc($im, $centerX+1, $centerY+1, $diameter, $diameter, $start, $end, $color1, IMG_ARC_PIE);
     336                        imagefilledarc($im, $centerX + 1, $centerY + 1, $diameter, $diameter, $start, $end, $color1, IMG_ARC_PIE);
    321337                        imagefilledarc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color2, IMG_ARC_PIE);
    322                         imagefilledarc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color1, IMG_ARC_NOFILL|IMG_ARC_EDGED);
     338                        imagefilledarc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color1, IMG_ARC_NOFILL | IMG_ARC_EDGED);
    323339                } else {
    324340                        imagearc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color2);
    325341                        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($start)) * $r, $centerY + sin(deg2rad($start)) * $r, $color2);
    326                         imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($start+1)) * $r, $centerY + sin(deg2rad($start)) * $r, $color2);
    327                         imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($end-1))   * $r, $centerY + sin(deg2rad($end))  * $r, $color2);
    328                         imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($end))   * $r, $centerY + sin(deg2rad($end))  * $r, $color2);
    329                         imagefill($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2, $color2);
     342                        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($start + 1)) * $r, $centerY + sin(deg2rad($start)) * $r, $color2);
     343                        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($end - 1)) * $r, $centerY + sin(deg2rad($end)) * $r, $color2);
     344                        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($end)) * $r, $centerY + sin(deg2rad($end)) * $r, $color2);
     345                        imagefill($im, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $color2);
    330346                }
    331347                if ($text) {
    332                         if ($placeindex>0) {
    333                                 imageline($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$diameter, $placeindex*12,$color1);
    334                                 imagestring($im,4,$diameter, $placeindex*12,$text,$color1);
    335 
     348                        if ($placeindex > 0) {
     349                                imageline($im, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $diameter, $placeindex * 12, $color1);
     350                                imagestring($im, 4, $diameter, $placeindex * 12, $text, $color1);
     351                               
    336352                        } else {
    337                                 imagestring($im,4,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$text,$color1);
    338                         }
    339                 }
    340         }
    341 
    342         function text_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1,$text,$placeindex=0) {
    343                 $r=$diameter/2;
    344                 $w=deg2rad((360+$start+($end-$start)/2)%360);
    345 
    346                 if ($placeindex>0) {
    347                         imageline($im,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$diameter, $placeindex*12,$color1);
    348                         imagestring($im,4,$diameter, $placeindex*12,$text,$color1);
    349 
     353                                imagestring($im, 4, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $text, $color1);
     354                        }
     355                }
     356        }
     357       
     358        function text_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1, $text, $placeindex = 0)
     359        {
     360                $r = $diameter / 2;
     361                $w = deg2rad((360 + $start + ($end - $start) / 2) % 360);
     362               
     363                if ($placeindex > 0) {
     364                        imageline($im, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $diameter, $placeindex * 12, $color1);
     365                        imagestring($im, 4, $diameter, $placeindex * 12, $text, $color1);
     366                       
    350367                } else {
    351                         imagestring($im,4,$centerX + $r*cos($w)/2, $centerY + $r*sin($w)/2,$text,$color1);
    352                 }
    353         }
    354 
    355         function fill_box($im, $x, $y, $w, $h, $color1, $color2,$text='',$placeindex='') {
     368                        imagestring($im, 4, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $text, $color1);
     369                }
     370        }
     371       
     372        function fill_box($im, $x, $y, $w, $h, $color1, $color2, $text = '', $placeindex = '')
     373        {
    356374                global $col_black;
    357                 $x1=$x+$w-1;
    358                 $y1=$y+$h-1;
    359 
    360                 imagerectangle($im, $x, $y1, $x1+1, $y+1, $col_black);
    361                 if($y1>$y) imagefilledrectangle($im, $x, $y, $x1, $y1, $color2);
    362                 else imagefilledrectangle($im, $x, $y1, $x1, $y, $color2);
     375                $x1 = $x + $w - 1;
     376                $y1 = $y + $h - 1;
     377               
     378                imagerectangle($im, $x, $y1, $x1 + 1, $y + 1, $col_black);
     379                if ($y1 > $y)
     380                        imagefilledrectangle($im, $x, $y, $x1, $y1, $color2);
     381                else
     382                        imagefilledrectangle($im, $x, $y1, $x1, $y, $color2);
    363383                imagerectangle($im, $x, $y1, $x1, $y, $color1);
    364384                if ($text) {
    365                         if ($placeindex>0) {
    366 
    367                                 if ($placeindex<16)
    368                                 {
    369                                         $px=5;
    370                                         $py=$placeindex*12+6;
    371                                         imagefilledrectangle($im, $px+90, $py+3, $px+90-4, $py-3, $color2);
    372                                         imageline($im,$x,$y+$h/2,$px+90,$py,$color2);
    373                                         imagestring($im,2,$px,$py-6,$text,$color1);
    374 
     385                        if ($placeindex > 0) {
     386                               
     387                                if ($placeindex < 16) {
     388                                        $px = 5;
     389                                        $py = $placeindex * 12 + 6;
     390                                        imagefilledrectangle($im, $px + 90, $py + 3, $px + 90 - 4, $py - 3, $color2);
     391                                        imageline($im, $x, $y + $h / 2, $px + 90, $py, $color2);
     392                                        imagestring($im, 2, $px, $py - 6, $text, $color1);
     393                                       
    375394                                } else {
    376                                         if ($placeindex<31) {
    377                                                 $px=$x+40*2;
    378                                                 $py=($placeindex-15)*12+6;
     395                                        if ($placeindex < 31) {
     396                                                $px = $x + 40 * 2;
     397                                                $py = ($placeindex - 15) * 12 + 6;
    379398                                        } else {
    380                                                 $px=$x+40*2+100*intval(($placeindex-15)/15);
    381                                                 $py=($placeindex%15)*12+6;
     399                                                $px = $x + 40 * 2 + 100 * intval(($placeindex - 15) / 15);
     400                                                $py = ($placeindex % 15) * 12 + 6;
    382401                                        }
    383                                         imagefilledrectangle($im, $px, $py+3, $px-4, $py-3, $color2);
    384                                         imageline($im,$x+$w,$y+$h/2,$px,$py,$color2);
    385                                         imagestring($im,2,$px+2,$py-6,$text,$color1);
     402                                        imagefilledrectangle($im, $px, $py + 3, $px - 4, $py - 3, $color2);
     403                                        imageline($im, $x + $w, $y + $h / 2, $px, $py, $color2);
     404                                        imagestring($im, 2, $px + 2, $py - 6, $text, $color1);
    386405                                }
    387406                        } else {
    388                                 imagestring($im,4,$x+5,$y1-16,$text,$color1);
    389                         }
    390                 }
    391         }
    392 
    393 
    394         $size = GRAPH_SIZE/3; // image size
    395         if ($MYREQUEST['IMG']==3)
    396                 $image = imagecreate(3*$size+200, 2*$size+150);
     407                                imagestring($im, 4, $x + 5, $y1 - 16, $text, $color1);
     408                        }
     409                }
     410        }
     411       
     412       
     413        $size = GRAPH_SIZE / 3; // image size
     414        if ($MYREQUEST['IMG'] == 3)
     415                $image = imagecreate(3 * $size + 200, 2 * $size + 150);
    397416        else
    398                 $image = imagecreate($size+50, $size+10);
    399 
     417                $image = imagecreate($size + 50, $size + 10);
     418       
    400419        $col_white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
    401         $col_red   = imagecolorallocate($image, 0xD0, 0x60,  0x30);
     420        $col_red   = imagecolorallocate($image, 0xD0, 0x60, 0x30);
    402421        $col_green = imagecolorallocate($image, 0x60, 0xF0, 0x60);
    403         $col_black = imagecolorallocate($image,   0,   0,  0);
    404         imagecolortransparent($image,$col_white);
    405 
     422        $col_black = imagecolorallocate($image, 0, 0, 0);
     423        imagecolortransparent($image, $col_white);
     424       
    406425        switch ($MYREQUEST['IMG']) {
    407 
    408         case 1:
    409                 $s=$mem['num_seg']*$mem['seg_size'];
    410                 $a=$mem['avail_mem'];
    411                 $x=$y=$size/2;
    412                 $fuzz = 0.000001;
    413 
    414                 // This block of code creates the pie chart.  It is a lot more complex than you
    415                 // would expect because we try to visualize any memory fragmentation as well.
    416                 $angle_from = 0;
    417                 $string_placement=array();
    418                 for($i=0; $i<$mem['num_seg']; $i++) {
    419                         $ptr = 0;
    420                         $free = $mem['block_lists'][$i];
    421                         uasort($free, 'block_sort');
    422                         foreach($free as $block) {
    423                                 if($block['offset']!=$ptr) {       // Used block
    424                                         $angle_to = $angle_from+($block['offset']-$ptr)/$s;
    425                                         if(($angle_to+$fuzz)>1) $angle_to = 1;
    426                                         if( ($angle_to*360) - ($angle_from*360) >= 1) {
    427                                                 fill_arc($image,$x,$y,$size,$angle_from*360,$angle_to*360,$col_black,$col_red);
    428                                                 if (($angle_to-$angle_from)>0.05) {
    429                                                         array_push($string_placement, array($angle_from,$angle_to));
     426               
     427                case 1:
     428                        $s    = $mem['num_seg'] * $mem['seg_size'];
     429                        $a    = $mem['avail_mem'];
     430                        $x    = $y = $size / 2;
     431                        $fuzz = 0.000001;
     432                       
     433                        // This block of code creates the pie chart.  It is a lot more complex than you
     434                        // would expect because we try to visualize any memory fragmentation as well.
     435                        $angle_from       = 0;
     436                        $string_placement = array();
     437                        for ($i = 0; $i < $mem['num_seg']; $i++) {
     438                                $ptr  = 0;
     439                                $free = $mem['block_lists'][$i];
     440                                uasort($free, 'block_sort');
     441                                foreach ($free as $block) {
     442                                        if ($block['offset'] != $ptr) { // Used block
     443                                                $angle_to = $angle_from + ($block['offset'] - $ptr) / $s;
     444                                                if (($angle_to + $fuzz) > 1)
     445                                                        $angle_to = 1;
     446                                                if (($angle_to * 360) - ($angle_from * 360) >= 1) {
     447                                                        fill_arc($image, $x, $y, $size, $angle_from * 360, $angle_to * 360, $col_black, $col_red);
     448                                                        if (($angle_to - $angle_from) > 0.05) {
     449                                                                array_push($string_placement, array(
     450                                                                        $angle_from,
     451                                                                        $angle_to
     452                                                                ));
     453                                                        }
     454                                                }
     455                                                $angle_from = $angle_to;
     456                                        }
     457                                        $angle_to = $angle_from + ($block['size']) / $s;
     458                                        if (($angle_to + $fuzz) > 1)
     459                                                $angle_to = 1;
     460                                        if (($angle_to * 360) - ($angle_from * 360) >= 1) {
     461                                                fill_arc($image, $x, $y, $size, $angle_from * 360, $angle_to * 360, $col_black, $col_green);
     462                                                if (($angle_to - $angle_from) > 0.05) {
     463                                                        array_push($string_placement, array(
     464                                                                $angle_from,
     465                                                                $angle_to
     466                                                        ));
    430467                                                }
    431468                                        }
    432469                                        $angle_from = $angle_to;
     470                                        $ptr        = $block['offset'] + $block['size'];
    433471                                }
    434                                 $angle_to = $angle_from+($block['size'])/$s;
    435                                 if(($angle_to+$fuzz)>1) $angle_to = 1;
    436                                 if( ($angle_to*360) - ($angle_from*360) >= 1) {
    437                                         fill_arc($image,$x,$y,$size,$angle_from*360,$angle_to*360,$col_black,$col_green);
    438                                         if (($angle_to-$angle_from)>0.05) {
    439                                                 array_push($string_placement, array($angle_from,$angle_to));
     472                                if ($ptr < $mem['seg_size']) { // memory at the end
     473                                        $angle_to = $angle_from + ($mem['seg_size'] - $ptr) / $s;
     474                                        if (($angle_to + $fuzz) > 1)
     475                                                $angle_to = 1;
     476                                        fill_arc($image, $x, $y, $size, $angle_from * 360, $angle_to * 360, $col_black, $col_red);
     477                                        if (($angle_to - $angle_from) > 0.05) {
     478                                                array_push($string_placement, array(
     479                                                        $angle_from,
     480                                                        $angle_to
     481                                                ));
    440482                                        }
    441483                                }
    442                                 $angle_from = $angle_to;
    443                                 $ptr = $block['offset']+$block['size'];
    444                         }
    445                         if ($ptr < $mem['seg_size']) { // memory at the end
    446                                 $angle_to = $angle_from + ($mem['seg_size'] - $ptr)/$s;
    447                                 if(($angle_to+$fuzz)>1) $angle_to = 1;
    448                                 fill_arc($image,$x,$y,$size,$angle_from*360,$angle_to*360,$col_black,$col_red);
    449                                 if (($angle_to-$angle_from)>0.05) {
    450                                         array_push($string_placement, array($angle_from,$angle_to));
     484                        }
     485                        foreach ($string_placement as $angle) {
     486                                text_arc($image, $x, $y, $size, $angle[0] * 360, $angle[1] * 360, $col_black, bsize($s * ($angle[1] - $angle[0])));
     487                        }
     488                        break;
     489               
     490                case 2:
     491                        $s = $cache['num_hits'] + $cache['num_misses'];
     492                        $a = $cache['num_hits'];
     493                       
     494                        fill_box($image, 30, $size, 50, $s ? (-$a * ($size - 21) / $s) : 0, $col_black, $col_green, sprintf("%.1f%%", $s ? $cache['num_hits'] * 100 / $s : 0));
     495                        fill_box($image, 130, $size, 50, $s ? -max(4, ($s - $a) * ($size - 21) / $s) : 0, $col_black, $col_red, sprintf("%.1f%%", $s ? $cache['num_misses'] * 100 / $s : 0));
     496                        break;
     497               
     498                case 3:
     499                        $s = $mem['num_seg'] * $mem['seg_size'];
     500                        $a = $mem['avail_mem'];
     501                        $x = 130;
     502                        $y = 1;
     503                        $j = 1;
     504                       
     505                        // This block of code creates the bar chart.  It is a lot more complex than you
     506                        // would expect because we try to visualize any memory fragmentation as well.
     507                        for ($i = 0; $i < $mem['num_seg']; $i++) {
     508                                $ptr  = 0;
     509                                $free = $mem['block_lists'][$i];
     510                                uasort($free, 'block_sort');
     511                                foreach ($free as $block) {
     512                                        if ($block['offset'] != $ptr) { // Used block
     513                                                $h = (GRAPH_SIZE - 5) * ($block['offset'] - $ptr) / $s;
     514                                                if ($h > 0) {
     515                                                        $j++;
     516                                                        if ($j < 75)
     517                                                                fill_box($image, $x, $y, 50, $h, $col_black, $col_red, bsize($block['offset'] - $ptr), $j);
     518                                                        else
     519                                                                fill_box($image, $x, $y, 50, $h, $col_black, $col_red);
     520                                                }
     521                                                $y += $h;
     522                                        }
     523                                        $h = (GRAPH_SIZE - 5) * ($block['size']) / $s;
     524                                        if ($h > 0) {
     525                                                $j++;
     526                                                if ($j < 75)
     527                                                        fill_box($image, $x, $y, 50, $h, $col_black, $col_green, bsize($block['size']), $j);
     528                                                else
     529                                                        fill_box($image, $x, $y, 50, $h, $col_black, $col_green);
     530                                        }
     531                                        $y += $h;
     532                                        $ptr = $block['offset'] + $block['size'];
    451533                                }
    452                         }
    453                 }
    454                 foreach ($string_placement as $angle) {
    455                         text_arc($image,$x,$y,$size,$angle[0]*360,$angle[1]*360,$col_black,bsize($s*($angle[1]-$angle[0])));
    456                 }
    457                 break;
    458 
    459         case 2:
    460                 $s=$cache['num_hits']+$cache['num_misses'];
    461                 $a=$cache['num_hits'];
    462 
    463                 fill_box($image, 30,$size,50,$s ? (-$a*($size-21)/$s) : 0,$col_black,$col_green,sprintf("%.1f%%",$s ? $cache['num_hits']*100/$s : 0));
    464                 fill_box($image,130,$size,50,$s ? -max(4,($s-$a)*($size-21)/$s) : 0,$col_black,$col_red,sprintf("%.1f%%",$s ? $cache['num_misses']*100/$s : 0));
    465                 break;
    466 
    467         case 3:
    468                 $s=$mem['num_seg']*$mem['seg_size'];
    469                 $a=$mem['avail_mem'];
    470                 $x=130;
    471                 $y=1;
    472                 $j=1;
    473 
    474                 // This block of code creates the bar chart.  It is a lot more complex than you
    475                 // would expect because we try to visualize any memory fragmentation as well.
    476                 for($i=0; $i<$mem['num_seg']; $i++) {
    477                         $ptr = 0;
    478                         $free = $mem['block_lists'][$i];
    479                         uasort($free, 'block_sort');
    480                         foreach($free as $block) {
    481                                 if($block['offset']!=$ptr) {       // Used block
    482                                         $h=(GRAPH_SIZE-5)*($block['offset']-$ptr)/$s;
    483                                         if ($h>0) {
    484                                                 $j++;
    485                                                 if($j<75) fill_box($image,$x,$y,50,$h,$col_black,$col_red,bsize($block['offset']-$ptr),$j);
    486                                                 else fill_box($image,$x,$y,50,$h,$col_black,$col_red);
    487                                         }
    488                                         $y+=$h;
     534                                if ($ptr < $mem['seg_size']) { // memory at the end
     535                                        $h = (GRAPH_SIZE - 5) * ($mem['seg_size'] - $ptr) / $s;
     536                                        if ($h > 0) {
     537                                                fill_box($image, $x, $y, 50, $h, $col_black, $col_red, bsize($mem['seg_size'] - $ptr), $j++);
     538                                        }
    489539                                }
    490                                 $h=(GRAPH_SIZE-5)*($block['size'])/$s;
    491                                 if ($h>0) {
    492                                         $j++;
    493                                         if($j<75) fill_box($image,$x,$y,50,$h,$col_black,$col_green,bsize($block['size']),$j);
    494                                         else fill_box($image,$x,$y,50,$h,$col_black,$col_green);
    495                                 }
    496                                 $y+=$h;
    497                                 $ptr = $block['offset']+$block['size'];
    498                         }
    499                         if ($ptr < $mem['seg_size']) { // memory at the end
    500                                 $h = (GRAPH_SIZE-5) * ($mem['seg_size'] - $ptr) / $s;
    501                                 if ($h > 0) {
    502                                         fill_box($image,$x,$y,50,$h,$col_black,$col_red,bsize($mem['seg_size']-$ptr),$j++);
    503                                 }
    504                         }
    505                 }
    506                 break;
    507 
     540                        }
     541                        break;
     542               
    508543                case 4:
    509                         $s=$cache['num_hits']+$cache['num_misses'];
    510                         $a=$cache['num_hits'];
    511 
    512                         fill_box($image, 30,$size,50,$s ? -$a*($size-21)/$s : 0,$col_black,$col_green,sprintf("%.1f%%", $s ? $cache['num_hits']*100/$s : 0));
    513                         fill_box($image,130,$size,50,$s ? -max(4,($s-$a)*($size-21)/$s) : 0,$col_black,$col_red,sprintf("%.1f%%", $s ? $cache['num_misses']*100/$s : 0));
    514                 break;
    515         }
    516 
     544                        $s = $cache['num_hits'] + $cache['num_misses'];
     545                        $a = $cache['num_hits'];
     546                       
     547                        fill_box($image, 30, $size, 50, $s ? -$a * ($size - 21) / $s : 0, $col_black, $col_green, sprintf("%.1f%%", $s ? $cache['num_hits'] * 100 / $s : 0));
     548                        fill_box($image, 130, $size, 50, $s ? -max(4, ($s - $a) * ($size - 21) / $s) : 0, $col_black, $col_red, sprintf("%.1f%%", $s ? $cache['num_misses'] * 100 / $s : 0));
     549                        break;
     550        }
     551       
    517552        header("Content-type: image/png");
    518553        imagepng($image);
     
    522557// pretty printer for byte values
    523558//
    524 function bsize($s) {
    525         foreach (array('','K','M','G') as $i => $k) {
    526                 if ($s < 1024) break;
    527                 $s/=1024;
    528         }
    529         return sprintf("%5.1f %sBytes",$s,$k);
     559function bsize($s)
     560{
     561        foreach (array(
     562                '',
     563                'K',
     564                'M',
     565                'G'
     566        ) as $i => $k) {
     567                if ($s < 1024)
     568                        break;
     569                $s /= 1024;
     570        }
     571        return sprintf("%5.1f %sBytes", $s, $k);
    530572}
    531573
    532574// sortable table header in "scripts for this host" view
    533 function sortheader($key,$name,$extra='') {
    534 global $MYREQUEST;                     
    535 global $MY_SELF_WO_SORT;        // fix apcu : il faut global ici aussi
    536 
     575function sortheader($key, $name, $extra = '')
     576{
     577        global $MYREQUEST;
     578        global $MY_SELF_WO_SORT; // fix apcu : il faut global ici aussi
     579       
    537580        // fix apcu l'affichage des headers ne doit pas changer $MYREQUEST
    538581        $SORT = $MYREQUEST['SORT'];
    539         if (!$SORT) 
     582        if (!$SORT)
    540583                $SORT = 'D';
    541         if ($MYREQUEST['S_KEY']==$key)
    542                 $SORT = (($SORT=='A') ? 'D' : 'A');
     584        if ($MYREQUEST['S_KEY'] == $key)
     585                $SORT = (($SORT == 'A') ? 'D' : 'A');
    543586        $url = "$MY_SELF_WO_SORT$extra&S_KEY=$key&SORT=$SORT";
    544587        return "<a class=sortable href='$url'>$name</a>";
     
    546589
    547590// create menu entry
    548 function menu_entry($ob,$title) {
    549         global $MYREQUEST; global $MY_SELF;     // fix apcu
    550         if ($MYREQUEST['OB']!=$ob) {
    551                 return "<li><a href='".parametre_url($MY_SELF,'OB', $ob)."'>$title</a></li>";
     591function menu_entry($ob, $title)
     592{
     593        global $MYREQUEST;
     594        global $MY_SELF; // fix apcu
     595        if ($MYREQUEST['OB'] != $ob) {
     596                return "<li><a href='" . parametre_url($MY_SELF, 'OB', $ob) . "'>$title</a></li>";
    552597        } else if (empty($MYREQUEST['SH'])) {
    553598                return "<li><span class=active>$title</span></li>";
     
    557602}
    558603
    559 function put_login_link($s="Login")
     604function put_login_link($s = "Login")
    560605{
    561         global $MY_SELF,$MYREQUEST,$AUTHENTICATED;
     606        global $MY_SELF, $MYREQUEST, $AUTHENTICATED;
    562607        // needs ADMIN_PASSWORD to be changed!
    563608        //
    564609        if (!USE_AUTHENTICATION) {
    565610                return;
    566         } else if (ADMIN_PASSWORD=='password')
    567         {
     611        } else if (ADMIN_PASSWORD == 'password') {
    568612                print <<<EOB
    569613                        <a href="#" onClick="javascript:alert('You need to set a password at the top of apc.php before this will work!');return false";>$s</a>
     
    573617                        '{$_SERVER['PHP_AUTH_USER']}'&nbsp;logged&nbsp;in!
    574618EOB;
    575         } else{
     619        } else {
    576620                print <<<EOB
    577621                        <a href="$MY_SELF&LO=1">$s</a>
     
    593637<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    594638<html>
    595 <head><title>APCu INFO <?php echo $host ?></title>
     639<head><title>APCu INFO <?php
     640echo $host;
     641?></title>
    596642<style><!--
    597643body { background:white; font-size:100.01%; margin:0; padding:0; }
     
    802848        </h1>
    803849        <div class="login">
    804         <?php put_login_link(); ?>
     850        <?php
     851put_login_link();
     852?>
    805853        </div>
    806854        <hr class="apc">
     
    813861        <li><a href="$MY_SELF&SH={$MYREQUEST['SH']}">Refresh Data</a></li>
    814862EOB;
    815 echo
    816         menu_entry(OB_HOST_STATS,'View Host Stats'),
    817         menu_entry(OB_USER_CACHE,'User Cache Entries'),
    818         menu_entry(OB_VERSION_CHECK,'Version Check');
     863echo menu_entry(OB_HOST_STATS, 'View Host Stats'), menu_entry(OB_USER_CACHE, 'User Cache Entries'), menu_entry(OB_VERSION_CHECK, 'Version Check');
    819864
    820865if ($AUTHENTICATED) {
     
    836881
    837882switch ($MYREQUEST['OB']) {
    838 // -----------------------------------------------
    839 // Host Stats
    840 // -----------------------------------------------
    841 case OB_HOST_STATS:
    842         $mem_size = $mem['num_seg']*$mem['seg_size'];
    843         $mem_avail= $mem['avail_mem'];
    844         $mem_used = $mem_size-$mem_avail;
    845         $seg_size = bsize($mem['seg_size']);
    846         $req_rate_user = sprintf("%.2f", $cache['num_hits'] ? (($cache['num_hits']+$cache['num_misses'])/($time-$cache['start_time'])) : 0);
    847         $hit_rate_user = sprintf("%.2f", $cache['num_hits'] ? (($cache['num_hits'])/($time-$cache['start_time'])) : 0);
    848         $miss_rate_user = sprintf("%.2f", $cache['num_misses'] ? (($cache['num_misses'])/($time-$cache['start_time'])) : 0);
    849         $insert_rate_user = sprintf("%.2f", $cache['num_inserts'] ? (($cache['num_inserts'])/($time-$cache['start_time'])) : 0);
    850         $apcversion = phpversion('apcu');
    851         $phpversion = phpversion();
    852         $number_vars = $cache['num_entries'];
    853     $size_vars = bsize($cache['mem_size']);
    854         $i=0;
    855         $_namespace = _CACHE_NAMESPACE;
    856         echo <<< EOB
     883        // -----------------------------------------------
     884        // Host Stats
     885        // -----------------------------------------------
     886        case OB_HOST_STATS:
     887                $mem_size         = $mem['num_seg'] * $mem['seg_size'];
     888                $mem_avail        = $mem['avail_mem'];
     889                $mem_used         = $mem_size - $mem_avail;
     890                $seg_size        = bsize($mem['seg_size']);
     891                $req_rate_user    = sprintf("%.2f", $cache['num_hits'] ? (($cache['num_hits'] + $cache['num_misses']) / ($time - $cache['start_time'])) : 0);
     892                $hit_rate_user    = sprintf("%.2f", $cache['num_hits'] ? (($cache['num_hits']) / ($time - $cache['start_time'])) : 0);
     893                $miss_rate_user   = sprintf("%.2f", $cache['num_misses'] ? (($cache['num_misses']) / ($time - $cache['start_time'])) : 0);
     894                $insert_rate_user = sprintf("%.2f", $cache['num_inserts'] ? (($cache['num_inserts']) / ($time - $cache['start_time'])) : 0);
     895                $apcversion      = phpversion('apcu');
     896                $phpversion      = phpversion();
     897                $number_vars      = $cache['num_entries'];
     898                $size_vars        = bsize($cache['mem_size']);
     899                $i                = 0;
     900                $_namespace      = _CACHE_NAMESPACE;
     901                echo <<< EOB
    857902                <div class="info div1"><h2>Mémoization SPIP</h2>
    858903                <table cellspacing=0><tbody>
     
    860905                </table></div>
    861906EOB;
    862         echo <<< EOB
     907                echo <<< EOB
    863908                <div class="info div1"><h2>General Cache Information</h2>
    864909                <table cellspacing=0><tbody>
     
    866911                <tr class=tr-1><td class=td-0>PHP Version</td><td>$phpversion</td></tr>
    867912EOB;
    868 
    869         if(!empty($_SERVER['SERVER_NAME']))
    870                 echo "<tr class=tr-0><td class=td-0>APCu Host</td><td>{$_SERVER['SERVER_NAME']} $host</td></tr>\n";
    871         if(!empty($_SERVER['SERVER_SOFTWARE']))
    872                 echo "<tr class=tr-1><td class=td-0>Server Software</td><td>{$_SERVER['SERVER_SOFTWARE']}</td></tr>\n";
    873 
    874         echo <<<EOB
     913               
     914                if (!empty($_SERVER['SERVER_NAME']))
     915                        echo "<tr class=tr-0><td class=td-0>APCu Host</td><td>{$_SERVER['SERVER_NAME']} $host</td></tr>\n";
     916                if (!empty($_SERVER['SERVER_SOFTWARE']))
     917                        echo "<tr class=tr-1><td class=td-0>Server Software</td><td>{$_SERVER['SERVER_SOFTWARE']}</td></tr>\n";
     918               
     919                echo <<<EOB
    875920                <tr class=tr-0><td class=td-0>Shared Memory</td><td>{$mem['num_seg']} Segment(s) with $seg_size
    876921    <br/> ({$cache['memory_type']} memory)
    877922    </td></tr>
    878923EOB;
    879         echo   '<tr class=tr-1><td class=td-0>Start Time</td><td>',date(DATE_FORMAT,$cache['start_time']),'</td></tr>';
    880         echo   '<tr class=tr-0><td class=td-0>Uptime</td><td>',duration($cache['start_time']),'</td></tr>';
    881         echo <<<EOB
     924                echo '<tr class=tr-1><td class=td-0>Start Time</td><td>', date(DATE_FORMAT, $cache['start_time']), '</td></tr>';
     925                echo '<tr class=tr-0><td class=td-0>Uptime</td><td>', duration($cache['start_time']), '</td></tr>';
     926                echo <<<EOB
    882927                </tbody></table>
    883928                </div>
     
    900945                <div class="info div2"><h2>Runtime Settings</h2><table cellspacing=0><tbody>
    901946EOB;
    902 
    903         $j = 0;
    904         foreach (ini_get_all('apcu') as $k => $v) {
    905                 echo "<tr class=tr-$j><td class=td-0>",$k,"</td><td>",str_replace(',',',<br />',$v['local_value']),"</td></tr>\n";
    906                 $j = 1 - $j;
    907         }
    908 
    909         if($mem['num_seg']>1 || $mem['num_seg']==1 && count($mem['block_lists'][0])>1)
    910                 $mem_note = "Memory Usage<br /><font size=-2>(multiple slices indicate fragments)</font>";
    911         else
    912                 $mem_note = "Memory Usage";
    913 
    914         echo <<< EOB
     947               
     948                $j = 0;
     949                foreach (ini_get_all('apcu') as $k => $v) {
     950                        echo "<tr class=tr-$j><td class=td-0>", $k, "</td><td>", str_replace(',', ',<br />', $v['local_value']), "</td></tr>\n";
     951                        $j = 1 - $j;
     952                }
     953               
     954                if ($mem['num_seg'] > 1 || $mem['num_seg'] == 1 && count($mem['block_lists'][0]) > 1)
     955                        $mem_note = "Memory Usage<br /><font size=-2>(multiple slices indicate fragments)</font>";
     956                else
     957                        $mem_note = "Memory Usage";
     958               
     959                echo <<< EOB
    915960                </tbody></table>
    916961                </div>
     
    919964                <table cellspacing=0><tbody>
    920965EOB;
    921         $size='width='.(GRAPH_SIZE*2/3).' height='.(GRAPH_SIZE/2);
    922 echo <<<EOB
     966                $size = 'width=' . (GRAPH_SIZE * 2 / 3) . ' height=' . (GRAPH_SIZE / 2);
     967                echo <<<EOB
    923968                <tr>
    924969                <td class=td-0>$mem_note</td>
     
    926971                </tr>
    927972EOB;
    928 
    929         echo
    930                 graphics_avail() ?
    931                           '<tr>'.
    932                           "<td class=td-0><img alt='' $size src='{$IMG_BASE}&IMG=1&$time'></td>".
    933                           "<td class=td-1><img alt='' $size src='{$IMG_BASE}&IMG=2&$time'></td></tr>\n"
    934                         : "",
    935                 '<tr>',
    936                 '<td class=td-0><span class="green box">&nbsp;</span>Free: ',bsize($mem_avail).sprintf(" (%.1f%%)",$mem_avail*100/$mem_size),"</td>\n",
    937                 '<td class=td-1><span class="green box">&nbsp;</span>Hits: ',$cache['num_hits'].@sprintf(" (%.1f%%)",$cache['num_hits']*100/($cache['num_hits']+$cache['num_misses'])),"</td>\n",
    938                 '</tr>',
    939                 '<tr>',
    940                 '<td class=td-0><span class="red box">&nbsp;</span>Used: ',bsize($mem_used).sprintf(" (%.1f%%)",$mem_used *100/$mem_size),"</td>\n",
    941                 '<td class=td-1><span class="red box">&nbsp;</span>Misses: ',$cache['num_misses'].@sprintf(" (%.1f%%)",$cache['num_misses']*100/($cache['num_hits']+$cache['num_misses'])),"</td>\n";
    942         echo <<< EOB
     973               
     974                echo graphics_avail() ? '<tr>' . "<td class=td-0><img alt='' $size src='{$IMG_BASE}&IMG=1&$time'></td>" . "<td class=td-1><img alt='' $size src='{$IMG_BASE}&IMG=2&$time'></td></tr>\n" : "", '<tr>', '<td class=td-0><span class="green box">&nbsp;</span>Free: ', bsize($mem_avail) . sprintf(" (%.1f%%)", $mem_avail * 100 / $mem_size), "</td>\n", '<td class=td-1><span class="green box">&nbsp;</span>Hits: ', $cache['num_hits'] . @sprintf(" (%.1f%%)", $cache['num_hits'] * 100 / ($cache['num_hits'] + $cache['num_misses'])), "</td>\n", '</tr>', '<tr>', '<td class=td-0><span class="red box">&nbsp;</span>Used: ', bsize($mem_used) . sprintf(" (%.1f%%)", $mem_used * 100 / $mem_size), "</td>\n", '<td class=td-1><span class="red box">&nbsp;</span>Misses: ', $cache['num_misses'] . @sprintf(" (%.1f%%)", $cache['num_misses'] * 100 / ($cache['num_hits'] + $cache['num_misses'])), "</td>\n";
     975                echo <<< EOB
    943976                </tr>
    944977                </tbody></table>
     
    950983                <td class=td-0 colspan=2><br/>
    951984EOB;
    952 
    953         // Fragementation: (freeseg - 1) / total_seg
    954         $nseg = $freeseg = $fragsize = $freetotal = 0;
    955         for($i=0; $i<$mem['num_seg']; $i++) {
    956                 $ptr = 0;
    957                 foreach($mem['block_lists'][$i] as $block) {
    958                         if ($block['offset'] != $ptr) {
    959                                 ++$nseg;
    960                         }
    961                         $ptr = $block['offset'] + $block['size'];
    962                         /* Only consider blocks <5M for the fragmentation % */
    963                         if($block['size']<(5*1024*1024)) $fragsize+=$block['size'];
    964                         $freetotal+=$block['size'];
    965                 }
    966                 $freeseg += count($mem['block_lists'][$i]);
    967         }
    968 
    969         if ($freeseg > 1) {
    970                 $frag = sprintf("%.2f%% (%s out of %s in %d fragments)", ($fragsize/$freetotal)*100,bsize($fragsize),bsize($freetotal),$freeseg);
    971         } else {
    972                 $frag = "0%";
    973         }
    974 
    975         if (graphics_avail()) {
    976                 $size='width='.(2*GRAPH_SIZE+150).' height='.(GRAPH_SIZE+10);
     985               
     986                // Fragementation: (freeseg - 1) / total_seg
     987                $nseg = $freeseg = $fragsize = $freetotal = 0;
     988                for ($i = 0; $i < $mem['num_seg']; $i++) {
     989                        $ptr = 0;
     990                        foreach ($mem['block_lists'][$i] as $block) {
     991                                if ($block['offset'] != $ptr) {
     992                                        ++$nseg;
     993                                }
     994                                $ptr = $block['offset'] + $block['size'];
     995                                /* Only consider blocks <5M for the fragmentation % */
     996                                if ($block['size'] < (5 * 1024 * 1024))
     997                                        $fragsize += $block['size'];
     998                                $freetotal += $block['size'];
     999                        }
     1000                        $freeseg += count($mem['block_lists'][$i]);
     1001                }
     1002               
     1003                if ($freeseg > 1) {
     1004                        $frag = sprintf("%.2f%% (%s out of %s in %d fragments)", ($fragsize / $freetotal) * 100, bsize($fragsize), bsize($freetotal), $freeseg);
     1005                } else {
     1006                        $frag = "0%";
     1007                }
     1008               
     1009                if (graphics_avail()) {
     1010                        $size = 'width=' . (2 * GRAPH_SIZE + 150) . ' height=' . (GRAPH_SIZE + 10);
     1011                        echo <<<EOB
     1012                        <img alt="" $size src="{$IMG_BASE}&IMG=3&$time">
     1013EOB;
     1014                }
    9771015                echo <<<EOB
    978                         <img alt="" $size src="{$IMG_BASE}&IMG=3&$time">
    979 EOB;
    980         }
    981         echo <<<EOB
    9821016                </br>Fragmentation: $frag
    9831017                </td>
    9841018                </tr>
    9851019EOB;
    986         if(isset($mem['adist'])) {
    987           foreach($mem['adist'] as $i=>$v) {
    988             $cur = pow(2,$i); $nxt = pow(2,$i+1)-1;
    989             if($i==0) $range = "1";
    990             else $range = "$cur - $nxt";
    991             echo "<tr><th align=right>$range</th><td align=right>$v</td></tr>\n";
    992           }
    993         }
    994         echo <<<EOB
     1020                if (isset($mem['adist'])) {
     1021                        foreach ($mem['adist'] as $i => $v) {
     1022                                $cur = pow(2, $i);
     1023                                $nxt = pow(2, $i + 1) - 1;
     1024                                if ($i == 0)
     1025                                        $range = "1";
     1026                                else
     1027                                        $range = "$cur - $nxt";
     1028                                echo "<tr><th align=right>$range</th><td align=right>$v</td></tr>\n";
     1029                        }
     1030                }
     1031                echo <<<EOB
    9951032                </tbody></table>
    9961033                </div>
    9971034EOB;
    998 
    999         break;
    1000 
    1001 
    1002 // -----------------------------------------------
    1003 // User Cache Entries
    1004 // -----------------------------------------------
    1005 case OB_USER_CACHE:
    1006         if (!$AUTHENTICATED) {
    1007     echo '<div class="error">You need to login to see the user values here!<br/>&nbsp;<br/>';
    1008                 put_login_link("Login now!");
    1009                 echo '</div>';
     1035               
    10101036                break;
    1011         }
    1012         $fieldname='info';
    1013         $fieldheading='User Entry Label';
    1014         $fieldkey='info';
    1015 
    1016         $cols=6;
    1017 echo <<<EOB
     1037       
     1038       
     1039        // -----------------------------------------------
     1040        // User Cache Entries
     1041        // -----------------------------------------------
     1042        case OB_USER_CACHE:
     1043                if (!$AUTHENTICATED) {
     1044                        echo '<div class="error">You need to login to see the user values here!<br/>&nbsp;<br/>';
     1045                        put_login_link("Login now!");
     1046                        echo '</div>';
     1047                        break;
     1048                }
     1049                $fieldname    = 'info';
     1050                $fieldheading = 'User Entry Label';
     1051                $fieldkey     = 'info';
     1052               
     1053                $cols = 6;
     1054                echo <<<EOB
    10181055                <div class=sorting><form><p>Scope:
    10191056                <input type=hidden name=OB value={$MYREQUEST['OB']}>
     
    10211058                <select name=SCOPE  onChange="form.submit()">
    10221059EOB;
    1023         echo
    1024                 "<option value=A",$MYREQUEST['SCOPE']=='A' ? " selected":"",">Active</option>",
    1025                 "<option value=D",$MYREQUEST['SCOPE']=='D' ? " selected":"",">Deleted</option>",
    1026                 "</select>",
    1027                
    1028 ' Sorting:<select name=S_KEY  onChange="form.submit()">',
    1029                 "<option value=H",$MYREQUEST['S_KEY']=='H' ? " selected":"",">Hits</option>",
    1030                 "<option value=Z",$MYREQUEST['S_KEY']=='Z' ? " selected":"",">Size</option>",
    1031                 "<option value=S",$MYREQUEST['S_KEY']=='S' ? " selected":"",">$fieldheading</option>",
    1032                 "<option value=A",$MYREQUEST['S_KEY']=='A' ? " selected":"",">Last accessed</option>",
    1033                 "<option value=M",$MYREQUEST['S_KEY']=='M' ? " selected":"",">Last modified</option>",
    1034                 "<option value=C",$MYREQUEST['S_KEY']=='C' ? " selected":"",">Created at</option>",
    1035                 "<option value=D",$MYREQUEST['S_KEY']=='D' ? " selected":"",">Deleted at</option>";
    1036         if($fieldname=='info') echo
    1037                 "<option value=D",$MYREQUEST['S_KEY']=='T' ? " selected":"",">Timeout</option>";
    1038         echo
    1039                 '</select>',
    1040                
    1041                 '<select name=SORT  onChange="form.submit()">',
    1042                 '<option value=D',$MYREQUEST['SORT']=='D' ? ' selected':'','>DESC</option>',
    1043                 '<option value=A',$MYREQUEST['SORT']=='A' ? ' selected':'','>ASC</option>',
    1044                 '</select>',
    1045 
    1046 '&nbsp;&nbsp;<b>HTML:</b> ',
    1047                 '<select name=ZOOM  onChange="form.submit()">',
    1048                 '<option value=TEXTECOURT',$MYREQUEST['ZOOM']=='TEXTECOURT' ? ' selected':'','>Courts</option>',
    1049                 '<option value=TEXTELONG',$MYREQUEST['ZOOM']=='TEXTELONG' ? ' selected':'','>Entiers</option>',
    1050                 '</select>',
    1051 
    1052 '&nbsp;&nbsp;<b>Affichage extra:</b> ',
    1053                 '<select name=EXTRA  onChange="form.submit()">',
    1054                 '<option value="" ',$MYREQUEST['EXTRA']=='' ? ' selected':'','></option>',
    1055                 '<option value=CONTEXTE ',$MYREQUEST['EXTRA']=='CONTEXTE' ? ' selected':'','>Contexte</option>',
    1056                 '<option value=CONTEXTES_SPECIAUX ',$MYREQUEST['EXTRA']=='CONTEXTES_SPECIAUX' ? ' selected':'','>Contextes spécifiques</option>',
    1057                 '<option value=INFO_AUTEUR ',$MYREQUEST['EXTRA']=='INFO_AUTEUR' ? ' selected':'','>Infos auteur</option>',
    1058                 '<option value=INVALIDEURS ',$MYREQUEST['EXTRA']=='INVALIDEURS' ? ' selected':'','>Invalideurs</option>',
    1059                 '<option value=INVALIDEURS_SPECIAUX ',$MYREQUEST['EXTRA']=='INVALIDEURS_SPECIAUX' ? ' selected':'','>Invalideurs spécifiques</option>',
    1060                 '</select>
    1061                 </p>',
    1062 
    1063 '<p><b>Types cache:</b> ',
    1064                 '<select name=TYPECACHE  onChange="form.submit()">',
    1065                 '<option value=ALL',$MYREQUEST['TYPECACHE']=='ALL' ? ' selected':'','>Tous</option>',
    1066                 '<option value=SESSIONS',$MYREQUEST['TYPECACHE']=='SESSIONS' ? ' selected':'','>Sessionnés</option>',
    1067                 '<option value=SESSIONS_AUTH',$MYREQUEST['TYPECACHE']=='SESSIONS_AUTH' ? ' selected':'','>Sessionnés identifiés</option>',
    1068                 '<option value=SESSIONS_NONAUTH',$MYREQUEST['TYPECACHE']=='SESSIONS_NONAUTH' ? ' selected':'','>Sessionnés non identifiés</option>',
    1069                 '<option value=FORMULAIRES',$MYREQUEST['TYPECACHE']=='FORMULAIRES' ? ' selected':'','>Formulaires</option>',
    1070                 '</select>',
    1071 
    1072                 '<select name=COUNT onChange="form.submit()">',
    1073                 '<option value=10 ',$MYREQUEST['COUNT']=='10' ? ' selected':'','>Top 10</option>',
    1074                 '<option value=20 ',$MYREQUEST['COUNT']=='20' ? ' selected':'','>Top 20</option>',
    1075                 '<option value=50 ',$MYREQUEST['COUNT']=='50' ? ' selected':'','>Top 50</option>',
    1076                 '<option value=100',$MYREQUEST['COUNT']=='100'? ' selected':'','>Top 100</option>',
    1077                 '<option value=150',$MYREQUEST['COUNT']=='150'? ' selected':'','>Top 150</option>',
    1078                 '<option value=200',$MYREQUEST['COUNT']=='200'? ' selected':'','>Top 200</option>',
    1079                 '<option value=500',$MYREQUEST['COUNT']=='500'? ' selected':'','>Top 500</option>',
    1080                 '<option value=0  ',$MYREQUEST['COUNT']=='0'  ? ' selected':'','>All</option>',
    1081                 '</select>',
    1082 
    1083 '&nbsp;&nbsp;&nbsp;Search: <input name=SEARCH value="',$MYREQUEST['SEARCH'],'" type=text size=25/>',
    1084                 '&nbsp;<input type=submit value="GO!">
    1085                 </p>',
    1086 
    1087                 '</form></div>';
    1088 
    1089   if (isset($MYREQUEST['SEARCH'])) {
    1090    // Don't use preg_quote because we want the user to be able to specify a
    1091    // regular expression subpattern.
    1092    $MYREQUEST['SEARCH'] = '/'.str_replace('/', '\\/', $MYREQUEST['SEARCH']).'/i';
    1093    if (preg_match($MYREQUEST['SEARCH'], 'test') === false) {
    1094      echo '<div class="error">Error: enter a valid regular expression as a search query.</div>';
    1095      break;
    1096    }
    1097 }
    1098   echo
    1099                 '<div class="info"><table cellspacing=0><tbody>',
    1100                 '<tr>',
    1101                 '<th>',sortheader('S',$fieldheading),'</th>',
    1102                 '<th>',sortheader('H','Hits'),'</th>',
    1103                 '<th>',sortheader('Z','Size'),'</th>',
    1104                 '<th>',sortheader('A','Last accessed'),'</th>',
    1105                 '<th>',sortheader('M','Last modified'),'</th>',
    1106                 '<th>',sortheader('C','Created at'),'</th>';
    1107 
    1108         if($fieldname=='info') {
    1109                 $cols+=2;
    1110                  echo '<th>',sortheader('T','Timeout'),'</th>';
    1111         }
    1112         echo '<th>',sortheader('D','Deleted at'),'</th></tr>';
    1113 
    1114         // builds list with alpha numeric sortable keys
    1115         //
    1116         $list = array();
    1117 
    1118         foreach($cache[$scope_list[$MYREQUEST['SCOPE']]] as $i => $entry) {
    1119                 switch($MYREQUEST['S_KEY']) {
    1120                         case 'A': $k=sprintf('%015d-',$entry['access_time']);        break;
    1121                         case 'H': $k=sprintf('%015d-',$entry['num_hits']);           break;
    1122                         case 'Z': $k=sprintf('%015d-',$entry['mem_size']);           break;
    1123                         case 'M': $k=sprintf('%015d-',$entry['mtime']);  break;
    1124                         case 'C': $k=sprintf('%015d-',$entry['creation_time']);      break;
    1125                         case 'T': $k=sprintf('%015d-',$entry['ttl']);                break;
    1126                         case 'D': $k=sprintf('%015d-',$entry['deletion_time']);      break;
    1127                         case 'S': $k=$entry["info"];                                 break;
    1128                 }
    1129                 if (!$AUTHENTICATED) {
    1130                         // hide all path entries if not logged in
    1131                         $list[$k.$entry[$fieldname]]=preg_replace('/^.*(\\/|\\\\)/','*hidden*/',$entry);
     1060                echo "<option value=A", $MYREQUEST['SCOPE'] == 'A' ? " selected" : "", ">Active</option>", "<option value=D", $MYREQUEST['SCOPE'] == 'D' ? " selected" : "", ">Deleted</option>", "</select>", ' Sorting:<select name=S_KEY  onChange="form.submit()">', "<option value=H", $MYREQUEST['S_KEY'] == 'H' ? " selected" : "", ">Hits</option>", "<option value=Z", $MYREQUEST['S_KEY'] == 'Z' ? " selected" : "", ">Size</option>", "<option value=S", $MYREQUEST['S_KEY'] == 'S' ? " selected" : "", ">$fieldheading</option>", "<option value=A", $MYREQUEST['S_KEY'] == 'A' ? " selected" : "", ">Last accessed</option>", "<option value=M", $MYREQUEST['S_KEY'] == 'M' ? " selected" : "", ">Last modified</option>", "<option value=C", $MYREQUEST['S_KEY'] == 'C' ? " selected" : "", ">Created at</option>", "<option value=D", $MYREQUEST['S_KEY'] == 'D' ? " selected" : "", ">Deleted at</option>";
     1061                if ($fieldname == 'info')
     1062                        echo "<option value=D", $MYREQUEST['S_KEY'] == 'T' ? " selected" : "", ">Timeout</option>";
     1063                echo '</select>', '<select name=SORT  onChange="form.submit()">', '<option value=D', $MYREQUEST['SORT'] == 'D' ? ' selected' : '', '>DESC</option>', '<option value=A', $MYREQUEST['SORT'] == 'A' ? ' selected' : '', '>ASC</option>', '</select>', '&nbsp;&nbsp;<b>HTML:</b> ', '<select name=ZOOM  onChange="form.submit()">', '<option value=TEXTECOURT', $MYREQUEST['ZOOM'] == 'TEXTECOURT' ? ' selected' : '', '>Courts</option>', '<option value=TEXTELONG', $MYREQUEST['ZOOM'] == 'TEXTELONG' ? ' selected' : '', '>Entiers</option>', '</select>', '&nbsp;&nbsp;<b>Affichage extra:</b> ', '<select name=EXTRA  onChange="form.submit()">', '<option value="" ', $MYREQUEST['EXTRA'] == '' ? ' selected' : '', '></option>', '<option value=CONTEXTE ', $MYREQUEST['EXTRA'] == 'CONTEXTE' ? ' selected' : '', '>Contexte</option>', '<option value=CONTEXTES_SPECIAUX ', $MYREQUEST['EXTRA'] == 'CONTEXTES_SPECIAUX' ? ' selected' : '', '>Contextes spécifiques</option>', '<option value=INFO_AUTEUR ', $MYREQUEST['EXTRA'] == 'INFO_AUTEUR' ? ' selected' : '', '>Infos auteur</option>', '<option value=INVALIDEURS ', $MYREQUEST['EXTRA'] == 'INVALIDEURS' ? ' selected' : '', '>Invalideurs</option>', '<option value=INVALIDEURS_SPECIAUX ', $MYREQUEST['EXTRA'] == 'INVALIDEURS_SPECIAUX' ? ' selected' : '', '>Invalideurs spécifiques</option>', '</select>
     1064                </p>', '<p><b>Types cache:</b> ', '<select name=TYPECACHE  onChange="form.submit()">', '<option value=ALL', $MYREQUEST['TYPECACHE'] == 'ALL' ? ' selected' : '', '>Tous</option>', '<option value=SESSIONS', $MYREQUEST['TYPECACHE'] == 'SESSIONS' ? ' selected' : '', '>Sessionnés</option>', '<option value=SESSIONS_AUTH', $MYREQUEST['TYPECACHE'] == 'SESSIONS_AUTH' ? ' selected' : '', '>Sessionnés identifiés</option>', '<option value=SESSIONS_NONAUTH', $MYREQUEST['TYPECACHE'] == 'SESSIONS_NONAUTH' ? ' selected' : '', '>Sessionnés non identifiés</option>', '<option value=FORMULAIRES', $MYREQUEST['TYPECACHE'] == 'FORMULAIRES' ? ' selected' : '', '>Formulaires</option>', '</select>', '<select name=COUNT onChange="form.submit()">', '<option value=10 ', $MYREQUEST['COUNT'] == '10' ? ' selected' : '', '>Top 10</option>', '<option value=20 ', $MYREQUEST['COUNT'] == '20' ? ' selected' : '', '>Top 20</option>', '<option value=50 ', $MYREQUEST['COUNT'] == '50' ? ' selected' : '', '>Top 50</option>', '<option value=100', $MYREQUEST['COUNT'] == '100' ? ' selected' : '', '>Top 100</option>', '<option value=150', $MYREQUEST['COUNT'] == '150' ? ' selected' : '', '>Top 150</option>', '<option value=200', $MYREQUEST['COUNT'] == '200' ? ' selected' : '', '>Top 200</option>', '<option value=500', $MYREQUEST['COUNT'] == '500' ? ' selected' : '', '>Top 500</option>', '<option value=0  ', $MYREQUEST['COUNT'] == '0' ? ' selected' : '', '>All</option>', '</select>', '&nbsp;&nbsp;&nbsp;Search: <input name=SEARCH value="', $MYREQUEST['SEARCH'], '" type=text size=25/>', '&nbsp;<input type=submit value="GO!">
     1065                </p>', '</form></div>';
     1066               
     1067                if (isset($MYREQUEST['SEARCH'])) {
     1068                        // Don't use preg_quote because we want the user to be able to specify a
     1069                        // regular expression subpattern.
     1070                        $MYREQUEST['SEARCH'] = '/' . str_replace('/', '\\/', $MYREQUEST['SEARCH']) . '/i';
     1071                        if (preg_match($MYREQUEST['SEARCH'], 'test') === false) {
     1072                                echo '<div class="error">Error: enter a valid regular expression as a search query.</div>';
     1073                                break;
     1074                        }
     1075                }
     1076                echo '<div class="info"><table cellspacing=0><tbody>', '<tr>', '<th>', sortheader('S', $fieldheading), '</th>', '<th>', sortheader('H', 'Hits'), '</th>', '<th>', sortheader('Z', 'Size'), '</th>', '<th>', sortheader('A', 'Last accessed'), '</th>', '<th>', sortheader('M', 'Last modified'), '</th>', '<th>', sortheader('C', 'Created at'), '</th>';
     1077               
     1078                if ($fieldname == 'info') {
     1079                        $cols += 2;
     1080                        echo '<th>', sortheader('T', 'Timeout'), '</th>';
     1081                }
     1082                echo '<th>', sortheader('D', 'Deleted at'), '</th></tr>';
     1083               
     1084                // builds list with alpha numeric sortable keys
     1085                //
     1086                $list = array();
     1087               
     1088                foreach ($cache[$scope_list[$MYREQUEST['SCOPE']]] as $i => $entry) {
     1089                        switch ($MYREQUEST['S_KEY']) {
     1090                                case 'A':
     1091                                        $k = sprintf('%015d-', $entry['access_time']);
     1092                                        break;
     1093                                case 'H':
     1094                                        $k = sprintf('%015d-', $entry['num_hits']);
     1095                                        break;
     1096                                case 'Z':
     1097                                        $k = sprintf('%015d-', $entry['mem_size']);
     1098                                        break;
     1099                                case 'M':
     1100                                        $k = sprintf('%015d-', $entry['mtime']);
     1101                                        break;
     1102                                case 'C':
     1103                                        $k = sprintf('%015d-', $entry['creation_time']);
     1104                                        break;
     1105                                case 'T':
     1106                                        $k = sprintf('%015d-', $entry['ttl']);
     1107                                        break;
     1108                                case 'D':
     1109                                        $k = sprintf('%015d-', $entry['deletion_time']);
     1110                                        break;
     1111                                case 'S':
     1112                                        $k = $entry["info"];
     1113                                        break;
     1114                        }
     1115                        if (!$AUTHENTICATED) {
     1116                                // hide all path entries if not logged in
     1117                                $list[$k . $entry[$fieldname]] = preg_replace('/^.*(\\/|\\\\)/', '*hidden*/', $entry);
     1118                        } else {
     1119                                $list[$k . $entry[$fieldname]] = $entry;
     1120                        }
     1121                }
     1122               
     1123                if ($list) {
     1124                        // sort list
     1125                        //
     1126                        switch ($MYREQUEST['SORT']) {
     1127                                case "A":
     1128                                        ksort($list);
     1129                                        break;
     1130                                case "D":
     1131                                        krsort($list);
     1132                                        break;
     1133                                default:
     1134                                        echo "...ah ben non pas de tri.";
     1135                                        break;
     1136                        }
     1137                       
     1138                        $TYPECACHE = (isset($MYREQUEST['TYPECACHE']) ? $MYREQUEST['TYPECACHE'] : 'ALL');
     1139                        switch ($TYPECACHE) {
     1140                                case 'ALL':
     1141                                        $pattern_typecache = '';
     1142                                        break;
     1143                                case 'SESSIONS':
     1144                                        $pattern_typecache = '/_([a-f0-9]{8}|)$/i';
     1145                                        break;
     1146                                case 'SESSIONS_AUTH':
     1147                                        $pattern_typecache = '/_[a-f0-9]{8}$/i';
     1148                                        break;
     1149                                case 'SESSIONS_NONAUTH':
     1150                                        $pattern_typecache = '/_$/i';
     1151                                        break;
     1152                                case 'FORMULAIRES':
     1153                                        $pattern_typecache = '~formulaires/~i';
     1154                                        break;
     1155                        }
     1156                       
     1157                        // output list
     1158                        $i = 0;
     1159                        foreach ($list as $k => $entry) {
     1160                               
     1161                                if ((!$MYREQUEST['SEARCH'] || preg_match($MYREQUEST['SEARCH'], $entry[$fieldname])) and (!$pattern_typecache or preg_match($pattern_typecache, $entry[$fieldname]))) {
     1162                                        $sh = md5($entry["info"]);
     1163                                       
     1164                                        $field_value = htmlentities(strip_tags($entry[$fieldname], ''), ENT_QUOTES, 'UTF-8');
     1165                                        if (defined('XRAY_NEPASAFFICHER_DEBUTNOMCACHE'))
     1166                                                $field_value = str_replace(XRAY_NEPASAFFICHER_DEBUTNOMCACHE, '...', $field_value);
     1167                                        echo '<tr id="key-' . $sh . '" class=tr-', $i % 2, '>', "<td class='td-0' style='position: relative'>
     1168                        <a href='$MY_SELF&SH={$sh}#key-{$sh}'>$field_value</a>";
     1169                                       
     1170                                        if ($p = preg_match('/_([0-9a-f]{8})$/i', $field_value, $match) and $MYREQUEST['SEARCH'] != "/{$match[1]}/i") {
     1171                                                $url_session = parametre_url($MY_SELF, 'SEARCH', $match[1]);
     1172                                                echo "<a href='$url_session' style='float: right'>[session]</a>";
     1173                                        }
     1174                                        if ($MYREQUEST['EXTRA'] and ($sh != $MYREQUEST["SH"]) // sinon yaura un zoom après et c'est inutile de répéter ici
     1175                                                and apcu_exists($entry['info']) and ($data = apcu_fetch($entry['info'], $success)) and $success and is_array($data) and (count($data) == 1) and is_serialized($data[0])) {
     1176                                                $data  = unserialize($data[0]);
     1177                                                $extra = null;
     1178                                                $liens = '';
     1179                                                if (is_array($data)) {
     1180                                                        switch ($MYREQUEST['EXTRA']) {
     1181                                                                case 'CONTEXTE':
     1182                                                                        if (isset($data['contexte']))
     1183                                                                                $extra = $data['contexte'];
     1184                                                                        else
     1185                                                                                $extra = '(non défini)';
     1186                                                                        break;
     1187                                                                case 'CONTEXTES_SPECIAUX':
     1188                                                                        if (isset($data['contexte'])) {
     1189                                                                                $extra = $data['contexte'];
     1190                                                                                foreach (array(
     1191                                                                                        'lang',
     1192                                                                                        'date',
     1193                                                                                        'date_default',
     1194                                                                                        'date_redac',
     1195                                                                                        'date_redac_default'
     1196                                                                                ) as $ki)
     1197                                                                                        unset($extra[$ki]);
     1198                                                                        } else
     1199                                                                                $extra = '(non défini)';
     1200                                                                        break;
     1201                                                                case 'INFO_AUTEUR':
     1202                                                                        if (isset($data['contexte'])) {
     1203                                                                                foreach (array(
     1204                                                                                        'id_auteur',
     1205                                                                                        'email',
     1206                                                                                        'nom',
     1207                                                                                        'statut',
     1208                                                                                        'login'
     1209                                                                                ) as $ki)
     1210                                                                                        if (isset($data['contexte'][$ki]))
     1211                                                                                                $extra[$ki] = $extra[$ki] = $data['contexte'][$ki];
     1212                                                                        };
     1213                                                                        break;
     1214                                                                case 'INVALIDEURS':
     1215                                                                        $extra = $data['invalideurs'];
     1216                                                                        break;
     1217                                                                case 'INVALIDEURS_SPECIAUX':
     1218                                                                        $extra = $data['invalideurs'];
     1219                                                                        foreach (array(
     1220                                                                                'cache',
     1221                                                                                'session'
     1222                                                                        ) as $ki)
     1223                                                                                unset($extra[$ki]);
     1224                                                                        break;
     1225                                                        }
     1226                                                }
     1227                                                if ($extra == 'undefined')
     1228                                                        $extra = array(
     1229                                                                'contexte non défini' => 'vrai'
     1230                                                        );
     1231                                                if ($extra = print_contexte($extra, 1))
     1232                                                        echo "<br><xmp>    $extra</xmp> <small style='float:right'>$liens</small>";
     1233                                        }
     1234                                        echo '</td>', '<td class="td-n center">', $entry['num_hits'], '</td>', '<td class="td-n right">', $entry['mem_size'], '</td>', '<td class="td-n center">', date(DATE_FORMAT, $entry['access_time']), '</td>', '<td class="td-n center">', date(DATE_FORMAT, $entry['mtime']), '</td>', '<td class="td-n center">', date(DATE_FORMAT, $entry['creation_time']), '</td>';
     1235                                       
     1236                                        if ($fieldname == 'info') {
     1237                                                if ($entry['ttl'])
     1238                                                        echo '<td class="td-n center">' . $entry['ttl'] . ' seconds</td>';
     1239                                                else
     1240                                                        echo '<td class="td-n center">None</td>';
     1241                                        }
     1242                                        if ($entry['deletion_time']) {
     1243                                               
     1244                                                echo '<td class="td-last center">', date(DATE_FORMAT, $entry['deletion_time']), '</td>';
     1245                                        } else if ($MYREQUEST['OB'] == OB_USER_CACHE) {
     1246                                               
     1247                                                echo '<td class="td-last center">';
     1248                                                echo '[<a href="', $MY_SELF, '&DU=', urlencode($entry[$fieldkey]), '">Delete Now</a>]';
     1249                                                echo '</td>';
     1250                                        } else {
     1251                                                echo '<td class="td-last center"> &nbsp; </td>';
     1252                                        }
     1253                                        echo '</tr>';
     1254                                        if ($sh == $MYREQUEST["SH"]) { // Le ZOOM sur une entrée
     1255                                                echo '<tr>';
     1256                                                echo '<td colspan="7"><pre>';
     1257                                               
     1258                                                if (isset($_GET['ZOOM']) and ($_GET['ZOOM'] == 'TEXTECOURT')) {
     1259                                                        $url      = parametre_url($self, 'ZOOM', 'TEXTELONG') . "#key-$sh";
     1260                                                        $menuzoom = "<a href='$url'>[Voir tout le texte]</a> ";
     1261                                                } else {
     1262                                                        $url      = parametre_url($self, 'ZOOM', 'TEXTECOURT') . "#key-$sh";
     1263                                                        $menuzoom = "<a href='$url'>[Voir texte abbrégé]</a> ";
     1264                                                }
     1265                                                $url = parametre_url($self, 'SH', '') . "#key-$sh";
     1266                                                $menuzoom .= "<a href='$url'>[Replier]</a>";
     1267                                               
     1268                                                if (apcu_exists($entry['info'])) {
     1269                                                        $d = apcu_fetch($entry['info'], $success);
     1270                                                        if ($success) {
     1271                                                                echo $menuzoom . "<br>";
     1272                                                                if (is_array($d) and (count($d) == 1) and is_serialized($d[0]))
     1273                                                                        echo "<xmp>" . spipsafe_unserialize($d[0]) . "</xmp>";
     1274                                                                else
     1275                                                                        echo "fetch ok<br><xmp>" . print_r($d, 1) . "</xmp>";
     1276                                                        } else
     1277                                                                echo "fetch failed";
     1278                                                } else
     1279                                                        echo '(doesnt exist)';
     1280                                                echo '</pre></td>';
     1281                                                echo '</tr>';
     1282                                        }
     1283                                        $i++;
     1284                                        if ($i == $MYREQUEST['COUNT'])
     1285                                                break;
     1286                                }
     1287                        }
     1288                       
    11321289                } else {
    1133                         $list[$k.$entry[$fieldname]]=$entry;
    1134                 }
    1135         }
    1136 
    1137         if ($list) {
    1138                 // sort list
    1139                 //
    1140                 switch ($MYREQUEST['SORT']) {
    1141                         case "A":       ksort($list);   break;
    1142                         case "D":       krsort($list);  break;
    1143                         default : echo "...ah ben non pas de tri."; break;
    1144                 }
    1145 
    1146                 $TYPECACHE=(isset($MYREQUEST['TYPECACHE'])?$MYREQUEST['TYPECACHE']:'ALL');
    1147                 switch ($TYPECACHE) {
    1148                         case 'ALL':
    1149                                 $pattern_typecache = '';
    1150                                 break;
    1151                         case 'SESSIONS' :
    1152                                 $pattern_typecache = '/_([a-f0-9]{8}|)$/i';
    1153                                 break;
    1154                         case 'SESSIONS_AUTH' :
    1155                                 $pattern_typecache = '/_[a-f0-9]{8}$/i';
    1156                                 break;
    1157                         case 'SESSIONS_NONAUTH' :
    1158                                 $pattern_typecache = '/_$/i';
    1159                                 break;
    1160                         case 'FORMULAIRES' :
    1161                                 $pattern_typecache = '~formulaires/~i';
    1162                                 break;
    1163                 };
    1164 
    1165                 // output list
    1166                 $i=0;
    1167                 foreach($list as $k => $entry) {
    1168 
    1169       if ((!$MYREQUEST['SEARCH'] || preg_match($MYREQUEST['SEARCH'], $entry[$fieldname]))
    1170                 and (!$pattern_typecache or preg_match($pattern_typecache, $entry[$fieldname]))) {
    1171                 $sh=md5($entry["info"]);
    1172 
    1173         $field_value = htmlentities(strip_tags($entry[$fieldname],''), ENT_QUOTES, 'UTF-8');
    1174         if (defined('XRAY_NEPASAFFICHER_DEBUTNOMCACHE'))
    1175                         $field_value = str_replace (XRAY_NEPASAFFICHER_DEBUTNOMCACHE, '...', $field_value);
    1176         echo
    1177           '<tr id="key-'. $sh .'" class=tr-',$i%2,'>',
    1178           "<td class='td-0' style='position: relative'>
    1179                         <a href='$MY_SELF&SH={$sh}#key-{$sh}'>$field_value</a>";
    1180 
    1181                 if ($p=preg_match('/_([0-9a-f]{8})$/i', $field_value, $match)
    1182                         and $MYREQUEST['SEARCH'] != "/{$match[1]}/i") {
    1183                         $url_session = parametre_url($MY_SELF, 'SEARCH', $match[1]);
    1184                         echo "<a href='$url_session' style='float: right'>[session]</a>";
    1185                 }
    1186                         if ($MYREQUEST['EXTRA']
    1187                                         and ($sh != $MYREQUEST["SH"]) // sinon yaura un zoom après et c'est inutile de répéter ici
    1188                                         and apcu_exists($entry['info'])
    1189                                         and ($data = apcu_fetch($entry['info'], $success))
    1190                                         and $success and is_array($data) and (count ($data)==1)
    1191                                         and is_serialized($data[0])) {
    1192                                 $data = unserialize($data[0]);
    1193                                 $extra = null;
    1194                                 $liens = '';
    1195                                 if (is_array($data)) {
    1196                                         switch ($MYREQUEST['EXTRA']) {
    1197                                         case 'CONTEXTE' :
    1198                                                 if (isset($data['contexte']))
    1199                                                         $extra = $data['contexte'];
    1200                                                 else
    1201                                                         $extra = '(non défini)';
    1202                                                 break;
    1203                                         case 'CONTEXTES_SPECIAUX' :
    1204                                                 if (isset($data['contexte'])) {
    1205                                                         $extra = $data['contexte'];
    1206                                                         foreach (array ('lang', 'date', 'date_default', 'date_redac', 'date_redac_default') as $ki)
    1207                                                                 unset($extra[$ki]);
    1208                                                 }
    1209                                                 else
    1210                                                         $extra = '(non défini)';
    1211                                                 break;
    1212                                         case 'INFO_AUTEUR' :
    1213                                                 if (isset($data['contexte'])) {
    1214                                                         foreach (array('id_auteur', 'email', 'nom', 'statut', 'login') as $ki)
    1215                                                                 if (isset ($data['contexte'][$ki]))
    1216                                                                         $extra[$ki] = $extra[$ki] = $data['contexte'][$ki];
    1217                                                 };
    1218                                                 break;
    1219                                         case 'INVALIDEURS' :
    1220                                                 $extra = $data['invalideurs'];
    1221                                                 break;
    1222                                         case 'INVALIDEURS_SPECIAUX' :
    1223                                                 $extra = $data['invalideurs'];
    1224                                                 foreach (array ('cache', 'session') as $ki)
    1225                                                         unset($extra[$ki]);
    1226                                                 break;
    1227                                         }
    1228                                 }
    1229                                 if ($extra == 'undefined')
    1230                                         $extra = array ('contexte non défini' => 'vrai');
    1231                                 if ($extra = print_contexte($extra, 1))
    1232                                         echo "<br><xmp>    $extra</xmp> <small style='float:right'>$liens</small>";
    1233                         };
    1234           echo '</td>',
    1235           '<td class="td-n center">',$entry['num_hits'],'</td>',
    1236           '<td class="td-n right">',$entry['mem_size'],'</td>',
    1237           '<td class="td-n center">',date(DATE_FORMAT,$entry['access_time']),'</td>',
    1238           '<td class="td-n center">',date(DATE_FORMAT,$entry['mtime']),'</td>',
    1239           '<td class="td-n center">',date(DATE_FORMAT,$entry['creation_time']),'</td>';
    1240 
    1241         if($fieldname=='info') {
    1242           if($entry['ttl'])
    1243             echo '<td class="td-n center">'.$entry['ttl'].' seconds</td>';
    1244           else
    1245             echo '<td class="td-n center">None</td>';
    1246         }
    1247         if ($entry['deletion_time']) {
    1248 
    1249           echo '<td class="td-last center">', date(DATE_FORMAT,$entry['deletion_time']), '</td>';
    1250         } else if ($MYREQUEST['OB'] == OB_USER_CACHE) {
    1251 
    1252           echo '<td class="td-last center">';
    1253           echo '[<a href="', $MY_SELF, '&DU=', urlencode($entry[$fieldkey]), '">Delete Now</a>]';
    1254           echo '</td>';
    1255         } else {
    1256           echo '<td class="td-last center"> &nbsp; </td>';
    1257         }
    1258         echo '</tr>';
    1259                 if ($sh == $MYREQUEST["SH"]) { // Le ZOOM sur une entrée
    1260                         echo '<tr>';
    1261                         echo '<td colspan="7"><pre>';
    1262 
    1263                         if (isset($_GET['ZOOM']) and ($_GET['ZOOM']=='TEXTECOURT')) {
    1264                                 $url = parametre_url($self,'ZOOM','TEXTELONG')."#key-$sh";
    1265                                 $menuzoom = "<a href='$url'>[Voir tout le texte]</a> ";
    1266                         }
    1267                         else {
    1268                                 $url = parametre_url($self,'ZOOM','TEXTECOURT')."#key-$sh";
    1269                                 $menuzoom = "<a href='$url'>[Voir texte abbrégé]</a> ";
    1270                         }
    1271                         $url = parametre_url($self, 'SH', '')."#key-$sh";
    1272                         $menuzoom .= "<a href='$url'>[Replier]</a>";
    1273 
    1274                         if (apcu_exists($entry['info'])) {
    1275                                 $d = apcu_fetch($entry['info'], $success);
    1276                                 if ($success) {
    1277                                         echo $menuzoom."<br>";
    1278                                         if (is_array($d) and (count ($d)==1) and is_serialized($d[0]))
    1279                                                 echo "<xmp>".spipsafe_unserialize($d[0])."</xmp>";
    1280                                         else
    1281                                                 echo "fetch ok<br><xmp>".print_r($d, 1)."</xmp>";
    1282                                 } else
    1283                                         echo "fetch failed";
    1284                         }
    1285                         else
    1286                                 echo '(doesnt exist)';
    1287                         echo '</pre></td>';
    1288                         echo '</tr>';
    1289                 }
    1290         $i++;
    1291         if ($i == $MYREQUEST['COUNT'])
    1292           break;
    1293       }
    1294                 }
    1295 
    1296         } else {
    1297                 echo '<tr class=tr-0><td class="center" colspan=',$cols,'><i>No data</i></td></tr>';
    1298         }
    1299         echo <<< EOB
     1290                        echo '<tr class=tr-0><td class="center" colspan=', $cols, '><i>No data</i></td></tr>';
     1291                }
     1292                echo <<< EOB
    13001293                </tbody></table>
    13011294EOB;
    1302 
    1303         if ($list && $i < count($list)) {
    1304                 echo "<a href=\"$MY_SELF","&COUNT=0\"><i>",count($list)-$i,' more available...</i></a>';
    1305         }
    1306 
    1307         echo <<< EOB
     1295               
     1296                if ($list && $i < count($list)) {
     1297                        echo "<a href=\"$MY_SELF", "&COUNT=0\"><i>", count($list) - $i, ' more available...</i></a>';
     1298                }
     1299               
     1300                echo <<< EOB
    13081301                </div>
    13091302EOB;
    1310         break;
    1311 
    1312 // -----------------------------------------------
    1313 // Version check
    1314 // -----------------------------------------------
    1315 case OB_VERSION_CHECK:
    1316         echo <<<EOB
     1303                break;
     1304       
     1305        // -----------------------------------------------
     1306        // Version check
     1307        // -----------------------------------------------
     1308        case OB_VERSION_CHECK:
     1309                echo <<<EOB
    13171310                <div class="info"><h2>APCu Version Information</h2>
    13181311                <table cellspacing=0><tbody>
     
    13211314                </tr>
    13221315EOB;
    1323   if (defined('PROXY')) {
    1324     $ctxt = stream_context_create( array( 'http' => array( 'proxy' => PROXY, 'request_fulluri' => True ) ) );
    1325     $rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apcu.rss", False, $ctxt);
    1326   } else {
    1327     $rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apcu.rss");
    1328   }
    1329         if (!$rss) {
    1330                 echo '<tr class="td-last center"><td>Unable to fetch version information.</td></tr>';
    1331         } else {
    1332                 $apcversion = phpversion('apcu');
    1333 
    1334                 preg_match('!<title>APCu ([0-9.]+)</title>!', $rss, $match);
    1335                 echo '<tr class="tr-0 center"><td>';
    1336                 if (version_compare($apcversion, $match[1], '>=')) {
    1337                         echo '<div class="ok">You are running the latest version of APCu ('.$apcversion.')</div>';
    1338                         $i = 3;
     1316                if (defined('PROXY')) {
     1317                        $ctxt = stream_context_create(array(
     1318                                'http' => array(
     1319                                        'proxy' => PROXY,
     1320                                        'request_fulluri' => True
     1321                                )
     1322                        ));
     1323                        $rss  = @file_get_contents("http://pecl.php.net/feeds/pkg_apcu.rss", False, $ctxt);
    13391324                } else {
    1340                         echo '<div class="failed">You are running an older version of APCu ('.$apcversion.'),
    1341                                 newer version '.$match[1].' is available at <a href="http://pecl.php.net/package/APCu/'.$match[1].'">
    1342                                 http://pecl.php.net/package/APCu/'.$match[1].'</a>
     1325                        $rss = @file_get_contents("http://pecl.php.net/feeds/pkg_apcu.rss");
     1326                }
     1327                if (!$rss) {
     1328                        echo '<tr class="td-last center"><td>Unable to fetch version information.</td></tr>';
     1329                } else {
     1330                        $apcversion = phpversion('apcu');
     1331                       
     1332                        preg_match('!<title>APCu ([0-9.]+)</title>!', $rss, $match);
     1333                        echo '<tr class="tr-0 center"><td>';
     1334                        if (version_compare($apcversion, $match[1], '>=')) {
     1335                                echo '<div class="ok">You are running the latest version of APCu (' . $apcversion . ')</div>';
     1336                                $i = 3;
     1337                        } else {
     1338                                echo '<div class="failed">You are running an older version of APCu (' . $apcversion . '),
     1339                                newer version ' . $match[1] . ' is available at <a href="http://pecl.php.net/package/APCu/' . $match[1] . '">
     1340                                http://pecl.php.net/package/APCu/' . $match[1] . '</a>
    13431341                                </div>';
    1344                         $i = -1;
    1345                 }
    1346                 echo '</td></tr>';
    1347                 echo '<tr class="tr-0"><td><h3>Change Log:</h3><br/>';
    1348 
    1349                 preg_match_all('!<(title|description)>([^<]+)</\\1>!', $rss, $match);
    1350                 $changelog = $match[2];
    1351 
    1352                 for ($j = 2; $j + 1 < count($changelog); $j += 2) {
    1353                         $v = $changelog[$j];
    1354                         if ($i < 0 && version_compare($apcversion, $ver, '>=')) {
    1355                                 break;
    1356                         } else if (!$i--) {
    1357                                 break;
    1358                         }
    1359                         list($unused, $ver) = $v;
    1360                         $changes = $changelog[$j + 1];
    1361                         echo "<b><a href=\"http://pecl.php.net/package/APCu/$ver\">".htmlspecialchars($v, ENT_QUOTES, 'UTF-8')."</a></b><br><blockquote>";
    1362                         echo nl2br(htmlspecialchars($changes, ENT_QUOTES, 'UTF-8'))."</blockquote>";
    1363                 }
    1364                 echo '</td></tr>';
    1365         }
    1366         echo <<< EOB
     1342                                $i = -1;
     1343                        }
     1344                        echo '</td></tr>';
     1345                        echo '<tr class="tr-0"><td><h3>Change Log:</h3><br/>';
     1346                       
     1347                        preg_match_all('!<(title|description)>([^<]+)</\\1>!', $rss, $match);
     1348                        $changelog = $match[2];
     1349                       
     1350                        for ($j = 2; $j + 1 < count($changelog); $j += 2) {
     1351                                $v = $changelog[$j];
     1352                                if ($i < 0 && version_compare($apcversion, $ver, '>=')) {
     1353                                        break;
     1354                                } else if (!$i--) {
     1355                                        break;
     1356                                }
     1357                                list($unused, $ver) = $v;
     1358                                $changes = $changelog[$j + 1];
     1359                                echo "<b><a href=\"http://pecl.php.net/package/APCu/$ver\">" . htmlspecialchars($v, ENT_QUOTES, 'UTF-8') . "</a></b><br><blockquote>";
     1360                                echo nl2br(htmlspecialchars($changes, ENT_QUOTES, 'UTF-8')) . "</blockquote>";
     1361                        }
     1362                        echo '</td></tr>';
     1363                }
     1364                echo <<< EOB
    13671365                </tbody></table>
    13681366                </div>
    13691367EOB;
    1370         break;
    1371 
     1368                break;
     1369               
    13721370}
    13731371
     
    13781376?>
    13791377
    1380 <!-- <?php echo "\nBased on APCGUI By R.Becker\n$VERSION\n"?> -->
     1378<!-- <?php
     1379echo "\nBased on APCGUI By R.Becker\n$VERSION\n";
     1380?> -->
    13811381</body>
    13821382</html>
Note: See TracChangeset for help on using the changeset viewer.