mediawiki-extensions-Discus.../includes/Hooks/TagHooks.php
Timo Tijhof 269514f533 Hooks: Use WebRequest::getRawVal where possible
The 'dtenable' does not appear to take user-provided content that
requires language normalization. In general getRawVal should be used,
or if it's user input that needs normalization, use getText(). Perhaps
one day we'll alias or deprecate getVal (which is currently an odd
mid-way hybrid, most closely to getText; originally created for
EditPage.php textareas).

Change-Id: I8364c84f8c4f700da6e208df2e87c29bf254d685
2021-04-15 02:30:12 +00:00

79 lines
1.9 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',
// Input methods:
'discussiontools-source',
'discussiontools-visual',
];
/**
* @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();
$tags = explode( ',', $request->getText( 'dttags' ) );
$tags = array_values( array_intersect( $tags, static::TAGS ) );
if ( $tags ) {
$recentChange->addTags( $tags );
}
return true;
}
}