X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialNewpages.php;h=48037a7347a72c545e9675a663eb4559899da35a;hb=e68b7441c9e91330777a61b15c9c09a6e7961f42;hp=3f72352f611cb3b0040055601337e4330791f56a;hpb=bd24bf4fb491e36cbb786b8a3fd9c0f5d09ad2db;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialNewpages.php b/includes/SpecialNewpages.php index 3f72352f61..48037a7347 100644 --- a/includes/SpecialNewpages.php +++ b/includes/SpecialNewpages.php @@ -1,25 +1,21 @@ namespace = $namespace; + $this->username = $username; } function getName() { @@ -31,11 +27,22 @@ class NewPagesPage extends QueryPage { 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 ); - extract( $dbr->tableNames( 'recentchanges', 'page', 'text' ) ); + $dbr = wfGetDB( DB_SLAVE ); + list( $recentchanges, $page ) = $dbr->tableNamesN( 'recentchanges', 'page' ); + + $uwhere = $this->makeUserWhere( $dbr ); # FIXME: text will break with compression return @@ -43,9 +50,9 @@ class NewPagesPage extends QueryPage { rc_namespace AS namespace, rc_title AS title, rc_cur_id AS cur_id, - rc_user AS user, + rc_user AS \"user\", rc_user_text AS user_text, - rc_comment as comment, + rc_comment as \"comment\", rc_timestamp AS timestamp, rc_timestamp AS value, '{$usepatrol}' as usepatrol, @@ -55,7 +62,8 @@ class NewPagesPage extends QueryPage { 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"; + AND rc_namespace=" . $this->namespace . " AND page_is_redirect=0 + {$uwhere}"; } function preprocessResults( &$dbo, &$res ) { @@ -71,32 +79,37 @@ class NewPagesPage extends QueryPage { $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, $wgUser, $wgUseRCPatrol; - $u = $result->user; - $ut = $result->user_text; - $dirmark = $wgContLang->getDirMark(); // To keep text in correct order - - $length = wfMsgExt( 'nbytes', array('parsemag', 'escape'), - $wgLang->formatNum( $result->length ) ); - $d = $wgLang->timeanddate( $result->timestamp, true ); - - # Since there is no diff link, we need to give users a way to - # mark the article as patrolled if it isn't already - $ns = $wgContLang->getNsText( $result->namespace ); - if( $wgUseRCPatrol && !is_null( $result->usepatrol ) && $result->usepatrol && $result->patrolled == 0 && $wgUser->isAllowed( 'patrol' ) ) { - $link = $skin->makeKnownLink( $ns . ':' . $result->title, '', "rcid={$result->rcid}" ); - } else { - $link = $skin->makeKnownLink( $ns . ':' . $result->title, '' ); - } - - $userLink = $skin->userLink( $u, $ut ); - $userTools = $skin->userToolLinks( $u, $ut ); + 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}"; + } - $s = "{$d} {$dirmark}{$link} {$dirmark}({$length}) . . " . - "{$dirmark}{$userLink}{$dirmark}{$userTools}"; - $s .= $dirmark . $skin->commentBlock( $result->comment ); - return $s; + /** + * 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 ) { @@ -112,34 +125,23 @@ class NewPagesPage extends QueryPage { } /** - * Show a namespace selection form for filtering + * Show a form for filtering namespace and username * * @return string */ function getPageHeader() { - $thisTitle = Title::makeTitle( NS_SPECIAL, $this->getName() ); - $form = wfOpenElement( 'form', array( - 'method' => 'post', - 'action' => $thisTitle->getLocalUrl() ) ); - $form .= wfElement( 'label', array( 'for' => 'namespace' ), - wfMsg( 'namespace' ) ) . ' '; - $form .= HtmlNamespaceSelector( $this->namespace ); - # Preserve the offset and limit - $form .= wfElement( 'input', array( - 'type' => 'hidden', - 'name' => 'offset', - 'value' => $this->offset ) ); - $form .= wfElement( 'input', array( - 'type' => 'hidden', - 'name' => 'limit', - 'value' => $this->limit ) ); - $form .= wfElement( 'input', array( - 'type' => 'submit', - 'name' => 'submit', - 'id' => 'submit', - 'value' => wfMsg( 'allpagessubmit' ) ) ); - $form .= wfCloseElement( 'form' ); - return( $form ); + $self = SpecialPage::getTitleFor( $this->getName() ); + $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $self->getLocalUrl() ) ); + # Namespace selector + $form .= ''; + $form .= ''; + # Username filter + $form .= ''; + $form .= ''; + + $form .= '
' . Xml::label( wfMsg( 'namespace' ), 'namespace' ) . '' . Xml::namespaceSelector( $this->namespace ) . '
' . Xml::label( wfMsg( 'newpages-username' ), 'mw-np-username' ) . '' . Xml::input( 'username', 30, $this->username, array( 'id' => 'mw-np-username' ) ) . '
' . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . '
'; + $form .= Xml::hidden( 'offset', $this->offset ) . Xml::hidden( 'limit', $this->limit ) . ''; + return $form; } /** @@ -148,7 +150,7 @@ class NewPagesPage extends QueryPage { * @return array */ function linkParameters() { - return( array( 'namespace' => $this->namespace ) ); + return( array( 'namespace' => $this->namespace, 'username' => $this->username ) ); } } @@ -161,6 +163,7 @@ function wfSpecialNewpages($par, $specialPage) { list( $limit, $offset ) = wfCheckLimits(); $namespace = NS_MAIN; + $username = ''; if ( $par ) { $bits = preg_split( '/\s*,\s*/', trim( $par ) ); @@ -170,6 +173,7 @@ function wfSpecialNewpages($par, $specialPage) { if ( is_numeric( $bit ) ) $limit = $bit; + $m = array(); if ( preg_match( '/^limit=(\d+)$/', $bit, $m ) ) $limit = intval($m[1]); if ( preg_match( '/^offset=(\d+)$/', $bit, $m ) ) @@ -184,12 +188,14 @@ function wfSpecialNewpages($par, $specialPage) { } else { if( $ns = $wgRequest->getInt( 'namespace', 0 ) ) $namespace = $ns; + if( $un = $wgRequest->getText( 'username' ) ) + $username = $un; } if ( ! isset( $shownavigation ) ) $shownavigation = ! $specialPage->including(); - $npp = new NewPagesPage( $namespace ); + $npp = new NewPagesPage( $namespace, $username ); if ( ! $npp->doFeed( $wgRequest->getVal( 'feed' ), $limit ) ) $npp->doQuery( $offset, $limit, $shownavigation );