Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
MessageGroupSubscriptionPresentationModel.php
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
5
6use MediaWiki\Extension\Notifications\Formatters\EchoEventPresentationModel;
7use MediaWiki\Extension\Notifications\Model\Event;
8use MediaWiki\SpecialPage\SpecialPage;
9
16class MessageGroupSubscriptionPresentationModel extends EchoEventPresentationModel {
18 public function getIconType() {
19 return 'translate-mgs-icon';
20 }
21
23 public function getPrimaryLink() {
24 if ( $this->isBundled() ) {
25 return false;
26 }
27
28 $groupId = $this->event->getExtraParam( 'groupId' );
29 return [
30 'url' => SpecialPage::getTitleFor( 'Translate', $groupId )->getFullURL(),
31 'label' => $this->msg( 'notification-link-mgs-group-translate' )
32 ->params( $this->event->getExtraParam( 'groupLabel' ) )
33 ];
34 }
35
37 public function getHeaderMessage() {
38 $msg = $this->msg( 'notification-header-message-group-subscription' );
39 $msg->params( $this->event->getExtraParam( 'groupLabel' ) );
40 return $msg;
41 }
42
44 public function getCompactHeaderMessageKey(): string {
45 $type = $this->event->getType();
46 if ( $type === 'translate-mgs-message-added' ) {
47 return 'notification-body-translate-mgs-message-added';
48 }
49
50 return parent::getCompactHeaderMessageKey();
51 }
52
54 public function getCompactHeaderMessage() {
55 $msg = $this->msg( $this->getCompactHeaderMessageKey() );
56 $msg->params( $this->getNumberOfChangedMessages( $this->event ) );
57 return $msg;
58 }
59
61 public function getBodyMessage() {
62 $type = $this->event->getType();
63 if ( $type === 'translate-mgs-message-added' ) {
64 if ( $this->isBundled() ) {
65 $events = $this->getBundledEvents();
66 $events[] = $this->event;
67 } else {
68 $events = [ $this->event ];
69 }
70
71 $addedOrUpdatedMessages = 0;
72 foreach ( $events as $event ) {
73 $addedOrUpdatedMessages += $this->getNumberOfChangedMessages( $event );
74 }
75
76 $msg = $this->msg( 'notification-body-translate-mgs-message-added' );
77 $msg->params( $addedOrUpdatedMessages );
78 return $msg;
79 }
80 }
81
82 private function getNumberOfChangedMessages( Event $event ): int {
83 $changes = $event->getExtraParam( 'changes' );
84 $messageCount = 0;
85 $messageCount += count( $changes[MessageGroupSubscription::STATE_ADDED] ?? [] );
86 $messageCount += count( $changes[MessageGroupSubscription::STATE_UPDATED] ?? [] );
87
88 return $messageCount;
89 }
90}