mediawiki-extensions-Echo/formatters/EditFormatter.php
Kaldari 7e9a35107b Allowing notifications to support multiple predefined components in the payload.
Payload components can include edit summary, edit snippet, welcome message.

This replaces the older 'content' system which constructed a payload
from an arbitrary message + parameters (but only supported a single
message).

Change-Id: I9a5e1d69f0c8296bb2bb79cb3f26e67aa34592bb
2012-12-05 10:31:41 -08:00

76 lines
2.1 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 === 'difflink' ) {
$eventData = $event->getExtra();
if ( !isset( $eventData['revid'] ) ) {
$message->params( '' );
return;
}
if ( !$event->getTitle() ) {
$message->params( wfMessage( 'echo-no-title' )->text() );
}
$revid = $eventData['revid'];
$title = $event->getTitle();
if ( $this->outputFormat === 'html' ) {
$link = Linker::link(
$title,
wfMessage( 'parentheses', wfMessage( 'showdiff' )->text() )->escaped(),
array(
'class' => 'mw-echo-diff',
),
array(
'oldid' => $revid,
'diff' => 'prev',
)
);
$message->rawParams( $link );
} elseif ( $this->outputFormat === 'email' ) {
$link = $title->getCanonicalURL(
array( 'oldid' => $revid, 'diff' => 'prev' ) );
$message->params( $link );
} else {
$link = $title->getFullURL(
array( 'oldid' => $revid, 'diff' => 'prev' ) );
$message->params( $link );
}
} elseif ( $param === 'summary' ) {
$eventData = $event->getExtra();
if ( !isset( $eventData['revid'] ) ) {
$message->params( '' );
return;
}
$revision = Revision::newFromId( $eventData['revid'] );
if ( $revision ) {
$message->params( $revision->getComment( Revision::FOR_THIS_USER, $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 );
}
}
}