X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/specials/pagers/NewPagesPager.php diff --git a/includes/specials/pagers/NewPagesPager.php b/includes/specials/pagers/NewPagesPager.php new file mode 100644 index 00000000..53362d9c --- /dev/null +++ b/includes/specials/pagers/NewPagesPager.php @@ -0,0 +1,161 @@ +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; + } + + $commentQuery = CommentStore::newKey( 'rc_comment' )->getJoin(); + + // Allow changes to the New Pages query + $tables = [ 'recentchanges', 'page' ] + $commentQuery['tables']; + $fields = [ + 'rc_namespace', 'rc_title', 'rc_cur_id', 'rc_user', 'rc_user_text', + 'rc_timestamp', 'rc_patrolled', 'rc_id', 'rc_deleted', + 'length' => 'page_len', 'rev_id' => 'page_latest', 'rc_this_oldid', + 'page_namespace', 'page_title' + ] + $commentQuery['fields']; + $join_conds = [ 'page' => [ 'INNER JOIN', 'page_id=rc_cur_id' ] ] + $commentQuery['joins']; + + // 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 ''; + } +}