}
}
- /**
- * Get all custom filters
- *
- * @return array Map of filter URL param names to properties (msg/default)
- */
- protected function getCustomFilters() {
- if ( $this->customFilters === null ) {
- $this->customFilters = parent::getCustomFilters();
- Hooks::run( 'SpecialWatchlistFilters', [ $this, &$this->customFilters ], '1.23' );
- }
-
- return $this->customFilters;
- }
-
/**
* Fetch values for a FormOptions object from the WebRequest associated with this instance.
*
$dbr = $this->getDB();
$user = $this->getUser();
$output = $this->getOutput();
+ $services = MediaWikiServices::getInstance();
# Show a message about replica DB lag, if applicable
- $lag = MediaWikiServices::getInstance()->getDBLoadBalancer()->safeGetLag( $dbr );
+ $lag = $services->getDBLoadBalancer()->safeGetLag( $dbr );
if ( $lag > 0 ) {
$output->showLagWarning( $lag );
}
if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
&& $user->getOption( 'shownumberswatching' )
) {
- $watchedItemStore = MediaWikiServices::getInstance()->getWatchedItemStore();
+ $watchedItemStore = $services->getWatchedItemStore();
}
$s = $list->beginRecentChangesList();
}
function cutoffselector( $options ) {
- // Cast everything to strings immediately, so that we know all of the values have the same
- // precision, and can be compared with '==='. 2/24 has a few more decimal places than its
- // default string representation, for example, and would confuse comparisons.
-
- // Misleadingly, the 'days' option supports hours too.
- $days = array_map( 'strval', [ 1 / 24, 2 / 24, 6 / 24, 12 / 24, 1, 3, 7 ] );
-
- $userWatchlistOption = (string)$this->getUser()->getOption( 'watchlistdays' );
- // add the user preference, if it isn't available already
- if ( !in_array( $userWatchlistOption, $days ) && $userWatchlistOption !== '0' ) {
- $days[] = $userWatchlistOption;
- }
-
- $maxDays = (string)$this->maxDays;
- // add the maximum possible value, if it isn't available already
- if ( !in_array( $maxDays, $days ) ) {
- $days[] = $maxDays;
- }
-
- $selected = (string)$options['days'];
+ $selected = (float)$options['days'];
if ( $selected <= 0 ) {
- $selected = $maxDays;
- }
-
- // add the currently selected value, if it isn't available already
- if ( !in_array( $selected, $days ) ) {
- $days[] = $selected;
- }
+ $selected = $this->maxDays;
+ }
+
+ $selectedHours = round( $selected * 24 );
+
+ $hours = array_unique( array_filter( [
+ 1,
+ 2,
+ 6,
+ 12,
+ 24,
+ 72,
+ 168,
+ 24 * (float)$this->getUser()->getOption( 'watchlistdays', 0 ),
+ 24 * $this->maxDays,
+ $selectedHours
+ ] ) );
+ asort( $hours );
- $select = new XmlSelect( 'days', 'days', $selected );
+ $select = new XmlSelect( 'days', 'days', (float)( $selectedHours / 24 ) );
- asort( $days );
- foreach ( $days as $value ) {
- if ( $value < 1 ) {
- $name = $this->msg( 'hours' )->numParams( $value * 24 )->text();
+ foreach ( $hours as $value ) {
+ if ( $value < 24 ) {
+ $name = $this->msg( 'hours' )->numParams( $value )->text();
} else {
- $name = $this->msg( 'days' )->numParams( $value )->text();
+ $name = $this->msg( 'days' )->numParams( $value / 24 )->text();
}
- $select->addOption( $name, $value );
+ $select->addOption( $name, (float)( $value / 24 ) );
}
return $select->getHTML() . "\n<br />\n";