Exemplo n.º 1
0
 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;
 }