You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
543 lines
17 KiB
543 lines
17 KiB
<?php
|
|
|
|
/**
|
|
* Class WP_Statistics_Admin_Pages
|
|
*/
|
|
class WP_Statistics_Admin_Pages {
|
|
|
|
/**
|
|
* Load Overview Page
|
|
*/
|
|
static function overview() {
|
|
global $WP_Statistics;
|
|
|
|
// Right side "wide" widgets
|
|
if ( $WP_Statistics->get_option( 'visits' ) ) {
|
|
add_meta_box(
|
|
'wps_hits_postbox',
|
|
__( 'Hit Statistics', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'hits' )
|
|
);
|
|
}
|
|
|
|
if ( $WP_Statistics->get_option( 'visitors' ) ) {
|
|
add_meta_box(
|
|
'wps_top_visitors_postbox',
|
|
__( 'Top Visitors', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'top.visitors' )
|
|
);
|
|
add_meta_box(
|
|
'wps_search_postbox',
|
|
__( 'Search Engine Referrals', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'search' )
|
|
);
|
|
add_meta_box(
|
|
'wps_words_postbox',
|
|
__( 'Top Searched Phrases (30 Days)', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'searched.phrases' )
|
|
);
|
|
add_meta_box(
|
|
'wps_words_postbox',
|
|
__( 'Latest Search Words', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'words' )
|
|
);
|
|
add_meta_box(
|
|
'wps_recent_postbox',
|
|
__( 'Recent Visitors', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'recent' )
|
|
);
|
|
|
|
if ( $WP_Statistics->get_option( 'geoip' ) ) {
|
|
add_meta_box(
|
|
'wps_map_postbox',
|
|
__( 'Today\'s Visitors Map', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'map' )
|
|
);
|
|
}
|
|
}
|
|
|
|
if ( $WP_Statistics->get_option( 'pages' ) ) {
|
|
add_meta_box(
|
|
'wps_pages_postbox',
|
|
__( 'Top 10 Pages', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'normal',
|
|
null,
|
|
array( 'widget' => 'pages' )
|
|
);
|
|
}
|
|
|
|
// Left side "thin" widgets.
|
|
if ( $WP_Statistics->get_option( 'visitors' ) ) {
|
|
add_meta_box(
|
|
'wps_summary_postbox',
|
|
__( 'Summary', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'side',
|
|
null,
|
|
array( 'widget' => 'summary' )
|
|
);
|
|
add_meta_box(
|
|
'wps_browsers_postbox',
|
|
__( 'Browsers', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'side',
|
|
null,
|
|
array( 'widget' => 'browsers' )
|
|
);
|
|
add_meta_box(
|
|
'wps_referring_postbox',
|
|
__( 'Top Referring Sites', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'side',
|
|
null,
|
|
array( 'widget' => 'referring' )
|
|
);
|
|
|
|
if ( $WP_Statistics->get_option( 'geoip' ) ) {
|
|
add_meta_box(
|
|
'wps_countries_postbox',
|
|
__( 'Top 10 Countries', 'wp-statistics' ),
|
|
'wp_statistics_generate_overview_postbox_contents',
|
|
$WP_Statistics->menu_slugs['overview'],
|
|
'side',
|
|
null,
|
|
array( 'widget' => 'countries' )
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Plugins
|
|
*/
|
|
static function plugins() {
|
|
// Load our CSS to be used.
|
|
wp_enqueue_style(
|
|
'wpstatistics-admin-css',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/css/admin.css',
|
|
true,
|
|
WP_Statistics::$reg['version']
|
|
);
|
|
|
|
// Activate or deactivate the selected plugin
|
|
if ( isset( $_GET['action'] ) ) {
|
|
if ( $_GET['action'] == 'activate' ) {
|
|
$result = activate_plugin( $_GET['plugin'] . '/' . $_GET['plugin'] . '.php' );
|
|
if ( is_wp_error( $result ) ) {
|
|
wp_statistics_admin_notice_result( 'error', $result->get_error_message() );
|
|
} else {
|
|
wp_statistics_admin_notice_result( 'success', __( 'Add-On activated.', 'wp-statistics' ) );
|
|
}
|
|
}
|
|
if ( $_GET['action'] == 'deactivate' ) {
|
|
$result = deactivate_plugins( $_GET['plugin'] . '/' . $_GET['plugin'] . '.php' );
|
|
if ( is_wp_error( $result ) ) {
|
|
wp_statistics_admin_notice_result( 'error', $result->get_error_message() );
|
|
} else {
|
|
wp_statistics_admin_notice_result( 'success', __( 'Add-On deactivated.', 'wp-statistics' ) );
|
|
}
|
|
}
|
|
}
|
|
$response = wp_remote_get( 'https://wp-statistics.com/wp-json/plugin/addons' );
|
|
$response_code = wp_remote_retrieve_response_code( $response );
|
|
$error = null;
|
|
$plugins = array();
|
|
// Check response
|
|
if ( is_wp_error( $response ) ) {
|
|
$error = $response->get_error_message();
|
|
} else {
|
|
if ( $response_code == '200' ) {
|
|
$plugins = json_decode( $response['body'] );
|
|
} else {
|
|
$error = $response['body'];
|
|
}
|
|
}
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/templates/plugins.php';
|
|
}
|
|
|
|
/**
|
|
* Donate
|
|
*/
|
|
static function donate() {
|
|
echo "<script>window.location.href='http://wp-statistics.com/donate';</script>";
|
|
}
|
|
|
|
/**
|
|
* Loads the optimization page code.
|
|
*/
|
|
static function optimization() {
|
|
GLOBAL $wpdb, $WP_Statistics;
|
|
|
|
// Check the current user has the rights to be here.
|
|
if ( ! current_user_can(
|
|
wp_statistics_validate_capability(
|
|
$WP_Statistics->get_option(
|
|
'manage_capability',
|
|
'manage_options'
|
|
)
|
|
)
|
|
)
|
|
) {
|
|
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
|
|
}
|
|
|
|
// When we create $WP_Statistics the user has not been authenticated yet so we cannot load the user preferences
|
|
// during the creation of the class. Instead load them now that the user exists.
|
|
$WP_Statistics->load_user_options();
|
|
|
|
// Load our JS to be used.
|
|
wp_enqueue_script(
|
|
'wp-statistics-admin-js',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/js/admin.js',
|
|
array( 'jquery' ),
|
|
'1.0'
|
|
);
|
|
|
|
if ( is_rtl() ) {
|
|
wp_enqueue_style( 'rtl-css', WP_Statistics::$reg['plugin-url'] . 'assets/css/rtl.css', true, WP_Statistics::$reg['version'] );
|
|
}
|
|
|
|
// Get the row count for each of the tables, we'll use this later on in the wps_optimization.php file.
|
|
$result['useronline'] = $wpdb->get_var( "SELECT COUNT(ID) FROM `{$wpdb->prefix}statistics_useronline`" );
|
|
$result['visit'] = $wpdb->get_var( "SELECT COUNT(ID) FROM `{$wpdb->prefix}statistics_visit`" );
|
|
$result['visitor'] = $wpdb->get_var( "SELECT COUNT(ID) FROM `{$wpdb->prefix}statistics_visitor`" );
|
|
$result['exclusions'] = $wpdb->get_var( "SELECT COUNT(ID) FROM `{$wpdb->prefix}statistics_exclusions`" );
|
|
$result['pages'] = $wpdb->get_var( "SELECT COUNT(uri) FROM `{$wpdb->prefix}statistics_pages`" );
|
|
$result['historical'] = $wpdb->get_var( "SELECT COUNT(ID) FROM `{$wpdb->prefix}statistics_historical`" );
|
|
$result['search'] = $wpdb->get_var( "SELECT COUNT(ID) FROM `{$wpdb->prefix}statistics_search`" );
|
|
|
|
include WP_Statistics::$reg['plugin-dir'] . "includes/optimization/wps-optimization.php";
|
|
}
|
|
|
|
/**
|
|
* This function displays the HTML for the settings page.
|
|
*/
|
|
static function settings() {
|
|
global $WP_Statistics;
|
|
|
|
// Check the current user has the rights to be here.
|
|
if ( ! current_user_can(
|
|
wp_statistics_validate_capability(
|
|
$WP_Statistics->get_option(
|
|
'read_capability',
|
|
'manage_options'
|
|
)
|
|
)
|
|
)
|
|
) {
|
|
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
|
|
}
|
|
|
|
// When we create $WP_Statistics the user has not been authenticated yet so we cannot load the user preferences
|
|
// during the creation of the class. Instead load them now that the user exists.
|
|
$WP_Statistics->load_user_options();
|
|
|
|
// Load our JS to be used.
|
|
wp_enqueue_script(
|
|
'wp-statistics-admin-js',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/js/admin.js',
|
|
array( 'jquery' ),
|
|
'1.0'
|
|
);
|
|
|
|
if ( is_rtl() ) {
|
|
wp_enqueue_style( 'rtl-css', WP_Statistics::$reg['plugin-url'] . 'assets/css/rtl.css', true, '1.1' );
|
|
}
|
|
|
|
// We could let the download happen at the end of the page, but this way we get to give some
|
|
// feedback to the users about the result.
|
|
if ( $WP_Statistics->get_option( 'update_geoip' ) == true ) {
|
|
echo WP_Statistics_Updates::download_geoip();
|
|
}
|
|
|
|
include WP_Statistics::$reg['plugin-dir'] . "includes/settings/wps-settings.php";
|
|
}
|
|
|
|
/**
|
|
* @param string $log_type Log Type
|
|
*/
|
|
static function log( $log_type = "" ) {
|
|
global $wpdb, $WP_Statistics, $plugin_page;
|
|
|
|
switch ( $plugin_page ) {
|
|
case WP_Statistics::$page['browser']:
|
|
$log_type = 'all-browsers';
|
|
|
|
break;
|
|
case WP_Statistics::$page['countries']:
|
|
$log_type = 'top-countries';
|
|
|
|
break;
|
|
case WP_Statistics::$page['exclusions']:
|
|
$log_type = 'exclusions';
|
|
|
|
break;
|
|
case WP_Statistics::$page['hits']:
|
|
$log_type = 'hit-statistics';
|
|
|
|
break;
|
|
case WP_Statistics::$page['online']:
|
|
$log_type = 'online';
|
|
|
|
break;
|
|
case WP_Statistics::$page['pages']:
|
|
$log_type = 'top-pages';
|
|
|
|
break;
|
|
case WP_Statistics::$page['categories']:
|
|
$log_type = 'categories';
|
|
|
|
break;
|
|
case WP_Statistics::$page['tags']:
|
|
$log_type = 'tags';
|
|
|
|
break;
|
|
case WP_Statistics::$page['authors']:
|
|
$log_type = 'authors';
|
|
|
|
break;
|
|
case WP_Statistics::$page['referrers']:
|
|
$log_type = 'top-referring-site';
|
|
|
|
break;
|
|
case WP_Statistics::$page['searched-phrases']:
|
|
$log_type = 'searched-phrases';
|
|
|
|
break;
|
|
case WP_Statistics::$page['searches']:
|
|
$log_type = 'search-statistics';
|
|
|
|
break;
|
|
case WP_Statistics::$page['words']:
|
|
$log_type = 'last-all-search';
|
|
|
|
break;
|
|
case WP_Statistics::$page['top-visitors']:
|
|
$log_type = 'top-visitors';
|
|
|
|
break;
|
|
case WP_Statistics::$page['visitors']:
|
|
$log_type = 'last-all-visitor';
|
|
|
|
break;
|
|
default:
|
|
$log_type = "";
|
|
}
|
|
|
|
// When we create $WP_Statistics the user has not been authenticated yet so we cannot load the user preferences
|
|
// during the creation of the class. Instead load them now that the user exists.
|
|
$WP_Statistics->load_user_options();
|
|
|
|
// We allow for a get style variable to be passed to define which function to use.
|
|
if ( $log_type == "" && array_key_exists( 'type', $_GET ) ) {
|
|
$log_type = $_GET['type'];
|
|
}
|
|
|
|
// Verify the user has the rights to see the statistics.
|
|
if ( ! current_user_can(
|
|
wp_statistics_validate_capability(
|
|
$WP_Statistics->get_option(
|
|
'read_capability',
|
|
'manage_option'
|
|
)
|
|
)
|
|
)
|
|
) {
|
|
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
|
|
}
|
|
|
|
// We want to make sure the tables actually exist before we blindly start access them.
|
|
$result = $wpdb->query(
|
|
"SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_visitor' OR `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_visit' OR `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_exclusions' OR `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_historical' OR `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_pages' OR `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_useronline' OR `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_search'"
|
|
);
|
|
|
|
if ( $result != 7 ) {
|
|
$get_bloginfo_url = get_admin_url() .
|
|
"admin.php?page=" .
|
|
WP_Statistics::$page['optimization'] .
|
|
"&tab=database";
|
|
|
|
$missing_tables = array();
|
|
|
|
$result = $wpdb->query(
|
|
"SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_visitor'"
|
|
);
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_visitor';
|
|
}
|
|
$result = $wpdb->query( "SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_visit'" );
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_visit';
|
|
}
|
|
$result = $wpdb->query(
|
|
"SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_exclusions'"
|
|
);
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_exclusions';
|
|
}
|
|
$result = $wpdb->query(
|
|
"SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_historical'"
|
|
);
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_historical';
|
|
}
|
|
$result = $wpdb->query(
|
|
"SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_useronline'"
|
|
);
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_useronline';
|
|
}
|
|
$result = $wpdb->query( "SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_pages'" );
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_pages';
|
|
}
|
|
$result = $wpdb->query(
|
|
"SHOW TABLES WHERE `Tables_in_{$wpdb->dbname}` = '{$wpdb->prefix}statistics_search'"
|
|
);
|
|
if ( $result != 1 ) {
|
|
$missing_tables[] = $wpdb->prefix . 'statistics_search';
|
|
}
|
|
|
|
wp_die(
|
|
'<div class="error"><p>' . sprintf(
|
|
__(
|
|
'The following plugin table(s) do not exist in the database, please re-run the %s install routine %s: ',
|
|
'wp-statistics'
|
|
),
|
|
'<a href="' . $get_bloginfo_url . '">',
|
|
'</a>'
|
|
) . implode( ', ', $missing_tables ) . '</p></div>'
|
|
);
|
|
}
|
|
|
|
// Load the postbox script that provides the widget style boxes.
|
|
wp_enqueue_script( 'common' );
|
|
wp_enqueue_script( 'wp-lists' );
|
|
wp_enqueue_script( 'postbox' );
|
|
|
|
// Load the css we use for the statistics pages.
|
|
wp_enqueue_style(
|
|
'wpstatistics-log-css',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/css/log.css',
|
|
true,
|
|
WP_Statistics::$reg['version']
|
|
);
|
|
wp_enqueue_style(
|
|
'wpstatistics-pagination-css',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/css/pagination.css',
|
|
true,
|
|
WP_Statistics::$reg['version']
|
|
);
|
|
|
|
// Don't forget the right to left support.
|
|
if ( is_rtl() ) {
|
|
wp_enqueue_style(
|
|
'wpstatistics-rtl-css',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/css/rtl.css',
|
|
true,
|
|
WP_Statistics::$reg['version']
|
|
);
|
|
}
|
|
|
|
// The different pages have different files to load.
|
|
switch ( $log_type ) {
|
|
case 'all-browsers':
|
|
case 'top-countries':
|
|
case 'hit-statistics':
|
|
case 'search-statistics':
|
|
case 'exclusions':
|
|
case 'online':
|
|
case 'top-visitors':
|
|
case 'categories':
|
|
case 'tags':
|
|
case 'authors':
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/' . $log_type . '.php';
|
|
break;
|
|
case 'last-all-search':
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/last-search.php';
|
|
|
|
break;
|
|
case 'last-all-visitor':
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/last-visitor.php';
|
|
|
|
break;
|
|
case 'top-referring-site':
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/top-referring.php';
|
|
|
|
break;
|
|
case 'searched-phrases':
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/searched-phrases.php';
|
|
|
|
break;
|
|
case 'top-pages':
|
|
// If we've been given a page id or uri to get statistics for, load the page stats, otherwise load the page stats overview page.
|
|
if ( array_key_exists( 'page-id', $_GET ) || array_key_exists( 'page-uri', $_GET ) || array_key_exists( 'prepage', $_GET ) ) {
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/page-statistics.php';
|
|
} else {
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/top-pages.php';
|
|
}
|
|
|
|
break;
|
|
default:
|
|
wp_enqueue_style(
|
|
'wpstatistics-jqvmap-css',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/jqvmap/jqvmap.css',
|
|
true,
|
|
'1.5.1'
|
|
);
|
|
wp_enqueue_script(
|
|
'wpstatistics-jquery-vmap',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/jqvmap/jquery.vmap.js',
|
|
true,
|
|
'1.5.1'
|
|
);
|
|
wp_enqueue_script(
|
|
'wpstatistics-jquery-vmap-world',
|
|
WP_Statistics::$reg['plugin-url'] . 'assets/jqvmap/maps/jquery.vmap.world.js',
|
|
true,
|
|
'1.5.1'
|
|
);
|
|
|
|
// Load our custom widgets handling javascript.
|
|
wp_enqueue_script( 'wp_statistics_log', WP_Statistics::$reg['plugin-url'] . 'assets/js/log.js' );
|
|
|
|
include WP_Statistics::$reg['plugin-dir'] . 'includes/log/log.php';
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
} |