diff --git a/.woodpecker/.publish.yml b/.woodpecker/.publish.yml index 2a4776b..d369dcf 100644 --- a/.woodpecker/.publish.yml +++ b/.woodpecker/.publish.yml @@ -18,9 +18,12 @@ steps: "Create signature": image: nextcloud:25 - secrets: [app_certificate, app_public_certificate] volumes: *volumes environment: + APP_CERTIFICATE: + from_secret: app_certificate + APP_PUBLIC_CERTIFICATE: + from_secret: app_public_certificate SQLITE_DATABASE: /var/www/data/data.db NEXTCLOUD_ADMIN_USER: admin NEXTCLOUD_ADMIN_PASSWORD: admin @@ -39,7 +42,9 @@ steps: "Create package": image: deblan/php:8.3 volumes: *volumes - secrets: [app_certificate] + environment: + APP_CERTIFICATE: + from_secret: app_certificate commands: - cd "/builds/$CI_COMMIT_SHA" - apt-get update diff --git a/appinfo/info.xml b/appinfo/info.xml index cf4cfbf..beb19ab 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -1,6 +1,5 @@ - - + + side_menu Custom menu Modify the display of the menu. @@ -17,7 +16,7 @@ You can report a bug or request a feature by opening an issue. Requirements: -* PHP >= 8.0 +* PHP >= 8.1 * App `theming` enabled If you like this application and if you want to support the development: @@ -32,9 +31,9 @@ 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/). ]]> - 4.0.1 + 4.1.0 agpl - Simon Vieille + Simon Vieille SideMenu https://deblan.gitnet.page/side_menu_doc/ @@ -42,20 +41,20 @@ In case of downtime, you can download **Custom Menu** from [here](https://kim.de customization https://gitnet.fr/deblan/side_menu - https://matrix.to/#/!TFPucDATKODpHNVAtu:neutralnetwork.org?via=neutralnetwork.org + https://gitnet.fr/deblan/side_menu/issues https://gitnet.fr/deblan/side_menu - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc19_default_menu.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/admin_settings.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/n19_big_menu.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc18_menu_always_displayed.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc20_big_menu_responsive.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/personal_settings.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_big_menu.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_default_menu.png + + + + + + + + - - + + OCA\SideMenu\Settings\Admin diff --git a/appinfo/routes.php b/appinfo/routes.php deleted file mode 100644 index bdc3fba..0000000 --- a/appinfo/routes.php +++ /dev/null @@ -1,31 +0,0 @@ -. - */ - -return [ - 'routes' => [ - ['name' => 'App#index', 'url' => '/', 'verb' => 'GET'], - ['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'], - ['name' => 'AdminSetting#removeCache', 'url' => '/admin/cache/remove', 'verb' => 'GET'], - ['name' => 'AdminSetting#exportConfiguration', 'url' => '/admin/config/export', 'verb' => 'GET'], - ], -]; diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index b812fd7..306d0ea 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -3,6 +3,7 @@ namespace OCA\SideMenu\AppInfo; use OC; +use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\Security\CSP\ContentSecurityPolicyNonceManager; use OC\User\User; use OCA\SideMenu\Service\AppRepository; @@ -12,7 +13,11 @@ use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IConfig; +use OCP\INavigationManager; use OCP\IUserSession; +use OCP\L10N\IFactory; use OCP\Util; use Psr\Container\ContainerInterface; @@ -26,6 +31,7 @@ class Application extends App implements IBootstrap public const APP_ID = 'side_menu'; public const APP_NAME = 'Custom menu'; + /** * @var OC\AllConfig */ @@ -41,14 +47,55 @@ class Application extends App implements IBootstrap */ protected $user; - /** - * {@inheritdoc} - */ public function __construct(array $urlParams = []) { parent::__construct(self::APP_ID, $urlParams); } + public function register(IRegistrationContext $context): void + { + $context->registerService(CategoryRepository::class, function (ContainerInterface $c) { + return new CategoryRepository( + $c->get(CategoryFetcher::class), + $c->get(ConfigProxy::class), + $c->get(IConfig::class), + $c->get(IFactory::class), + $c->get(IUserSession::class) + ); + }); + + $context->registerService(AppRepository::class, function (ContainerInterface $c) { + return new AppRepository( + $c->get(\OC_App::class), + $c->get(INavigationManager::class), + $c->get(IFactory::class), + $c->get(ConfigProxy::class), + $c->get(CategoryRepository::class), + $c->get(IEventDispatcher::class), + $c->get(IUserSession::class) + ); + }); + + $context->registerService(ConfigProxy::class, function (ContainerInterface $c) { + return new ConfigProxy( + $c->get(IConfig::class), + ); + }); + } + + public function boot(IBootContext $context): void + { + $this->config = \OC::$server->getConfig(); + $this->cspnm = \OC::$server->getContentSecurityPolicyNonceManager(); + $this->user = \OC::$server[IUserSession::class]->getUser(); + + if (!$this->isEnabled()) { + return; + } + + $this->addAssets(); + } + protected function isEnabled(): bool { $enabled = true; @@ -97,38 +144,10 @@ class Application extends App implements IBootstrap $cache = $this->config->getAppValue(self::APP_ID, 'cache', '0'); foreach ($assets as $value) { - $route = OC::$server->getURLGenerator()->linkToRoute($value['route'], ['v' => $cache]); + $route = \OC::$server->getURLGenerator()->linkToRoute($value['route'], ['v' => $cache]); $value['attr'][$value['route_attr']] = $route; Util::addHeader($value['type'], $value['attr'], ''); } } - - public function register(IRegistrationContext $context): void - { - $context->registerService('AppRepository', function () { - return new AppRepository(); - }); - - $context->registerService('CategoryRepository', function () { - return new CategoryRepository(); - }); - - $context->registerService('ConfigProxy', function () { - return new ConfigProxy(); - }); - } - - public function boot(IBootContext $context): void - { - $this->config = OC::$server->getConfig(); - $this->cspnm = OC::$server->getContentSecurityPolicyNonceManager(); - $this->user = OC::$server[IUserSession::class]->getUser(); - - if (!$this->isEnabled()) { - return; - } - - $this->addAssets(); - } } diff --git a/lib/Controller/AdminSettingController.php b/lib/Controller/AdminSettingController.php index 4ecfbea..279a34c 100644 --- a/lib/Controller/AdminSettingController.php +++ b/lib/Controller/AdminSettingController.php @@ -1,4 +1,5 @@ config->setAppValue(Application::APP_ID, 'cache-categories', '[]'); @@ -49,9 +51,8 @@ class AdminSettingController extends Controller ]).'#more'); } - /** - * @NoCSRFRequired - */ + #[NoCSRFRequired] + #[FrontpageRoute(verb: 'GET', url: '/admin/config/export')] public function exportConfiguration(): DataDownloadResponse { $keys = $this->config->getAppKeys(Application::APP_ID); diff --git a/lib/Controller/AppController.php b/lib/Controller/AppController.php index dd2993e..f8cb357 100644 --- a/lib/Controller/AppController.php +++ b/lib/Controller/AppController.php @@ -1,4 +1,5 @@ getUser(); + $user = \OC::$server[IUserSession::class]->getUser(); $topMenuApps = $this->config->getAppValueArray('top-menu-apps', '[]'); $hiddenApps = $this->config->getAppValueArray('big-menu-hidden-apps', '[]'); $isForced = $this->config->getAppValueBool('force', '0'); @@ -73,7 +75,7 @@ class AppController extends Controller protected function redirectToApp($app, bool $isHref = false): RedirectResponse { if (!$isHref) { - $isIgnoreFrontController = true === OC::$server->getConfig()->getSystemValue( + $isIgnoreFrontController = true === \OC::$server->getConfig()->getSystemValue( 'htaccess.IgnoreFrontController', false ); diff --git a/lib/Controller/CssController.php b/lib/Controller/CssController.php index 93fafb3..e2c9e27 100644 --- a/lib/Controller/CssController.php +++ b/lib/Controller/CssController.php @@ -1,4 +1,5 @@ user = OC::$server[IUserSession::class]->getUser(); + $this->user = \OC::$server[IUserSession::class]->getUser(); } - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - */ + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/css/stylesheet')] public function stylesheet(): TemplateResponse { $response = new TemplateResponse(Application::APP_ID, 'css/stylesheet', $this->getConfig(), 'blank'); diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php index a1b26e3..8f06345 100644 --- a/lib/Controller/JsController.php +++ b/lib/Controller/JsController.php @@ -1,4 +1,5 @@ themingDefaults = $themingDefaults; - $this->user = OC::$server[IUserSession::class]->getUser(); + $this->user = \OC::$server[IUserSession::class]->getUser(); $this->config = $config; $this->l10nFactory = $l10nFactory; } - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - */ + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/js/script')] public function script(): TemplateResponse { $response = new TemplateResponse(Application::APP_ID, 'js/script', $this->getConfig(), 'blank'); @@ -63,11 +66,10 @@ class JsController extends Controller return $response; } - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - */ + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/js/config')] public function config(): JSONResponse { return new JSONResponse($this->getConfig()); @@ -109,10 +111,10 @@ class JsController extends Controller $targetBlankApps = $userTargetBlankApps; } - $isAvatarSet = OC::$server->getAvatarManager()->getAvatar($this->user->getUid())->exists(); + $isAvatarSet = \OC::$server->getAvatarManager()->getAvatar($this->user->getUid())->exists(); if ($useAvatar && $isAvatarSet) { - $avatar = OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [ + $avatar = \OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [ 'userId' => $this->user->getUid(), 'size' => 128, 'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0), @@ -120,13 +122,13 @@ class JsController extends Controller } if ($this->config->getAppValueBool('show-settings', '0')) { - $settingsNav = OC::$server->getNavigationManager()->getAll('settings'); + $settingsNav = \OC::$server->getNavigationManager()->getAll('settings'); if (isset($settingsNav['settings'])) { $settings = [ 'href' => $settingsNav['settings']['href'], 'name' => $settingsNav['settings']['name'], - 'avatar' => OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [ + 'avatar' => \OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [ 'userId' => $this->user->getUid(), 'size' => 32, 'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0), @@ -136,7 +138,7 @@ class JsController extends Controller } } - $indexUrl = OC::$server->getURLGenerator()->linkTo('', 'index.php'); + $indexUrl = \OC::$server->getURLGenerator()->linkTo('', 'index.php'); return [ 'opener-position' => $this->config->getAppValue('opener-position', 'before'), diff --git a/lib/Controller/NavController.php b/lib/Controller/NavController.php index 21fb23c..1d90849 100644 --- a/lib/Controller/NavController.php +++ b/lib/Controller/NavController.php @@ -1,4 +1,5 @@ getUser(); + $user = \OC::$server[IUserSession::class]->getUser(); $items = []; if (!$user) { diff --git a/lib/Controller/PersonalSettingController.php b/lib/Controller/PersonalSettingController.php index e4f6331..482a7c6 100644 --- a/lib/Controller/PersonalSettingController.php +++ b/lib/Controller/PersonalSettingController.php @@ -1,4 +1,5 @@ url->imagePath(Application::APP_ID, 'icon.svg'); diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php index efa5e16..2aebec8 100644 --- a/lib/Settings/Personal.php +++ b/lib/Settings/Personal.php @@ -1,4 +1,5 @@ url->imagePath(Application::APP_ID, 'icon.svg');