OwlCyberSecurity - MANAGER
Edit File: functions-system-report.php
<?php namespace PixelYourSite; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } const HTML_WARNING = '<i class="fa fa-exclamation-triangle text-warning" aria-hidden="true" style="color: #fa0;"></i> '; const HTML_CRITICAL = '<i class="fa fa-exclamation-circle" aria-hidden="true" style="color: #d64d4d;"></i> '; const TEXT_WARNING = '[warning] '; const TEXT_CRITICAL = '[critical] '; /** * @return array */ function get_system_report_data( $for_download = false ) { global $wpdb; /** * Wordpress */ $wordpress = array( 'Home URL' => get_option( 'home' ), 'Site URL' => get_option( 'siteurl' ), 'WP version' => get_bloginfo( 'version' ), 'WP multisite' => is_multisite() ? 'Yes' : 'No', 'Language' => get_locale(), ); /** * Server */ // check php version if ( version_compare( phpversion(), '5.3.0', '<' ) ) { $version_check = $for_download ? TEXT_CRITICAL : HTML_CRITICAL; $version_check .= 'Ask your hosting company to upgrade you to at least PHP 5.6.15 or newer. '; } elseif ( version_compare( phpversion(), '5.6.14', '<' ) ) { $version_check = $for_download ? TEXT_WARNING : HTML_WARNING; $version_check .= 'Ask your hosting company to upgrade you to at least PHP 5.6.15 or newer. '; } else { $version_check = ''; } // check mb_string extension presence if ( extension_loaded( 'mbstring' ) ) { $mb_string_check = 'Yes'; } else { $mb_string_check = $for_download ? TEXT_WARNING : HTML_WARNING; $mb_string_check .= 'No. Ask your hosting company to upgrade to enable "mbstring" extension.'; } $server = array( 'Server info' => isset( $_SERVER['SERVER_SOFTWARE'] ) ? $_SERVER['SERVER_SOFTWARE'] : 'Unknown', 'PHP version' => phpversion() . $version_check, 'Multibyte string' => $mb_string_check, 'MySQL version' => ( ! empty( $wpdb->is_mysql ) ? $wpdb->db_version() : 'Unknown' ), ); /** * Plugins */ $plugins = array(); $conflict_plugins = array( 'sumodiscounts/sumodiscounts.php' => array( 'type' => 'warning', ), 'imagify/imagify.php' => array( 'type' => 'warning', ), ); require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); require_once( ABSPATH . 'wp-admin/includes/update.php' ); if ( function_exists( 'get_plugin_updates' ) ) { // Get both site plugins and network plugins $active_plugins = (array) get_option( 'active_plugins', array() ); if ( is_multisite() ) { $network_activated_plugins = array_keys( get_site_option( 'active_sitewide_plugins', array() ) ); $active_plugins = array_merge( $active_plugins, $network_activated_plugins ); } $available_updates = get_plugin_updates(); foreach ( $active_plugins as $plugin ) { $data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); $name = $data['Name']; $value = ''; // check for conflicts if ( array_key_exists( $plugin, $conflict_plugins ) ) { $conflict_data = $conflict_plugins[ $plugin ]; if ( $for_download ) { $value .= $conflict_data['type'] == 'warning' ? TEXT_WARNING : TEXT_CRITICAL; } else { $value .= $conflict_data['type'] == 'warning' ? HTML_WARNING : HTML_CRITICAL; } } // add plugin author name and URL if ( $for_download ) { $value .= 'by ' . $data['AuthorName'] . ' [' . esc_url_raw( $data['PluginURI'] ) . ']'; } else { $value .= 'by <a href="' . esc_url_raw( $data['PluginURI'] ) . '" target="_blank">' . $data['AuthorName'] . '</a> '; } // plugin version $value .= '[' . $data['Version'] . '] '; // available update version if any if ( array_key_exists( $plugin, $available_updates ) ) { $update = $available_updates[ $plugin ]; $value .= '[Update available: ' . $update->update->new_version . '] '; } // is network activated? if ( $data['Network'] ) { $value .= '[Network] '; } $plugins[ $name ] = trim( $value ); } } /** * Theme */ $active_theme = wp_get_theme(); $theme = array( 'Name' => $active_theme->Name, 'Version' => $active_theme->Version, 'Author URL' => esc_url_raw( $active_theme->{'Author URI'} ), 'Child Theme' => is_child_theme() ? 'Yes' : 'No', ); if ( is_child_theme() ) { $parent_theme = wp_get_theme( $active_theme->Template ); $theme['Parent Theme Name'] = $parent_theme->Name; $theme['Parent Theme Version'] = $parent_theme->Version; $theme['Parent Author URL'] = $parent_theme->{'Author URI'}; } $report = array( 'WordPress Environment' => $wordpress, 'Server Environment' => $server, 'Active Plugins' => $plugins, 'Theme' => $theme, ); return apply_filters( 'pys_system_report', $report, $for_download ); } /** * Process a system report download. */ function download_system_report() { if ( empty( $_POST['pys_action'] ) || 'download_system_report' !== $_POST['pys_action'] ) { return; } if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'pys_download_system_report_nonce' ) ) { return; } if ( ! current_user_can( 'manage_options' ) ) { return; } // prepare human-readable system report $output = ""; $report_data = get_system_report_data( true ); foreach ( $report_data as $section_name => $section_report ) { $output .= "\r\n"; $output .= "### {$section_name } ###"; $output .= "\r\n"; $output .= "\r\n"; foreach ( $section_report as $name => $value ) { $output .= "{$name}: $value"; $output .= "\r\n"; } } // send report to client browser ignore_user_abort( true ); nocache_headers(); header( 'Content-Type: text/plain; charset=utf-8' ); header( 'Content-Disposition: attachment; filename=pys-system-report-' . date( 'm-d-Y' ) . '.txt' ); header( "Expires: 0" ); echo $output; exit; } add_action( 'admin_init', 'PixelYourSite\download_system_report' );