diff --git a/lib/Controller/AdminSettingController.php b/lib/Controller/AdminSettingController.php
index a70b0f3..e9ba8f9 100644
--- a/lib/Controller/AdminSettingController.php
+++ b/lib/Controller/AdminSettingController.php
@@ -98,7 +98,6 @@ class AdminSettingController extends Controller
'add-logo-link',
'show-settings',
'loader-enabled',
- 'top-menu-mouse-over-hidden-label',
'always-displayed',
'enabled',
'force',
@@ -139,7 +138,6 @@ class AdminSettingController extends Controller
'add-logo-link' => '1',
'show-settings' => '0',
'loader-enabled' => '1',
- 'top-menu-mouse-over-hidden-label' => '0',
'always-displayed' => '0',
'enabled' => '1',
'force' => '0',
@@ -207,6 +205,12 @@ class AdminSettingController extends Controller
}
}
+ foreach ($defaults as $key => $default) {
+ if (!array_key_exists($key, $config)) {
+ $config[$key] = $default;
+ }
+ }
+
$config['langs'] = $this->langRepository->getUsedLangs();
return new JSONResponse($config);
diff --git a/lib/Controller/PersonalSettingController.php b/lib/Controller/PersonalSettingController.php
index e7d00c7..9b63576 100644
--- a/lib/Controller/PersonalSettingController.php
+++ b/lib/Controller/PersonalSettingController.php
@@ -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);
+ }
}
diff --git a/src/admin.js b/src/admin.js
index 1749f6f..06cdbe5 100644
--- a/src/admin.js
+++ b/src/admin.js
@@ -21,7 +21,7 @@ import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { waitContainer } from './lib/dom.js'
-import AdminSettings from './pages/AdminSettings.vue'
+import AdminSettings from './pages/AdminSettings'
waitContainer('#side-menu-admin-settings').then((selector) => {
const pinia = createPinia()
diff --git a/src/components/settings/AdminSaveButton.vue b/src/components/settings/AdminSaveButton.vue
new file mode 100644
index 0000000..6209dce
--- /dev/null
+++ b/src/components/settings/AdminSaveButton.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
diff --git a/src/components/settings/TableLabel.vue b/src/components/settings/TableLabel.vue
index 2c3a215..e808fa1 100644
--- a/src/components/settings/TableLabel.vue
+++ b/src/components/settings/TableLabel.vue
@@ -27,7 +27,11 @@ along with this program. If not, see .
- {{ help }}
+ {{ t('side_menu', help) }}
+
+
+
+ {{ t('side_menu', help2) }}
@@ -58,5 +62,10 @@ const { short, label } = defineProps({
required: false,
default: null,
},
+ help2: {
+ type: [String, null],
+ required: false,
+ default: null,
+ },
})
diff --git a/src/components/settings/TableRow.vue b/src/components/settings/TableRow.vue
index ac757fc..06c77fa 100644
--- a/src/components/settings/TableRow.vue
+++ b/src/components/settings/TableRow.vue
@@ -15,7 +15,26 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
-->
-