aboutsummaryrefslogtreecommitdiffstats
path: root/includes/api
diff options
context:
space:
mode:
authorDreamy Jazz <wpgbrown@wikimedia.org>2024-04-05 16:33:24 +0100
committerDreamy Jazz <wpgbrown@wikimedia.org>2024-04-05 16:56:04 +0100
commiteabb13833f8237bcd1ea89c8e0834da8d9ccf9f1 (patch)
tree4aeaf53c96ed212743a7ef52f3c9a048f649465e /includes/api
parent40f4502e9c093d70c20194a4750be8569ab82bdc (diff)
downloadmediawikicore-eabb13833f8237bcd1ea89c8e0834da8d9ccf9f1.tar.gz
mediawikicore-eabb13833f8237bcd1ea89c8e0834da8d9ccf9f1.zip
Define ApiQuery::isWriteMode
Why: * ApiQueryBase subclasses may define a ::isWriteMode override, as the API call may need to write to the DB. ** This is the case for the CheckUser extension, where the 'checkuser' API creates a log entry that allows users to audit usage of the API. * ApiQuery currently does not define a implementation of ::isWriteMode, which means that the definitions by any class that extends ApiQueryBase currently do nothing. * ApiQuery::isWriteMode should be defined and work in a similar way to ApiQuery::isReadMode, so that subclasses of ApiQueryBase can have their definitions of ::isWriteMode respected. What: * Define ApiQuery::isWriteMode in a similar way to how ApiQuery ::isReadMode is written, but also inspecting the modules that are used through the 'list' and 'prop' params. * Add tests for ApiQuery::isWriteMode. Bug: T361951 Change-Id: Idf1c8f95df58a861404e0c89507c885ec4554793
Diffstat (limited to 'includes/api')
-rw-r--r--includes/api/ApiQuery.php16
1 files changed, 16 insertions, 0 deletions
diff --git a/includes/api/ApiQuery.php b/includes/api/ApiQuery.php
index b818f49a2dbe..7eff88de99b3 100644
--- a/includes/api/ApiQuery.php
+++ b/includes/api/ApiQuery.php
@@ -992,6 +992,22 @@ class ApiQuery extends ApiBase {
return false;
}
+ public function isWriteMode() {
+ // Ask each module if it requires write mode. If any require write mode this returns true.
+ $modules = [];
+ $this->mParams = $this->extractRequestParams();
+ $this->instantiateModules( $modules, 'list' );
+ $this->instantiateModules( $modules, 'meta' );
+ $this->instantiateModules( $modules, 'prop' );
+ foreach ( $modules as $module ) {
+ if ( $module->isWriteMode() ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
protected function getExamplesMessages() {
$title = Title::newMainPage()->getPrefixedText();
$mp = rawurlencode( $title );