From e8bf576184fdafbe74f3394dc253a56c07be6507 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= <jfd@butonic.de>
Date: Fri, 26 Jul 2013 14:11:59 +0200
Subject: [PATCH] add initial search in shared files

---
 apps/files_sharing/lib/cache.php | 26 +++++++++++++++++++++++++-
 lib/public/share.php             |  2 +-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 33cd142889..28e3cbdb2e 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -226,7 +226,31 @@ class Shared_Cache extends Cache {
 	 * @return array of file data
 	 */
 	public function search($pattern) {
-		// TODO
+
+		// normalize pattern
+		$pattern = $this->normalize($pattern);
+
+		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+		foreach ($ids as $file) {
+			$folderBackend = \OCP\Share::getBackend('folder');
+			$children = $folderBackend->getChildren($file);
+			foreach ($children as $child) {
+				$ids[] = (int)$child['source'];
+			}
+			
+		}
+		$placeholders = join(',', array_fill(0, count($ids), '?'));
+		
+		$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`
+				FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `fileid` IN (' . $placeholders . ')';
+		$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $ids));
+		$files = array();
+		while ($row = $result->fetchRow()) {
+			$row['mimetype'] = $this->getMimetype($row['mimetype']);
+			$row['mimepart'] = $this->getMimetype($row['mimepart']);
+			$files[] = $row;
+		}
+		return $files;
 	}
 
 	/**
diff --git a/lib/public/share.php b/lib/public/share.php
index 9ab956d84b..10922965ea 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -748,7 +748,7 @@ class Share {
 	* @param string Item type
 	* @return Sharing backend object
 	*/
-	private static function getBackend($itemType) {
+	public static function getBackend($itemType) {
 		if (isset(self::$backends[$itemType])) {
 			return self::$backends[$itemType];
 		} else if (isset(self::$backendTypes[$itemType]['class'])) {
-- 
GitLab