From 5153bee7c675d584846d2c129be1beede534326b Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 20 Sep 2020 20:53:03 +0200 Subject: [PATCH 1/3] - add specific methods to get the config - add a controller to retrieve most of the configuration --- appinfo/routes.php | 1 + lib/Controller/CssController.php | 29 +++++++++----- lib/Controller/JsController.php | 69 +++++++++++++++++++++++--------- 3 files changed, 70 insertions(+), 29 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index be3ae60..90bb2be 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -21,6 +21,7 @@ return [ 'routes' => [ ['name' => 'Css#stylesheet', 'url' => '/css/stylesheet', 'verb' => 'GET'], ['name' => 'Js#script', 'url' => '/js/script', 'verb' => 'GET'], + ['name' => 'Js#config', 'url' => '/js/config', 'verb' => 'GET'], ['name' => 'Nav#items', 'url' => '/nav/items', 'verb' => 'GET'], ['name' => 'PersonalSetting#valueSet', 'url' => '/personalSetting/valueSet', 'verb' => 'POST'], ], diff --git a/lib/Controller/CssController.php b/lib/Controller/CssController.php index bc1e6d8..1454989 100644 --- a/lib/Controller/CssController.php +++ b/lib/Controller/CssController.php @@ -19,6 +19,7 @@ namespace OCA\SideMenu\Controller; use OC; +use OC\User\User; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\TemplateResponse; @@ -33,13 +34,21 @@ class CssController extends Controller */ protected $config; + /** + * @var User + */ + protected $user; + /** * @param string $appName + * @param IRequest $request + * @param IConfig $config */ public function __construct($appName, IRequest $request, IConfig $config) { parent::__construct($appName, $request); + $this->user = OC::$server[IUserSession::class]->getUser(); $this->config = $config; } @@ -51,22 +60,29 @@ class CssController extends Controller * @return Response */ public function stylesheet() + { + $response = new TemplateResponse('side_menu', 'css/stylesheet', $this->getConfig(), 'blank'); + $response->addHeader('Content-Type', 'text/css'); + + return $response; + } + + protected function getConfig(): array { $backgroundColor = $this->config->getAppValue('side_menu', 'background-color', '#333333'); $backgroundColorTo = $this->config->getAppValue('side_menu', 'background-color-to', $backgroundColor); - $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 ($this->user) { + $userTopMenuApps = (array) json_decode($this->config->getUserValue($this->user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true); if (!empty($userTopMenuApps)) { $topMenuApps = $userTopMenuApps; } } - $parameters = [ + return [ 'vars' => [ 'background-color' => $backgroundColor, 'background-color-to' => $backgroundColorTo, @@ -86,10 +102,5 @@ class CssController extends Controller 'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'), 'top-menu-apps' => $topMenuApps, ]; - - $response = new TemplateResponse('side_menu', 'css/stylesheet', $parameters, 'blank'); - $response->addHeader('Content-Type', 'text/css'); - - return $response; } } diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php index 3f3803c..22c0a24 100644 --- a/lib/Controller/JsController.php +++ b/lib/Controller/JsController.php @@ -19,8 +19,10 @@ namespace OCA\SideMenu\Controller; use OC; +use OC\User\User; +use OCA\Theming\ThemingDefaults; use OCP\AppFramework\Controller; -use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\IConfig; use OCP\IRequest; @@ -34,12 +36,28 @@ class JsController extends Controller protected $config; /** - * @param string $appName + * @var User */ - public function __construct($appName, IRequest $request, IConfig $config) + protected $user; + + /** + * @var ThemingDefaults + */ + protected $themingDefaults; + + /** + * @param string $appName + * @param IRequest $request + * @param IConfig $config + * @param ThemingDefaults $themingDefaults + */ + public function __construct($appName, IRequest $request, IConfig $config, ThemingDefaults $themingDefaults) { parent::__construct($appName, $request); + $this->themingDefaults = $themingDefaults; + + $this->user = OC::$server[IUserSession::class]->getUser(); $this->config = $config; } @@ -47,45 +65,60 @@ class JsController extends Controller * @NoAdminRequired * @NoCSRFRequired * @PublicPage - * - * @return Response */ - public function script() + public function script(): TemplateResponse + { + $response = new TemplateResponse('side_menu', 'js/script', $this->getConfig(), 'blank'); + $response->addHeader('Content-Type', 'text/javascript'); + + return $response; + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @PublicPage + */ + public function config(): JSONResponse + { + return new JSONResponse($this->getConfig()); + } + + protected function getConfig(): array { - $user = OC::$server[IUserSession::class]->getUser(); $topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true); $targetBlankApps = (array) json_decode($this->config->getAppValue('side_menu', 'target-blank-apps', '[]'), true); $useAvatar = (bool) $this->config->getAppValue('side_menu', 'use-avatar', '0'); $avatar = null; - if ($user) { - $userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true); + if ($this->user) { + $userTopMenuApps = (array) json_decode($this->config->getUserValue($this->user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true); if (!empty($userTopMenuApps)) { $topMenuApps = $userTopMenuApps; } - $userTargetBlankMode = (int) $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-mode', '1'); - $userTargetBlankApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-apps', '[]'), true); + $userTargetBlankMode = (int) $this->config->getUserValue($this->user->getUid(), 'side_menu', 'target-blank-mode', '1'); + $userTargetBlankApps = (array) json_decode($this->config->getUserValue($this->user->getUid(), 'side_menu', 'target-blank-apps', '[]'), true); if (2 === $userTargetBlankMode) { $targetBlankApps = $userTargetBlankApps; } - $isAvatarSet = OC::$server->getAvatarManager()->getAvatar($user->getUid())->exists(); + $isAvatarSet = OC::$server->getAvatarManager()->getAvatar($this->user->getUid())->exists(); if ($useAvatar && $isAvatarSet) { $avatar = OC::$server->getURLGenerator()->linkToRoute( 'core.avatar.getAvatar', [ - 'userId' => $user->getUid(), + 'userId' => $this->user->getUid(), 'size' => 128, - 'v' => $this->config->getUserValue($user, 'avatar', 'version', 0), + 'v' => $this->config->getUserValue($this->user, 'avatar', 'version', 0), ] ); } } - $parameters = [ + return [ 'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'), 'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'), 'external-sites-in-top-menu' => (bool) $this->config->getAppValue('side_menu', 'external-sites-in-top-menu', 0), @@ -97,11 +130,7 @@ class JsController extends Controller 'avatar' => $avatar, 'top-menu-apps' => $topMenuApps, 'target-blank-apps' => $targetBlankApps, + 'logo' => $this->themingDefaults->getLogo(), ]; - - $response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank'); - $response->addHeader('Content-Type', 'text/javascript'); - - return $response; } } From 45abf1f09d40804c057a3140914af87f47e307e7 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 20 Sep 2020 20:56:36 +0200 Subject: [PATCH 2/3] SideMenu and SideMenuBig use the new controller to get configuration --- src/SideMenu.vue | 44 ++++++++++++++++++++++---------------------- src/SideMenuBig.vue | 21 +++++++++++++++++---- 2 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/SideMenu.vue b/src/SideMenu.vue index 746e131..08b92c3 100644 --- a/src/SideMenu.vue +++ b/src/SideMenu.vue @@ -19,9 +19,12 @@ along with this program. If not, see .
-
+
+
+ +
    @@ -37,6 +40,7 @@ along with this program. If not, see .