Implement search and rename in backend
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
53ac9bdda1
commit
e404ce7096
4 changed files with 98 additions and 1 deletions
|
@ -84,6 +84,22 @@ class CollaborationResourcesController extends OCSController {
|
||||||
return new DataResponse($this->prepareCollection($collection));
|
return new DataResponse($this->prepareCollection($collection));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*
|
||||||
|
* @param int $collectionId
|
||||||
|
* @return DataResponse
|
||||||
|
*/
|
||||||
|
public function searchCollections(string $filter): DataResponse {
|
||||||
|
try {
|
||||||
|
$collections = $this->manager->searchCollections($this->userSession->getUser(), $filter);
|
||||||
|
} catch (CollectionException $e) {
|
||||||
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new DataResponse(array_map([$this, 'prepareCollection'], $collections));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @NoAdminRequired
|
* @NoAdminRequired
|
||||||
*
|
*
|
||||||
|
@ -189,6 +205,31 @@ class CollaborationResourcesController extends OCSController {
|
||||||
return new DataResponse($this->prepareCollection($collection));
|
return new DataResponse($this->prepareCollection($collection));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @NoAdminRequired
|
||||||
|
*
|
||||||
|
* @param int $collectionId
|
||||||
|
* @param string $collectionName
|
||||||
|
* @return DataResponse
|
||||||
|
*/
|
||||||
|
public function renameCollection(int $collectionId, string $collectionName): DataResponse {
|
||||||
|
try {
|
||||||
|
$collection = $this->manager->getCollection($collectionId);
|
||||||
|
if (!$collection->canAccess($this->userSession->getUser())) {
|
||||||
|
throw new CollectionException('Not found');
|
||||||
|
}
|
||||||
|
} catch (CollectionException $exception) {
|
||||||
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$collection = $this->manager->renameCollection($collectionId, $collectionName);
|
||||||
|
} catch (CollectionException $e) {
|
||||||
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
||||||
|
}
|
||||||
|
return new DataResponse($this->prepareCollection($collection));
|
||||||
|
}
|
||||||
|
|
||||||
protected function prepareCollection(ICollection $collection): array {
|
protected function prepareCollection(ICollection $collection): array {
|
||||||
return [
|
return [
|
||||||
'id' => $collection->getId(),
|
'id' => $collection->getId(),
|
||||||
|
@ -206,7 +247,8 @@ class CollaborationResourcesController extends OCSController {
|
||||||
'type' => $resource->getType(),
|
'type' => $resource->getType(),
|
||||||
'id' => $resource->getId(),
|
'id' => $resource->getId(),
|
||||||
'name' => $resource->getName(),
|
'name' => $resource->getName(),
|
||||||
'iconClass' => $resource->getIconClass()
|
'iconClass' => $resource->getIconClass(),
|
||||||
|
'link' => $resource->getLink(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,8 +91,11 @@ $application->registerRoutes($this, [
|
||||||
['root' => '/core', 'name' => 'WhatsNew#dismiss', 'url' => '/whatsnew', 'verb' => 'POST'],
|
['root' => '/core', 'name' => 'WhatsNew#dismiss', 'url' => '/whatsnew', 'verb' => 'POST'],
|
||||||
['root' => '/core', 'name' => 'AppPassword#getAppPassword', 'url' => '/getapppassword', 'verb' => 'GET'],
|
['root' => '/core', 'name' => 'AppPassword#getAppPassword', 'url' => '/getapppassword', '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#listCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'GET'],
|
||||||
|
['root' => '/collaboration', 'name' => 'CollaborationResources#renameCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'PUT'],
|
||||||
['root' => '/collaboration', 'name' => 'CollaborationResources#addResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'POST'],
|
['root' => '/collaboration', 'name' => 'CollaborationResources#addResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'POST'],
|
||||||
|
|
||||||
['root' => '/collaboration', 'name' => 'CollaborationResources#removeResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'DELETE'],
|
['root' => '/collaboration', 'name' => 'CollaborationResources#removeResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'DELETE'],
|
||||||
['root' => '/collaboration', 'name' => 'CollaborationResources#getCollectionsByResource', 'url' => '/resources/{resourceType}/{resourceId}', 'verb' => 'GET'],
|
['root' => '/collaboration', 'name' => 'CollaborationResources#getCollectionsByResource', 'url' => '/resources/{resourceType}/{resourceId}', 'verb' => 'GET'],
|
||||||
['root' => '/collaboration', 'name' => 'CollaborationResources#createCollectionOnResource', 'url' => '/resources/{baseResourceType}/{baseResourceId}', 'verb' => 'POST'],
|
['root' => '/collaboration', 'name' => 'CollaborationResources#createCollectionOnResource', 'url' => '/resources/{baseResourceType}/{baseResourceId}', 'verb' => 'POST'],
|
||||||
|
|
|
@ -67,6 +67,35 @@ class Manager implements IManager {
|
||||||
return new Collection($this, $this->connection, (int) $row['id'], (string) $row['name']);
|
return new Collection($this, $this->connection, (int) $row['id'], (string) $row['name']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $id
|
||||||
|
* @return ICollection
|
||||||
|
* @throws CollectionException when the collection could not be found
|
||||||
|
* @since 15.0.0
|
||||||
|
*/
|
||||||
|
public function searchCollections(IUser $user, string $filter, int $limit = 50, int $start = 0): array {
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
$query->select('*')
|
||||||
|
->from('collres_collections')
|
||||||
|
->where($query->expr()->iLike('name', $query->createNamedParameter($filter, IQueryBuilder::PARAM_STR)))
|
||||||
|
->setMaxResults($limit)
|
||||||
|
->setFirstResult($start);
|
||||||
|
$result = $query->execute();
|
||||||
|
$collections = [];
|
||||||
|
/** TODO: this is a huge performance bottleneck */
|
||||||
|
while ($row = $result->fetch()) {
|
||||||
|
$collection = new Collection($this, $this->connection, (int)$row['id'], (string)$row['name']);
|
||||||
|
if ($collection->canAccess($user)) {
|
||||||
|
$collections[] = $collection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$result->closeCursor();
|
||||||
|
|
||||||
|
// TODO: call with increased first result if no matches found
|
||||||
|
|
||||||
|
return $collections;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return ICollection
|
* @return ICollection
|
||||||
|
@ -199,4 +228,19 @@ class Manager implements IManager {
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @return ICollection
|
||||||
|
* @since 15.0.0
|
||||||
|
*/
|
||||||
|
public function renameCollection(int $id, string $name): ICollection {
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
$query->update('collres_collections')
|
||||||
|
->set('name', $query->createNamedParameter($name))
|
||||||
|
->where($query->expr()->eq('id', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT)));
|
||||||
|
$query->execute();
|
||||||
|
|
||||||
|
return new Collection($this, $this->connection, $id, $name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,14 @@ interface IManager extends IProvider {
|
||||||
*/
|
*/
|
||||||
public function newCollection(string $name): ICollection;
|
public function newCollection(string $name): ICollection;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @return ICollection
|
||||||
|
* @since 15.0.0
|
||||||
|
*/
|
||||||
|
public function renameCollection(int $id, string $name): ICollection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $id
|
* @param string $id
|
||||||
|
|
Loading…
Reference in a new issue