Legoktm has uploaded a new change for review.

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


Change subject: [WIP] Add a hook for extensions to use to add actions
......................................................................

[WIP] Add a hook for extensions to use to add actions

Change-Id: I1eac8c8466bed79a1ee0479ecfe2038d3e77f949
---
M AbuseFilter.class.php
M AbuseFilter.php
M Views/AbuseFilterViewEdit.php
3 files changed, 65 insertions(+), 20 deletions(-)


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

diff --git a/AbuseFilter.class.php b/AbuseFilter.class.php
index 488521c..bb5b18a 100644
--- a/AbuseFilter.class.php
+++ b/AbuseFilter.class.php
@@ -670,10 +670,10 @@
                );
 
                // Categorise consequences by filter.
-               global $wgAbuseFilterRestrictedActions;
+               $restrictedActions = self::getRestrictedFunctions();
                foreach( $res as $row ) {
                        if ( $row->af_throttled
-                               && in_array( $row->afa_consequence, 
$wgAbuseFilterRestrictedActions ) )
+                               && in_array( $row->afa_consequence, 
$restrictedActions ) )
                        {
                                # Don't do the action
                        } elseif ( $row->afa_filter != $row->af_id ) {
@@ -709,7 +709,7 @@
 
                $messages = array();
 
-               global $wgOut, $wgAbuseFilterDisallowGlobalLocalBlocks, 
$wgAbuseFilterRestrictedActions;
+               global $wgOut, $wgAbuseFilterDisallowGlobalLocalBlocks;
                foreach ( $actionsByFilter as $filter => $actions ) {
                        // Special-case handling for warnings.
                        $parsed_public_comments = $wgOut->parseInline(
@@ -736,9 +736,9 @@
                                        continue;
                                }
                        }
-
+                       $restrictedActions = self::getRestrictedFunctions();
                        if ( $wgAbuseFilterDisallowGlobalLocalBlocks && 
$global_filter ) {
-                               foreach ( $wgAbuseFilterRestrictedActions as 
$blockingAction ) {
+                               foreach ( $restrictedActions as $blockingAction 
) {
                                        unset( $actions[$blockingAction] );
                                }
                        }
@@ -775,7 +775,7 @@
                        }
 
                        // prevent double warnings
-                       if ( count( array_intersect( array_keys( $actions ), 
$wgAbuseFilterRestrictedActions ) ) > 0 &&
+                       if ( count( array_intersect( array_keys( $actions ), 
$restrictedActions ) ) > 0 &&
                                        !empty( $actions['disallow'] ) ) {
                                unset( $actions['disallow'] );
                        }
@@ -1184,7 +1184,7 @@
                $vars, $rule_desc )
        {
                global $wgAbuseFilterCustomActionsHandlers, $wgRequest;
-
+               $availableactions = self::getAvailableActions();
                $message = null;
 
                switch ( $action ) {
@@ -1350,8 +1350,8 @@
                                AbuseFilter::$tagsToSet[$actionID] = 
$parameters;
                                break;
                        default:
-                               if( isset( 
$wgAbuseFilterCustomActionsHandlers[$action] ) ) {
-                                       $custom_function = 
$wgAbuseFilterCustomActionsHandlers[$action];
+                               if( isset( 
$availableactions[$action]['callback'] ) ) {
+                                       $custom_function = 
$availableactions[$action]['callback'];
                                        if( is_callable( $custom_function ) ) {
                                                $msg = call_user_func( 
$custom_function, $action, $parameters, $title, $vars, $rule_desc );
                                        }
@@ -1759,8 +1759,8 @@
                        }
                }
 
-               global $wgAbuseFilterAvailableActions;
-               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+               $availableactions = self::getAvailableActions();
+               foreach ( $availableactions as $action => $data ) {
                        if ( !isset( $actions1[$action] ) && !isset( 
$actions2[$action] ) ) {
                                // They're both unset
                        } elseif ( isset( $actions1[$action] ) && isset( 
$actions2[$action] ) ) {
@@ -2269,4 +2269,45 @@
 
                return $firstChanges[$filterID];
        }
+
+       /**
+        * Gets a list of actions that are enabled
+        * Return format is a list of arrays which have the following keys:
+        * 'type' => Can be 'restricted', 'global', 'default', 'hook'
+        * 'callback' => If the function is of type hook, this function is 
called
+        *
+        * @return array
+        */
+       public static function getAvailableActions() {
+               global $wgAbuseFilterAvailableActions, 
$wgAbuseFilterRestrictedActions;
+
+               // Backwards compat I guess
+               $array = array();
+               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+                       $type = 'default';
+                       if ( in_array( $action, $wgAbuseFilterRestrictedActions 
) ) {
+                               $type = 'restricted';
+                       }
+                       $array[$action] = array( 'type' => 'default' );
+               }
+
+               // Other extensions!
+               wfRunHooks( 'AbuseFilterCustomActions', &$array );
+
+               return $array;
+       }
+
+       /**
+        * Replaces $wgAbuseFilterRestrictedActions
+        */
+       public static function getRestrictedFunctions() {
+               $arr = array();
+               foreach ( $arr as $name => $data ) {
+                       if ( $data['type'] == 'restricted' ) {
+                               $arr[] = $name;
+                       }
+               }
+
+               return $arr;
+       }
 }
diff --git a/AbuseFilter.php b/AbuseFilter.php
index 1b0a55a..15fe3ce 100644
--- a/AbuseFilter.php
+++ b/AbuseFilter.php
@@ -200,6 +200,10 @@
 $wgAbuseFilterAnonBlockDuration = null;
 
 // Callback functions for custom actions
+/**
+ * Callback functions for custom actions, should use the 
AbuseFilterCustomActions hook instead
+ * @deprecated
+ */
 $wgAbuseFilterCustomActionsHandlers = array();
 
 // Valid "filter groups" – used for applying edit filters to certain types of 
actions
diff --git a/Views/AbuseFilterViewEdit.php b/Views/AbuseFilterViewEdit.php
index 5d82db8..f433041 100644
--- a/Views/AbuseFilterViewEdit.php
+++ b/Views/AbuseFilterViewEdit.php
@@ -157,10 +157,10 @@
                        }
 
                        // Actions
-                       global $wgAbuseFilterAvailableActions;
+                       $availableactions = AbuseFilter::getAvailableActions();
                        $deadActions = array();
                        $actionsRows = array();
-                       foreach ( $wgAbuseFilterAvailableActions as $action ) {
+                       foreach ( $availableactions as $action => $data ) {
                                // Check if it's set
                                $enabled = isset( $actions[$action] ) && 
(bool)$actions[$action];
 
@@ -551,16 +551,16 @@
         * @return HTML text for an action editor.
         */
        function buildConsequenceEditor( $row, $actions ) {
-               global $wgAbuseFilterAvailableActions;
+               $availableactions = AbuseFilter::getAvailableActions();
 
                $setActions = array();
-               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+               foreach ( $availableactions as $action => $data ) {
                        $setActions[$action] = array_key_exists( $action, 
$actions );
                }
 
                $output = '';
 
-               foreach ( $wgAbuseFilterAvailableActions as $action ) {
+               foreach ( $availableactions as $action ) {
                        $output .= $this->buildConsequenceSelector(
                                $action, $setActions[$action], 
@$actions[$action]['parameters'], $row );
                }
@@ -576,9 +576,9 @@
         * @return string
         */
        function buildConsequenceSelector( $action, $set, $parameters, $row ) {
-               global $wgAbuseFilterAvailableActions;
+               $availableactions = AbuseFilter::getAvailableActions();
 
-               if ( !in_array( $action, $wgAbuseFilterAvailableActions ) ) {
+               if ( !in_array( $action, array_keys( $availableactions ) ) ) {
                        return '';
                }
 
@@ -927,9 +927,9 @@
                        $row->af_global = $request->getBool( 'wpFilterGlobal' ) 
&& $wgAbuseFilterIsCentral;
 
                        // Actions
-                       global $wgAbuseFilterAvailableActions;
+                       $availableactions = AbuseFilter::getAvailableActions();
                        $actions = array();
-                       foreach ( $wgAbuseFilterAvailableActions as $action ) {
+                       foreach ( $availableactions as $action => $data ) {
                                // Check if it's set
                                $enabled = $request->getBool( 'wpFilterAction' 
. ucfirst( $action ) );
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1eac8c8466bed79a1ee0479ecfe2038d3e77f949
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AbuseFilter
Gerrit-Branch: master
Gerrit-Owner: Legoktm <[email protected]>

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

Reply via email to