126 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace W3TC;
 | 
						|
 | 
						|
class Cdn_StackPath2_Widget {
 | 
						|
	static public function admin_init_w3tc_dashboard() {
 | 
						|
		$o = new Cdn_StackPath2_Widget();
 | 
						|
		add_action( 'admin_print_styles',
 | 
						|
			array( $o, 'admin_print_styles' ) );
 | 
						|
		add_action( 'admin_print_scripts',
 | 
						|
			array( $o, 'admin_print_scripts' ) );
 | 
						|
 | 
						|
		Util_Widget::add2( 'w3tc_stackpath', 2000,
 | 
						|
			'<div class="w3tc-widget-stackpath2-logo"></div>',
 | 
						|
			array( $o, 'widget_form' ),
 | 
						|
			Util_Ui::admin_url( 'admin.php?page=w3tc_cdn' ),
 | 
						|
			'normal' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Runs plugin
 | 
						|
	 */
 | 
						|
	function widget_form() {
 | 
						|
		$c = Dispatcher::config();
 | 
						|
 | 
						|
		// Configure authorize and have_zone
 | 
						|
		$authorized = $c->get_string( 'cdn.stackpath2.client_id' ) != '' &&
 | 
						|
			$c->get_string( 'cdn.engine' ) == 'stackpath2';
 | 
						|
 | 
						|
		if ( $authorized ) {
 | 
						|
			include dirname( __FILE__ ) . DIRECTORY_SEPARATOR .
 | 
						|
				'Cdn_StackPath2_Widget_View_Authorized.php';
 | 
						|
		} else {
 | 
						|
			include dirname( __FILE__ ) . DIRECTORY_SEPARATOR .
 | 
						|
				'Cdn_StackPath2_Widget_View_Unauthorized.php';
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	static function w3tc_ajax_cdn_stackpath2_widgetdata() {
 | 
						|
		$c = Dispatcher::config();
 | 
						|
		$cs = Dispatcher::config_state();
 | 
						|
 | 
						|
		$api = new Cdn_StackPath2_Api( array(
 | 
						|
			'client_id' => $c->get_string( 'cdn.stackpath2.client_id' ),
 | 
						|
			'client_secret' => $c->get_string( 'cdn.stackpath2.client_secret' ),
 | 
						|
			'stack_id' => $c->get_string( 'cdn.stackpath2.stack_id' ),
 | 
						|
			'access_token' => $cs->get_string( 'cdn.stackpath2.access_token' )
 | 
						|
		) );
 | 
						|
 | 
						|
		$stack_id = $c->get_string( 'cdn.stackpath2.stack_id' );
 | 
						|
		$site_id = $c->get_string( 'cdn.stackpath2.site_id' );
 | 
						|
		$response = array();
 | 
						|
 | 
						|
		try {
 | 
						|
			$r = $api->site_metrics( $site_id, 7 );
 | 
						|
			$series = $r['series'][0];
 | 
						|
 | 
						|
			$keys = $series['metrics'];
 | 
						|
			$stats = array();
 | 
						|
			foreach ($series['samples'] as $sample) {
 | 
						|
				$row = array();
 | 
						|
				for ( $n = 0; $n < count( $keys ); $n++ ) {
 | 
						|
					$row[$keys[$n]] = $sample['values'][$n];
 | 
						|
				}
 | 
						|
 | 
						|
				$stats[] = $row;
 | 
						|
			}
 | 
						|
 | 
						|
			$total_mb = 0;
 | 
						|
			$total_requests = 0;
 | 
						|
			$chart_mb = array( array('Date', 'MB', 'Requests' ) );
 | 
						|
 | 
						|
			$dd = new \DateTime();
 | 
						|
 | 
						|
			foreach ($stats as $r) {
 | 
						|
				$total_mb += $r['xferUsedTotalMB'];
 | 
						|
				$total_requests += $r['requestsCountTotal'];
 | 
						|
				$d = $dd->setTimestamp( (int)$r['usageTime'] );
 | 
						|
				$chart_mb[] = array(
 | 
						|
					$d->format( 'M/d' ),
 | 
						|
					$r['xferUsedTotalMB'],
 | 
						|
					$r['requestsCountTotal']
 | 
						|
				);
 | 
						|
			}
 | 
						|
 | 
						|
			$response['summary_mb'] = sprintf( '%.2f MB', $total_mb );
 | 
						|
			$response['summary_requests'] = $total_requests;
 | 
						|
			$response['chart_mb'] = $chart_mb;
 | 
						|
 | 
						|
			$response['url_manage'] =
 | 
						|
				"https://control.stackpath.com/stacks/$stack_id/cdn/sites/$site_id/cache";
 | 
						|
			$response['url_reports'] =
 | 
						|
				"https://control.stackpath.com/stacks/$stack_id/cdn/sites/$site_id/overview";
 | 
						|
		} catch ( \Exception $ex ) {
 | 
						|
			$response['error'] = $ex->getMessage();
 | 
						|
		}
 | 
						|
 | 
						|
		echo json_encode( $response );
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	public function admin_print_styles() {
 | 
						|
		wp_enqueue_style( 'w3tc-widget' );
 | 
						|
		wp_enqueue_style( 'w3tc-stackpath-widget',
 | 
						|
			plugins_url( 'Cdn_StackPath2_Widget_View.css', W3TC_FILE ),
 | 
						|
			array(), W3TC_VERSION );
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	public function admin_print_scripts() {
 | 
						|
		wp_enqueue_style( 'w3tc-widget' );
 | 
						|
		wp_enqueue_script( 'google-jsapi', 'https://www.google.com/jsapi');
 | 
						|
		wp_enqueue_script( 'w3tc-stackpath-widget',
 | 
						|
			plugins_url( 'Cdn_StackPath2_Widget_View.js', W3TC_FILE ),
 | 
						|
			array( 'google-jsapi' ), W3TC_VERSION );
 | 
						|
		wp_enqueue_script( 'w3tc-metadata' );
 | 
						|
		wp_enqueue_script( 'w3tc-widget' );
 | 
						|
	}
 | 
						|
 | 
						|
}
 |