* @file
* @ingroup SpecialPage
*/
+use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\ResultWrapper;
/**
* Special page which uses a ChangesList to show query results.
$this->webOutput( $rows, $opts );
$rows->free();
+
+ if ( $this->getConfig()->get( 'EnableWANCacheReaper' ) ) {
+ // Clean up any bad page entries for titles showing up in RC
+ DeferredUpdates::addUpdate( new WANCacheReapUpdate(
+ $this->getDB(),
+ LoggerFactory::getInstance( 'objectcache' )
+ ) );
+ }
}
/**
$opts = new FormOptions();
$opts->add( 'hideminor', false );
+ $opts->add( 'hidemajor', false );
$opts->add( 'hidebots', false );
+ $opts->add( 'hidehumans', false );
$opts->add( 'hideanons', false );
$opts->add( 'hideliu', false );
$opts->add( 'hidepatrolled', false );
+ $opts->add( 'hideunpatrolled', false );
$opts->add( 'hidemyself', false );
$opts->add( 'hidebyothers', false );
if ( $config->get( 'RCWatchCategoryMembership' ) ) {
$opts->add( 'hidecategorization', false );
}
+ $opts->add( 'hidepageedits', false );
+ $opts->add( 'hidenewpages', false );
+ $opts->add( 'hidelog', false );
$opts->add( 'namespace', '', FormOptions::INTNULL );
$opts->add( 'invert', false );
// Toggles
if ( $opts['hideminor'] ) {
- $conds['rc_minor'] = 0;
+ $conds[] = 'rc_minor = 0';
+ }
+ if ( $opts['hidemajor'] ) {
+ $conds[] = 'rc_minor = 1';
}
if ( $opts['hidebots'] ) {
$conds['rc_bot'] = 0;
}
- if ( $user->useRCPatrol() && $opts['hidepatrolled'] ) {
- $conds['rc_patrolled'] = 0;
+ if ( $opts['hidehumans'] ) {
+ $conds[] = 'rc_bot = 1';
+ }
+ if ( $user->useRCPatrol() ) {
+ if ( $opts['hidepatrolled'] ) {
+ $conds[] = 'rc_patrolled = 0';
+ }
+ if ( $opts['hideunpatrolled'] ) {
+ $conds[] = 'rc_patrolled = 1';
+ }
}
if ( $botsonly ) {
$conds['rc_bot'] = 1;
) {
$conds[] = 'rc_type != ' . $dbr->addQuotes( RC_CATEGORIZE );
}
+ if ( $opts['hidepageedits'] ) {
+ $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_EDIT );
+ }
+ if ( $opts['hidenewpages'] ) {
+ $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_NEW );
+ }
+ if ( $opts['hidelog'] ) {
+ $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_LOG );
+ }
// Namespace filtering
if ( $opts['namespace'] !== '' ) {
$operator = $opts['invert'] ? '!=' : '=';
$boolean = $opts['invert'] ? 'AND' : 'OR';
- // Namespace association (bug 2429)
+ // Namespace association (T4429)
if ( !$opts['associated'] ) {
$condition = "rc_namespace $operator $selectedNS";
} else {
protected function getGroupName() {
return 'changes';
}
+
+ /**
+ * Get filters that can be rendered.
+ *
+ * Filters with 'msg' => false can be used to filter data but won't
+ * be presented as show/hide toggles in the UI. They are not returned
+ * by this function.
+ *
+ * @param array $allFilters Map of filter URL param names to properties (msg/default)
+ * @return array Map of filter URL param names to properties (msg/default)
+ */
+ protected function getRenderableCustomFilters( $allFilters ) {
+ return array_filter(
+ $allFilters,
+ function( $filter ) {
+ return isset( $filter['msg'] ) && ( $filter['msg'] !== false );
+ }
+ );
+ }
}