diff --git a/lib/LatestMapWidget.class.php b/lib/LatestMapWidget.class.php index d54aa64..06204a5 100644 --- a/lib/LatestMapWidget.class.php +++ b/lib/LatestMapWidget.class.php @@ -56,38 +56,85 @@ class WPStrava_LatestMapWidget extends WP_Widget { extract( $args ); $ride_index_params = $instance['ride_index_params']; $distance_min = $instance['distance_min']; - - $rides = $this->getRides( $ride_index_params ); - - if ( ! empty( $rides ) ): - - if ( ! empty( $distance_min ) ) - $rides = $this->getRidesLongerThan( $rides, $distance_min ); + $build_new = false; - $ride = current( $rides ); + //try our transient first + $ride_transient = get_transient( 'strava_latest_map_ride' ); + $ride_option = get_option( 'strava_latest_map_ride' ); - $map_deets = $this->getMapDetails( $ride->id ); + if ( $ride_transient ) + $ride = $ride_transient; + + if ( ! $ride ) { + $rides = $this->getRides( $ride_index_params ); + if ( ! empty( $rides ) ) { - echo $before_widget; + if ( ! empty( $distance_min ) ) + $rides = $this->getRidesLongerThan( $rides, $distance_min ); - $max = 50; - $count = count( $map_deets->latlng ); - $mod = (int) ( $count / $max ); + $ride = current( $rides ); + + //update transients & options + if ( $ride->id != $ride_option->id ) { + $build_new = true; + update_option( 'strava_latest_map_ride', $ride ); + } + + if ( $ride->id != $ride_transient->id ) + set_transient( 'strava_latest_map_ride', $ride, 60 * 60 ); //one hour + } + } + + if ( $ride ): + echo $before_widget; + //die('
' . print_r($ride, true)); + ?>ride->name ?>
+ getStaticImage( $ride->id, $build_new ); + ?>latlng ); + $full_url = ''; + $max_chars = 1865; + + //get the longest usable URL + while ( $url_len + $point_len < $max_chars ) { + $mod = (int) ( $count / $num ); $points = array(); for ( $i = 0; $i < $count; $i += $mod ) { - $point = $map_deets->latlng[$i]; - $points[] = number_format( $point[0],4 ) . ',' . number_format( $point[1],4 ); + $point = $map_details->latlng[$i]; + $points[] = number_format( $point[0], 4 ) . ',' . number_format( $point[1], 4 ); } $url_points = join( '|', $points ); - echo ""; - /* - echo '
'; - print_r($map_deets); - echo ''; - */ - echo $after_widget; - endif; + $point_len = strlen( $url_points ); + if ( $url_len + $point_len < $max_chars ) + $full_url = $url . $url_points; + $num++; + } + + return ""; + } + + private function getStaticImage( $ride_id, $build_new ) { + + $img = get_option( 'strava_latest_map' ); + + if ( $build_new || ! $img ) { + $map_details = $this->getMapDetails( $ride_id ); + $img = $this->buildImage( $map_details ); + update_option( 'strava_latest_map', $img ); + } + + return $img; } private function getRides( $params ) { @@ -104,7 +151,7 @@ class WPStrava_LatestMapWidget extends WP_Widget { private function getRidesLongerThan( $rides, $dist ) { $meters = $this->som->distance_inverse( $dist ); - + $long_rides = array(); foreach ( $rides as $ride ) { $ride_info = $this->getRideInfo( $ride->id ); @@ -112,6 +159,7 @@ class WPStrava_LatestMapWidget extends WP_Widget { $long_rides[] = $ride_info; } } + return $long_rides; } diff --git a/lib/SOMEnglish.class.php b/lib/SOMEnglish.class.php index ee9ee8f..8cc6103 100644 --- a/lib/SOMEnglish.class.php +++ b/lib/SOMEnglish.class.php @@ -12,10 +12,10 @@ class WPStrava_SOMEnglish extends WPStrava_SOM { /** * @param string $dist miles - * @return string meters + * @return float meters */ public function distance_inverse( $dist ) { - return number_format( $dist * 1609.344, 2 ); + return $dist * 1609.344; } public function get_distance_label() { diff --git a/lib/SOMMetric.class.php b/lib/SOMMetric.class.php index 087d13e..08b92e6 100644 --- a/lib/SOMMetric.class.php +++ b/lib/SOMMetric.class.php @@ -14,7 +14,7 @@ class WPStrava_SOMMetric extends WPStrava_SOM * @return string meters */ public function distance_inverse( $dist ) { - return number_format( $dist * 1000, 2 ); + return $dist * 1000; } public function get_distance_label() {