From: Aaron Schulz Date: Tue, 7 Feb 2012 23:12:17 +0000 (+0000) Subject: In LogFormatter: X-Git-Tag: 1.31.0-rc.0~24883 X-Git-Url: http://git.cyclocoop.org/%24href?a=commitdiff_plain;h=1a40d939490097b00b27acfcef6a4dba0e13a94b;p=lhc%2Fweb%2Fwiklou.git In LogFormatter: * Changed LogFormatter to support displaying redacting log items if the context user can see them. The default mode is still "show only public items". * Fixed static calls to non-static getRestrictedElement() function. * Cleaned up LogFormatter that build up vars only to then throw them away and replace them with rev-deleted placeholders. In RevDel_LogItem: * Use LogFormatter instead of raw LogPage::actionText call as such calls are broken and just displayed things like the string "move" (the log action name) instead of "x moved a to b: reason" and such. Fixes r96546. --- diff --git a/includes/logging/LogFormatter.php b/includes/logging/LogFormatter.php index cae6cb9c35..7c8645f185 100644 --- a/includes/logging/LogFormatter.php +++ b/includes/logging/LogFormatter.php @@ -16,6 +16,9 @@ * @since 1.19 */ class LogFormatter { + // Audience options for viewing usernames, comments, and actions + const FOR_PUBLIC = 1; + const FOR_THIS_USER = 2; // Static-> @@ -59,6 +62,9 @@ class LogFormatter { /// @var LogEntry protected $entry; + /// Integer constant for handling log_deleted + protected $audience = self::FOR_PUBLIC; + /// Whether to output user tool links protected $linkFlood = false; @@ -84,6 +90,32 @@ class LogFormatter { $this->context = $context; } + /** + * Set the visibility restrictions for displaying content. + * If set to public, and an item is deleted, then it will be replaced + * with a placeholder even if the context user is allowed to view it. + * @param $audience integer self::FOR_THIS_USER or self::FOR_PUBLIC + */ + public function setAudience( $audience ) { + $this->audience = ( $audience == self::FOR_THIS_USER ) + ? self::FOR_THIS_USER + : self::FOR_PUBLIC; + } + + /** + * Check if a log item can be displayed + * @param $field integer LogPage::DELETED_* constant + * @return bool + */ + protected function canView( $field ) { + if ( $this->audience == self::FOR_THIS_USER ) { + return LogEventsList::userCanBitfield( + $this->entry->getDeleted(), $field, $this->context->getUser() ); + } else { + return !$this->entry->isDeleted( $field ); + } + } + /** * If set to true, will produce user tool links after * the user name. This should be replaced with generic @@ -113,14 +145,17 @@ class LogFormatter { * @return string HTML */ public function getActionText() { - $element = $this->getActionMessage(); - if ( $element instanceof Message ) { - $element = $this->plaintext ? $element->text() : $element->escaped(); - } - - if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) { + if ( $this->canView( LogPage::DELETED_ACTION ) ) { + $element = $this->getActionMessage(); + if ( $element instanceof Message ) { + $element = $this->plaintext ? $element->text() : $element->escaped(); + } + if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) { + $element = $this->styleRestricedElement( $element ); + } + } else { $performer = $this->getPerformerElement() . $this->msg( 'word-separator' )->text(); - $element = $performer . self::getRestrictedElement( 'rev-deleted-event' ); + $element = $performer . $this->getRestrictedElement( 'rev-deleted-event' ); } return $element; @@ -239,11 +274,14 @@ class LogFormatter { * which parts of the log entry has been hidden. */ public function getPerformerElement() { - $performer = $this->entry->getPerformer(); - $element = $this->makeUserLink( $performer ); - - if ( $this->entry->isDeleted( LogPage::DELETED_USER ) ) { - $element = self::getRestrictedElement( 'rev-deleted-user' ); + if ( $this->canView( LogPage::DELETED_USER ) ) { + $performer = $this->entry->getPerformer(); + $element = $this->makeUserLink( $performer ); + if ( $this->entry->isDeleted( LogPage::DELETED_USER ) ) { + $element = $this->styleRestricedElement( $element ); + } + } else { + $element = $this->getRestrictedElement( 'rev-deleted-user' ); } return $element; @@ -254,12 +292,15 @@ class LogFormatter { * @return string HTML */ public function getComment() { - $comment = Linker::commentBlock( $this->entry->getComment() ); - // No hard coded spaces thanx - $element = ltrim( $comment ); - - if ( $this->entry->isDeleted( LogPage::DELETED_COMMENT ) ) { - $element = self::getRestrictedElement( 'rev-deleted-comment' ); + if ( $this->canView( LogPage::DELETED_COMMENT ) ) { + $comment = Linker::commentBlock( $this->entry->getComment() ); + // No hard coded spaces thanx + $element = ltrim( $comment ); + if ( $this->entry->isDeleted( LogPage::DELETED_COMMENT ) ) { + $element = $this->styleRestricedElement( $element ); + } + } else { + $element = $this->getRestrictedElement( 'rev-deleted-comment' ); } return $element; @@ -268,7 +309,7 @@ class LogFormatter { /** * Helper method for displaying restricted element. * @param $message string - * @return string HTML + * @return string HTML or wikitext */ protected function getRestrictedElement( $message ) { if ( $this->plaintext ) { @@ -280,6 +321,19 @@ class LogFormatter { return Html::rawElement( 'span', $attribs, $content ); } + /** + * Helper method for styling restricted element. + * @param $content string + * @return string HTML or wikitext + */ + protected function styleRestricedElement( $content ) { + if ( $this->plaintext ) { + return $content; + } + $attribs = array( 'class' => 'history-deleted' ); + return Html::rawElement( 'span', $attribs, $content ); + } + /** * Shortcut for wfMessage which honors local context. * @todo Would it be better to require replacing the global context instead? diff --git a/includes/revisiondelete/RevisionDelete.php b/includes/revisiondelete/RevisionDelete.php index c34b07c704..6cee62466b 100644 --- a/includes/revisiondelete/RevisionDelete.php +++ b/includes/revisiondelete/RevisionDelete.php @@ -848,8 +848,9 @@ class RevDel_LogItem extends RevDel_Item { public function getHTML() { $date = htmlspecialchars( $this->list->getLanguage()->timeanddate( $this->row->log_timestamp ) ); - $paramArray = LogPage::extractParams( $this->row->log_params ); $title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title ); + $formatter = LogFormatter::newFromRow( $this->row ); + $formatter->setAudience( LogFormatter::FOR_THIS_USER ); // Log link for this page $loglink = Linker::link( @@ -858,27 +859,14 @@ class RevDel_LogItem extends RevDel_Item { array(), array( 'page' => $title->getPrefixedText() ) ); - // Action text - if( !$this->canView() ) { - $action = '' . wfMsgHtml('rev-deleted-event') . ''; - } else { - $skin = $this->list->getSkin(); - $action = LogPage::actionText( $this->row->log_type, $this->row->log_action, - $title, $skin, $paramArray, true, true ); - if( $this->row->log_deleted & LogPage::DELETED_ACTION ) - $action = '' . $action . ''; - } - // User links - $userLink = Linker::userLink( $this->row->log_user, - User::WhoIs( $this->row->log_user ) ); - if( LogEventsList::isDeleted($this->row,LogPage::DELETED_USER) ) { - $userLink = '' . $userLink . ''; - } + // User links and action text + $action = $formatter->getActionText(); // Comment $comment = $this->list->getLanguage()->getDirMark() . Linker::commentBlock( $this->row->log_comment ); if( LogEventsList::isDeleted($this->row,LogPage::DELETED_COMMENT) ) { $comment = '' . $comment . ''; } - return "
  • ($loglink) $date $userLink $action $comment
  • "; + + return "
  • ($loglink) $date $action $comment
  • "; } }