X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialContributions.php;h=62b34ad38b2fa39f23cd341bfd229233e070d560;hb=dac90fa456287c26aedb422d9aa6b743dcbc1a4a;hp=6ea31396e910126b9925cd9aaa53e4ffbe342653;hpb=fbe974a6f8e52fc73048c14e9d4436e371f0e956;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 6ea31396e9..62b34ad38b 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -54,6 +54,9 @@ class SpecialContributions extends SpecialPage { if ( $request->getVal( 'contribs' ) == 'newbie' ) { $target = 'newbies'; $this->opts['contribs'] = 'newbie'; + } elseif ( $par === 'newbies' ) { // b/c for WMF + $target = 'newbies'; + $this->opts['contribs'] = 'newbie'; } else { $this->opts['contribs'] = 'user'; } @@ -71,12 +74,16 @@ class SpecialContributions extends SpecialPage { $this->opts['target'] = $target; $this->opts['topOnly'] = $request->getBool( 'topOnly' ); - $userObj = User::newFromName( $target, false ); + $nt = Title::makeTitleSafe( NS_USER, $target ); + if ( !$nt ) { + $out->addHTML( $this->getForm() ); + return; + } + $userObj = User::newFromName( $nt->getText(), false ); if ( !$userObj ) { $out->addHTML( $this->getForm() ); return; } - $nt = $userObj->getUserPage(); $id = $userObj->getID(); if ( $this->opts['contribs'] != 'newbie' ) { @@ -185,18 +192,20 @@ class SpecialContributions extends SpecialPage { } $out->preventClickjacking( $pager->getPreventClickjacking() ); + # Show the appropriate "footer" message - WHOIS tools, etc. - if ( $this->opts['contribs'] != 'newbie' ) { + if ( $this->opts['contribs'] == 'newbie' ) { + $message = 'sp-contributions-footer-newbies'; + } elseif( IP::isIPAddress( $target ) ) { + $message = 'sp-contributions-footer-anon'; + } elseif( $userObj->isAnon() ) { + // No message for non-existing users + $message = ''; + } else { $message = 'sp-contributions-footer'; - if ( IP::isIPAddress( $target ) ) { - $message = 'sp-contributions-footer-anon'; - } else { - if ( $userObj->isAnon() ) { - // No message for non-existing users - return; - } - } + } + if( $message ) { if ( !$this->msg( $message, $target )->isDisabled() ) { $out->wrapWikiMsg( "", @@ -220,12 +229,15 @@ class SpecialContributions extends SpecialPage { } $nt = $userObj->getUserPage(); $talk = $userObj->getTalkPage(); + $links = ''; if ( $talk ) { $tools = $this->getUserLinks( $nt, $talk, $userObj ); $links = $this->getLanguage()->pipeList( $tools ); // Show a note if the user is blocked and display the last block log entry. - if ( $userObj->isBlocked() ) { + // Do not expose the autoblocks, since that may lead to a leak of accounts' IPs, + // and also this will display a totally irrelevant log entry as a current block. + if ( $userObj->isBlocked() && $userObj->getBlock()->getType() != Block::TYPE_AUTO ) { $out = $this->getOutput(); // showLogExtract() wants first parameter by reference LogEventsList::showLogExtract( $out, @@ -254,7 +266,7 @@ class SpecialContributions extends SpecialPage { // @todo Should this be removed at some point? $oldMsg = $this->msg( 'contribsub' ); if ( $oldMsg->exists() ) { - $linksWithParentheses = $this->msg( 'parenteses' )->rawParams( $links )->plain(); + $linksWithParentheses = $this->msg( 'parentheses' )->rawParams( $links )->escaped(); return $oldMsg->rawParams( "$user $linksWithParentheses" ); } else { return $this->msg( 'contribsub2' )->rawParams( $user, $links ); @@ -326,7 +338,7 @@ class SpecialContributions extends SpecialPage { # Add a link to change user rights for privileged users $userrightsPage = new UserrightsPage(); $userrightsPage->setContext( $this->getContext() ); - if ( $id !== null && $userrightsPage->userCanChangeRights( $target ) ) { + if ( $userrightsPage->userCanChangeRights( $target ) ) { $tools[] = Linker::linkKnown( SpecialPage::getTitleFor( 'Userrights', $username ), $this->msg( 'sp-contributions-userrights' )->escaped() @@ -444,7 +456,15 @@ class SpecialContributions extends SpecialPage { ) ) . Xml::tags( 'td', null, - Xml::namespaceSelector( $this->opts['namespace'], '' ) . ' ' . + Html::namespaceSelector( array( + 'selected' => $this->opts['namespace'], + 'all' => '', + ), array( + 'name' => 'namespace', + 'id' => 'namespace', + 'class' => 'namespaceselector', + ) ) . + ' ' . Html::rawElement( 'span', array( 'style' => 'white-space: nowrap' ), Xml::checkLabel( $this->msg( 'invert' )->text(), @@ -537,6 +557,11 @@ class ContribsPager extends ReverseChronologicalPager { var $namespace = '', $mDb; var $preventClickjacking = false; + /** + * @var array + */ + protected $mParentLens; + function __construct( IContextSource $context, array $options ) { parent::__construct( $context ); @@ -627,12 +652,13 @@ class ContribsPager extends ReverseChronologicalPager { # @todo FIXME: Other groups may have 'bot' rights $join_conds['user_groups'] = array( 'LEFT JOIN', "ug_user = rev_user AND ug_group = 'bot'" ); } else { - if ( IP::isIPAddress( $this->target ) ) { + $uid = User::idFromName( $this->target ); + if ( $uid ) { + $condition['rev_user'] = $uid; + $index = 'user_timestamp'; + } else { $condition['rev_user_text'] = $this->target; $index = 'usertext_timestamp'; - } else { - $condition['rev_user'] = User::idFromName( $this->target ); - $index = 'user_timestamp'; } } if ( $this->deletedOnly ) { @@ -700,6 +726,7 @@ class ContribsPager extends ReverseChronologicalPager { /** * Do a batched query to get the parent revision lengths + * @param $revIds array * @return array */ private function getParentLengths( array $revIds ) { @@ -742,6 +769,7 @@ class ContribsPager extends ReverseChronologicalPager { * was not written by the target user. * * @todo This would probably look a lot nicer in a table. + * @param $row * @return string */ function formatRow( $row ) { @@ -791,9 +819,16 @@ class ContribsPager extends ReverseChronologicalPager { array( 'action' => 'history' ) ); - $parentLen = isset( $this->mParentLens[$row->rev_parent_id] ) ? $this->mParentLens[$row->rev_parent_id] : 0; - $chardiff = ' . . ' . ChangesList::showCharacterDifference( - $parentLen, $row->rev_len ) . ' . . '; + if ( $row->rev_parent_id === null ) { + // For some reason rev_parent_id isn't populated for this row. + // Its rumoured this is true on wikipedia for some revisions (bug 34922). + // Next best thing is to have the total number of bytes. + $chardiff = ' . . ' . Linker::formatRevisionSize( $row->rev_len ) . ' . . '; + } else { + $parentLen = isset( $this->mParentLens[$row->rev_parent_id] ) ? $this->mParentLens[$row->rev_parent_id] : 0; + $chardiff = ' . . ' . ChangesList::showCharacterDifference( + $parentLen, $row->rev_len ) . ' . . '; + } $lang = $this->getLanguage(); $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true ); @@ -839,7 +874,7 @@ class ContribsPager extends ReverseChronologicalPager { $del .= ' '; } - $diffHistLinks = $this->msg( 'parentheses' )->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink )->plain(); + $diffHistLinks = $this->msg( 'parentheses' )->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink )->escaped(); $ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} {$link}{$userlink} {$comment} {$topmarktext}"; # Denote if username is redacted for this edit @@ -886,6 +921,9 @@ class ContribsPager extends ReverseChronologicalPager { $this->preventClickjacking = true; } + /** + * @return bool + */ public function getPreventClickjacking() { return $this->preventClickjacking; }