Skip to content

Commit

Permalink
Add an OCS endpoint for the hovercard contact actions
Browse files Browse the repository at this point in the history
Signed-off-by: Joas Schilling <coding@schilljs.com>
  • Loading branch information
nickvergessen committed Oct 15, 2021
1 parent 4e32fe8 commit d1639a7
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 0 deletions.
84 changes: 84 additions & 0 deletions core/Controller/HoverCardController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?php

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/>.
*
*/
namespace OC\Core\Controller;

use OC\Contacts\ContactsMenu\Manager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\Contacts\ContactsMenu\IEntry;
use OCP\IRequest;
use OCP\IUserSession;
use OCP\Share\IShare;

class HoverCardController extends \OCP\AppFramework\OCSController {

/** @var Manager */
private $manager;

/** @var IUserSession */
private $userSession;

/**
* @param IRequest $request
* @param IUserSession $userSession
* @param Manager $manager
*/
public function __construct(IRequest $request, IUserSession $userSession, Manager $manager) {
parent::__construct('core', $request);
$this->userSession = $userSession;
$this->manager = $manager;
}

/**
* @NoAdminRequired
*
* @param string $userId
* @return DataResponse
*/
public function getUser(string $userId): DataResponse {
$contact = $this->manager->findOne($this->userSession->getUser(), IShare::TYPE_USER, $userId);

if (!$contact) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
}

$data = $this->entryToArray($contact);

$actions = $data['actions'];
if ($data['topAction']) {
array_unshift($actions, $data['topAction']);
}

return new DataResponse([
'userId' => $userId,
'displayName' => $contact->getFullName(),
'actions' => $actions,
]);
}

protected function entryToArray(IEntry $entry): array {
return json_decode(json_encode($entry), true);
}
}
2 changes: 2 additions & 0 deletions core/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@
['root' => '/core', 'name' => 'AppPassword#rotateAppPassword', 'url' => '/apppassword/rotate', 'verb' => 'POST'],
['root' => '/core', 'name' => 'AppPassword#deleteAppPassword', 'url' => '/apppassword', 'verb' => 'DELETE'],

['root' => '/hovercard', 'name' => 'HoverCard#getUser', 'url' => '/v1/{userId}', 'verb' => 'GET'],

['root' => '/collaboration', 'name' => 'CollaborationResources#searchCollections', 'url' => '/resources/collections/search/{filter}', 'verb' => 'GET'],
['root' => '/collaboration', 'name' => 'CollaborationResources#listCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'GET'],
['root' => '/collaboration', 'name' => 'CollaborationResources#renameCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'PUT'],
Expand Down
2 changes: 2 additions & 0 deletions lib/private/Contacts/ContactsMenu/ContactsStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ private function contactArrayToEntry(array $contact) {

if (isset($contact['id'])) {
$entry->setId($contact['id']);
} elseif (isset($contact['UID'])) {
$entry->setId($contact['UID']);
}

if (isset($contact['FN'])) {
Expand Down

0 comments on commit d1639a7

Please sign in to comment.