}
function cutoffselector( $options ) {
+ $userWatchlistOption = $this->getUser()->getOption( 'watchlistdays' );
+
$list = array();
$selectOptions = '';
$hours = array( 1, 2, 6, 12 );
$days = array( 1, 3, 7 );
+ // add the user preference, if it isn't available already
+ if ( $userWatchlistOption >= 1 && !in_array( $userWatchlistOption, $days ) ) {
+ $days[] = $userWatchlistOption;
+ asort( $days );
+ } elseif ( $userWatchlistOption < 1 && !in_array( $userWatchlistOption * 24, $hours ) ) {
+ $hours[] = $userWatchlistOption * 24;
+ asort( $hours );
+ }
foreach ( $hours as $h ) {
- $name = $this->msg( 'hours', $h );
+ $name = $this->msg( 'hours' )->numParams( $h );
$value = $h / 24;
- $selected = ( $value == $options['days'] ) ? true : false;
+ // due to the possible addition of a user value, it's possible, that both
+ // values ($value and $options['days']) are floats with unexpected comparison
+ // behaviour. Comparing them directly can result in a "not equality" result,
+ // even if the "visible" floats would be the same (e.g. if the user value is
+ // float(0.4)). See PHP docs about Comparing floats.
+ $selected = abs( $value - $options['days'] ) < 0.00001;
$selectOptions .= Xml::option( $name, $value, $selected );
}
foreach ( $days as $d ) {
- $name = $this->msg( 'days', $d );
+ $name = $this->msg( 'days' )->numParams( $d );
$value = $d;
- $selected = ( $value == $options['days'] ) ? true : false;
+ $selected = $value == $options['days'];
$selectOptions .= Xml::option( $name, $value, $selected );
}