This repository has been archived on 2026-10-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2015-05-01 18:05:29 +02:00

254 lines
8.2 KiB
PHP

<?php
/**
* @package GoogleAnalytics\Admin
*/
/**
* Dashboards class.
*/
class Yoast_GA_Dashboards {
/**
* @var Yoast_GA_Dashboards_Collector $aggregator Store the data aggregator
*/
public $aggregator;
/**
* @var array $data Store the Data instance
*/
public $data;
/**
* @var array $active_metrics Store the active metrics
*/
public $active_metrics;
/**
* Store the valid metrics which are available in the Google API, more can be added
*
* @var array
*
* @link https://ga-dev-tools.appspot.com/explorer/
*/
private $valid_metrics = array( 'sessions', 'bounces', 'users', 'newUsers', 'percentNewSessions', 'bounceRate', 'sessionDuration', 'avgSessionDuration', 'hits' );
/**
* Store this instance
*
* @var null
*/
private static $instance = null;
/**
* @var boolean $dashboards_disabled Store the Dashboards disabled bool
*/
private $dashboards_disabled;
/**
* Construct on the dashboards class for GA
*/
protected function __construct() {
add_filter( 'ga_extend_dashboards', array( $this, 'extend_dashboards' ), 10, 1 );
$this->dashboards_disabled = Yoast_GA_Settings::get_instance()->dashboards_disabled();
}
/**
* Init the dashboards
*
* @param integer $ga_profile_id
*/
public function init_dashboards( $ga_profile_id ) {
if ( ! $this->dashboards_disabled ) {
$dashboards = $this->get_default_dashboards();
$this->extend_dashboards( $dashboards );
// Register the active metrics
$register = array_keys( $dashboards );
$this->aggregator = new Yoast_GA_Dashboards_Collector( $ga_profile_id, $register, $this->valid_metrics );
$this->register( $register );
}
}
/**
* Adding dashboards for front-end
*
* By hook as filter: $dashboards = apply_filters( 'ga_extend_dashboards', $dashboards);
*
* @param array $dashboards
*
* @return mixed
*/
public function extend_dashboards( $dashboards ) {
// Initialize the dashboard graphs
Yoast_GA_Dashboards_Display::get_instance()->add_dashboards( $dashboards );
return $dashboards;
}
/**
* Get the instance
*
* @return Yoast_GA_Dashboards
*/
public static function get_instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Register the dashboard types
*
* @param array|string $types
*
* @return bool
*/
public function register( $types ) {
if ( is_array( $types ) == false ) {
$types = array( $types );
}
if ( is_array( $types ) && count( $types ) >= 1 ) {
if ( $this->validate_dashboard_types( $types ) ) {
$this->active_metrics = $types;
return true;
}
}
return false;
}
/**
* Adding translations to ga-admin-dashboard
*/
public function add_dashboard_js_translations() {
// Now we can localize the script with our data.
$translation_array = array(
// For datatables
'sort_ascending' => __( ': activate to sort column ascending', 'google-analytics-for-wordpress' ),
'sort_descending' => __( ': activate to sort column descending', 'google-analytics-for-wordpress' ),
'empty_table' => __( 'No data available', 'google-analytics-for-wordpress' ),
'info' => _x( 'Showing _START_ to _END_ of _TOTAL_ rows', '_START_, _END_ and _TOTAL_ will be replaced by JS (See: http://datatables.net/reference/option/language.info)', 'google-analytics-for-wordpress' ),
'info_empty' => __( 'No rows to show', 'google-analytics-for-wordpress' ),
'info_filtered' => _x( '(filtered from _MAX_ total rows)', '_MAX_ will be replaced by JS (See: http://datatables.net/reference/option/language.infoFiltered)', 'google-analytics-for-wordpress' ),
'length_menu' => _x( 'Show _MENU_ rows', '_MAX_ will be replaced by JS', 'google-analytics-for-wordpress' ),
'loading_records' => __( 'Loading...', 'google-analytics-for-wordpress' ),
'pagination_first' => __( 'First', 'google-analytics-for-wordpress' ),
'pagination_last' => __( 'Last', 'google-analytics-for-wordpress' ),
'pagination_next' => __( 'Next', 'google-analytics-for-wordpress' ),
'pagination_previous' => __( 'Previous', 'google-analytics-for-wordpress' ),
'processing' => __( 'Processing...', 'google-analytics-for-wordpress' ),
'search_placeholder' => __( 'Search', 'google-analytics-for-wordpress' ),
'zero_records' => __( 'No matching records found', 'google-analytics-for-wordpress' ),
// For dimensions
'dimensions' => __( 'Reports', 'google-analytics-for-wordpress' ),
'custom_dimensions' => __( 'Custom dimension reports', 'google-analytics-for-wordpress' ),
);
wp_localize_script( 'ga-admin-dashboard', 'dashboard_translate', $translation_array );
}
/**
* Reset all dashboards data by removing the options of the registered dashboards
*
* @return bool
*/
public function reset_dashboards_data() {
if ( ! $this->dashboards_disabled ) {
$dashboards = $this->get_default_dashboards();
if ( is_array( $dashboards ) && count( $dashboards ) >= 1 ) {
foreach ( $dashboards as $name => $board ) {
Yoast_GA_Dashboards_Data::reset( $name );
}
// Make sure we fetch new data if we enable the dashboards by updating the last_run option
update_option( 'yst_ga_last_wp_run', date( 'Y-m-d', strtotime( '-2 days' ) ) );
return true;
}
}
return false;
}
/**
* Get the defaults dashboard array to register
*
* @return array
*/
private function get_default_dashboards() {
return array(
'sessions' => array(
'title' => __( 'Sessions', 'google-analytics-for-wordpress' ),
'help' => __( 'A session is a group of interactions that take place on your website within a given time frame. For example a single session can contain multiple screen or page views, events, social interactions, and ecommerce transactions. <a href="http://yoa.st/gasessions" target="_blank">[Learn more]</a>', 'google-analytics-for-wordpress' ),
'type' => 'graph',
'tab' => 'general',
),
'bounceRate' => array(
'title' => __( 'Bounce rate', 'google-analytics-for-wordpress' ),
'help' => __( 'Bounce Rate is the percentage of single-page sessions (i.e. sessions in which the person left your site from the entrance page without interacting with the page). <a href="http://yoa.st/gabounce" target="_blank">[Learn more]</a>', 'google-analytics-for-wordpress' ),
'data-percent' => true,
'type' => 'graph',
'tab' => 'general',
),
'source' => array(
'title' => __( 'Traffic sources', 'google-analytics-for-wordpress' ),
'help' => __( 'Every referral to a web site has an origin, or (traffic) source. Possible sources include: “google” (the name of a search engine), “facebook.com” (the name of a referring site), “spring_newsletter” (the name of one of your newsletters), and “direct” (users that typed your URL directly into their browser, or who had bookmarked your site). <a href="http://yoa.st/gabnce" target="_blank">[Learn more]</a>', 'google-analytics-for-wordpress' ),
'type' => 'table',
'columns' => array(
__( 'Sessions', 'google-analytics-for-wordpress' )
),
'tab' => 'dimensions',
),
'top_pageviews' => array(
'title' => __( 'Popular pages', 'google-analytics-for-wordpress' ),
'help' => __( 'Pages by url.', 'google-analytics-for-wordpress' ),
'type' => 'table',
'columns' => array(
__( 'Sessions', 'google-analytics-for-wordpress' )
),
'tab' => 'dimensions',
),
'top_countries' => array(
'title' => __( 'Countries', 'google-analytics-for-wordpress' ),
'help' => __( 'The country or territory from which visits originated. <a href="http://yoa.st/gacountry" target="_blank">[Learn more]</a>', 'google-analytics-for-wordpress' ),
'type' => 'table',
'columns' => array(
__( 'Sessions', 'google-analytics-for-wordpress' )
),
'tab' => 'dimensions',
),
);
}
/**
* Validate the registered types of dashboards
*
* @param array $types
*
* @return bool
*/
private function validate_dashboard_types( $types ) {
$valid = true;
if ( is_array( $types ) ) {
foreach ( $types as $check_type ) {
if ( ! in_array( $check_type, $this->valid_metrics ) ) {
$valid = false;
}
}
}
return $valid;
}
}