som = WPStrava_SOM::get_som(); parent::__construct( false, __( 'Strava Latest Map', 'wp-strava' ), // Name array( 'description' => __( 'Strava latest activity using static google map image', 'wp-strava' ) ) // Args. ); } public function form( $instance ) { // outputs the options form on admin $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : __( 'Latest Activity Map', 'wp-strava' ); $all_tokens = WPStrava::get_instance()->settings->get_all_tokens(); $athlete_token = isset( $instance['athlete_token'] ) ? esc_attr( $instance['athlete_token'] ) : WPStrava::get_instance()->settings->get_default_token(); $distance_min = isset( $instance['distance_min'] ) ? esc_attr( $instance['distance_min'] ) : ''; $strava_club_id = isset( $instance['strava_club_id'] ) ? esc_attr( $instance['strava_club_id'] ) : ''; ?>

settings->get_default_token(); $distance_min = empty( $instance['distance_min'] ) ? 0 : absint( $instance['distance_min'] ); $strava_club_id = empty( $instance['strava_club_id'] ) ? null : $instance['strava_club_id']; $build_new = false; $id = empty( $strava_club_id ) ? $athlete_token : $strava_club_id; // Try our transient first. $activity_transient = get_transient( 'strava_latest_map_activity_' . $id ); $activity_option = get_option( 'strava_latest_map_activity_' . $id ); $activity = $activity_transient ? $activity_transient : null; echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } if ( ! $activity || empty( $activity->map ) ) { $strava_activity = WPStrava::get_instance()->activity; $activities = array(); try { $activities = $strava_activity->get_activities( $athlete_token, $strava_club_id ); } catch ( WPStrava_Exception $e ) { echo $e->to_html(); } if ( ! empty( $activities ) ) { if ( ! empty( $distance_min ) ) { $activities = $strava_activity->get_activities_longer_than( $activities, $distance_min ); } $activity = current( $activities ); // Compare transient (temporary storage) to option (more permanent). // If the option isn't set or the transient is different, update the option. if ( empty( $activity_option->id ) || $activity->id != $activity_option->id ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison $build_new = true; $this->update_activity( $id, $activity ); } // Update the transient if it needs updating. if ( empty( $activity_transient->id ) || $activity->id != $activity_transient->id ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison $this->update_activity_transient( $id, $activity ); } } } if ( $activity ) { echo empty( $activity->map ) ? // Translators: Text with activity name shown in place of image if not available. sprintf( __( 'Map not available for activity "%s"', 'wp-strava' ), $activity->name ) : "" . $this->get_static_image( $id, $activity, $build_new ) . ''; } echo $args['after_widget']; } /** * Get image for specific activity using Static Maps class. * * @author Justin Foell * @param string $id Athlete Token or Club ID. * @param object $activity Activity to get image for. * @param boolean $build_new Whether to refresh the image from cache. * @return string Image tag. */ private function get_static_image( $id, $activity, $build_new ) { $img = get_option( 'strava_latest_map_' . $id ); if ( $build_new || ! $img ) { $img = WPStrava_StaticMap::get_image_tag( $activity ); $this->update_map( $id, $img ); } return $img; } /** * Update map in option to cache. * * @author Justin Foell * @since 1.2.0 * @param string $id Athlete Token or Club ID. * @param string $img Image tag. */ private function update_map( $id, $img ) { update_option( 'strava_latest_map_' . $id, $img ); } /** * Update activity in option to cache. * * @author Justin Foell * @since 1.2.0 * @param string $id Athlete Token or Club ID. * @param object $activity stdClass Strava activity object. */ private function update_activity( $id, $activity ) { update_option( 'strava_latest_map_activity_' . $id, $activity ); } /** * Update activity in transient to cache. * * @author Justin Foell * @since 1.2.0 * @param string $id Athlete Token or Club ID. * @param object $activity stdClass Strava activity object. */ private function update_activity_transient( $id, $activity ) { set_transient( 'strava_latest_map_activity_' . $id, $activity, HOUR_IN_SECONDS ); } }