mediawiki-extensions-Echo/formatters/EditFormatter.php
Andrew Garrett dc6a3cb6d0 Add a "mention" notification
Any user whose user page is linked in a comment on a talk page will get a notification of that.

Weaknesses: Currently this mention notification is additive.
We may want to restrict it to only cases where the user would not
otherwise be notified of the comment

patch set 3:
	* user + instead of array_merge for merging subscription users
	* rename $user to $agent to avoid name confilict in generateMentionEvents()
	* add check for possible null object
	* users should not receive 'mention' notification on their own talk pages

patch set 4:
	* add more descriptive comment
	* check for empty notification list before creating mention event

patch set 5:
	* Fix a parse error, change [ to {

patch set 10:
	* rebase

patch set 11:
	* adding flyout messages, updating params for other messages

Change-Id: I76b80db1f325d9569f36c506d14c8c875bba4a34
2013-02-24 20:38:11 -08:00

96 lines
2.7 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;
}
$props = array(
'class' => 'mw-echo-diff',
'linkText' => wfMessage( 'parentheses', wfMessage( 'showdiff' )->text() )->escaped(),
'param' => array(
'oldid' => $eventData['revid'],
'diff' => 'prev',
)
);
$this->setTitleLink( $event, $message, $props );
} elseif ( $param === 'titlelink' ) {
$this->setTitleLink( $event, $message );
} 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 );
}
}
/**
* Generate links based on output format and passed properties
* $event EchoEvent
* $message Message
* $props array
*/
private function formatLink( $event, $message, $props = array() ) {
if ( !$event->getTitle() ) {
$message->params( wfMessage( 'echo-no-title' )->text() );
return;
}
$title = $event->getTitle();
$param = array();
if ( isset( $props['param'] ) ) {
$param = (array)$props['param'];
}
if ( $this->outputFormat === 'html' || $this->outputFormat === 'flyout' ) {
$class = array();
if ( isset( $props['class'] ) ) {
$class['class'] = $props['class'];
}
if ( isset( $props['linkText'] ) ) {
$linkText = $props['linkText'];
} else {
$linkText = htmlspecialchars( $title->getPrefixedText() );
}
$message->rawParams( Linker::link( $title, $linkText, $class, $param ) );
} elseif ( $this->outputFormat === 'email' ) {
$message->params( $title->getCanonicalURL( $param ) );
} else {
$message->params( $title->getFullURL( $param ) );
}
}
}