Merge "Do not output invalid links for deleted names on Special:Contributions"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 29 May 2017 20:03:00 +0000 (20:03 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 29 May 2017 20:03:01 +0000 (20:03 +0000)
1  2 
includes/specials/pagers/ContribsPager.php

@@@ -24,9 -24,6 +24,9 @@@
   * @ingroup Pager
   */
  use MediaWiki\MediaWikiServices;
 +use Wikimedia\Rdbms\ResultWrapper;
 +use Wikimedia\Rdbms\FakeResultWrapper;
 +use Wikimedia\Rdbms\IDatabase;
  
  class ContribsPager extends ReverseChronologicalPager {
  
         */
        protected $mParentLens;
  
 +      /**
 +       * @var TemplateParser
 +       */
 +      protected $templateParser;
 +
        function __construct( IContextSource $context, array $options ) {
                parent::__construct( $context );
  
@@@ -85,7 -77,6 +85,7 @@@
                // queries should use a regular replica DB since the lookup pattern is not all by user.
                $this->mDbSecondary = wfGetDB( DB_REPLICA ); // any random replica DB
                $this->mDb = wfGetDB( DB_REPLICA, 'contributions' );
 +              $this->templateParser = new TemplateParser();
        }
  
        function getDefaultQuery() {
                $user = $this->getUser();
                $conds = array_merge( $userCond, $this->getNamespaceCond() );
  
 -              // Paranoia: avoid brute force searches (bug 17342)
 +              // Paranoia: avoid brute force searches (T19342)
                if ( !$user->isAllowed( 'deletedhistory' ) ) {
                        $conds[] = $this->mDb->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0';
                } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
                                        'LEFT JOIN', [
                                                'ug_user = rev_user',
                                                'ug_group' => $groupsWithBotPermission,
 -                                              $this->getConfig()->get( 'DisableUserGroupExpiry' ) ?
 -                                                      '1' :
 -                                                      'ug_expiry IS NULL OR ug_expiry >= ' .
 -                                                              $this->mDb->addQuotes( $this->mDb->timestamp() )
 +                                              'ug_expiry IS NULL OR ug_expiry >= ' .
 +                                                      $this->mDb->addQuotes( $this->mDb->timestamp() )
                                        ]
                                ];
                        }
  
                        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).
 +                              // Its rumoured this is true on wikipedia for some revisions (T36922).
                                // Next best thing is to have the total number of bytes.
                                $chardiff = ' <span class="mw-changeslist-separator">. .</span> ';
                                $chardiff .= Linker::formatRevisionSize( $row->rev_len );
                        }
  
                        # Show user names for /newbies as there may be different users.
-                       # Note that we already excluded rows with hidden user names.
-                       if ( $this->contribs == 'newbie' ) {
+                       # Note that only unprivileged users have rows with hidden user names excluded.
+                       $userlink = '';
+                       if ( $this->contribs == 'newbie' && !$rev->isDeleted( Revision::DELETED_USER ) ) {
                                $userlink = ' . . ' . $lang->getDirMark()
                                        . Linker::userLink( $rev->getUser(), $rev->getUserText() );
                                $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams(
-                                               Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' ';
-                       } else {
-                               $userlink = '';
+                                       Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' ';
                        }
  
                        $flags = [];
                                        $this->msg( 'rev-deleted-user-contribs' )->escaped();
                        }
  
 -                      $templateParser = new TemplateParser();
 -                      $ret = $templateParser->processTemplate(
 +                      $ret = $this->templateParser->processTemplate(
                                'SpecialContributionsLine',
                                $templateParams
                        );