diff options
author | Morris Jobke <hey@morrisjobke.de> | 2019-03-05 11:21:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-05 11:21:44 +0100 |
commit | 5decee6887e473d3b538d34ffbf978499a24d56b (patch) | |
tree | 1d77748c4da54a20b29e4f56e0c40210879cf92c /lib | |
parent | 1aad0100b53681aba2ee399dbdb1929748483ad8 (diff) | |
parent | adfadf821b88d1a704a05a9eeded7f4e9b81066a (diff) | |
download | nextcloud-server-5decee6887e473d3b538d34ffbf978499a24d56b.tar.gz nextcloud-server-5decee6887e473d3b538d34ffbf978499a24d56b.zip |
Merge pull request #14302 from nextcloud/enhancement/noid/fulltextsearch-final-class
nc16/fulltetsearch: moving final class to private, new interface in public
Diffstat (limited to 'lib')
15 files changed, 1497 insertions, 231 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 66ca39dfec0..363dcf0d70d 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -253,15 +253,15 @@ return array( 'OCP\\FullTextSearch\\IFullTextSearchManager' => $baseDir . '/lib/public/FullTextSearch/IFullTextSearchManager.php', 'OCP\\FullTextSearch\\IFullTextSearchPlatform' => $baseDir . '/lib/public/FullTextSearch/IFullTextSearchPlatform.php', 'OCP\\FullTextSearch\\IFullTextSearchProvider' => $baseDir . '/lib/public/FullTextSearch/IFullTextSearchProvider.php', - 'OCP\\FullTextSearch\\Model\\DocumentAccess' => $baseDir . '/lib/public/FullTextSearch/Model/DocumentAccess.php', + 'OCP\\FullTextSearch\\Model\\IDocumentAccess' => $baseDir . '/lib/public/FullTextSearch/Model/IDocumentAccess.php', 'OCP\\FullTextSearch\\Model\\IIndex' => $baseDir . '/lib/public/FullTextSearch/Model/IIndex.php', + 'OCP\\FullTextSearch\\Model\\IIndexDocument' => $baseDir . '/lib/public/FullTextSearch/Model/IIndexDocument.php', 'OCP\\FullTextSearch\\Model\\IIndexOptions' => $baseDir . '/lib/public/FullTextSearch/Model/IIndexOptions.php', 'OCP\\FullTextSearch\\Model\\IRunner' => $baseDir . '/lib/public/FullTextSearch/Model/IRunner.php', + 'OCP\\FullTextSearch\\Model\\ISearchOption' => $baseDir . '/lib/public/FullTextSearch/Model/ISearchOption.php', 'OCP\\FullTextSearch\\Model\\ISearchRequest' => $baseDir . '/lib/public/FullTextSearch/Model/ISearchRequest.php', 'OCP\\FullTextSearch\\Model\\ISearchResult' => $baseDir . '/lib/public/FullTextSearch/Model/ISearchResult.php', - 'OCP\\FullTextSearch\\Model\\IndexDocument' => $baseDir . '/lib/public/FullTextSearch/Model/IndexDocument.php', - 'OCP\\FullTextSearch\\Model\\SearchOption' => $baseDir . '/lib/public/FullTextSearch/Model/SearchOption.php', - 'OCP\\FullTextSearch\\Model\\SearchTemplate' => $baseDir . '/lib/public/FullTextSearch/Model/SearchTemplate.php', + 'OCP\\FullTextSearch\\Model\\ISearchTemplate' => $baseDir . '/lib/public/FullTextSearch/Model/ISearchTemplate.php', 'OCP\\FullTextSearch\\Service\\IIndexService' => $baseDir . '/lib/public/FullTextSearch/Service/IIndexService.php', 'OCP\\FullTextSearch\\Service\\IProviderService' => $baseDir . '/lib/public/FullTextSearch/Service/IProviderService.php', 'OCP\\FullTextSearch\\Service\\ISearchService' => $baseDir . '/lib/public/FullTextSearch/Service/ISearchService.php', @@ -874,6 +874,10 @@ return array( 'OC\\Files\\View' => $baseDir . '/lib/private/Files/View.php', 'OC\\ForbiddenException' => $baseDir . '/lib/private/ForbiddenException.php', 'OC\\FullTextSearch\\FullTextSearchManager' => $baseDir . '/lib/private/FullTextSearch/FullTextSearchManager.php', + 'OC\\FullTextSearch\\Model\\DocumentAccess' => $baseDir . '/lib/private/FullTextSearch/Model/DocumentAccess.php', + 'OC\\FullTextSearch\\Model\\IndexDocument' => $baseDir . '/lib/private/FullTextSearch/Model/IndexDocument.php', + 'OC\\FullTextSearch\\Model\\SearchOption' => $baseDir . '/lib/private/FullTextSearch/Model/SearchOption.php', + 'OC\\FullTextSearch\\Model\\SearchTemplate' => $baseDir . '/lib/private/FullTextSearch/Model/SearchTemplate.php', 'OC\\GlobalScale\\Config' => $baseDir . '/lib/private/GlobalScale/Config.php', 'OC\\Group\\Backend' => $baseDir . '/lib/private/Group/Backend.php', 'OC\\Group\\Database' => $baseDir . '/lib/private/Group/Database.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index d8335e058e6..264b74065a9 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -283,15 +283,15 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\FullTextSearch\\IFullTextSearchManager' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/IFullTextSearchManager.php', 'OCP\\FullTextSearch\\IFullTextSearchPlatform' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/IFullTextSearchPlatform.php', 'OCP\\FullTextSearch\\IFullTextSearchProvider' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/IFullTextSearchProvider.php', - 'OCP\\FullTextSearch\\Model\\DocumentAccess' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/DocumentAccess.php', + 'OCP\\FullTextSearch\\Model\\IDocumentAccess' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/IDocumentAccess.php', 'OCP\\FullTextSearch\\Model\\IIndex' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/IIndex.php', + 'OCP\\FullTextSearch\\Model\\IIndexDocument' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/IIndexDocument.php', 'OCP\\FullTextSearch\\Model\\IIndexOptions' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/IIndexOptions.php', 'OCP\\FullTextSearch\\Model\\IRunner' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/IRunner.php', + 'OCP\\FullTextSearch\\Model\\ISearchOption' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/ISearchOption.php', 'OCP\\FullTextSearch\\Model\\ISearchRequest' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/ISearchRequest.php', 'OCP\\FullTextSearch\\Model\\ISearchResult' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/ISearchResult.php', - 'OCP\\FullTextSearch\\Model\\IndexDocument' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/IndexDocument.php', - 'OCP\\FullTextSearch\\Model\\SearchOption' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/SearchOption.php', - 'OCP\\FullTextSearch\\Model\\SearchTemplate' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/SearchTemplate.php', + 'OCP\\FullTextSearch\\Model\\ISearchTemplate' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Model/ISearchTemplate.php', 'OCP\\FullTextSearch\\Service\\IIndexService' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Service/IIndexService.php', 'OCP\\FullTextSearch\\Service\\IProviderService' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Service/IProviderService.php', 'OCP\\FullTextSearch\\Service\\ISearchService' => __DIR__ . '/../../..' . '/lib/public/FullTextSearch/Service/ISearchService.php', @@ -904,6 +904,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Files\\View' => __DIR__ . '/../../..' . '/lib/private/Files/View.php', 'OC\\ForbiddenException' => __DIR__ . '/../../..' . '/lib/private/ForbiddenException.php', 'OC\\FullTextSearch\\FullTextSearchManager' => __DIR__ . '/../../..' . '/lib/private/FullTextSearch/FullTextSearchManager.php', + 'OC\\FullTextSearch\\Model\\DocumentAccess' => __DIR__ . '/../../..' . '/lib/private/FullTextSearch/Model/DocumentAccess.php', + 'OC\\FullTextSearch\\Model\\IndexDocument' => __DIR__ . '/../../..' . '/lib/private/FullTextSearch/Model/IndexDocument.php', + 'OC\\FullTextSearch\\Model\\SearchOption' => __DIR__ . '/../../..' . '/lib/private/FullTextSearch/Model/SearchOption.php', + 'OC\\FullTextSearch\\Model\\SearchTemplate' => __DIR__ . '/../../..' . '/lib/private/FullTextSearch/Model/SearchTemplate.php', 'OC\\GlobalScale\\Config' => __DIR__ . '/../../..' . '/lib/private/GlobalScale/Config.php', 'OC\\Group\\Backend' => __DIR__ . '/../../..' . '/lib/private/Group/Backend.php', 'OC\\Group\\Database' => __DIR__ . '/../../..' . '/lib/private/Group/Database.php', diff --git a/lib/public/FullTextSearch/Model/DocumentAccess.php b/lib/private/FullTextSearch/Model/DocumentAccess.php index ef199fb7385..088bf075ae6 100644 --- a/lib/public/FullTextSearch/Model/DocumentAccess.php +++ b/lib/private/FullTextSearch/Model/DocumentAccess.php @@ -28,14 +28,15 @@ declare(strict_types=1); */ -namespace OCP\FullTextSearch\Model; +namespace OC\FullTextSearch\Model; use JsonSerializable; +use OCP\FullTextSearch\Model\IDocumentAccess; /** - * Class DocumentAccess + * Class IDocumentAccess * * This object is used as a data transfer object when * @@ -48,13 +49,14 @@ use JsonSerializable; * During the search, it is internally use to define to which group, circles, ... * a user that perform the search belongs to. * - * @see IndexDocument::setAccess + * @see IIndexDocument::setAccess * - * @since 15.0.0 + * @since 16.0.0 * - * @package OCP\FullTextSearch\Model + * @package OC\FullTextSearch\Model */ -final class DocumentAccess implements JsonSerializable { +final class DocumentAccess implements IDocumentAccess, JsonSerializable { + /** @var string */ private $ownerId; @@ -78,9 +80,9 @@ final class DocumentAccess implements JsonSerializable { /** * Owner of the document can be set at the init of the object. * - * @since 15.0.0 + * @since 16.0.0 * - * DocumentAccess constructor. + * IDocumentAccess constructor. * * @param string $ownerId */ @@ -92,13 +94,13 @@ final class DocumentAccess implements JsonSerializable { /** * Set the Owner of the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param string $ownerId * - * @return DocumentAccess + * @return IDocumentAccess */ - public function setOwnerId(string $ownerId) { + public function setOwnerId(string $ownerId): IDocumentAccess { $this->ownerId = $ownerId; return $this; @@ -107,7 +109,7 @@ final class DocumentAccess implements JsonSerializable { /** * Get the Owner of the document. * - * @since 15.0.0 + * @since 16.0.0 * * @return string */ @@ -119,13 +121,13 @@ final class DocumentAccess implements JsonSerializable { /** * Set the viewer of the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param string $viewerId * - * @return DocumentAccess + * @return IDocumentAccess */ - public function setViewerId(string $viewerId): DocumentAccess { + public function setViewerId(string $viewerId): IDocumentAccess { $this->viewerId = $viewerId; return $this; @@ -134,7 +136,7 @@ final class DocumentAccess implements JsonSerializable { /** * Get the viewer of the document. * - * @since 15.0.0 + * @since 16.0.0 * * @return string */ @@ -146,13 +148,13 @@ final class DocumentAccess implements JsonSerializable { /** * Set the list of users that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $users * - * @return DocumentAccess + * @return IDocumentAccess */ - public function setUsers(array $users): DocumentAccess { + public function setUsers(array $users): IDocumentAccess { $this->users = $users; return $this; @@ -161,13 +163,13 @@ final class DocumentAccess implements JsonSerializable { /** * Add an entry to the list of users that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param string $user * - * @return DocumentAccess + * @return IDocumentAccess */ - public function addUser(string $user): DocumentAccess { + public function addUser(string $user): IDocumentAccess { $this->users[] = $user; return $this; @@ -177,13 +179,13 @@ final class DocumentAccess implements JsonSerializable { * Add multiple entries to the list of users that have read access to the * document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $users * - * @return DocumentAccess + * @return IDocumentAccess */ - public function addUsers($users): DocumentAccess { + public function addUsers($users): IDocumentAccess { $this->users = array_merge($this->users, $users); return $this; @@ -192,7 +194,7 @@ final class DocumentAccess implements JsonSerializable { /** * Get the complete list of users that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @return array */ @@ -204,13 +206,13 @@ final class DocumentAccess implements JsonSerializable { /** * Set the list of groups that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $groups * - * @return DocumentAccess + * @return IDocumentAccess */ - public function setGroups(array $groups): DocumentAccess { + public function setGroups(array $groups): IDocumentAccess { $this->groups = $groups; return $this; @@ -219,13 +221,13 @@ final class DocumentAccess implements JsonSerializable { /** * Add an entry to the list of groups that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param string $group * - * @return DocumentAccess + * @return IDocumentAccess */ - public function addGroup(string $group): DocumentAccess { + public function addGroup(string $group): IDocumentAccess { $this->groups[] = $group; return $this; @@ -235,11 +237,11 @@ final class DocumentAccess implements JsonSerializable { * Add multiple entries to the list of groups that have read access to the * document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $groups * - * @return DocumentAccess + * @return IDocumentAccess */ public function addGroups(array $groups) { $this->groups = array_merge($this->groups, $groups); @@ -250,7 +252,7 @@ final class DocumentAccess implements JsonSerializable { /** * Get the complete list of groups that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @return array */ @@ -262,13 +264,13 @@ final class DocumentAccess implements JsonSerializable { /** * Set the list of circles that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $circles * - * @return DocumentAccess + * @return IDocumentAccess */ - public function setCircles(array $circles): DocumentAccess { + public function setCircles(array $circles): IDocumentAccess { $this->circles = $circles; return $this; @@ -277,13 +279,13 @@ final class DocumentAccess implements JsonSerializable { /** * Add an entry to the list of circles that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param string $circle * - * @return DocumentAccess + * @return IDocumentAccess */ - public function addCircle(string $circle): DocumentAccess { + public function addCircle(string $circle): IDocumentAccess { $this->circles[] = $circle; return $this; @@ -293,13 +295,13 @@ final class DocumentAccess implements JsonSerializable { * Add multiple entries to the list of groups that have read access to the * document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $circles * - * @return DocumentAccess + * @return IDocumentAccess */ - public function addCircles(array $circles): DocumentAccess { + public function addCircles(array $circles): IDocumentAccess { $this->circles = array_merge($this->circles, $circles); return $this; @@ -308,7 +310,7 @@ final class DocumentAccess implements JsonSerializable { /** * Get the complete list of circles that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @return array */ @@ -320,13 +322,13 @@ final class DocumentAccess implements JsonSerializable { /** * Set the list of links that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $links * - * @return DocumentAccess + * @return IDocumentAccess */ - public function setLinks(array $links): DocumentAccess { + public function setLinks(array $links): IDocumentAccess { $this->links = $links; return $this; @@ -335,7 +337,7 @@ final class DocumentAccess implements JsonSerializable { /** * Get the list of links that have read access to the document. * - * @since 15.0.0 + * @since 16.0.0 * * @return array */ @@ -345,7 +347,7 @@ final class DocumentAccess implements JsonSerializable { /** - * @since 15.0.0 + * @since 16.0.0 * * @return array */ diff --git a/lib/public/FullTextSearch/Model/IndexDocument.php b/lib/private/FullTextSearch/Model/IndexDocument.php index d00a8461ee8..55cce902a28 100644 --- a/lib/public/FullTextSearch/Model/IndexDocument.php +++ b/lib/private/FullTextSearch/Model/IndexDocument.php @@ -28,10 +28,14 @@ declare(strict_types=1); */ -namespace OCP\FullTextSearch\Model; +namespace OC\FullTextSearch\Model; use JsonSerializable; +use OCP\FullTextSearch\Model\IDocumentAccess; +use OCP\FullTextSearch\Model\IIndex; +use OCP\FullTextSearch\Model\IIndexDocument; + /** * Class IndexDocument @@ -49,11 +53,7 @@ use JsonSerializable; * * @package OC\FullTextSearch\Model */ -class IndexDocument implements JsonSerializable { - - - const NOT_ENCODED = 0; - const ENCODED_BASE64 = 1; +class IndexDocument implements IIndexDocument, JsonSerializable { /** @var string */ @@ -115,7 +115,7 @@ class IndexDocument implements JsonSerializable { /** - * IndexDocument constructor. + * IIndexDocument constructor. * * On creation, we assure the uniqueness of the object using the providerId * and the Id of the original document. @@ -156,7 +156,7 @@ class IndexDocument implements JsonSerializable { /** - * Set the Index related to the IndexDocument. + * Set the Index related to the IIndexDocument. * * @see IIndex * @@ -164,9 +164,9 @@ class IndexDocument implements JsonSerializable { * * @param IIndex $index * - * @return IndexDocument + * @return IIndexDocument */ - final public function setIndex(IIndex $index): IndexDocument { + final public function setIndex(IIndex $index): IIndexDocument { $this->index = $index; return $this; @@ -191,7 +191,7 @@ class IndexDocument implements JsonSerializable { * @return bool */ final public function hasIndex(): bool { - return $this->index !== null; + return ($this->index !== null); } @@ -202,9 +202,9 @@ class IndexDocument implements JsonSerializable { * * @param int $modifiedTime * - * @return IndexDocument + * @return IIndexDocument */ - final public function setModifiedTime(int $modifiedTime): IndexDocument { + final public function setModifiedTime(int $modifiedTime): IIndexDocument { $this->modifiedTime = $modifiedTime; return $this; @@ -222,7 +222,7 @@ class IndexDocument implements JsonSerializable { } /** - * Check if the original document of the IndexDocument is older than $time. + * Check if the original document of the IIndexDocument is older than $time. * * @since 15.0.0 * @@ -236,30 +236,30 @@ class IndexDocument implements JsonSerializable { /** - * Set the read rights of the original document using a DocumentAccess. + * Set the read rights of the original document using a IDocumentAccess. * - * @see DocumentAccess + * @see IDocumentAccess * * @since 15.0.0 * - * @param DocumentAccess $access + * @param IDocumentAccess $access * * @return $this */ - final public function setAccess(DocumentAccess $access) { + final public function setAccess(IDocumentAccess $access): IIndexDocument { $this->access = $access; return $this; } /** - * Get the DocumentAccess related to the original document. + * Get the IDocumentAccess related to the original document. * * @since 15.0.0 * - * @return DocumentAccess + * @return IDocumentAccess */ - final public function getAccess(): DocumentAccess { + final public function getAccess(): IDocumentAccess { return $this->access; } @@ -271,9 +271,9 @@ class IndexDocument implements JsonSerializable { * * @param string $tag * - * @return IndexDocument + * @return IIndexDocument */ - final public function addTag(string $tag): IndexDocument { + final public function addTag(string $tag): IIndexDocument { $this->tags[] = $tag; return $this; @@ -286,9 +286,9 @@ class IndexDocument implements JsonSerializable { * * @param array $tags * - * @return IndexDocument + * @return IIndexDocument */ - final public function setTags(array $tags): IndexDocument { + final public function setTags(array $tags): IIndexDocument { $this->tags = $tags; return $this; @@ -313,9 +313,9 @@ class IndexDocument implements JsonSerializable { * * @param string $tag * - * @return IndexDocument + * @return IIndexDocument */ - final public function addMetaTag(string $tag): IndexDocument { + final public function addMetaTag(string $tag): IIndexDocument { $this->metaTags[] = $tag; return $this; @@ -328,9 +328,9 @@ class IndexDocument implements JsonSerializable { * * @param array $tags * - * @return IndexDocument + * @return IIndexDocument */ - final public function setMetaTags(array $tags): IndexDocument { + final public function setMetaTags(array $tags): IIndexDocument { $this->metaTags = $tags; return $this; @@ -356,9 +356,9 @@ class IndexDocument implements JsonSerializable { * @param string $sub * @param string $tag * - * @return IndexDocument + * @return IIndexDocument */ - final public function addSubTag(string $sub, string $tag): IndexDocument { + final public function addSubTag(string $sub, string $tag): IIndexDocument { $this->subTags[$sub] = $tag; return $this; @@ -371,9 +371,9 @@ class IndexDocument implements JsonSerializable { * * @param array $tags * - * @return IndexDocument + * @return IIndexDocument */ - final public function setSubTags(array $tags): IndexDocument { + final public function setSubTags(array $tags): IIndexDocument { $this->subTags = $tags; return $this; @@ -415,9 +415,9 @@ class IndexDocument implements JsonSerializable { * * @param string $source * - * @return IndexDocument + * @return IIndexDocument */ - final public function setSource(string $source): IndexDocument { + final public function setSource(string $source): IIndexDocument { $this->source = $source; return $this; @@ -442,9 +442,9 @@ class IndexDocument implements JsonSerializable { * * @param string $title * - * @return IndexDocument + * @return IIndexDocument */ - final public function setTitle(string $title): IndexDocument { + final public function setTitle(string $title): IIndexDocument { $this->title = $title; return $this; @@ -472,9 +472,9 @@ class IndexDocument implements JsonSerializable { * @param string $content * @param int $encoded * - * @return IndexDocument + * @return IIndexDocument */ - final public function setContent(string $content, int $encoded = 0): IndexDocument { + final public function setContent(string $content, int $encoded = 0): IIndexDocument { $this->content = $content; $this->contentEncoded = $encoded; @@ -520,9 +520,9 @@ class IndexDocument implements JsonSerializable { * * @since 15.0.0 * - * @return IndexDocument + * @return IIndexDocument */ - final public function initHash(): IndexDocument { + final public function initHash(): IIndexDocument { if ($this->getContent() === '' || is_null($this->getContent())) { return $this; } @@ -539,9 +539,9 @@ class IndexDocument implements JsonSerializable { * * @param string $hash * - * @return IndexDocument + * @return IIndexDocument */ - final public function setHash(string $hash): IndexDocument { + final public function setHash(string $hash): IIndexDocument { $this->hash = $hash; return $this; @@ -570,9 +570,9 @@ class IndexDocument implements JsonSerializable { * @param string $part * @param string $content * - * @return IndexDocument + * @return IIndexDocument */ - final public function addPart(string $part, string $content): IndexDocument { + final public function addPart(string $part, string $content): IIndexDocument { $this->parts[$part] = $content; return $this; @@ -585,16 +585,16 @@ class IndexDocument implements JsonSerializable { * * @param array $parts * - * @return IndexDocument + * @return IIndexDocument */ - final public function setParts(array $parts): IndexDocument { + final public function setParts(array $parts): IIndexDocument { $this->parts = $parts; return $this; } /** - * Get all parts of the IndexDocument. + * Get all parts of the IIndexDocument. * * @since 15.0.0 * @@ -612,9 +612,9 @@ class IndexDocument implements JsonSerializable { * * @param string $link * - * @return IndexDocument + * @return IIndexDocument */ - final public function setLink(string $link): IndexDocument { + final public function setLink(string $link): IIndexDocument { $this->link = $link; return $this; @@ -639,9 +639,9 @@ class IndexDocument implements JsonSerializable { * * @param array $more * - * @return IndexDocument + * @return IIndexDocument */ - final public function setMore(array $more): IndexDocument { + final public function setMore(array $more): IIndexDocument { $this->more = $more; return $this; @@ -663,33 +663,43 @@ class IndexDocument implements JsonSerializable { * Add some excerpt of the content of the original document, usually based * on the search request. * - * @since 15.0.0 + * @since 16.0.0 * + * @param string $source * @param string $excerpt * - * @return IndexDocument + * @return IIndexDocument */ - final public function addExcerpt(string $excerpt): IndexDocument { - $excerpt = $this->cleanExcerpt($excerpt); - - $this->excerpts[] = $excerpt; + final public function addExcerpt(string $source, string $excerpt): IIndexDocument { + $this->excerpts[] = + [ + 'source' => $source, + 'excerpt' => $this->cleanExcerpt($excerpt) + ]; return $this; } + /** * Set all excerpts of the content of the original document. * - * @since 15.0.0 + * @since 16.0.0 * * @param array $excerpts * - * @return IndexDocument + * @return IIndexDocument */ - final public function setExcerpts(array $excerpts): IndexDocument { - $excerpts = array_map([$this, 'cleanExcerpt'], $excerpts); + final public function setExcerpts(array $excerpts): IIndexDocument { + $new = []; + foreach ($excerpts as $entry) { + $new[] = [ + 'source' => $entry['source'], + 'excerpt' => $this->cleanExcerpt($entry['excerpt']) + ]; + } - $this->excerpts = $excerpts; + $this->excerpts = $new; return $this; } @@ -708,13 +718,12 @@ class IndexDocument implements JsonSerializable { /** * Clean excerpt. * - * @since 15.0.0 + * @since 16.0.0 * * @param string $excerpt - * * @return string */ - final public function cleanExcerpt(string $excerpt): string { + final private function cleanExcerpt(string $excerpt): string { $excerpt = str_replace("\\n", ' ', $excerpt); $excerpt = str_replace("\\r", ' ', $excerpt); $excerpt = str_replace("\\t", ' ', $excerpt); @@ -725,6 +734,7 @@ class IndexDocument implements JsonSerializable { return $excerpt; } + /** * Set the score to the result assigned to this document during a search * request. @@ -733,9 +743,9 @@ class IndexDocument implements JsonSerializable { * * @param string $score * - * @return IndexDocument + * @return IIndexDocument */ - final public function setScore(string $score): IndexDocument { + final public function setScore(string $score): IIndexDocument { $this->score = $score; return $this; @@ -757,7 +767,7 @@ class IndexDocument implements JsonSerializable { * Set some information about the original document that will be available * to the front-end when displaying search result. (as string) * Because this information will not be indexed, this method can also be - * used to manage some data while filling the IndexDocument before its + * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 @@ -765,9 +775,9 @@ class IndexDocument implements JsonSerializable { * @param string $info * @param string $value * - * @return IndexDocument + * @return IIndexDocument */ - final public function setInfo(string $info, string $value): IndexDocument { + final public function setInfo(string $info, string $value): IIndexDocument { $this->info[$info] = $value; return $this; @@ -795,7 +805,7 @@ class IndexDocument implements JsonSerializable { * Set some information about the original document that will be available * to the front-end when displaying search result. (as array) * Because this information will not be indexed, this method can also be - * used to manage some data while filling the IndexDocument before its + * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 @@ -803,9 +813,9 @@ class IndexDocument implements JsonSerializable { * @param string $info * @param array $value * - * @return IndexDocument + * @return IIndexDocument */ - final public function setInfoArray(string $info, array $value): IndexDocument { + final public function setInfoArray(string $info, array $value): IIndexDocument { $this->info[$info] = $value; return $this; @@ -833,7 +843,7 @@ class IndexDocument implements JsonSerializable { * Set some information about the original document that will be available * to the front-end when displaying search result. (as int) * Because this information will not be indexed, this method can also be - * used to manage some data while filling the IndexDocument before its + * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 @@ -841,9 +851,9 @@ class IndexDocument implements JsonSerializable { * @param string $info * @param int $value * - * @return IndexDocument + * @return IIndexDocument */ - final public function setInfoInt(string $info, int $value): IndexDocument { + final public function setInfoInt(string $info, int $value): IIndexDocument { $this->info[$info] = $value; return $this; @@ -871,7 +881,7 @@ class IndexDocument implements JsonSerializable { * Set some information about the original document that will be available * to the front-end when displaying search result. (as bool) * Because this information will not be indexed, this method can also be - * used to manage some data while filling the IndexDocument before its + * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 @@ -879,9 +889,9 @@ class IndexDocument implements JsonSerializable { * @param string $info * @param bool $value * - * @return IndexDocument + * @return IIndexDocument */ - final public function setInfoBool(string $info, bool $value): IndexDocument { + final public function setInfoBool(string $info, bool $value): IIndexDocument { $this->info[$info] = $value; return $this; @@ -931,7 +941,7 @@ class IndexDocument implements JsonSerializable { * @since 15.0.0 * * On some version of PHP, it is better to force destruct the object. - * And during the index, the number of generated IndexDocument can be + * And during the index, the number of generated IIndexDocument can be * _huge_. */ public function __destruct() { diff --git a/lib/public/FullTextSearch/Model/SearchOption.php b/lib/private/FullTextSearch/Model/SearchOption.php index ae6ad3241b6..6a67c9fe7df 100644 --- a/lib/public/FullTextSearch/Model/SearchOption.php +++ b/lib/private/FullTextSearch/Model/SearchOption.php @@ -28,26 +28,21 @@ declare(strict_types=1); */ -namespace OCP\FullTextSearch\Model; +namespace OC\FullTextSearch\Model; use JsonSerializable; +use OCP\FullTextSearch\Model\ISearchOption; /** * @since 15.0.0 * - * Class SearchOption + * Class ISearchOption * - * @package OCP\FullTextSearch\Model + * @package OC\FullTextSearch\Model */ -final class SearchOption implements JsonSerializable { - - - const CHECKBOX = 'checkbox'; - const INPUT = 'input'; - - const INPUT_SMALL = 'small'; +final class SearchOption implements ISearchOption, JsonSerializable { /** @var string */ @@ -116,7 +111,7 @@ final class SearchOption implements JsonSerializable { */ /** - * SearchOption constructor. + * ISearchOption constructor. * * Some value can be setduring the creation of the object. * @@ -148,9 +143,9 @@ final class SearchOption implements JsonSerializable { * * @param string $name * - * @return SearchOption + * @return ISearchOption */ - public function setName(string $name): SearchOption { + public function setName(string $name): ISearchOption { $this->name = $name; return $this; @@ -175,9 +170,9 @@ final class SearchOption implements JsonSerializable { * * @param string $title * - * @return SearchOption + * @return ISearchOption */ - public function setTitle(string $title): SearchOption { + public function setTitle(string $title): ISearchOption { $this->title = $title; return $this; @@ -197,15 +192,15 @@ final class SearchOption implements JsonSerializable { /** * Set the type of the option. - * $type can be SearchOption::CHECKBOX or SearchOption::INPUT + * $type can be ISearchOption::CHECKBOX or ISearchOption::INPUT * * @since 15.0.0 * * @param string $type * - * @return SearchOption + * @return ISearchOption */ - public function setType(string $type): SearchOption { + public function setType(string $type): ISearchOption { $this->type = $type; return $this; @@ -225,15 +220,15 @@ final class SearchOption implements JsonSerializable { /** * In case of Type is INPUT, set the size of the input field. - * Value can be SearchOption::INPUT_SMALL or not defined. + * Value can be ISearchOption::INPUT_SMALL or not defined. * * @since 15.0.0 * * @param string $size * - * @return SearchOption + * @return ISearchOption */ - public function setSize(string $size): SearchOption { + public function setSize(string $size): ISearchOption { $this->size = $size; return $this; @@ -259,9 +254,9 @@ final class SearchOption implements JsonSerializable { * * @param string $placeholder * - * @return SearchOption + * @return ISearchOption */ - public function setPlaceholder(string $placeholder): SearchOption { + public function setPlaceholder(string $placeholder): ISearchOption { $this->placeholder = $placeholder; return $this; diff --git a/lib/public/FullTextSearch/Model/SearchTemplate.php b/lib/private/FullTextSearch/Model/SearchTemplate.php index 7d9159190ea..22333e712ce 100644 --- a/lib/public/FullTextSearch/Model/SearchTemplate.php +++ b/lib/private/FullTextSearch/Model/SearchTemplate.php @@ -28,15 +28,17 @@ declare(strict_types=1); */ -namespace OCP\FullTextSearch\Model; +namespace OC\FullTextSearch\Model; use JsonSerializable; use OCP\FullTextSearch\IFullTextSearchProvider; +use OCP\FullTextSearch\Model\ISearchOption; +use OCP\FullTextSearch\Model\ISearchTemplate; /** - * Class SearchTemplate + * Class ISearchTemplate * * This is a data transfer object that should be created by Content Provider * when the getSearchTemplate() method is called. @@ -58,9 +60,9 @@ use OCP\FullTextSearch\IFullTextSearchProvider; * * @since 15.0.0 * - * @package OCP\FullTextSearch\Model + * @package OC\FullTextSearch\Model */ -final class SearchTemplate implements JsonSerializable { +final class SearchTemplate implements ISearchTemplate, JsonSerializable { /** @var string */ @@ -80,7 +82,7 @@ final class SearchTemplate implements JsonSerializable { /** - * SearchTemplate constructor. + * ISearchTemplate constructor. * * the class of the icon and the css file to be loaded can be set during the * creation of the object. @@ -104,9 +106,9 @@ final class SearchTemplate implements JsonSerializable { * * @param string $class * - * @return SearchTemplate + * @return ISearchTemplate */ - public function setIcon(string $class): SearchTemplate { + public function setIcon(string $class): ISearchTemplate { $this->icon = $class; return $this; @@ -131,9 +133,9 @@ final class SearchTemplate implements JsonSerializable { * * @param string $css * - * @return SearchTemplate + * @return ISearchTemplate */ - public function setCss(string $css): SearchTemplate { + public function setCss(string $css): ISearchTemplate { $this->css = $css; return $this; @@ -161,9 +163,9 @@ final class SearchTemplate implements JsonSerializable { * * @param string $template * - * @return SearchTemplate + * @return ISearchTemplate */ - public function setTemplate(string $template): SearchTemplate { + public function setTemplate(string $template): ISearchTemplate { $this->template = $template; return $this; @@ -185,15 +187,15 @@ final class SearchTemplate implements JsonSerializable { * Add an option in the Panel that is displayed when the user start a search * within the app that generate the content. * - * @see SearchOption + * @see ISearchOption * * @since 15.0.0 * - * @param SearchOption $option + * @param ISearchOption $option * - * @return SearchTemplate + * @return ISearchTemplate */ - public function addPanelOption(SearchOption $option): SearchTemplate { + public function addPanelOption(ISearchOption $option): ISearchTemplate { $this->panelOptions[] = $option; return $this; @@ -214,15 +216,15 @@ final class SearchTemplate implements JsonSerializable { /** * Add an option in the left panel of the FullTextSearch navigation page. * - * @see SearchOption + * @see ISearchOption * * @since 15.0.0 * - * @param SearchOption $option + * @param ISearchOption $option * - * @return SearchTemplate + * @return ISearchTemplate */ - public function addNavigationOption(SearchOption $option): SearchTemplate { + public function addNavigationOption(ISearchOption $option): ISearchTemplate { $this->navigationOptions[] = $option; return $this; diff --git a/lib/public/Files_FullTextSearch/Model/AFilesDocument.php b/lib/public/Files_FullTextSearch/Model/AFilesDocument.php index 3eed956df84..143788f33ad 100644 --- a/lib/public/Files_FullTextSearch/Model/AFilesDocument.php +++ b/lib/public/Files_FullTextSearch/Model/AFilesDocument.php @@ -31,13 +31,14 @@ declare(strict_types=1); namespace OCP\Files_FullTextSearch\Model; -use OCP\FullTextSearch\Model\IndexDocument; +use OC\FullTextSearch\Model\IndexDocument; +use OCP\FullTextSearch\Model\IIndexDocument; /** * Abstract Class AFilesDocument * - * This is mostly used by 3rd party apps that want to complete the IndexDocument + * This is mostly used by 3rd party apps that want to complete the IIndexDocument * with more information about a file before its index: * * \OC::$server->getEventDispatcher()->addListener( @@ -48,7 +49,6 @@ use OCP\FullTextSearch\Model\IndexDocument; * * // @var \OCP\Files_FullTextSearch\Model\AFilesDocument $document * $document = $e->getArgument('document'); - * * } * ); * @@ -107,6 +107,5 @@ abstract class AFilesDocument extends IndexDocument { */ abstract public function getPath(): string; - } diff --git a/lib/public/FullTextSearch/IFullTextSearchPlatform.php b/lib/public/FullTextSearch/IFullTextSearchPlatform.php index f3f9a35bae2..01016269f6b 100644 --- a/lib/public/FullTextSearch/IFullTextSearchPlatform.php +++ b/lib/public/FullTextSearch/IFullTextSearchPlatform.php @@ -31,9 +31,9 @@ declare(strict_types=1); namespace OCP\FullTextSearch; -use OCP\FullTextSearch\Model\DocumentAccess; +use OCP\FullTextSearch\Model\IDocumentAccess; use OCP\FullTextSearch\Model\IIndex; -use OCP\FullTextSearch\Model\IndexDocument; +use OCP\FullTextSearch\Model\IIndexDocument; use OCP\FullTextSearch\Model\IRunner; use OCP\FullTextSearch\Model\ISearchResult; @@ -190,11 +190,11 @@ interface IFullTextSearchPlatform { * * @since 15.0.0 * - * @param IndexDocument $document + * @param IIndexDocument $document * * @return IIndex */ - public function indexDocument(IndexDocument $document): IIndex; + public function indexDocument(IIndexDocument $document): IIndex; /** @@ -204,9 +204,9 @@ interface IFullTextSearchPlatform { * @since 15.0.0 * * @param ISearchResult $result - * @param DocumentAccess $access + * @param IDocumentAccess $access */ - public function searchRequest(ISearchResult $result, DocumentAccess $access); + public function searchRequest(ISearchResult $result, IDocumentAccess $access); /** @@ -218,9 +218,9 @@ interface IFullTextSearchPlatform { * @param string $providerId * @param string $documentId * - * @return IndexDocument + * @return IIndexDocument */ - public function getDocument(string $providerId, string $documentId): IndexDocument; + public function getDocument(string $providerId, string $documentId): IIndexDocument; } diff --git a/lib/public/FullTextSearch/IFullTextSearchProvider.php b/lib/public/FullTextSearch/IFullTextSearchProvider.php index a46ef051491..b72c9e55435 100644 --- a/lib/public/FullTextSearch/IFullTextSearchProvider.php +++ b/lib/public/FullTextSearch/IFullTextSearchProvider.php @@ -33,11 +33,11 @@ namespace OCP\FullTextSearch; use OCP\FullTextSearch\Model\IIndex; use OCP\FullTextSearch\Model\IIndexOptions; -use OCP\FullTextSearch\Model\IndexDocument; +use OCP\FullTextSearch\Model\IIndexDocument; use OCP\FullTextSearch\Model\IRunner; use OCP\FullTextSearch\Model\ISearchRequest; use OCP\FullTextSearch\Model\ISearchResult; -use OCP\FullTextSearch\Model\SearchTemplate; +use OCP\FullTextSearch\Model\ISearchTemplate; /** @@ -115,16 +115,16 @@ interface IFullTextSearchProvider { /** - * Must returns a SearchTemplate that contains displayable items and + * Must returns a ISearchTemplate that contains displayable items and * available options to users when searching. * - * @see SearchTemplate + * @see ISearchTemplate * * @since 15.0.0 * - * @return SearchTemplate + * @return ISearchTemplate */ - public function getSearchTemplate(): SearchTemplate; + public function getSearchTemplate(): ISearchTemplate; /** @@ -182,19 +182,19 @@ interface IFullTextSearchProvider { /** - * Returns all indexable document for a user as an array of IndexDocument. + * Returns all indexable document for a user as an array of IIndexDocument. * - * There is no need to fill each IndexDocument with content; at this point, + * There is no need to fill each IIndexDocument with content; at this point, * only fill the object with the minimum information to not waste memory while * still being able to identify the document it is referring to. * * FullTextSearch will call 2 other methods of this interface for each - * IndexDocument of the array, prior to their indexing: + * IIndexDocument of the array, prior to their indexing: * * - first, to compare the date of the last index, - * - then, to fill each IndexDocument with complete data + * - then, to fill each IIndexDocument with complete data * - * @see IndexDocument + * @see IIndexDocument * * @since 15.0.0 * -> 16.0.0: the parameter "$chunk" was added @@ -202,7 +202,7 @@ interface IFullTextSearchProvider { * @param string $userId * @param string $chunk * - * @return IndexDocument[] + * @return IIndexDocument[] */ public function generateIndexableDocuments(string $userId, string $chunk): array; @@ -210,40 +210,40 @@ interface IFullTextSearchProvider { /** * Called to verify that the document is not already indexed and that the * old index is not up-to-date, using the IIndex from - * IndexDocument->getIndex() + * IIndexDocument->getIndex() * - * Returning true will not queue the current IndexDocument to any further + * Returning true will not queue the current IIndexDocument to any further * operation and will continue on the next element from the list returned by * generateIndexableDocuments(). * * @since 15.0.0 * - * @param IndexDocument $document + * @param IIndexDocument $document * * @return bool */ - public function isDocumentUpToDate(IndexDocument $document): bool; + public function isDocumentUpToDate(IIndexDocument $document): bool; /** - * Must fill IndexDocument with all information relative to the document, + * Must fill IIndexDocument with all information relative to the document, * before its indexing by the Search Platform. * * Method is called for each element returned previously by * generateIndexableDocuments(). * - * @see IndexDocument + * @see IIndexDocument * * @since 15.0.0 * - * @param IndexDocument $document + * @param IIndexDocument $document */ - public function fillIndexDocument(IndexDocument $document); + public function fillIndexDocument(IIndexDocument $document); /** - * The Search Provider must create and return an IndexDocument - * based on the IIndex and its status. The IndexDocument must contains all + * The Search Provider must create and return an IIndexDocument + * based on the IIndex and its status. The IIndexDocument must contains all * information as it will be send for indexing. * * Method is called during a cron or a ./occ fulltextsearch:live after a @@ -253,9 +253,9 @@ interface IFullTextSearchProvider { * * @param IIndex $index * - * @return IndexDocument + * @return IIndexDocument */ - public function updateDocument(IIndex $index): IndexDocument; + public function updateDocument(IIndex $index): IIndexDocument; /** diff --git a/lib/public/FullTextSearch/Model/IDocumentAccess.php b/lib/public/FullTextSearch/Model/IDocumentAccess.php new file mode 100644 index 00000000000..848e2200f60 --- /dev/null +++ b/lib/public/FullTextSearch/Model/IDocumentAccess.php @@ -0,0 +1,264 @@ +<?php +declare(strict_types=1); + + +/** + * FullTextSearch - Full text search framework for Nextcloud + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Maxence Lange <maxence@artificial-owl.com> + * @copyright 2018 + * @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 OCP\FullTextSearch\Model; + + +/** + * Interface IDocumentAccess + * + * This object is used as a data transfer object when + * + * - indexing a document, + * - generating a search request. + * + * During the index, it is used to define which users, groups, circles, ... + * have access to the IIndexDocument + * + * During the search, it is internally use to define to which group, circles, ... + * a user that perform the search belongs to. + * + * @see IIndexDocument::setAccess + * + * @since 16.0.0 + * + * @package OCP\FullTextSearch\Model + */ +interface IDocumentAccess { + + + /** + * Owner of the document can be set at the init of the object. + * + * @since 16.0.0 + * + * IDocumentAccess constructor. + * + * @param string $ownerId + */ + public function __construct(string $ownerId = ''); + + + /** + * Set the Owner of the document. + * + * @since 16.0.0 + * + * @param string $ownerId + * + * @return IDocumentAccess + */ + public function setOwnerId(string $ownerId): IDocumentAccess; + + /** + * Get the Owner of the document. + * + * @since 16.0.0 + * + * @return string + */ + public function getOwnerId(): string; + + + /** + * Set the viewer of the document. + * + * @since 16.0.0 + * + * @param string $viewerId + * + * @return IDocumentAccess + */ + public function setViewerId(string $viewerId): IDocumentAccess; + + /** + * Get the viewer of the document. + * + * @since 16.0.0 + * + * @return string + */ + public function getViewerId(): string; + + + /** + * Set the list of users that have read access to the document. + * + * @since 16.0.0 + * + * @param array $users + * + * @return IDocumentAccess + */ + public function setUsers(array $users): IDocumentAccess; + + /** + * Add an entry to the list of users that have read access to the document. + * + * @since 16.0.0 + * + * @param string $user + * + * @return IDocumentAccess + */ + public function addUser(string $user): IDocumentAccess; + + /** + * Add multiple entries to the list of users that have read access to the + * document. + * + * @since 16.0.0 + * + * @param array $users + * + * @return IDocumentAccess + */ + public function addUsers($users): IDocumentAccess; + + /** + * Get the complete list of users that have read access to the document. + * + * @since 16.0.0 + * + * @return array + */ + public function getUsers(): array; + + + /** + * Set the list of groups that have read access to the document. + * + * @since 16.0.0 + * + * @param array $groups + * + * @return IDocumentAccess + */ + public function setGroups(array $groups): IDocumentAccess; + + /** + * Add an entry to the list of groups that have read access to the document. + * + * @since 16.0.0 + * + * @param string $group + * + * @return IDocumentAccess + */ + public function addGroup(string $group): IDocumentAccess; + + /** + * Add multiple entries to the list of groups that have read access to the + * document. + * + * @since 16.0.0 + * + * @param array $groups + * + * @return IDocumentAccess + */ + public function addGroups(array $groups); + + /** + * Get the complete list of groups that have read access to the document. + * + * @since 16.0.0 + * + * @return array + */ + public function getGroups(): array; + + + /** + * Set the list of circles that have read access to the document. + * + * @since 16.0.0 + * + * @param array $circles + * + * @return IDocumentAccess + */ + public function setCircles(array $circles): IDocumentAccess; + + /** + * Add an entry to the list of circles that have read access to the document. + * + * @since 16.0.0 + * + * @param string $circle + * + * @return IDocumentAccess + */ + public function addCircle(string $circle): IDocumentAccess; + + /** + * Add multiple entries to the list of groups that have read access to the + * document. + * + * @since 16.0.0 + * + * @param array $circles + * + * @return IDocumentAccess + */ + public function addCircles(array $circles): IDocumentAccess; + + /** + * Get the complete list of circles that have read access to the document. + * + * @since 16.0.0 + * + * @return array + */ + public function getCircles(): array; + + + /** + * Set the list of links that have read access to the document. + * + * @since 16.0.0 + * + * @param array $links + * + * @return IDocumentAccess + */ + public function setLinks(array $links): IDocumentAccess; + + /** + * Get the list of links that have read access to the document. + * + * @since 16.0.0 + * + * @return array + */ + public function getLinks(): array; + +} + diff --git a/lib/public/FullTextSearch/Model/IIndex.php b/lib/public/FullTextSearch/Model/IIndex.php index adfdf34aee6..c1c83db2d4b 100644 --- a/lib/public/FullTextSearch/Model/IIndex.php +++ b/lib/public/FullTextSearch/Model/IIndex.php @@ -38,10 +38,10 @@ namespace OCP\FullTextSearch\Model; * regarding the date of the last index and the date of the last modification * of the original document. * - * The uniqueness of an IndexDocument is made by the Id of the Content Provider + * The uniqueness of an IIndexDocument is made by the Id of the Content Provider * and the Id of the original document within the Content Provider. * - * We will call original document the source from which the IndexDocument is + * We will call original document the source from which the IIndexDocument is * generated. As an example, an original document can be a file, a mail, ... * * @since 15.0.0 @@ -56,11 +56,11 @@ interface IIndex { const INDEX_META = 4; const INDEX_CONTENT = 8; - const INDEX_FULL = 12; - const INDEX_REMOVE = 16; - - const INDEX_DONE = 32; - const INDEX_FAILED = 64; + const INDEX_PARTS = 16; + const INDEX_FULL = 28; + const INDEX_REMOVE = 32; + const INDEX_DONE = 64; + const INDEX_FAILED = 128; const ERROR_FAILED = 1; const ERROR_FAILED2 = 2; diff --git a/lib/public/FullTextSearch/Model/IIndexDocument.php b/lib/public/FullTextSearch/Model/IIndexDocument.php new file mode 100644 index 00000000000..d3184530a7f --- /dev/null +++ b/lib/public/FullTextSearch/Model/IIndexDocument.php @@ -0,0 +1,636 @@ +<?php +declare(strict_types=1); + + +/** + * FullTextSearch - Full text search framework for Nextcloud + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Maxence Lange <maxence@artificial-owl.com> + * @copyright 2018 + * @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 OCP\FullTextSearch\Model; + + +/** + * Class IIndexDocument + * + * This is one of the main class of the FullTextSearch, used as a data transfer + * object. An IIndexDocument is created to manage documents around FullTextSearch, + * during an index and during a search. + * The uniqueness of an IIndexDocument is made by the Id of the Content Provider + * and the Id of the original document within the Content Provider. + * + * We will call original document the source from which the IIndexDocument is + * generated. As an example, an original document can be a file, a mail, ... + * + * @since 15.0.0 + * + * @package OC\FullTextSearch\Model + */ +interface IIndexDocument { + + + const NOT_ENCODED = 0; + const ENCODED_BASE64 = 1; + + + + /** + * Returns the Id of the original document. + * + * @since 15.0.0 + * + * @return string + */ + public function getId(): string; + + + /** + * Returns the Id of the provider. + * + * @since 15.0.0 + * + * @return string + */ + public function getProviderId(): string; + + + /** + * Set the Index related to the IIndexDocument. + * + * @see IIndex + * + * @since 15.0.0 + * + * @param IIndex $index + * + * @return IIndexDocument + */ + public function setIndex(IIndex $index): IIndexDocument; + + /** + * Get the Index. + * + * @since 15.0.0 + * + * @return IIndex + */ + public function getIndex(): IIndex; + + /** + * return if Index is defined. + * + * @since 16.0.0 + * + * @return bool + */ + public function hasIndex(): bool; + + + /** + * Set the modified time of the original document. + * + * @since 15.0.0 + * + * @param int $modifiedTime + * + * @return IIndexDocument + */ + public function setModifiedTime(int $modifiedTime): IIndexDocument; + + /** + * Get the modified time of the original document. + * + * @since 15.0.0 + * + * @return int + */ + public function getModifiedTime(): int; + + /** + * Check if the original document of the IIndexDocument is older than $time. + * + * @since 15.0.0 + * + * @param int $time + * + * @return bool + */ + public function isOlderThan(int $time): bool; + + + /** + * Set the read rights of the original document using a IDocumentAccess. + * + * @see IDocumentAccess + * + * @since 15.0.0 + * + * @param IDocumentAccess $access + * + * @return $this + */ + public function setAccess(IDocumentAccess $access): IIndexDocument; + + /** + * Get the IDocumentAccess related to the original document. + * + * @since 15.0.0 + * + * @return IDocumentAccess + */ + public function getAccess(): IDocumentAccess; + + + /** + * Add a tag to the list. + * + * @since 15.0.0 + * + * @param string $tag + * + * @return IIndexDocument + */ + public function addTag(string $tag): IIndexDocument; + + /** + * Set the list of tags assigned to the original document. + * + * @since 15.0.0 + * + * @param array $tags + * + * @return IIndexDocument + */ + public function setTags(array $tags): IIndexDocument; + + /** + * Get the list of tags assigned to the original document. + * + * @since 15.0.0 + * + * @return array + */ + public function getTags(): array; + + + /** + * Add a meta tag to the list. + * + * @since 15.0.0 + * + * @param string $tag + * + * @return IIndexDocument + */ + public function addMetaTag(string $tag): IIndexDocument; + + /** + * Set the list of meta tags assigned to the original document. + * + * @since 15.0.0 + * + * @param array $tags + * + * @return IIndexDocument + */ + public function setMetaTags(array $tags): IIndexDocument; + + /** + * Get the list of meta tags assigned to the original document. + * + * @since 15.0.0 + * + * @return array + */ + public function getMetaTags(): array; + + + /** + * Add a sub tag to the list. + * + * @since 15.0.0 + * + * @param string $sub + * @param string $tag + * + * @return IIndexDocument + */ + public function addSubTag(string $sub, string $tag): IIndexDocument; + + /** + * Set the list of sub tags assigned to the original document. + * + * @since 15.0.0 + * + * @param array $tags + * + * @return IIndexDocument + */ + public function setSubTags(array $tags): IIndexDocument; + + /** + * Get the list of sub tags assigned to the original document. + * If $formatted is true, the result will be formatted in a one + * dimensional array. + * + * @since 15.0.0 + * + * @param bool $formatted + * + * @return array + */ + public function getSubTags(bool $formatted = false): array; + + + /** + * Set the source of the original document. + * + * @since 15.0.0 + * + * @param string $source + * + * @return IIndexDocument + */ + public function setSource(string $source): IIndexDocument; + + /** + * Get the source of the original document. + * + * @since 15.0.0 + * + * @return string + */ + public function getSource(): string; + + + /** + * Set the title of the original document. + * + * @since 15.0.0 + * + * @param string $title + * + * @return IIndexDocument + */ + public function setTitle(string $title): IIndexDocument; + + /** + * Get the title of the original document. + * + * @since 15.0.0 + * + * @return string + */ + public function getTitle(): string; + + + /** + * Set the content of the document. + * $encoded can be NOT_ENCODED or ENCODED_BASE64 if the content is raw or + * encoded in base64. + * + * @since 15.0.0 + * + * @param string $content + * @param int $encoded + * + * @return IIndexDocument + */ + public function setContent(string $content, int $encoded = 0): IIndexDocument; + + /** + * Get the content of the original document. + * + * @since 15.0.0 + * + * @return string + */ + public function getContent(): string; + + /** + * Returns the type of the encoding on the content. + * + * @since 15.0.0 + * + * @return int + */ + public function isContentEncoded(): int; + + /** + * Return the size of the content. + * + * @since 15.0.0 + * + * @return int + */ + public function getContentSize(): int; + + + /** + * Generate an hash, based on the content of the original document. + * + * @since 15.0.0 + * + * @return IIndexDocument + */ + public function initHash(): IIndexDocument; + + /** + * Set the hash of the original document. + * + * @since 15.0.0 + * + * @param string $hash + * + * @return IIndexDocument + */ + public function setHash(string $hash): IIndexDocument; + + /** + * Get the hash of the original document. + * + * @since 15.0.0 + * + * @return string + */ + public function getHash(): string; + + + /** + * Add a part, identified by a string, and its content. + * + * It is strongly advised to use alphanumerical chars with no space in the + * $part string. + * + * @since 15.0.0 + * + * @param string $part + * @param string $content + * + * @return IIndexDocument + */ + public function addPart(string $part, string $content): IIndexDocument; + + /** + * Set all parts and their content. + * + * @since 15.0.0 + * + * @param array $parts + * + * @return IIndexDocument + */ + public function setParts(array $parts): IIndexDocument; + + /** + * Get all parts of the IIndexDocument. + * + * @since 15.0.0 + * + * @return array + */ + public function getParts(): array; + + + /** + * Add a link, usable by the frontend. + * + * @since 15.0.0 + * + * @param string $link + * + * @return IIndexDocument + */ + public function setLink(string $link): IIndexDocument; + + /** + * Get the link. + * + * @since 15.0.0 + * + * @return string + */ + public function getLink(): string; + + + /** + * Set more information that couldn't be set using other method. + * + * @since 15.0.0 + * + * @param array $more + * + * @return IIndexDocument + */ + public function setMore(array $more): IIndexDocument; + + /** + * Get more information. + * + * @since 15.0.0 + * + * @return array + */ + public function getMore(): array; + + + /** + * Add some excerpt of the content of the original document, usually based + * on the search request. + * + * @since 16.0.0 + * + * @param string $source + * @param string $excerpt + * + * @return IIndexDocument + */ + public function addExcerpt(string $source, string $excerpt): IIndexDocument; + + /** + * Set all excerpts of the content of the original document. + * + * @since 16.0.0 + * + * @param array $excerpts + * + * @return IIndexDocument + */ + public function setExcerpts(array $excerpts): IIndexDocument; + + /** + * Get all excerpts of the content of the original document. + * + * @since 15.0.0 + * + * @return array + */ + public function getExcerpts(): array; + + + /** + * Set the score to the result assigned to this document during a search + * request. + * + * @since 15.0.0 + * + * @param string $score + * + * @return IIndexDocument + */ + public function setScore(string $score): IIndexDocument; + + /** + * Get the score. + * + * @since 15.0.0 + * + * @return string + */ + public function getScore(): string; + + + /** + * Set some information about the original document that will be available + * to the front-end when displaying search result. (as string) + * Because this information will not be indexed, this method can also be + * used to manage some data while filling the IIndexDocument before its + * indexing. + * + * @since 15.0.0 + * + * @param string $info + * @param string $value + * + * @return IIndexDocument + */ + public function setInfo(string $info, string $value): IIndexDocument; + + /** + * Get an information about a document. (string) + * + * @since 15.0.0 + * + * @param string $info + * @param string $default + * + * @return string + */ + public function getInfo(string $info, string $default = ''): string; + + /** + * Set some information about the original document that will be available + * to the front-end when displaying search result. (as array) + * Because this information will not be indexed, this method can also be + * used to manage some data while filling the IIndexDocument before its + * indexing. + * + * @since 15.0.0 + * + * @param string $info + * @param array $value + * + * @return IIndexDocument + */ + public function setInfoArray(string $info, array $value): IIndexDocument; + + /** + * Get an information about a document. (array) + * + * @since 15.0.0 + * + * @param string $info + * @param array $default + * + * @return array + */ + public function getInfoArray(string $info, array $default = []): array; + + /** + * Set some information about the original document that will be available + * to the front-end when displaying search result. (as int) + * Because this information will not be indexed, this method can also be + * used to manage some data while filling the IIndexDocument before its + * indexing. + * + * @since 15.0.0 + * + * @param string $info + * @param int $value + * + * @return IIndexDocument + */ + public function setInfoInt(string $info, int $value): IIndexDocument; + + /** + * Get an information about a document. (int) + * + * @since 15.0.0 + * + * @param string $info + * @param int $default + * + * @return int + */ + public function getInfoInt(string $info, int $default = 0): int; + + /** + * Set some information about the original document that will be available + * to the front-end when displaying search result. (as bool) + * Because this information will not be indexed, this method can also be + * used to manage some data while filling the IIndexDocument before its + * indexing. + * + * @since 15.0.0 + * + * @param string $info + * @param bool $value + * + * @return IIndexDocument + */ + public function setInfoBool(string $info, bool $value): IIndexDocument; + + /** + * Get an information about a document. (bool) + * + * @since 15.0.0 + * + * @param string $info + * @param bool $default + * + * @return bool + */ + public function getInfoBool(string $info, bool $default = false): bool; + + /** + * Get all info. + * + * @since 15.0.0 + * + * @return array + */ + public function getInfoAll(): array; + +} + diff --git a/lib/public/FullTextSearch/Model/ISearchOption.php b/lib/public/FullTextSearch/Model/ISearchOption.php new file mode 100644 index 00000000000..4ac995ad75f --- /dev/null +++ b/lib/public/FullTextSearch/Model/ISearchOption.php @@ -0,0 +1,171 @@ +<?php +declare(strict_types=1); + + +/** + * FullTextSearch - Full text search framework for Nextcloud + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Maxence Lange <maxence@artificial-owl.com> + * @copyright 2018 + * @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 OCP\FullTextSearch\Model; + + +/** + * @since 16.0.0 + * + * Interface ISearchOption + * + * @package OCP\FullTextSearch\Model + */ +interface ISearchOption { + + + /** + * @since 16.0.0 + */ + const CHECKBOX = 'checkbox'; + + /** + * @since 16.0.0 + */ + const INPUT = 'input'; + + /** + * @since 16.0.0 + */ + const INPUT_SMALL = 'small'; + + + /** + * Set the name/key of the option. + * The string should only contains alphanumerical chars and underscore. + * The key can be retrieve when using ISearchRequest::getOption + * + * @see ISearchRequest::getOption + * + * @since 16.0.0 + * + * @param string $name + * + * @return ISearchOption + */ + public function setName(string $name): ISearchOption; + + /** + * Get the name/key of the option. + * + * @since 16.0.0 + * + * @return string + */ + public function getName(): string; + + + /** + * Set the title/display name of the option. + * + * @since 16.0.0 + * + * @param string $title + * + * @return ISearchOption + */ + public function setTitle(string $title): ISearchOption; + + /** + * Get the title of the option. + * + * @since 16.0.0 + * + * @return string + */ + public function getTitle(): string; + + + /** + * Set the type of the option. + * $type can be ISearchOption::CHECKBOX or ISearchOption::INPUT + * + * @since 16.0.0 + * + * @param string $type + * + * @return ISearchOption + */ + public function setType(string $type): ISearchOption; + + /** + * Get the type of the option. + * + * @since 16.0.0 + * + * @return string + */ + public function getType(): string; + + + /** + * In case of Type is INPUT, set the size of the input field. + * Value can be ISearchOption::INPUT_SMALL or not defined. + * + * @since 16.0.0 + * + * @param string $size + * + * @return ISearchOption + */ + public function setSize(string $size): ISearchOption; + + /** + * Get the size of the INPUT. + * + * @since 16.0.0 + * + * @return string + */ + public function getSize(): string; + + + /** + * In case of Type is , set the placeholder to be displayed in the input + * field. + * + * @since 16.0.0 + * + * @param string $placeholder + * + * @return ISearchOption + */ + public function setPlaceholder(string $placeholder): ISearchOption; + + /** + * Get the placeholder. + * + * @since 16.0.0 + * + * @return string + */ + public function getPlaceholder(): string; + +} diff --git a/lib/public/FullTextSearch/Model/ISearchResult.php b/lib/public/FullTextSearch/Model/ISearchResult.php index 453ec61e7de..2ca61c2f37b 100644 --- a/lib/public/FullTextSearch/Model/ISearchResult.php +++ b/lib/public/FullTextSearch/Model/ISearchResult.php @@ -78,31 +78,31 @@ interface ISearchResult { /** - * Add an IndexDocument as one of the result of the search request. + * Add an IIndexDocument as one of the result of the search request. * * @since 15.0.0 * - * @param IndexDocument $document + * @param IIndexDocument $document * * @return ISearchResult */ - public function addDocument(IndexDocument $document): ISearchResult; + public function addDocument(IIndexDocument $document): ISearchResult; /** - * Returns all result of the search request, in an array of IndexDocument. + * Returns all result of the search request, in an array of IIndexDocument. * * @since 15.0.0 * - * @return IndexDocument[] + * @return IIndexDocument[] */ public function getDocuments(): array; /** - * Set an array of IndexDocument as the result of the search request. + * Set an array of IIndexDocument as the result of the search request. * * @since 15.0.0 * - * @param IndexDocument[] $documents + * @param IIndexDocument[] $documents * * @return ISearchResult */ diff --git a/lib/public/FullTextSearch/Model/ISearchTemplate.php b/lib/public/FullTextSearch/Model/ISearchTemplate.php new file mode 100644 index 00000000000..9cd6753f2a7 --- /dev/null +++ b/lib/public/FullTextSearch/Model/ISearchTemplate.php @@ -0,0 +1,179 @@ +<?php +declare(strict_types=1); + + +/** + * FullTextSearch - Full text search framework for Nextcloud + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Maxence Lange <maxence@artificial-owl.com> + * @copyright 2018 + * @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 OCP\FullTextSearch\Model; + + +use OCP\FullTextSearch\IFullTextSearchProvider; + + +/** + * Class ISearchTemplate + * + * This is a data transfer object that should be created by Content Provider + * when the getSearchTemplate() method is called. + * + * The object will contain templates to be displayed, and the list of the different + * options to be available to the user when he start a new search. + * + * The display of the Options is generated by the FullTextSearch app and Options + * can be displayed in 2 places: + * + * - the navigation page of the app that generate the indexed content. + * (files, bookmarks, deck, mails, ...) + * - the navigation page of the FullTextSearch app. + * + * Both pages will have different Options, and only the first one can integrate + * a specific template. + * + * @see IFullTextSearchProvider::getSearchTemplate + * + * @since 16.0.0 + * + * @package OCP\FullTextSearch\Model + */ +interface ISearchTemplate { + + + /** + * Set the class of the icon to be displayed in the left panel of the + * FullTextSearch navigation page, in front of the related Content Provider. + * + * @since 16.0.0 + * + * @param string $class + * + * @return ISearchTemplate + */ + public function setIcon(string $class): ISearchTemplate; + + /** + * Get the class of the icon. + * + * @since 16.0.0 + * + * @return string + */ + public function getIcon(): string; + + + /** + * Set the path of a CSS file that will be loaded when needed. + * + * @since 16.0.0 + * + * @param string $css + * + * @return ISearchTemplate + */ + public function setCss(string $css): ISearchTemplate; + + /** + * Get the path of the CSS file. + * + * @since 16.0.0 + * + * @return string + */ + public function getCss(): string; + + + /** + * Set the path of the file of a template that the HTML will be displayed + * below the Options. + * This should only be used if your Content Provider needs to set options in + * a way not generated by FullTextSearch + * + * @since 16.0.0 + * + * @param string $template + * + * @return ISearchTemplate + */ + public function setTemplate(string $template): ISearchTemplate; + + /** + * Get the path of the template file. + * + * @since 16.0.0 + * + * @return string + */ + public function getTemplate(): string; + + + /** + * Add an option in the Panel that is displayed when the user start a search + * within the app that generate the content. + * + * @see ISearchOption + * + * @since 16.0.0 + * + * @param ISearchOption $option + * + * @return ISearchTemplate + */ + public function addPanelOption(ISearchOption $option): ISearchTemplate; + + /** + * Get all options to be displayed in the Panel. + * + * @since 16.0.0 + * + * @return ISearchOption[] + */ + public function getPanelOptions(): array; + + + /** + * Add an option in the left panel of the FullTextSearch navigation page. + * + * @see ISearchOption + * + * @since 16.0.0 + * + * @param ISearchOption $option + * + * @return ISearchTemplate + */ + public function addNavigationOption(ISearchOption $option): ISearchTemplate; + + /** + * Get all options to be displayed in the FullTextSearch navigation page. + * + * @since 16.0.0 + * + * @return array + */ + public function getNavigationOptions(): array; + +} + |