From adba11dfe332c4c10dbbf0f817982d4a225de6b1 Mon Sep 17 00:00:00 2001 From: Catrope Date: Wed, 16 Sep 2015 09:56:29 +0000 Subject: [PATCH] Revert "When aborting EnhancedRC block line, block should reflect that" Caused errors when there were two new topics created on the same Flow board on the same day. BadMethodCallException from line 496 of /srv/mediawiki/php-1.26wmf23/includes/changes/EnhancedChangesList.php: Call to a member function getTitle() on a non-object (NULL) {"exception_id":"58b04b8c"} This reverts commit b30417048bb4b6b785ecae4a8b90aa1f452c4412. Bug: T112738 Change-Id: Ib404d78eaf1aa9ac7ea34516183bcc9956efc515 --- includes/changes/EnhancedChangesList.php | 210 ++++++++++------------- 1 file changed, 91 insertions(+), 119 deletions(-) diff --git a/includes/changes/EnhancedChangesList.php b/includes/changes/EnhancedChangesList.php index 21dc359266..9635c1791d 100644 --- a/includes/changes/EnhancedChangesList.php +++ b/includes/changes/EnhancedChangesList.php @@ -270,17 +270,6 @@ class EnhancedChangesList extends ChangesList { $queryParams['curid'] = $curId; - # Sub-entries - $lines = ''; - foreach ( $block as $i => $rcObj ) { - $line = $this->getLineData( $block, $rcObj, $queryParams ); - $lines .= $line; - if ( !$line ) { - // completely ignore this RC entry if we don't want to render it - unset( $block[$i] ); - } - } - $r .= $this->getLogText( $block, $queryParams, $allLogs, $isnew, $namehidden ); $r .= ' . . '; @@ -310,133 +299,116 @@ class EnhancedChangesList extends ChangesList { $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers ); $r .= ''; - if ( !$lines ) { - // if there are no lines to be rendered (all aborted by hook), don't render the block - return ''; - } - - $r .= $lines; - $r .= "\n"; - - $this->rcCacheIndex++; - - return $r; - } - - /** - * @param RCCacheEntry[] $block - * @param RCCacheEntry $rcObj - * @param array $queryParams - * @return string - * @throws Exception - * @throws FatalError - * @throws MWException - */ - protected function getLineData( array $block, RCCacheEntry $rcObj, array $queryParams = array() ) { - $RCShowChangedSize = $this->getConfig()->get( 'RCShowChangedSize' ); - - # Classes to apply -- TODO implement - $classes = array(); - $type = $rcObj->mAttribs['rc_type']; - $data = array(); - - $trClass = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched - ? ' class="mw-enhanced-watched"' : ''; - $separator = ' . . '; - - $data['recentChangesFlags'] = array( - 'newpage' => $type == RC_NEW, - 'minor' => $rcObj->mAttribs['rc_minor'], - 'unpatrolled' => $rcObj->unpatrolled, - 'bot' => $rcObj->mAttribs['rc_bot'], - ); + # Sub-entries + foreach ( $block as $rcObj ) { + # Classes to apply -- TODO implement + $classes = array(); + $type = $rcObj->mAttribs['rc_type']; + $data = array(); + + $trClass = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched + ? ' class="mw-enhanced-watched"' : ''; + $separator = ' . . '; + + $data['recentChangesFlags'] = array( + 'newpage' => $type == RC_NEW, + 'minor' => $rcObj->mAttribs['rc_minor'], + 'unpatrolled' => $rcObj->unpatrolled, + 'bot' => $rcObj->mAttribs['rc_bot'], + ); - $params = $queryParams; + $params = $queryParams; - if ( $rcObj->mAttribs['rc_this_oldid'] != 0 ) { - $params['oldid'] = $rcObj->mAttribs['rc_this_oldid']; - } + if ( $rcObj->mAttribs['rc_this_oldid'] != 0 ) { + $params['oldid'] = $rcObj->mAttribs['rc_this_oldid']; + } - # Log timestamp - if ( $type == RC_LOG ) { - $link = $rcObj->timestamp; + # Log timestamp + if ( $type == RC_LOG ) { + $link = $rcObj->timestamp; # Revision link - } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { - $link = '' . $rcObj->timestamp . ' '; - } else { - $link = Linker::linkKnown( - $rcObj->getTitle(), - $rcObj->timestamp, - array(), - $params - ); - if ( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) { - $link = '' . $link . ' '; + } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { + $link = '' . $rcObj->timestamp . ' '; + } else { + $link = Linker::linkKnown( + $rcObj->getTitle(), + $rcObj->timestamp, + array(), + $params + ); + if ( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) { + $link = '' . $link . ' '; + } } - } - $data['timestampLink'] = $link; + $data['timestampLink'] = $link; - $currentAndLastLinks = ''; - if ( !$type == RC_LOG || $type == RC_NEW ) { - $currentAndLastLinks .= ' ' . $this->msg( 'parentheses' )->rawParams( + $currentAndLastLinks = ''; + if ( !$type == RC_LOG || $type == RC_NEW ) { + $currentAndLastLinks .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->curlink . - $this->message['pipe-separator'] . - $rcObj->lastlink + $this->message['pipe-separator'] . + $rcObj->lastlink )->escaped(); - } - $data['currentAndLastLinks'] = $currentAndLastLinks; - $data['separatorAfterCurrentAndLastLinks'] = $separator; + } + $data['currentAndLastLinks'] = $currentAndLastLinks; + $data['separatorAfterCurrentAndLastLinks'] = $separator; + + # Character diff + if ( $RCShowChangedSize ) { + $cd = $this->formatCharacterDifference( $rcObj ); + if ( $cd !== '' ) { + $data['characterDiff'] = $cd; + $data['separatorAfterCharacterDiff'] = $separator; + } + } - # Character diff - if ( $RCShowChangedSize ) { - $cd = $this->formatCharacterDifference( $rcObj ); - if ( $cd !== '' ) { - $data['characterDiff'] = $cd; - $data['separatorAfterCharacterDiff'] = $separator; + if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) { + $data['logEntry'] = $this->insertLogEntry( $rcObj ); + } else { + # User links + $data['userLink'] = $rcObj->userlink; + $data['userTalkLink'] = $rcObj->usertalklink; + $data['comment'] = $this->insertComment( $rcObj ); } - } - if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) { - $data['logEntry'] = $this->insertLogEntry( $rcObj ); - } else { - # User links - $data['userLink'] = $rcObj->userlink; - $data['userTalkLink'] = $rcObj->usertalklink; - $data['comment'] = $this->insertComment( $rcObj ); - } + # Rollback + $data['rollback'] = $this->getRollback( $rcObj ); - # Rollback - $data['rollback'] = $this->getRollback( $rcObj ); + # Tags + $data['tags'] = $this->getTags( $rcObj, $classes ); - # Tags - $data['tags'] = $this->getTags( $rcObj, $classes ); + // give the hook a chance to modify the data + $success = Hooks::run( 'EnhancedChangesListModifyLineData', + array( $this, &$data, $block, $rcObj ) ); + if ( !$success ) { + // skip entry if hook aborted it + continue; + } - // give the hook a chance to modify the data - $success = Hooks::run( 'EnhancedChangesListModifyLineData', - array( $this, &$data, $block, $rcObj ) ); - if ( !$success ) { - // skip entry if hook aborted it - return ''; - } + $line = ''; + if ( isset( $data['recentChangesFlags'] ) ) { + $line .= $this->recentChangesFlags( $data['recentChangesFlags'] ); + unset( $data['recentChangesFlags'] ); + } + $line .= ' '; - $line = ''; - if ( isset( $data['recentChangesFlags'] ) ) { - $line .= $this->recentChangesFlags( $data['recentChangesFlags'] ); - unset( $data['recentChangesFlags'] ); - } - $line .= ' '; + if ( isset( $data['timestampLink'] ) ) { + $line .= '' . $data['timestampLink'] . ''; + unset( $data['timestampLink'] ); + } - if ( isset( $data['timestampLink'] ) ) { - $line .= '' . $data['timestampLink'] . ''; - unset( $data['timestampLink'] ); - } + // everything else: makes it easier for extensions to add or remove data + $line .= implode( '', $data ); - // everything else: makes it easier for extensions to add or remove data - $line .= implode( '', $data ); + $line .= "\n"; - $line .= "\n"; + $r .= $line; + } + $r .= "\n"; - return $line; + $this->rcCacheIndex++; + + return $r; } /** -- 2.20.1