From efb4b8a69693734d8eb98bf7caf24cdf828f6005 Mon Sep 17 00:00:00 2001 From: Stephane Bisson Date: Thu, 1 Dec 2016 14:58:18 -0500 Subject: [PATCH] Special:RC filter: hideunpatrolled Allows hiding edits that have not been patrolled. In other words, showing only edits that have been patrolled. Will be used by the new Special:RC filters (ERI project). Bug: T152061 Change-Id: I3cd896812c5af87bc4be53d493055c37298c712f --- .../specialpage/ChangesListSpecialPage.php | 10 +- .../specials/SpecialRecentchangesTest.php | 104 ++++++++++++++++-- 2 files changed, 101 insertions(+), 13 deletions(-) diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php index 5add448b63..205194881d 100644 --- a/includes/specialpage/ChangesListSpecialPage.php +++ b/includes/specialpage/ChangesListSpecialPage.php @@ -145,6 +145,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { $opts->add( 'hideanons', false ); $opts->add( 'hideliu', false ); $opts->add( 'hidepatrolled', false ); + $opts->add( 'hideunpatrolled', false ); $opts->add( 'hidemyself', false ); $opts->add( 'hidebyothers', false ); @@ -242,8 +243,13 @@ abstract class ChangesListSpecialPage extends SpecialPage { if ( $opts['hidehumans'] ) { $conds[] = 'rc_bot = 1'; } - if ( $user->useRCPatrol() && $opts['hidepatrolled'] ) { - $conds['rc_patrolled'] = 0; + if ( $user->useRCPatrol() ) { + if ( $opts['hidepatrolled'] ) { + $conds[] = 'rc_patrolled = 0'; + } + if ( $opts['hideunpatrolled'] ) { + $conds[] = 'rc_patrolled = 1'; + } } if ( $botsonly ) { $conds['rc_bot'] = 1; diff --git a/tests/phpunit/includes/specials/SpecialRecentchangesTest.php b/tests/phpunit/includes/specials/SpecialRecentchangesTest.php index 0cd1b3432c..03e9c8fee0 100644 --- a/tests/phpunit/includes/specials/SpecialRecentchangesTest.php +++ b/tests/phpunit/includes/specials/SpecialRecentchangesTest.php @@ -153,8 +153,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { $this->assertConditions( [ # expected 'rc_bot' => 0, - 0 => "rc_user != '{$user->getId()}'", - 1 => "rc_type != '6'", + "rc_user != '{$user->getId()}'", + "rc_type != '6'", ], [ 'hidemyself' => 1, @@ -167,8 +167,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { $this->assertConditions( [ # expected 'rc_bot' => 0, - 0 => "rc_user_text != '10.11.12.13'", - 1 => "rc_type != '6'", + "rc_user_text != '10.11.12.13'", + "rc_type != '6'", ], [ 'hidemyself' => 1, @@ -183,8 +183,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { $this->assertConditions( [ # expected 'rc_bot' => 0, - 0 => "rc_user = '{$user->getId()}'", - 1 => "rc_type != '6'", + "rc_user = '{$user->getId()}'", + "rc_type != '6'", ], [ 'hidebyothers' => 1, @@ -197,8 +197,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { $this->assertConditions( [ # expected 'rc_bot' => 0, - 0 => "rc_user_text = '10.11.12.13'", - 1 => "rc_type != '6'", + "rc_user_text = '10.11.12.13'", + "rc_type != '6'", ], [ 'hidebyothers' => 1, @@ -213,9 +213,9 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { $this->assertConditions( [ # expected 'rc_bot' => 0, - 0 => "rc_user != '{$user->getId()}'", - 1 => "rc_user = '{$user->getId()}'", - 2 => "rc_type != '6'", + "rc_user != '{$user->getId()}'", + "rc_user = '{$user->getId()}'", + "rc_type != '6'", ], [ 'hidemyself' => 1, @@ -281,4 +281,86 @@ class SpecialRecentchangesTest extends MediaWikiTestCase { "rc conditions: hidebots=0 hidehumans=1" ); } + + public function testRcHidepatrolledDisabledFilter() { + $user = $this->getTestUser()->getUser(); + $this->assertConditions( + [ # expected + 'rc_bot' => 0, + "rc_type != '6'", + ], + [ + 'hidepatrolled' => 1, + ], + "rc conditions: hidepatrolled=1 (user not allowed)", + $user + ); + } + + public function testRcHideunpatrolledDisabledFilter() { + $user = $this->getTestUser()->getUser(); + $this->assertConditions( + [ # expected + 'rc_bot' => 0, + "rc_type != '6'", + ], + [ + 'hideunpatrolled' => 1, + ], + "rc conditions: hideunpatrolled=1 (user not allowed)", + $user + ); + } + public function testRcHidepatrolledFilter() { + $user = $this->getTestSysop()->getUser(); + $this->assertConditions( + [ # expected + 'rc_bot' => 0, + "rc_patrolled = 0", + "rc_type != '6'", + ], + [ + 'hidepatrolled' => 1, + ], + "rc conditions: hidepatrolled=1", + $user + ); + } + + public function testRcHideunpatrolledFilter() { + $user = $this->getTestSysop()->getUser(); + $this->assertConditions( + [ # expected + 'rc_bot' => 0, + "rc_patrolled = 1", + "rc_type != '6'", + ], + [ + 'hideunpatrolled' => 1, + ], + "rc conditions: hideunpatrolled=1", + $user + ); + } + + // This is probably going to change when we do auto-fix of + // filters combinations that don't make sense but for now + // it's the behavior therefore it's the test. + public function testRcHidepatrolledHideunpatrolledFilter() { + $user = $this->getTestSysop()->getUser(); + $this->assertConditions( + [ # expected + 'rc_bot' => 0, + "rc_patrolled = 0", + "rc_patrolled = 1", + "rc_type != '6'", + ], + [ + 'hidepatrolled' => 1, + 'hideunpatrolled' => 1, + ], + "rc conditions: hidepatrolled=1 hideunpatrolled=1", + $user + ); + } } -- 2.20.1