diff options
Diffstat (limited to 'ui/app/controllers/CControllerUserEdit.php')
-rw-r--r-- | ui/app/controllers/CControllerUserEdit.php | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/ui/app/controllers/CControllerUserEdit.php b/ui/app/controllers/CControllerUserEdit.php index 8d1c892cb38..d4938c53669 100644 --- a/ui/app/controllers/CControllerUserEdit.php +++ b/ui/app/controllers/CControllerUserEdit.php @@ -113,6 +113,7 @@ class CControllerUserEdit extends CControllerUserEditGeneral { 'new_media' => [], 'roleid' => '', 'role' => [], + 'modules_rules' => [], 'user_type' => '', 'sid' => $this->getUserSID(), 'form_refresh' => 0, @@ -175,7 +176,7 @@ class CControllerUserEdit extends CControllerUserEditGeneral { $roles = API::Role()->get([ 'output' => ['name', 'type'], 'selectRules' => ['services.read.mode', 'services.read.list', 'services.read.tag', - 'services.write.mode', 'services.write.list', 'services.write.tag' + 'services.write.mode', 'services.write.list', 'services.write.tag', 'modules' ], 'roleids' => $data['roleid'] ]); @@ -217,6 +218,10 @@ class CControllerUserEdit extends CControllerUserEditGeneral { 'serviceids' => array_column($role['rules']['services.write.list'], 'serviceid') ]); $data['service_write_tag'] = $role['rules']['services.write.tag']; + + foreach ($role['rules']['modules'] as $rule) { + $data['modules_rules'][$rule['moduleid']] = $rule['status']; + } } } @@ -241,12 +246,34 @@ class CControllerUserEdit extends CControllerUserEditGeneral { $data['templategroups_rights'] = collapseGroupRights(getTemplateGroupsRights($user_groups)); } - $data['modules'] = API::Module()->get([ - 'output' => ['id'], - 'filter' => ['status' => MODULE_STATUS_ENABLED], - 'preservekeys' => true + $data['modules'] = []; + + $db_modules = API::Module()->get([ + 'output' => ['moduleid', 'relative_path', 'status'] ]); + if ($db_modules) { + $module_manager = new CModuleManager(APP::getRootDir()); + + foreach ($db_modules as $db_module) { + $manifest = $module_manager->addModule($db_module['relative_path']); + + if ($manifest !== null) { + $data['modules'][$db_module['moduleid']] = $manifest['name']; + } + } + } + + natcasesort($data['modules']); + + $disabled_modules = array_filter($db_modules, + static function(array $db_module): bool { + return $db_module['status'] == MODULE_STATUS_DISABLED; + } + ); + + $data['disabled_moduleids'] = array_column($disabled_modules, 'moduleid', 'moduleid'); + $data['mediatypes'] = API::MediaType()->get([ 'output' => ['status'], 'preservekeys' => true |