WordPress.org

Plugin Directory

Changeset 673624


Ignore:
Timestamp:
02/26/13 15:44:50 (14 months ago)
Author:
askapache
Message:

New file viewer, directory browser (with hexdump of file)
2 new modules, WP_scripts and WP_Styles.
Many misc improvements

Location:
askapache-debug-viewer
Files:
21 added
3 edited

Legend:

Unmodified
Added
Removed
  • askapache-debug-viewer/trunk/askapache-debug-viewer.php

    r672542 r673624  
    77 * Author: askapache 
    88 * Contributors: askapache 
    9  * Version: 2.8 
    10  * Updated: 02/24/2013 
     9 * Version: 2.9 
     10 * Updated: 02/26/2013 
    1111 * Requires at least: 3.1.0 
    1212 * Tested up to: 3.5.1 
     
    9595function aadv_error_log($msg='') 
    9696{ 
    97     return error_log("1".$msg); 
     97    return error_log(__FUNCTION__.'() '.__FILE__.':'.__LINE__.': '.$msg); 
    9898} 
    9999 
     
    752752 
    753753 
    754  
    755754    /** 
    756755     * Contains Plugin Name and Settings from parsing this file 
     
    787786     */ 
    788787    var $plugin = array();  // array to hold plugin information 
     788    var $_plugin = array(); // array to hold plugin information 
    789789 
    790790    /** 
     
    797797     *      [dirtoexplore] => /tmp 
    798798     *      [log_errors] => 1 
     799     *      [verbose_modules] => 0 
    799800     *      [debug_live] => 0 
    800801     *      [admin_footer] => 1 
     
    815816        'key' => '', 
    816817        'log_errors' => '0', 
     818        'verbose_modules' => '0', 
    817819        'debug_live' => '0', 
    818820        'display_height' => 300, 
     
    823825        'plugin_debug_level' => 0, 
    824826        'debug_mods_v' => 0, 
    825         'debug_mods' => 107197 
     827        'debug_mods' => 8373 
    826828    ); 
    827829 
     
    841843        'server-info'   => array('name'=>'Server Info',     'title'=>'Server Info', 'nonce'=>''), 
    842844        'server-env'    => array('name'=>'Server Env',      'title'=>'Printenv Output', 'nonce'=>''), 
    843         'server-parsed' => array('name'=>'Server Parsed',   'title'=>'SHTML Printenv', 'nonce'=>'') 
    844         //'files' => array('name'=>'Directory File Browser', 'title'=>'Browse files and directories', 'nonce'=>'') 
     845        'server-parsed' => array('name'=>'Server Parsed',   'title'=>'SHTML Printenv', 'nonce'=>''), 
     846        'files' => array('name'=>'Directory File Browser', 'title'=>'Browse files and directories', 'nonce'=>'') 
    845847     ); 
    846848 
     
    853855     var $actions = array( 
    854856        //'adminbaroff' =>array('title'=>'Disable Front Admin Bar', 'nonce'=>''), 
    855         'disable'       =>array('title'=>'Disable', 'nonce'=>''), 
    856         'enable'        =>array('title'=>'Enable', 'nonce'=>'') 
     857        'disable'       =>array('title'=>'Quick Disable', 'nonce'=>''), 
     858        'enable'        =>array('title'=>'Quick Enable', 'nonce'=>'') 
    857859     ); 
    858860      
     
    983985        $D[(1 << sizeof($D))]=array('get_debug_plugins',        'WordPress Plugins'); 
    984986        $D[(1 << sizeof($D))]=array('get_debug_filters',        'WordPress Actions/Filters'); 
     987        $D[(1 << sizeof($D))]=array('get_debug_scripts',        'WordPress JS Scripts'); 
     988        $D[(1 << sizeof($D))]=array('get_debug_styles',         'WordPress CSS Styles'); 
    985989        $this->debug_mods=$D; 
    986990        unset($D); 
    987          
     991 
    988992        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',10); 
    989993    } 
     
    995999        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',10); 
    9961000         
    997         if( function_exists('current_user_can') && !current_user_can('administrator') ) wp_die(__FUNCTION__.':'.__LINE__); 
     1001        if( !$this->check_auth() ) wp_die(__FUNCTION__.':'.__LINE__); 
    9981002 
    9991003        update_option($this->_qn.'_options', $this->options); 
     
    10431047             'dirtoexplore' => __DIR__, 
    10441048             'log_errors' => '1', 
     1049             'verbose_modules' => '0', 
    10451050             'key' => $key, 
    10461051             'debug_live' => '0', 
     
    10521057             'display_height' => 300, 
    10531058             'debug_mods_v' => 0, 
    1054              'debug_mods' => 107197 
     1059             'debug_mods' => 8373 
    10551060        ); 
    10561061 
     
    11131118        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',10); 
    11141119         
    1115         if( function_exists('current_user_can') && !current_user_can('administrator') ) wp_die(__FUNCTION__.':'.__LINE__); 
     1120        if( !$this->check_auth() ) wp_die(__FUNCTION__.':'.__LINE__); 
    11161121 
    11171122        $this->deactivate_ff_htaccess(); 
     
    11721177            add_action('admin_menu', create_function('','$AA_DEBUG=&_aa_debug_object(); $p=$AA_DEBUG->_plugin; add_options_page( $p["plugin-name"], $p["short-name"], $p["role"], $p["page"], array(&$AA_DEBUG,"AdminPage") );')); 
    11731178 
     1179            // enqueue styles 
     1180            wp_enqueue_style($this->_plugin['pagenice'], plugins_url('/f/admin.css',__FILE__), false, $this->_plugin['version'], "all"); 
     1181            wp_enqueue_style($this->_plugin['pagenice'].'1', 'http'. (is_ssl() ? 's' : '' ).'://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css', false, $this->_plugin['version'], "all"); 
     1182             
     1183            if($this->options['admin_footer']=='1') { 
     1184                // enqueue script 
     1185                wp_enqueue_script($this->_plugin['pagenice'], plugins_url('/f/admin.js',__FILE__), array('jquery','jquery-ui-core','jquery-ui-resizable', 'jquery-ui-tabs', 'jquery-ui-draggable'), $this->_plugin['version']); 
     1186            } 
     1187 
     1188 
    11741189            register_uninstall_hook(__FILE__, array(&$this,'Uninstall')); 
    11751190            register_activation_hook(__FILE__, array(&$this,'Activate')); 
    11761191            register_deactivation_hook(__FILE__, array(&$this,'DeActivate')); 
     1192             
     1193        elseif($this->options['wp_footer']=='1') : 
     1194         
     1195            // enqueue styles 
     1196            wp_enqueue_style($this->_plugin['pagenice'], plugins_url('/f/admin.css',__FILE__), false, $this->_plugin['version'], "all"); 
     1197            wp_enqueue_style($this->_plugin['pagenice'].'1', 'http'. (is_ssl() ? 's' : '' ).'://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css', false, $this->_plugin['version'], "all"); 
     1198     
     1199            // enqueue script 
     1200            wp_enqueue_script($this->_plugin['pagenice'], plugins_url('/f/admin.js',__FILE__), array('jquery','jquery-ui-core','jquery-ui-resizable', 'jquery-ui-tabs', 'jquery-ui-draggable'), $this->_plugin['version']); 
     1201 
    11771202        endif; 
    11781203 
    11791204 
    11801205 
    1181         // enqueue styles 
    1182         wp_enqueue_style($this->_plugin['pagenice'], plugins_url('/f/admin.css',__FILE__), false, $this->_plugin['version'], "all"); 
    1183         wp_enqueue_style($this->_plugin['pagenice'].'1', 'http'. (is_ssl() ? 's' : '' ).'://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css', false, $this->_plugin['version'], "all"); 
    1184  
    1185         // enqueue script 
    1186         wp_enqueue_script($this->_plugin['pagenice'], plugins_url('/f/admin.js',__FILE__), array('jquery','jquery-ui-core','jquery-ui-resizable', 'jquery-ui-tabs', 'jquery-ui-draggable'), $this->_plugin['version']); 
    1187  
    11881206 
    11891207 
     
    11911209 
    11921210        // add old inis to class var and create shutdown function to reset 
    1193         foreach($this->ini_overwrites as $k=>$v)$this->old_inis[$k]=@ini_get($k); 
     1211        foreach($this->ini_overwrites as $k=>$v) $this->old_inis[$k]=@ini_get($k); 
    11941212        $this->old_inis['error_reporting']=error_reporting(); 
    11951213        register_shutdown_function(create_function('','$oe='.$this->old_inis['error_reporting'].';$ne='.error_reporting($this->options['error_reporting']).';error_reporting($oe);')); 
     
    12061224            $this->actions[$id]['nonce']=wp_nonce_url(admin_url("{$this->_plugin['action']}&amp;{$this->_plugin['op']}_action={$id}"), "{$this->_plugin['op']}_action_{$id}"); 
    12071225        } 
    1208         /* 
    1209         foreach ($this->_debug_mods as $id => $info) { 
    1210             $this->actions[]=array('title'=>'Enable '.$info[1], 'nonce'=>wp_nonce_url(admin_url("{$this->_plugin['action']}&amp;{$this->_plugin['op']}_action={$id}"), "{$this->_plugin['op']}_action_{$id}")); 
    1211         } 
    1212         */ 
    1213  
    12141226 
    12151227 
     
    12711283 
    12721284 
    1273         foreach ($this->pages as $id => $idv) { 
     1285 
     1286        $pages=$subpages=array(); 
     1287         
     1288        $pages=array( 
     1289                    'home'=>$this->pages['home'], 
     1290                    'info'=>array('name'=>'Info',   'title'=>'Info', 'nonce'=>wp_nonce_url(admin_url("{$this->_plugin['action']}&amp;{$this->_plugin['op']}_page=info"), "{$this->_plugin['op']}_page_info")), 
     1291                    'phpinfo'=>$this->pages['phpinfo'] 
     1292        ); 
     1293        foreach ($pages as $id => $idv) { 
    12741294            $wp_admin_bar->add_menu(array( 
    12751295                'parent'=> $this->_plugin['op'].'menu', 
     
    12791299            )); 
    12801300        } 
    1281  
    1282         foreach ($this->actions as $id => $idv) { 
     1301         
     1302         
     1303         
     1304        $subpages=array( 
     1305                'wpconfig'      => $this->pages['wpconfig'], 
     1306                'phpinfo'       => $this->pages['phpinfo'], 
     1307                'server-status' => $this->pages['server-status'], 
     1308                'server-info'   => $this->pages['server-info'], 
     1309                'server-env'    => $this->pages['server-env'], 
     1310                'server-parsed' => $this->pages['server-parsed'] 
     1311        ); 
     1312         
     1313        foreach ($subpages as $id => $idv) { 
     1314            $wp_admin_bar->add_menu(array( 
     1315                'parent'=> $this->_plugin['op'].'info', 
     1316                'id'    => $this->_plugin['op'].$id, 
     1317                'title' => $idv['title'], 
     1318                'href'  => $idv['nonce'] 
     1319            )); 
     1320        } 
     1321         
     1322 
     1323        $actions = array(); 
     1324        $action=$this->actions['enable']; 
     1325        if($this->options["admin_footer"]=='1'||$this->options["wp_footer"]=='1') $actions['disable']=$this->actions['disable']; 
     1326        else $actions['enable']=$this->actions['enable']; 
     1327 
     1328        foreach ($actions as $id => $idv) { 
    12831329            $wp_admin_bar->add_menu(array( 
    12841330                'parent'=> $this->_plugin['op'].'menu', 
     
    13271373 
    13281374 
    1329  
    13301375        // parse and handle post requests to plugin 
    1331         if('POST' === $_SERVER['REQUEST_METHOD']) $this->HandlePost(); 
     1376        if('GET'== $_SERVER['REQUEST_METHOD']) $this->HandleGet(); 
     1377        if('POST' == $_SERVER['REQUEST_METHOD']) $this->HandlePost(); 
    13321378 
    13331379        $this->SaveOptions(); 
     
    13361382    } 
    13371383 
     1384    /** AA_DEBUG::HandleGet() 
     1385     */ 
     1386    function HandleGet() 
     1387    { 
     1388        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',10); 
     1389         
     1390        if( !$this->check_auth() ) wp_die( '<strong>ERROR</strong>: User does not have permission to manage options. '.__FUNCTION__.':'.__LINE__ ); 
     1391         
     1392        // verify nonce, if not verified, then DIE 
     1393        if( isset($_GET["{$this->_plugin['op']}_action"], $_GET['_wpnonce']) && $_GET["{$this->_plugin['op']}_action"]=='files' && isset($_GET['file']) )  
     1394        { 
     1395            wp_verify_nonce($_GET['_wpnonce'], 'file_nonce') || wp_die('<strong>ERROR</strong>: Incorrect Form Submission, please try again.'); 
     1396             
     1397            $f=$_GET['file']; 
     1398            $f=rtrim($this->base64url_decode($f),'/'); 
     1399             
     1400            if(is_dir($f)) { 
     1401                $this->options['dirtoexplore']=rtrim($f,'/'); 
     1402                //ISCLOG::epx(array('get'=>$_GET['file'], 'dec'=>$f)); 
     1403            } else { 
     1404                //ISCLOG::epx("_wpnonce set but {$f} not a dir"); 
     1405                if(is_file($f)) $this->options['dirtoexplore']=rtrim($f,'/'); 
     1406            } 
     1407 
     1408        } else { 
     1409            //ISCLOG::epx("_wpnonce nonce not set"); 
     1410            return; 
     1411        } 
     1412         
     1413 
     1414 
     1415 
     1416        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',10); 
     1417    } 
     1418 
     1419 
    13381420    /** AA_DEBUG::HandlePost() 
    13391421     */ 
     
    13421424        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',10); 
    13431425         
    1344         if ( !current_user_can('administrator') ) wp_die( '<strong>ERROR</strong>: User does not have permission to manage options. '.__FUNCTION__.':'.__LINE__ ); 
     1426        if( !$this->check_auth() ) wp_die( '<strong>ERROR</strong>: User does not have permission to manage options. '.__FUNCTION__.':'.__LINE__ ); 
     1427         
     1428        // verify nonce, if not verified, then DIE 
     1429        if(isset($_POST["{$this->_plugin['op']}_{$this->_plugin['nonce']}"])) { 
     1430            wp_verify_nonce($_POST["{$this->_plugin['op']}_{$this->_plugin['nonce']}"], $this->_plugin['nonce']) || wp_die('<strong>ERROR</strong>: Incorrect Form Submission, please try again.'); 
     1431        } 
     1432        elseif(isset($_POST["{$this->_plugin['op']}_{$this->_plugin['nonce']}_reset"])) { 
     1433            wp_verify_nonce($_POST["{$this->_plugin['op']}_{$this->_plugin['nonce']}_reset"], $_POST["{$this->_plugin['op']}_{$this->_plugin['nonce']}_reset"]) || wp_die('<strong>ERROR</strong>: Incorrect Form Submission, please try again.'); 
     1434        } 
     1435        else { 
     1436            //ISCLOG::epx("{$this->_plugin['op']}_{$this->_plugin['nonce']}  nonce not set"); 
     1437            return; 
     1438        } 
     1439         
    13451440         
    13461441        $op = $this->_plugin['op']; 
    13471442 
    1348         // verify nonce, if not verified, then DIE 
    1349         if(isset($_POST["_{$this->_plugin['nonce']}"])) wp_verify_nonce($_POST["_{$this->_plugin['nonce']}"], $this->_plugin['nonce']) || wp_die('<strong>ERROR</strong>: Incorrect Form Submission, please try again.'); 
    1350         elseif(isset($_POST["_{$this->_plugin['nonce']}_reset"])) wp_verify_nonce($_POST["_{$this->_plugin['nonce']}_reset"], $_POST["_{$this->_plugin['nonce']}_reset"]) || wp_die('<strong>ERROR</strong>: Incorrect Form Submission, please try again.'); 
    13511443 
    13521444        // resets options to default values 
     
    13541446 
    13551447 
     1448        // save options 
    13561449        if (isset($_POST["{$op}_save_debug_options"])) 
    13571450        { 
    1358             //if ( !wp_verify_nonce($_POST['_wpnonce'], 'aadebug_settings_form') ) wp_die( '<strong>ERROR</strong>: Incorrect Form Submission, please try again.' ); 
    1359             foreach(array('log_errors','debug_live','admin_footer','wp_footer', 'admin_bar') as $k) $this->options["{$k}"] = (isset($_POST["{$op}_{$k}"]) ? '1' : '0'); 
    1360  
    1361  
    1362             if( isset($_POST["{$op}_log_errors"]) || empty($this->options['logfile']) ) $this->options['logfile']=$this->get_error_log(); 
    1363  
    1364             if (isset($_POST["{$op}_logfile"]) && !empty($_POST["{$op}_logfile"])) $this->options['logfile'] = trim($_POST["{$op}_logfile"]); 
    1365  
    1366             if (isset($_POST["{$op}_dirtoexplore"]) && !empty($_POST["{$op}_dirtoexplore"])) $this->options['dirtoexplore'] = trim($_POST["{$op}_dirtoexplore"]); 
    1367  
    1368  
     1451 
     1452             
     1453            //------------------- simple on/off 
     1454            foreach(array('log_errors','debug_live','admin_footer','wp_footer', 'admin_bar','verbose_modules') as $k)  
     1455                $this->options["{$k}"] = (isset($_POST["{$op}_{$k}"]) ? '1' : '0'); 
     1456            //------------------- simple on/off 
     1457             
     1458 
     1459 
     1460             
     1461             
     1462            //------------------- absint 
     1463            foreach(array('plugin_debug_level','display_height', 'error_reporting') as $k)  
     1464                if(isset($_POST["{$op}_{$k}"]) && !empty($_POST["{$op}_{$k}"])) $this->options["{$k}"] = absint($_POST["{$op}_{$k}"]); 
     1465            //------------------- absint 
     1466             
     1467 
     1468 
     1469             
     1470             
     1471            //------------------- strings 
     1472            foreach(array('logfile','dirtoexplore') as $k)  
     1473                $this->options["{$k}"] = ((isset($_POST["{$op}_{$k}"]) && !empty($_POST["{$op}_{$k}"]))? rtrim(trim($_POST["{$op}_{$k}"]),'/') : $this->options["{$k}"]); 
     1474            //------------------- strings 
     1475             
     1476 
     1477 
     1478             
     1479             
     1480            //------------------- specials 
     1481            if(isset($_POST["{$op}_plugin_debug_level"])) 
     1482                $this->_debug = absint($_POST["{$op}_plugin_debug_level"]); 
     1483 
     1484 
     1485            if( isset($_POST["{$op}_log_errors"]) || empty($this->options['logfile']) ) 
     1486                $this->options['logfile']=$this->get_error_log(); 
     1487            //------------------- specials 
     1488             
     1489 
     1490 
     1491             
     1492             
     1493            //------------------- bits 
    13691494            if (isset($_POST["{$op}_error_reporting"])){ 
    1370                 $this->options['error_reporting'] = absint($_POST["{$op}_error_reporting"]); 
    13711495                if(strpos($_POST["{$op}_error_reporting"],'E')!==FALSE) $this->options['error_reporting']=$this->get_error_levels(trim($_POST["{$op}_error_reporting"],'|'),'string2error'); 
    13721496                elseif(strpos($_POST["{$op}_error_reporting"],'|')!==FALSE) $this->options['error_reporting']=$this->get_error_levels($this->get_error_levels(trim($_POST["{$op}_error_reporting"],'|'),'error2string'),'string2error'); 
     1497 
     1498                if (($this->options['error_reporting'] = 0)==0) { 
     1499                    foreach( array_map( 'intval', (array) $_POST["{$op}_error_reporting"] ) as $bit) $this->options['error_reporting'] |= $bit; 
     1500                } 
     1501 
    13731502            } 
    13741503 
    1375             if (isset($_POST["{$op}_plugin_debug_level"])) $this->_debug = $this->options['plugin_debug_level'] = absint($_POST["{$op}_plugin_debug_level"]); 
    1376  
    1377             if (isset($_POST["{$op}_display_height"])) $this->options['display_height'] = absint($_POST["{$op}_display_height"]); 
    1378  
    1379  
    1380             if (isset($_POST["{$op}_error_reporting"]) && ($this->options['error_reporting'] = 0)==0) { 
    1381                 foreach( array_map( 'intval', (array) $_POST["{$op}_error_reporting"] ) as $bit) $this->options['error_reporting'] |= $bit; 
    1382             } 
    1383  
    1384  
    1385  
    1386             // checked('1', $this->options[$id],false) 
     1504 
    13871505            if (isset($_POST["{$op}_debug_mods"]) && ($this->options['debug_mods'] = 0)==0) { 
    13881506                foreach(array_map( 'intval', (array) $_POST["{$op}_debug_mods"] ) as $bit) $this->options['debug_mods'] |= $bit; 
    13891507            } 
    1390  
    1391             if (isset($_POST["{$op}_debug_mods_v"]) && ($this->options['debug_mods_v'] = 0)==0) { 
    1392                 foreach(array_map( 'intval', (array) $_POST["{$op}_debug_mods_v"] ) as $bit) $this->options['debug_mods_v'] |= $bit; 
    1393             } else { 
    1394                 $this->options['debug_mods_v'] = 0; 
    1395             } 
     1508            //------------------- bits 
     1509 
     1510 
    13961511 
    13971512        } 
     
    14281543 
    14291544            case 'server-env': 
    1430                 echo '<pre class="aa_pre2">'.$this->get_socket_request('server-env.cgi', '0744').'</pre>'; 
     1545                echo $this->get_socket_request('server-env.cgi', '0744'); 
    14311546            break; 
    14321547             
     
    14431558 
    14441559            case 'files': 
    1445                 //echo '<h2>AskApache Debugging Options</h2>'; 
    1446                 //printf( "<p>UMASK: %04o | DIR: %04o | FILE: %04o ", umask(), (0755 & ~ umask()), (0644 & ~ umask()).'</p>'); 
    1447                 //echo '<p><br class="clear" /></p><div class="wrap" style="max-width:1600px;">'; 
    1448  
    1449  
    1450                 //echo '<form action="' . $this->_plugin['action'] . '" method="post" id="post"><div id="poststuff" class="metabox-holder"><div id="normal-sortables" class="meta-box-sortables ui-sortable" style="position: relative;">'; 
    1451                 //echo '<div id="adb'.rand(100,2000).'" class="postbox"><div title="Click to toggle" class="handlediv"><br/></div><h3 class="hndle"><span>Debug Options</span></h3><div class="inside"><fieldset>'; 
    1452  
    1453                 //foreach ( $this->wb($this->options['debug_mods']) as $id ) $oa[strtoupper($this->debug_mods[$id][0])] = $this->{$this->debug_mods[$id][0]}( in_array($id, $this->wb($this->options['debug_mods_v']) ) ? 1 : 0 ); 
    1454  
    1455  
    1456  
    1457                 /*echo '<div style="padding-left:10px">'; 
    1458                      foreach ($this->get_error_levels() as $n=>$v) echo '<p><label for="dl'.$n.'"><input disabled="disabled" type="checkbox" value="'.$v.'" id="dl'.$n.'" name="error_reporting[]"'.$this->_checkedd($v).' /> '.$n.' ('.$v.')</label></p>'; 
    1459                      echo '</div><hr />'; 
    1460                 */ 
    1461  
    1462  
    1463  
    1464                 //wp_nonce_field( 'aadebug_settings_form' ); 
    1465  
    1466                 $this->_pls($this->options['dirtoexplore'],1); 
     1560                echo '<h2>AskApache Directory File Browser</h2>'; 
     1561                printf( "<p>UMASK: %04o | DIR: %04o | FILE: %04o ", umask(), (0755 & ~ umask()), (0644 & ~ umask()).'</p>'); 
     1562                echo '<form action="' . admin_url($this->_plugin['action']) . '" method="post" id="'.$this->_plugin['op'].'_form">'; 
     1563                echo '<hr />'; 
     1564                $this->ff( array('form'=>6,'type'=>'hidden','id'=>$this->_plugin['op'].'_'.$this->_plugin['nonce'],'name'=>$this->_plugin['op'].'_'.$this->_plugin['nonce'],'value'=>wp_create_nonce($this->_plugin['nonce']),'pre'=>'<p style="display:none;">','post'=>'') ); 
     1565                $this->ff( array('form'=>6,'type'=>'hidden','id'=>'_wp_http_referer','name'=>'_wp_http_referer','value'=>(esc_attr($_SERVER['REQUEST_URI'])) ,'pre'=>'','post'=>'</p>') ); 
     1566                $this->ff( array('form'=>6,'type'=>'hidden','id'=>$this->_plugin['op'].'_save_debug_options','name'=>$this->_plugin['op'].'_save_debug_options','value'=>'save_debug_options' ,'pre'=>'','post'=>'</p>') ); 
     1567                echo '<div id="'.$this->_plugin['op'].'">'; 
     1568                $this->ff( array('form'=>2,'type'=>'text','class'=>'aa_wide','title'=>'Dir/File to Explore: ','id'=>'dirtoexplore','value'=>$this->options['dirtoexplore']) ); 
     1569                echo '</div>'; 
     1570                echo '</form>'; 
     1571                 
     1572                $file_nonce=wp_create_nonce('file_nonce');  
     1573                echo $this->_pls($this->options['dirtoexplore'], admin_url("{$this->_plugin['action']}&amp;{$this->_plugin['op']}_action=files&_wpnonce=".$file_nonce), 1); 
    14671574 
    14681575            break; 
     
    15071614                echo '<form action="' . admin_url($this->_plugin['action']) . '" method="post" id="'.$this->_plugin['op'].'_form">'; 
    15081615                echo '<hr />'; 
    1509                 $this->ff( array('form'=>5,'type'=>'hidden','id'=>'_' . $this->_plugin['nonce'],'name'=>'_' . $this->_plugin['nonce'],'value'=>wp_create_nonce($this->_plugin['nonce']),'pre'=>'<p style="display:none;">','post'=>'') ); 
    1510                 $this->ff( array('form'=>5,'type'=>'hidden','id'=>'_wp_http_referer','name'=>'_wp_http_referer','value'=>(esc_attr($_SERVER['REQUEST_URI'])) ,'pre'=>'','post'=>'</p>') ); 
     1616                $this->ff( array('form'=>6,'type'=>'hidden','id'=>$this->_plugin['op'].'_'.$this->_plugin['nonce'],'name'=> $this->_plugin['op'].'_'.$this->_plugin['nonce'],'value'=>wp_create_nonce($this->_plugin['nonce']),'pre'=>'<p style="display:none;">','post'=>'') ); 
     1617                $this->ff( array('form'=>6,'type'=>'hidden','id'=>'_wp_http_referer','name'=>'_wp_http_referer','value'=>(esc_attr($_SERVER['REQUEST_URI'])) ,'pre'=>'','post'=>'</p>') ); 
    15111618 
    15121619 
     
    15151622                $this->ff( array('form'=>1,'type'=>'checkbox','title'=>'<strong>View in wp_footer</strong>','id'=>'wp_footer','checked'=>($this->options['wp_footer']=='1'),'value'=>$this->options['wp_footer']) ); 
    15161623                $this->ff( array('form'=>1,'type'=>'checkbox','title'=>'<strong>Log Errors to File</strong>','id'=>'log_errors','checked'=>($this->options['log_errors']=='1'),'value'=>$this->options['log_errors']) ); 
    1517                  
    15181624                //$this->ff( array('form'=>1,'type'=>'checkbox','title'=>'<strong>Enable Live Debugging</strong>','id'=>'debug_live','checked'=>($this->options['debug_live']=='1'),'value'=>$this->options['debug_live']) ); 
    15191625 
     
    15351641                echo '<div style="padding-left:10px">'; 
    15361642                echo '<h3>Output Modules</h3>'; 
     1643                $this->ff( array('form'=>1,'type'=>'checkbox','title'=>'<strong>Verbose Module Output</strong>','id'=>'verbose_modules','checked'=>($this->options['verbose_modules']=='1'),'value'=>$this->options['verbose_modules']) ); 
     1644                echo '<hr />'; 
    15371645                //$this->ff( array('form'=>5,'type'=>'hidden','id'=>'debug_mods_v','name'=>'debug_mods_v','value'=>$this->options['debug_mods_v'],'pre'=>'','post'=>'') ); 
    15381646                $this->ff( array('form'=>5,'type'=>'hidden','id'=>'debug_mods','name'=>'debug_mods','value'=>$this->options['debug_mods'],'pre'=>'','post'=>'') ); 
     
    16651773        if(!is_user_logged_in())return; 
    16661774 
    1667         //( '<strong>ERROR</strong>: User does not have permission to manage options. '.__FUNCTION__.':'.__LINE__ ); 
    1668         //if(!current_user_can($this->_plugin['role']))return; //aadv_error_log(__FUNCTION__.':'.__LINE__.' User does not have permission to: '.$this->_plugin['role'] ); 
    1669         //if(!current_user_can($this->_plugin['capability']))aadv_error_log( '<strong>ERROR</strong>: User does not have permission to: '.$this->_plugin['capability'] ); 
    16701775        if( is_admin() && $this->options['admin_footer']!='1') { 
    16711776            aadv_error_log(__FUNCTION__.':'.__LINE__.' is_admin and admin_footer option is off, ending footer_output'); 
     
    16921797                $st=sanitize_title_with_dashes($ar); 
    16931798                echo '<div id="tabs-'.$st.'"><a name="'.$st.'" id="'.$st.'"></a>'; 
    1694                 echo $this->{$this->debug_mods[$id][0]}( true ); //echo $this->{$this->debug_mods[$id][0]}( ($this->options['debug_mods_v'] & $id)==$id ); 
     1799                echo $this->{$this->debug_mods[$id][0]}( (bool)$this->options['verbose_modules'] ); //echo $this->{$this->debug_mods[$id][0]}( ($this->options['debug_mods_v'] & $id)==$id ); 
    16951800                echo "<p><br />\n\n\n\n</p>"; 
    16961801                echo "</div><!--tabs-{$st}-->\n"; 
     
    19362041        $desc=strip_tags($args['title']); 
    19372042 
     2043        if($args['form']==6){ 
     2044            $id=$args['id']; 
     2045            $name=$args['name']; 
     2046        } 
     2047 
    19382048        switch ($args['form']) : 
    19392049            case 1: 
     
    19622072 
    19632073            case 5: 
     2074                echo $args['pre']."<input name='{$name}' class='{$args['class']}' type='{$args['type']}' id='{$id}' value='{$args['value']}' />".$args['post']; 
     2075            break; 
     2076 
     2077            case 6: 
    19642078                echo $args['pre']."<input name='{$name}' class='{$args['class']}' type='{$args['type']}' id='{$id}' value='{$args['value']}' />".$args['post']; 
    19652079            break; 
     
    29723086 
    29733087 
    2974  
     3088    /** AA_DEBUG::get_debug_scripts() 
     3089     * 
     3090     * @since 2.9 
     3091     * @version 1.0 
     3092     * 
     3093     * @param mixed $vb 
     3094     */ 
     3095    function get_debug_scripts( $vb = false ) 
     3096    { 
     3097        global $wp_scripts; 
     3098        if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) $wp_scripts = new WP_Scripts(); 
     3099        $g=$wp_scripts; 
     3100        if(!$vb)$g->registered=array_keys($g->registered); 
     3101 
     3102        return $this->pp($this->print_rq($g, true)."\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
     3103    } 
     3104 
     3105 
     3106    /** AA_DEBUG::get_debug_styles() 
     3107     * 
     3108     * @since 2.9 
     3109     * @version 1.0 
     3110     * 
     3111     * @param mixed $vb 
     3112     */ 
     3113    function get_debug_styles( $vb = false ) 
     3114    { 
     3115        global $wp_styles; 
     3116        if ( ! is_a( $wp_styles, 'WP_Styles' ) ) $wp_styles = new WP_Styles(); 
     3117        $g=$wp_styles; 
     3118         
     3119        if(!$vb)$g->registered=array_keys($g->registered); 
     3120 
     3121        return $this->pp($this->print_rq($g, true)."\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 
     3122    } 
    29753123 
    29763124    // PRINT FUNCTIONS ----------------------------------------------------------------------------------------------------------------------------------------------------------------  
     
    30533201     
    30543202        if ( $sub == false ) { 
    3055                 $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',100); 
     3203                //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',100); 
    30563204                $output = ''; 
    30573205                $depth = 0; 
     
    31403288         
    31413289        if( $sub == false ) { 
    3142             $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',0); 
     3290            //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',0); 
    31433291            return $output; 
    31443292        } 
     
    31833331        // replace placeholders with original chars 
    31843332        $a=str_replace($replace, $search, $a); 
    3185  
     3333         
     3334        $a=preg_replace("@ (Object|Array)[\n\r]*[\t ]*\(@mi",' \1 (',$a); 
     3335        $a=preg_replace('/^        /m','   ', $a); 
     3336         
    31863337        // ret or print based on $ret 
    31873338        if($ret===false) echo $a; 
     
    33163467 
    33173468 
    3318     // ERROR/LOGGING FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    3319     /** AA_DEBUG::get_error_levels() 
    3320      * 
    3321      * $err_type = array ( 
    3322      * 1   => "Error",         // E_ERROR 
    3323      * 2   => "Warning",           // E_WARINING 
    3324      * 4   => "Parsing Error", // E_PARSE 
    3325      * 8   => "Notice",            // E_NOTICE 
    3326      * 16  => "Core Error",        // E_CORE_ERROR 
    3327      * 32  => "Core Warning",      // E_CORE_WARNING 
    3328      * 64  => "Compile Error", // E_COMPILE_ERROR 
    3329      * 128 => "Compile Warning",   // E_COMPILE_WARNING 
    3330      * 256 => "User Error",        // E_USER_ERROR 
    3331      *  512 => "User Warning",      // E_USER_WARMING 
    3332      * 1024=> "User Notice",       // E_USER_NOTICE 
    3333      * 2048=> "Strict Notice",      // E_STRICT 
    3334      * 4096=> "Catchable fatal error",      // E_RECOVERABLE_ERROR 
    3335  
    3336      * [E_ERROR] => 1 
    3337      * [E_WARNING] => 2 
    3338      * [E_PARSE] => 4 
    3339      * [E_NOTICE] => 8 
    3340      * [E_CORE_ERROR] => 16 
    3341      * [E_CORE_WARNING] => 32 
    3342      * [E_COMPILE_ERROR] => 64 
    3343      * [E_COMPILE_WARNING] => 128 
    3344      * [E_USER_ERROR] => 256 
    3345      * [E_USER_WARNING] => 512 
    3346      * [E_USER_NOTICE] => 1024 
    3347      * [E_STRICT] => 2048 
    3348      * [E_RECOVERABLE_ERROR] => 4096 
    3349      * [E_DEPRECATED] => 8192 
    3350      * [E_USER_DEPRECATED] => 16384 
    3351      * [E_ALL] => 30719 
    3352      *  
    3353      *  only '|', '~', '!', '^' and '&' will be understood 
    3354      * 
    3355      */ 
    3356     function get_error_levels($v='',$type='defined') 
    3357     { 
    3358  
    3359         static $error_levels=false; 
    3360         static $els=array( 
    3361             1 => array('E_ERROR', 'Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted.'), 
    3362             2 => array('E_WARNING', 'Run-time warnings Execution of the script is not halted.'), 
    3363             4 => array('E_PARSE', 'Compile-time parse errors. Parse errors should only be generated by the parser.'), 
    3364             8 => array('E_NOTICE', 'Run-time notices. Indicate that the script encountered something that could indicate an error, but could also happen in the normal course of running a script.'), 
    3365             16 => array('E_CORE_ERROR', 'Fatal errors that occur during PHPs initial startup. This is like an E_ERROR, except it is generated by the core of PHP.'), 
    3366             32 => array('E_CORE_WARNING', 'Warnings  that occur during PHPs initial startup. This is like an E_WARNING, except it is generated by the core of PHP.'), 
    3367             64 => array('E_COMPILE_ERROR', 'Fatal compile-time errors. This is like an E_ERROR, except it is generated by the Zend Scripting Engine.'), 
    3368             128 => array('E_COMPILE_WARNING', 'Compile-time warnings This is like an E_WARNING, except it is generated by the Zend Scripting Engine.'), 
    3369             256 => array('E_USER_ERROR', 'User-generated error message. This is like an E_ERROR, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
    3370             512 => array('E_USER_WARNING', 'User-generated warning message. This is like an E_WARNING, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
    3371             1024 => array('E_USER_NOTICE', 'User-generated notice message. This is like an E_NOTICE, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
    3372             2048 => array('E_STRICT', 'Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code.'), 
    3373             4096 => array('E_RECOVERABLE_ERROR', 'Catchable fatal error. It indicates a probably dangerous error occured. If the error is not caught by a user defined handle, the application aborts E_ERROR.'), 
    3374             8192 => array('E_DEPRECATED', 'Run-time notices. Enable this to receive warnings about code that will not work in future versions.'), 
    3375             16384 => array('E_USER_DEPRECATED', 'User-generated warning message. This is like an E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
    3376             30719 => array('E_ALL', 'All errors and warnings, as supported, except of level E_STRICT.') 
    3377         ); 
    3378  
    3379  
    3380         if(false===$error_levels) { 
    3381             $error_levels=array(); 
    3382              
    3383             foreach(array('ERROR','WARNING','PARSE','NOTICE','CORE_ERROR','CORE_WARNING','COMPILE_ERROR','COMPILE_WARNING','USER_ERROR','USER_WARNING','USER_NOTICE','STRICT','RECOVERABLE_ERROR','DEPRECATED','USER_DEPRECATED','ALL') as $k) { 
    3384                 if(defined("E_{$k}")) $error_levels["E_{$k}"]=constant("E_{$k}"); 
     3469 
     3470    // SOCKET NET FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     3471    /** AA_DEBUG::get_socket_request($n='',$p='') 
     3472     * 
     3473     * @since 2.6 
     3474     * @version 1.0 
     3475     * 
     3476     * @param mixed $vb 
     3477     */ 
     3478    function get_socket_request($n='',$p='') 
     3479    { 
     3480        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',5); 
     3481 
     3482        $this->activate_ff_htaccess(); 
     3483         
     3484         
     3485        $url=PLUGINS_COOKIE_PATH.str_replace(array('https://',WP_PLUGIN_URL),array('http://',''), plugins_url('/f/f/'.$n,__FILE__) ); 
     3486        $f=str_replace(basename(__FILE__),'f/f/'.$n, __FILE__); 
     3487        $ret=''; 
     3488 
     3489 
     3490        if(file_exists($f)) 
     3491        { 
     3492            if(!empty($p)) { 
     3493                $perms=0; 
     3494                $perms=intval(substr(sprintf('%o', fileperms($f)), -3)); 
     3495                if( (intval($perms)!=744 && intval($perms) < 755) && !@chmod($f, 0755)) $ret="\nCANNOT CONTINUE: {$f} perms need to be {$p} or higher (currently {$perms}). # chmod u+x {$f}\n"; 
    33853496            } 
    3386              
    3387             $this->l(print_r($error_levels,1),99); 
    3388         } 
    3389  
    3390  
    3391         switch($type) 
    3392         { 
    3393             case 'defined': $ret=$error_levels; break; 
    3394             case 'string2error':  $e=0; foreach((array)array_map('trim',(array)explode('|',"{$v}")) as $l) if(defined($k)) $e|=(int)constant($k); $ret=$k; break; 
    3395             case 'error2string':    $ls=array();if( ( $v & E_ALL ) == E_ALL ){ $ls[]='E_ALL';$v &= ~E_ALL; } foreach($error_levels as $l=>$n) if(($v&$n)==$n) $ls[]="$l"; $ret=implode('|',$ls); break; 
    3396             case 'enabled': 
    3397                     $res=$re=array(); 
    3398                     $bit = intval(error_reporting()); 
    3399                     while ($bit > 0) { 
    3400                         for($i = 0, $n = 0; $i<=$bit; $i = 1 * pow(2, $n), $n++) $end = $i; 
    3401  
    3402                         if(isset($els[$end])) $res[]=array($end, $re[]=$this->get_error_levels($end,'error2string'), $els[$end][1]); 
    3403                          
    3404                         $bit -= $end; 
    3405                     } 
    3406                     $ret=array_reverse($res); 
    3407             break; 
    3408             case 'enabled_php_code': $res=$this->get_error_levels($v,'enabled'); $re=array(); foreach($res as $k=>$v) $re[]=$v[1]; $ret='error_reporting('.implode('|',$re).');'; break; 
    3409         } 
    3410  
    3411         //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',5); 
     3497        } 
     3498         
     3499 
     3500        if(!file_exists($f)) $ret="\nCANNOT CONTINUE: {$f} not found.\n"; 
     3501         
     3502        if($ret=='') { 
     3503 
     3504            // resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] ) 
     3505            if (false === ( $fp = fsockopen($_SERVER['HTTP_HOST'], 80, $errno, $errstr,5) ) || !is_resource($fp) ) echo $this->socket_error($fp, (int)$errno, $errstr); 
     3506            else { 
     3507                $response=$headers=$body=''; 
     3508                $request= 
     3509                'GET '.$url.' HTTP/1.0'."\r\n". 
     3510                'Host: '.$_SERVER['HTTP_HOST']."\r\n". 
     3511                'User-Agent: Mozilla/5.0 (AskApache/; +http://www.askapache.com/)'."\r\n". 
     3512                'Accept-Encoding: none'."\r\n". 
     3513                'Referer: http://www.askapache.com/'."\r\n". 
     3514                "X-Pad: {$this->options['key']}"."\r\n". 
     3515                'Cookie: '.LOGGED_IN_COOKIE."=\r\n". 
     3516                'Connection: close'."\r\n\r\n"; 
     3517 
     3518                fwrite($fp, $request); 
     3519                while (!feof($fp)) $response .= fread($fp, 1); 
     3520                $response=explode("\r\n\r\n",$response,2); 
     3521                $headers=$response[0]; 
     3522                $body=$response[1]; 
     3523 
     3524 
     3525                if(strpos($headers,'200 OK')!==false) $ret='<pre class="aa_pre1">'.htmlspecialchars($body).'</pre>'; 
     3526                else { 
     3527                    ob_start(); 
     3528                    echo '<pre class="aa_pre1">'."\nFILE: {$f}\n". $this->_statls($f,1).'</pre>'; 
     3529                    echo "\n<h3>HEADER TRACE</h3><pre class='aa_pre1'>\n".str_repeat("&gt;",100)."\n".htmlspecialchars($request)."\n".str_repeat("&lt;",100)."\n".htmlspecialchars($headers)."</pre>"; 
     3530                    echo "<pre class='aa_pre1'>".htmlspecialchars($body)."</pre>"; 
     3531                    $ret=ob_get_clean(); 
     3532                } 
     3533 
     3534                if (is_resource($fp)) @fclose($fp); 
     3535            } 
     3536        } 
     3537         
     3538 
     3539 
     3540 
     3541 
     3542        $this->options['page']='home'; 
     3543         
     3544        $this->SaveOptions(); 
     3545         
     3546        $this->deactivate_ff_htaccess(); 
     3547 
     3548         
     3549        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',5); 
     3550         
    34123551        return $ret; 
    34133552    } 
    3414  
    3415     /** AA_DEBUG::tt() 
    3416     */ 
    3417     function tt($id = false, $d = false) 
    3418     { 
    3419         static $a = null, $b = null; 
    3420         if(is_null($a))$a=$b=array(); 
    3421         if($id===false)$id=md5(__FILE__); 
    3422         $ct = array_sum(explode(chr(32), microtime())); 
    3423         //$this->l(print_r(array($a,$b),1)); 
    3424         if(!isset($a[$id])){ 
    3425             $a[$id] = $ct; 
    3426             $b[$id] = 0; 
    3427             //$this->l(print_r(array($a,$b),1)); 
    3428             //$this->l("id: $id | ". ($d?'1':'0') ." | ".$a[$id]." | ".$b[$id],100); 
    3429             //if($d) return '0.0000'; 
    3430             return array($b[$id], '0.0000'); 
    3431         }else { 
    3432             $b[$id]+=1; 
    3433             //$this->l(print_r(array($a,$b),1)); 
    3434             //$this->l("id: $id | ". ($d?'1':'0') ." | ".$a[$id]." | ".$b[$id],100); 
    3435             return array($b[$id], sprintf("%.4f", ($ct - $a[$id]))); 
    3436         } 
    3437  
    3438         //if(!isset($a[$id]) && $a[$id]=$ct) return array($b[$id]=0, '0.0000'); 
    3439         //else return array($b[$id]+=1, sprintf("%.4f", ($ct - $a[$id]))); 
    3440     } 
    3441  
    3442     /** AA_DEBUG::t() 
    3443     */ 
    3444     function t($f='', $c='AA_DEBUG', $fu='', $l=0, $m='', $d=0) 
    3445     { 
    3446         if( $this->d($d) === false ) return;// aadv_error_log("t Skipped.. {$fu} {$this->_debug} <= {$d}"); 
    3447  
    3448         $tfunc=$this->tt("{$c}{$fu}"); 
    3449         $tscript=$this->tt($f); 
    3450         $f=str_replace(dirname($f).'/','',$f); 
    3451         if(empty($m))$m=((($tfunc[0] % 2) == 0) ? "START" : "END.."); 
    3452         $msg=sprintf('PHP Notice: [%03s] [%-4.4s] %s:%-6.6s %-40.40s [%03s] [%s] %s %s ', $tscript[1], $tscript[0], $f, $l, "{$c}::{$fu}()", $tfunc[1], $tfunc[0], $this->mem_usage(1), $m); 
    3453         $this->l($msg, $d); 
    3454         return; 
    3455     } 
    3456  
    3457     /** AA_DEBUG::timer() 
    3458      */ 
    3459     function timer($id=FALSE) 
    3460     { 
    3461         static $a=NULL,$i=NULL; 
    3462         if(is_null($i))$i=md5(__FILE__); 
    3463         if($id===FALSE)$id=$i; 
    3464         else $id=md5($id); 
    3465  
    3466         if(is_null($a))$a=array(); 
    3467         $ct = array_sum(explode(chr(32), microtime())); 
    3468         if(!isset($a[$id])) return sprintf("%.4f", ($ct - ($a[$id] = $ct))); 
    3469         else return sprintf("%.4f", ($ct - $a[$id]) ); 
    3470     } 
    3471  
    3472     /** AA_DEBUG::d() 
    3473      */ 
    3474     function d($level=0) 
    3475     { 
    3476         $test=0; 
    3477         $level=absint($level); 
    3478         if(isset($this->_debug)) $test=(absint($this->_debug) * 1); 
    3479         //aadv_error_log("debug:{$this->_debug} | plugin_debug_level:{$this->options['plugin_debug_level']} | test:{$test} | level:{$level}"); 
    3480         return (bool) (( $test >= $level ) ? true : false); 
    3481     } 
    3482  
    3483     /** AA_DEBUG::l() 
    3484      */ 
    3485     function l($msg,$d=5,$b=false) 
    3486     { 
    3487         if( $this->d($d) === false) return;// aadv_error_log("l Skipped.. {$this->_debug} >= {$d}"); 
    3488  
    3489         if( $this->options && $this->options['log_errors']=='1' ){ 
    3490             if($b){ 
    3491                 $t2=$this->tt($f); 
    3492                 aadv_error_log("PHP Notice:  ".$f." [".$t2[0]."] [".$t2[1]."] [".$this->mem_usage(1)."] ".__CLASS__."::l()"." {$msg}"); 
    3493             } else { 
    3494                 if(empty($msg))return; 
    3495                 aadv_error_log($msg); 
    3496             } 
    3497         } else return aadv_error_log("Skipped.. no options"); 
    3498         return; 
    3499     } 
    3500  
    3501     /** AA_DEBUG::mem_usage() 
    3502      * 
    3503      * @param mixed $raw 
    3504      */ 
    3505     function mem_usage($raw = false) 
    3506     { 
    3507         static $v=NULL,$m=NULL; 
    3508         if(is_null($m)) $m = $this->_cf('memory_get_usage'); 
    3509         if ($m === false) return 1; 
    3510         if(is_null($v)) $v = version_compare(phpversion(), '5.2.0', '>='); 
    3511  
    3512         $mem = (($v === false) ? memory_get_usage(true) : memory_get_usage()); 
    3513         return(($raw !== false) ? $this->bytes($mem) : $mem); 
    3514     } 
    3515      
    3516     /** AA_DEBUG::bytes() 
    3517      * 
    3518      * @param integer $b 
    3519      */ 
    3520     function bytes($b = 0) 
    3521     { 
    3522         $s = array('B', 'Kb', 'MB', 'GB', 'TB', 'PB'); 
    3523         $e = floor(log($b) / log(1024)); 
    3524         return sprintf('%.2f ' . $s[$e], (($b > 0) ? ($b / pow(1024, floor($e))) : 0)); 
    3525     } 
    3526  
    3527     /** AA_DEBUG::die_log() 
    3528      */ 
    3529     function die_log($m='') 
    3530     { 
    3531         die(!('' != $m && error_log($m) && (print PHP_EOL."$m".PHP_EOL))); 
    3532     } 
    3533  
    3534     /** AA_DEBUG::die_trace() 
    3535      */ 
    3536     function die_trace($m='') 
    3537     { 
    3538         $dbg=debug_backtrace(false); 
    3539  
    3540         die( 
    3541             !( 
    3542                 array_walk($dbg, 
    3543                     create_function( 
    3544                     '&$a,$k,$m', ' 
    3545                     echo '. ($i ? 'sprintf("%-{$k}s#%-2d "," ",$k)' : 'sprintf("#%-2d ",$k)').' 
    3546                         .(isset($a[\'class\']) 
    3547                                              ? "{$a[\'class\']}" :"") 
    3548                         .(isset($a[\'type\']) 
    3549                                              ? "{$a[\'type\']}" :"") 
    3550                         .(isset($a[\'function\']) 
    3551                                              ? "{$a[\'function\']}()" :"()") 
    3552                         .(isset($a[\'file\']) 
    3553                                              ?" called at [{$a[\'file\']}":"") 
    3554                         .(isset($a[\'line\']) 
    3555                                              ? ":{$a[\'line\']}" :"")."]" 
    3556                         .(!!($a[\'args\']) 
    3557                                              ? " with args: |".implode(", ", $a[\'args\'])."|"  : "") 
    3558                         .((isset($m)&&!empty($m)) ? " MSG: {$m}" : "") 
    3559                         ."\n";' 
    3560                     ),$m 
    3561                 ) && (print_r(array('debug_backtrace for die_trace'=>$dbg)))!==FALSE 
    3562             ) 
    3563         ); 
    3564         //unset($dbg); 
    3565     } 
    3566  
    3567     /** AA_DEBUG::get_error_log() 
    3568      */ 
    3569     function get_error_log() 
    3570     { 
    3571  
    3572         // If this directive is not set, errors are sent to the SAPI error logger. For example, it is an error log in Apache or stderr in CLI. 
    3573         $log_file_ini=strval(ini_get('error_log')); 
    3574         //$this->l("log_file_ini: $log_file_ini"); 
    3575  
    3576         //(( defined('WP_DEBUG_LOG') && WP_DEBUG_LOG===TRUE ) ? WP_CONTENT_DIR . '/debug.log' : FALSE); 
    3577         $log_file_wp=WP_CONTENT_DIR . '/debug.log'; 
    3578         //$this->l("log_file_wp: $log_file_wp"); 
    3579  
    3580         $log_file_opt = $this->options['logfile']; 
    3581         //$this->l("log_file_opt: $log_file_opt"); 
    3582  
    3583         if(!empty($log_file_opt))$log_file=$log_file_opt; 
    3584         elseif(!empty($log_file_ini))$log_file=$log_file_ini; 
    3585         elseif(!empty($log_file_wp))$log_file=$log_file_wp; 
    3586  
    3587         //$log_file = ( is_array($this->options) && isset($this->options['logfile']) ) ? $this->options['logfile'] : @ini_get( 'error_log' ); 
    3588         return $log_file; 
    3589     } 
    3590  
    3591     /** AA_DEBUG::get_line_at() 
    3592      */ 
    3593     function get_line_at($file='',$num=0,$html=false) 
    3594     { 
    3595         $code=''; 
    3596         $lines = array(); 
    3597         if ($lines = explode("\n",str_replace(array("\r\n","\c\r","\r"),"\n",implode('',file($file))),($num+5))) 
    3598         { 
    3599             array_map('rtrim',$lines); 
    3600             if($html)   $code=highlight_string($lines[$num],true); 
    3601             else $code=join("\n",array_slice($lines,($num-1),2)); 
    3602         } 
    3603         unset($lines); 
    3604         return $code; 
    3605     } 
    3606  
    3607     /** AA_DEBUG::get_caller($bt) 
    3608      */ 
    3609     function get_caller($bt) 
    3610     { 
    3611         // requires PHP 4.3+ 
    3612         if ( !$this->cf('debug_backtrace') ) return array(); 
    3613         $caller = array(); 
    3614  
    3615         foreach ( (array) array_reverse( $bt ) as $call ) 
    3616         { 
    3617             $function = (isset( $call['function'] ) ? $call['function'] : ''); 
    3618             if ( isset( $call['class'] ) ) 
    3619             { 
    3620                 if ($call['class'] == __CLASS__ ) continue; 
    3621                 $function = $call['class'] . "->$function"; 
    3622             } 
    3623             $caller[] = $function; 
    3624         } 
    3625  
    3626         return join( ', ', $caller ); 
    3627     } 
    3628  
    36293553    /** AA_DEBUG::socket_error() 
    36303554    * 
     
    38433767    } 
    38443768 
    3845     /** AA_DEBUG::_stream_stat(&$fp) 
    3846     */ 
    3847     function _stream_stat(&$fp) 
    3848     { 
    3849         $default_options=array( 
    3850             'stream_type' => '', 
    3851             'mode' => '', 
    3852             'unread_bytes' => 0, 
    3853             'seekable' => null, 
    3854             'timed_out' => null, 
    3855             'blocked' => 1, 
    3856             'eof' => null 
    3857         ); 
    3858          
    3859         $ret=stream_get_meta_data($fp); 
    3860         $ret=$this->_parse_args($ret, $default_options); 
    3861         return $ret; 
    3862     } 
    3863  
    3864  
    3865  
    3866  
    3867     // MISC FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    3868     /** AA_DEBUG::print_var_dump() - Returns the output from var_dump($var) 
    3869      */ 
    3870     function print_var_dump($var,$return=true) 
    3871     { 
    3872         ob_start(); 
    3873         var_dump($var); 
    3874         $out = ob_get_contents(); 
    3875         ob_end_clean(); 
    3876         if ($return) return $out; 
    3877         else echo $out; 
    3878     } 
    3879  
    3880     /** AA_DEBUG::print_var_export() - Returns the output from var_export($var) 
    3881      */ 
    3882     function print_var_export($var,$return=true) 
    3883     { 
    3884         ob_start(); 
    3885         var_export($var); 
    3886         $out = ob_get_contents(); 
    3887         ob_end_clean(); 
    3888         if ($return) return $out; 
    3889         else echo $out; 
    3890     } 
    3891      
    3892     /** AA_DEBUG::_cf() 
    3893      */ 
    3894     function _cf($f) 
    3895     { 
    3896         static $b,$g = array(); 
    3897  
    3898  
    3899         if(!isset($b)) { 
    3900             $b=$disabled=array(); 
    3901             $disabled=array( @ini_get('disable_functions'), @ini_get('suhosin.executor.func.blacklist'), @get_cfg_var('disable_functions'),@get_cfg_var('suhosin.executor.func.blacklist')); 
    3902             if (@ini_get('safe_mode')) { 
    3903                 $disabled[]='shell_exec'; 
    3904                 $disabled[]='set_time_limit'; 
    3905             } 
    3906             $b=$this->_array_iunique(array_map('trim',explode(',',strtolower(preg_replace('/[,]+/',',',trim(join(',',$disabled),',')))))); 
    3907         } 
    3908  
    3909         $f=strtolower($f); 
    3910         if ( ( in_array($f, $g) || in_array($f, $b)) ) return (in_array($f, $g)); 
    3911         else return ( 
    3912                         in_array($f,array($g,$b)) 
    3913                         ? in_array($f, $g) 
    3914                         : ( 
    3915                              (!function_exists($f)) 
    3916                              ? !( $b[]=$f ) 
    3917                              : !!( $g[]=$f ) 
    3918                             ) 
    3919                         ); 
    3920  
    3921         //aadv_error_log($f.":".$this->print_var_dump($ret).print_r(array('good'=>$g,'bad'=>$b),1)); 
    3922     } 
    3923  
    3924     /** AA_DEBUG::_array_iunique($array) 
    3925     */ 
    3926     function _array_iunique($array) 
    3927     { 
    3928         return array_intersect_key($array,array_unique(array_map('strtolower',$array))); 
    3929     } 
    3930  
    3931     /** AA_DEBUG::rstr_replace( $s, $su ) 
    3932     */ 
    3933     function rstr_replace( $s, $su ) 
    3934     { 
    3935         $f = true; 
    3936         $su=(string)$su; 
    3937         while($f) { 
    3938             $f = false; 
    3939             foreach ( (array) $s as $v=>$r ) { 
    3940                 while ( ($f=(strpos( $su, $v ) !== false)) ) $su = str_replace( $v, $r, $su ); 
    3941             } 
    3942         } 
    3943         return $su; 
    3944     } 
    3945  
    3946     /** AA_DEBUG::_do_update() 
    3947      * 
    3948      * @param mixed $check_time 
    3949      * @param integer $newer_than 
    3950      */ 
    3951     function _do_update( $check_time, $newer_than = 300 ) 
    3952     { 
    3953         $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
    3954         $time = ( time() - $check_time ); 
    3955         return ( $newer_than < $time ) ? true : false; 
    3956     } 
    3957  
    3958     /** AA_DEBUG::_get_rand_str() 
    3959      * 
    3960      * @param mixed $l 
    3961      * @param mixed $c 
    3962      */ 
    3963     function _get_rand_str($l=null,$c=null) 
    3964     { 
    3965         $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
    3966         static $chars; 
    3967         !is_null($c) && $chars=$c; 
    3968         is_null($chars) && $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    3969         is_null($l) && $l = rand(4,8); 
    3970  
    3971         return substr(str_shuffle($chars . $chars . $chars), 0, $l); 
    3972         $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
    3973     } 
    3974  
    3975     /** AA_DEBUG::_stripdeep() 
    3976      * 
    3977      * @param mixed $value 
    3978      */ 
    3979     function _stripdeep(&$value){ return(is_array($value) ? array_map(array($this,'_stripdeep'), $value) : stripslashes($value));} 
    3980  
    3981     /** AA_DEBUG::_parse_args() 
    3982      * 
    3983      * @param mixed $a 
    3984      * @param string $d 
    3985      * @param string $r 
    3986      */ 
    3987     function _parse_args($a,$d='',$r=''){ return(false!==($r=(is_object($a)?get_object_vars($a):((!is_array($a)&&false!==(parse_str($a,$r)))?$r:$a)))&&is_array($d)?array_merge($d,$r):$r); } 
    3988  
    3989     /** AA_DEBUG::get_posix_info() 
    3990      * 
    3991      * @param string $type 
    3992      * @param string $id 
    3993      * @param mixed $item 
    3994      */ 
    3995     function get_posix_info( $type = 'all', $id = '', $item = false ) 
    3996     { 
    3997         //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
    3998  
    3999         static $egid,$pwuid,$grgid,$euid; 
    4000         if(!$egid && $this->_cf('posix_getegid')) $egid=posix_getegid(); 
    4001         if(!$euid && $this->_cf('posix_geteuid')) $euid=posix_geteuid(); 
    4002  
    4003         if(!$pwuid && $this->_cf('posix_getpwuid')) $pwuid=posix_getpwuid($egid); 
    4004         if(!$grgid && $this->_cf('posix_getgrgid')) $grgid=posix_getgrgid($euid); 
    4005  
    4006         if(gettype($id)=='string' || $id=='')$id=$euid; 
    4007         $info = array(); 
    4008         switch ( $type ): 
    4009         case 'group':  $info = ($this->_cf('posix_getgrgid') ? posix_getgrgid( $id ):'');  break; 
    4010         case 'user':  $info = ($this->_cf('posix_getpwuid') ? posix_getpwuid( $id ):'');  break; 
    4011         endswitch; 
    4012  
    4013         //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
    4014         return (( $item !== false && isset($info[$item]) ) ? $info[$item] : $info); 
    4015     } 
    4016  
    40173769    /** AA_DEBUG::activate_ff_htaccess() 
    40183770     * 
    40193771     * @since 2.6 
    4020      * @version 1.1 
     3772     * @version 1.2 
    40213773     * 
    40223774     */ 
     
    40363788            $ahr[]="AddType text/html .shtml"; 
    40373789            $ahr[]="AddOutputFilter INCLUDES .shtml"; 
     3790            $ahr[]="Allow from all"; 
     3791            $ahr[]="Satisfy any"; 
    40383792            $ahr[]="<Files server-info>"; 
    40393793            $ahr[]="SetHandler server-info"; 
     
    40833837    } 
    40843838 
     3839 
     3840 
     3841 
     3842 
     3843    // ERROR/LOGGING FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     3844    /** AA_DEBUG::get_error_levels() 
     3845     * 
     3846     * $err_type = array ( 
     3847     * 1   => "Error",         // E_ERROR 
     3848     * 2   => "Warning",           // E_WARINING 
     3849     * 4   => "Parsing Error", // E_PARSE 
     3850     * 8   => "Notice",            // E_NOTICE 
     3851     * 16  => "Core Error",        // E_CORE_ERROR 
     3852     * 32  => "Core Warning",      // E_CORE_WARNING 
     3853     * 64  => "Compile Error", // E_COMPILE_ERROR 
     3854     * 128 => "Compile Warning",   // E_COMPILE_WARNING 
     3855     * 256 => "User Error",        // E_USER_ERROR 
     3856     *  512 => "User Warning",      // E_USER_WARMING 
     3857     * 1024=> "User Notice",       // E_USER_NOTICE 
     3858     * 2048=> "Strict Notice",      // E_STRICT 
     3859     * 4096=> "Catchable fatal error",      // E_RECOVERABLE_ERROR 
     3860 
     3861     * [E_ERROR] => 1 
     3862     * [E_WARNING] => 2 
     3863     * [E_PARSE] => 4 
     3864     * [E_NOTICE] => 8 
     3865     * [E_CORE_ERROR] => 16 
     3866     * [E_CORE_WARNING] => 32 
     3867     * [E_COMPILE_ERROR] => 64 
     3868     * [E_COMPILE_WARNING] => 128 
     3869     * [E_USER_ERROR] => 256 
     3870     * [E_USER_WARNING] => 512 
     3871     * [E_USER_NOTICE] => 1024 
     3872     * [E_STRICT] => 2048 
     3873     * [E_RECOVERABLE_ERROR] => 4096 
     3874     * [E_DEPRECATED] => 8192 
     3875     * [E_USER_DEPRECATED] => 16384 
     3876     * [E_ALL] => 30719 
     3877     *  
     3878     *  only '|', '~', '!', '^' and '&' will be understood 
     3879     * 
     3880     */ 
     3881    function get_error_levels($v='',$type='defined') 
     3882    { 
     3883 
     3884        static $error_levels=false; 
     3885        static $els=array( 
     3886            1 => array('E_ERROR', 'Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted.'), 
     3887            2 => array('E_WARNING', 'Run-time warnings Execution of the script is not halted.'), 
     3888            4 => array('E_PARSE', 'Compile-time parse errors. Parse errors should only be generated by the parser.'), 
     3889            8 => array('E_NOTICE', 'Run-time notices. Indicate that the script encountered something that could indicate an error, but could also happen in the normal course of running a script.'), 
     3890            16 => array('E_CORE_ERROR', 'Fatal errors that occur during PHPs initial startup. This is like an E_ERROR, except it is generated by the core of PHP.'), 
     3891            32 => array('E_CORE_WARNING', 'Warnings  that occur during PHPs initial startup. This is like an E_WARNING, except it is generated by the core of PHP.'), 
     3892            64 => array('E_COMPILE_ERROR', 'Fatal compile-time errors. This is like an E_ERROR, except it is generated by the Zend Scripting Engine.'), 
     3893            128 => array('E_COMPILE_WARNING', 'Compile-time warnings This is like an E_WARNING, except it is generated by the Zend Scripting Engine.'), 
     3894            256 => array('E_USER_ERROR', 'User-generated error message. This is like an E_ERROR, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
     3895            512 => array('E_USER_WARNING', 'User-generated warning message. This is like an E_WARNING, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
     3896            1024 => array('E_USER_NOTICE', 'User-generated notice message. This is like an E_NOTICE, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
     3897            2048 => array('E_STRICT', 'Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code.'), 
     3898            4096 => array('E_RECOVERABLE_ERROR', 'Catchable fatal error. It indicates a probably dangerous error occured. If the error is not caught by a user defined handle, the application aborts E_ERROR.'), 
     3899            8192 => array('E_DEPRECATED', 'Run-time notices. Enable this to receive warnings about code that will not work in future versions.'), 
     3900            16384 => array('E_USER_DEPRECATED', 'User-generated warning message. This is like an E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error()</span>.'), 
     3901            30719 => array('E_ALL', 'All errors and warnings, as supported, except of level E_STRICT.') 
     3902        ); 
     3903 
     3904 
     3905        if(false===$error_levels) { 
     3906            $error_levels=array(); 
     3907             
     3908            foreach(array('ERROR','WARNING','PARSE','NOTICE','CORE_ERROR','CORE_WARNING','COMPILE_ERROR','COMPILE_WARNING','USER_ERROR','USER_WARNING','USER_NOTICE','STRICT','RECOVERABLE_ERROR','DEPRECATED','USER_DEPRECATED','ALL') as $k) { 
     3909                if(defined("E_{$k}")) $error_levels["E_{$k}"]=constant("E_{$k}"); 
     3910            } 
     3911             
     3912            $this->l(print_r($error_levels,1),99); 
     3913        } 
     3914 
     3915 
     3916        switch($type) 
     3917        { 
     3918            case 'defined': $ret=$error_levels; break; 
     3919            case 'string2error':  $e=0; foreach((array)array_map('trim',(array)explode('|',"{$v}")) as $l) if(defined($k)) $e|=(int)constant($k); $ret=$k; break; 
     3920            case 'error2string':    $ls=array();if( ( $v & E_ALL ) == E_ALL ){ $ls[]='E_ALL';$v &= ~E_ALL; } foreach($error_levels as $l=>$n) if(($v&$n)==$n) $ls[]="$l"; $ret=implode('|',$ls); break; 
     3921            case 'enabled': 
     3922                    $res=$re=array(); 
     3923                    $bit = intval(error_reporting()); 
     3924                    while ($bit > 0) { 
     3925                        for($i = 0, $n = 0; $i<=$bit; $i = 1 * pow(2, $n), $n++) $end = $i; 
     3926 
     3927                        if(isset($els[$end])) $res[]=array($end, $re[]=$this->get_error_levels($end,'error2string'), $els[$end][1]); 
     3928                         
     3929                        $bit -= $end; 
     3930                    } 
     3931                    $ret=array_reverse($res); 
     3932            break; 
     3933            case 'enabled_php_code': $res=$this->get_error_levels($v,'enabled'); $re=array(); foreach($res as $k=>$v) $re[]=$v[1]; $ret='error_reporting('.implode('|',$re).');'; break; 
     3934        } 
     3935 
     3936        //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',5); 
     3937        return $ret; 
     3938    } 
     3939 
     3940    /** AA_DEBUG::tt() 
     3941    */ 
     3942    function tt($id = false, $d = false) 
     3943    { 
     3944        static $a = null, $b = null; 
     3945        if(is_null($a))$a=$b=array(); 
     3946        if($id===false)$id=md5(__FILE__); 
     3947        $ct = array_sum(explode(chr(32), microtime())); 
     3948        //$this->l(print_r(array($a,$b),1)); 
     3949        if(!isset($a[$id])){ 
     3950            $a[$id] = $ct; 
     3951            $b[$id] = 0; 
     3952            //$this->l(print_r(array($a,$b),1)); 
     3953            //$this->l("id: $id | ". ($d?'1':'0') ." | ".$a[$id]." | ".$b[$id],100); 
     3954            //if($d) return '0.0000'; 
     3955            return array($b[$id], '0.0000'); 
     3956        }else { 
     3957            $b[$id]+=1; 
     3958            //$this->l(print_r(array($a,$b),1)); 
     3959            //$this->l("id: $id | ". ($d?'1':'0') ." | ".$a[$id]." | ".$b[$id],100); 
     3960            return array($b[$id], sprintf("%.4f", ($ct - $a[$id]))); 
     3961        } 
     3962 
     3963        //if(!isset($a[$id]) && $a[$id]=$ct) return array($b[$id]=0, '0.0000'); 
     3964        //else return array($b[$id]+=1, sprintf("%.4f", ($ct - $a[$id]))); 
     3965    } 
     3966 
     3967    /** AA_DEBUG::t() 
     3968    */ 
     3969    function t($f='', $c='AA_DEBUG', $fu='', $l=0, $m='', $d=0) 
     3970    { 
     3971        if( $this->d($d) === false ) return;// aadv_error_log("t Skipped.. {$fu} {$this->_debug} <= {$d}"); 
     3972 
     3973        $tfunc=$this->tt("{$c}{$fu}"); 
     3974        $tscript=$this->tt($f); 
     3975        $f=str_replace(dirname($f).'/','',$f); 
     3976        if(empty($m))$m=((($tfunc[0] % 2) == 0) ? "START" : "END.."); 
     3977        $msg=sprintf('PHP Notice: [%03s] [%-4.4s] %s:%-6.6s %-40.40s [%03s] [%s] %s %s ', $tscript[1], $tscript[0], $f, $l, "{$c}::{$fu}()", $tfunc[1], $tfunc[0], $this->mem_usage(1), $m); 
     3978        $this->l($msg, $d); 
     3979        return; 
     3980    } 
     3981 
     3982    /** AA_DEBUG::timer() 
     3983     */ 
     3984    function timer($id=FALSE) 
     3985    { 
     3986        static $a=NULL,$i=NULL; 
     3987        if(is_null($i))$i=md5(__FILE__); 
     3988        if($id===FALSE)$id=$i; 
     3989        else $id=md5($id); 
     3990 
     3991        if(is_null($a))$a=array(); 
     3992        $ct = array_sum(explode(chr(32), microtime())); 
     3993        if(!isset($a[$id])) return sprintf("%.4f", ($ct - ($a[$id] = $ct))); 
     3994        else return sprintf("%.4f", ($ct - $a[$id]) ); 
     3995    } 
     3996 
     3997    /** AA_DEBUG::d() 
     3998     */ 
     3999    function d($level=0) 
     4000    { 
     4001        $test=0; 
     4002        $level=absint($level); 
     4003        if(isset($this->_debug)) $test=(absint($this->_debug) * 1); 
     4004        //aadv_error_log("debug:{$this->_debug} | plugin_debug_level:{$this->options['plugin_debug_level']} | test:{$test} | level:{$level}"); 
     4005        return (bool) (( $test >= $level ) ? true : false); 
     4006    } 
     4007 
     4008    /** AA_DEBUG::l() 
     4009     */ 
     4010    function l($msg,$d=5,$b=false) 
     4011    { 
     4012        if( $this->d($d) === false) return;// aadv_error_log("l Skipped.. {$this->_debug} >= {$d}"); 
     4013 
     4014        if( $this->options && $this->options['log_errors']=='1' ){ 
     4015            if($b){ 
     4016                $t2=$this->tt($f); 
     4017                aadv_error_log("PHP Notice:  ".$f." [".$t2[0]."] [".$t2[1]."] [".$this->mem_usage(1)."] ".__CLASS__."::l()"." {$msg}"); 
     4018            } else { 
     4019                if(empty($msg))return; 
     4020                aadv_error_log($msg); 
     4021            } 
     4022        } elseif( ! $this->options ) return aadv_error_log("Skipped.. no options"); 
     4023        return; 
     4024    } 
     4025 
     4026    /** AA_DEBUG::mem_usage() 
     4027     * 
     4028     * @param mixed $raw 
     4029     */ 
     4030    function mem_usage($raw = false) 
     4031    { 
     4032        static $v=NULL,$m=NULL; 
     4033        if(is_null($m)) $m = $this->_cf('memory_get_usage'); 
     4034        if ($m === false) return 1; 
     4035        if(is_null($v)) $v = version_compare(phpversion(), '5.2.0', '>='); 
     4036 
     4037        $mem = (($v === false) ? memory_get_usage(true) : memory_get_usage()); 
     4038        return(($raw !== false) ? $this->bytes($mem) : $mem); 
     4039    } 
     4040     
     4041    /** AA_DEBUG::bytes() 
     4042     * 
     4043     * @param integer $b 
     4044     */ 
     4045    function bytes($b = 0) 
     4046    { 
     4047        $s = array('B', 'Kb', 'MB', 'GB', 'TB', 'PB'); 
     4048        $e = floor(log($b) / log(1024)); 
     4049        return sprintf('%.2f ' . $s[$e], (($b > 0) ? ($b / pow(1024, floor($e))) : 0)); 
     4050    } 
     4051 
     4052    /** AA_DEBUG::die_log() 
     4053     */ 
     4054    function die_log($m='') 
     4055    { 
     4056        die(!('' != $m && error_log($m) && (print PHP_EOL."$m".PHP_EOL))); 
     4057    } 
     4058 
     4059    /** AA_DEBUG::die_trace() 
     4060     */ 
     4061    function die_trace($m='') 
     4062    { 
     4063        $dbg=debug_backtrace(false); 
     4064 
     4065        die( 
     4066            !( 
     4067                array_walk($dbg, 
     4068                    create_function( 
     4069                    '&$a,$k,$m', ' 
     4070                    echo '. ($i ? 'sprintf("%-{$k}s#%-2d "," ",$k)' : 'sprintf("#%-2d ",$k)').' 
     4071                        .(isset($a[\'class\']) 
     4072                                             ? "{$a[\'class\']}" :"") 
     4073                        .(isset($a[\'type\']) 
     4074                                             ? "{$a[\'type\']}" :"") 
     4075                        .(isset($a[\'function\']) 
     4076                                             ? "{$a[\'function\']}()" :"()") 
     4077                        .(isset($a[\'file\']) 
     4078                                             ?" called at [{$a[\'file\']}":"") 
     4079                        .(isset($a[\'line\']) 
     4080                                             ? ":{$a[\'line\']}" :"")."]" 
     4081                        .(!!($a[\'args\']) 
     4082                                             ? " with args: |".implode(", ", $a[\'args\'])."|"  : "") 
     4083                        .((isset($m)&&!empty($m)) ? " MSG: {$m}" : "") 
     4084                        ."\n";' 
     4085                    ),$m 
     4086                ) && (print_r(array('debug_backtrace for die_trace'=>$dbg)))!==FALSE 
     4087            ) 
     4088        ); 
     4089        //unset($dbg); 
     4090    } 
     4091 
     4092    /** AA_DEBUG::get_error_log() 
     4093     */ 
     4094    function get_error_log() 
     4095    { 
     4096 
     4097        // If this directive is not set, errors are sent to the SAPI error logger. For example, it is an error log in Apache or stderr in CLI. 
     4098        $log_file_ini=strval(ini_get('error_log')); 
     4099        //$this->l("log_file_ini: $log_file_ini"); 
     4100 
     4101        //(( defined('WP_DEBUG_LOG') && WP_DEBUG_LOG===TRUE ) ? WP_CONTENT_DIR . '/debug.log' : FALSE); 
     4102        $log_file_wp=WP_CONTENT_DIR . '/debug.log'; 
     4103        //$this->l("log_file_wp: $log_file_wp"); 
     4104 
     4105        $log_file_opt = $this->options['logfile']; 
     4106        //$this->l("log_file_opt: $log_file_opt"); 
     4107 
     4108        if(!empty($log_file_opt))$log_file=$log_file_opt; 
     4109        elseif(!empty($log_file_ini))$log_file=$log_file_ini; 
     4110        elseif(!empty($log_file_wp))$log_file=$log_file_wp; 
     4111 
     4112        //$log_file = ( is_array($this->options) && isset($this->options['logfile']) ) ? $this->options['logfile'] : @ini_get( 'error_log' ); 
     4113        return $log_file; 
     4114    } 
     4115 
     4116    /** AA_DEBUG::get_line_at() 
     4117     */ 
     4118    function get_line_at($file='',$num=0,$html=false) 
     4119    { 
     4120        $code=''; 
     4121        $lines = array(); 
     4122        if ($lines = explode("\n",str_replace(array("\r\n","\c\r","\r"),"\n",implode('',file($file))),($num+5))) 
     4123        { 
     4124            array_map('rtrim',$lines); 
     4125            if($html)   $code=highlight_string($lines[$num],true); 
     4126            else $code=join("\n",array_slice($lines,($num-1),2)); 
     4127        } 
     4128        unset($lines); 
     4129        return $code; 
     4130    } 
     4131 
     4132    /** AA_DEBUG::get_caller($bt) 
     4133     */ 
     4134    function get_caller($bt) 
     4135    { 
     4136        // requires PHP 4.3+ 
     4137        if ( !$this->cf('debug_backtrace') ) return array(); 
     4138        $caller = array(); 
     4139 
     4140        foreach ( (array) array_reverse( $bt ) as $call ) 
     4141        { 
     4142            $function = (isset( $call['function'] ) ? $call['function'] : ''); 
     4143            if ( isset( $call['class'] ) ) 
     4144            { 
     4145                if ($call['class'] == __CLASS__ ) continue; 
     4146                $function = $call['class'] . "->$function"; 
     4147            } 
     4148            $caller[] = $function; 
     4149        } 
     4150 
     4151        return join( ', ', $caller ); 
     4152    } 
     4153 
     4154 
     4155    /** AA_DEBUG::_stream_stat(&$fp) 
     4156    */ 
     4157    function _stream_stat(&$fp) 
     4158    { 
     4159        $default_options=array( 
     4160            'stream_type' => '', 
     4161            'mode' => '', 
     4162            'unread_bytes' => 0, 
     4163            'seekable' => null, 
     4164            'timed_out' => null, 
     4165            'blocked' => 1, 
     4166            'eof' => null 
     4167        ); 
     4168         
     4169        $ret=stream_get_meta_data($fp); 
     4170        $ret=$this->_parse_args($ret, $default_options); 
     4171        return $ret; 
     4172    } 
     4173 
     4174 
     4175 
     4176 
     4177    // MISC FUNCTIONS ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     4178    /** AA_DEBUG::print_var_dump() - Returns the output from var_dump($var) 
     4179     */ 
     4180    function print_var_dump($var,$return=true) 
     4181    { 
     4182        ob_start(); 
     4183        var_dump($var); 
     4184        $out = ob_get_contents(); 
     4185        ob_end_clean(); 
     4186        if ($return) return $out; 
     4187        else echo $out; 
     4188    } 
     4189 
     4190    /** AA_DEBUG::print_var_export() - Returns the output from var_export($var) 
     4191     */ 
     4192    function print_var_export($var,$return=true) 
     4193    { 
     4194        ob_start(); 
     4195        var_export($var); 
     4196        $out = ob_get_contents(); 
     4197        ob_end_clean(); 
     4198        if ($return) return $out; 
     4199        else echo $out; 
     4200    } 
     4201     
     4202    /** AA_DEBUG::_cf() 
     4203     */ 
     4204    function _cf($f) 
     4205    { 
     4206        static $b,$g = array(); 
     4207 
     4208 
     4209        if(!isset($b)) { 
     4210            $b=$disabled=array(); 
     4211            $disabled=array( @ini_get('disable_functions'), @ini_get('suhosin.executor.func.blacklist'), @get_cfg_var('disable_functions'),@get_cfg_var('suhosin.executor.func.blacklist')); 
     4212            if (@ini_get('safe_mode')) { 
     4213                $disabled[]='shell_exec'; 
     4214                $disabled[]='set_time_limit'; 
     4215            } 
     4216            $b=$this->_array_iunique(array_map('trim',explode(',',strtolower(preg_replace('/[,]+/',',',trim(join(',',$disabled),',')))))); 
     4217        } 
     4218 
     4219        $f=strtolower($f); 
     4220        if ( ( in_array($f, $g) || in_array($f, $b)) ) return (in_array($f, $g)); 
     4221        else return ( 
     4222                        in_array($f,array($g,$b)) 
     4223                        ? in_array($f, $g) 
     4224                        : ( 
     4225                             (!function_exists($f)) 
     4226                             ? !( $b[]=$f ) 
     4227                             : !!( $g[]=$f ) 
     4228                            ) 
     4229                        ); 
     4230 
     4231        //aadv_error_log($f.":".$this->print_var_dump($ret).print_r(array('good'=>$g,'bad'=>$b),1)); 
     4232    } 
     4233 
     4234    /** AA_DEBUG::_array_iunique($array) 
     4235    */ 
     4236    function _array_iunique($array) 
     4237    { 
     4238        return array_intersect_key($array,array_unique(array_map('strtolower',$array))); 
     4239    } 
     4240 
     4241    /** AA_DEBUG::rstr_replace( $s, $su ) 
     4242    */ 
     4243    function rstr_replace( $s, $su ) 
     4244    { 
     4245        $f = true; 
     4246        $su=(string)$su; 
     4247        while($f) { 
     4248            $f = false; 
     4249            foreach ( (array) $s as $v=>$r ) { 
     4250                while ( ($f=(strpos( $su, $v ) !== false)) ) $su = str_replace( $v, $r, $su ); 
     4251            } 
     4252        } 
     4253        return $su; 
     4254    } 
     4255 
     4256    /** AA_DEBUG::_do_update() 
     4257     * 
     4258     * @param mixed $check_time 
     4259     * @param integer $newer_than 
     4260     */ 
     4261    function _do_update( $check_time, $newer_than = 300 ) 
     4262    { 
     4263        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
     4264        $time = ( time() - $check_time ); 
     4265        return ( $newer_than < $time ) ? true : false; 
     4266    } 
     4267 
     4268    /** AA_DEBUG::_get_rand_str() 
     4269     * 
     4270     * @param mixed $l 
     4271     * @param mixed $c 
     4272     */ 
     4273    function _get_rand_str($l=null,$c=null) 
     4274    { 
     4275        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
     4276        static $chars; 
     4277        !is_null($c) && $chars=$c; 
     4278        is_null($chars) && $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
     4279        is_null($l) && $l = rand(4,8); 
     4280 
     4281        return substr(str_shuffle($chars . $chars . $chars), 0, $l); 
     4282        $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
     4283    } 
     4284 
     4285    /** AA_DEBUG::_stripdeep() 
     4286     * 
     4287     * @param mixed $value 
     4288     */ 
     4289    function _stripdeep(&$value){ return(is_array($value) ? array_map(array($this,'_stripdeep'), $value) : stripslashes($value));} 
     4290 
     4291    /** AA_DEBUG::_parse_args() 
     4292     * 
     4293     * @param mixed $a 
     4294     * @param string $d 
     4295     * @param string $r 
     4296     */ 
     4297    function _parse_args($a,$d='',$r=''){ return(false!==($r=(is_object($a)?get_object_vars($a):((!is_array($a)&&false!==(parse_str($a,$r)))?$r:$a)))&&is_array($d)?array_merge($d,$r):$r); } 
     4298 
     4299    /** AA_DEBUG::get_posix_info() 
     4300     * 
     4301     * @param string $type 
     4302     * @param string $id 
     4303     * @param mixed $item 
     4304     */ 
     4305    function get_posix_info( $type = 'all', $id = '', $item = false ) 
     4306    { 
     4307        //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
     4308 
     4309        static $egid,$pwuid,$grgid,$euid; 
     4310        if(!$egid && $this->_cf('posix_getegid')) $egid=posix_getegid(); 
     4311        if(!$euid && $this->_cf('posix_geteuid')) $euid=posix_geteuid(); 
     4312 
     4313        if(!$pwuid && $this->_cf('posix_getpwuid')) $pwuid=posix_getpwuid($egid); 
     4314        if(!$grgid && $this->_cf('posix_getgrgid')) $grgid=posix_getgrgid($euid); 
     4315 
     4316        if(gettype($id)=='string' || $id=='')$id=$euid; 
     4317        $info = array(); 
     4318        switch ( $type ): 
     4319        case 'group':  $info = ($this->_cf('posix_getgrgid') ? posix_getgrgid( $id ):'');  break; 
     4320        case 'user':  $info = ($this->_cf('posix_getpwuid') ? posix_getpwuid( $id ):'');  break; 
     4321        endswitch; 
     4322 
     4323        //$this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',25); 
     4324        return (( $item !== false && isset($info[$item]) ) ? $info[$item] : $info); 
     4325    } 
     4326 
    40854327    /** AA_DEBUG::check_auth() 
    40864328     */ 
     
    41054347    } 
    41064348 
    4107     /** AA_DEBUG::get_socket_request($n='',$p='') 
    4108      * 
    4109      * @since 2.6 
    4110      * @version 1.0 
    4111      * 
    4112      * @param mixed $vb 
    4113      */ 
    4114     function get_socket_request($n='',$p='') 
    4115     { 
    4116         $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',5); 
    4117  
    4118         $this->activate_ff_htaccess(); 
    4119          
    4120          
    4121         $url=PLUGINS_COOKIE_PATH.str_replace(array('https://',WP_PLUGIN_URL),array('http://',''), plugins_url('/f/f/'.$n,__FILE__) ); 
    4122         $f=str_replace(basename(__FILE__),'f/f/'.$n, __FILE__); 
    4123         $ret=''; 
    4124  
    4125  
    4126         if(file_exists($f)) 
    4127         { 
    4128             if(!empty($p)) { 
    4129                 $perms=0; 
    4130                 $perms=intval(substr(sprintf('%o', fileperms($f)), -3)); 
    4131                 if( (intval($perms)!=744 && intval($perms) < 755) && !@chmod($f, 0755)) $ret="\nCANNOT CONTINUE: {$f} perms need to be {$p} or higher (currently {$perms}). # chmod u+x {$f}\n"; 
    4132             } 
    4133         } 
    4134          
    4135  
    4136         if(!file_exists($f)) $ret="\nCANNOT CONTINUE: {$f} not found.\n"; 
    4137          
    4138         if($ret=='') { 
    4139  
    4140             // resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] ) 
    4141             if (false === ( $fp = fsockopen($_SERVER['HTTP_HOST'], 80, $errno, $errstr,5) ) || !is_resource($fp) ) echo $this->socket_error($fp, (int)$errno, $errstr); 
    4142             else { 
    4143                 $response=$headers=$body=''; 
    4144                 $request= 
    4145                 'GET '.$url.' HTTP/1.0'."\r\n". 
    4146                 'Host: '.$_SERVER['HTTP_HOST']."\r\n". 
    4147                 'User-Agent: Mozilla/5.0 (AskApache/; +http://www.askapache.com/)'."\r\n". 
    4148                 'Accept-Encoding: none'."\r\n". 
    4149                 'Referer: http://www.askapache.com/'."\r\n". 
    4150                 "X-Pad: {$this->options['key']}"."\r\n". 
    4151                 'Cookie: '.LOGGED_IN_COOKIE."=\r\n". 
    4152                 'Connection: close'."\r\n\r\n"; 
    4153  
    4154                 fwrite($fp, $request); 
    4155                 while (!feof($fp)) $response .= fread($fp, 1); 
    4156                 $response=explode("\r\n\r\n",$response,2); 
    4157                 $headers=$response[0]; 
    4158                 $body=$response[1]; 
    4159  
    4160  
    4161                 if(strpos($headers,'200 OK')!==false) $ret="\n{$body}\n"; 
    4162                 else { 
    4163                     ob_start(); 
    4164                     echo '<pre class="aa_pre2">'."\nFILE: {$f}\n". $this->_statls($f,1).'</pre>'; 
    4165                     echo "\n<h3>HEADER TRACE</h3><pre class='aa_pre2'>\n".str_repeat("&gt;",100)."\n".htmlspecialchars($request)."\n".str_repeat("&lt;",100)."\n".htmlspecialchars($headers)."</pre>"; 
    4166                     $this->print_rq(htmlspecialchars($body)); 
    4167                     $ret=ob_get_clean(); 
    4168                 } 
    4169  
    4170                 if (is_resource($fp)) @fclose($fp); 
    4171             } 
    4172         } 
    4173          
    4174  
    4175  
    4176  
    4177  
    4178         $this->options['page']='home'; 
    4179          
    4180         $this->SaveOptions(); 
    4181          
    4182         $this->deactivate_ff_htaccess(); 
    4183  
    4184          
    4185         $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',5); 
    4186          
    4187         return $ret; 
    4188     } 
    41894349 
    41904350 
     
    42254385     * @param integer $levels 
    42264386     * @param integer $format 
    4227      */ 
    4228     function _pls( $folder = '.', $levels = 2, $format = 1 ) 
    4229     { 
    4230         // $folder = ($folder=='.') ?   getcwd() : realpath("."); 
    4231         $this->t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',75); 
     4387     */  
     4388    function _pls( $folder = '.', $href='', $levels = 2 ) 
     4389    { 
     4390        //self::t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',50); 
    42324391        $list = $fls = array(); 
    4233         $fls = $this->_ls( $folder, $levels ); 
    4234         if(is_array($fls) && sizeof($fls) >0 && is_dir($folder)) 
     4392 
     4393        ob_start(); 
     4394         
     4395        if(!is_dir($folder) && is_file($folder)) { 
     4396            if(filesize($folder)<100000){ 
     4397                $c=$this->clean_file_get($folder); 
     4398                echo '<pre class="fbrowser">'."\n"; 
     4399                echo htmlspecialchars($c); 
     4400                echo '</pre>'; 
     4401                 
     4402                echo '<pre class="fbrowser">'."\n"; 
     4403                echo htmlspecialchars($this->hexdump($c)); 
     4404                echo '</pre>'; 
     4405            } 
     4406             
     4407        } else { 
     4408         
     4409            echo '<pre class="fbrowser">'."\n"; 
     4410            $fls = $this->_ls( $folder, $levels ); 
     4411            if(is_array($fls) && sizeof($fls) >0 && is_dir($folder)) 
     4412            { 
     4413                 
     4414                foreach ( $fls as $file ) 
     4415                { 
     4416                    $fs = $this->_stat( $file ); 
     4417 
     4418                    $list[] = sprintf("%05s %10s %8.8s:%-8s %5s:%-5s %14.14s  %14.14s %15s %-6.6s %s%-60.60s%s",$fs['octal'],$fs['human'],$fs['owner_name'], $fs['group_name'], 
     4419                            $fs['fileuid'], $fs['filegid'],$fs['modified'], $fs['created'], $fs['size'],'['.$fs['type'].']',  
     4420                            '<a style="text-decoration:none" href="'.$href.'&amp;file='.$this->base64url_encode($file).'">',  
     4421                            basename(realpath($file)), 
     4422                            '</a>'); 
     4423                     
     4424                } 
     4425                echo 'PERMS HUMANPERMS     USER:GROUP          UID:GID   MODIFIED        CREATED             SIZE-BYTES  TYPE  FILENAME'."\n". 
     4426                '========================================================================================================================================================='."\n"; 
     4427                echo join( "\n", $list); 
     4428                echo '</pre>'; 
     4429            } 
     4430        } 
     4431        return ob_get_clean(); 
     4432    } 
     4433 
     4434    function clean_file_get($f) 
     4435    { 
     4436        self::t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',0); 
     4437         
     4438        if(!file_exists($f)) return; 
     4439        $d=file_get_contents($f); 
     4440         
     4441        $d=preg_replace( '/[\x7f-\xff]/', '', $d); 
     4442         
     4443        return $d; 
     4444    } 
     4445 
     4446    function hexdump($d) 
     4447    { 
     4448        self::t(__FILE__,__CLASS__,__FUNCTION__,__LINE__,'',0); 
     4449        $o=''; 
     4450         
     4451        for($l = strlen($d), $hx=$a=$dp='', $i=$j=0;  ($i<$l && false!==($b=ord($c=substr($d,$i,1)))); $i++) 
    42354452        { 
    4236             echo '<pre>'; 
    4237             foreach ( $fls as $file ) 
     4453            $hx.=sprintf('%02x ',$b); 
     4454            $a.=(($b>=32&&$b<255))?$c:'.'; 
     4455            if( ++$j === 16 || $i === $l - 1 ) 
    42384456            { 
    4239                 $fs = $this->_stat( $file ); 
    4240                 //print_r($fs); 
    4241                 $list[] = sprintf("%05s %10s %8.8s:%-8s %5s:%-5s %14.14s  %14.14s %15s %-6.6s %-40.40s",$fs['octal'],$fs['human'],$fs['owner_name'], $fs['group_name'], 
    4242                                                     $fs['fileuid'], $fs['filegid'],$fs['modified'], $fs['created'], $fs['size'],'['.$fs['type'].']', str_replace($folder.'/', '', realpath($file))); 
     4457                $dp .= sprintf('%06X %-48s  %-20s'."\n", $i, $hx, $a); 
     4458                //$dp .= $a; 
     4459                $hx=$a=''; 
     4460                $j=0; 
    42434461            } 
    4244             echo 'PERMS HUMANPERMS     USER:GROUP      UID:GID   MODIFIED        CREATED             SIZE-BYTES  TYPE  FILENAME'."\n". 
    4245             '============================================================================================================================================='."\n"; 
    4246             echo join( "\n", $list); 
    4247             echo '</pre>'; 
    4248         } 
    4249     } 
    4250  
     4462        } 
     4463         
     4464        return $dp; 
     4465    } 
     4466     
     4467    function base64url_encode($data) 
     4468    { 
     4469        return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
     4470    } 
     4471 
     4472    function base64url_decode($data) 
     4473    { 
     4474        return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); 
     4475    }  
     4476     
    42514477    /** AA_DEBUG::_statls() 
    42524478     * 
  • askapache-debug-viewer/trunk/f/admin.css

    r657069 r673624  
    100100 
    101101 
    102  
     102pre.fbrowser {margin:0 auto 10px 12px; padding:5px 1px 5px 5px; overflow:auto; border:2px solid #009225; width:90%; min-width:35em; background:#000; color:#fff; } 
     103.fbrowser a { color:red; } 
    103104 
    104105#adv7_css_menu {overflow:hidden; background: linear-gradient(to top, #185821 0px, #1e6f29 5px) repeat scroll 0 0 #1e6f29; color: #afeab7;   direction: ltr;   font: 13px/28px sans-serif; height:28px; width:100%; position:relative; margin:0 0 20px 0; padding:0;  } 
     
    110111#adv7_css_menu li a:hover { background: linear-gradient(to top, #3A3A3A, #222222) repeat scroll 0 0 #222222; color: #FAFAFA; } 
    111112 
    112   
     113li#wp-admin-bar-adv7menu.menupop div.ab-sub-wrapper ul#wp-admin-bar-adv7menu-default.ab-submenu li#wp-admin-bar-adv7enable a.ab-item  { background-color:#000; color:#FFF; } 
     114li#wp-admin-bar-adv7menu.menupop div.ab-sub-wrapper ul#wp-admin-bar-adv7menu-default.ab-submenu li#wp-admin-bar-adv7disable a.ab-item { background-color:#000; color:red;} 
     115#adv7 input#adv7_action_reset { float:left; margin-left:2em;     font-size: 2em; height: 2em;line-height: 2em;} 
     116#adv7 input#adv7_save_debug_options { float:left;     font-size: 2em; height: 2em;line-height: 2em;} 
  • askapache-debug-viewer/trunk/readme.txt

    r672542 r673624  
    55Requires at least: 3.0 
    66Tested up to: 3.5.1 
    7 Stable tag: 2.8 
     7Stable tag: 2.9 
    88 
    99Advanced debugging plugin for seeing the verbose of the verbose debug info.  Tech Support, Server Admins, WordPress Developers, Plugin Developers, or anyone wanting to see under the hood of their website and diagnose problems.  This debugging plugin goes further than any other in the way it uses Apache Server Status Handlers, CGI Script for server environment view, and in the shear amount of debugging information available, like the basically print_r($GLOBALS). 
Note: See TracChangeset for help on using the changeset viewer.