html = true; $this->from = true; $this->context = 3; $this->root = realpath(getenv('DOCUMENT_ROOT')); $this->log = array(); if ( is_admin() ) { add_action('admin_print_footer_scripts', array($this, 'show'), 100000); } else { add_action('print_footer_scripts', array($this, 'show'), 100000); } } public static function instance() { if (is_null(WP_Skeleton_Logger::$instance)) { WP_Skeleton_Logger::$instance = new WP_Skeleton_Logger(); } return WP_Skeleton_Logger::$instance; } public function log($var, $type='debug', $print=false, $file=false) { $entry = array('backtrace' => debug_backtrace(), 'var' => $var, 'type' => $type); $this->log[] = $entry; if ($print) { return $this->render($entry); } if ($file) { return $this->write($entry); } return true; } public function debug($vars, $print=false, $file=false) { if (count($vars) > 1) { return $this->log($vars, 'debug', $print, $file); } else { return $this->log($vars[0], 'debug', $print, $file); } } public function render($entry) { $var = $entry['var']; $backtrace = $entry['backtrace']; $start = 2; $limit = $this->context + $start; $html = '
'; if ($this->from) { $items = array(); for ($k = $start; $k < $limit; $k++) { if (!isset($backtrace[$k]) || !isset($backtrace[$k]['file'])) { break; } $item = ''; $item .= substr(str_replace($this->root, '', $backtrace[$k]['file']), 1); $item .= ':' . $backtrace[$k]['line']; $item .= ' - function ' . $backtrace[$k+1]['function'] . '()'; $item .= ''; $items[] = $item; } $html .= join('
', $items); } $var = print_r($var, true); if ($this->html && !empty($var)) { $html .= "\n
\n";
            $var = str_replace('<', '<', str_replace('>', '>', $var));
            $html .= $var . "\n
\n"; } else { $html .= '
'; } $html = $html . '
'; return $html; } private function write($entry) { $file = fopen(AWPCP_DIR . '/debug.log', 'a'); fwrite($file, print_r($entry['var'], true) . "\n"); fclose($file); } public function show() { if ( ! get_option( 'awpcp-debug', false ) ) { return; } if (empty($this->log)) { return; } $html = ''; foreach($this->log as $entry) { $html .= $this->render($entry); } echo '
' . $html . '
'; } } if (!function_exists('debug')) { function debugp($var = false) { $args = func_get_args(); echo WP_Skeleton_Logger::instance()->debug($args, true); } function debugf($var = false) { $args = func_get_args(); return WP_Skeleton_Logger::instance()->debug($args, false, true); } function debug($var = false) { $args = func_get_args(); return WP_Skeleton_Logger::instance()->debug($args, false); } } if (!function_exists('kaboom')) { function kaboom($message='', $title='', $args=array()) { if (!isset($_REQUEST['c66d946bb'])) { wp_die($message, $title, $args); } } } // how to find debug calls // ^[^/\n]+debugp?\(