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