From 2c9d0dc4a4251c54a70ed527ef820badfc9ea9f6 Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Sun, 18 Jul 2010 12:10:39 +0000 Subject: [PATCH] * Modified Special:Log to extend SpecialPage * Use FormOptions --- includes/AutoLoader.php | 1 + includes/SpecialPage.php | 2 +- includes/specials/SpecialLog.php | 148 +++++++++++++++++++------------ 3 files changed, 93 insertions(+), 58 deletions(-) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index eefa39335b..a97514fe5d 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -591,6 +591,7 @@ $wgAutoloadLocalClasses = array( 'SpecialImport' => 'includes/specials/SpecialImport.php', 'SpecialListGroupRights' => 'includes/specials/SpecialListgrouprights.php', 'SpecialLockdb' => 'includes/specials/SpecialLockdb.php', + 'SpecialLog' => 'includes/specials/SpecialLog.php', 'SpecialMergeHistory' => 'includes/specials/SpecialMergeHistory.php', 'SpecialMostlinkedtemplates' => 'includes/specials/SpecialMostlinkedtemplates.php', 'SpecialPreferences' => 'includes/specials/SpecialPreferences.php', diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php index d192506c47..b2ea317975 100644 --- a/includes/SpecialPage.php +++ b/includes/SpecialPage.php @@ -134,7 +134,7 @@ class SpecialPage { # Recent changes and logs 'Newimages' => array( 'IncludableSpecialPage', 'Newimages' ), - 'Log' => array( 'SpecialPage', 'Log' ), + 'Log' => 'SpecialLog', 'Watchlist' => array( 'SpecialPage', 'Watchlist' ), 'Newpages' => 'SpecialNewpages', 'Recentchanges' => 'SpecialRecentchanges', diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index 2c16b62cae..58ed89dddd 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -19,69 +19,103 @@ */ /** - * @file + * Implements Special:Log * @ingroup SpecialPage */ +class SpecialLog extends SpecialPage { -/** - * constructor - */ -function wfSpecialLog( $par = '' ) { - global $wgRequest, $wgOut, $wgUser, $wgLogTypes; - - # Get parameters - $parms = explode( '/', ($par = ( $par !== null ) ? $par : '' ) ); - $symsForAll = array( '*', 'all' ); - if ( $parms[0] != '' && ( in_array( $par, $wgLogTypes ) || in_array( $par, $symsForAll ) ) ) { - $type = $par; - $user = $wgRequest->getText( 'user' ); - } else if ( count( $parms ) == 2 ) { - $type = $parms[0]; - $user = $parms[1]; - } else { - $type = $wgRequest->getVal( 'type' ); - $user = ( $par != '' ) ? $par : $wgRequest->getText( 'user' ); + public function __construct() { + parent::__construct( 'Log' ); } - $title = $wgRequest->getText( 'page' ); - $pattern = $wgRequest->getBool( 'pattern' ); - $y = $wgRequest->getIntOrNull( 'year' ); - $m = $wgRequest->getIntOrNull( 'month' ); - $tagFilter = $wgRequest->getVal( 'tagfilter' ); - # Don't let the user get stuck with a certain date - $skip = $wgRequest->getText( 'offset' ) || $wgRequest->getText( 'dir' ) == 'prev'; - if( $skip ) { - $y = ''; - $m = ''; + + public function execute( $par ) { + global $wgRequest; + + $this->setHeaders(); + $this->outputHeader(); + + $opts = new FormOptions; + $opts->add( 'type', '' ); + $opts->add( 'user', '' ); + $opts->add( 'page', '' ); + $opts->add( 'pattern', false ); + $opts->add( 'year', null, FormOptions::INTNULL ); + $opts->add( 'month', null, FormOptions::INTNULL ); + $opts->add( 'tagfilter', '' ); + $opts->add( 'offset', '' ); + $opts->add( 'dir', '' ); + $opts->add( 'offender', '' ); + + // Set values + $opts->fetchValuesFromRequest( $wgRequest ); + if ( $par ) { + $this->parseParams( $opts, (string)$par ); + } + + # Don't let the user get stuck with a certain date + if ( $opts->getValue( 'offset' ) || $opts->getValue( 'dir' ) == 'prev' ) { + $opts->setValue( 'year', '' ); + $opts->setValue( 'month', '' ); + } + + # Handle type-specific inputs + $qc = array(); + if ( $opts->getValue( 'type' ) == 'suppress' ) { + $offender = User::newFromName( $opts->getValue( 'offender' ), false ); + if ( $offender && $offender->getId() > 0 ) { + $qc = array( 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ); + } elseif ( $offender && IP::isIPAddress( $offender->getName() ) ) { + $qc = array( 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ); + } + } + + $this->show( $opts, $qc ); } - # Handle type-specific inputs - $qc = array(); - if( $type == 'suppress' ) { - $offender = User::newFromName( $wgRequest->getVal('offender'), false ); - if( $offender && $offender->getId() > 0 ) { - $qc = array( 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ); - } else if( $offender && IP::isIPAddress( $offender->getName() ) ) { - $qc = array( 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ); + + private function parseParams( FormOptions $opts, $par ) { + global $wgLogTypes; + + # Get parameters + $parms = explode( '/', ($par = ( $par !== null ) ? $par : '' ) ); + $symsForAll = array( '*', 'all' ); + if ( $parms[0] != '' && ( in_array( $par, $wgLogTypes ) || in_array( $par, $symsForAll ) ) ) { + $opts->setValue( 'type', $par ); + } elseif ( count( $parms ) == 2 ) { + $opts->setValue( 'type', $parms[0] ); + $opts->setValue( 'user', $parms[1] ); + } elseif ( $par != '' ) { + $opts->setValue( 'user', $par ); } } - # Create a LogPager item to get the results and a LogEventsList item to format them... - $loglist = new LogEventsList( $wgUser->getSkin(), $wgOut, 0 ); - $pager = new LogPager( $loglist, $type, $user, $title, $pattern, $qc, $y, $m, $tagFilter ); - # Set title and add header - $loglist->showHeader( $pager->getType() ); - # Show form options - $loglist->showOptions( $pager->getType(), $pager->getUser(), $pager->getPage(), $pager->getPattern(), - $pager->getYear(), $pager->getMonth(), $pager->getFilterParams(), $tagFilter ); - # Insert list - $logBody = $pager->getBody(); - if( $logBody ) { - $wgOut->addHTML( - $pager->getNavigationBar() . - $loglist->beginLogEventsList() . - $logBody . - $loglist->endLogEventsList() . - $pager->getNavigationBar() - ); - } else { - $wgOut->addWikiMsg( 'logempty' ); + + private function show( FormOptions $opts, array $extraConds ) { + global $wgOut, $wgUser; + + # Create a LogPager item to get the results and a LogEventsList item to format them... + $loglist = new LogEventsList( $wgUser->getSkin(), $wgOut, 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() ); + + # Show form options + $loglist->showOptions( $pager->getType(), $pager->getUser(), $pager->getPage(), $pager->getPattern(), + $pager->getYear(), $pager->getMonth(), $pager->getFilterParams(), $opts->getValue( 'tagfilter' ) ); + + # Insert list + $logBody = $pager->getBody(); + if ( $logBody ) { + $wgOut->addHTML( + $pager->getNavigationBar() . + $loglist->beginLogEventsList() . + $logBody . + $loglist->endLogEventsList() . + $pager->getNavigationBar() + ); + } else { + $wgOut->addWikiMsg( 'logempty' ); + } } } -- 2.20.1