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
*
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 {
return [
'id' => $collection->getId(),
'type' => $resource->getType(),
'id' => $resource->getId(),
'name' => $resource->getName(),
- 'iconClass' => $resource->getIconClass()
+ 'iconClass' => $resource->getIconClass(),
+ 'link' => $resource->getLink(),
];
}
}
['root' => '/core', 'name' => 'WhatsNew#dismiss', 'url' => '/whatsnew', 'verb' => 'POST'],
['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#renameCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'PUT'],
['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#getCollectionsByResource', 'url' => '/resources/{resourceType}/{resourceId}', 'verb' => 'GET'],
['root' => '/collaboration', 'name' => 'CollaborationResources#createCollectionOnResource', 'url' => '/resources/{baseResourceType}/{baseResourceId}', 'verb' => 'POST'],
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
* @return ICollection
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);
+ }
}
*/
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 $id