You are here

public static function GoogleAnalyticsReports::importFields in Google Analytics Reports 8.3

Import Google Analytics fields to database using Metadata API.

See also

https://developers.google.com/analytics/devguides/reporting/metadata/v3/

1 call to GoogleAnalyticsReports::importFields()
google_analytics_reports_install in ./google_analytics_reports.install
Implements hook_install().

File

src/GoogleAnalyticsReports.php, line 63

Class

GoogleAnalyticsReports
GoogleAnalyticsReports service class.

Namespace

Drupal\google_analytics_reports

Code

public static function importFields() {
  if (!defined('MAINTENANCE_MODE')) {
    try {
      $response = \Drupal::httpClient()
        ->request('GET', self::$googleAnalyticsColumnsDefinitionUrl, [
        'timeout' => 2.0,
      ]);
    } catch (RequestException $e) {
      \Drupal::logger('google_analytics_reports')
        ->error('Failed to Google Analytics Column metadata definitions due to "%error".', [
        '%error' => $e
          ->getMessage(),
      ]);
      return;
    }
    if ($response
      ->getStatusCode() == 200) {
      $data = $response
        ->getBody()
        ->getContents();
      if (empty($data)) {
        \Drupal::logger('google_analytics_reports')
          ->error('Failed to Google Analytics Column metadata definitions. Received empty content.');
        return;
      }
      $data = json_decode($data, TRUE);

      // Remove old fields.
      if (\Drupal::database()
        ->schema()
        ->tableExists('google_analytics_reports_fields')) {
        \Drupal::database()
          ->truncate('google_analytics_reports_fields')
          ->execute();
      }
      $google_analytics_reports_settings = \Drupal::config('google_analytics_reports.settings')
        ->get();

      // Save current time as last executed time.
      $google_analytics_reports_settings['metadata_last_time'] = \Drupal::time()
        ->getRequestTime();

      // Save etag identifier. It is used to check updates for the fields.
      // @see https://developers.google.com/analytics/devguides/reporting/metadata/v3/devguide#etag
      if (!empty($data['etag'])) {
        $google_analytics_reports_settings['metadata_etag'] = $data['etag'];
      }
      \Drupal::configFactory()
        ->getEditable('google_analytics_reports.settings')
        ->setData($google_analytics_reports_settings)
        ->save();
      if (!empty($data['items'])) {
        $operations = [];
        foreach ($data['items'] as $item) {

          // Do not import deprecated fields.
          if ($item['attributes']['status'] == 'PUBLIC') {
            $operations[] = [
              [
                GoogleAnalyticsReports::class,
                'saveFields',
              ],
              [
                $item,
              ],
            ];
          }
        }
        $batch = [
          'operations' => $operations,
          'title' => t('Importing Google Analytics fields'),
          'finished' => [
            GoogleAnalyticsReports::class,
            'importFieldsFinished',
          ],
        ];
        batch_set($batch);
      }
    }
    else {
      \Drupal::messenger()
        ->addMessage(t('There is a error during request to Google Analytics Metadata API: @error', [
        '@error' => $response
          ->getStatusCode(),
      ]), 'error');
    }
  }
}