Current File : /home/inteuuod/public_html/wp-content/plugins/userswp/includes//class-status.php
<?php
/**
* UsersWP status functions
*
* All UsersWP status related functions can be found here.
*
* @since 1.0.20
*/
class UsersWP_Status {
/**
* Outputs status page content
*
* @since 1.0.0
* @package userswp
*/
public static function output() {
include_once( USERSWP_PATH . '/admin/views/html-admin-page-status.php' );
}
/**
* Displays status report
*
* @since 1.0.0
* @package userswp
*
*/
public static function status_report() {
include_once( USERSWP_PATH . '/admin/views/html-admin-page-status-report.php' );
}
/**
* Get array of environment information. Includes thing like software
* versions, and various server settings.
*
* @return array
*/
public static function get_environment_info() {
global $wpdb;
// Figure out cURL version, if installed.
$curl_version = '';
if ( function_exists( 'curl_version' ) ) {
$curl_version = curl_version();
$curl_version = $curl_version['version'] . ', ' . $curl_version['ssl_version'];
}
// WP memory limit
$wp_memory_limit = uwp_let_to_num( WP_MEMORY_LIMIT );
if ( function_exists( 'memory_get_usage' ) ) {
$wp_memory_limit = max( $wp_memory_limit, uwp_let_to_num( @ini_get( 'memory_limit' ) ) );
}
// User agent
$user_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
// Test POST requests
$post_response = wp_safe_remote_post( 'http://api.wordpress.org/core/browse-happy/1.1/', array(
'timeout' => 10,
'user-agent' => 'WordPress/' . get_bloginfo( 'version' ) . '; ' . home_url(),
'httpversion' => '1.1',
'body' => array(
'useragent' => $user_agent,
),
) );
$post_response_body = NULL;
$post_response_successful = false;
if ( ! is_wp_error( $post_response ) && $post_response['response']['code'] >= 200 && $post_response['response']['code'] < 300 ) {
$post_response_successful = true;
$post_response_body = json_decode( wp_remote_retrieve_body( $post_response ), true );
}
// Test GET requests
$get_response = wp_safe_remote_get( 'https://plugins.svn.wordpress.org/userswp/trunk/readme.txt', array(
'timeout' => 10,
'user-agent' => 'UsersWP/' . USERSWP_VERSION,
'httpversion' => '1.1'
) );
$get_response_successful = false;
if ( ! is_wp_error( $post_response ) && $post_response['response']['code'] >= 200 && $post_response['response']['code'] < 300 ) {
$get_response_successful = true;
}
// Return all environment info. Described by JSON Schema.
return array(
'home_url' => get_option( 'home' ),
'site_url' => get_option( 'siteurl' ),
'version' => USERSWP_VERSION,
'wp_version' => get_bloginfo( 'version' ),
'wp_multisite' => is_multisite(),
'wp_memory_limit' => $wp_memory_limit,
'wp_debug_mode' => ( defined( 'WP_DEBUG' ) && WP_DEBUG ),
'wp_cron' => ! ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ),
'language' => get_locale(),
'server_info' => $_SERVER['SERVER_SOFTWARE'],
'php_version' => phpversion(),
'php_post_max_size' => uwp_let_to_num( ini_get( 'post_max_size' ) ),
'php_max_execution_time' => ini_get( 'max_execution_time' ),
'php_max_input_vars' => ini_get( 'max_input_vars' ),
'curl_version' => $curl_version,
'suhosin_installed' => extension_loaded( 'suhosin' ),
'max_upload_size' => wp_max_upload_size(),
'mysql_version' => ( ! empty( $wpdb->is_mysql ) ? $wpdb->db_version() : '' ),
'default_timezone' => date_default_timezone_get(),
'fsockopen_or_curl_enabled' => ( function_exists( 'fsockopen' ) || function_exists( 'curl_init' ) ),
'soapclient_enabled' => class_exists( 'SoapClient' ),
'domdocument_enabled' => class_exists( 'DOMDocument' ),
'gzip_enabled' => is_callable( 'gzopen' ),
'gd_library' => extension_loaded( 'gd' ),
'mbstring_enabled' => extension_loaded( 'mbstring' ),
'remote_post_successful' => $post_response_successful,
'remote_post_response' => ( is_wp_error( $post_response ) ? $post_response->get_error_message() : $post_response['response']['code'] ),
'remote_get_successful' => $get_response_successful,
'remote_get_response' => ( is_wp_error( $get_response ) ? $get_response->get_error_message() : $get_response['response']['code'] ),
'platform' => ! empty( $post_response_body['platform'] ) ? $post_response_body['platform'] : '-',
'browser_name' => ! empty( $post_response_body['name'] ) ? $post_response_body['name'] : '-',
'browser_version' => ! empty( $post_response_body['version'] ) ? $post_response_body['version'] : '-',
'user_agent' => $user_agent
);
}
/**
* Returns database information
*
* @since 1.0.0
* @package userswp
*
* @return array
*/
public static function get_database_info(){
global $wpdb;
$database_table_sizes = $wpdb->get_results( $wpdb->prepare( "
SELECT
table_name AS 'name',
round( ( data_length / 1024 / 1024 ), 2 ) 'data',
round( ( index_length / 1024 / 1024 ), 2 ) 'index'
FROM information_schema.TABLES
WHERE table_schema = %s
ORDER BY name ASC;
", DB_NAME ) );
$core_tables = array(
'uwp_usermeta',
'uwp_form_fields',
'uwp_form_extras',
'uwp_profile_tabs',
);
$core_tables = apply_filters( 'uwp_database_tables', $core_tables );
/**
* Adding the prefix to the tables array, for backwards compatibility.
*
* If we changed the tables above to include the prefix, then any filters against that table could break.
*/
$core_tables = array_map( array( 'UsersWP_Status', 'add_db_table_prefix' ), $core_tables );
/**
* Organize UWP and non-UWP tables separately for display purposes later.
*
* To ensure we include all UWP tables, even if they do not exist, pre-populate the UWP array with all the tables.
*/
$tables = array(
'userswp' => array_fill_keys( $core_tables, false ),
'other' => array()
);
$database_size = array(
'data' => 0,
'index' => 0
);
foreach ( $database_table_sizes as $table ) {
$table_type = in_array( $table->name, $core_tables ) ? 'userswp' : 'other';
$tables[ $table_type ][ $table->name ] = array(
'data' => $table->data,
'index' => $table->index
);
$database_size[ 'data' ] += $table->data;
$database_size[ 'index' ] += $table->index;
}
// Return all database info. Described by JSON Schema.
return array(
'uwp_db_version' => get_option( 'uwp_db_version' ),
'database_prefix' => $wpdb->prefix,
'database_tables' => $tables,
'database_size' => $database_size,
);
}
/**
* Returns active plugins
*
* @since 1.0.0
* @package userswp
*
* @return array
*/
public static function get_active_plugins(){
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
require_once( ABSPATH . 'wp-admin/includes/update.php' );
if ( ! function_exists( 'get_plugin_updates' ) ) {
return array();
}
// 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 );
}
$active_plugins_data = array();
$available_updates = get_plugin_updates();
foreach ( $active_plugins as $plugin ) {
$data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
// convert plugin data to json response format.
$active_plugins_data[] = array(
'plugin' => $plugin,
'name' => $data['Name'],
'version' => $data['Version'],
'url' => $data['PluginURI'],
'author_name' => $data['AuthorName'],
'author_url' => esc_url_raw( $data['AuthorURI'] ),
'network_activated' => $data['Network'],
'latest_verison' => ( array_key_exists( $plugin, $available_updates ) ) ? $available_updates[$plugin]->update->new_version : $data['Version']
);
}
return $active_plugins_data;
}
/**
* Returns theme info
*
* @since 1.0.0
* @package userswp
*
* @return array
*/
public static function get_theme_info(){
$active_theme = wp_get_theme();
// Get parent theme info if this theme is a child theme, otherwise
// pass empty info in the response.
if ( is_child_theme() ) {
$parent_theme = wp_get_theme( $active_theme->Template );
$parent_theme_info = array(
'parent_name' => $parent_theme->Name,
'parent_version' => $parent_theme->Version,
'parent_latest_verison' => self::get_latest_theme_version( $parent_theme ),
'parent_author_url' => $parent_theme->{'Author URI'},
);
} else {
$parent_theme_info = array( 'parent_name' => '', 'parent_version' => '', 'parent_latest_verison' => '', 'parent_author_url' => '' );
}
/**
* Scan the theme directory for all UWP templates to see if our theme
* overrides any of them.
*/
$override_files = array();
$outdated_templates = false;
$scan_files = self::scan_template_files( USERSWP_PATH . 'templates/' );
foreach ( $scan_files as $file ) {
if ( file_exists( get_stylesheet_directory() . '/' . $file ) ) {
$theme_file = get_stylesheet_directory() . '/' . $file;
} elseif ( file_exists( get_stylesheet_directory() . '/userswp/' . $file ) ) {
$theme_file = get_stylesheet_directory() . '/userswp/' . $file;
} elseif ( file_exists( get_template_directory() . '/' . $file ) ) {
$theme_file = get_template_directory() . '/' . $file;
} elseif ( file_exists( get_template_directory() . '/userswp/' . $file ) ) {
$theme_file = get_template_directory() . '/userswp/' . $file;
} else {
$theme_file = false;
}
if ( ! empty( $theme_file ) ) {
$core_version = self::get_file_version( USERSWP_PATH . '/templates/' . $file );
$theme_version = self::get_file_version( $theme_file );
if ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '<' ) ) ) {
if ( ! $outdated_templates ) {
$outdated_templates = true;
}
}
$override_files[] = array(
'file' => str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ),
'version' => $theme_version,
'core_version' => $core_version,
);
}
}
$active_theme_info = array(
'name' => $active_theme->Name,
'version' => $active_theme->Version,
'latest_verison' => self::get_latest_theme_version( $active_theme ),
'author_url' => esc_url_raw( $active_theme->{'Author URI'} ),
'is_child_theme' => is_child_theme(),
'has_outdated_templates' => $outdated_templates,
'overrides' => $override_files,
);
return array_merge( $active_theme_info, $parent_theme_info );
}
/**
* Returns security info
*
* @since 1.0.0
* @package userswp
*
* @return array
*/
public static function get_security_info(){
$check_page = get_home_url();
return array(
'secure_connection' => 'https' === substr( $check_page, 0, 5 ),
'hide_errors' => ! ( defined( 'WP_DEBUG' ) && defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG && WP_DEBUG_DISPLAY ) || 0 === intval( ini_get( 'display_errors' ) ),
);
}
/**
* Returns pages
*
* @since 1.0.0
* @package userswp
*
* @return array
*/
public static function get_pages(){
$check_pages = array(
_x( 'Profile Page', 'Page setting', 'userswp' ) => array(
'option' => 'profile_page',
'shortcode' => '[uwp_profile]',
),
_x( 'Register Page', 'Page setting', 'userswp' ) => array(
'option' => 'register_page',
'shortcode' => '[uwp_register]',
),
_x( 'Login Page', 'Page setting', 'userswp' ) => array(
'option' => 'login_page',
'shortcode' => '[uwp_login]',
),
_x( 'Account Page', 'Page setting', 'userswp' ) => array(
'option' => 'account_page',
'shortcode' => '[uwp_account]',
),
_x( 'Change Password Page', 'Page setting', 'userswp' ) => array(
'option' => 'change_page',
'shortcode' => '[uwp_change]',
),
_x( 'Forgot Password Page', 'Page setting', 'userswp' ) => array(
'option' => 'forgot_page',
'shortcode' => '[uwp_forgot]',
),
_x( 'Reset Password Page', 'Page setting', 'userswp' ) => array(
'option' => 'reset_page',
'shortcode' => '[uwp_reset]',
),
_x( 'Users List Page', 'Page setting', 'userswp' ) => array(
'option' => 'users_page',
'shortcode' => '[uwp_users]',
),
);
$check_pages = apply_filters('uwp_status_check_pages', $check_pages);
$pages_output = array();
foreach ( $check_pages as $page_name => $values ) {
$page_id = uwp_get_page_id( $values['option'], '' );
$page_set = $page_exists = $page_visible = false;
$shortcode_present = $shortcode_required = false;
$page = false;
// Page checks
if ( $page_id ) {
$page_set = true;
$page = get_post( $page_id );
}
if ( $page ) {
$page_exists = true;
}
if ( 'publish' === get_post_status( $page_id ) ) {
$page_visible = true;
}
// Shortcode checks
if ( $values['shortcode'] && $page ) {
$shortcode_required = true;
if ( strstr( $page->post_content, $values['shortcode'] ) ) {
$shortcode_present = true;
}
}
// Wrap up our findings into an output array
$pages_output[] = array(
'page_name' => $page_name,
'page_id' => $page_id,
'page_set' => $page_set,
'page_exists' => $page_exists,
'page_visible' => $page_visible,
'shortcode' => $values['shortcode'],
'shortcode_required' => $shortcode_required,
'shortcode_present' => $shortcode_present,
);
}
return $pages_output;
}
/**
* Add prefix to table.
*
* @param string $table table name
* @return string
*/
protected static function add_db_table_prefix( $table ) {
return uwp_get_table_prefix() . $table;
}
/**
* Get latest version of a theme by slug.
*
* @since 2.0.0
*
* @param object $theme WP_Theme object.
* @return string Version number if found.
*/
public static function get_latest_theme_version( $theme ) {
include_once( ABSPATH . 'wp-admin/includes/theme.php' );
$api = themes_api( 'theme_information', array(
'slug' => $theme->get_stylesheet(),
'fields' => array(
'sections' => false,
'tags' => false,
),
) );
$update_theme_version = 0;
// Check .org for updates.
if ( is_object( $api ) && ! is_wp_error( $api ) ) {
$update_theme_version = $api->version;
}
return $update_theme_version;
}
/**
* Scan the template files.
*
* @param string $template_path Path to the template directory.
* @return array
*/
public static function scan_template_files( $template_path ) {
$files = @scandir( $template_path ); // @codingStandardsIgnoreLine.
$result = array();
if ( ! empty( $files ) ) {
foreach ( $files as $key => $value ) {
if ( ! in_array( $value, array( '.', '..' ), true ) ) {
if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) {
$sub_files = self::scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value );
foreach ( $sub_files as $sub_file ) {
$result[] = $value . DIRECTORY_SEPARATOR . $sub_file;
}
} else {
$result[] = $value;
}
}
}
}
return $result;
}
/**
* Retrieve metadata from a file. Based on WP Core's get_file_data function.
*
* @since 1.0.20
* @param string $file Path to the file.
* @return string
*/
public static function get_file_version( $file ) {
// Avoid notices if file does not exist.
if ( ! file_exists( $file ) ) {
return '';
}
// We don't need to write to the file, so just open for reading.
$fp = fopen( $file, 'r' ); // @codingStandardsIgnoreLine.
// Pull only the first 8kiB of the file in.
$file_data = fread( $fp, 8192 ); // @codingStandardsIgnoreLine.
// PHP will close file handle, but we are good citizens.
fclose( $fp ); // @codingStandardsIgnoreLine.
// Make sure we catch CR-only line endings.
$file_data = str_replace( "\r", "\n", $file_data );
$version = '';
if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] ) {
$version = _cleanup_header_comment( $match[1] );
}
return $version;
}
}