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;
|
2024-06-08 22:02:35 +00:00
|
|
|
use MediaWiki\Context\RequestContext;
|
2021-01-29 17:09:52 +00:00
|
|
|
use MediaWiki\Hook\RecentChange_saveHook;
|
|
|
|
use RecentChange;
|
|
|
|
|
|
|
|
class TagHooks implements
|
|
|
|
ChangeTagsListActiveHook,
|
|
|
|
ListDefinedTagsHook,
|
|
|
|
RecentChange_saveHook
|
|
|
|
{
|
|
|
|
private const TAGS = [
|
|
|
|
'discussiontools',
|
|
|
|
// Features:
|
|
|
|
'discussiontools-reply',
|
|
|
|
'discussiontools-edit',
|
|
|
|
'discussiontools-newtopic',
|
2021-07-22 18:05:34 +00:00
|
|
|
'discussiontools-added-comment',
|
2021-01-29 17:09:52 +00:00
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
|
2022-06-14 21:53:00 +00:00
|
|
|
$tags = static::getDiscussionToolsTagsFromRequest();
|
2021-01-29 17:09:52 +00:00
|
|
|
if ( $tags ) {
|
|
|
|
$recentChange->addTags( $tags );
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2022-06-03 10:46:16 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get DT tags from the dttags param in the request, and validate against known tags.
|
|
|
|
*/
|
|
|
|
public static function getDiscussionToolsTagsFromRequest(): array {
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$tags = explode( ',', $request->getText( 'dttags' ) );
|
|
|
|
return array_values( array_intersect( $tags, static::TAGS ) );
|
|
|
|
}
|
2021-01-29 17:09:52 +00:00
|
|
|
}
|