181 lines
4.1 KiB
PHP
181 lines
4.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Easy_Plugins\Table_Of_Contents;
|
||
|
|
||
|
use WP_Error;
|
||
|
|
||
|
/**
|
||
|
* Class Debug
|
||
|
*
|
||
|
* @package Easy_Plugins\Table_Of_Contents
|
||
|
*/
|
||
|
final class Debug extends WP_Error {
|
||
|
|
||
|
/**
|
||
|
* @since 2.0.13
|
||
|
* @var bool
|
||
|
*/
|
||
|
protected $display = false;
|
||
|
|
||
|
/**
|
||
|
* @since 2.0.13
|
||
|
* @var bool
|
||
|
*/
|
||
|
protected $enabled = false;
|
||
|
|
||
|
/**
|
||
|
* @var self
|
||
|
*/
|
||
|
private static $instance;
|
||
|
|
||
|
/**
|
||
|
* Debug constructor.
|
||
|
*
|
||
|
* @since 2.0.13
|
||
|
*
|
||
|
* @param string $code
|
||
|
* @param string $message
|
||
|
* @param string $data
|
||
|
*/
|
||
|
public function __construct( $code = '', $message = '', $data = '' ) {
|
||
|
|
||
|
parent::__construct( $code, $message, $data );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 2.0.14
|
||
|
*
|
||
|
* @param string $code
|
||
|
* @param string $message
|
||
|
* @param string $data
|
||
|
*
|
||
|
* @return Debug
|
||
|
*/
|
||
|
public static function log( $code = '', $message = '', $data = '' ) {
|
||
|
|
||
|
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) {
|
||
|
|
||
|
self::$instance = new self( $code, $message, $data );
|
||
|
|
||
|
self::$instance->display = apply_filters(
|
||
|
'Easy_Plugins/Table_Of_Contents/Debug/Display',
|
||
|
defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY
|
||
|
);
|
||
|
|
||
|
self::$instance->enabled = apply_filters(
|
||
|
'Easy_Plugins/Table_Of_Contents/Debug/Enabled',
|
||
|
( defined( 'WP_DEBUG' ) && WP_DEBUG ) && current_user_can( 'manage_options' )
|
||
|
);
|
||
|
|
||
|
} else {
|
||
|
|
||
|
if ( ! empty( $code ) && ! empty( $message ) ) {
|
||
|
|
||
|
self::$instance->add( $code, $message, $data );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return self::$instance;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds an error or appends an additional message to an existing error.
|
||
|
*
|
||
|
* NOTE: Overrides WP_Error::add() to allow support of passing `false` as `$data`.
|
||
|
*
|
||
|
* @since 2.0.14
|
||
|
*
|
||
|
* @param string|int $code Error code.
|
||
|
* @param string $message Error message.
|
||
|
* @param mixed $data Optional. Error data.
|
||
|
*/
|
||
|
public function add( $code, $message, $data = null ) {
|
||
|
$this->errors[ $code ][] = $message;
|
||
|
|
||
|
if ( ! is_null( $data ) ) {
|
||
|
$this->add_data( $data, $code );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Fires when an error is added to a WP_Error object.
|
||
|
*
|
||
|
* @since 5.6.0
|
||
|
*
|
||
|
* @param string|int $code Error code.
|
||
|
* @param string $message Error message.
|
||
|
* @param mixed $data Error data. Might be empty.
|
||
|
* @param WP_Error $wp_error The WP_Error object.
|
||
|
*/
|
||
|
do_action( 'wp_error_added', $code, $message, $data, $this );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 2.0.13
|
||
|
*
|
||
|
* @param string $content
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function appendTo( $content = '' ) {
|
||
|
|
||
|
return $content . $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 2.0.13
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function dump() {
|
||
|
|
||
|
$dump = array();
|
||
|
|
||
|
foreach ( (array) $this->errors as $code => $messages ) {
|
||
|
|
||
|
$data = $this->get_error_data( $code );
|
||
|
$data = is_string( $data ) ? $data : '<code>' . var_export( $data, true ) . '</code>';
|
||
|
$data = "\t\t<li class=\"ez-toc-debug-message-data\">{$data}</li>" . PHP_EOL;
|
||
|
|
||
|
array_push(
|
||
|
$dump,
|
||
|
PHP_EOL . "\t<ul class=\"ez-toc-debug-message-{$code}\">" . PHP_EOL . "\t\t<li class=\"ez-toc-debug-message\">" . implode( '</li>' . PHP_EOL . '<li>' . PHP_EOL, $messages ) . '</li>' . PHP_EOL . "{$data}\t</ul>" . PHP_EOL
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return '<div class="ez-toc-debug-message">' . implode( '</div>' . PHP_EOL . '<div class="ez-toc-debug-message">', $dump ) . '</div>' . PHP_EOL;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 2.0.13
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function __toString() {
|
||
|
|
||
|
if ( false === $this->enabled ) {
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
if ( false === $this->display ) {
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
if ( ! $this->has_errors() ) {
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
$intro = sprintf(
|
||
|
'You see the following because <a href="%1$s"><code>WP_DEBUG</code></a> and <a href="%1$s"><code>WP_DEBUG_DISPLAY</code></a> are enabled on this site. Please disabled these to prevent the display of these developers\' debug messages.',
|
||
|
'https://codex.wordpress.org/WP_DEBUG'
|
||
|
);
|
||
|
|
||
|
$intro = PHP_EOL . "<p>{$intro}</p>" .PHP_EOL;
|
||
|
$dump = $this->dump();
|
||
|
|
||
|
return PHP_EOL . "<div class='ez-toc-debug-messages'>{$intro}{$dump}</div>" . PHP_EOL;
|
||
|
}
|
||
|
}
|