<?php 
/** 
 * Xoops Logger renderer 
 * 
 * You may not change or alter any portion of this comment or credits 
 * of supporting developers from this source code or any supporting source code 
 * which is considered copyrighted (c) material of the original comment or credit authors. 
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 * 
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org) 
 * @license             GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html) 
 * @package             kernel 
 * @subpackage          logger 
 * @since               2.3.0 
 * @author              Skalpa Keo <[email protected]> 
 * @author              Taiwen Jiang <[email protected]> 
 * 
 * @todo                Not well written, just keep as it is. Refactored in 3.0 
 */ 
defined('XOOPS_ROOT_PATH') || exit('Restricted access'); 
 
$ret = ''; 
if ($mode === 'popup') { 
    $dump    = $this->dump(''); 
    $content = ' 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<head> 
    <meta http-equiv="content-language" content="' . _LANGCODE . '" /> 
    <meta http-equiv="content-type" content="text/html; charset=' . _CHARSET . '" /> 
    <title>' . $xoopsConfig['sitename'] . ' - ' . _LOGGER_DEBUG . ' </title> 
    <meta name="generator" content="XOOPS" /> 
    <link rel="stylesheet" type="text/css" media="all" href="' . xoops_getcss($xoopsConfig['theme_set']) . '" /> 
</head> 
<body>' . $dump . ' 
    <div style="text-align:center;"> 
        <input class="formButton" value="' . _CLOSE . '" type="button" onclick="window.close();" /> 
    </div> 
'; 
    $ret .= ' 
<script type="text/javascript"> 
    debug_window = openWithSelfMain("about:blank", "popup", 680, 450, true); 
    debug_window.document.clear(); 
'; 
    $lines = preg_split("/(\r\n|\r|\n)( *)/", $content); 
    foreach ($lines as $line) { 
        $ret .= "\n" . 'debug_window.document.writeln("' . str_replace(array('"', '</'), array('\"', '<\/'), $line) . '");'; 
    } 
    $ret .= ' 
    debug_window.focus(); 
    debug_window.document.close(); 
</script> 
'; 
} 
 
$this->addExtra(_LOGGER_INCLUDED_FILES, sprintf(_LOGGER_FILES, count(get_included_files()))); 
$memory = 0; 
 
if (function_exists('memory_get_usage')) { 
    $memory = memory_get_usage() . ' bytes'; 
} else { 
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 
        $out = array(); 
        exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST', $out); 
        if (isset($out[5])) { 
            $memory = sprintf(_LOGGER_MEM_ESTIMATED, substr($out[5], strpos($out[5], ':') + 1)); 
        } 
    } 
} 
if ($memory) { 
    $this->addExtra(_LOGGER_MEM_USAGE, $memory); 
} 
 
if (empty($mode)) { 
    $views = array('errors', 'deprecated', 'queries', 'blocks', 'extra'); 
    $ret .= "\n<div id=\"xo-logger-output\">\n<div id='xo-logger-tabs'>\n"; 
    $ret .= "<a href='javascript:xoSetLoggerView(\"none\")'>" . _LOGGER_NONE . "</a>\n"; 
    $ret .= "<a href='javascript:xoSetLoggerView(\"\")'>" . _LOGGER_ALL . "</a>\n"; 
    foreach ($views as $view) { 
        $count = count($this->$view); 
        $ret .= "<a href='javascript:xoSetLoggerView(\"$view\")'>" . constant('_LOGGER_' . strtoupper($view)) . " ($count)</a>\n"; 
    } 
    $count = count($this->logstart); 
    $ret .= "<a href='javascript:xoSetLoggerView(\"timers\")'>" . _LOGGER_TIMERS . "($count)</a>\n"; 
    $ret .= "</div>\n"; 
} 
 
if (empty($mode) || $mode === 'errors') { 
    $types = array( 
        E_USER_NOTICE  => _LOGGER_E_USER_NOTICE, 
        E_USER_WARNING => _LOGGER_E_USER_WARNING, 
        E_USER_ERROR   => _LOGGER_E_USER_ERROR, 
        E_NOTICE       => _LOGGER_E_NOTICE, 
        E_WARNING      => _LOGGER_E_WARNING,/*E_STRICT       => _LOGGER_E_STRICT*/); 
    $class = 'even'; 
    $ret .= '<table id="xo-logger-errors" class="outer"><tr><th>' . _LOGGER_ERRORS . '</th></tr>'; 
    foreach ($this->errors as $error) { 
        $ret .= "\n<tr><td class='$class'>"; 
        $ret .= isset($types[$error['errno']]) ? $types[$error['errno']] : _LOGGER_UNKNOWN; 
        $ret .= ': '; 
        $ret .= sprintf(_LOGGER_FILELINE, $this->sanitizePath($error['errstr']), $this->sanitizePath($error['errfile']), $error['errline']); 
        $ret .= "<br>\n</td></tr>"; 
        $class = ($class === 'odd') ? 'even' : 'odd'; 
    } 
    $ret .= "\n</table>\n"; 
} 
 
if (empty($mode) || $mode === 'deprecated') { 
    $class = 'even'; 
    $ret .= '<table id="xo-logger-deprecated" class="outer"><tr><th>' . _LOGGER_DEPRECATED . '</th></tr>'; 
    foreach ($this->deprecated as $message) { 
        $ret .= "\n<tr><td class='$class'>"; 
        $ret .= $message; 
        $ret .= "<br>\n</td></tr>"; 
        $class = ($class === 'odd') ? 'even' : 'odd'; 
    } 
    $ret .= "\n</table>\n"; 
} 
 
if (empty($mode) || $mode === 'queries') { 
    $class = 'even'; 
    $ret .= '<table id="xo-logger-queries" class="outer"><tr><th>' . _LOGGER_QUERIES . '</th></tr>'; 
    $xoopsDB = XoopsDatabaseFactory::getDatabaseConnection(); 
    $pattern = '/\b' . preg_quote($xoopsDB->prefix()) . '\_/i'; 
 
    foreach ($this->queries as $q) { 
        $sql        = preg_replace($pattern, '', $q['sql']); 
        $query_time = isset($q['query_time']) ? sprintf('%0.6f - ', $q['query_time']) : ''; 
 
        if (isset($q['error'])) { 
            $ret .= '<tr class="' . $class . '"><td><span style="color:#ff0000;">' . $query_time . htmlentities($sql) . '<br><strong>Error number:</strong> ' . $q['errno'] . '<br><strong>Error message:</strong> ' . $q['error'] . '</span></td></tr>'; 
        } else { 
            $ret .= '<tr class="' . $class . '"><td>' . $query_time . htmlentities($sql) . '</td></tr>'; 
        } 
 
        $class = ($class === 'odd') ? 'even' : 'odd'; 
    } 
    $ret .= '<tr class="foot"><td>' . _LOGGER_TOTAL . ': <span style="color:#ff0000;">' . count($this->queries) . '</span></td></tr></table>'; 
} 
if (empty($mode) || $mode === 'blocks') { 
    $class = 'even'; 
    $ret .= '<table id="xo-logger-blocks" class="outer"><tr><th colspan="2">' . _LOGGER_BLOCKS . '</th></tr>'; 
    foreach ($this->blocks as $b) { 
        if ($b['cached']) { 
            $ret .= '<tr><td class="' . $class . '"><strong>' . $b['name'] . ':</strong> ' . sprintf(_LOGGER_CACHED, (int)$b['cachetime']) . '</td></tr>'; 
        } else { 
            $ret .= '<tr><td class="' . $class . '"><strong>' . $b['name'] . ':</strong> ' . _LOGGER_NOT_CACHED . '</td></tr>'; 
        } 
        $class = ($class === 'odd') ? 'even' : 'odd'; 
    } 
    $ret .= '<tr class="foot"><td>' . _LOGGER_TOTAL . ': <span style="color:#ff0000;">' . count($this->blocks) . '</span></td></tr></table>'; 
} 
if (empty($mode) || $mode === 'extra') { 
    $class = 'even'; 
    $ret .= '<table id="xo-logger-extra" class="outer"><tr><th colspan="2">' . _LOGGER_EXTRA . '</th></tr>'; 
    foreach ($this->extra as $ex) { 
        $ret .= '<tr><td class="' . $class . '"><strong>'; 
        $ret .= htmlspecialchars($ex['name']) . ':</strong> ' . htmlspecialchars($ex['msg']); 
        $ret .= '</td></tr>'; 
        $class = ($class === 'odd') ? 'even' : 'odd'; 
    } 
    $ret .= '</table>'; 
} 
if (empty($mode) || $mode === 'timers') { 
    $class = 'even'; 
    $ret .= '<table id="xo-logger-timers" class="outer"><tr><th colspan="2">' . _LOGGER_TIMERS . '</th></tr>'; 
    foreach ($this->logstart as $k => $v) { 
        $ret .= '<tr><td class="' . $class . '"><strong>'; 
        $ret .= sprintf(_LOGGER_TIMETOLOAD, htmlspecialchars($k) . '</strong>', '<span style="color:#ff0000;">' . sprintf('%.03f', $this->dumpTime($k)) . '</span>'); 
        $ret .= '</td></tr>'; 
        $class = ($class === 'odd') ? 'even' : 'odd'; 
    } 
    $ret .= '</table>'; 
} 
 
if (empty($mode)) { 
    $ret .= <<<EOT 
</div> 
<script type="text/javascript"> 
    function xoLogCreateCookie(name,value,days) 
    { 
        if (days) { 
            var date = new Date(); 
            date.setTime(date.getTime()+(days*24*60*60*1000)); 
            var expires = "; expires="+date.toGMTString(); 
        } else var expires = ""; 
        document.cookie = name+"="+value+expires+"; path=/"; 
    } 
    function xoLogReadCookie(name) 
    { 
        var nameEQ = name + "="; 
        var ca = document.cookie.split(';'); 
        for (var i=0;i < ca.length;i++) { 
            var c = ca[i]; 
            while (c.charAt(0)==' ') c = c.substring(1,c.length); 
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
        } 
 
        return null; 
    } 
    function xoLogEraseCookie(name) 
    { 
        createCookie(name,"",-1); 
    } 
    function xoSetLoggerView( name ) 
    { 
        var log = document.getElementById( "xo-logger-output" ); 
        if ( !log ) return null; 
        var i, elt; 
        for (i=0; i!=log.childNodes.length; i++) { 
            elt = log.childNodes[i]; 
            if ( elt.tagName && elt.tagName.toLowerCase() != 'script' && elt.id != "xo-logger-tabs" ) { 
                elt.style.display = ( !name || elt.id == "xo-logger-" + name ) ? "block" : "none"; 
            } 
        } 
        xoLogCreateCookie( 'XOLOGGERVIEW', name, 1 ); 
    } 
    xoSetLoggerView( xoLogReadCookie( 'XOLOGGERVIEW' ) ); 
</script> 
 
EOT; 
} 
 
 |