migrate admin settings

This commit is contained in:
Simon Vieille 2025-04-10 19:54:03 +02:00
commit f9c3f96919
Signed by: deblan
GPG key ID: 579388D585F70417
25 changed files with 1028 additions and 112 deletions

View file

@ -20,14 +20,17 @@
namespace OCA\SideMenu\Controller;
use OCA\SideMenu\AppInfo\Application;
use OCA\SideMenu\Service\ConfigProxy;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataDownloadResponse;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCA\SideMenu\Service\Color;
class AdminSettingController extends Controller
{
@ -35,7 +38,9 @@ class AdminSettingController extends Controller
$appName,
IRequest $request,
protected IConfig $config,
protected IURLGenerator $urlGenerator
protected ConfigProxy $configProxy,
protected IURLGenerator $urlGenerator,
protected Color $color,
) {
parent::__construct($appName, $request);
}
@ -76,4 +81,129 @@ class AdminSettingController extends Controller
'text/json'
);
}
#[NoCSRFRequired]
#[FrontpageRoute(verb: 'GET', url: '/admin/config')]
public function configuration(): JSONResponse
{
$keys = $this->config->getAppKeys(Application::APP_ID);
$booleans = [
'opener-only',
'opener-hover',
'display-logo',
'use-avatar',
'add-logo-link',
'show-settings',
'loader-enabled',
'top-menu-mouse-over-hidden-label',
'always-displayed',
'enabled',
'force',
'big-menu',
'external-sites-in-top-menu',
'force-light-icon',
'side-with-categories',
'default-enabled',
];
$arrays = [
'apps-categories-custom',
'big-menu-hidden-apps',
'apps-order',
'categories-custom',
'categories-order',
'target-blank-apps',
'top-menu-apps',
'top-side-menu-apps',
];
$integers = [
'background-color-opacity',
'dark-mode-background-color-opacity',
'dark-mode-icon-invert-filter',
'dark-mode-icon-opacity',
'icon-invert-filter',
'icon-opacity',
'target-blank-mode',
'top-menu-mouse-over-hidden-label',
];
$defaults = [
'opener-only' => '0',
'opener-hover' => '0',
'display-logo' => '1',
'use-avatar' => '0',
'add-logo-link' => '1',
'show-settings' => '0',
'loader-enabled' => '1',
'top-menu-mouse-over-hidden-label' => '0',
'always-displayed' => '0',
'enabled' => '1',
'force' => '0',
'big-menu' => '0',
'external-sites-in-top-menu' => '0',
'force-light-icon' => '0',
'side-with-categories' => '0',
'cache' => '1',
'default-enabled' => '1',
'apps-categories-custom' => '[]',
'big-menu-hidden-apps' => '[]',
'apps-order' => '[]',
'categories-custom' => '[]',
'categories-order' => '[]',
'target-blank-apps' => '[]',
'top-menu-apps' => '[]',
'top-side-menu-apps' => '[]',
'cache-categories' => '[]',
'background-color-opacity' => '100',
'dark-mode-background-color-opacity' => '100',
'dark-mode-icon-invert-filter' => '0',
'dark-mode-icon-opacity' => '100',
'icon-invert-filter' => '0',
'icon-opacity' => '100',
'top-menu-mouse-over-hidden-label' => '0',
'opener' => 'side-menu-opener',
'dark-mode-opener' => 'side-menu-opener',
'size-icon' => 'normal',
'size-text' => 'normal',
'opener-position' => 'before',
'background-color' => $this->color->getPrimaryColor(),
'background-color-to' => $this->color->getLightenPrimaryColor(),
'current-app-background-color' => $this->color->getDarkenPrimaryColor(),
'text-color' => $this->color->getTextColorPrimary(),
'loader-color' => $this->color->getLightenPrimaryColor(),
'dark-mode-background-color' => $this->color->getDarkenPrimaryColor(),
'dark-mode-background-color-to' => $this->color->getDarkenPrimaryColor(),
'dark-mode-current-app-background-color' => $this->color->getDarkenPrimaryColor2(),
'dark-mode-text-color' => $this->color->getTextColorPrimary(),
'dark-mode-loader-color' => $this->color->getLightenPrimaryColor(),
'categories-order-type' => 'default',
];
$config = [];
foreach ($keys as $key) {
if (!isset($defaults[$key])) {
continue;
}
if (in_array($key, $booleans)) {
$config[$key] = $this->configProxy->getAppValueBool($key, $defaults[$key]);
} elseif (in_array($key, $arrays)) {
$config[$key] = $this->configProxy->getAppValueArray($key, $defaults[$key]);
} elseif (in_array($key, $integers)) {
$config[$key] = $this->configProxy->getAppValueInt($key, $defaults[$key]);
} else {
$config[$key] = $this->configProxy->getAppValue($key, $defaults[$key]);
}
}
return new JSONResponse($config);
}
}