Merge "Inject services into API classes"

This commit is contained in:
jenkins-bot 2022-09-05 11:44:04 +00:00 committed by Gerrit Code Review
commit f5b7f72a38
8 changed files with 69 additions and 23 deletions

View file

@ -433,12 +433,18 @@
},
"APIModules": {
"discussiontoolscompare": {
"class": "MediaWiki\\Extension\\DiscussionTools\\ApiDiscussionToolsCompare"
"class": "MediaWiki\\Extension\\DiscussionTools\\ApiDiscussionToolsCompare",
"services": [
"DiscussionTools.CommentParser"
]
},
"discussiontoolsedit": {
"class": "MediaWiki\\Extension\\DiscussionTools\\ApiDiscussionToolsEdit",
"services": [
"DiscussionTools.CommentParser"
"DiscussionTools.CommentParser",
"DiscussionTools.SubscriptionStore",
"SkinFactory",
"ConfigFactory"
]
},
"discussiontoolsgetsubscriptions": {
@ -449,7 +455,10 @@
]
},
"discussiontoolspageinfo": {
"class": "MediaWiki\\Extension\\DiscussionTools\\ApiDiscussionToolsPageInfo"
"class": "MediaWiki\\Extension\\DiscussionTools\\ApiDiscussionToolsPageInfo",
"services": [
"DiscussionTools.CommentParser"
]
},
"discussiontoolspreview": {
"class": "MediaWiki\\Extension\\DiscussionTools\\ApiDiscussionToolsPreview",

View file

@ -14,11 +14,21 @@ class ApiDiscussionToolsCompare extends ApiBase {
use ApiDiscussionToolsTrait;
use ApiParsoidTrait;
/** @var CommentParser */
private $commentParser;
/**
* @inheritDoc
* @param ApiMain $main
* @param string $name
* @param CommentParser $commentParser
*/
public function __construct( ApiMain $main, string $name ) {
public function __construct(
ApiMain $main,
string $name,
CommentParser $commentParser
) {
parent::__construct( $main, $name );
$this->commentParser = $commentParser;
}
/**

View file

@ -4,13 +4,15 @@ namespace MediaWiki\Extension\DiscussionTools;
use ApiBase;
use ApiMain;
use Config;
use ConfigFactory;
use DerivativeContext;
use DerivativeRequest;
use MediaWiki\Extension\DiscussionTools\Hooks\HookUtils;
use MediaWiki\Extension\DiscussionTools\ThreadItem\ContentCommentItem;
use MediaWiki\Extension\VisualEditor\ApiParsoidTrait;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use SkinFactory;
use Title;
use Wikimedia\ParamValidator\ParamValidator;
use Wikimedia\ParamValidator\TypeDef\StringDef;
@ -25,18 +27,36 @@ class ApiDiscussionToolsEdit extends ApiBase {
/** @var CommentParser */
private $commentParser;
/** @var SubscriptionStore */
private $subscriptionStore;
/** @var SkinFactory */
private $skinFactory;
/** @var Config */
private $config;
/**
* @param ApiMain $main
* @param string $name
* @param CommentParser $commentParser
* @param SubscriptionStore $subscriptionStore
* @param SkinFactory $skinFactory
* @param ConfigFactory $configFactory
*/
public function __construct(
ApiMain $main,
$name,
CommentParser $commentParser
string $name,
CommentParser $commentParser,
SubscriptionStore $subscriptionStore,
SkinFactory $skinFactory,
ConfigFactory $configFactory
) {
parent::__construct( $main, $name );
$this->commentParser = $commentParser;
$this->subscriptionStore = $subscriptionStore;
$this->skinFactory = $skinFactory;
$this->config = $configFactory->makeConfig( 'discussiontools' );
$this->setLogger( LoggerFactory::getInstance( 'DiscussionTools' ) );
}
@ -48,9 +68,8 @@ class ApiDiscussionToolsEdit extends ApiBase {
$title = Title::newFromText( $params['page'] );
$result = null;
$dtConfig = MediaWikiServices::getInstance()->getConfigFactory()->makeConfig( 'discussiontools' );
$autoSubscribe =
$dtConfig->get( 'DiscussionToolsAutoTopicSubEditor' ) === 'discussiontoolsapi' &&
$this->config->get( 'DiscussionToolsAutoTopicSubEditor' ) === 'discussiontoolsapi' &&
HookUtils::shouldAddAutoSubscription( $this->getUser(), $title );
$subscribableHeadingName = null;
$subscribableSectionTitle = '';
@ -316,9 +335,9 @@ class ApiDiscussionToolsEdit extends ApiBase {
}
if ( $autoSubscribe && $subscribableHeadingName ) {
$subscriptionStore = MediaWikiServices::getInstance()->getService( 'DiscussionTools.SubscriptionStore' );
$subsTitle = $title->createFragmentTarget( $subscribableSectionTitle );
$subscriptionStore->addAutoSubscriptionForUser( $this->getUser(), $subsTitle, $subscribableHeadingName );
$this->subscriptionStore
->addAutoSubscriptionForUser( $this->getUser(), $subsTitle, $subscribableHeadingName );
}
// Check the post was successful (could have been blocked by ConfirmEdit) before
@ -383,9 +402,7 @@ class ApiDiscussionToolsEdit extends ApiBase {
ParamValidator::PARAM_TYPE => 'string',
],
'useskin' => [
ParamValidator::PARAM_TYPE => array_keys(
MediaWikiServices::getInstance()->getSkinFactory()->getInstalledSkins()
),
ParamValidator::PARAM_TYPE => array_keys( $this->skinFactory->getInstalledSkins() ),
ApiBase::PARAM_HELP_MSG => 'apihelp-parse-param-useskin',
],
'watchlist' => [

View file

@ -18,7 +18,7 @@ class ApiDiscussionToolsGetSubscriptions extends ApiBase {
*/
public function __construct(
ApiMain $main,
$name,
string $name,
SubscriptionStore $subscriptionStore
) {
parent::__construct( $main, $name );

View file

@ -19,11 +19,21 @@ class ApiDiscussionToolsPageInfo extends ApiBase {
use ApiDiscussionToolsTrait;
use ApiParsoidTrait;
/** @var CommentParser */
private $commentParser;
/**
* @inheritDoc
* @param ApiMain $main
* @param string $name
* @param CommentParser $commentParser
*/
public function __construct( ApiMain $main, string $name ) {
public function __construct(
ApiMain $main,
string $name,
CommentParser $commentParser
) {
parent::__construct( $main, $name );
$this->commentParser = $commentParser;
}
/**

View file

@ -30,7 +30,7 @@ class ApiDiscussionToolsPreview extends ApiBase {
*/
public function __construct(
ApiMain $main,
$name,
string $name,
CommentParser $commentParser,
SkinFactory $skinFactory
) {

View file

@ -19,7 +19,7 @@ class ApiDiscussionToolsSubscribe extends ApiBase {
*/
public function __construct(
ApiMain $main,
$name,
string $name,
SubscriptionStore $subscriptionStore
) {
parent::__construct( $main, $name );

View file

@ -7,7 +7,6 @@ use ApiResult;
use DerivativeContext;
use DerivativeRequest;
use IContextSource;
use MediaWiki\MediaWikiServices;
use MediaWiki\Revision\RevisionRecord;
use Title;
use TitleValue;
@ -16,6 +15,8 @@ use Wikimedia\Parsoid\Utils\DOMUtils;
/**
* Random methods we want to share between API modules.
*
* @property CommentParser $commentParser
*/
trait ApiDiscussionToolsTrait {
/**
@ -32,8 +33,7 @@ trait ApiDiscussionToolsTrait {
$title = TitleValue::newFromPage( $revision->getPage() );
$parser = MediaWikiServices::getInstance()->getService( 'DiscussionTools.CommentParser' );
return $parser->parse( $container, $title );
return $this->commentParser->parse( $container, $title );
}
/**