Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F9157027
T173475.patch
dbarratt (David Barratt)
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
dbarratt
Aug 23 2017, 2:50 PM
2017-08-23 14:50:42 (UTC+0)
Size
2 KB
Referenced Files
None
Subscribers
None
T173475.patch
View Options
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
Details
Attached
Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4870114
Default Alt Text
T173475.patch (2 KB)
Attached To
Mode
T173475: Echo Notification Mute (Block List) can be bypassed by changing username
Attached
Detach File
Event Timeline
Log In to Comment