token = "anonymous";
$this->secret = "anonymous";
$preload = $this->get_class_option();
$manual_ua = '';
if ( !empty( $_POST ) ) {
if ( !empty( $_POST["{$this->prefix}google_connect"] ) ) {
$manual_ua = 1;
}
} elseif ( !empty( $preload["{$this->prefix}google_connect"] ) ) {
$manual_ua = 1;
}
if ( !empty( $manual_ua ) ) {
foreach ( Array( "token", "secret", "access_token", "ga_token", "account_cache" ) as $v ) {
if ( !empty( $preload["{$this->prefix}{$v}"]) ) {
unset( $preload["{$this->prefix}{$v}"] );
unset( $this->$v );
}
}
$this->update_class_option( $preload );
$this->update_options( );
// return;
}
foreach ( Array( "token", "secret", "access_token", "ga_token", "account_cache" ) as $v ) {
if ( !empty( $preload["{$this->prefix}{$v}"]) ) {
$this->$v = $preload["{$this->prefix}{$v}"];
}
}
$callback_url = NULL;
if ( !empty( $_REQUEST['oauth_verifier'] ) ) {
$this->verifier = $_REQUEST['oauth_verifier'];
if ( !empty( $_REQUEST['oauth_token'] ) ) {
if ( isset( $this->token ) && $this->token == $_REQUEST['oauth_token'] ) {
$this->access_token = $this->oauth_get_token( $this->verifier );
if ( is_array( $this->access_token ) && !empty( $this->access_token['oauth_token'] ) ) {
unset( $this->token );
unset( $this->secret );
$this->ga_token = $this->access_token['oauth_token'];
foreach ( Array( "token", "secret", "access_token", "ga_token" ) as $v ) {
if ( !empty( $this->$v) ) $preload["{$this->prefix}{$v}"] = $this->$v;
}
$this->update_class_option( $preload );
}
}
wp_redirect( menu_page_url( plugin_basename( $this->file ), false ) );
exit;
}
}
if ( !empty( $this->ga_token ) ) {
if ( !empty( $this->account_cache ) ) {
$ua = $this->account_cache['ua'];
$profiles = $this->account_cache['profiles'];
} else {
$this->token = $this->access_token['oauth_token'];
$this->secret = $this->access_token['oauth_token_secret'];
$data = $this->oauth_get_data('https://www.googleapis.com/analytics/v2.4/management/accounts/~all/webproperties/~all/profiles' );
$http_code = wp_remote_retrieve_response_code( $data );
if( $http_code == 200 ) {
$response = wp_remote_retrieve_body( $data );
$xml = $this->xml_string_to_array( $response );
$ua = Array();
$profiles = Array();
if ( !empty( $xml["entry"] ) ) {
$rec = Array();
$results = Array();
if ( !empty( $xml["entry"][0] ) )
$results = $xml["entry"];
else
$results[] = $xml["entry"];
foreach( $results as $r ) {
foreach( $r as $k => $v )
switch( $k ) {
case 'id': $rec['id'] = $v; break;
case 'title': $rec['title'] = $v['@content']; break;
case 'dxp:property':
$attr = Array();
foreach ( $v as $a => $f )
if ( is_array($f) && !empty($f['@attributes'] ) )
$rec[$f['@attributes']['name']] = $f['@attributes']['value'];
break;
}
$ua[$rec['title']] = Array( $rec['ga:webPropertyId'] => $rec['ga:webPropertyId'] );
$profiles[ $rec['ga:webPropertyId'] ] = $rec['ga:profileId'];
}
}
$this->account_cache = Array();
$this->account_cache['ua'] = $ua;
$this->account_cache['profiles'] = $profiles;
$preload["{$this->prefix}account_cache"] = $this->account_cache;
} else {
unset( $this->token );
unset( $this->secret );
unset( $this->ga_token );
unset( $preload["{$this->prefix}ga_token"] ); // error condition here -- pdb
$response = wp_remote_retrieve_body( $data );
$xml = $this->xml_string_to_array( $response );
if ( !empty( $xml ) && !empty( $xml["error"] ) ) {
$error = 'Error: ';
if ( !empty( $xml["error"]["internalReason"] ) ) {
$error .= $xml["error"]["internalReason"];
} else {
foreach( $xml["error"] as $k => $v )
$error .= "$k: $v\n";
}
$this->output_error( $error );
}
}
}
}
if ( !empty( $this->ga_token ) ) {
$this->default_options["google_analytics_id"]['type'] = 'select';
$this->default_options["google_analytics_id"]['initial_options'] = $ua;
$this->default_options["google_connect"]["type"] = 'html';
$this->default_options["google_connect"]["nolabel"] = 1;
$this->default_options["google_connect"]["save"] = true;
$this->default_options["google_connect"]["name"] = __( 'Disconnect From Google Analytics', 'all-in-one-seo-pack' );
$this->default_options["google_connect"]["default"] = "";
add_filter( $this->prefix . 'override_options', Array( $this, 'override_options' ), 10, 3 );
} else {
$this->default_options["google_connect"]["type"] = 'html';
$this->default_options["google_connect"]["nolabel"] = 1;
$this->default_options["google_connect"]["save"] = false;
$url = $this->oauth_connect();
$this->default_options["google_connect"]["default"] = "" . __( 'Connect With Google Analytics', 'all-in-one-seo-pack' ) . "";
foreach ( Array( "token", "secret", "access_token", "ga_token", "account_cache" ) as $v ) {
if ( !empty( $this->$v) ) $preload["{$this->prefix}{$v}"] = $this->$v;
}
}
$this->update_class_option( $preload );
$this->update_options( );
// $url = $this->report_query();
if ( !empty( $this->account_cache ) && !empty( $this->options["{$this->prefix}google_analytics_id"] ) && !empty( $this->account_cache["profiles"][ $this->options["{$this->prefix}google_analytics_id"] ] ) ) {
$this->profile_id = $this->account_cache["profiles"][ $this->options["{$this->prefix}google_analytics_id"] ];
}
}
function oauth_get_data( $oauth_url, $args = null ) {
if ( !class_exists( 'OAuthConsumer' ) ) require_once( AIOSEOP_PLUGIN_DIR . 'inc/extlib/OAuth.php' );
if ( $args === null ) $args = Array( 'scope' => 'https://www.googleapis.com/auth/analytics.readonly', 'xoauth_displayname' => AIOSEOP_PLUGIN_NAME . ' ' . __('Google Analytics', 'all-in-one-seo-pack' ) );
$req_token = new OAuthConsumer( $this->token, $this->secret );
$req = $this->oauth_get_creds( $oauth_url, $req_token, $args );
return wp_remote_get( $req->to_url() );
}
function oauth_get_creds( $oauth_url, $req_token = NULL, $args = Array(), $callback = null ) {
if ( !class_exists( 'OAuthConsumer' ) ) require_once( AIOSEOP_PLUGIN_DIR . 'inc/extlib/OAuth.php' );
if ( !empty( $callback ) ) $args['oauth_callback'] = $callback;
if ( empty( $this->sig_method ) ) $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1();
if ( empty( $this->consumer ) ) $this->consumer = new OAuthCOnsumer( 'anonymous', 'anonymous' );
$req_req = OAuthRequest::from_consumer_and_token( $this->consumer, $req_token, "GET", $oauth_url, $args );
$req_req->sign_request( $this->sig_method, $this->consumer, $req_token );
return $req_req;
}
function oauth_get_token( $oauth_verifier ) {
if ( !class_exists( 'OAuthConsumer' ) ) require_once( AIOSEOP_PLUGIN_DIR . 'inc/extlib/OAuth.php' );
$args = Array( 'scope' => 'https://www.google.com/analytics/feeds/', 'xoauth_displayname' => AIOSEOP_PLUGIN_NAME . ' ' . __('Google Analytics', 'all-in-one-seo-pack' ) );
$args['oauth_verifier'] = $oauth_verifier;
$oauth_access_token = "https://www.google.com/accounts/OAuthGetAccessToken";
$reqData = $this->oauth_get_data( $oauth_access_token, $args );
$reqOAuthData = OAuthUtil::parse_parameters( wp_remote_retrieve_body( $reqData ) );
return $reqOAuthData;
}
function oauth_connect( $count = 0 ) {
global $aiosp_activation;
if ( !class_exists( 'OAuthConsumer' ) ) require_once( AIOSEOP_PLUGIN_DIR . 'inc/extlib/OAuth.php' );
$url = '';
$callback_url = NULL;
$consumer_key = "anonymous";
$consumer_secret = "anonymous";
$oauth_request_token = "https://www.google.com/accounts/OAuthGetRequestToken";
$oauth_authorize = "https://www.google.com/accounts/OAuthAuthorizeToken";
$oauth_access_token = "https://www.google.com/accounts/OAuthGetAccessToken";
if ( $aiosp_activation ) {
$oauth_current = false;
} else {
$oauth_current = get_transient( "aioseop_oauth_current" );
}
if ( !empty( $this->token ) && ( $this->token != 'anonymous' ) && $oauth_current ) {
return $oauth_authorize . '?oauth_token=' . $this->token;
} else {
set_transient( "aioseop_oauth_current", 1, 3600 );
unset( $this->token );
unset( $this->secret );
}
$args = array(
'scope' => 'https://www.google.com/analytics/feeds/',
'xoauth_displayname' => AIOSEOP_PLUGIN_NAME . ' ' . __('Google Analytics', 'all-in-one-seo-pack')
);
if ( AIOSEOPPRO ) {
$req_req = $this->oauth_get_creds( $oauth_request_token, NULL, $args, admin_url( "admin.php?page=all-in-one-seo-pack-pro/aioseop_class.php" ) );
} else {
$req_req = $this->oauth_get_creds( $oauth_request_token, NULL, $args, admin_url( "admin.php?page=all-in-one-seo-pack/aioseop_class.php" ) );
}
$reqData = wp_remote_get( $req_req->to_url() );
$reqOAuthData = OAuthUtil::parse_parameters( wp_remote_retrieve_body( $reqData ) );
if ( !empty( $reqOAuthData['oauth_token'] ) ) $this->token = $reqOAuthData['oauth_token'];
if ( !empty( $reqOAuthData['oauth_token_secret'] ) ) $this->secret = $reqOAuthData['oauth_token_secret'];
if ( !empty( $this->token ) && ( $this->token != 'anonymous' ) && ( $oauth_current ) ) {
$url = $oauth_authorize . "?oauth_token={$this->token}";
} else {
if ( !$count ) {
return $this->oauth_connect( 1 );
}
}
return $url;
}