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