<?php 
/** 
 * gTemplate Internal Function 
 * Display an error message 
 * 
 * @package    gTemplate 
 * @subpackage internalFunctions 
 */ 
 
 
function debug_beauty_errors($gTpl, $error_msg, $error_type, $file, $line) { 
    ?> 
    <style type="text/css"> 
        .gTpl { margin: 10px 20px 0 20px; } 
        .gTpl h1, .gTpl h2, .gTpl h3, .gTpl h4 { margin-bottom: 0; } 
        .gTpl h1 { color: #cc0000; border-bottom: 2px solid #ee0000; } 
        .gTpl p { margin-top: 5px; margin-bottom: 30px; } 
        .errormsg { font-size: 1.1em; } 
        .filedef { font-size: 0.9em;color: #444; font-style: italic; } 
        .errorbox p { margin-bottom: 0; } 
        .errorbox h3 { margin-top: 0; } 
        .errorbox { background-color: #ffefef; padding: 15px; } 
        .subtitle { font-size: 0.5em; font-style: italic; color: #555; padding-left: 20px; } 
        .backtrace { font-family: monospace; background-color: #f8f8f8; } 
    </style> 
 
    <?php 
 
    preg_match('!^\[([A-Z]*)\] (.*?)$!is', $error_msg, $error); 
    $nature = $error[1]; 
    $error_msg = $error[2] ? $error[2] : $error_msg; 
    $error_msg = htmlspecialchars($error_msg); 
    $error_msg = preg_replace("/ in '([^']*)' tag/is", ' in <b>'.htmlspecialchars($gTpl->left_delimiter).'$1'.htmlspecialchars($gTpl->right_delimiter).'</b> tag', $error_msg); 
 
    echo '<div class="gTpl">'; 
    echo '<h1>Unexpected catastrophic error occured <span class="subtitle">I\'m sorry, but a few bits staying in the wrong place</span></h1>'; 
    echo '<div class="errorbox">'; 
    if ($error[1]) { 
        echo '<h3>' . $nature . ' ERROR</h3>'; 
    } 
    echo '<p class="errormsg">'. $error_msg; 
 
    if ($file) { 
        echo '<br><br><span class="filedef">The error occured in <b>'.$file.'</b>'; 
 
        if ($line) { 
            echo ' on line <b>'.$line.'</b>'; 
        } 
 
        echo '</span>'; 
    } 
    echo '</p></div>'; 
 
 
    $directories = array( 
        'Templates directory' => $gTpl->getTemplateDir(true), 
        'Compile directory' => $gTpl->getCompileDir(true), 
        'Config directory' => $gTpl->getConfigDir(true), 
        'Cache directory' => $gTpl->getCacheDir(true), 
    ); 
 
    $c = 0; 
    foreach ($gTpl->plugins_dir as $dir) { 
        $directories['Plugin directory[' . ( ++$c) . ']'] = substr($dir, 0, 1) == '/' ? $dir : G_TEMPLATE_BASE . $dir; 
    } 
 
    echo '<h3>Current searching paths</h3>'; 
    echo '<p>'; 
    foreach ($directories as $dirTitle => $dirPath) { 
        echo '<b>' . $dirTitle . ':</b> ' . $dirPath; 
 
 
        if (file_exists($dirPath)) { 
            echo ' (<i>real path: ' . realpath($dirPath) . '</i>)'; 
        } else { 
            echo '<span style="color: red;"> Not exists</span>'; 
        } 
 
        echo '<br>'; 
    } 
    echo '</p>'; 
 
 
    echo '<h3>Debug backtrace</h3>'; 
    $output = '<p class="backtrace">'; 
    $backtrace = debug_backtrace(); 
    foreach ($backtrace as $bt) { 
        $args = ''; 
        foreach ($bt['args'] as $a) { 
            if (!empty($args)) { 
                $args .= ', '; 
            } 
            switch (gettype($a)) { 
                case 'integer': 
                case 'double': 
                    $args .= '<span style="color: magenta;">' . $a . '</span>'; 
                    break; 
                case 'string': 
                    $a = htmlspecialchars(substr($a, 0, 64)) . ((strlen($a) > 64) ? '...' : ''); 
                    $args .= "<span style=\"color: green;\">\"$a\"</span>"; 
                    break; 
                case 'array': 
                    $args .= '<span style="color: blue;">Array</span>(' . count($a) . ')'; 
                    break; 
                case 'object': 
                    $args .= '<span style="color: blue;">Object</span>(' . get_class($a) . ')'; 
                    break; 
                case 'resource': 
                    $args .= '<span style="color: blue;">Resource</span>(' . strstr($a, '#') . ')'; 
                    break; 
                case 'boolean': 
                    $args .= $a ? '<span style="color: blue;">True</span>' : '<span style="color: blue;">False</span>'; 
                    break; 
                case 'NULL': 
                    $args .= '<span style="color: blue;">Null</span>'; 
                    break; 
                default: 
                    $args .= 'Unknown'; 
            } 
        } 
 
        $output .= "<span style=\"font-size: 1.1em;\"><b>Call</b> {$bt['class']}{$bt['type']}<b>{$bt['function']}</b>($args);</span><br />\n"; 
        $output .= "<i><b>from </b> {$bt['file']} at line {$bt['line']}</i><br><br />\n"; 
    } 
    $output .= "</p>\n"; 
 
    echo $output; 
 
    echo '<h3>Original error message</h3>'; 
} 
 
 |