**Scenario**
User Apples is being harassed by User Bananas
**Definitions**
- Mute: User Bananas can still preform any action, but User Apples never sees (or hears) the notification (web or email).
- Prevent: User Bananas cannot perform certain actions towards User Apples (email User Apples, Write on User Apple's talk page, etc.).
This issue is specifically to investigate **muting** T150419 globally T167902. Although, it is important to remember that **preventing** is already on the roadmap T138166.
**Interface**
User Apples should be given a page (or field(s) on existing page) to list out users. A interface was already added in T150419. For this issue, this should remain as-is T171624#3534281. However, it may be split out onto a separate page (for technical reasons). In the future it may become a matrix T171624#3534281 or separate lists T171624#3534782. Regardless, //prevent// is an escalation of //mute// T171624#3534010.
**Implementation Options**
# Global Preferences
- User list ought to be global-only T171624#3532227, because making them local-global raises a lot of questions and usability issues T167902#3471195. However, global-only preferences are not supported by T16950. We would have to increase the scope of T16950 to cover global-only preferences or resolve all of the issues raised in T167902#3471195.
# Expose List from Meta Globally
- User list would remain only on Meta and we would use the API to get the list T167902#3476640. Other wiki users would be directed to Meta to update their list.
- This data is currently available via the API (https://meta.wikimedia.org/w/api.php?action=query&meta=userinfo&uiprop=options) under the key `echo-notifications-blacklist`, however, when attempting to make the request cross-origin (https://meta.wikimedia.org/w/api.php?action=query&meta=userinfo&uiprop=options&origin=*) the user info is missing (I'm assuming this is for security reasons). We could use the API server-side, but I imagine we would probably want to create a proxy endpoint so the request can be made asynchronously?
# Create a new Global Database Table & Special Page
* We will need to migrate the data from the existing [[ https://www.mediawiki.org/wiki/Extension:Echo | Echo ]] user preference to the new table.
* Initially this will be in [[ https://www.mediawiki.org/wiki/Extension:Echo | Echo ]] then when {T138166}...
# Move the list to a new Mute/Prevent extension.
* Mute/Prevent extension will provide global table, special page, and use hooks to prevent users from performing core actions (i.e. send Email to another User). Other extensions (like [[ https://www.mediawiki.org/wiki/Extension:Echo | Echo ]]) will use the list extension however they want. In [[ https://www.mediawiki.org/wiki/Extension:Echo | Echo ]]'s case it will 1) see if the extension is enabled 2) check to see if user is on the list before sending/display notifications.
# Move the list to core
* Will provide a global database table, special page, and we will modify core to work with the list. Extensions (like [[ https://www.mediawiki.org/wiki/Extension:Echo | Echo ]]) will work directly with the core list which is guaranteed to exist.
* Some wikis (like [[ https://office.wikimedia.org/ | Office ]]) do not have a need for a Mute/Prevent list so the feature isn't //always// necessary for every wiki. But any //public// wiki ought to have this feature.