add add top-menu-apps option in the personal settings
This commit is contained in:
parent
9d9afff08d
commit
a1b1396b63
|
@ -23,6 +23,8 @@ use OCP\AppFramework\Http\TemplateResponse;
|
||||||
use OCP\AppFramework\Http\Response;
|
use OCP\AppFramework\Http\Response;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IRequest;
|
use OCP\IRequest;
|
||||||
|
use OCP\IUserSession;
|
||||||
|
use OC;
|
||||||
|
|
||||||
class JsController extends Controller
|
class JsController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -53,6 +55,17 @@ class JsController extends Controller
|
||||||
*/
|
*/
|
||||||
public function script()
|
public function script()
|
||||||
{
|
{
|
||||||
|
$user = OC::$server[IUserSession::class]->getUser();
|
||||||
|
$topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true);
|
||||||
|
|
||||||
|
if ($user) {
|
||||||
|
$userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true);
|
||||||
|
|
||||||
|
if (!empty($userTopMenuApps)) {
|
||||||
|
$topMenuApps = $userTopMenuApps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$parameters = [
|
$parameters = [
|
||||||
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
|
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
|
||||||
'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'),
|
'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'),
|
||||||
|
@ -61,7 +74,7 @@ class JsController extends Controller
|
||||||
'hide-when-no-apps' => (bool) $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
|
'hide-when-no-apps' => (bool) $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
|
||||||
'loader-enabled' => (bool) $this->config->getAppValue('side_menu', 'loader-enabled', '1'),
|
'loader-enabled' => (bool) $this->config->getAppValue('side_menu', 'loader-enabled', '1'),
|
||||||
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
|
||||||
'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true),
|
'top-menu-apps' => $topMenuApps,
|
||||||
];
|
];
|
||||||
|
|
||||||
$response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank');
|
$response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank');
|
||||||
|
|
|
@ -109,6 +109,13 @@ class NavController extends Controller
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true);
|
||||||
|
$userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true);
|
||||||
|
|
||||||
|
if (!empty($userTopMenuApps)) {
|
||||||
|
$topMenuApps = $userTopMenuApps;
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($categoriesLabels as $k => $category) {
|
foreach ($categoriesLabels as $k => $category) {
|
||||||
$categoriesLabels[$category['id']] = $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'];
|
$categoriesLabels[$category['id']] = $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'];
|
||||||
|
|
||||||
|
@ -118,13 +125,14 @@ class NavController extends Controller
|
||||||
$categoriesLabels['external_links'] = $this->trans->t('External sites');
|
$categoriesLabels['external_links'] = $this->trans->t('External sites');
|
||||||
|
|
||||||
foreach ($apps as $app) {
|
foreach ($apps as $app) {
|
||||||
|
if (in_array($app['id'], $topMenuApps)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$categories = (array) $app['category'];
|
$categories = (array) $app['category'];
|
||||||
$appsCategories[$app['id']] = [];
|
$appsCategories[$app['id']] = [];
|
||||||
|
|
||||||
foreach ($categories as $category) {
|
foreach ($categories as $category) {
|
||||||
if ($externalSitesInTopMenu && $category === 'external_links') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($items[$category])) {
|
if (!isset($items[$category])) {
|
||||||
$items[$category] = [
|
$items[$category] = [
|
||||||
|
|
|
@ -63,8 +63,28 @@ class PersonalSettingController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($name === 'top-menu-apps') {
|
||||||
|
$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 ($doSave) {
|
if ($doSave) {
|
||||||
$this->config->setUserValue($user->getUid(), 'side_menu', $name, $value);
|
$this->config->setUserValue($user->getUid(), 'side_menu', $name, $value);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'name' => $name,
|
||||||
|
'value' => $value,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
|
|
|
@ -24,6 +24,7 @@ use OCP\ILogger;
|
||||||
use OCP\Settings\ISettings;
|
use OCP\Settings\ISettings;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IUserSession;
|
use OCP\IUserSession;
|
||||||
|
use OCA\SideMenu\Service\AppRepository;
|
||||||
|
|
||||||
class Personal implements ISettings
|
class Personal implements ISettings
|
||||||
{
|
{
|
||||||
|
@ -47,12 +48,18 @@ class Personal implements ISettings
|
||||||
*/
|
*/
|
||||||
private $userSession;
|
private $userSession;
|
||||||
|
|
||||||
public function __construct(IL10N $l, ILogger $logger, IConfig $config, IUserSession $userSession)
|
/**
|
||||||
|
* @var AppRepository
|
||||||
|
*/
|
||||||
|
private $appRepository;
|
||||||
|
|
||||||
|
public function __construct(IL10N $l, ILogger $logger, IConfig $config, IUserSession $userSession, AppRepository $appRepository)
|
||||||
{
|
{
|
||||||
$this->l = $l;
|
$this->l = $l;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->userSession = $userSession;
|
$this->userSession = $userSession;
|
||||||
|
$this->appRepository = $appRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,6 +71,8 @@ class Personal implements ISettings
|
||||||
|
|
||||||
$parameters = [
|
$parameters = [
|
||||||
'enabled' => $this->config->getUserValue($user->getUid(), 'side_menu', 'enabled', '1'),
|
'enabled' => $this->config->getUserValue($user->getUid(), 'side_menu', 'enabled', '1'),
|
||||||
|
'top-menu-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true),
|
||||||
|
'apps' => $this->appRepository->getVisibleApps(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return new TemplateResponse('side_menu', 'settings/personal-form', $parameters, '');
|
return new TemplateResponse('side_menu', 'settings/personal-form', $parameters, '');
|
||||||
|
|
|
@ -322,8 +322,6 @@ $choicesSizes = [
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p><em>Selected apps will be displayed in the <code>big menu</code> display and in the top menu.</em></p>
|
|
||||||
|
|
||||||
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox>
|
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox>
|
||||||
<?php foreach ($_['apps'] as $app): ?>
|
<?php foreach ($_['apps'] as $app): ?>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -53,6 +53,42 @@ $choicesYesNo = [
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>
|
||||||
|
<?php p($l->t('Top menu')); ?>
|
||||||
|
</h2>
|
||||||
|
<div>
|
||||||
|
<label for="side-menu-top-menu-apps">
|
||||||
|
<?php p($l->t('Apps that not must be moved in the side menu')); ?>
|
||||||
|
<small><span class="warning">Experimental</span></small>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>
|
||||||
|
If there is no selection then the global configuration is applied.
|
||||||
|
</em>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox data-personal>
|
||||||
|
<?php foreach ($_['apps'] as $app): ?>
|
||||||
|
<div>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="top-menu-apps[]"
|
||||||
|
value="<?php echo $app['id'] ?>"
|
||||||
|
id="top-menu-app-<?php echo $app['id'] ?>"
|
||||||
|
<?php if (in_array($app['id'], $_['top-menu-apps'])): ?>checked<?php endif; ?>
|
||||||
|
/>
|
||||||
|
|
||||||
|
<label for="top-menu-app-<?php echo $app['id'] ?>">
|
||||||
|
<?php echo $app['name'] ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<button id="side-menu-save" class="btn btn-primary"><?php p($l->t('Save')); ?></button>
|
<button id="side-menu-save" class="btn btn-primary"><?php p($l->t('Save')); ?></button>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue