Page MenuHomePhabricator
Authored By
dbarratt
Aug 23 2017, 2:50 PM
Size
2 KB
Referenced Files
None
Subscribers
None

T173475.patch

From ca69cc44026b25f6a5a532d389781d612a3f210a Mon Sep 17 00:00:00 2001
From: David Barratt <dbarratt@wikimedia.org>
Date: Wed, 23 Aug 2017 10:38:58 -0400
Subject: [PATCH] Use User Ids instead of User Names for Echo Mute
The echo mute list uses user names which are not stable. User ids should be used instead.
Bug: T173475
Change-Id: I947bcf37a8f85aaa105776d368dbd0ab76823aeb
---
Hooks.php | 22 ++++++++++++++++++++++
includes/ContainmentSet.php | 8 ++++----
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/Hooks.php b/Hooks.php
index 8e3db35d..86cce9b1 100644
--- a/Hooks.php
+++ b/Hooks.php
@@ -490,10 +490,14 @@ class EchoHooks {
}
if ( $wgEchoPerUserBlacklist ) {
+ $lookup = CentralIdLookup::factory();
+ $ids = $user->getOption( 'echo-notifications-blacklist', [] );
+ $names = $ids ? $lookup->lookupCentralIds( array_flip( $ids ), $user ) : [];
$preferences['echo-notifications-blacklist'] = [
'type' => 'usersmultiselect',
'label-message' => 'echo-pref-notifications-blacklist',
'section' => 'echo/blocknotificationslist',
+ 'default' => implode( "\n", array_values( $names ) )
];
}
@@ -1252,6 +1256,10 @@ class EchoHooks {
$options['echo-subscriptions-email-edit-user-talk'] = $options['enotifusertalkpages'];
}
+ if ( isset( $options['echo-notifications-blacklist'] ) ) {
+ $options['echo-notifications-blacklist'] = explode("\n", $options['echo-notifications-blacklist'] );
+ }
+
return true;
}
@@ -1270,6 +1278,20 @@ class EchoHooks {
unset( $options['echo-subscriptions-email-edit-user-talk'] );
}
+ // Convert the usernames to ids.
+ if ( isset( $options['echo-notifications-blacklist'] ) ) {
+ if ( $options['echo-notifications-blacklist'] ) {
+ $lookup = CentralIdLookup::factory();
+ $names = explode( "\n", $options['echo-notifications-blacklist'] );
+ $ids = $lookup->lookupUserNames( array_flip( $names ), $user );
+ $options['echo-notifications-blacklist'] = implode( "\n", array_values( $ids ) );
+ }
+ else {
+ // If the blacklist is empty, set it to null rather than an empty string.
+ $options['echo-notifications-blacklist'] = null;
+ }
+ }
+
return true;
}
diff --git a/includes/ContainmentSet.php b/includes/ContainmentSet.php
index 4b6ce1f8..d5cfff5f 100644
--- a/includes/ContainmentSet.php
+++ b/includes/ContainmentSet.php
@@ -71,12 +71,12 @@ class EchoContainmentSet {
* @param string $preferenceName
*/
public function addFromUserOption( $preferenceName ) {
- $preference = $this->recipient->getOption( $preferenceName );
+ $preference = $this->recipient->getOption( $preferenceName, [] );
if ( $preference ) {
- $items = explode( "\n", $preference );
-
- $this->addArray( $items );
+ $lookup = CentralIdLookup::factory();
+ $names = $lookup->lookupCentralIds( array_flip( $preference ), $this->recipient );
+ $this->addArray( array_values( $names ) );
}
}
--
2.13.1

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4870114
Default Alt Text
T173475.patch (2 KB)

Event Timeline