$modx->getCacheManager();
$analytics = $modx->cacheManager->get($days . '-analytics');
if (empty($analytics)) {
    //Retrieve all the data as xml
    $toplandingspagesxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3ApagePath&metrics=ga%3Aentrances%2Cga%3Abounces%2Cga%3AentranceBounceRate%2Cga%3Aexits&sort=-ga:entrances');
    $topexitpagesxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3ApagePath&metrics=ga%3Aexits%2Cga%3Apageviews%2Cga%3AexitRate&sort=-ga:exits');
    $keywordsxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3Akeyword&metrics=ga%3Avisits%2Cga%3ApageviewsPerVisit%2Cga%3AavgTimeOnSite%2Cga%3ApercentNewVisits%2Cga%3AvisitBounceRate&sort=-ga:visits');
    $sitesearchxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3AsearchKeyword&metrics=ga%3AsearchUniques%2Cga%3AsearchResultViews%2Cga%3AsearchExitRate%2Cga%3AsearchDuration%2Cga%3AsearchDepth&sort=-ga:searchUniques');
    $trafficsourcesxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3Asource&metrics=ga%3Avisits%2Cga%3Avisitors%2Cga%3ApageviewsPerVisit%2Cga%3AavgTimeOnSite%2Cga%3ApercentNewVisits%2Cga%3AvisitBounceRate&sort=-ga:visits');
    $generalxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3Ayear&metrics=ga%3Avisits%2Cga%3Avisitors%2Cga%3Apageviews%2Cga%3ApageviewsPerVisit%2Cga%3AavgTimeOnSite%2Cga%3ApercentNewVisits%2Cga%3AvisitBounceRate&sort=-ga:visits');
    $visitscharxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3Adate&metrics=ga%3Avisits%2Cga%3Avisitors%2Cga%3Apageviews%2Cga%3ApageviewsPerVisit%2Cga%3AavgTimeOnSite%2Cga%3ApercentNewVisits%2Cga%3AvisitBounceRate&sort=ga:date');
    $devicescharxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3AoperatingSystem&metrics=ga%3Avisits&sort=ga:visits');
    $mobilecharxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/data?ids=' . $settings['profileId'] . '&start-date=' . $settings['start_date'] . '&end-date=' . $settings['end_date'] . '&dimensions=ga%3AisMobile&metrics=ga%3Avisits&sort=ga:visits');
    $goalnamesxml = $ga->callApi($settings['sessionToken'], 'https://www.google.com/analytics/feeds/datasources/ga/accounts/' . $settings['accountId'] . '/webproperties/' . $settings['webPropertyId'] . '/profiles/~all/goals');
    //xml data to array
    $toplandingspages = $ga->parseData($toplandingspagesxml);
    $topexitpages = $ga->parseData($topexitpagesxml);
    $keywords = $ga->parseData($keywordsxml);
    $sitesearch = $ga->parseData($sitesearchxml);
    $trafficsourceschar = $ga->parseData($trafficsourcesxml);
    $general = $ga->parseData($generalxml);
    $visits = $ga->parseData($visitscharxml);
    $goalnames = $ga->parseDataGoals($goalnamesxml);
    $deviceschar = $ga->parseData($devicescharxml);
    $mobilechar = $ga->parseData($mobilecharxml);
    //generate the goals api call
    foreach ($goalnames as $goalname) {
        $goalMetrics .= 'ga%3Agoal' . $goalname['id'] . 'Completions%2C';
    }
    $goalMetrics .= 'ga%3AgoalCompletionsAll';
    //retrieve goals as xml