mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-28 10:11:45 +00:00
1f002f812f
These are from patches that were already in progress before we did the first run of conversions. Change-Id: Id883e693a518130cfcc80bfd0f2874cbd9593446
90 lines
2.2 KiB
PHP
90 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* DiscussionTools tag hooks
|
|
*
|
|
* @file
|
|
* @ingroup Extensions
|
|
* @license MIT
|
|
*/
|
|
|
|
namespace MediaWiki\Extension\DiscussionTools\Hooks;
|
|
|
|
use MediaWiki\ChangeTags\Hook\ChangeTagsListActiveHook;
|
|
use MediaWiki\ChangeTags\Hook\ListDefinedTagsHook;
|
|
use MediaWiki\Hook\RecentChange_saveHook;
|
|
use RecentChange;
|
|
use RequestContext;
|
|
|
|
class TagHooks implements
|
|
ChangeTagsListActiveHook,
|
|
ListDefinedTagsHook,
|
|
RecentChange_saveHook
|
|
{
|
|
private const TAGS = [
|
|
'discussiontools',
|
|
// Features:
|
|
'discussiontools-reply',
|
|
'discussiontools-edit',
|
|
'discussiontools-newtopic',
|
|
'discussiontools-added-comment',
|
|
// Input methods:
|
|
'discussiontools-source',
|
|
'discussiontools-visual',
|
|
// Temporary input method:
|
|
'discussiontools-source-enhanced',
|
|
];
|
|
|
|
/**
|
|
* @param string[] &$tags List of all active tags. Append to this array.
|
|
* @return bool|void True or no return value to continue or false to abort
|
|
*/
|
|
public function onChangeTagsListActive( &$tags ) {
|
|
$this->onListDefinedTags( $tags );
|
|
}
|
|
|
|
/**
|
|
* Populate core Special:Tags with the change tags in use by DiscussionTools.
|
|
*
|
|
* @param string[] &$tags List of tags
|
|
* @return bool|void True or no return value to continue or false to abort
|
|
*/
|
|
public function onListDefinedTags( &$tags ) {
|
|
$tags = array_merge( $tags, static::TAGS );
|
|
}
|
|
|
|
// phpcs:disable MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName
|
|
|
|
/**
|
|
* Implements the RecentChange_save hook, to add an allowed set of changetags
|
|
* to edits.
|
|
*
|
|
* @param RecentChange $recentChange
|
|
* @return bool
|
|
*/
|
|
public function onRecentChange_save( $recentChange ) {
|
|
// only apply to api edits, since there's no case where discussiontools
|
|
// should be using the form-submit method.
|
|
if ( !defined( 'MW_API' ) ) {
|
|
return true;
|
|
}
|
|
|
|
$tags = static::getDiscussionToolsTagsFromRequest();
|
|
if ( $tags ) {
|
|
$recentChange->addTags( $tags );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get DT tags from the dttags param in the request, and validate against known tags.
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getDiscussionToolsTagsFromRequest(): array {
|
|
$request = RequestContext::getMain()->getRequest();
|
|
$tags = explode( ',', $request->getText( 'dttags' ) );
|
|
return array_values( array_intersect( $tags, static::TAGS ) );
|
|
}
|
|
}
|