X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2FSpecialLog.php;h=bfaee33ec17305748b4f5002b6b5ff64800bd5b7;hb=7ba3286102844e6b7eb1dcb3b90343f83c7e2bc4;hp=5eb8711c5dbad2e0c72ff916781bf70e6ace7e8e;hpb=5b7d2e0d366b219ce32a68b1fa8f8b84cf21bba6;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialLog.php b/includes/SpecialLog.php index 5eb8711c5d..bfaee33ec1 100644 --- a/includes/SpecialLog.php +++ b/includes/SpecialLog.php @@ -146,7 +146,7 @@ class LogReader { $sql = "SELECT log_type, log_action, log_timestamp, log_user, user_name, log_namespace, log_title, page_id, - log_comment FROM $user, $logging "; + log_comment, log_params FROM $user, $logging "; if( !empty( $this->joinClauses ) ) { $sql .= implode( ',', $this->joinClauses ); } @@ -202,6 +202,7 @@ class LogViewer { * @var LogReader $reader */ var $reader; + var $numResults = 0; /** * @param LogReader &$reader where to get our data from @@ -219,10 +220,46 @@ class LogViewer { global $wgOut; $this->showHeader( $wgOut ); $this->showOptions( $wgOut ); + $result = $this->getLogRows(); $this->showPrevNext( $wgOut ); - $this->showList( $wgOut ); + $this->doShowList( $wgOut, $result ); $this->showPrevNext( $wgOut ); } + + /** + * Load the data from the linked LogReader + * Preload the link cache + * Initialise numResults + * + * Must be called before calling showPrevNext + * + * @return object database result set + */ + function getLogRows() { + global $wgLinkCache; + $result = $this->reader->getRows(); + $this->numResults = 0; + + // Fetch results and form a batch link existence query + $batch = new LinkBatch; + while ( $s = $result->fetchObject() ) { + // User link + $title = Title::makeTitleSafe( NS_USER, $s->user_name ); + $batch->addObj( $title ); + + // Move destination link + if ( $s->log_type == 'move' ) { + $paramArray = LogPage::extractParams( $s->log_params ); + $title = Title::newFromText( $paramArray[0] ); + $batch->addObj( $title ); + } + $this->numResults++; + } + $batch->execute( $wgLinkCache ); + + return $result; + } + /** * Output just the list of entries given by the linked LogReader, @@ -231,10 +268,19 @@ class LogViewer { * @param OutputPage $out where to send output */ function showList( &$out ) { - $html = ""; - $result = $this->reader->getRows(); - while( $s = $result->fetchObject() ) { - $html .= $this->logLine( $s ); + $this->doShowList( $out, $this->getLogRows() ); + } + + function doShowList( &$out, $result ) { + // Rewind result pointer and go through it again, making the HTML + $html=''; + if ($this->numResults > 0) { + $html = "\n\n"; } $result->free(); $out->addHTML( $html ); @@ -246,24 +292,37 @@ class LogViewer { * @private */ function logLine( $s ) { - global $wgLang; + global $wgLang, $wgLinkCache; $title = Title::makeTitle( $s->log_namespace, $s->log_title ); $user = Title::makeTitleSafe( NS_USER, $s->user_name ); - $time = $wgLang->timeanddate( $s->log_timestamp ); + $time = $wgLang->timeanddate( $s->log_timestamp, true ); + + // Enter the existence or non-existence of this page into the link cache, + // for faster makeLinkObj() in LogPage::actionText() if( $s->page_id ) { - $titleLink = $this->skin->makeKnownLinkObj( $title ); + $wgLinkCache->addGoodLinkObj( $s->page_id, $title ); } else { - $titleLink = $this->skin->makeBrokenLinkObj( $title ); + $wgLinkCache->addBadLinkObj( $title ); } + $userLink = $this->skin->makeLinkObj( $user, htmlspecialchars( $s->user_name ) ); - if( '' === $s->log_comment ) { - $comment = ''; - } else { - $comment = '(' . $this->skin->formatComment( $s->log_comment ) . ')'; + $comment = $this->skin->commentBlock( $s->log_comment ); + $paramArray = LogPage::extractParams( $s->log_params ); + $revert = ''; + if ( $s->log_type == 'move' && isset( $paramArray[0] ) ) { + $specialTitle = Title::makeTitle( NS_SPECIAL, 'Movepage' ); + $destTitle = Title::newFromText( $paramArray[0] ); + if ( $destTitle ) { + $revert = '(' . $this->skin->makeKnownLinkObj( $specialTitle, wfMsg( 'revertmove' ), + 'wpOldTitle=' . urlencode( $destTitle->getPrefixedDBkey() ) . + '&wpNewTitle=' . urlencode( $title->getPrefixedDBkey() ) . + '&wpReason=' . urlencode( wfMsgForContent( 'revertmove' ) ) . + '&wpMovetalk=0' ) . ')'; + } } - - $action = LogPage::actionText( $s->log_type, $s->log_action, $titleLink ); - $out = "
  • $time $userLink $action $comment
  • \n"; + + $action = LogPage::actionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, true ); + $out = "
  • $time $userLink $action $comment $revert
  • \n"; return $out; } @@ -293,7 +352,7 @@ class LogViewer { $this->getTypeMenu() . $this->getUserInput() . $this->getTitleInput() . - "" . + "" . "" ); } @@ -335,20 +394,20 @@ class LogViewer { * @private */ function showPrevNext( &$out ) { - global $wgContLang; + global $wgContLang,$wgRequest; $pieces = array(); $pieces[] = 'type=' . htmlspecialchars( $this->reader->queryType() ); $pieces[] = 'user=' . htmlspecialchars( $this->reader->queryUser() ); $pieces[] = 'page=' . htmlspecialchars( $this->reader->queryTitle() ); $bits = implode( '&', $pieces ); - $offset = 0; $limit = 50; + list( $limit, $offset ) = $wgRequest->getLimitOffset(); # TODO: use timestamps instead of offsets to make it more natural # to go huge distances in time $html = wfViewPrevNext( $offset, $limit, $wgContLang->specialpage( 'Log' ), $bits, - false); + $this->numResults < $limit); $out->addHTML( '

    ' . $html . '

    ' ); } }