From d9022f63880ce039446fba8364f68e656b7bf4cb Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 3 May 2012 13:01:35 +0200 Subject: Update to MediaWiki 1.19.0 --- includes/specials/SpecialLog.php | 70 ++++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 13 deletions(-) (limited to 'includes/specials/SpecialLog.php') diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index d8f6d8cf..64190df1 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -30,13 +30,24 @@ */ class SpecialLog extends SpecialPage { + /** + * List log type for which the target is a user + * Thus if the given target is in NS_MAIN we can alter it to be an NS_USER + * Title user instead. + */ + private $typeOnUser = array( + 'block', + 'newusers', + 'rights', + ); + public function __construct() { parent::__construct( 'Log' ); } public function execute( $par ) { - global $wgRequest; - + global $wgLogRestrictions; + $this->setHeaders(); $this->outputHeader(); @@ -53,7 +64,7 @@ class SpecialLog extends SpecialPage { $opts->add( 'offender', '' ); // Set values - $opts->fetchValuesFromRequest( $wgRequest ); + $opts->fetchValuesFromRequest( $this->getRequest() ); if ( $par ) { $this->parseParams( $opts, (string)$par ); } @@ -64,6 +75,16 @@ class SpecialLog extends SpecialPage { $opts->setValue( 'month', '' ); } + // Reset the log type to default (nothing) if it's invalid or if the + // user does not possess the right to view it + $type = $opts->getValue( 'type' ); + if ( !LogPage::isLogType( $type ) + || ( isset( $wgLogRestrictions[$type] ) + && !$this->getUser()->isAllowed( $wgLogRestrictions[$type] ) ) + ) { + $opts->setValue( 'type', '' ); + } + # Handle type-specific inputs $qc = array(); if ( $opts->getValue( 'type' ) == 'suppress' ) { @@ -75,6 +96,20 @@ class SpecialLog extends SpecialPage { } } + # Some log types are only for a 'User:' title but we might have been given + # only the username instead of the full title 'User:username'. This part try + # to lookup for a user by that name and eventually fix user input. See bug 1697. + if( in_array( $opts->getValue( 'type' ), $this->typeOnUser ) ) { + # ok we have a type of log which expect a user title. + $target = Title::newFromText( $opts->getValue( 'page' ) ); + if( $target && $target->getNamespace() === NS_MAIN ) { + # User forgot to add 'User:', we are adding it for him + $opts->setValue( 'page', + Title::makeTitleSafe( NS_USER, $opts->getValue( 'page' ) ) + ); + } + } + $this->show( $opts, $qc ); } @@ -95,30 +130,27 @@ class SpecialLog extends SpecialPage { } private function show( FormOptions $opts, array $extraConds ) { - global $wgOut; - # Create a LogPager item to get the results and a LogEventsList item to format them... - $loglist = new LogEventsList( $this->getSkin(), $wgOut, 0 ); + $loglist = new LogEventsList( $this->getSkin(), $this->getOutput(), 0 ); $pager = new LogPager( $loglist, $opts->getValue( 'type' ), $opts->getValue( 'user' ), $opts->getValue( 'page' ), $opts->getValue( 'pattern' ), $extraConds, $opts->getValue( 'year' ), $opts->getValue( 'month' ), $opts->getValue( 'tagfilter' ) ); - # Set title and add header - $loglist->showHeader( $pager->getType() ); + $this->addHeader( $opts->getValue( 'type' ) ); # Set relevant user - if ( $pager->getUser() ) { - $this->getSkin()->setRelevantUser( User::newFromName( $pager->getUser() ) ); + if ( $pager->getPerformer() ) { + $this->getSkin()->setRelevantUser( User::newFromName( $pager->getPerformer() ) ); } # Show form options - $loglist->showOptions( $pager->getType(), $pager->getUser(), $pager->getPage(), $pager->getPattern(), + $loglist->showOptions( $pager->getType(), $opts->getValue( 'user' ), $pager->getPage(), $pager->getPattern(), $pager->getYear(), $pager->getMonth(), $pager->getFilterParams(), $opts->getValue( 'tagfilter' ) ); # Insert list $logBody = $pager->getBody(); if ( $logBody ) { - $wgOut->addHTML( + $this->getOutput()->addHTML( $pager->getNavigationBar() . $loglist->beginLogEventsList() . $logBody . @@ -126,7 +158,19 @@ class SpecialLog extends SpecialPage { $pager->getNavigationBar() ); } else { - $wgOut->addWikiMsg( 'logempty' ); + $this->getOutput()->addWikiMsg( 'logempty' ); } } + + /** + * Set page title and show header for this log type + * @param $type string + * @since 1.19 + */ + protected function addHeader( $type ) { + $page = new LogPage( $type ); + $this->getOutput()->setPageTitle( $page->getName()->text() ); + $this->getOutput()->addHTML( $page->getDescription()->parseAsBlock() ); + } + } -- cgit v1.2.3-54-g00ecf