mediawiki-extensions-Echo/formatters/CommentFormatter.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

91 lines
2.6 KiB
PHP

<?php
class EchoCommentFormatter extends EchoEditFormatter {
public function __construct( $params ) {
parent::__construct( $params );
if ( isset( $params['title-message-yours'] ) ) {
$this->title['message-yours'] = $params['title-message-yours'];
}
if ( isset( $params['content-message-yours'] ) ) {
$this->content['message-yours'] = $params['content-message-yours'];
}
if ( isset( $params['email-subject-message-yours'] ) ) {
$this->email['subject']['message-yours'] = $params['email-subject-message-yours'];
}
if ( isset( $params['email-body-message-yours'] ) ) {
$this->email['body']['message-yours'] = $params['email-body-message-yours'];
}
}
/**
* @param $details
* @param $event EchoEvent
* @param $user User
* @return Message
*/
protected function formatFragment( $details, $event, $user ) {
$userTalkPage = $user->getUserPage()->getTalkPage();
$title = $event->getTitle();
if ( $title && $title->equals( $userTalkPage ) &&
isset( $details['message-yours'] )
) {
$details['message'] = $details['message-yours'];
}
return parent::formatFragment( $details, $event, $user );
}
/**
* @param EchoEvent $event
* @param $param
* @param Message $message
* @param User $user
*/
protected function processParam( $event, $param, $message, $user ) {
$extra = $event->getExtra();
if ( $param === 'subject' ) {
if ( isset( $extra['section-title'] ) && $extra['section-title'] ) {
$message->params( $extra['section-title'] );
} else {
$message->params( '' );
}
} elseif ( $param === 'commentText' ) {
/**
* @var $wgLang Language
*/
global $wgLang; // Message::language is protected :(
if ( isset( $extra['content'] ) && $extra['content'] ) {
$content = $extra['content'];
$content = EchoDiscussionParser::stripHeader( $content );
$content = EchoDiscussionParser::stripSignature( $content );
$content = EchoDiscussionParser::stripIndents( $content );
$content = EchoDiscussionParser::getTextSnippet( $content, 200 );
$message->params( $content );
} else {
$message->params( '' );
}
} elseif ( $param === 'content-page' ) {
if ( $event->getTitle() ) {
$message->params( $event->getTitle()->getSubjectPage()->getPrefixedText() );
} else {
$message->params( '' );
}
} elseif ( $param === 'subject-link' ) {
$prop = array();
if ( isset( $extra['section-title'] ) && $extra['section-title'] ) {
$prop['fragment'] = $extra['section-title'];
}
$this->setTitleLink( $event, $message, $prop );
} else {
parent::processParam( $event, $param, $message, $user );
}
}
}