mirror of
https://github.com/10h30/wp-strava.git
synced 2026-06-05 15:10:01 +09:00
746 lines
23 KiB
PHP
746 lines
23 KiB
PHP
<?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= or ?error=
|
|
* Use code to retrieve auth token
|
|
*/
|
|
|
|
class WPStrava_Settings {
|
|
|
|
private $feedback;
|
|
private $tokens = array();
|
|
private $page_name = 'wp-strava-options';
|
|
private $option_page = 'wp-strava-settings-group';
|
|
private $adding_athlete = true;
|
|
|
|
/**
|
|
* Register actions & filters for menus and authentication.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function hook() {
|
|
add_action( 'admin_init', array( $this, 'register_strava_settings' ) );
|
|
add_action( 'admin_menu', array( $this, 'add_strava_menu' ) );
|
|
add_filter( 'pre_set_transient_settings_errors', array( $this, 'maybe_oauth' ) );
|
|
add_filter( 'plugin_action_links_' . WPSTRAVA_PLUGIN_NAME, array( $this, 'settings_link' ) );
|
|
add_action( 'in_plugin_update_message-wp-strava/wp-strava.php', array( $this, 'plugin_update_message' ), 10, 2 );
|
|
add_action( 'after_plugin_row_wp-strava/wp-strava.php', array( $this, 'ms_plugin_update_message' ), 10, 2 );
|
|
}
|
|
|
|
/**
|
|
* Run the OAuth process after options are saved.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.0
|
|
*/
|
|
public function maybe_oauth( $value ) {
|
|
// User is clearing to start-over, don't oauth, ignore other errors.
|
|
if ( isset( $_POST['strava_token'] ) && $this->tokens_empty( $_POST['strava_token'] ) ) {
|
|
return array();
|
|
}
|
|
|
|
// Redirect only if all the right options are in place.
|
|
if ( isset( $value[0]['type'] ) && 'updated' === $value[0]['type'] ) { // Make sure there were no settings errors.
|
|
if ( isset( $_POST['option_page'] ) && $_POST['option_page'] === $this->option_page ) { // Make sure we're on our settings page.
|
|
|
|
// Only re-auth if client ID and secret were saved.
|
|
if ( ! empty( $_POST['strava_client_id'] ) && ! empty( $_POST['strava_client_secret'] ) ) {
|
|
$client_id = $_POST['strava_client_id'];
|
|
$client_secret = $_POST['strava_client_secret'];
|
|
|
|
$redirect = rawurlencode( 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();
|
|
}
|
|
}
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* Add the strava settings menu.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function add_strava_menu() {
|
|
add_options_page(
|
|
__( 'Strava Settings', 'wp-strava' ),
|
|
__( 'Strava', 'wp-strava' ),
|
|
'manage_options',
|
|
$this->page_name,
|
|
array( $this, 'print_strava_options' )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Initialize the settings by getting tokens.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.0
|
|
*/
|
|
public function init() {
|
|
$this->tokens = $this->get_tokens();
|
|
|
|
// Only validate additional athlete information if all fields are present.
|
|
$this->adding_athlete = ! ( empty( $_POST['strava_client_id'] ) && empty( $_POST['strava_client_secret'] ) );
|
|
|
|
//only update when redirected back from strava
|
|
if ( ! isset( $_GET['settings-updated'] ) && isset( $_GET['page'] ) && $_GET['page'] === $this->page_name ) {
|
|
if ( isset( $_GET['code'] ) ) {
|
|
$token = $this->fetch_token( $_GET['code'] );
|
|
if ( $token ) {
|
|
// Translators: strava token
|
|
add_settings_error( 'strava_token', 'strava_token', sprintf( __( 'New Strava token retrieved. %s', 'wp-strava' ), $this->feedback ), 'updated' );
|
|
$this->add_token( $token );
|
|
update_option( 'strava_token', $this->tokens );
|
|
} else {
|
|
add_settings_error( 'strava_token', 'strava_token', $this->feedback );
|
|
}
|
|
} elseif ( isset( $_GET['error'] ) ) {
|
|
// Translators: authentication error mess
|
|
add_settings_error( 'strava_token', 'strava_token', sprintf( __( 'Error authenticating at Strava: %s', 'wp-strava' ), str_replace( '_', ' ', $_GET['error'] ) ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Register settings using the WP Settings API.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function register_strava_settings() {
|
|
$this->init();
|
|
|
|
add_settings_section( 'strava_api', __( 'Strava API', 'wp-strava' ), array( $this, 'print_api_instructions' ), 'wp-strava' );
|
|
|
|
if ( $this->tokens_empty( $this->tokens ) ) {
|
|
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( $this->option_page, 'strava_nickname', array( $this, 'sanitize_nickname' ) );
|
|
|
|
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' );
|
|
add_settings_field( 'strava_nickname', __( 'Strava Nickname', 'wp-strava' ), array( $this, 'print_nickname_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' );
|
|
|
|
// Add additional fields
|
|
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( $this->option_page, 'strava_nickname', array( $this, 'sanitize_nickname' ) );
|
|
|
|
add_settings_field( 'strava_client_id', __( 'Additional Athlete Client ID', 'wp-strava' ), array( $this, 'print_client_input' ), 'wp-strava', 'strava_api' );
|
|
add_settings_field( 'strava_client_secret', __( 'Additional Athlete Client Secret', 'wp-strava' ), array( $this, 'print_secret_input' ), 'wp-strava', 'strava_api' );
|
|
add_settings_field( 'strava_nickname', __( 'Additional Athlete Nickname', 'wp-strava' ), array( $this, 'print_nickname_input' ), 'wp-strava', 'strava_api' );
|
|
}
|
|
|
|
// Google Maps API.
|
|
register_setting( $this->option_page, 'strava_gmaps_key', array( $this, 'sanitize_gmaps_key' ) );
|
|
add_settings_section( 'strava_gmaps', __( 'Google Maps', 'wp-strava' ), array( $this, 'print_gmaps_instructions' ), 'wp-strava' );
|
|
add_settings_field( 'strava_gmaps_key', __( 'Static Maps Key', 'wp-strava' ), array( $this, 'print_gmaps_key_input' ), 'wp-strava', 'strava_gmaps' );
|
|
|
|
// System of Measurement.
|
|
register_setting( $this->option_page, 'strava_som', array( $this, 'sanitize_som' ) );
|
|
add_settings_section( 'strava_options', __( 'Options', 'wp-strava' ), null, 'wp-strava' );
|
|
add_settings_field( 'strava_som', __( 'System of Measurement', 'wp-strava' ), array( $this, 'print_som_input' ), 'wp-strava', 'strava_options' );
|
|
|
|
// Hide Options.
|
|
register_setting( $this->option_page, 'strava_hide_time', array( $this, 'sanitize_hide_time' ) );
|
|
add_settings_field( 'strava_hide_time', __( 'Hide Activity Time', 'wp-strava' ), array( $this, 'print_hide_time_input' ), 'wp-strava', 'strava_options' );
|
|
register_setting( $this->option_page, 'strava_hide_elevation', array( $this, 'sanitize_hide_elevation' ) );
|
|
add_settings_field( 'strava_hide_elevation', __( 'Hide Activity Elevation', 'wp-strava' ), array( $this, 'print_hide_elevation_input' ), 'wp-strava', 'strava_options' );
|
|
|
|
// Clear cache.
|
|
register_setting( $this->option_page, 'strava_cache_clear', array( $this, 'sanitize_cache_clear' ) );
|
|
add_settings_section( 'strava_cache', __( 'Cache', 'wp-strava' ), null, 'wp-strava' );
|
|
add_settings_field( 'strava_cache_clear', __( 'Clear cache (images & transient data)', 'wp-strava' ), array( $this, 'print_clear_input' ), 'wp-strava', 'strava_cache' );
|
|
}
|
|
|
|
/**
|
|
* Print the Strava setup instructions.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function print_api_instructions() {
|
|
$signup_url = 'http://www.strava.com/developers';
|
|
$settings_url = 'https://www.strava.com/settings/api';
|
|
$icon_url = 'https://plugins.svn.wordpress.org/wp-strava/assets/icon-128x128.png';
|
|
$blog_name = get_bloginfo( 'name' );
|
|
|
|
// Translators: Strava "app" name
|
|
$app_name = sprintf( __( '%s Strava', 'wp-strava' ), $blog_name );
|
|
$site_url = site_url();
|
|
|
|
// Translators: Strava "app" description
|
|
$description = sprintf( __( 'WP-Strava for %s', 'wp-strava' ), $blog_name );
|
|
printf( __( "<p>Steps:</p>
|
|
<ol>
|
|
<li>Create your free API Application/Connection here: <a href='%1\$s'>%2\$s</a> using the following information:</li>
|
|
<ul>
|
|
<li>App Icon: <strong>upload <a href='%3\$s'>this image</a></strong></li>
|
|
<li>Application Name: <strong>%4\$s</strong></li>
|
|
<li>Category: OK to leave at default 'other'</li>
|
|
<li>Club: OK to leave blank</li>
|
|
<li>Website: <strong>%5\$s</strong></li>
|
|
<li>Application Description: <strong>%6\$s</strong></li>
|
|
<li>Authorization Callback Domain: <strong>%7\$s</strong></li>
|
|
</ul>
|
|
<li>Once you've created your API Application at strava.com, enter the <strong>Client ID</strong> and <strong>Client Secret</strong> below, which can now be found on that same strava API Settings page.
|
|
<li>After saving your Client ID and Secret, you'll be redirected to strava to authorize your API Application. If successful, your Strava Token will display instead of Client ID and Client Secret.</li>
|
|
<li>If you need to re-authorize your API Application, erase your Strava Token here and click 'Save Changes' to start over.</li>
|
|
</ol>", 'wp-strava' ),
|
|
$settings_url,
|
|
$settings_url,
|
|
$icon_url,
|
|
$app_name,
|
|
$site_url,
|
|
$description,
|
|
wp_parse_url( $site_url, PHP_URL_HOST )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Print the google maps instructions.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.1
|
|
*/
|
|
public function print_gmaps_instructions() {
|
|
$maps_url = 'https://developers.google.com/maps/documentation/static-maps/';
|
|
printf( __( "<p>Steps:</p>
|
|
<ol>
|
|
<li>To use Google map images, you must create a Static Maps API Key. Create a free key by going here: <a href='%1\$s'>%2\$s</a> and clicking <strong>Get a Key</strong></li>
|
|
<li>Once you've created your Google Static Maps API Key, enter the key below.
|
|
</ol>", 'wp-strava' ), $maps_url, $maps_url );
|
|
|
|
}
|
|
|
|
/**
|
|
* Print the settings page container.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function print_strava_options() {
|
|
?>
|
|
<div class="wrap">
|
|
<div id="icon-options-general" class="icon32"><br/></div>
|
|
<h2><?php esc_html_e( 'Strava Settings', 'wp-strava' ); ?></h2>
|
|
|
|
<form method="post" action="<?php echo admin_url( 'options.php' ); ?>">
|
|
<?php settings_fields( $this->option_page ); ?>
|
|
<?php do_settings_sections( 'wp-strava' ); ?>
|
|
|
|
<p class="submit">
|
|
<input type="submit" class="button-primary" value="<?php esc_html_e( 'Save Changes', 'wp-strava' ); ?>" />
|
|
</p>
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Print the client ID input
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function print_client_input() {
|
|
?>
|
|
<input type="text" id="strava_client_id" name="strava_client_id" value="" />
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Print the client secret input
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function print_secret_input() {
|
|
?>
|
|
<input type="text" id="strava_client_secret" name="strava_client_secret" value="" />
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Print the nickname input
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function print_nickname_input() {
|
|
$nickname = $this->tokens_empty( $this->tokens ) ? __( 'Default', 'wp-strava' ) : '';
|
|
?>
|
|
<input type="text" name="strava_nickname[]" value="<?php echo $nickname; ?>" />
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Print the strava token(s)
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function print_token_input() {
|
|
foreach ( $this->get_all_tokens() as $token => $nickname ) {
|
|
?>
|
|
<input type="text" name="strava_token[]" value="<?php echo $token; ?>" />
|
|
<input type="text" name="strava_nickname[]" value="<?php echo $nickname; ?>" />
|
|
<br/>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sanitize the client ID.
|
|
*
|
|
* @param string $client_id
|
|
* @return string
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function sanitize_client_id( $client_id ) {
|
|
// Return early if not trying to add an additional athlete.
|
|
if ( ! $this->adding_athlete ) {
|
|
return $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;
|
|
}
|
|
|
|
/**
|
|
* Sanitize the client secret.
|
|
*
|
|
* @param string $client_secret
|
|
* @return string
|
|
* @author Justin Foell <justin.foell@webdevstudios.com>
|
|
* @since 1.2.0
|
|
*/
|
|
public function sanitize_client_secret( $client_secret ) {
|
|
// Return early if not trying to add an additional athlete.
|
|
if ( ! $this->adding_athlete ) {
|
|
return $client_secret;
|
|
}
|
|
|
|
if ( '' === trim( $client_secret ) ) {
|
|
add_settings_error( 'strava_client_secret', 'strava_client_secret', __( 'Client Secret is required.', 'wp-strava' ) );
|
|
}
|
|
return $client_secret;
|
|
}
|
|
|
|
/**
|
|
* Sanitize the nicknames - make sure we've got the same number of nicknames sa tokens.
|
|
*
|
|
* @param array $nicknames Nicknames for the athletes saved.
|
|
* @return array
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function sanitize_nickname( $nicknames ) {
|
|
if ( ! $this->adding_athlete ) {
|
|
|
|
// Chop $nicknames to same size as tokens.
|
|
$nicknames = array_slice( $nicknames, 0, count( $_POST['strava_token'] ) );
|
|
|
|
// Remove indexes from $nicknames that have empty tokens.
|
|
foreach ( $_POST['strava_token'] as $index => $token ) {
|
|
$token = trim( $token );
|
|
if ( empty( $token ) ) {
|
|
unset( $nicknames[ $index ] );
|
|
}
|
|
}
|
|
|
|
// Process $nicknames so indexes start with zero.
|
|
$nicknames = array_merge( $nicknames, array() );
|
|
}
|
|
|
|
foreach ( $nicknames as $index => $nickname ) {
|
|
if ( '' === trim( $nickname ) ) {
|
|
add_settings_error( 'strava_nickname', 'strava_nickname', __( 'Nickname is required.', 'wp-strava' ) );
|
|
return $nicknames;
|
|
}
|
|
}
|
|
return $nicknames;
|
|
}
|
|
|
|
/**
|
|
* Sanitize the token.
|
|
*
|
|
* @param string $token
|
|
* @return string
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function sanitize_token( $token ) {
|
|
return $token;
|
|
}
|
|
|
|
/**
|
|
* Fetch the access token from Strava - previously get_token()
|
|
*
|
|
* @param string $code
|
|
* @return mixed Boolean false if there was a problem, token string otherwise.
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.0
|
|
*/
|
|
private function fetch_token( $code ) {
|
|
$client_id = $this->client_id;
|
|
$client_secret = $this->client_secret;
|
|
|
|
delete_option( 'strava_client_id' );
|
|
delete_option( 'strava_client_secret' );
|
|
|
|
if ( $client_id && $client_secret ) {
|
|
$api = new WPStrava_API();
|
|
$data = array(
|
|
'client_id' => $client_id,
|
|
'client_secret' => $client_secret,
|
|
'code' => $code,
|
|
);
|
|
|
|
$strava_info = $api->post( 'oauth/token', $data );
|
|
|
|
if ( isset( $strava_info->access_token ) ) {
|
|
$this->feedback .= __( 'Successfully authenticated.', 'wp-strava' );
|
|
return $strava_info->access_token;
|
|
}
|
|
|
|
// Translators: error message from Strava
|
|
$this->feedback .= sprintf( __( 'There was an error receiving data from Strava: <pre>%s</pre>', 'wp-strava' ), print_r( $strava_info, true ) ); // phpcs:ignore -- Debug output.
|
|
return false;
|
|
|
|
}
|
|
|
|
$this->feedback .= __( 'Missing Client ID or Client Secret.', 'wp-strava' );
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Print the GMaps key input.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.1
|
|
*/
|
|
public function print_gmaps_key_input() {
|
|
?>
|
|
<input type="text" id="strava_gmaps_key" name="strava_gmaps_key" value="<?php echo $this->gmaps_key; ?>" />
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Sanitize GMaps key input.
|
|
*
|
|
* @param string $key
|
|
* @return string
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.1
|
|
*/
|
|
public function sanitize_gmaps_key( $key ) {
|
|
return $key;
|
|
}
|
|
|
|
/**
|
|
* Print System of Measure option.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function print_som_input() {
|
|
?>
|
|
<select id="strava_som" name="strava_som">
|
|
<option value="metric" <?php selected( $this->som, 'metric' ); ?>><?php esc_html_e( 'Metric', 'wp-strava' ); ?></option>
|
|
<option value="english" <?php selected( $this->som, 'english' ); ?>><?php esc_html_e( 'English', 'wp-strava' ); ?></option>
|
|
</select>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Sanitize System of Measure input.
|
|
*
|
|
* @param string $som Input from System of Measure dropdown.
|
|
* @return string
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 0.62
|
|
*/
|
|
public function sanitize_som( $som ) {
|
|
return $som;
|
|
}
|
|
|
|
/**
|
|
* Display the Hide Time Checkbox.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.7.1
|
|
*/
|
|
public function print_hide_time_input() {
|
|
?>
|
|
<input type="checkbox" id="strava_hide_time" name="strava_hide_time" <?php checked( $this->hide_time, 'on' ); ?>/>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Sanitize the Hide Time Checkbox.
|
|
*
|
|
* @param string $checked 'on' or null.
|
|
* @return string 'on' if checked.
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.7.1
|
|
*/
|
|
public function sanitize_hide_time( $checked ) {
|
|
if ( 'on' === $checked ) {
|
|
return $checked;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Display the Hide Elevation Checkbox.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.7.2
|
|
*/
|
|
public function print_hide_elevation_input() {
|
|
?>
|
|
<input type="checkbox" id="strava_hide_elevation" name="strava_hide_elevation" <?php checked( $this->hide_elevation, 'on' ); ?>/>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Sanitize the Hide Elevation Checkbox.
|
|
*
|
|
* @param string $checked 'on' or null.
|
|
* @return string 'on' if checked.
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.7.2
|
|
*/
|
|
public function sanitize_hide_elevation( $checked ) {
|
|
if ( 'on' === $checked ) {
|
|
return $checked;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Print checkbox option to clear cache.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.1
|
|
*/
|
|
public function print_clear_input() {
|
|
?>
|
|
<input type="checkbox" id="strava_cache_clear" name="strava_cache_clear" />
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Clear Strava cache if checkbox is checked.
|
|
*
|
|
* @param string $checked Clear cache checkbox status.
|
|
* @return void
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.1
|
|
*/
|
|
public function sanitize_cache_clear( $checked ) {
|
|
if ( 'on' === $checked ) {
|
|
global $wpdb;
|
|
|
|
$wpdb->query( "DELETE FROM {$wpdb->options} WHERE `option_name` LIKE '_transient_timeout_strava_latest_map_%'" );
|
|
$wpdb->query( "DELETE FROM {$wpdb->options} WHERE `option_name` LIKE '_transient_strava_latest_map_%'" );
|
|
$wpdb->query( "DELETE FROM {$wpdb->options} WHERE `option_name` LIKE 'strava_latest_map%'" );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Gets all saved strava tokens as an array.
|
|
*
|
|
* @return array
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function get_tokens() {
|
|
$tokens = get_option( 'strava_token' );
|
|
if ( ! is_array( $tokens ) ) {
|
|
$tokens = array( $tokens );
|
|
}
|
|
|
|
foreach ( $tokens as $index => $token ) {
|
|
if ( empty( $token ) ) {
|
|
unset( $tokens[ $index ] );
|
|
$tokens = array_values( $tokens ); // Rebase array keys after unset @see https://stackoverflow.com/a/5943165/2146022
|
|
}
|
|
}
|
|
return $tokens;
|
|
}
|
|
|
|
/**
|
|
* Returns first (default) token saved.
|
|
*
|
|
* @return string|null
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function get_default_token() {
|
|
$tokens = $this->get_tokens();
|
|
return isset( $tokens[0] ) ? $tokens[0] : null;
|
|
}
|
|
|
|
/**
|
|
* Get all tokens and their nicknames in one array.
|
|
*
|
|
* @return void
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function get_all_tokens() {
|
|
$tokens = $this->get_tokens();
|
|
$nicknames = $this->nickname;
|
|
$all = array();
|
|
$number = 1;
|
|
foreach ( $tokens as $index => $token ) {
|
|
if ( ! empty( $nicknames[ $index ] ) ) {
|
|
$all[ $token ] = $nicknames[ $index ];
|
|
} else {
|
|
$all[ $token ] = $this->get_default_nickname( $number );
|
|
}
|
|
$number++;
|
|
}
|
|
return $all;
|
|
}
|
|
|
|
/**
|
|
* Returns default nickname 'Default' / 'Athlete n'.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*
|
|
* @param integer $number Athlete number (default 1).
|
|
* @return string
|
|
*/
|
|
private function get_default_nickname( $number = 1 ) {
|
|
// Translators: Athlete number if no nickname present.
|
|
return ( 1 === $number ) ? __( 'Default', 'wp-strava' ) : sprintf( __( 'Athlete %s', 'wp-strava' ), $number );
|
|
}
|
|
|
|
/**
|
|
* Checks for valid tokens.
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*
|
|
* @param string|array Single token or array of tokens.
|
|
* @return boolean True if empty.
|
|
*/
|
|
public function tokens_empty( $tokens ) {
|
|
if ( empty( $tokens ) ) {
|
|
return true;
|
|
}
|
|
|
|
if ( is_array( $tokens ) ) {
|
|
foreach ( $tokens as $token ) {
|
|
if ( ! empty( $token ) ) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Only add a token if it's not already there.
|
|
*
|
|
* @param string $token
|
|
*
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.2.0
|
|
*/
|
|
public function add_token( $token ) {
|
|
if ( false === array_search( $token, $this->tokens, true ) ) {
|
|
$this->tokens[] = $token;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Getter for Strava settings in wp_options.
|
|
*
|
|
* @param string $name Option name without the 'strava_' prefix.
|
|
* @return mixed
|
|
* @since 0.62
|
|
*/
|
|
public function __get( $name ) {
|
|
if ( ! strpos( 'strava_', $name ) ) {
|
|
$name = "strava_{$name}";
|
|
}
|
|
// Else.
|
|
return get_option( $name );
|
|
}
|
|
|
|
/**
|
|
* Link to the settings on the plugin list page.
|
|
*
|
|
* @param array $links Array of plugin links.
|
|
* @return array Links with settings added.
|
|
* @author Justin Foell <justin@foell.org>
|
|
* @since 1.0
|
|
*/
|
|
public function settings_link( $links ) {
|
|
$settings_link = '<a href="' . admin_url( "options-general.php?page={$this->page_name}" ) . '">' . __( 'Settings', 'wp-strava' ) . '</a>';
|
|
$links[] = $settings_link;
|
|
return $links;
|
|
}
|
|
|
|
/**
|
|
* Plugin Upgrade Notice.
|
|
*
|
|
* @param array $data Plugin data with readme additions.
|
|
* @param array $response Response from wp.org.
|
|
* @author Justin Foell <justin.foell@webdevstudios.com>
|
|
* @since 1.7.3
|
|
* @see https://wisdomplugin.com/add-inline-plugin-update-message/
|
|
*/
|
|
public function plugin_update_message( $data, $response ) {
|
|
if ( isset( $data['upgrade_notice'] ) ) {
|
|
printf(
|
|
'<div class="update-message">%s</div>',
|
|
wpautop( $data['upgrade_notice'] )
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Plugin Upgrade Notice (multisite).
|
|
*
|
|
* @param string $file Relative path to plugin, i.e. wp-strava/wp-strava.php.
|
|
* @param array $plugin Plugin data with readme additions.
|
|
* @author Justin Foell <justin.foell@webdevstudios.com>
|
|
* @since 1.7.3
|
|
*/
|
|
public function ms_plugin_update_message( $file, $plugin ) {
|
|
if ( is_multisite() && version_compare( $plugin['Version'], $plugin['new_version'], '<' ) ) {
|
|
$wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
|
|
printf(
|
|
'<tr class="plugin-update-tr"><td colspan="%s" class="plugin-update update-message notice inline notice-warning notice-alt"><div class="update-message"><h4 style="margin: 0; font-size: 14px;">%s</h4>%s</div></td></tr>',
|
|
$wp_list_table->get_column_count(),
|
|
$plugin['Name'],
|
|
wpautop( $plugin['upgrade_notice'] )
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|