From cecb985bee3bdd252e1b8dc0bd500b37cd52be01 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 16 May 2007 20:58:53 +0000 Subject: Aktualisierung auf MediaWiki 1.10.0 Plugins angepasst und verbessert kleine Korrekturen am Design --- includes/SpecialLog.php | 173 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 124 insertions(+), 49 deletions(-) (limited to 'includes/SpecialLog.php') diff --git a/includes/SpecialLog.php b/includes/SpecialLog.php index 7076d819..3c9d0960 100644 --- a/includes/SpecialLog.php +++ b/includes/SpecialLog.php @@ -19,8 +19,7 @@ /** * - * @package MediaWiki - * @subpackage SpecialPage + * @addtogroup SpecialPage */ /** @@ -38,18 +37,17 @@ function wfSpecialLog( $par = '' ) { /** * - * @package MediaWiki - * @subpackage SpecialPage + * @addtogroup SpecialPage */ class LogReader { var $db, $joinClauses, $whereClauses; - var $type = '', $user = '', $title = null; + var $type = '', $user = '', $title = null, $pattern = false; /** * @param WebRequest $request For internal use use a FauxRequest object to pass arbitrary parameters. */ function LogReader( $request ) { - $this->db =& wfGetDB( DB_SLAVE ); + $this->db = wfGetDB( DB_SLAVE ); $this->setupQuery( $request ); } @@ -68,11 +66,15 @@ class LogReader { $this->limitType( $request->getVal( 'type' ) ); $this->limitUser( $request->getText( 'user' ) ); - $this->limitTitle( $request->getText( 'page' ) ); + $this->limitTitle( $request->getText( 'page' ) , $request->getBool( 'pattern' ) ); $this->limitTime( $request->getVal( 'from' ), '>=' ); $this->limitTime( $request->getVal( 'until' ), '<=' ); list( $this->limit, $this->offset ) = $request->getLimitOffset(); + + // XXX This all needs to use Pager, ugly hack for now. + global $wgMiserMode; + if ($wgMiserMode && ($this->offset >10000)) $this->offset=10000; } /** @@ -118,15 +120,22 @@ class LogReader { * @param string $page Title name as text * @private */ - function limitTitle( $page ) { + function limitTitle( $page , $pattern ) { + global $wgMiserMode; $title = Title::newFromText( $page ); if( empty( $page ) || is_null( $title ) ) { return false; } $this->title =& $title; - $safetitle = $this->db->strencode( $title->getDBkey() ); + $this->pattern = $pattern; $ns = $title->getNamespace(); - $this->whereClauses[] = "log_namespace=$ns AND log_title='$safetitle'"; + if ( $pattern && !$wgMiserMode ) { + $safetitle = $this->db->escapeLike( $title->getDBkey() ); // use escapeLike to avoid expensive search patterns like 't%st%' + $this->whereClauses[] = "log_namespace=$ns AND log_title LIKE '$safetitle%'"; + } else { + $safetitle = $this->db->strencode( $title->getDBkey() ); + $this->whereClauses[] = "log_namespace=$ns AND log_title = '$safetitle'"; + } } /** @@ -189,6 +198,13 @@ class LogReader { return $this->user; } + /** + * @return boolean The checkbox, if titles should be searched by a pattern too + */ + function queryPattern() { + return $this->pattern; + } + /** * @return string The text of the title that this LogReader has been limited to. */ @@ -203,8 +219,7 @@ class LogReader { /** * - * @package MediaWiki - * @subpackage SpecialPage + * @addtogroup SpecialPage */ class LogViewer { /** @@ -218,7 +233,7 @@ class LogViewer { */ function LogViewer( &$reader ) { global $wgUser; - $this->skin =& $wgUser->getSkin(); + $this->skin = $wgUser->getSkin(); $this->reader =& $reader; } @@ -230,9 +245,13 @@ class LogViewer { $this->showHeader( $wgOut ); $this->showOptions( $wgOut ); $result = $this->getLogRows(); - $this->showPrevNext( $wgOut ); - $this->doShowList( $wgOut, $result ); - $this->showPrevNext( $wgOut ); + if ( $this->numResults > 0 ) { + $this->showPrevNext( $wgOut ); + $this->doShowList( $wgOut, $result ); + $this->showPrevNext( $wgOut ); + } else { + $this->showError( $wgOut ); + } } /** @@ -252,8 +271,8 @@ class LogViewer { $batch = new LinkBatch; while ( $s = $result->fetchObject() ) { // User link - $title = Title::makeTitleSafe( NS_USER, $s->user_name ); - $batch->addObj( $title ); + $batch->addObj( Title::makeTitleSafe( NS_USER, $s->user_name ) ); + $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $s->user_name ) ); // Move destination link if ( $s->log_type == 'move' ) { @@ -276,32 +295,38 @@ class LogViewer { * @param OutputPage $out where to send output */ function showList( &$out ) { - $this->doShowList( $out, $this->getLogRows() ); + $result = $this->getLogRows(); + if ( $this->numResults > 0 ) { + $this->doShowList( $out, $result ); + } else { + $this->showError( $out ); + } } function doShowList( &$out, $result ) { // Rewind result pointer and go through it again, making the HTML - if ($this->numResults > 0) { - $html = "\n\n"; - $out->addHTML( $html ); - } else { - $out->addWikiText( wfMsg( 'logempty' ) ); + $html = "\n\n"; + $out->addHTML( $html ); $result->free(); } + function showError( &$out ) { + $out->addWikiText( wfMsg( 'logempty' ) ); + } + /** * @param Object $s a single row from the result set * @return string Formatted HTML list item * @private */ function logLine( $s ) { - global $wgLang; + global $wgLang, $wgUser;; + $skin = $wgUser->getSkin(); $title = Title::makeTitle( $s->log_namespace, $s->log_title ); $time = $wgLang->timeanddate( wfTimestamp(TS_MW, $s->log_timestamp), true ); @@ -314,20 +339,43 @@ class LogViewer { $linkCache->addBadLinkObj( $title ); } - $userLink = $this->skin->userLink( $s->log_user, $s->user_name ) . $this->skin->userToolLinks( $s->log_user, $s->user_name ); + $userLink = $this->skin->userLink( $s->log_user, $s->user_name ) . $this->skin->userToolLinksRedContribs( $s->log_user, $s->user_name ); $comment = $this->skin->commentBlock( $s->log_comment ); $paramArray = LogPage::extractParams( $s->log_params ); $revert = ''; + // show revertmove link if ( $s->log_type == 'move' && isset( $paramArray[0] ) ) { - $specialTitle = SpecialPage::getTitleFor( 'Movepage' ); $destTitle = Title::newFromText( $paramArray[0] ); if ( $destTitle ) { - $revert = '(' . $this->skin->makeKnownLinkObj( $specialTitle, wfMsg( 'revertmove' ), + $revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Movepage' ), + wfMsg( 'revertmove' ), 'wpOldTitle=' . urlencode( $destTitle->getPrefixedDBkey() ) . '&wpNewTitle=' . urlencode( $title->getPrefixedDBkey() ) . '&wpReason=' . urlencode( wfMsgForContent( 'revertmove' ) ) . '&wpMovetalk=0' ) . ')'; } + // show undelete link + } elseif ( $s->log_action == 'delete' && $wgUser->isAllowed( 'delete' ) ) { + $revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete' ), + wfMsg( 'undeletebtn' ) , + 'target='. urlencode( $title->getPrefixedDBkey() ) ) . ')'; + + // show unblock link + } elseif ( $s->log_action == 'block' && $wgUser->isAllowed( 'block' ) ) { + $revert = '(' . $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Ipblocklist' ), + wfMsg( 'unblocklink' ), + 'action=unblock&ip=' . urlencode( $s->log_title ) ) . ')'; + // show change protection link + } elseif ( $s->log_action == 'protect' && $wgUser->isAllowed( 'protect' ) ) { + $revert = '(' . $skin->makeKnownLink( $title->getPrefixedDBkey() , + wfMsg( 'protect_change' ), + 'action=unprotect' ) . ')'; + // show user tool links for self created users + } elseif ( $s->log_action == 'create2' ) { + $revert = $this->skin->userToolLinksRedContribs( $s->log_user, $s->log_title ); + // do not show $comment for self created accounts. It includes wrong user tool links: + // 'blockip' for users w/o block allowance and broken links for very long usernames (bug 4756) + $comment = ''; } $action = LogPage::actionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, true, true ); @@ -352,17 +400,20 @@ class LogViewer { * @private */ function showOptions( &$out ) { - global $wgScript; + global $wgScript, $wgMiserMode; $action = htmlspecialchars( $wgScript ); $title = SpecialPage::getTitleFor( 'Log' ); $special = htmlspecialchars( $title->getPrefixedDBkey() ); $out->addHTML( "
\n" . - "\n" . - $this->getTypeMenu() . - $this->getUserInput() . - $this->getTitleInput() . - "" . - "
" ); + '
' . + Xml::element( 'legend', array(), wfMsg( 'log' ) ) . + Xml::hidden( 'title', $special ) . "\n" . + $this->getTypeMenu() . "\n" . + $this->getUserInput() . "\n" . + $this->getTitleInput() . "\n" . + (!$wgMiserMode?($this->getTitlePattern()."\n"):"") . + Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" . + "
" ); } /** @@ -371,12 +422,26 @@ class LogViewer { */ function getTypeMenu() { $out = "\n"; + + $out .= ''; return $out; } @@ -385,8 +450,8 @@ class LogViewer { * @private */ function getUserInput() { - $user = htmlspecialchars( $this->reader->queryUser() ); - return wfMsg('specialloguserlabel') . "\n"; + $user = $this->reader->queryUser(); + return Xml::inputLabel( wfMsg( 'specialloguserlabel' ), 'user', 'user', 12, $user ); } /** @@ -394,8 +459,17 @@ class LogViewer { * @private */ function getTitleInput() { - $title = htmlspecialchars( $this->reader->queryTitle() ); - return wfMsg('speciallogtitlelabel') . "\n"; + $title = $this->reader->queryTitle(); + return Xml::inputLabel( wfMsg( 'speciallogtitlelabel' ), 'page', 'page', 20, $title ); + } + + /** + * @return boolean Checkbox + * @private + */ + function getTitlePattern() { + $pattern = $this->reader->queryPattern(); + return Xml::checkLabel( wfMsg( 'log-title-wildcard' ), 'pattern', 'pattern', $pattern ); } /** @@ -408,6 +482,7 @@ class LogViewer { $pieces[] = 'type=' . urlencode( $this->reader->queryType() ); $pieces[] = 'user=' . urlencode( $this->reader->queryUser() ); $pieces[] = 'page=' . urlencode( $this->reader->queryTitle() ); + $pieces[] = 'pattern=' . urlencode( $this->reader->queryPattern() ); $bits = implode( '&', $pieces ); list( $limit, $offset ) = $wgRequest->getLimitOffset(); -- cgit v1.2.3-54-g00ecf