You are here

public function GoogleAnalyticsCounterFeed::queryReportFeed in Google Analytics Counter 8.3

Query and sanitize report data.

Parameters

array $params: Array of parameters.

array $cache_options: Array of cache options.

Return value

$this

Throws

\GuzzleHttp\Exception\GuzzleException

File

src/GoogleAnalyticsCounterFeed.php, line 541

Class

GoogleAnalyticsCounterFeed
Authorize access and request data from Google Analytics Core Reporting API.

Namespace

Drupal\google_analytics_counter

Code

public function queryReportFeed($params = [], $cache_options = []) {

  // Provide defaults if the developer did not override them.
  $params += [
    'profile_id' => 0,
    'dimensions' => NULL,
    'metrics' => 'ga:visits',
    'sort_metric' => NULL,
    'filters' => NULL,
    'segment' => NULL,
    'start_date' => NULL,
    'end_date' => NULL,
    'start_index' => 1,
    'max_results' => 10000,
  ];
  $parameters = [
    'ids' => $params['profile_id'],
  ];
  if (is_array($params['dimensions'])) {
    $parameters['dimensions'] = implode(',', $params['dimensions']);
  }
  elseif ($params['dimensions'] !== NULL) {
    $parameters['dimensions'] = $params['dimensions'];
  }
  if (is_array($params['metrics'])) {
    $parameters['metrics'] = implode(',', $params['metrics']);
  }
  else {
    $parameters['metrics'] = $params['metrics'];
  }
  if ($params['sort_metric'] == NULL && isset($parameters['metrics'])) {
    $parameters['sort'] = $parameters['metrics'];
  }
  elseif (is_array($params['sort_metric'])) {
    $parameters['sort'] = implode(',', $params['sort_metric']);
  }
  else {
    $parameters['sort'] = $params['sort_metric'];
  }
  $start_date = '';
  if (empty($params['start_date']) || !is_int($params['start_date'])) {
    $start_date = date('Y-m-d');
  }
  elseif (is_int($params['start_date'])) {

    // Assume a Unix timestamp.
    $start_date = date('Y-m-d', $params['start_date']);
  }
  $parameters['start-date'] = $start_date;
  $end_date = '';
  if (empty($params['end_date']) || !is_int($params['end_date'])) {
    $end_date = date('Y-m-d');
  }
  elseif (is_int($params['end_date'])) {

    // Assume a Unix timestamp.
    $end_date = date('Y-m-d', $params['end_date']);
  }
  $parameters['end-date'] = $end_date;

  // Accept only strings, not arrays, for the following parameters.
  if (!empty($params['filters'])) {
    $parameters['filters'] = $params['filters'];
  }
  if (!empty($params['segment'])) {
    $parameters['segment'] = $params['segment'];
  }
  $parameters['start-index'] = $params['start_index'];
  $parameters['max-results'] = $params['max_results'];

  // DEBUG:
  // drush_print_r($parameters);
  $this
    ->setQueryPath('data/ga');
  if ($this
    ->query($this->queryPath, $parameters, 'GET', $this
    ->generateAuthHeader(), $cache_options)) {
    $this
      ->sanitizeReport();
  }
  return $this;
}