From fcdd702040089d386bbbac7082fa3a1940e5309b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 Aug 2020 16:21:22 +0200 Subject: [PATCH 1/3] App navigation via unified search Signed-off-by: Joas Schilling --- .../composer/composer/autoload_classmap.php | 1 + .../composer/composer/autoload_static.php | 1 + apps/settings/lib/AppInfo/Application.php | 2 + apps/settings/lib/Search/AppSearch.php | 104 ++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 apps/settings/lib/Search/AppSearch.php diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php index aec70c4ea2..480d84e363 100644 --- a/apps/settings/composer/composer/autoload_classmap.php +++ b/apps/settings/composer/composer/autoload_classmap.php @@ -31,6 +31,7 @@ return array( 'OCA\\Settings\\Hooks' => $baseDir . '/../lib/Hooks.php', 'OCA\\Settings\\Mailer\\NewUserMailHelper' => $baseDir . '/../lib/Mailer/NewUserMailHelper.php', 'OCA\\Settings\\Middleware\\SubadminMiddleware' => $baseDir . '/../lib/Middleware/SubadminMiddleware.php', + 'OCA\\Settings\\Search\\AppSearch' => $baseDir . '/../lib/Search/AppSearch.php', 'OCA\\Settings\\Search\\SectionSearch' => $baseDir . '/../lib/Search/SectionSearch.php', 'OCA\\Settings\\Sections\\Admin\\Additional' => $baseDir . '/../lib/Sections/Admin/Additional.php', 'OCA\\Settings\\Sections\\Admin\\Groupware' => $baseDir . '/../lib/Sections/Admin/Groupware.php', diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index 4d0b7bc21a..d98e58c1c6 100644 --- a/apps/settings/composer/composer/autoload_static.php +++ b/apps/settings/composer/composer/autoload_static.php @@ -46,6 +46,7 @@ class ComposerStaticInitSettings 'OCA\\Settings\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php', 'OCA\\Settings\\Mailer\\NewUserMailHelper' => __DIR__ . '/..' . '/../lib/Mailer/NewUserMailHelper.php', 'OCA\\Settings\\Middleware\\SubadminMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/SubadminMiddleware.php', + 'OCA\\Settings\\Search\\AppSearch' => __DIR__ . '/..' . '/../lib/Search/AppSearch.php', 'OCA\\Settings\\Search\\SectionSearch' => __DIR__ . '/..' . '/../lib/Search/SectionSearch.php', 'OCA\\Settings\\Sections\\Admin\\Additional' => __DIR__ . '/..' . '/../lib/Sections/Admin/Additional.php', 'OCA\\Settings\\Sections\\Admin\\Groupware' => __DIR__ . '/..' . '/../lib/Sections/Admin/Groupware.php', diff --git a/apps/settings/lib/AppInfo/Application.php b/apps/settings/lib/AppInfo/Application.php index 0fd39f71b3..ce96daa372 100644 --- a/apps/settings/lib/AppInfo/Application.php +++ b/apps/settings/lib/AppInfo/Application.php @@ -46,6 +46,7 @@ use OCA\Settings\Activity\Provider; use OCA\Settings\Hooks; use OCA\Settings\Mailer\NewUserMailHelper; use OCA\Settings\Middleware\SubadminMiddleware; +use OCA\Settings\Search\AppSearch; use OCA\Settings\Search\SectionSearch; use OCP\Activity\IManager as IActivityManager; use OCP\AppFramework\App; @@ -79,6 +80,7 @@ class Application extends App implements IBootstrap { $context->registerServiceAlias('SubadminMiddleware', SubadminMiddleware::class); $context->registerMiddleware(SubadminMiddleware::class); $context->registerSearchProvider(SectionSearch::class); + $context->registerSearchProvider(AppSearch::class); /** * Core class wrappers diff --git a/apps/settings/lib/Search/AppSearch.php b/apps/settings/lib/Search/AppSearch.php new file mode 100644 index 0000000000..7e977e4248 --- /dev/null +++ b/apps/settings/lib/Search/AppSearch.php @@ -0,0 +1,104 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Settings\Search; + +use OCP\IL10N; +use OCP\INavigationManager; +use OCP\IUser; +use OCP\Search\IProvider; +use OCP\Search\ISearchQuery; +use OCP\Search\SearchResult; +use OCP\Search\SearchResultEntry; + +class AppSearch implements IProvider { + + /** @var INavigationManager */ + protected $navigationManager; + + /** @var IL10N */ + protected $l; + + public function __construct(INavigationManager $navigationManager, + IL10N $l) { + $this->navigationManager = $navigationManager; + $this->l = $l; + } + + /** + * @inheritDoc + */ + public function getId(): string { + return 'settings_apps'; + } + + /** + * @inheritDoc + */ + public function getName(): string { + return $this->l->t('Apps'); + } + + /** + * @inheritDoc + */ + public function getOrder(string $route, array $routeParameters): int { + return -1; + } + + /** + * @inheritDoc + */ + public function search(IUser $user, ISearchQuery $query): SearchResult { + /** @var $entries */ + $entries = $this->navigationManager->getAll('all'); + + $result = []; + foreach ($entries as $entry) { + if ( + stripos($entry['name'], $query->getTerm()) === false && + stripos($entry['id'], $query->getTerm()) === false + ) { + continue; + } + + if (strpos($query->getRoute(), $entry['id'] . '.') === 0) { + // Skip the current app, unlikely this is intended + continue; + } + + $result[] = new SearchResultEntry( + '', + $entry['name'], + '', + $entry['href'], + 'icon-confirm' + ); + } + + return SearchResult::complete( + $this->l->t('Apps'), + $result + ); + } +} From 5be04942e733c8e862f81ab2b2ee81730f9aab3a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 5 Aug 2020 17:50:20 +0200 Subject: [PATCH 2/3] Hide navigation links which dont lead anywhere (looking at you user status) Signed-off-by: Joas Schilling --- apps/settings/lib/Search/AppSearch.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/settings/lib/Search/AppSearch.php b/apps/settings/lib/Search/AppSearch.php index 7e977e4248..f06e060e9a 100644 --- a/apps/settings/lib/Search/AppSearch.php +++ b/apps/settings/lib/Search/AppSearch.php @@ -87,6 +87,11 @@ class AppSearch implements IProvider { continue; } + if ($entry['href'] === '') { + // Nothing we can open, so ignore + continue; + } + $result[] = new SearchResultEntry( '', $entry['name'], From 99fbaa9cba21ea79334b3d72144a22c4afa5fbe5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 5 Aug 2020 17:51:18 +0200 Subject: [PATCH 3/3] Very top of the tops Signed-off-by: Joas Schilling --- apps/settings/lib/Search/AppSearch.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/settings/lib/Search/AppSearch.php b/apps/settings/lib/Search/AppSearch.php index f06e060e9a..393f63a9e8 100644 --- a/apps/settings/lib/Search/AppSearch.php +++ b/apps/settings/lib/Search/AppSearch.php @@ -63,7 +63,7 @@ class AppSearch implements IProvider { * @inheritDoc */ public function getOrder(string $route, array $routeParameters): int { - return -1; + return -50; } /**