mirror of
https://github.com/10h30/wp-strava.git
synced 2026-07-11 18:56:18 +09:00
Added new v3 settings
This commit is contained in:
+22
-19
@@ -4,29 +4,26 @@
|
||||
*/
|
||||
class WPStrava_API {
|
||||
|
||||
const STRAVA_V1_API = 'http://www.strava.com/api/v1/'; //rides?athleteId=134698
|
||||
const STRAVA_V2_API = 'http://www.strava.com/api/v2/'; //rides/:ride_id/map_details
|
||||
//deactivated
|
||||
//const STRAVA_V1_API = 'http://www.strava.com/api/v1/'; //rides?athleteId=134698
|
||||
//const STRAVA_V2_API = 'http://www.strava.com/api/v2/'; //rides/:ride_id/map_details
|
||||
const STRAVA_V3_API = 'https://www.strava.com/api/v3/';
|
||||
|
||||
/*
|
||||
private $rideUrl = "http://www.strava.com/api/v1/rides/:id";
|
||||
private $rideUrlV2 = "http://www.strava.com/api/v2/rides/:id";
|
||||
private $ridesUrl = "http://www.strava.com/api/v1/rides";
|
||||
private $authenticationUrl = "https://www.strava.com/api/v1/authentication/login";
|
||||
private $authenticationUrlV2 = "https://www.strava.com/api/v2/authentication/login";
|
||||
private $rideMapDetailsUrl = "http://www.strava.com/api/v1/rides/:id/map_details";
|
||||
private $rideMapDetailsUrlV2 = "http://www.strava.com/api/v2/rides/:id/map_details";
|
||||
*/
|
||||
public function __construct( $access_token ) {
|
||||
$this->access_token = $access_token;
|
||||
}
|
||||
|
||||
public function post( $uri, $data = NULL, $version = 2 ) {
|
||||
$url = ( $version == 2 ) ? self::STRAVA_V2_API : self::STRAVA_V1_API;
|
||||
public function post( $uri, $data = NULL ) {
|
||||
$url = self::STRAVA_V3_API;
|
||||
|
||||
$args = array(
|
||||
'body' => http_build_query( $data ),
|
||||
'sslverify' => false,
|
||||
'headers' => array(
|
||||
'Authorization' => 'Bearer: ' . $this->access_token,
|
||||
)
|
||||
);
|
||||
|
||||
if ( $version == 2 )
|
||||
$args['sslverify'] = false;
|
||||
|
||||
$response = wp_remote_post( $url . $uri, $args );
|
||||
|
||||
if ( $response['response']['code'] != 200 ) {
|
||||
@@ -46,15 +43,21 @@ class WPStrava_API {
|
||||
return json_decode( $response['body'] );
|
||||
}
|
||||
|
||||
public function get( $uri, $args = NULL, $version = 2 ) {
|
||||
$url = ( $version == 2 ) ? self::STRAVA_V2_API : self::STRAVA_V1_API;
|
||||
public function get( $uri, $args = NULL ) {
|
||||
$url = self::STRAVA_V3_API;
|
||||
|
||||
$url .= $uri;
|
||||
|
||||
if ( ! empty( $args ) )
|
||||
$url = add_query_arg( $args, $url );
|
||||
|
||||
$response = wp_remote_get( $url );
|
||||
$get_args = array(
|
||||
'headers' => array(
|
||||
'Authorization' => 'Bearer: ' . $this->access_token,
|
||||
)
|
||||
);
|
||||
|
||||
$response = wp_remote_get( $url, $get_args );
|
||||
|
||||
if ( is_wp_error( $response ) )
|
||||
return $response;
|
||||
|
||||
+128
-43
@@ -1,35 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* v3 - http://strava.github.io/api/v3/oauth/
|
||||
*
|
||||
* Set up an "API Application" at Strava
|
||||
* Save the Client ID and Client Secret in WordPress - redirect to strava oauth/authorize URL for permission
|
||||
* Get redirected back to this settings page with ?code=
|
||||
* Use code to retrieve auth token
|
||||
*/
|
||||
|
||||
class WPStrava_Settings {
|
||||
|
||||
private $feedback;
|
||||
private $token;
|
||||
private $page_name = 'wp-strava-options';
|
||||
private $option_page = 'wp-strava-settings-group';
|
||||
|
||||
//register admin menus
|
||||
public function hook() {
|
||||
add_action( 'admin_init', array( $this, 'register_strava_settings' ) );
|
||||
add_action( 'admin_menu', array( $this, 'add_strava_menu' ) );
|
||||
add_action( 'current_screen', array( $this, 'current_screen' ) );
|
||||
add_action( 'option_home', array( $this, 'option_home' ) );
|
||||
}
|
||||
|
||||
public function current_screen( $screen ) {
|
||||
if ( $screen->id = 'settings_page_' . $this->page_name ) {
|
||||
if ( isset( $_GET['code'] ) ) {
|
||||
$token = $this->get_token( $_GET['code'] );
|
||||
if ( $token ) {
|
||||
add_settings_error( 'strava_token', 'strava_token', sprintf( __( 'New Strava Token Retrieved: %s', 'wp-strava' ), $this->feedback ) , 'updated' );
|
||||
update_option( 'strava_token', $token );
|
||||
} else {
|
||||
add_settings_error( 'strava_token', 'strava_token', $this->feedback );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This runs after options are saved
|
||||
*/
|
||||
public function option_home() {
|
||||
if ( isset( $_POST['option_page'] ) && $_POST['option_page'] == $this->option_page ) {
|
||||
//redirect only if all the right options are in place
|
||||
$errors = get_settings_errors();
|
||||
if ( ! empty( $errors ) )
|
||||
return;
|
||||
|
||||
$client_id = get_option( 'strava_client_id' );
|
||||
$client_secret = get_option( 'strava_client_secret' );
|
||||
|
||||
if ( $client_id && $client_secret ) {
|
||||
$redirect = admin_url( "options-general.php?page={$this->page_name}" );
|
||||
$url = "https://www.strava.com/oauth/authorize?client_id={$client_id}&response_type=code&redirect_uri={$redirect}&approval_prompt=force";
|
||||
wp_redirect( $url );
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function add_strava_menu() {
|
||||
add_options_page( __( 'Strava Settings', 'wp-strava' ),
|
||||
__( 'Strava', 'wp-strava' ),
|
||||
'manage_options',
|
||||
'wp-strava-options',
|
||||
$this->page_name,
|
||||
array( $this, 'print_strava_options' ) );
|
||||
}
|
||||
|
||||
public function register_strava_settings() {
|
||||
register_setting('wp-strava-settings-group','strava_email', array( $this, 'sanitize_email' ) );
|
||||
register_setting('wp-strava-settings-group','strava_password', NULL );
|
||||
register_setting('wp-strava-settings-group','strava_token', array( $this, 'sanitize_token' ) );
|
||||
|
||||
$this->token = get_option( 'strava_token' );
|
||||
|
||||
add_settings_section( 'strava_api', __( 'Strava API', 'wp-strava' ), array( $this, 'print_api_instructions' ), 'wp-strava' ); //NULL / NULL no section label needed
|
||||
|
||||
add_settings_field( 'strava_email', __( 'Strava Email', 'wp-strava' ), array( $this, 'print_email_input' ), 'wp-strava', 'strava_api' );
|
||||
add_settings_field( 'strava_password', __( 'Strava Password', 'wp-strava' ), array( $this, 'print_password_input' ), 'wp-strava', 'strava_api' );
|
||||
add_settings_field( 'strava_token', __( 'Strava Token', 'wp-strava' ), array( $this, 'print_token_input' ), 'wp-strava', 'strava_api' );
|
||||
if ( ! $this->token ) {
|
||||
register_setting( $this->option_page, 'strava_client_id', array( $this, 'sanitize_client_id' ) );
|
||||
register_setting( $this->option_page, 'strava_client_secret', array( $this, 'sanitize_client_secret' ) );
|
||||
|
||||
register_setting('wp-strava-settings-group','strava_som', array( $this, 'sanitize_som' ) );
|
||||
add_settings_field( 'strava_client_id', __( 'Strava Client ID', 'wp-strava' ), array( $this, 'print_client_input' ), 'wp-strava', 'strava_api' );
|
||||
add_settings_field( 'strava_client_secret', __( 'Strava Client Secret', 'wp-strava' ), array( $this, 'print_secret_input' ), 'wp-strava', 'strava_api' );
|
||||
} else {
|
||||
register_setting( $this->option_page, 'strava_token', array( $this, 'sanitize_token' ) );
|
||||
add_settings_field( 'strava_token', __( 'Strava Token', 'wp-strava' ), array( $this, 'print_token_input' ), 'wp-strava', 'strava_api' );
|
||||
}
|
||||
|
||||
register_setting( $this->option_page, 'strava_som', array( $this, 'sanitize_som' ) );
|
||||
|
||||
add_settings_section( 'strava_options', __( 'Options', 'wp-strava' ), NULL, 'wp-strava' );
|
||||
|
||||
@@ -37,7 +92,23 @@ class WPStrava_Settings {
|
||||
}
|
||||
|
||||
public function print_api_instructions() {
|
||||
?><p><?php _e( 'Please specify the options below in order to obtain an authentication token, this will work with the Strava shortcodes supported by this plugin, the widget options are independant.', 'wp-strava');?> </p><?php
|
||||
?><p>Steps:</p>
|
||||
<ol>
|
||||
<li>Create your app here: http://www.strava.com/developers</li>
|
||||
<p>Use the following information:</p>
|
||||
<ul>
|
||||
<li>Application Name: [SiteName] Strava</li>
|
||||
<li>Website: [site_url]
|
||||
<li>Application Description: WP-Strava for [SiteName]
|
||||
<li>Authorization Callback Domain: [site_url] + oauth path
|
||||
</ul>
|
||||
<li>Once you've created your application, enter the Client ID and Client Secret below, which can be found at https://www.strava.com/settings/api</li>
|
||||
<li>You'll be redirected to strava to authorize your app after saving your Client ID and Secret. If successful, your Strava Token will display</li>
|
||||
<li>Erase your Strava Token if you need to re-authorize</li>
|
||||
</ol>
|
||||
|
||||
<?php
|
||||
//'
|
||||
}
|
||||
|
||||
public function print_strava_options() {
|
||||
@@ -47,7 +118,7 @@ class WPStrava_Settings {
|
||||
<h2><?php _e( 'Strava Settings', 'wp-strava' ); ?></h2>
|
||||
|
||||
<form method="post" action="<?php echo admin_url( 'options.php' ); ?>">
|
||||
<?php settings_fields( 'wp-strava-settings-group' ); ?>
|
||||
<?php settings_fields( $this->option_page ); ?>
|
||||
<?php do_settings_sections( 'wp-strava' ); ?>
|
||||
|
||||
<p class="submit">
|
||||
@@ -57,32 +128,38 @@ class WPStrava_Settings {
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
public function print_email_input() {
|
||||
?><input type="text" id="strava_email" name="strava_email" value="<?php echo get_option('strava_email'); ?>" /><?php
|
||||
|
||||
public function print_client_input() {
|
||||
?><input type="text" id="strava_client_id" name="strava_client_id" value="<?php echo get_option('strava_client_id'); ?>" /><?php
|
||||
}
|
||||
|
||||
public function print_password_input() {
|
||||
?>
|
||||
<input type="password" id="strava_password" name="strava_password" value="" />
|
||||
<p class="description"><?php _e( 'Your Password WILL NOT be saved. Only enter your password if you wish to retrieve a new API Token', 'wp-strava' ); ?></p>
|
||||
<?php
|
||||
public function print_secret_input() {
|
||||
?><input type="text" id="strava_client_secret" name="strava_client_secret" value="<?php echo get_option('strava_client_secret'); ?>" /><?php
|
||||
}
|
||||
|
||||
public function print_token_input() {
|
||||
?><input type="text" id="strava_token" name="strava_token" value="<?php echo get_option('strava_token'); ?>" /><?php
|
||||
}
|
||||
|
||||
public function sanitize_email( $email ) {
|
||||
if ( is_email( $email ) )
|
||||
return $email;
|
||||
add_settings_error( 'strava_email', 'strava_email', 'Invalid Email' );
|
||||
return NULL;
|
||||
public function sanitize_client_id( $client_id ) {
|
||||
if ( ! is_numeric( $client_id ) ) {
|
||||
add_settings_error( 'strava_client_id', 'strava_client_id', __( 'Client ID must be a number.', 'wp-strava' ) );
|
||||
}
|
||||
return $client_id;
|
||||
}
|
||||
|
||||
public function sanitize_client_secret( $client_secret ) {
|
||||
if ( trim( $client_secret ) == '' ) {
|
||||
add_settings_error( 'strava_client_secret', 'strava_client_secret', __( 'Client Secret is required.', 'wp-strava' ) );
|
||||
}
|
||||
echo "WHEREAMI";
|
||||
return $client_secret;
|
||||
}
|
||||
|
||||
public function sanitize_token( $token ) {
|
||||
if ( ! empty( $_POST['strava_password'] ) ) {
|
||||
$token = $this->get_authentication_token( $this->email, $_POST['strava_password'] );
|
||||
/*
|
||||
if ( isset( $_GET['code'] ) ) {
|
||||
$token = $this->get_token( $_GET['code'] );
|
||||
if ( $token ) {
|
||||
add_settings_error( 'strava_token', 'strava_token', sprintf( __( 'New Strava Token Retrieved: %s', 'wp-strava' ), $this->feedback ) , 'updated' );
|
||||
return $token;
|
||||
@@ -91,28 +168,35 @@ class WPStrava_Settings {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
return $token;
|
||||
}
|
||||
|
||||
private function get_authentication_token( $email, $password ) {
|
||||
$data = array( 'email' => $email, 'password' => $password );
|
||||
$strava_login = WPStrava::get_instance()->api->post( 'authentication/login', $data );
|
||||
private function get_token( $code ) {
|
||||
$client_id = get_option( 'strava_client_id' );
|
||||
$client_secret = get_option( 'strava_client_secret' );
|
||||
|
||||
if( $strava_login ) {
|
||||
if( ! isset( $strava_login->error ) ) {
|
||||
$this->feedback .= __( 'Successfully authenticated.', 'wp-strava' );
|
||||
return $strava_login->token;
|
||||
if ( $client_id && $client_secret ) {
|
||||
$data = array( 'client_id' => $client_id, 'client_secret' => $client_secret, 'code' => $code );
|
||||
$strava_info = WPStrava::get_instance()->api->post( 'oauth/token', $data );
|
||||
|
||||
if( $strava_info ) {
|
||||
if( isset( $strava_info->access_token ) ) {
|
||||
$this->feedback .= __( 'Successfully authenticated.', 'wp-strava' );
|
||||
return $strava_info->access_token;
|
||||
} else {
|
||||
$this->feedback .= __( 'Authentication failed, please check your credentials.', 'wp-strava' );
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$this->feedback .= __( 'Authentication failed, please check your credentials.', 'wp-strava' );
|
||||
$this->feedback .= __( 'There was an error pulling data of strava.com.', 'wp-strava' );
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$this->feedback .= __( 'There was an error pulling data of strava.com.', 'wp-strava' );
|
||||
$this->feedback .= __( 'Missing Client ID or Client Secret.', 'wp-strava' );
|
||||
return false;
|
||||
}
|
||||
} // get_authentication_token
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function print_options_label() {
|
||||
?><p>Options</p><?php
|
||||
@@ -121,10 +205,10 @@ class WPStrava_Settings {
|
||||
public function print_som_input() {
|
||||
$strava_som = get_option( 'strava_som' );
|
||||
?>
|
||||
<select id="strava_som" name="strava_som">
|
||||
<option value="metric" <?php selected( $strava_som, 'metric' ); ?>><?php _e( 'Metric', 'wp-strava' )?></option>
|
||||
<option value="english" <?php selected( $strava_som, 'english' ); ?>><?php _e( 'English', 'wp-strava' )?></option>
|
||||
</select>
|
||||
<select id="strava_som" name="strava_som">
|
||||
<option value="metric" <?php selected( $strava_som, 'metric' ); ?>><?php _e( 'Metric', 'wp-strava' )?></option>
|
||||
<option value="english" <?php selected( $strava_som, 'english' ); ?>><?php _e( 'English', 'wp-strava' )?></option>
|
||||
</select>
|
||||
<?php
|
||||
}
|
||||
|
||||
@@ -135,4 +219,5 @@ class WPStrava_Settings {
|
||||
public function __get( $name ) {
|
||||
return get_option( "strava_{$name}" );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -26,15 +26,14 @@ class WPStrava {
|
||||
}
|
||||
|
||||
public static function get_instance() {
|
||||
if ( ! self::$instance )
|
||||
self::$instance = new WPStrava();
|
||||
if ( ! self::$instance ) {
|
||||
$class = __CLASS__;
|
||||
self::$instance = new $class();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
public function __get( $name ) {
|
||||
if ( isset( $this->{$name} ) )
|
||||
return $this->{$name};
|
||||
|
||||
//on-demand classes
|
||||
if ( $name == 'api' )
|
||||
return $this->get_api();
|
||||
@@ -42,13 +41,16 @@ class WPStrava {
|
||||
if ( $name == 'rides' )
|
||||
return $this->get_rides();
|
||||
|
||||
if ( isset( $this->{$name} ) )
|
||||
return $this->{$name};
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
public function get_api() {
|
||||
if ( ! $this->api ) {
|
||||
require_once WPSTRAVA_PLUGIN_DIR . 'lib/API.class.php';
|
||||
$this->api = new WPStrava_API();
|
||||
$this->api = new WPStrava_API( get_option('strava_token') );
|
||||
}
|
||||
|
||||
return $this->api;
|
||||
|
||||
@@ -35,6 +35,7 @@ if( file_exists( WPSTRAVA_PLUGIN_DIR . 'lang/' . get_locale() . '.mo' ) ) {
|
||||
|
||||
require_once WPSTRAVA_PLUGIN_DIR . 'lib/Strava.class.php';
|
||||
$wpstrava = WPStrava::get_instance();
|
||||
//wp_die( '<pre>' . var_export( $wpstrava->api->get( 'athlete' ), true ) );
|
||||
|
||||
//@TODO only load these when needed using is_active_widget()
|
||||
function load_styles() {
|
||||
|
||||
Reference in New Issue
Block a user