function update_stats($site_id = 0, &$access_token = '', $stat_refresh = false, $end_date = 0) { $result = array(); if (!empty($site_id)) { $CI =& get_instance(); $CI->load->model('model_google_accounts'); $CI->load->model('model_google_sites'); $CI->load->model('model_google_site_stats'); $site = $this->get_records(array('site_id' => $site_id)); // Check if this site is tied to a google site - only update if it is... if (!empty($site[0]['google_site_id'])) { $google_site_id = $site[0]['google_site_id']; // If we've request a stat refresh, then get the earliest stat date for the site if ($stat_refresh) { $filters = array(); $filters['select'] = 'min(stat_date) as stat_date'; $filters['client_id'] = $site[0]['client_id']; $filters['google_site_id'] = $google_site_id; $google_site_stats = $CI->model_google_site_stats->get_records($filters); if (!empty($google_site_stats)) { $start_date = date('Y-m-d', $google_site_stats[0]['stat_date']); } else { $start_date = date('Y-m-d', strtotime(get_app_var('NEW_SITE_STAT_INTERVAL'), mktime())); } } else { // See if there's some stats already - if so, then set the start date accordingly $google_site_stats = $CI->model_google_site_stats->get_records(array('client_id' => $site[0]['client_id'], 'google_site_id' => $google_site_id, 'limit' => '1')); if (empty($google_site_stats)) { $start_date = date('Y-m-d', strtotime(get_app_var('NEW_SITE_STAT_INTERVAL'), mktime())); } else { $start_date = date('Y-m-d', strtotime(get_app_var('EXISTING_SITE_STAT_INTERVAL'), mktime())); } } // No end date supplied, so everything up to today if (empty($end_date)) { $end_date = date('Y-m-d'); } else { $end_date = date('Y-m-d', $end_date); } $google_site = $CI->model_google_sites->get_records(array('google_site_id' => $google_site_id)); $google_account = $CI->model_google_accounts->get_records(array('google_account_id' => $google_site[0]['google_account_id'])); // Break the stats down by date $dimensions = array('date'); // Can only get at most 10 metrics at a time, so we need to do this in 2 passes $metric_sets = array(array('visits' => 'ga:visits', 'new_visits' => 'ga:newVisits', 'time_on_site' => 'ga:timeOnSite', 'time_on_page' => 'ga:timeOnPage', 'visitors' => 'ga:visitors', 'page_views' => 'ga:pageviews', 'bounces' => 'ga:bounces'), array('average_page_load_time' => 'ga:avgPageLoadTime', 'average_domain_lookup_time' => 'ga:avgDomainLookupTime', 'average_page_download_time' => 'ga:avgPageDownloadTime', 'average_redirection_time' => 'ga:avgRedirectionTime', 'average_server_connection_time' => 'ga:avgServerConnectionTime', 'average_server_response_time' => 'ga:avgServerResponseTime')); foreach ($metric_sets as $metric_set) { $metrics = array(); foreach ($metric_set as $field => $stat_name) { $metrics[] = $stat_name; } $sort = array('date'); $parameters = array(); $parameters[] = 'ids=ga:' . $google_site[0]['profile_id']; $parameters[] = 'start-date=' . $start_date; $parameters[] = 'end-date=' . $end_date; $parameters[] = 'dimensions=ga:date'; $parameters[] = 'metrics=' . implode(',', $metrics); $parameters[] = 'sort=ga:date'; $stats = get_google_data('https://www.googleapis.com/analytics/v3/data/ga', '', $access_token, $parameters); if (!empty($stats) && isset($stats['rows'])) { foreach ($stats['rows'] as $stat_result) { $stat_date = $stat_result[0]; $year = substr($stat_date, 0, 4); $month = substr($stat_date, 4, 2); $day = substr($stat_date, 6, 2); $stat_date = mktime(0, 0, 0, $month, $day, $year); $google_site_stat = $CI->model_google_site_stats->get_records(array('google_site_id' => $google_site_id, 'stat_date' => $stat_date)); $google_site_stat_data = array(); if (empty($google_site_stat)) { $google_site_stat_data['google_site_id'] = $google_site_id; $google_site_stat_data['client_id'] = $google_account[0]['client_id']; $google_site_stat_data['stat_date'] = $stat_date; } else { $google_site_stat_data['google_site_id'] = $google_site_id; $google_site_stat_data['google_site_stat_id'] = $google_site_stat[0]['google_site_stat_id']; } $fields = array_keys($metric_set); for ($i = 0; $i < sizeof($fields); $i++) { $google_site_stat_data[$fields[$i]] = $stat_result[$i + 1]; } $result[] = $CI->model_google_site_stats->save($google_site_stat_data); } } } $this->save(array('site_id' => $site_id, 'site_updated_date' => mktime())); } } return $result; }
function update_account_data($google_account_id = 0, &$access_token = '') { $result = array(); if (!empty($google_account_id)) { $CI =& get_instance(); $CI->load->model('model_google_sites'); $google_account = $this->get_records(array('google_account_id' => $google_account_id)); $refresh_token = is_live() ? $google_account[0]['refresh_token'] : $google_account[0]['dev_refresh_token']; $accounts = get_google_data('https://www.googleapis.com/analytics/v3/management/accounts', $refresh_token, $access_token); if (!empty($accounts)) { foreach ($accounts as $account) { if (isset($account['childLink']['href'])) { $properties = get_google_data($account['childLink']['href'], $refresh_token, $access_token); if (!empty($properties)) { foreach ($properties as $property) { if (isset($property['childLink']['href'])) { $profiles = get_google_data($property['childLink']['href'], $refresh_token, $access_token); if (!empty($profiles)) { foreach ($profiles as $profile) { $google_site = $CI->model_google_sites->get_records(array('client_id' => $google_account[0]['client_id'], 'profile_id' => $profile['id'])); $google_site_data = array(); if (empty($google_site)) { $google_site_data['client_id'] = $google_account[0]['client_id']; $google_site_data['google_account_id'] = $google_account_id; } else { $google_site_data['google_site_id'] = $google_site[0]['google_site_id']; } $google_site_data['account_id'] = $account['id']; $google_site_data['account_name'] = $account['name']; $google_site_data['web_property_id'] = $property['id']; $google_site_data['web_property_name'] = $property['name']; $google_site_data['website_url'] = $property['websiteUrl']; $google_site_data['profile_id'] = $profile['id']; $google_site_data['profile_name'] = $profile['name']; $google_site_data['currency'] = $profile['currency']; $google_site_data['timezone'] = $profile['timezone']; $google_site_data['last_updated_date'] = strtotime($profile['updated']); $google_site_data['disconnected_flag'] = '0'; $result[] = $CI->model_google_sites->save($google_site_data); } } } } } } } $this->save(array('google_account_id' => $google_account_id, 'last_checked_date' => mktime())); } } return $result; }