2013-03-31 21:28:49 -05:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
abstract class WPStrava_SOM {
|
|
|
|
|
|
2018-01-26 13:27:57 -06:00
|
|
|
/**
|
|
|
|
|
* Factory method to get the correct SOM class based on specified units
|
|
|
|
|
* or by the options setting.
|
|
|
|
|
*
|
|
|
|
|
* @param string $som 'english' or 'metric'
|
|
|
|
|
* @return WPStrava_SOM Instance of SOM
|
2019-02-01 14:17:22 -06:00
|
|
|
* @author Justin Foell <justin@foell.org>
|
2018-01-26 13:27:57 -06:00
|
|
|
*/
|
2017-05-26 10:53:24 -05:00
|
|
|
public static function get_som( $som = null ) {
|
2013-03-31 21:28:49 -05:00
|
|
|
$som = $som ? $som : WPStrava::get_instance()->settings->som;
|
2017-12-26 14:18:13 -06:00
|
|
|
if ( 'english' === $som ) {
|
2013-03-31 21:28:49 -05:00
|
|
|
return new WPStrava_SOMEnglish();
|
|
|
|
|
}
|
2018-01-26 13:27:57 -06:00
|
|
|
// Default to metric.
|
|
|
|
|
return new WPStrava_SOMMetric();
|
2013-03-31 21:28:49 -05:00
|
|
|
}
|
2017-05-10 13:52:49 -05:00
|
|
|
|
2013-03-31 21:28:49 -05:00
|
|
|
abstract public function distance( $m );
|
|
|
|
|
abstract public function distance_inverse( $dist );
|
|
|
|
|
abstract public function get_distance_label();
|
|
|
|
|
abstract public function speed( $mps );
|
|
|
|
|
abstract public function get_speed_label();
|
|
|
|
|
abstract public function elevation( $m );
|
|
|
|
|
abstract public function get_elevation_label();
|
2018-11-09 15:18:27 -06:00
|
|
|
abstract public function pace( $mps );
|
|
|
|
|
abstract public function get_pace_label();
|
2013-03-31 21:28:49 -05:00
|
|
|
|
2019-03-01 11:41:41 -06:00
|
|
|
/**
|
|
|
|
|
* Create a time string of hours:minutes:seconds from just seconds.
|
|
|
|
|
*
|
|
|
|
|
* @return string Time formatted as 'H:i:s'.
|
2019-08-02 14:56:49 -05:00
|
|
|
* @see https://stackoverflow.com/a/20870843/2146022
|
2019-03-01 11:41:41 -06:00
|
|
|
*/
|
2013-04-07 17:56:07 -05:00
|
|
|
public function time( $seconds ) {
|
2019-08-02 14:56:49 -05:00
|
|
|
$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 );
|
2013-04-07 17:56:07 -05:00
|
|
|
}
|
|
|
|
|
|
2019-03-01 11:41:41 -06:00
|
|
|
/**
|
|
|
|
|
* Label for hours.
|
|
|
|
|
*
|
|
|
|
|
* @return string 'hours'
|
|
|
|
|
*/
|
2013-04-07 17:56:07 -05:00
|
|
|
public function get_time_label() {
|
|
|
|
|
return __( 'hours', 'wp-strava' );
|
|
|
|
|
}
|
2019-02-01 12:48:19 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Abbreviated label for this system of measure's pace - Minutes Per 100 Meters: min/100m. Same for English/metric.
|
|
|
|
|
*
|
|
|
|
|
* @return string 'min/100m'
|
|
|
|
|
*/
|
|
|
|
|
public function get_swimpace_label() {
|
|
|
|
|
return __( 'min/100m', 'wp-strava' );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Change meters per second to Minutes Per 100 Meters. Same for English/metric.
|
|
|
|
|
*
|
2019-03-01 11:41:41 -06:00
|
|
|
* @param float|string $mps Meters per second.
|
|
|
|
|
* @return string Minutes Per 100 Meters.
|
2019-02-01 12:48:19 -06:00
|
|
|
*/
|
|
|
|
|
public function swimpace( $mps ) {
|
|
|
|
|
|
2019-03-01 12:23:34 -06:00
|
|
|
$kmh = $mps * 3.6;
|
|
|
|
|
$s = 3600 / $kmh / 10;
|
|
|
|
|
$ss = $s / 60;
|
|
|
|
|
$ms = floor( $ss ) * 60;
|
|
|
|
|
$sec = sprintf( '%02d', round( $s - $ms ) );
|
|
|
|
|
$min = floor( $ss );
|
2019-02-01 12:48:19 -06:00
|
|
|
|
2019-03-01 12:23:34 -06:00
|
|
|
return "{$min}:{$sec}";
|
2019-02-01 12:48:19 -06:00
|
|
|
}
|
2017-05-10 13:52:49 -05:00
|
|
|
}
|