From 1d200c554fbd86336422fd46b11166869e66474d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= <schiessle@owncloud.com>
Date: Wed, 24 Oct 2012 13:09:43 +0200
Subject: [PATCH] Shared files are not stored in the file cache. Therefore we
 need to use the share table from the db to find the item source if the public
 link re-shares a already shared file.

---
 apps/files_sharing/public.php | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 1a0f6b2cdee..a8813085d09 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -21,6 +21,23 @@ if (isset($_GET['token'])) {
 }
 // Enf of backward compatibility
 
+function getID($path) {
+	// use the share table from the db to find the item source if the file was reshared because shared files are not stored in the file cache.
+	if (substr(OC_Filesystem::getMountPoint($path), -7, 6) == "Shared") {
+		$path_parts = explode('/', $path, 5);
+		$user = $path_parts[1];
+		$intPath = '/'.$path_parts[4];
+		$query = \OC_DB::prepare('SELECT item_source FROM *PREFIX*share WHERE uid_owner = ? AND file_target = ? ');
+		$result = $query->execute(array($user, $intPath));
+		$row = $result->fetchRow();
+		$fileSource = $row['item_source'];
+	} else {
+		$fileSource = OC_Filecache::getId($path, '');
+	}
+
+	return $fileSource;
+}
+
 if (isset($_GET['file']) || isset($_GET['dir'])) {
 	if (isset($_GET['dir'])) {
 		$type = 'folder';
@@ -40,7 +57,7 @@ if (isset($_GET['file']) || isset($_GET['dir'])) {
 	$uidOwner = substr($path, 1, strpos($path, '/', 1) - 1);
 	if (OCP\User::userExists($uidOwner)) {
 		OC_Util::setupFS($uidOwner);
-		$fileSource = OC_Filecache::getId($path, '');
+		$fileSource = getId($path);
 		if ($fileSource != -1 && ($linkItem = OCP\Share::getItemSharedWithByLink($type, $fileSource, $uidOwner))) {
 			// TODO Fix in the getItems
 			if (!isset($linkItem['item_type']) || $linkItem['item_type'] != $type) {
-- 
GitLab