]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat(events): Add typed event for filtering autocompletion suggestions 41218/head
authorJoas Schilling <coding@schilljs.com>
Tue, 31 Oct 2023 14:07:02 +0000 (15:07 +0100)
committerJoas Schilling <coding@schilljs.com>
Thu, 2 Nov 2023 10:08:53 +0000 (11:08 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
core/Controller/AutoCompleteController.php
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php
lib/public/Collaboration/AutoComplete/AutoCompleteFilterEvent.php [new file with mode: 0644]

index 0b692d8527797f20c721a62dba66c0e67b0b6ffe..c873603fd0e5f353cbc2b3e83f0591adbba5802f 100644 (file)
@@ -35,6 +35,7 @@ use OCP\AppFramework\Http;
 use OCP\AppFramework\Http\DataResponse;
 use OCP\AppFramework\OCSController;
 use OCP\Collaboration\AutoComplete\AutoCompleteEvent;
+use OCP\Collaboration\AutoComplete\AutoCompleteFilterEvent;
 use OCP\Collaboration\AutoComplete\IManager;
 use OCP\Collaboration\Collaborators\ISearch;
 use OCP\EventDispatcher\IEventDispatcher;
@@ -88,6 +89,18 @@ class AutoCompleteController extends OCSController {
                $this->dispatcher->dispatch(IManager::class . '::filterResults', $event);
                $results = $event->getResults();
 
+               $event = new AutoCompleteFilterEvent(
+                       $results,
+                       $search,
+                       $itemType,
+                       $itemId,
+                       $sorter,
+                       $shareTypes,
+                       $limit,
+               );
+               $this->dispatcher->dispatchTyped($event);
+               $results = $event->getResults();
+
                $exactMatches = $results['exact'];
                unset($results['exact']);
                $results = array_merge_recursive($exactMatches, $results);
index a95f227e1c0b474b41361827aea1ddaa23e0669d..b2d0b2255749b3ad2ba69f3eda082b77050aefc6 100644 (file)
@@ -169,6 +169,7 @@ return array(
     'OCP\\Capabilities\\IInitialStateExcludedCapability' => $baseDir . '/lib/public/Capabilities/IInitialStateExcludedCapability.php',
     'OCP\\Capabilities\\IPublicCapability' => $baseDir . '/lib/public/Capabilities/IPublicCapability.php',
     'OCP\\Collaboration\\AutoComplete\\AutoCompleteEvent' => $baseDir . '/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php',
+    'OCP\\Collaboration\\AutoComplete\\AutoCompleteFilterEvent' => $baseDir . '/lib/public/Collaboration/AutoComplete/AutoCompleteFilterEvent.php',
     'OCP\\Collaboration\\AutoComplete\\IManager' => $baseDir . '/lib/public/Collaboration/AutoComplete/IManager.php',
     'OCP\\Collaboration\\AutoComplete\\ISorter' => $baseDir . '/lib/public/Collaboration/AutoComplete/ISorter.php',
     'OCP\\Collaboration\\Collaborators\\ISearch' => $baseDir . '/lib/public/Collaboration/Collaborators/ISearch.php',
index 998fb033b4b602f384db2b4635f3385c9f9c36a5..7e73255b29b2e737108421d4db2f038ad3d87997 100644 (file)
@@ -202,6 +202,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
         'OCP\\Capabilities\\IInitialStateExcludedCapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/IInitialStateExcludedCapability.php',
         'OCP\\Capabilities\\IPublicCapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/IPublicCapability.php',
         'OCP\\Collaboration\\AutoComplete\\AutoCompleteEvent' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php',
+        'OCP\\Collaboration\\AutoComplete\\AutoCompleteFilterEvent' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/AutoCompleteFilterEvent.php',
         'OCP\\Collaboration\\AutoComplete\\IManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/IManager.php',
         'OCP\\Collaboration\\AutoComplete\\ISorter' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/ISorter.php',
         'OCP\\Collaboration\\Collaborators\\ISearch' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Collaborators/ISearch.php',
index 5206dc37115679cf86dc00abc8c115fa6993bcfe..23879b93fa1f3b52d61adb61373f309cce2428e8 100644 (file)
@@ -29,6 +29,7 @@ use OCP\EventDispatcher\GenericEvent;
 
 /**
  * @since 16.0.0
+ * @deprecated Use {@see AutoCompleteFilterEvent} instead
  */
 class AutoCompleteEvent extends GenericEvent {
        /**
diff --git a/lib/public/Collaboration/AutoComplete/AutoCompleteFilterEvent.php b/lib/public/Collaboration/AutoComplete/AutoCompleteFilterEvent.php
new file mode 100644 (file)
index 0000000..fd1bec4
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\Collaboration\AutoComplete;
+
+use OCP\EventDispatcher\Event;
+
+/**
+ * @since 28.0.0
+ */
+class AutoCompleteFilterEvent extends Event {
+       /**
+        * @since 28.0.0
+        */
+       public function __construct(
+               protected array $results,
+               protected string $search,
+               protected ?string $itemType,
+               protected ?string $itemId,
+               protected ?string $sorter,
+               protected array $shareTypes,
+               protected int $limit,
+       ) {
+               parent::__construct();
+       }
+
+       /**
+        * @since 28.0.0
+        */
+       public function getResults(): array {
+               return $this->results;
+       }
+
+       /**
+        * @param array $results
+        * @since 28.0.0
+        */
+       public function setResults(array $results): void {
+               $this->results = $results;
+       }
+
+       /**
+        * @since 28.0.0
+        */
+       public function getSearchTerm(): string {
+               return $this->search;
+       }
+
+       /**
+        * @return int[] List of `\OCP\Share\IShare::TYPE_*` constants
+        * @since 28.0.0
+        */
+       public function getShareTypes(): array {
+               return $this->shareTypes;
+       }
+
+       /**
+        * @since 28.0.0
+        */
+       public function getItemType(): ?string {
+               return $this->itemType;
+       }
+
+       /**
+        * @since 28.0.0
+        */
+       public function getItemId(): ?string {
+               return $this->itemId;
+       }
+
+       /**
+        * @return ?string List of desired sort identifiers, top priority first. When multiple are given they are joined with a pipe: `commenters|share-recipients`
+        * @since 28.0.0
+        */
+       public function getSorter(): ?string {
+               return $this->sorter;
+       }
+
+       /**
+        * @since 28.0.0
+        */
+       public function getLimit(): int {
+               return $this->limit;
+       }
+}