getContext() ); $this->mForm = $form; $this->opts = $opts; } function getQueryInfo() { $conds = []; $conds['rc_new'] = 1; $namespace = $this->opts->getValue( 'namespace' ); $namespace = ( $namespace === 'all' ) ? false : intval( $namespace ); $username = $this->opts->getValue( 'username' ); $user = Title::makeTitleSafe( NS_USER, $username ); $size = abs( intval( $this->opts->getValue( 'size' ) ) ); if ( $size > 0 ) { if ( $this->opts->getValue( 'size-mode' ) === 'max' ) { $conds[] = 'page_len <= ' . $size; } else { $conds[] = 'page_len >= ' . $size; } } $rcIndexes = []; if ( $namespace !== false ) { if ( $this->opts->getValue( 'invert' ) ) { $conds[] = 'rc_namespace != ' . $this->mDb->addQuotes( $namespace ); } else { $conds['rc_namespace'] = $namespace; } } if ( $user ) { $conds['rc_user_text'] = $user->getText(); $rcIndexes = 'rc_user_text'; } elseif ( User::groupHasPermission( '*', 'createpage' ) && $this->opts->getValue( 'hideliu' ) ) { # If anons cannot make new pages, don't "exclude logged in users"! $conds['rc_user'] = 0; } # If this user cannot see patrolled edits or they are off, don't do dumb queries! if ( $this->opts->getValue( 'hidepatrolled' ) && $this->getUser()->useNPPatrol() ) { $conds['rc_patrolled'] = 0; } if ( $this->opts->getValue( 'hidebots' ) ) { $conds['rc_bot'] = 0; } if ( $this->opts->getValue( 'hideredirs' ) ) { $conds['page_is_redirect'] = 0; } // Allow changes to the New Pages query $tables = [ 'recentchanges', 'page' ]; $fields = [ 'rc_namespace', 'rc_title', 'rc_cur_id', 'rc_user', 'rc_user_text', 'rc_comment', 'rc_timestamp', 'rc_patrolled', 'rc_id', 'rc_deleted', 'length' => 'page_len', 'rev_id' => 'page_latest', 'rc_this_oldid', 'page_namespace', 'page_title' ]; $join_conds = [ 'page' => [ 'INNER JOIN', 'page_id=rc_cur_id' ] ]; // Avoid PHP 7.1 warning from passing $this by reference $pager = $this; Hooks::run( 'SpecialNewpagesConditions', [ &$pager, $this->opts, &$conds, &$tables, &$fields, &$join_conds ] ); $options = []; if ( $rcIndexes ) { $options = [ 'USE INDEX' => [ 'recentchanges' => $rcIndexes ] ]; } $info = [ 'tables' => $tables, 'fields' => $fields, 'conds' => $conds, 'options' => $options, 'join_conds' => $join_conds ]; // Modify query for tags ChangeTags::modifyDisplayQuery( $info['tables'], $info['fields'], $info['conds'], $info['join_conds'], $info['options'], $this->opts['tagfilter'] ); return $info; } function getIndexField() { return 'rc_timestamp'; } function formatRow( $row ) { return $this->mForm->formatRow( $row ); } function getStartBody() { # Do a batch existence check on pages $linkBatch = new LinkBatch(); foreach ( $this->mResult as $row ) { $linkBatch->add( NS_USER, $row->rc_user_text ); $linkBatch->add( NS_USER_TALK, $row->rc_user_text ); $linkBatch->add( $row->page_namespace, $row->page_title ); } $linkBatch->execute(); return ''; } }