function a360_request_handler() { if (!empty($_GET['a360_action']) && current_user_can('manage_options')) { switch ($_GET['a360_action']) { case 'admin_js': a360_admin_js(); break; case 'admin_css_ie': header('Content-type: text/css'); require 'css/a360-ie.css'; die; break; case 'admin_css': header('Content-type: text/css'); require 'css/datePicker.css'; require 'css/a360.css'; die; break; case 'capture_ga_token': $args = array(); parse_str($_SERVER['QUERY_STRING'], $args); $token = NULL; if (isset($args['token'])) { $wp_http = a360_get_wp_http(); $request_args = array('method' => 'GET', 'headers' => a360_get_authsub_headers($args['token']), 'sslverify' => false); $response = $wp_http->request('https://www.google.com/accounts/AuthSubSessionToken', $request_args); $error_messages = array(); if (is_wp_error($response)) { // couldn't connect $error_messages = $response->get_error_messages(); } else { if (is_array($response)) { $matches = array(); $found = preg_match('/Token=(.*)/', $response['body'], $matches); if ($found) { $token = $matches[1]; $result = update_option('a360_ga_token', $token); } else { // connected, but no token in response. $error_messages = array($repsonse['body']); } } } } if (!$token) { if (count($error_messages)) { $capture_errors .= implode("\n", $error_messages); } else { $capture_errors = 'unknown error'; } $q = build_query(array('a360_ga_token_capture_errors' => $capture_errors), '', '&'); } else { delete_option('a360_ga_profile_id'); $q = build_query(array('updated' => true), '', '&'); } wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&' . $q)); break; case 'get_wp_posts': $start = preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $_GET['start_date']) ? $_GET['start_date'] : '0000-00-00'; $end = preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $_GET['end_date']) ? $_GET['end_date'] : '0000-00-00'; add_filter('posts_where', create_function('$where', 'return $where." AND post_date >= \'' . $start . '\' AND post_date < \'' . $end . '\'";')); $results = query_posts('post_status=publish&posts_per_page=999'); header('Content-type: text/javascript'); die(cf_json_encode(array('success' => true, 'data' => $results, 'cached' => false))); break; case 'get_mc_data': global $a360_api_key; $api = a360_get_mcapi($a360_api_key); switch ($_GET['data_type']) { case 'campaigns': $results = $api->campaigns(array('sendtime_start' => $_GET['start_date'], 'end_start' => $_GET['end_date'])); if ($results) { die(cf_json_encode(array('success' => true, 'data' => $results['data'], 'cached' => false))); } else { if (empty($api->errorCode)) { die(cf_json_encode(array('success' => true, 'data' => $results, 'cached' => false))); } else { die(cf_json_encode(array('success' => false, 'error' => $api->errorMessage))); } } break; case 'list_growth': $results = $api->listGrowthHistory($_GET['list_id']); if ($results) { die(cf_json_encode(array('success' => true, 'data' => $results, 'cached' => false))); } else { die(cf_json_encode(array('success' => false, 'error' => $api->errorMessage))); } break; } break; case 'get_ga_data': global $a360_ga_token, $a360_ga_profile_id; $parameters = array('start-date' => $_GET['start_date'], 'end-date' => $_GET['end_date'], 'sort' => 'ga:date', 'ids' => 'ga:' . $a360_ga_profile_id); // split up top referrals by filtering on each medium in turn if ($_GET['data_type'] == 'top_referrals') { $requests = array('referral' => null, 'organic' => null, 'email' => null, 'cpc' => null, '*' => null); $parameters['dimensions'] = 'ga:medium,ga:source'; $parameters['metrics'] = 'ga:visits,ga:timeOnSite,ga:pageviews'; $parameters['sort'] = '-ga:visits'; $all_results = array(); foreach ($requests as $filter => $request) { $p = $filter == '*' ? array('max-results' => 200) : array('filters' => 'ga:medium==' . $filter, 'max-results' => 200); $requests[$filter] = $request = a360_get_wp_http(); $all_results[$filter] = $request->request('https://www.googleapis.com/analytics/v2.4/data?' . build_query(array_merge($parameters, $p), '', '&'), array('headers' => a360_get_authsub_headers(), 'timeout' => 10, 'sslverify' => false)); } foreach ($all_results as $filter => $results) { if (is_wp_error($results)) { header('Content-type: text/javascript'); die(cf_json_encode(array('success' => false, 'error' => implode('<br/>', $results->get_error_messages())))); } if (substr($results['response']['code'], 0, 1) == '2') { $all_results[$filter] = a360_reportObjectMapper($results['body']); } else { header('Content-type: text/javascript'); die(cf_json_encode(array('success' => false, 'error' => $results['body']))); } } header('Content-type: text/javascript'); die(cf_json_encode(array('success' => true, 'data' => $all_results, 'cached' => false))); } else { switch ($_GET['data_type']) { case 'visits': $parameters['dimensions'] = 'ga:date,ga:medium'; $parameters['metrics'] = 'ga:visits,ga:bounces,ga:entrances,ga:pageviews,ga:newVisits,ga:timeOnSite'; //$parameters['filters'] = 'ga:medium==referral,ga:medium==organic,ga:medium==email,ga:medium==cpc'; //$parameters['sort'] = '-ga:visits'; break; case 'geo': $parameters['dimensions'] = 'ga:country'; $parameters['metrics'] = 'ga:visits'; $parameters['sort'] = '-ga:visits'; break; case 'top_referrals': $parameters['dimensions'] = 'ga:medium,ga:source'; $parameters['metrics'] = 'ga:visits,ga:timeOnSite,ga:pageviews'; $parameters['sort'] = '-ga:visits'; $parameters['filters'] = 'ga:medium==referral,ga:medium==organic,ga:medium==email,ga:medium==cpc'; break; case 'referral_media': $parameters['dimensions'] = 'ga:medium'; $parameters['metrics'] = 'ga:visits'; $parameters['sort'] = '-ga:visits'; break; case 'top_content': $parameters['dimensions'] = 'ga:pagePath'; $parameters['metrics'] = 'ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:exits'; $parameters['sort'] = '-ga:pageviews'; break; case 'keywords': $parameters['dimensions'] = 'ga:keyword'; $parameters['metrics'] = 'ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:exits'; $parameters['sort'] = '-ga:pageviews'; $parameters['filters'] = 'ga:source==' . $_GET['source_name']; break; case 'referral_paths': $parameters['dimensions'] = 'ga:source,ga:referralPath'; $parameters['metrics'] = 'ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:exits'; $parameters['sort'] = '-ga:pageviews'; $parameters['filters'] = 'ga:source==' . $_GET['source_name']; break; case 'email_referrals': $parameters['dimensions'] = 'ga:campaign'; $parameters['metrics'] = 'ga:pageviews,ga:uniquePageviews,ga:timeOnPage,ga:exits'; $parameters['sort'] = '-ga:pageviews'; $parameters['filters'] = 'ga:medium==email'; break; default: break; } $wp_http = a360_get_wp_http(); $url = 'https://www.google.com/analytics/feeds/data?' . build_query($parameters, '', '&'); $request_args = array('headers' => a360_get_authsub_headers(), 'timeout' => 10, 'sslverify' => false); $result = $wp_http->request($url, $request_args); } if (is_wp_error($result)) { header('Content-type: text/javascript'); die(cf_json_encode(array('success' => false, 'error' => implode('<br/>', $result->get_error_messages())))); } if (substr($result['response']['code'], 0, 1) == '2') { $result = a360_reportObjectMapper($result['body']); header('Content-type: text/javascript'); die(cf_json_encode(array('success' => true, 'data' => $result, 'cached' => false))); } else { header('Content-type: text/javascript'); die(cf_json_encode(array('success' => false, 'error' => $result['body']))); } break; } } if (!empty($_POST['a360_action']) && current_user_can('manage_options')) { a360_check_nonce($_POST['a360_nonce'], $_POST['a360_action']); switch ($_POST['a360_action']) { case 'update_mc_api_key': if (!empty($_POST['a360_api_key']) && isset($_POST['a360_api_key'])) { $key_result = a360_validate_API_key($_POST['a360_api_key']); } if (!empty($key_result)) { if ($key_result['success']) { delete_option('a360_chimp_chatter_url'); update_option('a360_api_key', $key_result['api_key']); $q = build_query(array('updated' => 'true'), '', '&'); } else { $q = build_query(array('a360_mc_auth_error' => $key_result['error']), '', '&'); } } wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&' . $q)); die; break; case 'clear_mc_api_key': delete_option('a360_api_key'); delete_option('a360_chimp_chatter_url'); wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&' . build_query(array('updated' => 'true'), '', '&'))); break; case 'revoke_ga_token': global $a360_ga_token; $wp_http = a360_get_wp_http(); $request_args = array('headers' => a360_get_authsub_headers(), 'sslverify' => false); $response = $wp_http->request('https://www.google.com/accounts/AuthSubRevokeToken', $request_args); if ($response['response']['code'] == 200) { delete_option('a360_ga_token'); delete_option('a360_ga_profile_id'); wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&update=true')); } else { if ($response['response']['code'] == 403) { wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&' . build_query(array('a360_revoke_token_chicken_and_egg' => $response['response']['code'] . ': ' . $response['response']['message']), '', '&'))); } else { if (is_wp_error($response)) { $errors = $response->get_error_messages(); } else { $errors = array($response['response']['code'] . ': ' . $response['response']['message']); } wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&' . build_query(array('a360_error' => implode("\n", $errors)), '', '&'))); } } break; case 'forget_ga_token': delete_option('a360_ga_token'); delete_option('a360_ga_profile_id'); wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&update=true')); break; case 'set_ga_profile_id': if (update_option('a360_ga_profile_id', $_POST['profile_id'])) { wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&updated=true')); } else { wp_redirect(site_url('wp-admin/options-general.php?page=' . basename(__FILE__) . '&a360_error=' . urlencode(__('Could not save Analytics profile information', 'analytics360')))); } break; } } }
}); </script> </li> <li id="a360-create-account-content" style="display:none;"> <iframe frameborder="0" style="width:950px; height:450px; margin:0 auto;" src="http://www.mailchimp.com/signup/wpa_signup/"></iframe> </li> </ul> </li> <li> <?php if (empty($a360_ga_token)) { $authenticate_url = 'https://www.google.com/accounts/AuthSubRequest?' . build_query(array('next' => site_url('wp-admin/options-general.php?a360_action=capture_ga_token'), 'scope' => 'https://www.googleapis.com/auth/analytics.readonly', 'secure' => 0, 'session' => 1)); } else { $url = 'https://www.googleapis.com/analytics/v2.4/management/accounts/~all/webproperties/~all/profiles'; $wp_http = a360_get_wp_http(); $request_args = array('headers' => a360_get_authsub_headers(), 'sslverify' => false); $result = $wp_http->request($url, $request_args); $connection_errors = array(); if (is_wp_error($result)) { $connection_errors = $result->get_error_messages(); } else { $http_code = $result['response']['code']; $ga_auth_error = ''; if ($http_code != 200) { $ga_auth_error = $result['response']['code'] . ': ' . $result['response']['message']; //$ga_auth_error = $result['body']; } else { $xml = new SimpleXMLElement($result['body']); $profiles = array(); foreach ($xml->entry as $entry) {