log-reporter.php (2944B)
1 <?php 2 namespace Elementor\Core\Logger; 3 4 use Elementor\Modules\System_Info\Reporters\Base; 5 6 if ( ! defined( 'ABSPATH' ) ) { 7 exit; // Exit if accessed directly 8 } 9 10 /** 11 * Elementor Log reporter. 12 * 13 * Elementor log reporter handler class is responsible for generating the 14 * debug reports. 15 * 16 * @since 2.4.0 17 */ 18 class Log_Reporter extends Base { 19 20 const MAX_ENTRIES = 20; 21 const CLEAR_LOG_ACTION = 'elementor-clear-log'; 22 23 public function get_title() { 24 $title = 'Log'; 25 26 if ( 'html' === $this->_properties['format'] && empty( $_GET[ self::CLEAR_LOG_ACTION ] ) ) { // phpcs:ignore -- nonce validation is not require here. 27 $nonce = wp_create_nonce( self::CLEAR_LOG_ACTION ); 28 $url = add_query_arg( [ 29 self::CLEAR_LOG_ACTION => 1, 30 '_wpnonce' => $nonce, 31 ] ); 32 33 $title .= '<a href="' . esc_url( $url ) . '#elementor-clear-log" class="box-title-tool">' . esc_html__( 'Clear Log', 'elementor' ) . '</a>'; 34 $title .= '<span id="elementor-clear-log"></span>'; 35 } 36 37 return $title; 38 } 39 40 public function get_fields() { 41 return [ 42 'log_entries' => '', 43 ]; 44 } 45 46 public function get_log_entries() { 47 /** @var \Elementor\Core\Logger\Manager $manager */ 48 $manager = Manager::instance(); 49 50 /** @var \Elementor\Core\Logger\Loggers\Db $logger */ 51 $logger = $manager->get_logger( 'db' ); 52 53 if ( ! empty( $_GET[ self::CLEAR_LOG_ACTION ] ) ) { 54 if ( empty( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], self::CLEAR_LOG_ACTION ) ) { 55 wp_die( 'Invalid Nonce', 'Invalid Nonce', [ 56 'back_link' => true, 57 ] ); 58 } 59 60 $logger->clear(); 61 } 62 63 $log_string = 'No entries to display'; 64 $log_entries = $logger->get_formatted_log_entries( self::MAX_ENTRIES, false ); 65 66 if ( ! empty( $log_entries ) ) { 67 $entries_string = ''; 68 foreach ( $log_entries as $key => $log_entry ) { 69 if ( $log_entry['count'] ) { 70 $entries_string .= '<h3>' . sprintf( '%s: showing %s of %s', $key, $log_entry['count'], $log_entry['total_count'] ) . '</h3>'; 71 $entries_string .= '<div class="elementor-log-entries">' . $log_entry['entries'] . '</div>'; 72 } 73 } 74 75 if ( ! empty( $entries_string ) ) { 76 $log_string = $entries_string; 77 } 78 } 79 80 return [ 81 'value' => $log_string, 82 ]; 83 } 84 85 public function get_raw_log_entries() { 86 $log_string = 'No entries to display'; 87 88 /** @var \Elementor\Core\Logger\Manager $manager */ 89 $manager = Manager::instance(); 90 $logger = $manager->get_logger(); 91 $log_entries = $logger->get_formatted_log_entries( self::MAX_ENTRIES, false ); 92 93 if ( ! empty( $log_entries ) ) { 94 $entries_string = PHP_EOL; 95 foreach ( $log_entries as $key => $log_entry ) { 96 if ( $log_entry['count'] ) { 97 $entries_string .= sprintf( '%s: showing %s of %s', $key, $log_entry['count'], $log_entry['total_count'] ) . $log_entry['entries'] . PHP_EOL; 98 } 99 } 100 101 if ( ! empty( $entries_string ) ) { 102 $log_string = $entries_string; 103 } 104 } 105 106 return [ 107 'value' => $log_string, 108 ]; 109 } 110 }