PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.2.4.5
Adminify – White Label, Admin Menu Editor, Login Customizer v3.2.4.5
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
adminify / Inc / Modules / ServerInformation / ServerInformation.php

ServerInformation.php in Adminify – White Label, Admin Menu Editor, Login Customizer 3.2.4.5, at Inc/Modules/ServerInformation/ServerInformation.php

481 lines 14.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPAdminify\Inc\Modules\ServerInformation;
4
5 use WPAdminify\Inc\Utils;
6 use WPAdminify\Inc\Modules\ServerInformation\ServerInfo_WP_Details;
7 use WPAdminify\Inc\Modules\ServerInformation\ServerInfo_Server_Details;
8 use WPAdminify\Inc\Modules\ServerInformation\ServerInfo_PHP_INI_Details;
9 use WPAdminify\Inc\Modules\ServerInformation\ServerInfo_Htaccess_Details;
10 use WPAdminify\Inc\Modules\ServerInformation\ServerInfo_Robots_Details;
11 use WPAdminify\Inc\Modules\ServerInformation\ServerInfo_Error_Logs_Details;
12
13 // no direct access allowed
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit;
16 }
17
18 /**
19 * WPAdminify
20 *
21 * @package Server Information
22 *
23 * @author WP Adminify <support@wpadminify.com>
24 */
25
26 class ServerInformation {
27
28 private $url;
29 public $prefix = '_wpadminify_server_info';
30
31 public function __construct() {
32 // if ( is_multisite() && ! is_network_admin() ) {
33 // return; // only display to network admin if multisite is enbaled
34 // }
35
36 $this->url = WP_ADMINIFY_URL . 'Inc/Modules/ServerInformation';
37 add_action( 'adminify_loaded', [ $this, 'jltwp_adminify_server_info_menu' ] );
38
39 if ( is_admin() ) {
40 add_action( 'admin_enqueue_scripts', [ $this, 'jltwp_adminify_server_info_styles' ], 99999 );
41
42 // Refresh Debug Log
43 add_action( 'wp_ajax_jltwp_adminify_error_log_content_refresh', [ $this, 'jltwp_adminify_error_log_content_refresh' ] );
44 add_action( 'wp_ajax_nopriv_jltwp_adminify_error_log_content_refresh', [ $this, 'jltwp_adminify_error_log_content_refresh' ] );
45
46 // Clear Debug Log
47 add_action( 'wp_ajax_jltwp_adminify_error_log_content_clear', [ $this, 'jltwp_adminify_error_log_content_clear' ] );
48 add_action( 'wp_ajax_nopriv_jltwp_adminify_error_log_content_clear', [ $this, 'jltwp_adminify_error_log_content_clear' ] );
49 }
50 }
51
52
53
54 /**
55 * Server Information Script/Styles
56 *
57 * @return void
58 */
59 public function jltwp_adminify_server_info_styles() {
60 global $pagenow;
61
62 if ( ( 'admin.php' === $pagenow ) && ( 'adminify-server-info' === $_GET['page'] ) ) {
63 echo '<style>.wp-adminify_page_adminify-server-info .adminify-header-inner{padding:0;}.wp-adminify_page_adminify-server-info .adminify-field-subheading{font-size:20px; padding-left:0;}.wp-adminify_page_adminify-server-info .adminify-nav,.wp-adminify_page_adminify-server-info .adminify-search,.wp-adminify_page_adminify-server-info .adminify-footer,.wp-adminify_page_adminify-server-info .adminify-reset-all,.wp-adminify_page_adminify-server-info .adminify-expand-all,.wp-adminify_page_adminify-server-info .adminify-header-left,.wp-adminify_page_adminify-server-info .adminify-reset-section,.wp-adminify_page_adminify-server-info .adminify-nav-background{display: none !important;}.wp-adminify_page_adminify-server-info .adminify-nav-normal + .adminify-content{margin-left: 0;}
64
65 /* If needed for white top-bar */
66 .wp-adminify_page_adminify-server-info .adminify-header-inner {
67 background-color: #fafafa !important;
68 border-bottom: 1px solid #f5f5f5;
69 }
70 .wp-adminify .adminify-server-info .adminify-buttons{
71 display: none !important;
72 }
73 </style>';
74
75 wp_enqueue_script( 'wp-adminify-error-logs', $this->url . '/error-logs.js', [ 'jquery' ], null, true );
76 wp_localize_script( 'wp-adminify-error-logs', 'WPAdminify_ErrorL', $this->adminify_error_logs_object() );
77
78 wp_enqueue_style( 'adminify', \ADMINIFY_Setup::include_plugin_url( 'assets/css/style.min.css' ), [], WP_ADMINIFY_VER, 'all' );
79 wp_enqueue_script( 'adminify', \ADMINIFY_Setup::include_plugin_url( 'assets/js/main.min.js' ), [ 'jquery' ], WP_ADMINIFY_VER, true );
80 }
81 }
82
83
84
85 /**
86 * JS Object
87 *
88 * @return void
89 */
90 public function adminify_error_logs_object() {
91 return [
92 'ajax_url' => admin_url( 'admin-ajax.php' ),
93 'security_nonce' => wp_create_nonce( 'adminify-error-logs-security-nonce' ),
94 'label_update' => esc_html__( 'Will be updated...', 'adminify' ),
95 'label_clear' => esc_html__( 'Will be cleared...', 'adminify' ),
96 'label_done' => esc_html__( 'Done!', 'adminify' ),
97 ];
98 }
99
100 public function jltwp_adminify_server_info_menu() {
101 if ( ! class_exists( 'ADMINIFY' ) ) {
102 return;
103 }
104
105 // WP Adminify Server Infos Settings
106 \ADMINIFY::createOptions(
107 $this->prefix,
108 [
109
110 // Framework Title
111 'framework_title' => __( 'WP Adminify Server Info <small>by Jewel Theme</small>', 'adminify' ),
112 'framework_class' => 'adminify-server-info',
113
114 // menu settings
115 'menu_title' => 'Server Info',
116 'menu_slug' => 'adminify-server-info',
117 'menu_type' => 'submenu', // menu, submenu, options, theme, etc.
118 'menu_capability' => 'manage_options',
119 'menu_icon' => '',
120 'menu_position' => 59,
121 'menu_hidden' => false,
122 'menu_parent' => 'wp-adminify-settings',
123
124 // Footer Credits
125 'footer_text' => ' ',
126 'footer_after' => ' ',
127 'footer_credit' => ' ',
128
129 // menu extras
130 'show_bar_menu' => false,
131 'show_sub_menu' => false,
132 'show_in_network' => true,
133 'show_in_customizer' => false,
134
135 'show_search' => false,
136 'show_reset_all' => false,
137 'show_reset_section' => false,
138 'show_footer' => false,
139 'show_all_options' => false,
140 'show_form_warning' => false,
141 'sticky_header' => false,
142 'save_defaults' => false,
143 'ajax_save' => false,
144
145 // admin bar menu settings
146 'admin_bar_menu_icon' => '',
147 'admin_bar_menu_priority' => 45,
148
149 // database model
150 'database' => 'network', // options, transient, theme_mod, network(multisite support)
151 'transient_time' => 0,
152
153 // typography options
154 'enqueue_webfont' => false,
155 'async_webfont' => false,
156
157 // others
158 'output_css' => false,
159
160 // theme and wrapper classname
161 'nav' => 'normal',
162 'theme' => 'dark',
163 'class' => 'wp-adminify_page_adminify-server-info',
164 ]
165 );
166
167 // Server Info Section
168 \ADMINIFY::createSection(
169 $this->prefix,
170 [
171 'title' => 'Server Info',
172 'icon' => 'fas fa-rocket',
173 'fields' => [
174
175 [
176 'id' => 'server-info-tab',
177 'type' => 'tabbed',
178 'title' => '',
179 'tabs' => [
180
181 [
182 'title' => __( 'WordPress', 'adminify' ),
183 'icon' => 'fab fa-wordpress',
184 'fields' => [
185 [
186 'id' => 'wordpress',
187 'type' => 'callback',
188 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_wordpress_details',
189 ],
190 ],
191 ],
192 [
193 'title' => __( 'Server', 'adminify' ),
194 'icon' => 'fa fa-gear',
195 'fields' => [
196 [
197 'id' => 'server',
198 'type' => 'callback',
199 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_server_details',
200 ],
201 ],
202 ],
203 [
204 'title' => __( 'PHP Info', 'adminify' ),
205 'icon' => 'fa fa-gear',
206 'fields' => [
207 [
208 'id' => 'php_info',
209 'type' => 'callback',
210 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_get_phpinfo',
211 ],
212 ],
213 ],
214 [
215 'title' => __( 'MySQL', 'adminify' ),
216 'icon' => 'fa fa-gear',
217 'fields' => [
218 [
219 'id' => 'mysql_info',
220 'type' => 'callback',
221 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_get_mysqlinfo',
222 ],
223 ],
224 ],
225 [
226 'title' => __( 'Constants', 'adminify' ),
227 'icon' => 'fa fa-gear',
228 'fields' => [
229 [
230 'id' => 'constants',
231 'type' => 'callback',
232 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_constant_details',
233 ],
234 ],
235 ],
236 [
237 'title' => __( '.htaccess File', 'adminify' ),
238 'icon' => 'fa fa-gear',
239 'fields' => [
240 [
241 'id' => 'htaccess',
242 'type' => 'callback',
243 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_htacces_details',
244 ],
245 ],
246 ],
247 [
248 'title' => __( 'php.ini File', 'adminify' ),
249 'icon' => 'fa fa-gear',
250 'fields' => [
251 [
252 'id' => 'php_ini',
253 'type' => 'callback',
254 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_php_ini_details',
255 ],
256 ],
257 ],
258 [
259 'title' => __( 'Robots.txt File', 'adminify' ),
260 'icon' => 'fa fa-gear',
261 'fields' => [
262 [
263 'id' => 'robots_txt',
264 'type' => 'callback',
265 'function' => 'WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_robots_details',
266 ],
267 ],
268 ],
269 [
270 'title' => __( 'Error Logs', 'adminify' ),
271 'icon' => 'fa fa-gear',
272 'fields' => [
273 [
274 'id' => 'error_logs',
275 'type' => 'callback',
276 'function' => '\WPAdminify\Inc\Modules\ServerInformation\ServerInformation::jltwp_adminify_error_log_details',
277 ],
278 ],
279 ],
280
281 ],
282 ],
283
284 ],
285 ]
286 );
287 }
288
289
290 /**
291 * Server Details
292 */
293 public static function jltwp_adminify_server_details() {
294 new ServerInfo_Server_Details();
295 }
296
297
298 /**
299 * WordPress Details
300 */
301 public static function jltwp_adminify_wordpress_details() {
302 new ServerInfo_WP_Details();
303 }
304
305
306 /**
307 * Constant Details
308 */
309 public static function jltwp_adminify_constant_details() {
310 new ServerInfo_Constant_Details();
311 }
312
313 /**
314 * .htaccess file Details
315 */
316 public static function jltwp_adminify_htacces_details() {
317 new ServerInfo_Htaccess_Details();
318 }
319
320 /**
321 * php.ini file Details
322 */
323 public static function jltwp_adminify_php_ini_details() {
324 new ServerInfo_PHP_INI_Details();
325 }
326
327 /**
328 * Robots file Details
329 */
330 public static function jltwp_adminify_robots_details() {
331 new ServerInfo_Robots_Details();
332 }
333
334 /**
335 * Error Logs Details
336 */
337 public static function jltwp_adminify_error_log_details() {
338 new ServerInfo_Error_Logs_Details();
339 }
340
341 /**
342 * Error Logs Details
343 */
344 public static function jltwp_adminify_get_phpinfo() {
345 if ( ! class_exists( 'DOMDocument' ) ) {
346 echo '<div class="wrap" id="PHPinfo">';
347 echo '<h2>' . esc_html__( 'PHP', 'adminify' ) . ' ' . esc_html( phpversion() ) . '</h2>';
348 echo 'You need <a href="' . esc_url( 'http://php.net/manual/en/class.domdocument.php' ) . '" target="_blank">' . esc_html__('DOMDocument extension' , 'adminify') . '</a> to be enabled.';
349 echo '</div>';
350 } else {
351 ob_start();
352 phpinfo();
353 $phpinfo = ob_get_contents();
354 ob_end_clean();
355
356 // Use DOMDocument to parse phpinfo()
357 $html = new \DOMDocument( '1.0', 'UTF-8' );
358 $internal_errors = libxml_use_internal_errors( true );
359 $html->loadHTML( $phpinfo );
360 libxml_use_internal_errors( $internal_errors );
361
362 // Style process
363 $tables = $html->getElementsByTagName( 'table' );
364 foreach ( $tables as $table ) {
365 $table->setAttribute( 'class', 'widefat' );
366 }
367
368 // We only need the <body>
369 $xpath = new \DOMXPath( $html );
370 $body = $xpath->query( '/html/body' );
371
372 // Save HTML fragment
373 $phpinfo_html = $html->saveXml( $body->item( 0 ) );
374
375 echo '<div class="wrap" id="PHPinfo">';
376 echo '<h2>' . esc_html__( 'PHP', 'adminify' ) . ' ' . esc_html( phpversion() ) . '</h2>';
377 echo Utils::wp_kses_custom( $phpinfo_html );
378 echo '</div>';
379 }
380 }
381
382
383 /**
384 * Get MYSQL Information
385 *
386 * @return void
387 */
388 public static function jltwp_adminify_get_mysqlinfo() {
389 global $wpdb;
390 $sqlversion = $wpdb->get_var( 'SELECT VERSION() AS version' );
391 $mysqlinfo = $wpdb->get_results( 'SHOW VARIABLES' );
392
393 if ( is_rtl() ) { ?>
394 <style type="text/css">
395 #MYSQLinfo,
396 #MYSQLinfo table,
397 #MYSQLinfo th,
398 #MYSQLinfo td {
399 direction: ltr;
400 text-align: left;
401 }
402
403 #MYSQLinfo h2 {
404 padding: 0.5em 0 0;
405 }
406 </style>
407 <?php
408 }
409 echo '<div class="wrap" id="MYSQLinfo" >' . "\n";
410 echo '<h2>' . esc_html__( 'MYSQL', 'adminify' ) . ' ' . esc_html( $sqlversion ) . '</h2>';
411
412 if ( $mysqlinfo ) {
413 echo '<br class="clear" />' . "\n";
414 echo '<table class="widefat" dir="ltr">' . "\n";
415 echo '<thead><tr><th>' . esc_html__( 'Variable Name', 'adminify' ) . '</th><th>' . esc_html__( 'Value', 'adminify' ) . '</th></tr></thead><tbody>' . "\n";
416 foreach ( $mysqlinfo as $info ) {
417 echo '<tr class="" onmouseover="this.className=\'highlight\'" onmouseout="this.className=\'\'"><td>' . esc_html( $info->Variable_name ) . '</td><td>' . esc_html( htmlspecialchars( $info->Value ) ) . '</td></tr>' . "\n";
418 }
419 echo '</tbody></table>' . "\n";
420 }
421 echo '</div>' . "\n";
422 }
423
424
425 // Refresh Button Ajax
426 public function jltwp_adminify_error_log_content_refresh() {
427 if ( defined( 'DOING_AJAX' ) && DOING_AJAX && check_ajax_referer( 'adminify-error-logs-security-nonce', 'security' ) > 0 ) {
428 if ( ! empty( $_POST['command'] ) ) {
429 $action = sanitize_key( $_POST['command'] );
430
431 $file_content = '';
432
433 // Check for user refreshing request
434 if ( $action == 'refresh_error_log' ) {
435
436 // Get the wp "debug.log" file
437 $file = ServerInfo_Error_Logs_Details::jltwp_adminify_error_log();
438
439 // Get the wp "debug.log" file content
440 $file_content = ServerInfo_Error_Logs_Details::jltwp_adminify_error_log_content( $file );
441 }
442
443 wp_send_json( [ 'file_content' => $file_content ] );
444 }
445 }
446
447 die();
448 }
449
450
451
452 public function jltwp_adminify_error_log_content_clear() {
453 if ( defined( 'DOING_AJAX' ) && DOING_AJAX && check_ajax_referer( 'adminify-error-logs-security-nonce', 'security' ) > 0 ) {
454 if ( ! empty( $_POST['command'] ) ) {
455 $file_content = '';
456 $action = sanitize_key( $_POST['command'] );
457 // Check for user clearing request
458 if ( $action == 'clear_error_log' ) {
459
460 // Call wp file system
461 global $wp_filesystem;
462 WP_Filesystem();
463
464 // Get the wp "debug.log" file
465 $file = ServerInfo_Error_Logs_Details::jltwp_adminify_error_log();
466
467 // Save no content to "debug.log" file the clear the file content
468 $wp_filesystem->put_contents( $file, '', 0644 );
469
470 // Get the wp "debug.log" file content
471 $file_content = ServerInfo_Error_Logs_Details::jltwp_adminify_error_log_content( $file );
472 }
473
474 return wp_send_json( [ 'file_content' => $file_content ] );
475 }
476 }
477
478 die();
479 }
480 }
481