You are here

google_analytics_reports.pages.inc in Google Analytics Reports 6

Same filename and directory in other branches
  1. 7 google_analytics_reports/google_analytics_reports.pages.inc

Page callbacks for google analytics.

File

google_analytics_reports/google_analytics_reports.pages.inc
View source
<?php

/**
 * @file
 * Page callbacks for google analytics.
 */

/**
 * Page callback for admin/reports/google-analytics.
 *
 * @return An HTML summary of the site-wide statistics.
 */
function google_analytics_reports_summary_page() {
  if (!variable_get('google_analytics_reports_oauth_token', FALSE)) {
    drupal_set_message(t('You must <a href="!url">authorize</a> Drupal to use your Analytics account before you can view reports.', array(
      '!url' => url('admin/settings/google-analytics-reports'),
    )), 'warning');
    return ' ';
  }
  $summary = array(
    'visit_chart' => _google_analytics_reports_visits(),
    'usage' => _google_analytics_reports_usage(),
    'pages' => _google_analytics_reports_top_pages(),
    'referrals' => _google_analytics_reports_top_referrals(),
    'keywords' => _google_analytics_reports_top_keywords(),
  );
  if (in_array(FALSE, $summary, TRUE)) {
    $menu_item = menu_get_item();
    if ($menu_item['href'] == 'admin/reports/google-analytics') {
      drupal_set_message(_google_analytics_reports_error_message(), 'error');
      return ' ';
    }
    else {
    }
    return '<p>' . _google_analytics_reports_error_message() . '</p>';
  }
  return theme('google_analytics_reports_summary', $summary);
}

/**
 * Page callback for admin/reports/google-analytics/detail.
 */
function google_analytics_reports_detail_page() {
  $path = isset($_GET['path']) ? $_GET['path'] : '/index.html';
  drupal_set_title(t('Content detail: @path', array(
    '@path' => $path,
  )));
  $report = array(
    'pageviews_chart' => _google_analytics_reports_pageviews($path),
    'stats' => _google_analytics_reports_detail_stats($path),
    'referrals' => _google_analytics_reports_top_referrals($path),
    'keywords' => _google_analytics_reports_top_keywords($path),
  );
  if (in_array(FALSE, $report, TRUE)) {
    drupal_set_message(_google_analytics_reports_error_message(), 'error');
    return ' ';
  }
  return theme('google_analytics_reports_detail', $report);
}

/**
 * Renders an img element with a chart of the number of visits over the past 30 days.
 */
function _google_analytics_reports_visits() {
  $params = array(
    'metrics' => array(
      'ga:visits',
    ),
    'dimensions' => array(
      'ga:date',
    ),
    'sort_metric' => array(
      'ga:date',
    ),
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
  );
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  $max_visits = 0;
  foreach ($feed->results as $row) {
    $data[] = $row['visits'];
    $max_visits = max($row['visits'], $max_visits);
  }
  $chart = array(
    '#chart_id' => 'visits_large_30d',
    '#data' => $data,
    '#type' => CHART_TYPE_LINE . ':nda',
    '#size' => chart_size(1000, 80),
    '#adjust_resolution' => TRUE,
    '#data_colors' => array(
      'AAAAAA',
    ),
    '#chart_fill' => chart_fill('bg', '00000000'),
    '#shape_markers' => array(
      chart_shape_marker(0, 0, 'B', 0, $color = 'EEEEEE'),
    ),
    '#line_styles' => array(
      chart_line_style(2, 10, 0),
    ),
  );
  $last_day = end($feed->results);
  $title = t('The most visits on a single day was @max.  Yesterday there were @yesterday visits.', array(
    '@max' => $max_visits,
    '@yesterday' => $last_day['visits'],
  ));
  $output = chart_render($chart, array(
    'title' => $title,
    'style' => 'height:' . $chart['#size']['#height'] . 'px; width:100%',
  ));
  return $output;
}

/**
 * Renders an img element with a chart of the number of pageviews over the past 30 days.
 */
function _google_analytics_reports_pageviews($path) {
  $params = array(
    'metrics' => array(
      'ga:pageviews',
    ),
    'dimensions' => array(
      'ga:date',
    ),
    'sort_metric' => array(
      'ga:date',
    ),
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
    'filters' => _google_analytics_reports_path_filter($path),
  );
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  $max_views = 0;
  foreach ($feed->results as $row) {
    $data[] = $row['pageviews'];
    $max_views = max($row['pageviews'], $max_views);
  }
  $chart = array(
    '#chart_id' => 'visits_large_30d',
    '#data' => $data,
    '#type' => CHART_TYPE_LINE . ':nda',
    '#size' => chart_size(1000, 80),
    '#adjust_resolution' => TRUE,
    '#data_colors' => array(
      'AAAAAA',
    ),
    '#chart_fill' => chart_fill('bg', '00000000'),
    '#shape_markers' => array(
      chart_shape_marker(0, 0, 'B', 0, $color = 'EEEEEE'),
    ),
    '#line_styles' => array(
      chart_line_style(2, 10, 0),
    ),
  );
  $last_day = end($feed->results);
  $title = t('The most views on a single day was @max.  Yesterday there were @yesterday views.', array(
    '@max' => $max_views,
    '@yesterday' => $last_day['pageviews'],
  ));
  $output = chart_render($chart, array(
    'title' => $title,
    'style' => 'height:' . $chart['#size']['#height'] . 'px; width:100%',
  ));
  return $output;
}

/**
 * Retrieves usage data.
 */
function _google_analytics_reports_usage() {

  // Site usage
  $params = array(
    'metrics' => array(
      'ga:visits',
      'ga:bounces',
      'ga:entrances',
      'ga:pageviews',
      'ga:timeOnSite',
      'ga:newVisits',
    ),
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
  );
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  return $feed->totals;
}

/**
 * Retrieves content detail stats.
 */
function _google_analytics_reports_detail_stats($path) {

  // Site usage
  $params = array(
    'metrics' => array(
      'ga:pageviews',
      'ga:uniquePageviews',
      'ga:avgTimeOnPage',
      'ga:entranceBounceRate',
      'ga:exitRate',
      'ga:goalValueAll',
    ),
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
    'filters' => _google_analytics_reports_path_filter($path),
  );
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  return $feed->totals;
}

/**
 * Retrieves top pages.
 */
function _google_analytics_reports_top_pages() {
  $params = array(
    'metrics' => array(
      'ga:pageviews',
    ),
    'dimensions' => array(
      'ga:pageTitle',
      'ga:hostname',
      'ga:pagePath',
    ),
    'sort_metric' => array(
      '-ga:pageviews',
    ),
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
    'sort' => '-ga:pageviews',
    'max_results' => 10,
  );
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  return $feed->results;
}

/**
 * Retrieves top referrals.
 */
function _google_analytics_reports_top_referrals($path = '') {
  $params = array(
    'metrics' => array(
      'ga:visits',
    ),
    'dimensions' => array(
      'ga:source',
      'ga:medium',
    ),
    'sort_metric' => array(
      '-ga:visits',
    ),
    'filters' => 'ga:medium==referral',
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
    'max_results' => 10,
  );
  if ($path) {
    $params['filters'] .= ';' . _google_analytics_reports_path_filter($path);
  }
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  return $feed->results;
}

/**
 * Retrieves top keywords.
 */
function _google_analytics_reports_top_keywords($path = '') {
  $params = array(
    'metrics' => array(
      'ga:visits',
    ),
    'dimensions' => array(
      'ga:keyword',
    ),
    'sort_metric' => array(
      '-ga:visits',
    ),
    'start_date' => strtotime('-31 days'),
    'end_date' => strtotime('-1 day'),
    'filters' => 'ga:keyword!=(not set)',
    'max_results' => 10,
  );
  if ($path) {
    $params['filters'] .= ';' . _google_analytics_reports_path_filter($path);
  }
  $feed = google_analytics_api_report_data($params);
  if ($feed->error) {
    return FALSE;
  }
  return $feed->results;
}

Functions

Namesort descending Description
google_analytics_reports_detail_page Page callback for admin/reports/google-analytics/detail.
google_analytics_reports_summary_page Page callback for admin/reports/google-analytics.
_google_analytics_reports_detail_stats Retrieves content detail stats.
_google_analytics_reports_pageviews Renders an img element with a chart of the number of pageviews over the past 30 days.
_google_analytics_reports_top_keywords Retrieves top keywords.
_google_analytics_reports_top_pages Retrieves top pages.
_google_analytics_reports_top_referrals Retrieves top referrals.
_google_analytics_reports_usage Retrieves usage data.
_google_analytics_reports_visits Renders an img element with a chart of the number of visits over the past 30 days.