summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/lib/share
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2014-04-02 12:04:51 +0200
committerBjoern Schiessle <schiessle@owncloud.com>2014-04-23 12:54:24 +0200
commita27db9e4cadb9b5ee26f7b17d3a5997b07639489 (patch)
treef1f312d96caf3bac49b22ef76fa3decd71a4f8d7 /apps/files_sharing/lib/share
parentcfc52ccc3d3e7e233912adc58bdc95618d941a30 (diff)
downloadnextcloud-server-a27db9e4cadb9b5ee26f7b17d3a5997b07639489.tar.gz
nextcloud-server-a27db9e4cadb9b5ee26f7b17d3a5997b07639489.zip
first steps to remove the shared folder:
- mount shares to the root folder instead of "Shared/" - navigate in shared folder and sub-folders - show previews - show correct file permissions - download/edit files
Diffstat (limited to 'apps/files_sharing/lib/share')
-rw-r--r--apps/files_sharing/lib/share/file.php73
1 files changed, 41 insertions, 32 deletions
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
index 5e00050fe1e..b5196ab6fac 100644
--- a/apps/files_sharing/lib/share/file.php
+++ b/apps/files_sharing/lib/share/file.php
@@ -2,8 +2,9 @@
/**
* ownCloud
*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+* @author Bjoern Schiessle, Michael Gapczynski
+* @copyright 2012 Michael Gapczynski <mtgap@owncloud.com>
+ * 2014 Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -146,42 +147,50 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
return array();
}
- public static function getSource($target) {
- if ($target == '') {
- return false;
+ /**
+ * @brief resolve reshares to return the correct source item
+ * @param array $source
+ * @return array source item
+ */
+ protected static function resolveReshares($source) {
+ if (isset($source['parent'])) {
+ $parent = $source['parent'];
+ while (isset($parent)) {
+ $query = \OC_DB::prepare('SELECT `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `id` = ?', 1);
+ $item = $query->execute(array($parent))->fetchRow();
+ if (isset($item['parent'])) {
+ $parent = $item['parent'];
+ } else {
+ $fileOwner = $item['uid_owner'];
+ break;
+ }
+ }
+ } else {
+ $fileOwner = $source['uid_owner'];
}
- $target = '/'.$target;
- $target = rtrim($target, '/');
- $pos = strpos($target, '/', 1);
- // Get shared folder name
- if ($pos !== false) {
- $folder = substr($target, 0, $pos);
- $source = \OCP\Share::getItemSharedWith('folder', $folder, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
- if ($source) {
- $source['path'] = $source['path'].substr($target, strlen($folder));
+ if (isset($fileOwner)) {
+ $source['fileOwner'] = $fileOwner;
+ } else {
+ \OCP\Util::writeLog('files_sharing', "No owner found for reshare", \OCP\Util::ERROR);
+ }
+
+ return $source;
+ }
+
+ public static function getSource($target, $mountPoint, $itemType) {
+
+ if ($itemType === 'folder') {
+ $source = \OCP\Share::getItemSharedWith('folder', $mountPoint, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ if ($source && $target !== '') {
+ $source['path'] = $source['path'].'/'.$target;
}
} else {
- $source = \OCP\Share::getItemSharedWith('file', $target, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ $source = \OCP\Share::getItemSharedWith('file', $mountPoint, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
}
if ($source) {
- if (isset($source['parent'])) {
- $parent = $source['parent'];
- while (isset($parent)) {
- $query = \OC_DB::prepare('SELECT `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `id` = ?', 1);
- $item = $query->execute(array($parent))->fetchRow();
- if (isset($item['parent'])) {
- $parent = $item['parent'];
- } else {
- $fileOwner = $item['uid_owner'];
- break;
- }
- }
- } else {
- $fileOwner = $source['uid_owner'];
- }
- $source['fileOwner'] = $fileOwner;
- return $source;
+ return self::resolveReshares($source);
}
+
\OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, \OCP\Util::DEBUG);
return false;
}