X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialWatchlist.php;h=ff62e9e6033dafc7b464fd1532d475a7151d7689;hb=db7d59355e4c8b70fc0a510f9bfde93134d6991c;hp=4f4570e3f83f0092d0c8e5bf09564480f78f66e4;hpb=606dced3ff34b49dcc595a51b2ca899f8c19aa83;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php index 4f4570e3f8..ff62e9e603 100644 --- a/includes/specials/SpecialWatchlist.php +++ b/includes/specials/SpecialWatchlist.php @@ -101,7 +101,6 @@ class SpecialWatchlist extends ChangesListSpecialPage { if ( $this->isStructuredFilterUiEnabled() ) { $output->addModuleStyles( [ 'mediawiki.rcfilters.highlightCircles.seenunseen.styles' ] ); - $output->addJsConfigVars( 'wgStructuredChangeFiltersLiveUpdateSupported', false ); $output->addJsConfigVars( 'wgStructuredChangeFiltersEditWatchlistUrl', SpecialPage::getTitleFor( 'EditWatchlist' )->getLocalURL() @@ -249,6 +248,22 @@ class SpecialWatchlist extends ChangesListSpecialPage { $hideLiu = $registration->getFilter( 'hideliu' ); $hideLiu->setDefault( $user->getBoolOption( 'watchlisthideliu' ) ); + // Selecting both hideanons and hideliu on watchlist preferances + // gives mutually exclusive filters, so those are ignored + if ( $user->getBoolOption( 'watchlisthideanons' ) && + !$user->getBoolOption( 'watchlisthideliu' ) + ) { + $this->getFilterGroup( 'userExpLevel' ) + ->setDefault( 'registered' ); + } + + if ( $user->getBoolOption( 'watchlisthideliu' ) && + !$user->getBoolOption( 'watchlisthideanons' ) + ) { + $this->getFilterGroup( 'userExpLevel' ) + ->setDefault( 'unregistered' ); + } + $reviewStatus = $this->getFilterGroup( 'reviewStatus' ); if ( $reviewStatus !== null ) { // Conditional on feature being available and rights @@ -268,26 +283,6 @@ class SpecialWatchlist extends ChangesListSpecialPage { } } - /** - * Get a FormOptions object containing the default options - * - * @return FormOptions - */ - public function getDefaultOptions() { - $opts = parent::getDefaultOptions(); - - $opts->add( 'days', $this->getDefaultDays(), FormOptions::FLOAT ); - $opts->add( 'limit', $this->getDefaultLimit(), FormOptions::INT ); - - return $opts; - } - - public function validateOptions( FormOptions $opts ) { - $opts->validateBounds( 'days', 0, $this->maxDays ); - $opts->validateIntBounds( 'limit', 0, 5000 ); - parent::validateOptions( $opts ); - } - /** * Get all custom filters * @@ -338,15 +333,8 @@ class SpecialWatchlist extends ChangesListSpecialPage { // This is how we handle the fact that HTML forms don't submit // unchecked boxes. - foreach ( $this->filterGroups as $filterGroup ) { - if ( $filterGroup instanceof ChangesListBooleanFilterGroup ) { - /** @var ChangesListBooleanFilter $filter */ - foreach ( $filterGroup->getFilters() as $filter ) { - if ( $filter->displaysOnUnstructuredUi() ) { - $allBooleansFalse[$filter->getName()] = false; - } - } - } + foreach ( $this->getLegacyShowHideFilters() as $filter ) { + $allBooleansFalse[ $filter->getName() ] = false; } $params = $params + $allBooleansFalse; @@ -360,23 +348,6 @@ class SpecialWatchlist extends ChangesListSpecialPage { return $opts; } - /** - * @inheritDoc - */ - protected function buildQuery( &$tables, &$fields, &$conds, &$query_options, - &$join_conds, FormOptions $opts - ) { - $dbr = $this->getDB(); - parent::buildQuery( $tables, $fields, $conds, $query_options, $join_conds, - $opts ); - - // Calculate cutoff - if ( $opts['days'] > 0 ) { - $conds[] = 'rc_timestamp > ' . - $dbr->addQuotes( $dbr->timestamp( time() - $opts['days'] * 3600 * 24 ) ); - } - } - /** * @inheritDoc */ @@ -386,8 +357,9 @@ class SpecialWatchlist extends ChangesListSpecialPage { $dbr = $this->getDB(); $user = $this->getUser(); - $tables = array_merge( [ 'recentchanges', 'watchlist' ], $tables ); - $fields = array_merge( RecentChange::selectFields(), $fields ); + $rcQuery = RecentChange::getQueryInfo(); + $tables = array_merge( $tables, $rcQuery['tables'], [ 'watchlist' ] ); + $fields = array_merge( $rcQuery['fields'], $fields ); $join_conds = array_merge( [ @@ -400,6 +372,7 @@ class SpecialWatchlist extends ChangesListSpecialPage { ], ], ], + $rcQuery['joins'], $join_conds ); @@ -646,16 +619,14 @@ class SpecialWatchlist extends ChangesListSpecialPage { } $lang = $this->getLanguage(); - if ( $opts['days'] > 0 ) { - $days = $opts['days']; - } else { - $days = $this->maxDays; - } $timestamp = wfTimestampNow(); $wlInfo = Html::rawElement( 'span', - [ 'class' => 'wlinfo' ], - $this->msg( 'wlnote' )->numParams( $numRows, round( $days * 24 ) )->params( + [ + 'class' => 'wlinfo', + 'data-params' => json_encode( [ 'from' => $timestamp ] ), + ], + $this->msg( 'wlnote' )->numParams( $numRows, round( $opts['days'] * 24 ) )->params( $lang->userDate( $timestamp, $user ), $lang->userTime( $timestamp, $user ) )->parse() ) . "
\n"; @@ -670,21 +641,15 @@ class SpecialWatchlist extends ChangesListSpecialPage { # Spit out some control panel links $links = []; $namesOfDisplayedFilters = []; - foreach ( $this->getFilterGroups() as $groupName => $group ) { - if ( !$group->isPerGroupRequestParameter() ) { - foreach ( $group->getFilters() as $filterName => $filter ) { - if ( $filter->displaysOnUnstructuredUi( $this ) ) { - $namesOfDisplayedFilters[] = $filterName; - $links[] = $this->showHideCheck( - $nondefaults, - $filter->getShowHide(), - $filterName, - $opts[$filterName], - $filter->isFeatureAvailableOnStructuredUi( $this ) - ); - } - } - } + foreach ( $this->getLegacyShowHideFilters() as $filterName => $filter ) { + $namesOfDisplayedFilters[] = $filterName; + $links[] = $this->showHideCheck( + $nondefaults, + $filter->getShowHide(), + $filterName, + $opts[ $filterName ], + $filter->isFeatureAvailableOnStructuredUi( $this ) + ); } $hiddenFields = $nondefaults;