From 91ac6316ffc03433c66093dc9ba4d638a4af9363 Mon Sep 17 00:00:00 2001 From: "Enjeck C." Date: Sun, 9 Aug 2026 20:16:37 +0100 Subject: [PATCH 1/2] feat(navigation): add LoadAdditionalEntriesListener Signed-off-by: Enjeck C. --- lib/AppInfo/Application.php | 6 +-- .../LoadAdditionalEntriesListener.php | 41 +++++++++++++++++++ lib/Service/ContextService.php | 34 ++++++++------- 3 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 lib/Listener/LoadAdditionalEntriesListener.php diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 108b7686f0..bb01f37bc5 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -17,7 +17,7 @@ use OCA\Tables\Event\ViewDeletedEvent; use OCA\Tables\Listener\AddMissingIndicesListener; use OCA\Tables\Listener\AnalyticsDatasourceListener; -use OCA\Tables\Listener\BeforeTemplateRenderedListener; +use OCA\Tables\Listener\LoadAdditionalEntriesListener; use OCA\Tables\Listener\LoadAdditionalListener; use OCA\Tables\Listener\ReceiverCleanupListener; use OCA\Tables\Listener\TablesReferenceListener; @@ -39,11 +39,11 @@ use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; -use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent; use OCP\Collaboration\Reference\RenderReferenceEvent; use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent; use OCP\DB\Events\AddMissingIndicesEvent; use OCP\Group\Events\GroupDeletedEvent; +use OCP\Navigation\Events\LoadAdditionalEntriesEvent; use OCP\User\Events\BeforeUserDeletedEvent; use OCP\User\Events\UserDeletedEvent; use Psr\Container\ContainerInterface; @@ -85,7 +85,7 @@ public function register(IRegistrationContext $context): void { $context->registerEventListener(BeforeUserDeletedEvent::class, UserDeletedListener::class); $context->registerEventListener(DatasourceEvent::class, AnalyticsDatasourceListener::class); $context->registerEventListener(RenderReferenceEvent::class, TablesReferenceListener::class); - $context->registerEventListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class); + $context->registerEventListener(LoadAdditionalEntriesEvent::class, LoadAdditionalEntriesListener::class); $context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class); $context->registerEventListener(TableDeletedEvent::class, WhenTableDeletedAuditLogListener::class); $context->registerEventListener(ViewDeletedEvent::class, WhenViewDeletedAuditLogListener::class); diff --git a/lib/Listener/LoadAdditionalEntriesListener.php b/lib/Listener/LoadAdditionalEntriesListener.php new file mode 100644 index 0000000000..583e285b11 --- /dev/null +++ b/lib/Listener/LoadAdditionalEntriesListener.php @@ -0,0 +1,41 @@ + + */ +class LoadAdditionalEntriesListener implements IEventListener { + public function __construct( + protected IUserSession $userSession, + protected ContextService $contextService, + ) { + } + + /** + * @inheritDoc + */ + public function handle(Event $event): void { + if (!$event instanceof LoadAdditionalEntriesEvent) { + return; + } + + $user = $this->userSession->getUser(); + if ($user === null) { + return; + } + + $this->contextService->addToNavigation($user->getUID()); + } +} diff --git a/lib/Service/ContextService.php b/lib/Service/ContextService.php index 9a32490199..9ac80d0661 100644 --- a/lib/Service/ContextService.php +++ b/lib/Service/ContextService.php @@ -80,25 +80,23 @@ public function findForNavigation(string $userId): array { public function addToNavigation(string $userId): void { $contexts = $this->findForNavigation($userId); foreach ($contexts as $context) { - $this->navigationManager->add(function () use ($context) { - $iconRelPath = 'material/' . $context->getIcon() . '.svg'; - if (file_exists(__DIR__ . '/../../img/' . $iconRelPath)) { - $iconUrl = $this->urlGenerator->imagePath(Application::APP_ID, $iconRelPath); - } else { - $iconUrl = $this->urlGenerator->imagePath('core', 'places/default-app-icon.svg'); - } + $iconRelPath = 'material/' . $context->getIcon() . '.svg'; + if (file_exists(__DIR__ . '/../../img/' . $iconRelPath)) { + $iconUrl = $this->urlGenerator->imagePath(Application::APP_ID, $iconRelPath); + } else { + $iconUrl = $this->urlGenerator->imagePath('core', 'places/default-app-icon.svg'); + } + + $contextUrl = $this->urlGenerator->linkToRoute('tables.page.context', ['contextId' => $context->getId()]); - $contextUrl = $this->urlGenerator->linkToRoute('tables.page.context', ['contextId' => $context->getId()]); - - return [ - 'id' => Application::APP_ID . '_application_' . $context->getId(), - 'name' => $context->getName(), - 'href' => $contextUrl, - 'icon' => $iconUrl, - 'order' => 500, - 'type' => 'link', - ]; - }); + $this->navigationManager->add([ + 'id' => Application::APP_ID . '_application_' . $context->getId(), + 'name' => $context->getName(), + 'href' => $contextUrl, + 'icon' => $iconUrl, + 'order' => 500, + 'type' => 'link', + ]); } } From 2a83012c7b20f3686225182a6065d6ed7b104fd7 Mon Sep 17 00:00:00 2001 From: Kostiantyn Miakshyn Date: Wed, 12 Aug 2026 01:08:47 +0200 Subject: [PATCH 2/2] feat(navigation): remove BeforeTemplateRenderedListener Signed-off-by: Kostiantyn Miakshyn --- .../BeforeTemplateRenderedListener.php | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 lib/Listener/BeforeTemplateRenderedListener.php diff --git a/lib/Listener/BeforeTemplateRenderedListener.php b/lib/Listener/BeforeTemplateRenderedListener.php deleted file mode 100644 index 7bce96c24e..0000000000 --- a/lib/Listener/BeforeTemplateRenderedListener.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ -class BeforeTemplateRenderedListener implements IEventListener { - public function __construct( - protected IUserSession $userSession, - protected ContextService $contextService, - ) { - } - - /** - * @inheritDoc - */ - public function handle(Event $event): void { - if (!$event instanceof BeforeTemplateRenderedEvent) { - return; - } - - $user = $this->userSession->getUser(); - if ($user === null) { - return; - } - - $this->contextService->addToNavigation($user->getUID()); - } -}