mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-28 18:21:50 +00:00
154 lines
3.8 KiB
PHP
154 lines
3.8 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* EchoEventPresentationModel for new comments in a subscribed section
|
||
|
*
|
||
|
* @file
|
||
|
* @ingroup Extensions
|
||
|
* @license MIT
|
||
|
*/
|
||
|
|
||
|
namespace MediaWiki\Extension\DiscussionTools\Notifications;
|
||
|
|
||
|
use EchoDiscussionParser;
|
||
|
use EchoEvent;
|
||
|
use EchoEventPresentationModel;
|
||
|
use EchoPresentationModelSection;
|
||
|
use Language;
|
||
|
use RawMessage;
|
||
|
use User;
|
||
|
|
||
|
class SubscribedNewCommentPresentationModel extends EchoEventPresentationModel {
|
||
|
|
||
|
/**
|
||
|
* @var EchoPresentationModelSection
|
||
|
*/
|
||
|
private $section;
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
protected function __construct( EchoEvent $event, Language $language, User $user, $distributionType ) {
|
||
|
parent::__construct( $event, $language, $user, $distributionType );
|
||
|
$this->section = new EchoPresentationModelSection( $event, $user, $language );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function getIconType() {
|
||
|
return $this->isUserTalkPage() ? 'edit-user-talk' : 'chat';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function canRender() {
|
||
|
return (bool)$this->event->getTitle();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function getPrimaryLink() {
|
||
|
$title = $this->event->getTitle();
|
||
|
$id = $this->event->getExtraParam( 'comment-id' );
|
||
|
// TODO: Handle bundles
|
||
|
return [
|
||
|
// Need FullURL so the section is included
|
||
|
'url' => $title->createFragmentTarget( $id )->getFullURL(),
|
||
|
'label' => $this->msg( 'discussiontools-notification-subscribed-new-comment-view' )->text()
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
protected function getHeaderMessageKey() {
|
||
|
if ( $this->isBundled() ) {
|
||
|
return 'discussiontools-notification-subscribed-new-comment-header-bundled';
|
||
|
} else {
|
||
|
return 'discussiontools-notification-subscribed-new-comment-header';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function getHeaderMessage() {
|
||
|
if ( $this->isBundled() ) {
|
||
|
$count = $this->getNotificationCountForOutput();
|
||
|
$msg = $this->msg( $this->getHeaderMessageKey() );
|
||
|
|
||
|
// Repeat is B/C until unused parameter is removed from translations
|
||
|
$msg->numParams( $count, $count );
|
||
|
$msg->plaintextParams( $this->section->getTruncatedSectionTitle() );
|
||
|
return $msg;
|
||
|
} else {
|
||
|
$msg = parent::getHeaderMessage();
|
||
|
$msg->params( $this->getTruncatedTitleText( $this->event->getTitle(), true ) );
|
||
|
$msg->plaintextParams( $this->section->getTruncatedSectionTitle() );
|
||
|
return $msg;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function getCompactHeaderMessage() {
|
||
|
$msg = $this->getMessageWithAgent( 'discussiontools-notification-subscribed-new-comment-header-compact' );
|
||
|
$msg->plaintextParams( $this->getContentSnippet() );
|
||
|
return $msg;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function getBodyMessage() {
|
||
|
if ( !$this->isBundled() ) {
|
||
|
return new RawMessage( $this->getContentSnippet() );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getContentSnippet() {
|
||
|
$content = $this->event->getExtraParam( 'content' );
|
||
|
return $this->language->truncateForVisual( $content, EchoDiscussionParser::DEFAULT_SNIPPET_LENGTH );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
protected function isUserTalkPage() {
|
||
|
// Would like to do $this->event->getTitle()->equals( $this->user->getTalkPage() )
|
||
|
// but $this->user is private in the parent class
|
||
|
$username = $this->getViewingUserForGender();
|
||
|
return $this->event->getTitle()->getNamespace() === NS_USER_TALK &&
|
||
|
$this->event->getTitle()->getText() === $username;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @inheritDoc
|
||
|
*/
|
||
|
public function getSecondaryLinks() {
|
||
|
$title = $this->event->getTitle();
|
||
|
|
||
|
$url = $title->getLocalURL( [
|
||
|
'oldid' => 'prev',
|
||
|
'diff' => $this->event->getExtraParam( 'revid' )
|
||
|
] );
|
||
|
$viewChangesLink = [
|
||
|
'url' => $url,
|
||
|
'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() )->text(),
|
||
|
'description' => '',
|
||
|
'icon' => 'changes',
|
||
|
'prioritized' => true,
|
||
|
];
|
||
|
|
||
|
// TODO: Add unsubscribe link
|
||
|
|
||
|
return [ $this->getAgentLink(), $viewChangesLink ];
|
||
|
}
|
||
|
}
|