Pass whole context to internal action API requests

Otherwise, the global context is used (RequestContext::getMain()),
which is undesirable when you're building a rubegoldbergian
contraption and we're already inside an internal action API request
with a fake context.

Change-Id: I01daf8dc70b5751bc1e157fe598988cd5d3219e5
This commit is contained in:
Bartosz Dziewoński 2021-04-29 02:06:56 +02:00 committed by Esanders
parent 1f2d9e5a9f
commit fffffe8f8f

View file

@ -5,6 +5,7 @@ namespace MediaWiki\Extension\DiscussionTools;
use ApiBase;
use ApiMain;
use ApiParsoidTrait;
use DerivativeContext;
use DerivativeRequest;
use DOMElement;
use MediaWiki\Logger\LoggerFactory;
@ -66,9 +67,10 @@ class ApiDiscussionToolsEdit extends ApiBase {
// As section=new this is append only so we don't need to
// worry about edit-conflict params such as oldid/baserevid/etag.
// Edit summary is also automatically generated when section=new
$api = new ApiMain(
$context = new DerivativeContext( $this->getContext() );
$context->setRequest(
new DerivativeRequest(
$this->getRequest(),
$context->getRequest(),
[
'action' => 'visualeditoredit',
'paction' => 'save',
@ -86,7 +88,10 @@ class ApiDiscussionToolsEdit extends ApiBase {
'captchaword' => $params['captchaword']
],
/* was posted? */ true
),
)
);
$api = new ApiMain(
$context,
/* enable write? */ true
);
@ -186,9 +191,10 @@ class ApiDiscussionToolsEdit extends ApiBase {
$this->msg( 'discussiontools-defaultsummary-reply' )->inContentLanguage()->text();
}
$api = new ApiMain(
$context = new DerivativeContext( $this->getContext() );
$context->setRequest(
new DerivativeRequest(
$this->getRequest(),
$context->getRequest(),
[
'action' => 'visualeditoredit',
'paction' => 'save',
@ -205,7 +211,10 @@ class ApiDiscussionToolsEdit extends ApiBase {
'captchaword' => $params['captchaword']
],
/* was posted? */ true
),
)
);
$api = new ApiMain(
$context,
/* enable write? */ true
);