mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-26 14:43:22 +00:00
7845b5fab1
This was a mistake in I53c0283, sorry. There are two users involved: The "agent" is the user (typically an administrator) that made the user group change, while the "viewing user" is the user for which the user group was changed. When the "agent" moves the "viewing user" into a new user group, the "viewing user" is the one that's now a member of that group. They are what dictates the gender for the "group-…-member" message. Is this mistake bad enough for a backport? Bug: T368249 Change-Id: I4916de2fb171873b625e51ee8823811e0296d323
128 lines
4 KiB
PHP
128 lines
4 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\Notifications\Formatters;
|
|
|
|
use MediaWiki\Extension\Notifications\DiscussionParser;
|
|
use MediaWiki\Language\RawMessage;
|
|
use MediaWiki\SpecialPage\SpecialPage;
|
|
use MediaWiki\User\User;
|
|
|
|
/**
|
|
* Formatter for 'user-rights' notifications
|
|
*/
|
|
class EchoUserRightsPresentationModel extends EchoEventPresentationModel {
|
|
|
|
public function getIconType() {
|
|
return 'user-rights';
|
|
}
|
|
|
|
public function getHeaderMessage() {
|
|
[ $formattedName, $genderName ] = $this->getAgentForOutput();
|
|
$viewingUser = $this->getViewingUserForGender();
|
|
$add = array_map(
|
|
[ $this->language, 'embedBidi' ],
|
|
$this->getLocalizedGroupNames( $this->event->getExtraParam( 'add', [] ), $viewingUser )
|
|
);
|
|
$remove = array_map(
|
|
[ $this->language, 'embedBidi' ],
|
|
$this->getLocalizedGroupNames( $this->event->getExtraParam( 'remove', [] ), $viewingUser )
|
|
);
|
|
$expiryChanged = array_map(
|
|
[ $this->language, 'embedBidi' ],
|
|
$this->getLocalizedGroupNames( $this->event->getExtraParam( 'expiry-changed', [] ), $viewingUser )
|
|
);
|
|
if ( $expiryChanged ) {
|
|
$msg = $this->msg( 'notification-header-user-rights-expiry-change' );
|
|
$msg->params( $genderName );
|
|
$msg->params( $this->language->commaList( $expiryChanged ) );
|
|
$msg->params( count( $expiryChanged ) );
|
|
$msg->params( $viewingUser );
|
|
return $msg;
|
|
} elseif ( $add && !$remove ) {
|
|
$msg = $this->msg( 'notification-header-user-rights-add-only' );
|
|
$msg->params( $genderName );
|
|
$msg->params( $this->language->commaList( $add ) );
|
|
$msg->params( count( $add ) );
|
|
$msg->params( $viewingUser );
|
|
return $msg;
|
|
} elseif ( !$add && $remove ) {
|
|
$msg = $this->msg( 'notification-header-user-rights-remove-only' );
|
|
$msg->params( $genderName );
|
|
$msg->params( $this->language->commaList( $remove ) );
|
|
$msg->params( count( $remove ) );
|
|
$msg->params( $viewingUser );
|
|
return $msg;
|
|
} else {
|
|
$msg = $this->msg( 'notification-header-user-rights-add-and-remove' );
|
|
$msg->params( $genderName );
|
|
$msg->params( $this->language->commaList( $add ) );
|
|
$msg->params( count( $add ) );
|
|
$msg->params( $this->language->commaList( $remove ) );
|
|
$msg->params( count( $remove ) );
|
|
$msg->params( $viewingUser );
|
|
return $msg;
|
|
}
|
|
}
|
|
|
|
public function getBodyMessage() {
|
|
$reason = $this->event->getExtraParam( 'reason' );
|
|
if ( $reason ) {
|
|
$text = DiscussionParser::getTextSnippet( $reason, $this->language );
|
|
return new RawMessage( "$1", [ $text ] );
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param string[] $names
|
|
* @param string $genderName
|
|
* @return string[]
|
|
*/
|
|
private function getLocalizedGroupNames( array $names, string $genderName ) {
|
|
return array_map(
|
|
fn ( $name ) => $this->language->getGroupMemberName( $name, $genderName ),
|
|
array_values( $names )
|
|
);
|
|
}
|
|
|
|
public function getPrimaryLink() {
|
|
$addedGroups = array_values( $this->event->getExtraParam( 'add', [] ) );
|
|
$removedGroups = array_values( $this->event->getExtraParam( 'remove', [] ) );
|
|
if ( $addedGroups !== [] && $removedGroups === [] ) {
|
|
$fragment = $addedGroups[0];
|
|
} elseif ( $addedGroups === [] && $removedGroups !== [] ) {
|
|
$fragment = $removedGroups[0];
|
|
} else {
|
|
$fragment = '';
|
|
}
|
|
return [
|
|
'url' => SpecialPage::getTitleFor( 'Listgrouprights', false, $fragment )->getFullURL(),
|
|
'label' => $this->msg( 'echo-learn-more' )->text()
|
|
];
|
|
}
|
|
|
|
public function getSecondaryLinks() {
|
|
return [ $this->getAgentLink(), $this->getLogLink() ];
|
|
}
|
|
|
|
private function getLogLink() {
|
|
$affectedUserPage = User::newFromId( $this->event->getExtraParam( 'user' ) )->getUserPage();
|
|
$query = [
|
|
'type' => 'rights',
|
|
'page' => $affectedUserPage->getPrefixedText(),
|
|
'user' => $this->event->getAgent()->getName(),
|
|
];
|
|
return [
|
|
'label' => $this->msg( 'echo-log' )->text(),
|
|
'url' => SpecialPage::getTitleFor( 'Log' )->getFullURL( $query ),
|
|
'description' => '',
|
|
'icon' => false,
|
|
'prioritized' => true,
|
|
];
|
|
}
|
|
|
|
protected function getSubjectMessageKey() {
|
|
return 'notification-user-rights-email-subject';
|
|
}
|
|
}
|