namespace = $namespace; $this->username = $username; } function getName() { return 'Newpages'; } function isExpensive() { # Indexed on RC, and will *not* work with querycache yet. return false; } function makeUserWhere( &$dbo ) { $title = Title::makeTitleSafe( NS_USER, $this->username ); if( $title ) { return ' AND rc_user_text = ' . $dbo->addQuotes( $title->getText() ); } else { return ''; } } function getSQL() { global $wgUser, $wgUseRCPatrol; $usepatrol = ( $wgUseRCPatrol && $wgUser->isAllowed( 'patrol' ) ) ? 1 : 0; $dbr =& wfGetDB( DB_SLAVE ); list( $recentchanges, $page ) = $dbr->tableNamesN( 'recentchanges', 'page' ); $uwhere = $this->makeUserWhere( $dbr ); # FIXME: text will break with compression return "SELECT 'Newpages' as type, rc_namespace AS namespace, rc_title AS title, rc_cur_id AS cur_id, rc_user AS user, rc_user_text AS user_text, rc_comment as comment, rc_timestamp AS timestamp, rc_timestamp AS value, '{$usepatrol}' as usepatrol, rc_patrolled AS patrolled, rc_id AS rcid, page_len as length, page_latest as rev_id FROM $recentchanges,$page WHERE rc_cur_id=page_id AND rc_new=1 AND rc_namespace=" . $this->namespace . " AND page_is_redirect=0 {$uwhere}"; } function preprocessResults( &$dbo, &$res ) { # Do a batch existence check on the user and talk pages $linkBatch = new LinkBatch(); while( $row = $dbo->fetchObject( $res ) ) { $linkBatch->addObj( Title::makeTitleSafe( NS_USER, $row->user_text ) ); $linkBatch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_text ) ); } $linkBatch->execute(); # Seek to start if( $dbo->numRows( $res ) > 0 ) $dbo->dataSeek( $res, 0 ); } /** * Format a row, providing the timestamp, links to the page/history, size, user links, and a comment * * @param $skin Skin to use * @param $result Result row * @return string */ function formatResult( $skin, $result ) { global $wgLang, $wgContLang; $dm = $wgContLang->getDirMark(); $title = Title::makeTitleSafe( $result->namespace, $result->title ); $time = $wgLang->timeAndDate( $result->timestamp, true ); $plink = $skin->makeKnownLinkObj( $title, '', $this->patrollable( $result ) ? 'rcid=' . $result->rcid : '' ); $hist = $skin->makeKnownLinkObj( $title, wfMsgHtml( 'hist' ), 'action=history' ); $length = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), $wgLang->formatNum( htmlspecialchars( $result->length ) ) ); $ulink = $skin->userLink( $result->user, $result->user_text ) . ' ' . $skin->userToolLinks( $result->user, $result->user_text ); $comment = $skin->commentBlock( $result->comment ); return "{$time} {$dm}{$plink} ({$hist}) {$dm}[{$length}] {$dm}{$ulink} {$comment}"; } /** * Should a specific result row provide "patrollable" links? * * @param $result Result row * @return bool */ function patrollable( $result ) { global $wgUser, $wgUseRCPatrol; return $wgUseRCPatrol && $wgUser->isAllowed( 'patrol' ) && !$result->patrolled; } function feedItemDesc( $row ) { if( isset( $row->rev_id ) ) { $revision = Revision::newFromId( $row->rev_id ); if( $revision ) { return '
' . htmlspecialchars( wfMsg( 'summary' ) ) . ': ' . htmlspecialchars( $revision->getComment() ) . "
\n' . wfMsgHtml( 'namespace' ) . ' | '; $form .= '' . HtmlNamespaceSelector( $this->namespace ) . ' |
' . wfMsgHtml( 'newpages-username' ) . ' | '; $form .= '' . wfInput( 'username', 30, $this->username ) . ' |
' . wfSubmitButton( wfMsg( 'allpagessubmit' ) ) . ' |