X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fspecialpage%2FChangesListSpecialPage.php;h=ac13f113b2119f19904ba87f489f67897759ddbf;hp=b9d20bea1689dfa170deae38ff16a8bd0d5d38db;hb=478a58f63101f2b47d18a618296b5e7970fa3f24;hpb=6f9c30c67b31b12d39f2d54b431e141869895eca diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php index b9d20bea16..ac13f113b2 100644 --- a/includes/specialpage/ChangesListSpecialPage.php +++ b/includes/specialpage/ChangesListSpecialPage.php @@ -22,7 +22,7 @@ */ use MediaWiki\Logger\LoggerFactory; use Wikimedia\Rdbms\DBQueryTimeoutError; -use Wikimedia\Rdbms\ResultWrapper; +use Wikimedia\Rdbms\IResultWrapper; use Wikimedia\Rdbms\FakeResultWrapper; use Wikimedia\Rdbms\IDatabase; @@ -87,9 +87,12 @@ abstract class ChangesListSpecialPage extends SpecialPage { // Same format as filterGroupDefinitions, but for a single group (reviewStatus) // that is registered conditionally. + private $legacyReviewStatusFilterGroupDefinition; + + // Single filter group registered conditionally private $reviewStatusFilterGroupDefinition; - // Single filter registered conditionally + // Single filter group registered conditionally private $hideCategorizationFilterDefinition; /** @@ -276,7 +279,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { 'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds, &$query_options, &$join_conds ) { - $conds[] = 'rc_bot = 0'; + $conds['rc_bot'] = 0; }, 'cssClassSuffix' => 'bot', 'isRowApplicableCallable' => function ( $ctx, $rc ) { @@ -291,7 +294,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { 'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds, &$query_options, &$join_conds ) { - $conds[] = 'rc_bot = 1'; + $conds['rc_bot'] = 1; }, 'cssClassSuffix' => 'human', 'isRowApplicableCallable' => function ( $ctx, $rc ) { @@ -301,7 +304,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { ] ], - // reviewStatus (conditional) + // significance (conditional) [ 'name' => 'significance', @@ -457,17 +460,14 @@ abstract class ChangesListSpecialPage extends SpecialPage { ]; - $this->reviewStatusFilterGroupDefinition = [ + $this->legacyReviewStatusFilterGroupDefinition = [ [ - 'name' => 'reviewStatus', + 'name' => 'legacyReviewStatus', 'title' => 'rcfilters-filtergroup-reviewstatus', 'class' => ChangesListBooleanFilterGroup::class, - 'priority' => -5, 'filters' => [ [ 'name' => 'hidepatrolled', - 'label' => 'rcfilters-filter-patrolled-label', - 'description' => 'rcfilters-filter-patrolled-description', // rcshowhidepatr-show, rcshowhidepatr-hide // wlshowhidepatr 'showHideSuffix' => 'showhidepatr', @@ -475,29 +475,77 @@ abstract class ChangesListSpecialPage extends SpecialPage { 'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds, &$query_options, &$join_conds ) { - $conds[] = 'rc_patrolled = 0'; - }, - 'cssClassSuffix' => 'patrolled', - 'isRowApplicableCallable' => function ( $ctx, $rc ) { - return $rc->getAttribute( 'rc_patrolled' ); + $conds['rc_patrolled'] = RecentChange::PRC_UNPATROLLED; }, + 'isReplacedInStructuredUi' => true, ], [ 'name' => 'hideunpatrolled', - 'label' => 'rcfilters-filter-unpatrolled-label', - 'description' => 'rcfilters-filter-unpatrolled-description', 'default' => false, 'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds, &$query_options, &$join_conds ) { - $conds[] = 'rc_patrolled != 0'; + $conds[] = 'rc_patrolled != ' . RecentChange::PRC_UNPATROLLED; + }, + 'isReplacedInStructuredUi' => true, + ], + ], + ] + ]; + + $this->reviewStatusFilterGroupDefinition = [ + [ + 'name' => 'reviewStatus', + 'title' => 'rcfilters-filtergroup-reviewstatus', + 'class' => ChangesListStringOptionsFilterGroup::class, + 'isFullCoverage' => true, + 'priority' => -5, + 'filters' => [ + [ + 'name' => 'unpatrolled', + 'label' => 'rcfilters-filter-reviewstatus-unpatrolled-label', + 'description' => 'rcfilters-filter-reviewstatus-unpatrolled-description', + 'cssClassSuffix' => 'reviewstatus-unpatrolled', + 'isRowApplicableCallable' => function ( $ctx, $rc ) { + return $rc->getAttribute( 'rc_patrolled' ) == RecentChange::PRC_UNPATROLLED; }, - 'cssClassSuffix' => 'unpatrolled', + ], + [ + 'name' => 'manual', + 'label' => 'rcfilters-filter-reviewstatus-manual-label', + 'description' => 'rcfilters-filter-reviewstatus-manual-description', + 'cssClassSuffix' => 'reviewstatus-manual', 'isRowApplicableCallable' => function ( $ctx, $rc ) { - return !$rc->getAttribute( 'rc_patrolled' ); + return $rc->getAttribute( 'rc_patrolled' ) == RecentChange::PRC_PATROLLED; + }, + ], + [ + 'name' => 'auto', + 'label' => 'rcfilters-filter-reviewstatus-auto-label', + 'description' => 'rcfilters-filter-reviewstatus-auto-description', + 'cssClassSuffix' => 'reviewstatus-auto', + 'isRowApplicableCallable' => function ( $ctx, $rc ) { + return $rc->getAttribute( 'rc_patrolled' ) == RecentChange::PRC_AUTOPATROLLED; }, ], ], + 'default' => ChangesListStringOptionsFilterGroup::NONE, + 'queryCallable' => function ( $specialPageClassName, $ctx, $dbr, + &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selected + ) { + if ( $selected === [] ) { + return; + } + $rcPatrolledValues = [ + 'unpatrolled' => RecentChange::PRC_UNPATROLLED, + 'manual' => RecentChange::PRC_PATROLLED, + 'auto' => RecentChange::PRC_AUTOPATROLLED, + ]; + // e.g. rc_patrolled IN (0, 2) + $conds['rc_patrolled'] = array_map( function ( $s ) use ( $rcPatrolledValues ) { + return $rcPatrolledValues[ $s ]; + }, $selected ); + } ] ]; @@ -866,7 +914,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { /** * Get the database result for this special page instance. Used by ApiFeedRecentChanges. * - * @return bool|ResultWrapper Result or false + * @return bool|IResultWrapper Result or false */ public function getRows() { $opts = $this->getOptions(); @@ -910,6 +958,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { // information to all users just because the user that saves the edit can // patrol or is logged in) if ( !$this->including() && $this->getUser()->useRCPatrol() ) { + $this->registerFiltersFromDefinitions( $this->legacyReviewStatusFilterGroupDefinition ); $this->registerFiltersFromDefinitions( $this->reviewStatusFilterGroupDefinition ); } @@ -1339,7 +1388,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { } /** - * Replace old options 'hideanons' or 'hideliu' with structured UI equivalent + * Replace old options with their structured UI equivalents * * @param FormOptions $opts * @return bool True if the change was made @@ -1349,21 +1398,40 @@ abstract class ChangesListSpecialPage extends SpecialPage { return false; } + $changed = false; + // At this point 'hideanons' and 'hideliu' cannot be both true, // because fixBackwardsCompatibilityOptions resets (at least) 'hideanons' in such case if ( $opts[ 'hideanons' ] ) { $opts->reset( 'hideanons' ); $opts[ 'userExpLevel' ] = 'registered'; - return true; + $changed = true; } if ( $opts[ 'hideliu' ] ) { $opts->reset( 'hideliu' ); $opts[ 'userExpLevel' ] = 'unregistered'; - return true; + $changed = true; } - return false; + if ( $this->getFilterGroup( 'legacyReviewStatus' ) ) { + if ( $opts[ 'hidepatrolled' ] ) { + $opts->reset( 'hidepatrolled' ); + $opts[ 'reviewStatus' ] = 'unpatrolled'; + $changed = true; + } + + if ( $opts[ 'hideunpatrolled' ] ) { + $opts->reset( 'hideunpatrolled' ); + $opts[ 'reviewStatus' ] = implode( + ChangesListStringOptionsFilterGroup::SEPARATOR, + [ 'manual', 'auto' ] + ); + $changed = true; + } + } + + return $changed; } /** @@ -1455,7 +1523,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { * @param array $query_options Array of query options; see IDatabase::select $options * @param array $join_conds Array of join conditions; see IDatabase::select $join_conds * @param FormOptions $opts - * @return bool|ResultWrapper Result or false + * @return bool|IResultWrapper Result or false */ protected function doMainQuery( $tables, $fields, $conds, $query_options, $join_conds, FormOptions $opts @@ -1526,7 +1594,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { /** * Send output to the OutputPage object, only called if not used feeds * - * @param ResultWrapper $rows Database rows + * @param IResultWrapper $rows Database rows * @param FormOptions $opts */ public function webOutput( $rows, $opts ) { @@ -1545,7 +1613,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { /** * Build and output the actual changes list. * - * @param ResultWrapper $rows Database rows + * @param IResultWrapper $rows Database rows * @param FormOptions $opts */ abstract public function outputChangesList( $rows, $opts );