Gergő Tisza has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/299932

Change subject: Change some globals to work better with extension registration
......................................................................

Change some globals to work better with extension registration

Rename $wgAbuseFilterAvailableActions / $wgAbuseFilterRestrictedActions
to $wgAbuseFilterActions / $wgAbuseFilterRestrictions and make
them an associative array instead of a plain one, as that works more
sanely with extension registration. (The renaming helps to give more
useful errors to sites using the old config.)

Change-Id: I790d39c2849922d7daf7479f298cd90cf30af129
(cherry picked from commit 6a2627e944fdb7a33d10b6af4804cf39d71366e8)
---
M AbuseFilter.class.php
M AbuseFilter.hooks.php
M AbuseFilter.php
M Views/AbuseFilterViewEdit.php
M extension.json
5 files changed, 77 insertions(+), 51 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/AbuseFilter 
refs/changes/32/299932/1

diff --git a/AbuseFilter.class.php b/AbuseFilter.class.php
index 845d6a0..4d5759a 100644
--- a/AbuseFilter.class.php
+++ b/AbuseFilter.class.php
@@ -705,10 +705,10 @@
                );
 
                // Categorise consequences by filter.
-               global $wgAbuseFilterRestrictedActions;
+               global $wgAbuseFilterRestrictions;
                foreach ( $res as $row ) {
                        if ( $row->af_throttled
-                               && in_array( $row->afa_consequence, 
$wgAbuseFilterRestrictedActions )
+                               && !empty( 
$wgAbuseFilterRestrictions[$row->afa_consequence] )
                        ) {
                                # Don't do the action
                        } elseif ( $row->afa_filter != $row->af_id ) {
@@ -744,7 +744,7 @@
 
                $messages = array();
 
-               global $wgOut, $wgAbuseFilterDisallowGlobalLocalBlocks, 
$wgAbuseFilterRestrictedActions;
+               global $wgOut, $wgAbuseFilterDisallowGlobalLocalBlocks, 
$wgAbuseFilterRestrictions;
                foreach ( $actionsByFilter as $filter => $actions ) {
                        // Special-case handling for warnings.
                        $parsed_public_comments = $wgOut->parseInline(
@@ -775,9 +775,7 @@
                        }
 
                        if ( $wgAbuseFilterDisallowGlobalLocalBlocks && 
$global_filter ) {
-                               foreach ( $wgAbuseFilterRestrictedActions as 
$blockingAction ) {
-                                       unset( $actions[$blockingAction] );
-                               }
+                               $actions = array_diff_key( $actions, 
array_filter( $wgAbuseFilterRestrictions ) );
                        }
 
                        if ( !empty( $actions['warn'] ) ) {
@@ -812,7 +810,7 @@
                        }
 
                        // prevent double warnings
-                       if ( count( array_intersect( array_keys( $actions ), 
$wgAbuseFilterRestrictedActions ) ) > 0 &&
+                       if ( count( array_intersect_key( $actions, 
array_filter( $wgAbuseFilterRestrictions ) ) ) > 0 &&
                                !empty( $actions['disallow'] )
                        ) {
                                unset( $actions['disallow'] );
@@ -1880,8 +1878,8 @@
                        }
                }
 
-               global $wgAbuseFilterAvailableActions;
-               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+               global $wgAbuseFilterActions;
+               foreach ( array_filter( $wgAbuseFilterActions ) as $action => 
$_ ) {
                        if ( !isset( $actions1[$action] ) && !isset( 
$actions2[$action] ) ) {
                                // They're both unset
                        } elseif ( isset( $actions1[$action] ) && isset( 
$actions2[$action] ) ) {
diff --git a/AbuseFilter.hooks.php b/AbuseFilter.hooks.php
index 83c005e..af67747 100644
--- a/AbuseFilter.hooks.php
+++ b/AbuseFilter.hooks.php
@@ -8,6 +8,20 @@
        // Hooray!
 
        /**
+        * Called right after configuration has been loaded.
+        */
+       public static function onRegistration() {
+               global $wgAbuseFilterAvailableActions, 
$wgAbuseFilterRestrictedActions;
+
+               if ( isset( $wgAbuseFilterAvailableActions ) || isset( 
$wgAbuseFilterRestrictedActions ) ) {
+                       wfWarn( '$wgAbuseFilterAvailableActions and 
$wgAbuseFilterRestrictedActions have been'
+                               . 'removed. Please use $wgAbuseFilterActions 
and $wgAbuseFilterRestrictions'
+                               . 'instead. The format is the same except the 
action names are the keys of the'
+                               . 'array and the values are booleans.' );
+               }
+       }
+
+       /**
         * Entry point for the APIEditBeforeSave hook.
         *
         * This is needed to give a useful error for API edits on MediaWiki 
before 1.25 (T34216).
diff --git a/AbuseFilter.php b/AbuseFilter.php
index ab95b56..72dfb8b 100644
--- a/AbuseFilter.php
+++ b/AbuseFilter.php
@@ -32,11 +32,13 @@
 // This code is never executed.
 
 /**
- * The possible actions that can be taken by abuse filters. Additional 
possible actions:
- * 'rangeblock'
- * @var string[]
+ * The possible actions that can be taken by abuse filters.
+ *
+ * @var array [action name => is enabled?] At the end of setup, false values 
will be filtered out
  */
-$wgAbuseFilterAvailableActions = [ /* See extension.json */ ];
+$wgAbuseFilterActions = [ /* See extension.json */ ];
+
+$wgAbuseFilterAvailableActions = 'REMOVED'; // use $wgAbuseFilterActions 
instead
 
 /**
  * The maximum number of 'conditions' that can be used each time the filters 
are run against a
@@ -58,10 +60,14 @@
 $wgAbuseFilterParserClass = 'AbuseFilterParser';
 
 /**
- * Users must have the "abusefilter-modify-restricted" user right as well as 
"abusefilter-modify"
- * in order to create or modify filters which carry out these actions.
+ * Do users need "abusefilter-modify-restricted" user right as well as 
"abusefilter-modify"
+ * in order to create or modify filters which carry out this action?
+ *
+ * @var array action name => is restricted?
  */
-$wgAbuseFilterRestrictedActions = [ /* See extension.json */ ];
+$wgAbuseFilterRestrictions = [ /* See extension.json */ ];
+
+$wgAbuseFilterRestrictedActions = 'REMOVED'; // use $wgAbuseFilterRestrictions 
instead
 
 /**
  * Allows to configure the extension to send hit notifications to 
Special:RecentChanges or UDP.
diff --git a/Views/AbuseFilterViewEdit.php b/Views/AbuseFilterViewEdit.php
index 4b378a2..7cee9c7 100644
--- a/Views/AbuseFilterViewEdit.php
+++ b/Views/AbuseFilterViewEdit.php
@@ -84,16 +84,13 @@
                        }
 
                        // Check for restricted actions
-                       global $wgAbuseFilterRestrictedActions;
-                       $allActions = array_keys( array_merge(
-                                               array_filter( $actions ),
-                                               array_filter( $origActions )
-                                       ) );
-
-                       if (
-                               count( array_intersect(
-                                               $wgAbuseFilterRestrictedActions,
-                                               $allActions
+                       global $wgAbuseFilterRestrictions;
+                       if ( count( array_intersect_key(
+                                                array_filter( 
$wgAbuseFilterRestrictions ),
+                                                array_merge(
+                                                        array_filter( $actions 
),
+                                                        array_filter( 
$origActions )
+                                                )
                                ) )
                                && !$user->isAllowed( 
'abusefilter-modify-restricted' )
                        ) {
@@ -166,10 +163,10 @@
                        }
 
                        // Actions
-                       global $wgAbuseFilterAvailableActions;
+                       global $wgAbuseFilterActions;
                        $deadActions = array();
                        $actionsRows = array();
-                       foreach ( $wgAbuseFilterAvailableActions as $action ) {
+                       foreach ( array_filter( $wgAbuseFilterActions ) as 
$action => $_ ) {
                                // Check if it's set
                                $enabled = isset( $actions[$action] ) && 
(bool)$actions[$action];
 
@@ -560,16 +557,18 @@
         * @return HTML text for an action editor.
         */
        function buildConsequenceEditor( $row, $actions ) {
-               global $wgAbuseFilterAvailableActions;
+               global $wgAbuseFilterActions;
+
+               $enabledActions = array_filter( $wgAbuseFilterActions );
 
                $setActions = array();
-               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+               foreach ( $enabledActions as $action => $_ ) {
                        $setActions[$action] = array_key_exists( $action, 
$actions );
                }
 
                $output = '';
 
-               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+               foreach ( $enabledActions as $action => $_ ) {
                        MediaWiki\suppressWarnings();
                        $params = $actions[$action]['parameters'];
                        MediaWiki\restoreWarnings();
@@ -588,9 +587,9 @@
         * @return string
         */
        function buildConsequenceSelector( $action, $set, $parameters, $row ) {
-               global $wgAbuseFilterAvailableActions, $wgMainCacheType;
+               global $wgAbuseFilterActions, $wgMainCacheType;
 
-               if ( !in_array( $action, $wgAbuseFilterAvailableActions ) ) {
+               if ( empty( $wgAbuseFilterActions[$action] ) ) {
                        return '';
                }
 
@@ -947,9 +946,9 @@
                        $row->af_global = $request->getBool( 'wpFilterGlobal' ) 
&& $wgAbuseFilterIsCentral;
 
                        // Actions
-                       global $wgAbuseFilterAvailableActions;
+                       global $wgAbuseFilterActions;
                        $actions = array();
-                       foreach ( $wgAbuseFilterAvailableActions as $action ) {
+                       foreach ( array_filter( $wgAbuseFilterActions ) as 
$action => $_ ) {
                                // Check if it's set
                                $enabled = $request->getBool( 'wpFilterAction' 
. ucfirst( $action ) );
 
diff --git a/extension.json b/extension.json
index 451056b..9b7c76a 100644
--- a/extension.json
+++ b/extension.json
@@ -165,6 +165,7 @@
                "localBasePath": "modules",
                "remoteExtPath": "AbuseFilter/modules"
        },
+       "callback": "AbuseFilterHooks::onRegistration",
        "Hooks": {
                "EditFilterMergedContent": 
"AbuseFilterHooks::onEditFilterMergedContent",
                "GetAutoPromoteGroups": 
"AbuseFilterHooks::onGetAutoPromoteGroups",
@@ -188,16 +189,18 @@
        },
        "config": {
                "@doc": "see AbuseFilter.php",
-               "AbuseFilterAvailableActions": [
-                       "flag",
-                       "throttle",
-                       "warn",
-                       "disallow",
-                       "blockautopromote",
-                       "block",
-                       "degroup",
-                       "tag"
-               ],
+               "AbuseFilterActions": {
+                       "flag": true,
+                       "throttle": true,
+                       "warn": true,
+                       "disallow": true,
+                       "blockautopromote": true,
+                       "block": true,
+                       "rangeblock": false,
+                       "degroup": true,
+                       "tag": true,
+                       "_merge_strategy": "array_plus"
+               },
                "AbuseFilterConditionLimit": 1000,
                "AbuseFilterEmergencyDisableThreshold": {
                        "default": 0.05,
@@ -212,12 +215,18 @@
                        "_merge_strategy": "array_plus"
                },
                "AbuseFilterParserClass": "AbuseFilterParser",
-               "AbuseFilterRestrictedActions": [
-                       "block",
-                       "degroup",
-                       "blockautopromote",
-                       "rangeblock"
-               ],
+               "AbuseFilterRestrictions": {
+                       "flag": false,
+                       "throttle": false,
+                       "warn": false,
+                       "disallow": false,
+                       "blockautopromote": true,
+                       "block": true,
+                       "rangeblock": true,
+                       "degroup": true,
+                       "tag": false,
+                       "_merge_strategy": "array_plus"
+               },
                "AbuseFilterNotifications": false,
                "AbuseFilterNotificationsPrivate": false,
                "AbuseFilterCentralDB": null,

-- 
To view, visit https://gerrit.wikimedia.org/r/299932
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I790d39c2849922d7daf7479f298cd90cf30af129
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AbuseFilter
Gerrit-Branch: REL1_27
Gerrit-Owner: GergÅ‘ Tisza <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to