Files
SIGE-WEB-snapshot/wp-content/plugins/google-analytics-for-wordpress/includes/overview/class-monsterinsights-overview-ajax.php

87 lines
2.5 KiB
PHP

<?php
/**
* Overview Report AJAX handler.
*
* Registers and handles the monsterinsights_get_overview_data action.
*
* @package MonsterInsights
*/
defined( 'ABSPATH' ) || exit;
class MonsterInsights_Overview_Ajax {
/**
* Constructor - Register AJAX hook.
*/
public function __construct() {
add_action( 'wp_ajax_monsterinsights_get_overview_data', array( $this, 'handle_request' ) );
}
/**
* AJAX handler for fetching overview report data.
*
* @return void Outputs JSON response via wp_send_json_success() or wp_send_json_error()
*/
public function handle_request() {
check_ajax_referer( 'mi-admin-nonce', 'nonce' );
if ( ! current_user_can( 'monsterinsights_view_dashboard' ) ) {
wp_send_json_error( array( 'message' => __( 'You do not have permission to view this data.', 'google-analytics-for-wordpress' ) ) );
}
$date_range = ! empty( $_POST['date_range'] ) ? json_decode( stripslashes( $_POST['date_range'] ), true ) : array();
if ( empty( $date_range['start'] ) || empty( $date_range['end'] ) ) {
$date_range = $this->get_default_date_range( 30 );
} else {
$end_date = strtotime( $date_range['end'] );
$today = strtotime( 'today' );
if ( $end_date > $today ) {
$date_range['end'] = date( 'Y-m-d', $today );
}
}
$api = new MonsterInsights_API_Overview();
$api_response = $api->get_overview( $date_range['start'], $date_range['end'] );
if ( is_wp_error( $api_response ) ) {
wp_send_json_error( array( 'message' => $api_response->get_error_message() ) );
}
if ( $api_response instanceof MonsterInsights_API_Error ) {
wp_send_json_error( array( 'message' => $api_response->get_error_message() ) );
}
$overview_data = isset( $api_response[ MonsterInsights_API_Overview::QUERY_ID ] )
? $api_response[ MonsterInsights_API_Overview::QUERY_ID ]
: array();
wp_send_json_success( array(
'date_range' => $date_range,
'overview' => $overview_data,
) );
}
/**
* Build a default date range when none is provided.
*
* @param int $days Number of days to include (inclusive of today).
*
* @return array {
* @type string $start Start date (Y-m-d).
* @type string $end End date (Y-m-d).
* }
*/
private function get_default_date_range( $days = 30 ) {
$days = max( 1, (int) $days );
$end_ts = strtotime( 'today' );
$start_ts = strtotime( '-' . ( $days - 1 ) . ' days', $end_ts );
return array(
'start' => date( 'Y-m-d', $start_ts ),
'end' => date( 'Y-m-d', $end_ts ),
);
}
}