mediawiki-extensions-Discus.../includes/Hooks/TagHooks.php
Bartosz Dziewoński 69e8e948b2 Remove now redundant PHPDoc blocks
MediaWiki's PHPCS plugin requires documentation comments on all
methods, unless those methods are fully typed (all parameters and
return value).

It turns out that almost all of our methods are fully typed already.

Procedure:

1. Find: \*(\s*\*\s*(@param \??[\w\\]+(\|null)? &?\$\w+|@return \??[\w\\]+(\|null)?)\n)+\s*\*/
   Replace with: */
   This deletes type annotations, except those not representable
   as PHP type hints such as union types `a|b` or typed arrays `a[]`,
   or those with documentation beyond type hints, or those on
   functions with any other annotations.

2. Find: /\*\*/\n\s*
   Replace with nothing
   This deletes the remaining comments on methods that had no prose
   documentation.

3. Undo all changes that PHPCS complains about (those comments
   were not redundant)

4. Review the diff carefully, these regexps are imprecise :)

Change-Id: Ic82e8b23f2996f44951208dbd9cfb4c8e0738dac
2024-03-10 23:53:04 +00:00

88 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.
*/
public static function getDiscussionToolsTagsFromRequest(): array {
$request = RequestContext::getMain()->getRequest();
$tags = explode( ',', $request->getText( 'dttags' ) );
return array_values( array_intersect( $tags, static::TAGS ) );
}
}