diff --git a/apps/dav/lib/Files/FileSearchBackend.php b/apps/dav/lib/Files/FileSearchBackend.php index eb548bbd55c..5d4c2f21e8b 100644 --- a/apps/dav/lib/Files/FileSearchBackend.php +++ b/apps/dav/lib/Files/FileSearchBackend.php @@ -86,6 +86,7 @@ class FileSearchBackend implements ISearchBackend { new SearchPropertyDefinition('{DAV:}displayname', true, true, true), new SearchPropertyDefinition('{DAV:}getcontenttype', true, true, true), new SearchPropertyDefinition('{DAV:}getlastmodified', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME), + new SearchPropertyDefinition('{http://nextcloud.org/ns}upload_time', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME), new SearchPropertyDefinition(FilesPlugin::SIZE_PROPERTYNAME, true, true, true, SearchPropertyDefinition::DATATYPE_NONNEGATIVE_INTEGER), new SearchPropertyDefinition(TagsPlugin::FAVORITE_PROPERTYNAME, true, true, true, SearchPropertyDefinition::DATATYPE_BOOLEAN), new SearchPropertyDefinition(FilesPlugin::INTERNAL_FILEID_PROPERTYNAME, true, true, false, SearchPropertyDefinition::DATATYPE_NONNEGATIVE_INTEGER), @@ -298,6 +299,8 @@ class FileSearchBackend implements ISearchBackend { return $node->getName(); case '{DAV:}getlastmodified': return $node->getLastModified(); + case '{http://nextcloud.org/ns}upload_time': + return $node->getNode()->getUploadTime(); case FilesPlugin::SIZE_PROPERTYNAME: return $node->getSize(); case FilesPlugin::INTERNAL_FILEID_PROPERTYNAME: @@ -458,6 +461,8 @@ class FileSearchBackend implements ISearchBackend { return 'mimetype'; case '{DAV:}getlastmodified': return 'mtime'; + case '{http://nextcloud.org/ns}upload_time': + return 'upload_time'; case FilesPlugin::SIZE_PROPERTYNAME: return 'size'; case TagsPlugin::FAVORITE_PROPERTYNAME: diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index 8cedfae5975..51f97baf489 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -151,10 +151,12 @@ class QuerySearchHelper { $builder = $this->getQueryBuilder(); - $query = $builder->selectFileCache('file', false); - $requestedFields = $this->searchBuilder->extractRequestedFields($searchQuery->getSearchOperation()); + $joinExtendedCache = in_array('upload_time', $requestedFields); + + $query = $builder->selectFileCache('file', $joinExtendedCache); + if (in_array('systemtag', $requestedFields)) { $this->equipQueryForSystemTags($query, $this->requireUser($searchQuery)); } diff --git a/lib/private/Files/Cache/SearchBuilder.php b/lib/private/Files/Cache/SearchBuilder.php index e1d3c42a8a2..77fb5a2daa5 100644 --- a/lib/private/Files/Cache/SearchBuilder.php +++ b/lib/private/Files/Cache/SearchBuilder.php @@ -64,6 +64,7 @@ class SearchBuilder { 'share_with' => 'string', 'share_type' => 'integer', 'owner' => 'string', + 'upload_time' => 'integer', ]; /** @var array */ @@ -257,6 +258,7 @@ class SearchBuilder { 'share_with' => ['eq'], 'share_type' => ['eq'], 'owner' => ['eq'], + 'upload_time' => ['eq', 'gt', 'lt', 'gte', 'lte'], ]; if (!isset(self::$fieldTypes[$operator->getField()])) {