Legoktm has uploaded a new change for review.

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

Change subject: Allow filtering content model changes
......................................................................

Allow filtering content model changes

This adds the new_content_model and old_content_model variables. The
latter will be an empty string upon page creation when there is no old
revision.

This also required adjusting the null edit detection to not treat
content model changes as null, as well as some other internal
refactoring.

Bug: T145489
Change-Id: I7c3385056751421ba22efb7d8d064981420e8819
---
M AbuseFilter.class.php
M AbuseFilter.hooks.php
M i18n/en.json
M i18n/qqq.json
4 files changed, 27 insertions(+), 8 deletions(-)


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

diff --git a/AbuseFilter.class.php b/AbuseFilter.class.php
index 60e2978..e1908b9 100644
--- a/AbuseFilter.class.php
+++ b/AbuseFilter.class.php
@@ -91,6 +91,8 @@
                        'edit_diff' => 'diff',
                        'new_size' => 'newsize',
                        'old_size' => 'oldsize',
+                       'new_content_model' => 'new-content-model',
+                       'old_content_model' => 'old-content-model',
                        'removed_lines' => 'removedlines',
                        'summary' => 'summary',
                        'article_articleid' => 'article-id',
diff --git a/AbuseFilter.hooks.php b/AbuseFilter.hooks.php
index a9921dc..c162a7d 100644
--- a/AbuseFilter.hooks.php
+++ b/AbuseFilter.hooks.php
@@ -81,7 +81,7 @@
 
                $user = $context->getUser();
 
-               $oldtext = '';
+               $oldcontent = null;
 
                if ( ( $title instanceof Title ) && $title->canExist() && 
$title->exists() ) {
                        // Make sure we load the latest text saved in database 
(bug 31656)
@@ -99,9 +99,11 @@
                        AFComputedVariable::$articleCache[$articleCacheKey] = 
$page;
 
                        // Don't trigger for null edits.
-                       if ( $content && isset( $oldcontent ) && 
$content->equals( $oldcontent ) ) {
+                       if ( $content && $oldcontent ) {
                                // Compare Content objects if available
-                               return Status::newGood();
+                               if ( $content->equals( $oldcontent ) ) {
+                                       return Status::newGood();
+                               }
                        } elseif ( strcmp( $oldtext, $text ) == 0 ) {
                                // Otherwise, compare strings
                                return Status::newGood();
@@ -112,7 +114,7 @@
 
                // Load vars for filters to check
                $vars = self::newVariableHolderForEdit(
-                       $user, $title, $page, $summary, $oldtext, $text
+                       $user, $title, $page, $summary, $content, $oldcontent, 
$text
                );
 
                $filter_result = AbuseFilter::filterAction( $vars, $title );
@@ -133,13 +135,15 @@
         * @param Title $title
         * @param WikiPage|null $page
         * @param string $summary
-        * @param string $oldtext
+        * @param Content $newcontent
+        * @param Content|null $oldcontent
         * @param string $text
         * @return AbuseFilterVariableHolder
         * @throws MWException
         */
        private static function newVariableHolderForEdit(
-               User $user, Title $title, $page, $summary, $oldtext, $text
+               User $user, Title $title, $page, $summary, Content $newcontent,
+               $oldcontent = null, $text
        ) {
                $vars = new AbuseFilterVariableHolder();
                $vars->addHolders(
@@ -148,6 +152,15 @@
                );
                $vars->setVar( 'action', 'edit' );
                $vars->setVar( 'summary', $summary );
+               if ( $oldcontent instanceof Content ) {
+                       $oldmodel = $oldcontent->getModel();
+                       $oldtext = AbuseFilter::contentToString( $oldcontent );
+               } else {
+                       $oldmodel = '';
+                       $oldtext = '';
+               }
+               $vars->setVar( 'old_content_model', $oldmodel );
+               $vars->setVar( 'new_content_model', $newcontent->getModel() );
                $vars->setVar( 'old_wikitext', $oldtext );
                $vars->setVar( 'new_wikitext', $text );
                // TODO: set old_content and new_content vars, use them
@@ -900,9 +913,9 @@
                // Cache any resulting filter matches.
                // Do this outside the synchronous stash lock to avoid any 
chance of slowdown.
                DeferredUpdates::addCallableUpdate(
-                       function () use ( $user, $page, $summary, $oldtext, 
$text ) {
+                       function () use ( $user, $page, $summary, $content, 
$oldcontent, $text ) {
                                $vars = self::newVariableHolderForEdit(
-                                       $user, $page->getTitle(), $page, 
$summary, $oldtext, $text
+                                       $user, $page->getTitle(), $page, 
$summary, $content, $oldcontent, $text
                                );
                                AbuseFilter::filterAction( $vars, 
$page->getTitle(), 'default', $user, 'stash' );
                        },
diff --git a/i18n/en.json b/i18n/en.json
index b44967b..5fc586b 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -243,6 +243,8 @@
        "abusefilter-edit-builder-vars-diff": "Unified diff of changes made by 
edit",
        "abusefilter-edit-builder-vars-newsize": "New page size",
        "abusefilter-edit-builder-vars-oldsize": "Old page size",
+       "abusefilter-edit-builder-vars-old-content-model": "Old content model",
+       "abusefilter-edit-builder-vars-new-content-model": "New content model",
        "abusefilter-edit-builder-vars-removedlines": "Lines removed in edit",
        "abusefilter-edit-builder-vars-summary": "Edit summary/reason",
        "abusefilter-edit-builder-vars-article-id": "Page ID",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 4dad310..0b60ff1 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -274,6 +274,8 @@
        "abusefilter-edit-builder-vars-diff": "Abuse filter syntax option in a 
dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
        "abusefilter-edit-builder-vars-newsize": "New size of the page. Abuse 
filter syntax option in a dropdown from the group 
{{msg-mw|abusefilter-edit-builder-group-vars}}.",
        "abusefilter-edit-builder-vars-oldsize": "Old size of the page. Abuse 
filter syntax option in a dropdown from the group 
{{msg-mw|abusefilter-edit-builder-group-vars}}.",
+       "abusefilter-edit-builder-vars-old-content-model": "Old content model 
of the page. Abuse filter syntax option in a dropdown from the group 
{{msg-mw|abusefilter-edit-builder-group-vars}}.",
+       "abusefilter-edit-builder-vars-new-content-model": "New content model 
of the page. Abuse filter syntax option in a dropdown from the group 
{{msg-mw|abusefilter-edit-builder-group-vars}}.",
        "abusefilter-edit-builder-vars-removedlines": "Abuse filter syntax 
option in a dropdown from the group 
{{msg-mw|abusefilter-edit-builder-group-vars}}.",
        "abusefilter-edit-builder-vars-summary": "Abuse filter syntax option in 
a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
        "abusefilter-edit-builder-vars-article-id": "Abuse filter syntax option 
in a dropdown from the group 
{{msg-mw|Abusefilter-edit-builder-group-vars}}.\n{{Identical|Page ID}}",

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7c3385056751421ba22efb7d8d064981420e8819
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AbuseFilter
Gerrit-Branch: master
Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to