add apps sorter is user side (fix #160)
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Simon Vieille 2022-11-04 21:07:44 +01:00
parent c8ac0b5922
commit 52d88771d9
Signed by: deblan
GPG Key ID: 579388D585F70417
6 changed files with 63 additions and 10 deletions

View File

@ -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,

View File

@ -93,7 +93,7 @@ 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');

View File

@ -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);

View File

@ -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;

View File

@ -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, '');

View File

@ -27,6 +27,7 @@ $choicesYesNo = [
$labelShowHideApps = 'Show and hide the list of applications';
$labelReset = 'Reset to default';
?>
<div id="side-menu-section">
<?php if ($_['force']): ?>
@ -41,10 +42,6 @@ $labelShowHideApps = 'Show and hide the list of applications';
</div>
<?php else: ?>
<div class="section">
<h2>
<?php p($l->t('Menu')); ?>
</h2>
<p>
<em><?php echo $l->t('Use the shortcut <span class="keyboard-key">Ctrl</span>+<span class="keyboard-key">o</span> to open and to hide the side menu. Use <span class="keyboard-key">tab</span> to navigate.'); ?></em>
</p>
@ -123,7 +120,7 @@ $labelShowHideApps = 'Show and hide the list of applications';
<div class="side-menu-setting-table">
<div class="side-menu-setting-row">
<div class="side-menu-setting-label">
<?php p($l->t('Apps only visible in the top menu')); ?>
<?php p($l->t('Applications kept in the top menu')); ?>
<p>
<em>
<?php p($l->t('If there is no selection then the global configuration is applied.')); ?>
@ -163,9 +160,10 @@ $labelShowHideApps = 'Show and hide the list of applications';
<div class="side-menu-setting-table">
<div class="side-menu-setting-row">
<div class="side-menu-setting-label">
<?php p($l->t('Apps visible in the top and side menus')); ?>
<?php p($l->t('Applications kept in the top menu but also shown in side menu')); ?>
<p>
<em>
<?php p($l->t('These applications must be selected in the previous option.')); ?><br>
<?php p($l->t('If there is no selection then the global configuration is applied.')); ?>
</em>
</p>
@ -200,6 +198,44 @@ $labelShowHideApps = 'Show and hide the list of applications';
</div>
</div>
</div>
<div class="section">
<h2>
<?php p($l->t('Applications')); ?>
</h2>
<div class="side-menu-setting-table">
<div class="side-menu-setting-row">
<div class="side-menu-setting-label">
<?php p($l->t('Customize sorting')); ?>
</div>
<div class="side-menu-setting-form">
<a class="side-menu-toggler" data-target="#apps-order-list" href="#_">
🖱️ <?php p($l->t($labelShowHideApps)); ?>
</a>
<div class="theme-undo icon icon-history btn-reset btn-reset--down" data-toggle="tooltip" data-original-title="<?php echo p($l->t($labelReset)); ?>" data-reset="<?php echo htmlentities(json_encode([
'side-menu-apps-order' => '[]',
])) ?>"></div>
<div id="apps-order-list" style="display: none">
<ul class="side-menu-setting-list">
<?php foreach ($_['ordered-apps'] as $key => $app): ?>
<li data-id="<?php echo $app['id']; ?>" class="side-menu-setting-list-item">
<span class="arrow">
</span>
<?php echo p($l->t($app['name'])); ?>
</li>
<?php endforeach; ?>
</ul>
</div>
<input type="hidden" value='<?php echo json_encode($_['apps-order']) ?>' name="apps-order" class="side-menu-setting" id="side-menu-apps-order" data-personal>
</div>
</div>
</div>
</div>
<?php endif ?>
<div class="section">