PluginProbe
Elementor Website Builder – more than just a page builder / 3.25.0-dev3
Elementor Website Builder – more than just a page builder v3.25.0-dev3
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / core / debug / inspector.php

inspector.php in Elementor Website Builder – more than just a page builder 3.25.0-dev3, at core/debug/inspector.php

145 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\Core\Debug;
3
4 use Elementor\Settings;
5 use Elementor\Tools;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit; // Exit if accessed directly
9 }
10
11 class Inspector {
12
13 protected $is_enabled = false;
14
15 protected $log = [];
16
17 /**
18 * @since 2.1.2
19 * @access public
20 */
21 public function __construct() {
22 $is_debug = ( defined( 'WP_DEBUG' ) && WP_DEBUG );
23 $option = get_option( 'elementor_enable_inspector', null );
24
25 $this->is_enabled = is_null( $option ) ? $is_debug : 'enable' === $option;
26
27 if ( $this->is_enabled ) {
28 add_action( 'admin_bar_menu', [ $this, 'add_menu_in_admin_bar' ], 201 );
29 }
30
31 add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_fields' ], 50 );
32 }
33
34 /**
35 * @since 2.1.3
36 * @access public
37 */
38 public function is_enabled() {
39 return $this->is_enabled;
40 }
41
42 /**
43 * @since 2.1.3
44 * @access public
45 */
46 public function register_admin_tools_fields( Tools $tools ) {
47 $tools->add_fields( Settings::TAB_GENERAL, 'tools', [
48 'enable_inspector' => [
49 'label' => esc_html__( 'Debug Bar', 'elementor' ),
50 'field_args' => [
51 'type' => 'select',
52 'std' => $this->is_enabled ? 'enable' : '',
53 'options' => [
54 '' => esc_html__( 'Disable', 'elementor' ),
55 'enable' => esc_html__( 'Enable', 'elementor' ),
56 ],
57 'desc' => esc_html__( 'Debug Bar adds an admin bar menu that lists all the templates that are used on a page that is being displayed.', 'elementor' ),
58 ],
59 ],
60 ] );
61 }
62
63 /**
64 * @since 2.1.2
65 * @access public
66 */
67 public function parse_template_path( $template ) {
68 // `untrailingslashit` for windows path style.
69 if ( 0 === strpos( $template, untrailingslashit( ELEMENTOR_PATH ) ) ) {
70 return 'Elementor - ' . basename( $template );
71 }
72
73 if ( 0 === strpos( $template, get_stylesheet_directory() ) ) {
74 return wp_get_theme()->get( 'Name' ) . ' - ' . basename( $template );
75 }
76
77 $plugins_dir = dirname( ELEMENTOR_PATH );
78 if ( 0 === strpos( $template, $plugins_dir ) ) {
79 return ltrim( str_replace( $plugins_dir, '', $template ), '/\\' );
80 }
81
82 return str_replace( WP_CONTENT_DIR, '', $template );
83 }
84
85 /**
86 * @since 2.1.2
87 * @access public
88 */
89 public function add_log( $module, $title, $url = '' ) {
90 if ( ! $this->is_enabled ) {
91 return;
92 }
93
94 if ( ! isset( $this->log[ $module ] ) ) {
95 $this->log[ $module ] = [];
96 }
97
98 $this->log[ $module ][] = [
99 'title' => $title,
100 'url' => $url,
101 ];
102 }
103
104 /**
105 * @since 2.1.2
106 * @access public
107 */
108 public function add_menu_in_admin_bar( \WP_Admin_Bar $wp_admin_bar ) {
109 if ( empty( $this->log ) ) {
110 return;
111 }
112
113 $wp_admin_bar->add_node( [
114 'id' => 'elementor_inspector',
115 'title' => esc_html__( 'Elementor Debugger', 'elementor' ),
116 ] );
117
118 foreach ( $this->log as $module => $log ) {
119 $module_id = sanitize_key( $module );
120
121 $wp_admin_bar->add_menu( [
122 'id' => 'elementor_inspector_' . $module_id,
123 'parent' => 'elementor_inspector',
124 'title' => $module,
125 ] );
126
127 foreach ( $log as $index => $row ) {
128 $url = $row['url'];
129
130 unset( $row['url'] );
131
132 $wp_admin_bar->add_menu( [
133 'id' => 'elementor_inspector_log_' . $module_id . '_' . $index,
134 'parent' => 'elementor_inspector_' . $module_id,
135 'href' => $url,
136 'title' => implode( ' > ', $row ),
137 'meta' => [
138 'target' => '_blank',
139 ],
140 ] );
141 }
142 }
143 }
144 }
145