aboutsummaryrefslogtreecommitdiffstats
path: root/includes/api/ApiQuerySiteinfo.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/api/ApiQuerySiteinfo.php')
-rw-r--r--includes/api/ApiQuerySiteinfo.php39
1 files changed, 17 insertions, 22 deletions
diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php
index 4fe733a09ffe..3b09bf9ad2e0 100644
--- a/includes/api/ApiQuerySiteinfo.php
+++ b/includes/api/ApiQuerySiteinfo.php
@@ -33,6 +33,7 @@ use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\MainConfigNames;
use MediaWiki\Parser\MagicWordFactory;
use MediaWiki\Parser\ParserFactory;
+use MediaWiki\Permissions\GroupPermissionsLookup;
use MediaWiki\Registration\ExtensionRegistry;
use MediaWiki\ResourceLoader\SkinModule;
use MediaWiki\SiteStats\SiteStats;
@@ -80,6 +81,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
private ReadOnlyMode $readOnlyMode;
private UrlUtils $urlUtils;
private TempUserConfig $tempUserConfig;
+ private GroupPermissionsLookup $groupPermissionsLookup;
public function __construct(
ApiQuery $query,
@@ -100,7 +102,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
ILoadBalancer $loadBalancer,
ReadOnlyMode $readOnlyMode,
UrlUtils $urlUtils,
- TempUserConfig $tempUserConfig
+ TempUserConfig $tempUserConfig,
+ GroupPermissionsLookup $groupPermissionsLookup
) {
parent::__construct( $query, $moduleName, 'si' );
$this->userOptionsLookup = $userOptionsLookup;
@@ -120,6 +123,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$this->readOnlyMode = $readOnlyMode;
$this->urlUtils = $urlUtils;
$this->tempUserConfig = $tempUserConfig;
+ $this->groupPermissionsLookup = $groupPermissionsLookup;
}
public function execute() {
@@ -596,11 +600,13 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$data = [];
$result = $this->getResult();
- $allGroups = array_values( $this->userGroupManager->listAllGroups() );
- foreach ( $config->get( MainConfigNames::GroupPermissions ) as $group => $permissions ) {
+ $allGroups = $this->userGroupManager->listAllGroups();
+ $allImplicitGroups = $this->userGroupManager->listAllImplicitGroups();
+ foreach ( array_merge( $allImplicitGroups, $allGroups ) as $group ) {
$arr = [
'name' => $group,
- 'rights' => array_keys( $permissions, true ),
+ 'rights' => $this->groupPermissionsLookup->getGrantedPermissions( $group ),
+ // TODO: Also expose the list of revoked permissions somehow.
];
if ( $numberInGroup ) {
@@ -614,25 +620,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
}
}
- $groupArr = [
- 'add' => $config->get( MainConfigNames::AddGroups ),
- 'remove' => $config->get( MainConfigNames::RemoveGroups ),
- 'add-self' => $config->get( MainConfigNames::GroupsAddToSelf ),
- 'remove-self' => $config->get( MainConfigNames::GroupsRemoveFromSelf )
- ];
+ $groupArr = $this->userGroupManager->getGroupsChangeableByGroup( $group );
- foreach ( $groupArr as $type => $rights ) {
- if ( isset( $rights[$group] ) ) {
- if ( $rights[$group] === true ) {
- $groups = $allGroups;
- } else {
- $groups = array_intersect( $rights[$group], $allGroups );
- }
- if ( $groups ) {
- $arr[$type] = $groups;
- ApiResult::setArrayType( $arr[$type], 'BCarray' );
- ApiResult::setIndexedTagName( $arr[$type], 'group' );
- }
+ foreach ( $groupArr as $type => $groups ) {
+ $groups = array_values( array_intersect( $groups, $allGroups ) );
+ if ( $groups ) {
+ $arr[$type] = $groups;
+ ApiResult::setArrayType( $arr[$type], 'BCarray' );
+ ApiResult::setIndexedTagName( $arr[$type], 'group' );
}
}