diff options
Diffstat (limited to 'core/Controller/HoverCardController.php')
-rw-r--r-- | core/Controller/HoverCardController.php | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/core/Controller/HoverCardController.php b/core/Controller/HoverCardController.php index 632cdd0d02f..236a81760ac 100644 --- a/core/Controller/HoverCardController.php +++ b/core/Controller/HoverCardController.php @@ -2,49 +2,45 @@ declare(strict_types=1); /** - * @copyright 2021 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/>. - * + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OC\Core\Controller; use OC\Contacts\ContactsMenu\Manager; +use OC\Core\ResponseDefinitions; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\ApiRoute; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\DataResponse; -use OCP\Contacts\ContactsMenu\IEntry; +use OCP\AppFramework\OCSController; use OCP\IRequest; use OCP\IUserSession; use OCP\Share\IShare; -class HoverCardController extends \OCP\AppFramework\OCSController { - private Manager $manager; - private IUserSession $userSession; - - public function __construct(IRequest $request, IUserSession $userSession, Manager $manager) { +/** + * @psalm-import-type CoreContactsAction from ResponseDefinitions + */ +class HoverCardController extends OCSController { + public function __construct( + IRequest $request, + private IUserSession $userSession, + private Manager $manager, + ) { parent::__construct('core', $request); - $this->userSession = $userSession; - $this->manager = $manager; } /** - * @NoAdminRequired + * Get the account details for a hovercard + * + * @param string $userId ID of the user + * @return DataResponse<Http::STATUS_OK, array{userId: string, displayName: string, actions: list<CoreContactsAction>}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}> + * + * 200: Account details returned + * 404: Account not found */ + #[NoAdminRequired] + #[ApiRoute(verb: 'GET', url: '/v1/{userId}', root: '/hovercard')] public function getUser(string $userId): DataResponse { $contact = $this->manager->findOne($this->userSession->getUser(), IShare::TYPE_USER, $userId); @@ -52,21 +48,18 @@ class HoverCardController extends \OCP\AppFramework\OCSController { return new DataResponse([], Http::STATUS_NOT_FOUND); } - $data = $this->entryToArray($contact); + $data = $contact->jsonSerialize(); $actions = $data['actions']; if ($data['topAction']) { array_unshift($actions, $data['topAction']); } + /** @var list<CoreContactsAction> $actions */ return new DataResponse([ 'userId' => $userId, 'displayName' => $contact->getFullName(), 'actions' => $actions, ]); } - - protected function entryToArray(IEntry $entry): array { - return json_decode(json_encode($entry), true); - } } |