From 715ab2249bbc2c31cddeccd011bb92af4020430e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Tue, 8 Dec 2020 13:18:02 +0100 Subject: [PATCH] Collaboration search provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- appinfo/info.xml | 9 +++- lib/Sharing/DeckPlugin.php | 84 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 lib/Sharing/DeckPlugin.php diff --git a/appinfo/info.xml b/appinfo/info.xml index 2ea78ab09..8b58db841 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -17,7 +17,7 @@ - 🚀 Get your project organized - 1.2.2 + 1.2.2-1 agpl Julius Härtl Deck @@ -80,4 +80,11 @@ OCA\Deck\DAV\CalendarPlugin + + + + OCA\Deck\Sharing\DeckPlugin + + + diff --git a/lib/Sharing/DeckPlugin.php b/lib/Sharing/DeckPlugin.php new file mode 100644 index 000000000..6e0071143 --- /dev/null +++ b/lib/Sharing/DeckPlugin.php @@ -0,0 +1,84 @@ + + * + * @author Julius Härtl + * + * @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 . + * + */ + +declare(strict_types=1); + + +namespace OCA\Deck\Sharing; + + +use OCA\Deck\Db\Acl; +use OCA\Deck\Db\Card; +use OCA\Deck\NoPermissionException; +use OCA\Deck\Service\BoardService; +use OCA\Deck\Service\CardService; +use OCA\Deck\Service\PermissionService; +use OCP\Collaboration\Collaborators\ISearchPlugin; +use OCP\Collaboration\Collaborators\ISearchResult; +use OCP\Collaboration\Collaborators\SearchResultType; +use OCP\Share\IShare; + +class DeckPlugin implements ISearchPlugin { + + /** + * @var BoardService + */ + private $boardService; + /** + * @var CardService + */ + private $cardService; + + public function __construct(BoardService $boardService, CardService $cardService) { + $this->boardService = $boardService; + $this->cardService = $cardService; + } + + public function search($search, $limit, $offset, ISearchResult $searchResult) { + $result = ['wide' => [], 'exact' => []]; + + $cards = $this->cardService->searchRaw($search, $limit, $offset); + /** @var PermissionService $permissionsService */ + $permissionsService = \OC::$server->get(PermissionService::class); + foreach ($cards as $card) { + try { + $permissionsService->checkPermission(null, $card['board_id'], Acl::PERMISSION_EDIT); + } catch (NoPermissionException $e) { + continue; + } + $board = $this->boardService->find($card['board_id']); + + $result['wide'][] = [ + 'label' => $card['title'], + 'value' => [ + 'shareType' => IShare::TYPE_DECK, + 'shareWith' => (string)$card['id'] + ], + 'shareWithDescription' => $board->getTitle() . ' – ' . $card['stack_title'], + ]; + } + $type = new SearchResultType('deck'); + $searchResult->addResultSet($type, $result['wide'], $result['exact']); + return false; + } +}