diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1dffaf7..ae81a08 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,17 @@
## [Unreleased]
+## 3.3.0
+### Added
+* add documentation in admin page
+* add app sorter in user config side (#160)
+### Fixed
+* fix #164: open apps in new tab does not work
+* fix #162 #159: top and side apps does work correctly
+
## 3.2.1
### Fixed
-* fix #150: Active app is not visible has active in menu (except in default menu)
-* fix #150: opener position
+* fix #150: active app is not visible has active in menu (except in default menu)
+* fix #151: opener position
## 3.2.0
### Added
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 6e60309..b78caea 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -32,7 +32,7 @@ Notice
Because I believe in a free and decentralized Internet, [Gitnet](https://gitnet.fr) is **self-hosted at home**.
In case of downtime, you can download **Custom Menu** from [here](https://kim.deblan.fr/~side_menu/).
]]>
- 3.2.1
+ 3.3.0
agpl
Simon Vieille
SideMenu
diff --git a/css/admin.css b/css/admin.css
index 086d0d7..5332c4e 100644
--- a/css/admin.css
+++ b/css/admin.css
@@ -73,7 +73,7 @@
.side-menu-setting-list {
margin: 10px 4px 4px 0px;
- border: 1px solid var(--color-border-dark);
+ border: 2px solid var(--color-border-dark);
border-radius: 15px;
}
@@ -175,3 +175,42 @@
.btn-reset--progress {
transform: rotate(-359deg);
}
+
+.badges {
+ margin-bottom: 14px;
+ margin-top: 4px;
+}
+
+.badge {
+ border-size: 1px;
+ padding: 2px 8px;
+ margin-right: 2px;
+ margin-bottom: 5px;
+ display: inline-block;
+ border-radius: 4px;
+ font-size: 13px;
+}
+
+.badge-1 {
+ background: #d4ce14;
+ border-color: #cad413;
+ color: #373a05;
+}
+
+.badge-2 {
+ background: #96d47f;
+ border-color: #7ed49b;
+ color: #333;
+}
+
+.badge-3 {
+ background: #d4540a;
+ border-color: #d4700c;
+ color: #fff;
+}
+
+.badge-4 {
+ background: #9d81d4;
+ border-color: #c681d4;
+ color: #fff;
+}
diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php
index 32cd630..c0831a9 100644
--- a/lib/Controller/JsController.php
+++ b/lib/Controller/JsController.php
@@ -100,10 +100,12 @@ class JsController extends Controller
$useAvatar = $this->config->getAppValueBool('use-avatar', '0');
$isForced = $this->config->getAppValueBool('force', '0');
$addLogoLink = $this->config->getAppValueBool('add-logo-link', '1');
+ $appsOrder = $this->config->getAppValueArray('apps-order', '[]');
$avatar = null;
$settings = null;
if ($this->user) {
+ $userAppsOrder = $this->config->getUserValueArray($this->user, 'apps-order', '[]');
$userTopMenuApps = $this->config->getUserValueArray($this->user, 'top-menu-apps', '[]');
$userTopSideMenuApps = $this->config->getUserValueArray($this->user, 'top-side-menu-apps', '[]');
@@ -115,6 +117,10 @@ class JsController extends Controller
$topSideMenuApps = $userTopSideMenuApps;
}
+ if (!empty($userAppsOrder) && !$isForced) {
+ $appsOrder = $userAppsOrder;
+ }
+
$userTargetBlankMode = $this->config->getUserValueInt($this->user, 'target-blank-mode', '1');
$userTargetBlankApps = $this->config->getUserValueArray($this->user, 'target-blank-apps', '[]');
@@ -162,7 +168,7 @@ class JsController extends Controller
'side-with-categories' => $this->config->getAppValueBool('side-with-categories', '0'),
'big-menu' => $this->config->getAppValueBool('big-menu', '0'),
'big-menu-hidden-apps' => $this->config->getAppValueArray('big-menu-hidden-apps', '[]'),
- 'apps-order' => $this->config->getAppValueArray('apps-order', '[]'),
+ 'apps-order' => $appsOrder,
'avatar' => $avatar,
'top-menu-apps' => $topMenuApps,
'top-side-menu-apps' => $topSideMenuApps,
diff --git a/lib/Controller/NavController.php b/lib/Controller/NavController.php
index ac766a5..a461ce3 100644
--- a/lib/Controller/NavController.php
+++ b/lib/Controller/NavController.php
@@ -93,11 +93,13 @@ class NavController extends Controller
]);
}
- $apps = $this->appRepository->getOrderedApps();
+ $apps = $this->appRepository->getOrderedApps($user);
$categoriesLabels = $this->categoryRepository->getOrderedCategories();
$hiddenApps = $this->config->getAppValueArray('big-menu-hidden-apps', '[]');
$isForced = $this->config->getAppValueBool('force', '0');
$topMenuApps = $this->config->getAppValueArray('top-menu-apps', '[]');
+ $topSideMenuApps = $this->config->getAppValueArray('top-side-menu-apps', '[]');
+ $userTopSideMenuApps = $this->config->getUserValueArray($user, 'top-side-menu-apps', '[]');
$userTopMenuApps = $this->config->getUserValueArray($user, 'top-menu-apps', '[]');
$appsCategories = [];
$categoriesAppsCount = [];
@@ -106,8 +108,12 @@ class NavController extends Controller
$topMenuApps = $userTopMenuApps;
}
+ if (!$isForced && !empty($userTopSideMenuApps)) {
+ $topSideMenuApps = $userTopSideMenuApps;
+ }
+
foreach ($apps as $app) {
- if (in_array($app['id'], $topMenuApps)) {
+ if (in_array($app['id'], $topMenuApps) && !in_array($app['id'], $userTopSideMenuApps)) {
continue;
}
diff --git a/lib/Controller/PersonalSettingController.php b/lib/Controller/PersonalSettingController.php
index bdc9fca..6f126c7 100644
--- a/lib/Controller/PersonalSettingController.php
+++ b/lib/Controller/PersonalSettingController.php
@@ -97,7 +97,7 @@ class PersonalSettingController extends Controller
}
}
- if (in_array($name, ['top-menu-apps', 'top-side-menu-apps'])) {
+ if (in_array($name, ['top-menu-apps', 'top-side-menu-apps', 'apps-order'])) {
$doSave = true;
$data = json_decode($value, true);
diff --git a/lib/Service/AppRepository.php b/lib/Service/AppRepository.php
index 2ae59d5..ce96107 100644
--- a/lib/Service/AppRepository.php
+++ b/lib/Service/AppRepository.php
@@ -2,6 +2,7 @@
namespace OCA\SideMenu\Service;
+use OC\User\User;
use OCP\L10N\IFactory;
/**
@@ -110,11 +111,19 @@ class AppRepository
);
}
- public function getOrderedApps()
+ public function getOrderedApps(?User $user = null)
{
$apps = $this->getVisibleApps();
$orders = $this->config->getAppValueArray('apps-order', '[]');
+ if (null !== $user && !$this->config->getAppValueBool('force', '0')) {
+ $userOrders = $this->config->getUserValueArray($user, 'apps-order', '[]');
+
+ if (!empty($userOrders)) {
+ $orders = $userOrders;
+ }
+ }
+
usort($apps, function ($a, $b) use ($orders) {
$ak = array_keys($orders, $a['id'])[0] ?? null;
$bk = array_keys($orders, $b['id'])[0] ?? null;
diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php
index 9ac24c7..e61f9e5 100644
--- a/lib/Settings/Personal.php
+++ b/lib/Settings/Personal.php
@@ -81,7 +81,9 @@ class Personal implements ISettings
'top-side-menu-apps' => $this->config->getUserValueArray($user, 'top-side-menu-apps', '[]'),
'target-blank-mode' => $this->config->getUserValue($user, 'target-blank-mode', '1'),
'target-blank-apps' => $this->config->getUserValueArray($user, 'target-blank-apps', '[]'),
+ 'apps-order' => $this->config->getUserValueArray($user, 'apps-order', '[]'),
'apps' => $this->appRepository->getVisibleApps(),
+ 'ordered-apps' => $this->appRepository->getOrderedApps($user),
];
return new TemplateResponse(Application::APP_ID, 'settings/personal-form', $parameters, '');
diff --git a/screenshots/admin_settings.png b/screenshots/admin_settings.png
index ba7a744..4d7a0e0 100644
Binary files a/screenshots/admin_settings.png and b/screenshots/admin_settings.png differ
diff --git a/screenshots/personal_settings.png b/screenshots/personal_settings.png
index ba62403..05a73ee 100644
Binary files a/screenshots/personal_settings.png and b/screenshots/personal_settings.png differ
diff --git a/src/AppMenu.vue b/src/AppMenu.vue
index 20fc9db..8f043e8 100644
--- a/src/AppMenu.vue
+++ b/src/AppMenu.vue
@@ -33,6 +33,7 @@