mediawiki-extensions-Echo/formatters/EditFormatter.php
theopolisme fc7e18ba8e Mention: notify correctly if there is no section title
If a user is mentioned in an area that does not have a section
title (for example, the lead section of a talk page), use the new
'notification-mention-nosection' message, to avoid an awkward and
incorrect "[[Page#|]]".

Bug: 52507
Change-Id: I40628b76c460c79008053222c9780bb23549731d
2013-11-22 21:31:45 -06:00

75 lines
2.2 KiB
PHP

<?php
class EchoEditFormatter extends EchoBasicFormatter {
/**
* @param EchoEvent $event
* @param $param
* @param $message Message
* @param $user User
*/
protected function processParam( $event, $param, $message, $user ) {
if ( $param === 'subject-anchor' ) {
$message->params( $this->formatSubjectAnchor( $event ) );
} elseif ( $param === 'section-title' ) {
$message->params( $this->getSectionTitle( $event, $user ) );
} elseif ( $param === 'difflink' ) {
$revid = $event->getExtraParam( 'revid' );
if ( !$revid ) {
$message->params( '' );
return;
}
$props = array(
'attribs' => array( 'class' => 'mw-echo-diff' ),
'linkText' => $this->getMessage( 'parentheses' )
->params(
$this->getMessage( 'showdiff' )->text()
)->escaped(),
'param' => array(
'oldid' => $revid,
'diff' => 'prev',
),
// Set fragment to empty string for diff links
'fragment' => ''
);
$this->setTitleLink( $event, $message, $props );
} elseif ( $param === 'summary' ) {
$message->params( $this->getRevisionSnippet( $event, $user ) );
} elseif ( $param === 'number' ) {
$eventData = $event->getExtra();
// The folliwing is a bit of a hack...
// If the edit is a rollback, we want to say 'your edits' in the
// notification. If the edit is an undo, we want to say 'your edit'
// in the notification. To accomplish this, we pass a 'number' param
// to the message which is set to 1 or 2 and formatted with {{PLURAL}}.
if ( isset( $eventData['method'] ) && $eventData['method'] === 'rollback' ) {
$message->params( 2 );
} else {
$message->params( 1 );
}
} else {
parent::processParam( $event, $param, $message, $user );
}
}
/**
* Get the section title for a talk page post
* @param $event EchoEvent
* @param $user User
* @return string
*/
protected function getSectionTitle( $event, $user ) {
$extra = $event->getExtra();
if ( !empty( $extra['section-title'] ) ) {
if ( $event->userCan( Revision::DELETED_TEXT, $user ) ) {
return EchoDiscussionParser::getTextSnippet( $extra['section-title'], 30 );
} else {
return $this->getMessage( 'echo-rev-deleted-text-view' )->text();
}
}
return '';
}
}