mirror of
https://github.com/10h30/wp-strava.git
synced 2026-06-05 15:10:01 +09:00
Merge branch 'master' into feature/refresh-auth
This commit is contained in:
@@ -112,11 +112,14 @@ class WPStrava_ActivityShortcode {
|
||||
private function get_table( $activity_details, $som ) {
|
||||
$strava_som = WPStrava_SOM::get_som( $som );
|
||||
$strava_activitytype = WPStrava_ActivityType::get_type_group( $activity_details->type );
|
||||
$avg_speed = '';
|
||||
$max_speed = '';
|
||||
$speed_label = '';
|
||||
$avg_title = '<th>' . __( 'Average Speed', 'wp-strava' ) . '</th>';
|
||||
$max_title = '<th>' . __( 'Max Speed', 'wp-strava' ) . '</th>';
|
||||
$elevation_title = '<th>' . __( 'Elevation Gain', 'wp-strava' ) . '</th>';
|
||||
$avg_speed = '';
|
||||
$max_speed = '';
|
||||
$elevation = '<td>' . $strava_som->elevation( $activity_details->total_elevation_gain ) . '</td>';
|
||||
$speed_label = '';
|
||||
$elevation_label = '<td>' . $strava_som->get_elevation_label() . '</td>';
|
||||
|
||||
switch ( $strava_activitytype ) {
|
||||
case WPStrava_ActivityType::TYPE_GROUP_PACE:
|
||||
@@ -140,6 +143,12 @@ class WPStrava_ActivityShortcode {
|
||||
break;
|
||||
}
|
||||
|
||||
if ( WPStrava::get_instance()->settings->hide_elevation ) {
|
||||
$elevation = '';
|
||||
$elevation_title = '';
|
||||
$elevation_label = '';
|
||||
}
|
||||
|
||||
return '
|
||||
<table id="activity-details-table">
|
||||
<thead>
|
||||
@@ -149,7 +158,7 @@ class WPStrava_ActivityShortcode {
|
||||
<th>' . __( 'Distance', 'wp-strava' ) . '</th>
|
||||
' . $avg_title . '
|
||||
' . $max_title . '
|
||||
<th>' . __( 'Elevation Gain', 'wp-strava' ) . '</th>
|
||||
' . $elevation_title . '
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -159,7 +168,7 @@ class WPStrava_ActivityShortcode {
|
||||
<td>' . $strava_som->distance( $activity_details->distance ) . '</td>
|
||||
' . $avg_speed . '
|
||||
' . $max_speed . '
|
||||
<td>' . $strava_som->elevation( $activity_details->total_elevation_gain ) . '</td>
|
||||
' . $elevation . '
|
||||
</tr>
|
||||
<tr class="activity-details-table-units">
|
||||
<td>' . $strava_som->get_time_label() . '</td>
|
||||
@@ -167,7 +176,7 @@ class WPStrava_ActivityShortcode {
|
||||
<td>' . $strava_som->get_distance_label() . '</td>
|
||||
' . $speed_label . '
|
||||
' . $speed_label . '
|
||||
<td>' . $strava_som->get_elevation_label() . '</td>
|
||||
' . $elevation_label . '
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -55,8 +55,12 @@ class WPStrava_LatestActivities {
|
||||
$response .= sprintf( __( ' went %1$s %2$s', 'wp-strava' ), $som->distance( $activity->distance ), $som->get_distance_label() );
|
||||
// Translators: "during 2 hours"
|
||||
$response .= sprintf( __( ' during %1$s %2$s', 'wp-strava' ), $som->time( $activity->elapsed_time ), $som->get_time_label() );
|
||||
// Translators: "climbing 100 ft."
|
||||
$response .= sprintf( __( ' climbing %1$s %2$s', 'wp-strava' ), $som->elevation( $activity->total_elevation_gain ), $som->get_elevation_label() );
|
||||
|
||||
if ( ! WPStrava::get_instance()->settings->hide_elevation ) {
|
||||
// Translators: "climbing 100 ft."
|
||||
$response .= sprintf( __( ' climbing %1$s %2$s', 'wp-strava' ), $som->elevation( $activity->total_elevation_gain ), $som->get_elevation_label() );
|
||||
}
|
||||
|
||||
$response .= '</div></li>';
|
||||
}
|
||||
$response .= '</ul>';
|
||||
|
||||
@@ -110,25 +110,37 @@ class WPStrava_RouteShortcode {
|
||||
*/
|
||||
private function get_table( $route_details, $som ) {
|
||||
$strava_som = WPStrava_SOM::get_som( $som );
|
||||
|
||||
|
||||
$elevation_title = '<th>' . __( 'Elevation Gain', 'wp-strava' ) . '</th>';
|
||||
$elevation = '<td>' . $strava_som->elevation( $route_details->elevation_gain ) . '</td>';
|
||||
$elevation_label = '<td>' . $strava_som->get_elevation_label() . '</td>';
|
||||
|
||||
if ( WPStrava::get_instance()->settings->hide_elevation ) {
|
||||
$elevation = '';
|
||||
$elevation_title = '';
|
||||
$elevation_label = '';
|
||||
}
|
||||
|
||||
return '
|
||||
<table id="activity-details-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>' . __( 'Est. Moving Time', 'wp-strava' ) . '</th>
|
||||
<th>' . __( 'Distance', 'wp-strava' ) . '</th>
|
||||
<th>' . __( 'Elevation Gain', 'wp-strava' ) . '</th>
|
||||
' . $elevation_title . '
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="activity-details-table-info">
|
||||
<td>' . $strava_som->time( $route_details->estimated_moving_time ) . '</td>
|
||||
<td>' . $strava_som->distance( $route_details->distance ) . '</td>
|
||||
<td>' . $strava_som->elevation( $route_details->elevation_gain ) . '</td>
|
||||
' . $elevation . '
|
||||
</tr>
|
||||
<tr class="activity-details-table-units">
|
||||
<td>' . $strava_som->get_time_label() . '</td>
|
||||
<td>' . $strava_som->get_distance_label() . '</td>
|
||||
<td>' . $strava_som->get_elevation_label() . '</td>
|
||||
' . $elevation_label . '
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -33,9 +33,13 @@ abstract class WPStrava_SOM {
|
||||
* Create a time string of hours:minutes:seconds from just seconds.
|
||||
*
|
||||
* @return string Time formatted as 'H:i:s'.
|
||||
* @see https://stackoverflow.com/a/20870843/2146022
|
||||
*/
|
||||
public function time( $seconds ) {
|
||||
return date( 'H:i:s', mktime( 0, 0, $seconds ) );
|
||||
$zero = new DateTime( '@0' );
|
||||
$offset = new DateTime( "@{$seconds}" );
|
||||
$diff = $zero->diff( $offset );
|
||||
return sprintf( '%02d:%02d:%02d', $diff->days * 24 + $diff->h, $diff->i, $diff->s );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,13 +16,24 @@ class WPStrava_Settings {
|
||||
private $option_page = 'wp-strava-settings-group';
|
||||
private $adding_athlete = true;
|
||||
|
||||
//register admin menus
|
||||
/**
|
||||
* 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' ), 20 );
|
||||
add_action( 'admin_menu', array( $this, 'add_strava_menu' ) );
|
||||
add_filter( 'plugin_action_links_' . WPSTRAVA_PLUGIN_NAME, array( $this, 'settings_link' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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' ),
|
||||
@@ -33,6 +44,12 @@ class WPStrava_Settings {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register settings using the WP Settings API.
|
||||
*
|
||||
* @author Justin Foell <justin@foell.org>
|
||||
* @since 0.62
|
||||
*/
|
||||
public function register_strava_settings() {
|
||||
add_settings_section( 'strava_api', __( 'Strava API', 'wp-strava' ), array( $this, 'print_api_instructions' ), 'wp-strava' );
|
||||
|
||||
@@ -71,9 +88,11 @@ class WPStrava_Settings {
|
||||
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 Time Option.
|
||||
// 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' ) );
|
||||
@@ -81,6 +100,12 @@ class WPStrava_Settings {
|
||||
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() {
|
||||
$settings_url = 'https://www.strava.com/settings/api';
|
||||
$icon_url = 'https://plugins.svn.wordpress.org/wp-strava/assets/icon-128x128.png';
|
||||
@@ -118,6 +143,12 @@ class WPStrava_Settings {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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>
|
||||
@@ -127,22 +158,46 @@ class WPStrava_Settings {
|
||||
</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() {
|
||||
include WPSTRAVA_PLUGIN_DIR . 'templates/admin-settings.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->ids_empty( $this->ids ) ? __( 'Default', 'wp-strava' ) : '';
|
||||
?>
|
||||
@@ -150,6 +205,14 @@ class WPStrava_Settings {
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the strava ID(s).
|
||||
*
|
||||
* Renamed from print_token_input().
|
||||
*
|
||||
* @author Justin Foell <justin@foell.org>
|
||||
* @since 2.0
|
||||
*/
|
||||
public function print_id_input() {
|
||||
foreach ( $this->get_all_ids() as $id => $nickname ) {
|
||||
?>
|
||||
@@ -160,6 +223,14 @@ class WPStrava_Settings {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ) {
|
||||
@@ -172,6 +243,14 @@ class WPStrava_Settings {
|
||||
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 ) {
|
||||
@@ -184,6 +263,14 @@ class WPStrava_Settings {
|
||||
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 ) {
|
||||
|
||||
@@ -211,20 +298,50 @@ class WPStrava_Settings {
|
||||
return $nicknames;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitize the ID.
|
||||
*
|
||||
* Renamed from sanitize_token().
|
||||
*
|
||||
* @param string $token
|
||||
* @return string
|
||||
* @author Justin Foell <justin@foell.org>
|
||||
* @since 2.0
|
||||
*/
|
||||
public function sanitize_id( $id ) {
|
||||
return $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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">
|
||||
@@ -234,6 +351,14 @@ class WPStrava_Settings {
|
||||
<?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;
|
||||
}
|
||||
@@ -265,12 +390,53 @@ class WPStrava_Settings {
|
||||
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;
|
||||
@@ -495,6 +661,13 @@ class WPStrava_Settings {
|
||||
return ! ( empty( $_POST['strava_client_id'] ) && empty( $_POST['strava_client_secret'] ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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}";
|
||||
@@ -503,6 +676,14 @@ class WPStrava_Settings {
|
||||
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;
|
||||
|
||||
@@ -23,7 +23,7 @@ class WPStrava_StaticMap {
|
||||
return '';
|
||||
}
|
||||
|
||||
$url = "https://maps.googleapis.com/maps/api/staticmap?maptype=terrain&size={$width}x{$height}&sensor=false&key={$key}&path=color:0xFF0000BF|weight:2|enc:";
|
||||
$url = "https://maps.googleapis.com/maps/api/staticmap?maptype=terrain&size={$width}x{$height}&scale=2&sensor=false&key={$key}&path=color:0xFF0000BF|weight:2|enc:";
|
||||
$url_len = strlen( $url );
|
||||
$max_chars = 1865;
|
||||
|
||||
|
||||
+8
-1
@@ -4,7 +4,7 @@ Contributors: cmanon, jrfoell, lancewillett, dlintott, sebastianerb
|
||||
Tags: strava, activity, bicycle, cycling, biking, running, run, swimming, swim, gps, shortcode, widget, plugin
|
||||
Requires at least: 4.6
|
||||
Tested up to: 5.1
|
||||
Stable tag: 1.7.1
|
||||
Stable tag: 1.7.2
|
||||
Requires PHP: 5.2
|
||||
License: GPLv2 or later
|
||||
|
||||
@@ -88,6 +88,13 @@ WP-Strava caches activity for one hour so your site doesn't hit the Strava API o
|
||||
Added new Strava "refresh tokens" ala https://developers.strava.com/docs/oauth-updates/#migration-instructions
|
||||
|
||||
|
||||
= 1.7.2 =
|
||||
|
||||
Added setting to hide elevation.
|
||||
Fixed hours for activities greater than 24 hours.
|
||||
Added scale=2 to static map to which allows for greater pixel resolution (up to 1024x1024 at 2x) for Google Maps API Premium Plan subscribers https://developers.google.com/maps/documentation/maps-static/dev-guide#Imagesizes
|
||||
|
||||
|
||||
= 1.7.1 =
|
||||
|
||||
Added PHPUnit tests for all System of Measure calculations.
|
||||
|
||||
@@ -80,4 +80,16 @@ class WPStrava_SOMEnglishTest extends TestCase {
|
||||
$this->assertEquals( '01:20:05', $this->som->time( 4805 ) );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that 221071 seconds is 61:24:31 time (H:i:s) using both string and float inputs.
|
||||
*
|
||||
* @author Justin Foell <justin@foell.org>
|
||||
* @since 1.7.2
|
||||
*/
|
||||
public function test_time_greater24h() {
|
||||
$this->assertEquals( '61:24:31', $this->som->time( '221071' ) );
|
||||
$this->assertEquals( '61:24:31', $this->som->time( 221071 ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* Plugin Name: WP Strava
|
||||
* Plugin URI: https://wordpress.org/plugins/wp-strava/
|
||||
* Description: Show your strava.com activity on your WordPress site. Some Icons are Copyright © Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 license.
|
||||
* Version: 1.7.1
|
||||
* Version: 1.7.2
|
||||
* Author: Carlos Santa Cruz, Justin Foell, Lance Willett, Daniel Lintott, Sebastian Erb
|
||||
* License: GPL2
|
||||
* Text Domain: wp-strava
|
||||
|
||||
Reference in New Issue
Block a user