jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/391151 )

Change subject: Add a filter for learners (newly autoconfirmed users)
......................................................................


Add a filter for learners (newly autoconfirmed users)

Put the user's experience level in the DB as a string rather than
as a learner/not-learner boolean, so it's easier to add filters
for e.g. experienced users in the future.

Bonus: actually run PageTriageTagsPatch.sql from update.php

Bug: T175225
Change-Id: I27fd98fb8003525e6b512aaa5780b6375e0e6850
---
M PageTriage.hooks.php
M SpecialNewPagesFeed.php
M api/ApiPageTriageList.php
M api/ApiPageTriageStats.php
M extension.json
M i18n/en.json
M i18n/qqq.json
M includes/ArticleMetadata.php
M modules/ext.pageTriage.views.list/ext.pageTriage.listControlNav.js
M sql/PageTriageTags.sql
M sql/PageTriageTagsPatch.sql
M tests/phpunit/ArticleMetadataTest.php
12 files changed, 46 insertions(+), 4 deletions(-)

Approvals:
  jenkins-bot: Verified
  Jforrester: Looks good to me, but someone else must approve
  Kaldari: Looks good to me, approved



diff --git a/PageTriage.hooks.php b/PageTriage.hooks.php
index 733df56..2f395a5 100644
--- a/PageTriage.hooks.php
+++ b/PageTriage.hooks.php
@@ -839,6 +839,12 @@
                        'ptrl_comment',
                        $base . '/PageTriageLogPatch_Drop_ptrl_comment.sql'
                );
+               $updater->addExtensionUpdate( [
+                       'modifyTable',
+                       'pagetriage_tags',
+                       $base . '/PageTriageTagsPatch.sql',
+                       true
+               ] );
 
                return true;
        }
diff --git a/SpecialNewPagesFeed.php b/SpecialNewPagesFeed.php
index f82775e..00181ab 100644
--- a/SpecialNewPagesFeed.php
+++ b/SpecialNewPagesFeed.php
@@ -245,6 +245,11 @@
                                                                                
<%= mw.msg( 'pagetriage-filter-non-autoconfirmed' ) %>
                                                                        
</label> <br/>
                                                                        <input 
type="radio" name="mwe-pt-filter-radio"
+                                                                               
id="mwe-pt-filter-learners" value="learners" />
+                                                                       <label 
for="mwe-pt-filter-learners">
+                                                                               
<%= mw.msg( 'pagetriage-filter-learners' ) %>
+                                                                       
</label><br />
+                                                                       <input 
type="radio" name="mwe-pt-filter-radio"
                                                                                
id="mwe-pt-filter-blocked" value="blocked_users" />
                                                                        <label 
for="mwe-pt-filter-blocked">
                                                                                
<%= mw.msg( 'pagetriage-filter-blocked' ) %>
diff --git a/api/ApiPageTriageList.php b/api/ApiPageTriageList.php
index c8766c7..036f8a4 100644
--- a/api/ApiPageTriageList.php
+++ b/api/ApiPageTriageList.php
@@ -238,6 +238,8 @@
                        'no_inbound_links' => [ 'name' => 'linkcount', 'op' => 
'=', 'val' => '0' ],
                        // non auto confirmed users
                        'non_autoconfirmed_users' => [ 'name' => 
'user_autoconfirmed', 'op' => '=', 'val' => '0' ],
+                       // learning users (newly autoconfirmed)
+                       'learners' => [ 'name' => 'user_experience', 'op' => 
'=', 'val' => 'learner' ],
                        // blocked users
                        'blocked_users' => [ 'name' => 'user_block_status', 
'op' => '=', 'val' => '1' ],
                        // bots
@@ -316,6 +318,9 @@
                        'non_autoconfirmed_users' => [
                                ApiBase::PARAM_TYPE => 'boolean',
                        ],
+                       'learners' => [
+                               ApiBase::PARAM_TYPE => 'boolean',
+                       ],
                        'blocked_users' => [
                                ApiBase::PARAM_TYPE => 'boolean',
                        ],
diff --git a/api/ApiPageTriageStats.php b/api/ApiPageTriageStats.php
index 228b46d..1e64621 100644
--- a/api/ApiPageTriageStats.php
+++ b/api/ApiPageTriageStats.php
@@ -56,6 +56,9 @@
                        'non_autoconfirmed_users' => [
                                ApiBase::PARAM_TYPE => 'boolean',
                        ],
+                       'learners' => [
+                               ApiBase::PARAM_TYPE => 'boolean',
+                       ],
                        'blocked_users' => [
                                ApiBase::PARAM_TYPE => 'boolean',
                        ],
diff --git a/extension.json b/extension.json
index 04f0e9c..ecfc0f5 100644
--- a/extension.json
+++ b/extension.json
@@ -262,6 +262,7 @@
                                "pagetriage-filter-no-categories",
                                "pagetriage-filter-orphan",
                                "pagetriage-filter-non-autoconfirmed",
+                               "pagetriage-filter-learners",
                                "pagetriage-filter-blocked",
                                "pagetriage-filter-set-button",
                                "pagetriage-stats-less-than-a-day",
@@ -277,6 +278,7 @@
                                "pagetriage-filter-stat-no-categories",
                                "pagetriage-filter-stat-orphan",
                                "pagetriage-filter-stat-non-autoconfirmed",
+                               "pagetriage-filter-stat-learners",
                                "pagetriage-filter-stat-blocked",
                                "pagetriage-filter-stat-username",
                                "pagetriage-filter-all",
@@ -629,7 +631,7 @@
                        }
                },
                "PageTriageCacheVersion": {
-                       "value": "1.4"
+                       "value": "1.5"
                },
                "PageTriageNamespaces": {
                        "value": [
diff --git a/i18n/en.json b/i18n/en.json
index 4ae79d3..fcaedcf 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -63,7 +63,8 @@
        "pagetriage-filter-second-show-heading": "That:",
        "pagetriage-filter-no-categories": "Have no categories",
        "pagetriage-filter-orphan": "Are orphaned",
-       "pagetriage-filter-non-autoconfirmed": "Were created by new editors",
+       "pagetriage-filter-non-autoconfirmed": "Were created by newcomers 
(non-autoconfirmed users)",
+       "pagetriage-filter-learners": "Were created by learners (newly 
autoconfirmed users)",
        "pagetriage-filter-blocked": "Were created by blocked users",
        "pagetriage-filter-all": "Show all",
        "pagetriage-filter-set-button": "Set filters",
@@ -80,7 +81,8 @@
        "pagetriage-filter-stat-nominated-for-deletion": "nominated for 
deletion",
        "pagetriage-filter-stat-no-categories": "no categories",
        "pagetriage-filter-stat-orphan": "orphans",
-       "pagetriage-filter-stat-non-autoconfirmed": "new editors",
+       "pagetriage-filter-stat-non-autoconfirmed": "newcomers",
+       "pagetriage-filter-stat-learners": "learners",
        "pagetriage-filter-stat-blocked": "blocked users",
        "pagetriage-filter-stat-username": "username: $1",
        "pagetriage-no-pages": "No pages match your criteria.",
@@ -391,6 +393,7 @@
        "apihelp-pagetriagelist-param-no_category": "Whether to show only pages 
with no category.",
        "apihelp-pagetriagelist-param-no_inbound_links": "Whether to show only 
pages with no inbound links.",
        "apihelp-pagetriagelist-param-non_autoconfirmed_users": "Whether to 
show only pages created by non auto confirmed users.",
+       "apihelp-pagetriagelist-param-learners": "Whether to show only pages 
created by newly autoconfirmed users.",
        "apihelp-pagetriagelist-param-blocked_users": "Whether to show only 
pages created by blocked users.",
        "apihelp-pagetriagelist-param-username": "Show only pages created by 
username.",
        "apihelp-pagetriagelist-example-1": "List 100 unreviewed pages in 
namespace 0",
@@ -405,6 +408,7 @@
        "apihelp-pagetriagestats-param-no_category": "Whether to include only 
pages with no category.",
        "apihelp-pagetriagestats-param-no_inbound_links": "Whether to include 
only pages with no inbound links.",
        "apihelp-pagetriagestats-param-non_autoconfirmed_users": "Whether to 
include only pages created by non-autoconfirmed users.",
+       "apihelp-pagetriagestats-param-learners": "Whether to include only 
pages created by newly autoconfirmed users.",
        "apihelp-pagetriagestats-param-blocked_users": "Whether to include only 
pages created by blocked users.",
        "apihelp-pagetriagestats-param-username": "Include only pages created 
by username.",
        "apihelp-pagetriagestats-param-topreviewers": "Include the top 50 
reviewers over the given timeframe. Valid values include last-day, last-week 
(default), or last-month.",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index db93b6b..cb500c1 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -77,6 +77,7 @@
        "pagetriage-filter-no-categories": "Checkbox text for pages with no 
categories",
        "pagetriage-filter-orphan": "Checkbox text for orphan 
pages.\n{{Identical|Orphan}}",
        "pagetriage-filter-non-autoconfirmed": "Checkbox text for pages by 
non-Autoconfirmed users",
+       "pagetriage-filter-learners": "Checkbox text for users who are 
autoconfirmed but are not much more experienced than the autoconfirmed 
threshold",
        "pagetriage-filter-blocked": "Checkbox text for pages by blocked users",
        "pagetriage-filter-all": "Radio button text for all items radio 
button.\n{{Identical|Show all}}",
        "pagetriage-filter-set-button": "Button text for the set filter button",
@@ -94,6 +95,7 @@
        "pagetriage-filter-stat-no-categories": "Status display component for 
pages with no categories. This message is included as part of a sentence-style 
list.\n{{Identical|No category}}",
        "pagetriage-filter-stat-orphan": "Status display component for orphan 
pages. This message is included as part of a sentence-style 
list.\n{{Identical|Orphan}}",
        "pagetriage-filter-stat-non-autoconfirmed": "Status display component 
for pages by non-autoconfirmed editors. This message is included as part of a 
sentence-style list.",
+       "pagetriage-filter-stat-learners": "Status display component for pages 
by newly autoconfirmed editors. This message is included as part of a 
sentence-style list.",
        "pagetriage-filter-stat-blocked": "Status display component for pages 
by blocked users. This message is included as part of a sentence-style list.",
        "pagetriage-filter-stat-username": "Status display component for filter 
by username. $1 is the username. This message is included as part of a 
sentence-style list.\n{{Identical|Username}}",
        "pagetriage-no-pages": "Message to display when no pages were 
retrieved",
@@ -404,6 +406,7 @@
        "apihelp-pagetriagelist-param-no_category": 
"{{doc-apihelp-param|pagetriagelist|no_category}}",
        "apihelp-pagetriagelist-param-no_inbound_links": 
"{{doc-apihelp-param|pagetriagelist|no_inbound_links}}",
        "apihelp-pagetriagelist-param-non_autoconfirmed_users": 
"{{doc-apihelp-param|pagetriagelist|non_autoconfirmed_users}}",
+       "apihelp-pagetriagelist-param-learners": 
"{{doc-apihelp-param|pagetriagelist|learners}}",
        "apihelp-pagetriagelist-param-blocked_users": 
"{{doc-apihelp-param|pagetriagelist|blocked_users}}",
        "apihelp-pagetriagelist-param-username": 
"{{doc-apihelp-param|pagetriagelist|username}}",
        "apihelp-pagetriagelist-example-1": 
"{{doc-apihelp-example|pagetriagelist}}",
@@ -418,6 +421,7 @@
        "apihelp-pagetriagestats-param-no_category": 
"{{doc-apihelp-param|pagetriagestats|no_category}}",
        "apihelp-pagetriagestats-param-no_inbound_links": 
"{{doc-apihelp-param|pagetriagestats|no_inbound_links}}",
        "apihelp-pagetriagestats-param-non_autoconfirmed_users": 
"{{doc-apihelp-param|pagetriagestats|non_autoconfirmed_users}}",
+       "apihelp-pagetriagestats-param-learners": 
"{{doc-apihelp-param|pagetriagestats|learners}}",
        "apihelp-pagetriagestats-param-blocked_users": 
"{{doc-apihelp-param|pagetriagestats|blocked_users}}",
        "apihelp-pagetriagestats-param-username": 
"{{doc-apihelp-param|pagetriagestats|username}}",
        "apihelp-pagetriagestats-param-topreviewers": 
"{{doc-apihelp-param|pagetriagestats|topreviewers}}",
diff --git a/includes/ArticleMetadata.php b/includes/ArticleMetadata.php
index 3292c92..b9558ea 100644
--- a/includes/ArticleMetadata.php
+++ b/includes/ArticleMetadata.php
@@ -931,6 +931,7 @@
                                );
                                
$this->metadata[$row->page_id]['user_autoconfirmed'] =
                                        $user->isAllowed( 'autoconfirmed' ) ? 
'1' : '0';
+                               
$this->metadata[$row->page_id]['user_experience'] = $user->getExperienceLevel();
                                $this->metadata[$row->page_id]['user_bot'] = 
$user->isAllowed( 'bot' ) ? '1' : '0';
                                
$this->metadata[$row->page_id]['user_block_status'] = $row->ipb_id ? '1' : '0';
                        // User doesn't exist, etc IP
@@ -940,6 +941,7 @@
                                
$this->metadata[$row->page_id]['user_editcount'] = 0;
                                
$this->metadata[$row->page_id]['user_creation_date'] = '';
                                
$this->metadata[$row->page_id]['user_autoconfirmed'] = '0';
+                               
$this->metadata[$row->page_id]['user_experience'] = 'anonymous';
                                $this->metadata[$row->page_id]['user_bot'] = 
'0';
                                
$this->metadata[$row->page_id]['user_block_status'] = $row->ipb_id ? '1' : '0';
                        }
diff --git a/modules/ext.pageTriage.views.list/ext.pageTriage.listControlNav.js 
b/modules/ext.pageTriage.views.list/ext.pageTriage.listControlNav.js
index b367320..7a1d983 100644
--- a/modules/ext.pageTriage.views.list/ext.pageTriage.listControlNav.js
+++ b/modules/ext.pageTriage.views.list/ext.pageTriage.listControlNav.js
@@ -282,6 +282,10 @@
                                // jscs: enable 
requireCamelCaseOrUpperCaseIdentifiers
                        }
 
+                       if ( $( '#mwe-pt-filter-learners' ).prop( 'checked' ) ) 
{
+                               apiParams.learners = '1';
+                       }
+
                        if ( $( '#mwe-pt-filter-blocked' ).prop( 'checked' ) ) {
                                // jscs: disable 
requireCamelCaseOrUpperCaseIdentifiers
                                apiParams.blocked_users = '1';
@@ -346,6 +350,7 @@
                        this.menuCheckboxUpdate( $( 
'#mwe-pt-filter-no-categories' ), 'no_category', 
'pagetriage-filter-stat-no-categories' );
                        this.menuCheckboxUpdate( $( '#mwe-pt-filter-orphan' ), 
'no_inbound_links', 'pagetriage-filter-stat-orphan' );
                        this.menuCheckboxUpdate( $( 
'#mwe-pt-filter-non-autoconfirmed' ), 'non_autoconfirmed_users', 
'pagetriage-filter-stat-non-autoconfirmed' );
+                       this.menuCheckboxUpdate( $( '#mwe-pt-filter-learners' 
), 'learners', 'pagetriage-filter-stat-learners' );
                        this.menuCheckboxUpdate( $( '#mwe-pt-filter-blocked' ), 
'blocked_users', 'pagetriage-filter-stat-blocked' );
 
                        this.filterStatus = this.newFilterStatus.join( mw.msg( 
'comma-separator' ) );
diff --git a/sql/PageTriageTags.sql b/sql/PageTriageTags.sql
index 5e70873..a6c62b1 100644
--- a/sql/PageTriageTags.sql
+++ b/sql/PageTriageTags.sql
@@ -34,6 +34,8 @@
 INSERT INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc)
 VALUES ('user_autoconfirmed', 'Check if user is autoconfirmed' );
 INSERT INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc)
+VALUES ('user_experience', 'Experience level: newcomer, learner, experienced 
or anonymous' );
+INSERT INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc)
 VALUES ('user_bot', 'Check if user is in bot group');
 INSERT INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc)
 VALUES ('user_block_status', 'User block status');
diff --git a/sql/PageTriageTagsPatch.sql b/sql/PageTriageTagsPatch.sql
index 0f5146d..40b64a1 100644
--- a/sql/PageTriageTagsPatch.sql
+++ b/sql/PageTriageTagsPatch.sql
@@ -1 +1,4 @@
-INSERT INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc) VALUES 
('reference', 'Check if page has references');
+INSERT IGNORE INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc)
+VALUES ('reference', 'Check if page has references');
+INSERT IGNORE INTO /*_*/pagetriage_tags (ptrt_tag_name, ptrt_tag_desc)
+VALUES ('user_experience', 'Experience level: newcomer, learner, experienced 
or anonymous' );
diff --git a/tests/phpunit/ArticleMetadataTest.php 
b/tests/phpunit/ArticleMetadataTest.php
index 5a12678..146dee0 100644
--- a/tests/phpunit/ArticleMetadataTest.php
+++ b/tests/phpunit/ArticleMetadataTest.php
@@ -66,6 +66,7 @@
                                        'user_editcount',
                                        'user_creation_date',
                                        'user_autoconfirmed',
+                                       'user_experience',
                                        'user_bot',
                                        'user_block_status',
                                        'user_id',

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I27fd98fb8003525e6b512aaa5780b6375e0e6850
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/PageTriage
Gerrit-Branch: master
Gerrit-Owner: Catrope <r...@wikimedia.org>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
Gerrit-Reviewer: Kaldari <rkald...@wikimedia.org>
Gerrit-Reviewer: Siebrand <siebr...@kitano.nl>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to