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