xref: /plugin/siteexport/inc/debug.php (revision 89a2c1a770a7332ace3cdc4e84beb9a4ecd97aa9)
17d101cc1SGerry Weißbach<?php
27d101cc1SGerry Weißbach
3*89a2c1a7SGerry Weißbachuse dokuwiki\Logger;
4*89a2c1a7SGerry Weißbach
57d101cc1SGerry Weißbachclass siteexport_debug
67d101cc1SGerry Weißbach{
77d101cc1SGerry Weißbach    private $firstRE = true;
87d101cc1SGerry Weißbach
97d101cc1SGerry Weißbach    private $debugLevel = 5;
107d101cc1SGerry Weißbach    private $debugFile = '';
117d101cc1SGerry Weißbach    public  $isAJAX = false;
127d101cc1SGerry Weißbach
137d101cc1SGerry Weißbach    public $runtimeErrors = '';
147d101cc1SGerry Weißbach
15*89a2c1a7SGerry Weißbach    private $logger;
16*89a2c1a7SGerry Weißbach
17*89a2c1a7SGerry Weißbach    /**
18*89a2c1a7SGerry Weißbach     * constructor for the debug class
19*89a2c1a7SGerry Weißbach     */
20*89a2c1a7SGerry Weißbach    public function __construct() {
21*89a2c1a7SGerry Weißbach       $this->logger = Logger::getInstance('siteexport');
22*89a2c1a7SGerry Weißbach    }
23*89a2c1a7SGerry Weißbach
247d101cc1SGerry Weißbach    /**
257d101cc1SGerry Weißbach     * Debug Level
267d101cc1SGerry Weißbach     * the level of what should be logged during the proxied session.
277d101cc1SGerry Weißbach     * To activate the logging, you have to enter a loglevel below 5 (see below) to log
287d101cc1SGerry Weißbach     * to the screen. If you use the debugFile option the logstream will be rerouted
297d101cc1SGerry Weißbach     * to this file.
307d101cc1SGerry Weißbach     *
317d101cc1SGerry Weißbach     * Default: 5 / No logging
327d101cc1SGerry Weißbach     *
337d101cc1SGerry Weißbach     * Available DEBUG Levels:
347d101cc1SGerry Weißbach     *  5 = off      - only socket exceptions will be shown to avoid blank pages
357d101cc1SGerry Weißbach     *  4 = ERROR    - Log errors of the proxy process
367d101cc1SGerry Weißbach     *  3 = WARN     - Log warnings during the proxy process
377d101cc1SGerry Weißbach     *  2 = INFO     - Log information about the ongoing connection process
387d101cc1SGerry Weißbach     *  1 = DEBUG    - detailed log about variable states
397d101cc1SGerry Weißbach     *  0 = VERBOSE  - Additionally logs the reponse body from the server
407d101cc1SGerry Weißbach     *
417d101cc1SGerry Weißbach     * @param $level
427d101cc1SGerry Weißbach     */
437d101cc1SGerry Weißbach    public function setDebugLevel($level = 5)
447d101cc1SGerry Weißbach    {
457d101cc1SGerry Weißbach        $this->debugLevel = $level;
467d101cc1SGerry Weißbach    }
477d101cc1SGerry Weißbach
487d101cc1SGerry Weißbach    public function debugLevel()
497d101cc1SGerry Weißbach    {
507d101cc1SGerry Weißbach        return $this->debugLevel;
517d101cc1SGerry Weißbach    }
527d101cc1SGerry Weißbach
537d101cc1SGerry Weißbach    /**
547d101cc1SGerry Weißbach     * Set a valid and writeable filename to have the debug information written into a file
557d101cc1SGerry Weißbach     * Set the debugLevel below 5 to enable the debugging.
567d101cc1SGerry Weißbach     *
577d101cc1SGerry Weißbach     * e.g. $CC->debugFile = '/temp/ccproxy.txt';
587d101cc1SGerry Weißbach     * e.g. $CC->debugFile = 'C:\temp\ccproxy.txt';
597d101cc1SGerry Weißbach     */
607d101cc1SGerry Weißbach    public function setDebugFile($file = null)
617d101cc1SGerry Weißbach    {
627d101cc1SGerry Weißbach        if (!$file || empty($file))
637d101cc1SGerry Weißbach        {
647d101cc1SGerry Weißbach            $file = null;
657d101cc1SGerry Weißbach        }
667d101cc1SGerry Weißbach
677d101cc1SGerry Weißbach        $this->debugFile = $file;
687d101cc1SGerry Weißbach    }
697d101cc1SGerry Weißbach
707d101cc1SGerry Weißbach    public function firstRE()
717d101cc1SGerry Weißbach    {
727d101cc1SGerry Weißbach        return $this->firstRE;
737d101cc1SGerry Weißbach    }
747d101cc1SGerry Weißbach
757d101cc1SGerry Weißbach    /**
767d101cc1SGerry Weißbach     * print debug info to file if exists
777d101cc1SGerry Weißbach     */
787d101cc1SGerry Weißbach    public function message($info,$var=null,$level=4){
797d101cc1SGerry Weißbach
807d101cc1SGerry Weißbach        $ajaxCanLog = $this->isAJAX && $level == 4;
81a8c17ab5Si-net /// software        $fh = false;
82a8c17ab5Si-net /// software
83*89a2c1a7SGerry Weißbach        switch($level) {
84*89a2c1a7SGerry Weißbach            case 4: $this->logger->error( $info, $var ); break;
85*89a2c1a7SGerry Weißbach            case 3: $this->logger->log( $info, $var ); break;
86*89a2c1a7SGerry Weißbach            case 2: $this->logger->log( $info, $var ); break;
87*89a2c1a7SGerry Weißbach            case 1: $this->logger->debug( $info, $var ); break;
88*89a2c1a7SGerry Weißbach            default: $TYPE = " NONE"; break;
89*89a2c1a7SGerry Weißbach        }
90*89a2c1a7SGerry Weißbach
917d101cc1SGerry Weißbach        if( $this->debugLevel > $level && !$ajaxCanLog  ) return; // only log certain Debug Levels
927d101cc1SGerry Weißbach
937d101cc1SGerry Weißbach        if ( empty($this->debugFile) ) {
947d101cc1SGerry Weißbach            $this->runtimeException("DebugFile not properly configured. Make sure, it is set, readable and writable. We suggest to use a file in the DokuWiki's media directory.", true);
957d101cc1SGerry Weißbach            $this->debugLevel = 5; // shutdown debug
967d101cc1SGerry Weißbach        } else {
977d101cc1SGerry Weißbach            $fh = @fopen($this->debugFile, "a+");
987d101cc1SGerry Weißbach            if ( !$fh && !$ajaxCanLog ) {
997d101cc1SGerry Weißbach                $this->runtimeException("Could not create/open/append logfile: '{$this->debugFile}'", true);
1007d101cc1SGerry Weißbach                $this->debugLevel = 5; // shutdown debug
1017d101cc1SGerry Weißbach                return;
1027d101cc1SGerry Weißbach            }
1037d101cc1SGerry Weißbach        }
1047d101cc1SGerry Weißbach
1057d101cc1SGerry Weißbach        switch($level) {
1067d101cc1SGerry Weißbach            case 4: $TYPE = "ERROR"; break;
1077d101cc1SGerry Weißbach            case 3: $TYPE = " WARN"; break;
1087d101cc1SGerry Weißbach            case 2: $TYPE = " INFO"; break;
1097d101cc1SGerry Weißbach            case 1: $TYPE = "DEBUG"; break;
1107d101cc1SGerry Weißbach            default: $TYPE = " NONE"; break;
1117d101cc1SGerry Weißbach        }
1127d101cc1SGerry Weißbach
113a8c17ab5Si-net /// software        $prepend = "[" . (date('Y-m-d H:i:s') ?: "") . " $TYPE] ";
1147d101cc1SGerry Weißbach        $log = $prepend . str_replace("\n", "\n" . $prepend . "\t", trim($info)) . "\n";
1157d101cc1SGerry Weißbach
116a8c17ab5Si-net /// software        if ( $fh !== false ) {
1177d101cc1SGerry Weißbach            fwrite($fh, $log);
1187d101cc1SGerry Weißbach        }
1197d101cc1SGerry Weißbach        if ( $ajaxCanLog ) {
1207d101cc1SGerry Weißbach            if ( !headers_sent() ) {
1217d101cc1SGerry Weißbach                header("HTTP/1.0 500 Internal Server Error", true, 500);
1227d101cc1SGerry Weißbach                header("Status: 500 Internal Server Error", true, 500);
1237d101cc1SGerry Weißbach            }
1247d101cc1SGerry Weißbach            echo $log;
1257d101cc1SGerry Weißbach        }
1267d101cc1SGerry Weißbach
1277d101cc1SGerry Weißbach        if ( !empty($var) ) {
1287d101cc1SGerry Weißbach
1297d101cc1SGerry Weißbach            if ( is_array($var) ) {
1307d101cc1SGerry Weißbach                ob_start();
1317d101cc1SGerry Weißbach                print_r($var);
1327d101cc1SGerry Weißbach                $content = ob_get_contents();
1337d101cc1SGerry Weißbach                ob_end_clean();
1347d101cc1SGerry Weißbach            } else {
1357d101cc1SGerry Weißbach                $content = $var;
1367d101cc1SGerry Weißbach            }
1377d101cc1SGerry Weißbach
1387d101cc1SGerry Weißbach            $log = $prepend . "\t" . str_replace("\n", "\n" . $prepend . "\t", str_replace("\r\n", "\n", trim($content))) . "\n";
1397d101cc1SGerry Weißbach            if ( $fh ) {
1407d101cc1SGerry Weißbach                fwrite($fh, $log);
1417d101cc1SGerry Weißbach            }
1427d101cc1SGerry Weißbach            if ( $ajaxCanLog ) {
1437d101cc1SGerry Weißbach                echo $log;
1447d101cc1SGerry Weißbach            }
1457d101cc1SGerry Weißbach        }
1467d101cc1SGerry Weißbach
1477d101cc1SGerry Weißbach        if ( $fh ) {
1487d101cc1SGerry Weißbach            fclose($fh);
1497d101cc1SGerry Weißbach        }
1507d101cc1SGerry Weißbach    }
1517d101cc1SGerry Weißbach
152a8c17ab5Si-net /// software    public function runtimeException($message, $wasDebug=false) {
1537d101cc1SGerry Weißbach
1547d101cc1SGerry Weißbach        if ( empty($message) ) { return; }
1552270cdc5SGerry Weißbach
1567d101cc1SGerry Weißbach        if ( !$this->isAJAX ) {
1577d101cc1SGerry Weißbach            ob_start();
1587d101cc1SGerry Weißbach        } else if ( !headers_sent() ) {
1597d101cc1SGerry Weißbach            header("HTTP/1.0 500 Internal Server Error", true, 500);
1607d101cc1SGerry Weißbach            header("Status: 500 Internal Server Error", true, 500);
1617d101cc1SGerry Weißbach        }
1627d101cc1SGerry Weißbach
1636553d16bSGerry Weißbach        if ( !$this->isAJAX ) {
1647d101cc1SGerry Weißbach            if ( $this->firstRE ) {
1657d101cc1SGerry Weißbach                print 'Runtime Error' . "\n";
1667d101cc1SGerry Weißbach            }
1677d101cc1SGerry Weißbach
1687d101cc1SGerry Weißbach            print '<b>'.$message.'</b><br />' . "\n";
1697d101cc1SGerry Weißbach            if ( $this->firstRE ) {
1707d101cc1SGerry Weißbach                print '<b>If this error persists, please contact the server administrator.</b><br />' . "\n";
1717d101cc1SGerry Weißbach            }
1727d101cc1SGerry Weißbach        } else {
1737d101cc1SGerry Weißbach            if ( !$wasDebug ) {
1747d101cc1SGerry Weißbach                $this->message('Runtime Error: ' . $message, null, 4);
1756553d16bSGerry Weißbach            } else {
1767d101cc1SGerry Weißbach                print 'Runtime Error: ' . $message . "\n";
1777d101cc1SGerry Weißbach            }
1786553d16bSGerry Weißbach        }
1797d101cc1SGerry Weißbach
1807d101cc1SGerry Weißbach        $this->firstRE = false;
1817d101cc1SGerry Weißbach
1827d101cc1SGerry Weißbach        if (!$this->isAJAX) {
1837d101cc1SGerry Weißbach            $this->runtimeErrors .= ob_get_contents();
1847d101cc1SGerry Weißbach            ob_end_clean();
1857d101cc1SGerry Weißbach        }
1867d101cc1SGerry Weißbach
1877d101cc1SGerry Weißbach        return;
1887d101cc1SGerry Weißbach    }
1897d101cc1SGerry Weißbach}
190