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\SpecialPage\SpecialPage;
8
15class MessageGroupSubscriptionPresentationModel extends EchoEventPresentationModel {
16 public function getIconType() {
17 return 'translate-mgs-icon';
18 }
19
20 public function getPrimaryLink() {
21 if ( $this->isBundled() ) {
22 return false;
23 }
24
25 $groupId = $this->event->getExtraParam( 'groupId' );
26 return [
27 'url' => SpecialPage::getTitleFor( 'Translate', $groupId )->getFullURL(),
28 'label' => $this->msg( 'notification-link-mgs-group-translate' )
29 ->params( $this->event->getExtraParam( 'groupLabel' ) )
30 ];
31 }
32
33 public function getHeaderMessage() {
34 $msg = $this->msg( 'notification-header-message-group-subscription' );
35 $msg->params( $this->event->getExtraParam( 'groupLabel' ) );
36 return $msg;
37 }
38
39 public function getCompactHeaderMessageKey(): string {
40 $type = $this->event->getType();
41 if ( $type === 'translate-mgs-message-added' ) {
42 return 'notification-body-translate-mgs-message-added';
43 }
44
45 return parent::getCompactHeaderMessageKey();
46 }
47
48 public function getCompactHeaderMessage() {
49 $msg = $this->msg( $this->getCompactHeaderMessageKey() );
50 $msg->params( $this->getNumberOfChangedMessages() );
51 return $msg;
52 }
53
54 public function getBodyMessage() {
55 $type = $this->event->getType();
56 if ( $type === 'translate-mgs-message-added' ) {
57 if ( $this->isBundled() ) {
58 $events = $this->getBundledEvents();
59 $events[] = $this->event;
60 } else {
61 $events = [ $this->event ];
62 }
63
64 $addedMessages = 0;
65 foreach ( $events as $event ) {
66 $changes = $event->getExtraParam( 'changes' );
67 $addedMessages += count( $changes[ MessageGroupSubscription::STATE_ADDED ] ?? [] );
68 }
69
70 $msg = $this->msg( 'notification-body-translate-mgs-message-added' );
71 $msg->params( $addedMessages );
72 return $msg;
73 }
74 }
75
76 public function getNumberOfChangedMessages(): int {
77 $changes = $this->event->getExtraParam( 'changes' );
78 $messageCount = 0;
79 foreach ( $changes as $changeType ) {
80 $messageCount += count( $changeType );
81 }
82
83 return $messageCount;
84 }
85}