* @since 1.6.0 */ public function __construct() { add_shortcode( 'route', array( $this, 'handler' ) ); add_action( 'wp_footer', array( $this, 'print_scripts' ) ); } /** * Shortcode handler for [route]. * * [route id=id som=metric map_width="100%" map_height="400px" markers=false] * * @param array $atts Array of attributes (id, map_width, etc.). * @return string Shortcode output * @author Daniel Lintott * @since 1.3.0 */ public function handler( $atts ) { if ( isset( $atts['athlete_token'] ) ) { // Translators: Message shown when using deprecated athlete_token parameter. return __( 'The athlete_token parameter is deprecated as of WP-Strava version 2 and should be replaced with client_id.', 'wp-strava' ); } $this->add_script = true; $defaults = array( 'id' => 0, 'som' => WPStrava::get_instance()->settings->som, 'map_width' => '480', 'map_height' => '320', 'client_id' => WPStrava::get_instance()->settings->get_default_id(), 'markers' => false, 'image_only' => false, ); $atts = shortcode_atts( $defaults, $atts, 'route' ); /* Make sure boolean values are actually boolean * @see https://wordpress.stackexchange.com/a/119299 */ $atts['markers'] = filter_var( $atts['markers'], FILTER_VALIDATE_BOOLEAN ); $atts['image_only'] = filter_var( $atts['image_only'], FILTER_VALIDATE_BOOLEAN ); $route = WPStrava::get_instance()->routes; $route_details = null; try { $route_details = $route->get_route( $atts['id'] ); } catch ( WPStrava_Exception $e ) { return $e->to_html(); } $route_output = ''; if ( $route_details ) { $route_output = '
'; if ( ! $atts['image_only'] ) { $route_output .= $this->get_table( $route_details, $atts['som'] ); } // Sanitize width & height. $map_width = str_replace( '%', '', $atts['map_width'] ); $map_height = str_replace( '%', '', $atts['map_height'] ); $map_width = str_replace( 'px', '', $map_width ); $map_height = str_replace( 'px', '', $map_height ); $route_output .= '' . WPStrava_StaticMap::get_image_tag( $route_details, $map_height, $map_width, $atts['markers'] ) . '
'; } // End if( $route_details ). return $route_output; } /** * The the route details in in HTML table. * * @param string $route_details route details from the route class. * @param string $som System of measure (english/metric). * @return string HTML Table of route details. * @author Justin Foell * @since 1.7.0 */ private function get_table( $route_details, $som ) { $strava_som = WPStrava_SOM::get_som( $som ); $elevation_title = '' . __( 'Elevation Gain', 'wp-strava' ) . ''; $elevation = '' . $strava_som->elevation( $route_details->elevation_gain ) . ''; $elevation_label = '' . $strava_som->get_elevation_label() . ''; if ( WPStrava::get_instance()->settings->hide_elevation ) { $elevation = ''; $elevation_title = ''; $elevation_label = ''; } return ' ' . $elevation_title . ' ' . $elevation . ' ' . $elevation_label . '
' . __( 'Est. Moving Time', 'wp-strava' ) . ' ' . __( 'Distance', 'wp-strava' ) . '
' . $strava_som->time( $route_details->estimated_moving_time ) . ' ' . $strava_som->distance( $route_details->distance ) . '
' . $strava_som->get_time_label() . ' ' . $strava_som->get_distance_label() . '
'; } /** * Enqueue style if shortcode is being used. * * @author Daniel Lintott * @since 1.3.0 */ public function print_scripts() { if ( $this->add_script ) { wp_enqueue_style( 'wp-strava-style' ); } } }