section = new PlaintextEchoPresentationModelSection( $event, $user, $language ); } /** * @inheritDoc */ public function getIconType() { return 'placeholder'; } /** * @inheritDoc */ public function canRender() { return (bool)$this->event->getTitle(); } /** * @inheritDoc */ public function getPrimaryLink() { $rev = $this->event->getExtraParam( 'revid' ); if ( $this->isBundled() ) { // No link, unless all of these events are from one edit foreach ( $this->getBundledEvents() as $event ) { if ( $event->getExtraParam( 'revid' ) !== $rev ) { return false; } } } $title = $this->event->getTitle(); $url = $title->getLocalURL( [ 'oldid' => 'prev', 'diff' => $rev ] ); return [ 'url' => $url, 'label' => $this->msg( 'notification-link-text-view-changes', $this->getViewingUserForGender() )->text(), ]; } /** * @inheritDoc */ protected function getHeaderMessageKey() { if ( $this->isBundled() ) { return 'discussiontools-notification-removed-topic-header-bundled'; } else { return 'discussiontools-notification-removed-topic-header'; } } /** * @inheritDoc */ public function getHeaderMessage() { if ( $this->isBundled() ) { $msg = $this->msg( $this->getHeaderMessageKey() ); $msg->numParams( $this->getNotificationCountForOutput() ); $msg->params( $this->getTruncatedTitleText( $this->event->getTitle(), true ) ); 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-removed-topic-header-compact' ); $msg->params( $this->getTruncatedTitleText( $this->event->getTitle(), true ) ); $msg->plaintextParams( $this->section->getTruncatedSectionTitle() ); return $msg; } /** * @inheritDoc */ public function getBodyMessage() { return $this->msg( 'discussiontools-notification-removed-topic-body' ) ->numParams( $this->getNotificationCountForOutput() ); } /** * @inheritDoc */ public function getSecondaryLinks() { global $wgEchoNotifiers; $viewPageLink = [ 'url' => $this->event->getTitle()->getFullURL(), 'label' => $this->msg( 'discussiontools-notification-removed-topic-view' )->text(), 'description' => '', 'icon' => 'article', 'prioritized' => true, ]; $links = [ $viewPageLink, ]; // Known preferences used below: // echo-subscriptions-email-dt-subscription-archiving // echo-subscriptions-push-dt-subscription-archiving // echo-subscriptions-web-dt-subscription-archiving $category = $this->getCategory(); $isDisabled = true; $optionsLookup = MediaWikiServices::getInstance()->getUserOptionsLookup(); foreach ( $wgEchoNotifiers as $notifierType => $unused ) { if ( $optionsLookup->getOption( $this->getUser(), "echo-subscriptions-$notifierType-$category" ) ) { $isDisabled = false; } } if ( !$isDisabled ) { $setPrefs = []; foreach ( $wgEchoNotifiers as $notifierType => $unused ) { $setPrefs[] = "echo-subscriptions-$notifierType-$category=0"; } $links[] = $this->getDynamicActionLink( SpecialPage::getTitleFor( 'Preferences', false, 'mw-prefsection-echo-echosubscriptions' ), 'unbell', $this->msg( 'discussiontools-notification-removed-topic-disable' )->text(), null, [ 'tokenType' => 'csrf', 'params' => [ 'action' => 'options', 'change' => implode( '|', $setPrefs ), ], 'messages' => [ 'confirmation' => [ 'title' => $this->msg( 'discussiontools-notification-removed-topic-disabled-title' ), 'description' => $this->msg( 'discussiontools-notification-removed-topic-disabled-body' ) ] ] ], [] ); } return $links; } }