2021-01-29 17:09:52 +00:00
|
|
|
<?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',
|
|
|
|
// Input methods:
|
|
|
|
'discussiontools-source',
|
|
|
|
'discussiontools-visual',
|
2021-04-16 16:04:57 +00:00
|
|
|
// Temporary input method:
|
|
|
|
'discussiontools-source-enhanced',
|
2021-01-29 17:09:52 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @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;
|
|
|
|
}
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
2021-04-15 00:21:53 +00:00
|
|
|
$tags = explode( ',', $request->getText( 'dttags' ) );
|
2021-01-29 17:09:52 +00:00
|
|
|
|
|
|
|
$tags = array_values( array_intersect( $tags, static::TAGS ) );
|
|
|
|
|
|
|
|
if ( $tags ) {
|
|
|
|
$recentChange->addTags( $tags );
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|