add user settings

This commit is contained in:
Simon Vieille 2025-04-13 20:32:13 +02:00
commit fdd8f8850d
Signed by: deblan
GPG key ID: 579388D585F70417
20 changed files with 839 additions and 316 deletions

View file

@ -25,6 +25,7 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IUserSession;
@ -43,7 +44,7 @@ class PersonalSettingController extends Controller
#[NoCSRFRequired]
#[NoAdminRequired]
#[FrontpageRoute(verb: 'POST', url: '/personalSetting/valueSet')]
#[FrontpageRoute(verb: 'POST', url: '/user/valueSet')]
public function valueSet($name, $value): array
{
$doSave = false;
@ -65,22 +66,7 @@ class PersonalSettingController extends Controller
}
}
if ('target-blank-apps' === $name) {
$doSave = true;
$data = json_decode($value, true);
if (!is_array($data)) {
$doSave = false;
} else {
foreach ($data as $v) {
if (!is_string($v)) {
$doSave = false;
}
}
}
}
if (in_array($name, ['top-menu-apps', 'top-side-menu-apps', 'apps-order'])) {
if (in_array($name, ['target-blank-apps', 'top-menu-apps', 'top-side-menu-apps', 'apps-order'])) {
$doSave = true;
$data = json_decode($value, true);
@ -110,4 +96,62 @@ class PersonalSettingController extends Controller
return [];
}
#[NoCSRFRequired]
#[FrontpageRoute(verb: 'GET', url: '/user/config')]
public function configuration(): JSONResponse
{
$user = $this->userSession->getUser();
$keys = $this->config->getUserKeys($user->getUid(), Application::APP_ID);
$booleans = [
'enabled',
];
$arrays = [
'apps-order',
'target-blank-apps',
'top-menu-apps',
'top-side-menu-apps',
];
$integers = [
'target-blank-mode',
];
$defaults = [
'enabled' => '1',
'target-blank-mode' => '1',
'apps-order' => '[]',
'target-blank-apps' => '[]',
'top-menu-apps' => '[]',
'top-side-menu-apps' => '[]',
];
$config = [];
foreach ($keys as $key) {
if (!isset($defaults[$key])) {
continue;
}
if (in_array($key, $booleans)) {
$config[$key] = $this->configProxy->getUserValueBool($user, $key, $defaults[$key]);
} elseif (in_array($key, $arrays)) {
$config[$key] = $this->configProxy->getUserValueArray($user, $key, $defaults[$key]);
} elseif (in_array($key, $integers)) {
$config[$key] = $this->configProxy->getUserValueInt($user, $key, $defaults[$key]);
} else {
$config[$key] = $this->configProxy->getUserValue($user, $key, $defaults[$key]);
}
}
foreach ($defaults as $key => $default) {
if (!array_key_exists($key, $config)) {
$config[$key] = $default;
}
}
return new JSONResponse($config);
}
}