diff --git a/extension.json b/extension.json index ec8473da6..5be2ead3a 100644 --- a/extension.json +++ b/extension.json @@ -184,6 +184,7 @@ "BeforePageDisplay": [ "DiscussionToolsHooks::onBeforePageDisplay" ], + "GetBetaFeaturePreferences": "DiscussionToolsHooks::onGetBetaPreferences", "ListDefinedTags": "DiscussionToolsHooks::onListDefinedTags", "ChangeTagsListActive": "DiscussionToolsHooks::onListDefinedTags", "RecentChange_save": "DiscussionToolsHooks::onRecentChangeSave" @@ -193,6 +194,10 @@ "value": true, "description": "Enable DiscussionTools on talk pages." }, + "DiscussionToolsBeta": { + "value": false, + "description": "Make DiscussionTools a BetaFeature." + }, "DiscussionToolsUseVisualEditor": { "value": false, "description": "Use VisualEditor for editing replies (both visual and wikitext)." diff --git a/i18n/en.json b/i18n/en.json index 1e7b5737c..80d828c2b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -5,6 +5,10 @@ "discussiontools": "Discussion tools", "discussiontools-defaultsummary-reply": "Reply", "discussiontools-desc": "Tools to enhance discussion pages.", + "discussiontools-preference-label": "Discussion tools", + "discussiontools-preference-description": "Enable a new workflow for [//www.mediawiki.org/wiki/Talk_pages_project/replying replying to specific comments] on talk pages.\n\nPlease note that over time new tools for interacting with talk pages will be added.\n\nUpdates about these features will be posted on the [//www.mediawiki.org/wiki/Talk_pages_project/Updates talk pages project's updates page].", + "discussiontools-preference-info-link": "\/\/mediawiki.org\/wiki\/Talk_pages_project", + "discussiontools-preference-discussion-link": "\/\/mediawiki.org\/wiki\/Talk:Talk_pages_project", "discussiontools-replylink": "Reply", "discussiontools-replywidget-anon-warning": "You are not logged in. To receive attribution with your name instead of your IP address, you can [$1 log in] or [$2 create an account].", "discussiontools-replywidget-cancel": "Cancel", diff --git a/i18n/qqq.json b/i18n/qqq.json index f8bfed346..2997c8f64 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -9,6 +9,10 @@ "discussiontools": "{{name}}", "discussiontools-defaultsummary-reply": "Default edit summary for a reply.\n\n'''Note that this is a noun (''a reply''), not a verb (''to reply''). Alternatively you can use a paste tense verb if that's more natural in your language.'''", "discussiontools-desc": "{{desc\n| name = DiscussionTools\n| url = https://www.mediawiki.org/wiki/Extension:DiscussionTools\n}}", + "discussiontools-preference-description": "Used in [[Special:Preferences]].\n\nUsed as description for the checkbox to enable discussion tools.\n\nThe label for this checkbox is {{msg-mw|discussiontools-preference-label}}.", + "discussiontools-preference-discussion-link": "{{optional|Used on [[Special:Preferences]] as a link to a page where users can discuss this Beta Feature. Defaults to a page on MediaWiki.org.}}", + "discussiontools-preference-info-link": "{{optional|Used on [[Special:Preferences]] as a link to a page where users can learn about this Beta Feature. Defaults to a page on MediaWiki.org.}}", + "discussiontools-preference-label": "Used in [[Special:Preferences]].\n\nUsed as label for checkbox to enable discussion tools.\n\nThe description for this checkbox is: {{msg-mw|discussiontools-preference-description}}", "discussiontools-replylink": "Label for the reply link added after each comment.", "discussiontools-replywidget-anon-warning": "Warning message to be displayed when anonymous user starts writing a new topic or reply.\n* $1 is a URL to log in.\n* $2 is a URL to register an account.", "discussiontools-replywidget-cancel": "Label for the cancel button in the reply widget", diff --git a/images/betafeatures-icon-DiscussionTools-ltr.svg b/images/betafeatures-icon-DiscussionTools-ltr.svg new file mode 100644 index 000000000..8126e1aa5 --- /dev/null +++ b/images/betafeatures-icon-DiscussionTools-ltr.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/betafeatures-icon-DiscussionTools-rtl.svg b/images/betafeatures-icon-DiscussionTools-rtl.svg new file mode 100644 index 000000000..17acbf60e --- /dev/null +++ b/images/betafeatures-icon-DiscussionTools-rtl.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/includes/DiscussionToolsHooks.php b/includes/DiscussionToolsHooks.php index 9966ff840..55e43b8df 100644 --- a/includes/DiscussionToolsHooks.php +++ b/includes/DiscussionToolsHooks.php @@ -50,6 +50,11 @@ class DiscussionToolsHooks { $title = $output->getTitle(); $actionName = Action::getActionName( $output->getContext() ); $req = $output->getRequest(); + $user = $skin->getUser(); + $enabled = $dtConfig->get( 'DiscussionToolsEnable' ) && ( + !$dtConfig->get( 'DiscussionToolsBeta' ) || + $user->getOption( 'discussiontools-betaenable' ) + ); if ( // Don't show on edit pages @@ -61,7 +66,7 @@ class DiscussionToolsHooks { // Query parameter to load on any wikitext page for testing $req->getVal( 'dtenable' ) || // If configured, load on all talk pages - ( $dtConfig->get( 'DiscussionToolsEnable' ) && $title->isTalkPage() ) + ( $enabled && $title->isTalkPage() ) // TODO: Allow non talk pages to be treated as talk pages // using a magic word. ) @@ -72,6 +77,40 @@ class DiscussionToolsHooks { } } + /** + * Handler for the GetBetaPreferences hook, to add and hide user beta preferences as configured + * + * @param User $user The user object + * @param array &$preferences Their preferences object + */ + public static function onGetBetaPreferences( User $user, array &$preferences ) { + $coreConfig = RequestContext::getMain()->getConfig(); + $iconpath = $coreConfig->get( 'ExtensionAssetsPath' ) . '/DiscussionTools/images'; + + $dtConfig = MediaWikiServices::getInstance()->getConfigFactory() + ->makeConfig( 'discussiontools' ); + + if ( + $dtConfig->get( 'DiscussionToolsEnable' ) && + $dtConfig->get( 'DiscussionToolsBeta' ) + ) { + $preferences['discussiontools-betaenable'] = [ + 'version' => '1.0', + 'label-message' => 'discussiontools-preference-label', + 'desc-message' => 'discussiontools-preference-description', + 'screenshot' => [ + 'ltr' => "$iconpath/betafeatures-icon-DiscussionTools-ltr.svg", + 'rtl' => "$iconpath/betafeatures-icon-DiscussionTools-rtl.svg", + ], + 'info-message' => 'discussiontools-preference-info-link', + 'discussion-message' => 'discussiontools-preference-discussion-link', + 'requirements' => [ + 'javascript' => true + ] + ]; + } + } + /** * Implements the ListDefinedTags and ChangeTagsListActive hooks, to * populate core Special:Tags with the change tags in use by DiscussionTools.