summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMichael Gapczynski <mtgap@owncloud.com>2012-08-16 12:20:14 -0400
committerMichael Gapczynski <mtgap@owncloud.com>2012-08-16 12:20:14 -0400
commitdf8a2e5361714838637457373f9957c76fbf449f (patch)
tree4067c30456a8d5221e19c59f030e7b223bd2bc2a /apps
parent9cb3113f421fd57529aa5e9d10a5e9ca9beece70 (diff)
downloadnextcloud-server-df8a2e5361714838637457373f9957c76fbf449f.tar.gz
nextcloud-server-df8a2e5361714838637457373f9957c76fbf449f.zip
File sharing cleanup, works perfectly I think :)
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/lib/share/file.php91
-rw-r--r--apps/files_sharing/lib/share/folder.php73
-rw-r--r--apps/files_sharing/sharedstorage.php26
3 files changed, 80 insertions, 110 deletions
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
index 66be5f2b155..ae6315600f8 100644
--- a/apps/files_sharing/lib/share/file.php
+++ b/apps/files_sharing/lib/share/file.php
@@ -27,10 +27,10 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
const FORMAT_OPENDIR = 3;
public function isValidSource($item, $uid) {
-// if (OC_Filesystem::file_exists($item)) {
+ if (OC_Filesystem::file_exists($item)) {
return true;
-// }
-// return false;
+ }
+ return false;
}
public function getFilePath($item, $uid) {
@@ -43,61 +43,48 @@ class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
}
public function formatItems($items, $format, $parameters = null) {
- if ($format == self::FORMAT_OPENDIR) {
+ if ($format == self::FORMAT_SHARED_STORAGE) {
+ // Only 1 item should come through for this format call
+ return array('path' => $items[key($items)]['file_source'], 'permissions' => $items[key($items)]['permissions']);
+ } else if ($format == self::FORMAT_FILE_APP) {
$files = array();
- foreach ($items as $file) {
- $files[] = basename($file['file_target']);
+ foreach ($items as $item) {
+ $file = array();
+ $file['path'] = $item['file_target'];
+ $file['name'] = basename($item['file_target']);
+ $file['ctime'] = $item['ctime'];
+ $file['mtime'] = $item['mtime'];
+ $file['mimetype'] = $item['mimetype'];
+ $file['size'] = $item['size'];
+ $file['encrypted'] = $item['encrypted'];
+ $file['versioned'] = $item['versioned'];
+ $file['directory'] = $parameters['folder'];
+ $file['type'] = ($item['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
+ $file['permissions'] = $item['permissions'];
+ if ($file['type'] == 'file') {
+ // Remove Create permission if type is file
+ $file['permissions'] &= ~OCP\Share::PERMISSION_CREATE;
+ }
+ $files[] = $file;
}
return $files;
- } else if ($format == self::FORMAT_SHARED_STORAGE) {
- $id = $items[key($items)]['file_source'];
- $query = OCP\DB::prepare('SELECT path FROM *PREFIX*fscache WHERE id = ?');
- $result = $query->execute(array($id))->fetchAll();
- if (isset($result[0]['path'])) {
- return array('path' => $result[0]['path'], 'permissions' => $items[key($items)]['permissions']);
- }
- return false;
- } else {
- $shares = array();
- $ids = array();
+ } else if ($format == self::FORMAT_FILE_APP_ROOT) {
+ $mtime = 0;
+ $size = 0;
foreach ($items as $item) {
- $shares[$item['file_source']] = $item;
- $ids[] = $item['file_source'];
- }
- $ids = "'".implode("','", $ids)."'";
- if ($format == self::FORMAT_FILE_APP) {
- $query = OCP\DB::prepare('SELECT id, path, name, ctime, mtime, mimetype, size, encrypted, versioned, writable FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
- $result = $query->execute();
- $files = array();
- while ($file = $result->fetchRow()) {
- // Set target path
- $file['path'] = $shares[$file['id']]['file_target'];
- $file['name'] = basename($file['path']);
- $file['directory'] = $parameters['folder'];
- $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $permissions = $shares[$file['id']]['permissions'];
- if ($file['type'] == 'file') {
- // Remove Create permission if type is file
- $permissions &= ~OCP\Share::PERMISSION_CREATE;
- }
- $file['permissions'] = $permissions;
- $files[] = $file;
- }
- return $files;
- } else if ($format == self::FORMAT_FILE_APP_ROOT) {
- $query = OCP\DB::prepare('SELECT id, path, name, ctime, mtime, mimetype, size, encrypted, versioned, writable FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
- $result = $query->execute();
- $mtime = 0;
- $size = 0;
- while ($file = $result->fetchRow()) {
- if ($file['mtime'] > $mtime) {
- $mtime = $file['mtime'];
- }
- $size += $file['size'];
+ if ($item['mtime'] > $mtime) {
+ $mtime = $item['mtime'];
}
- return array(0 => array('name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size, 'writable' => false, 'type' => 'dir', 'directory' => '', 'permissions' => OCP\Share::PERMISSION_READ));
+ $size += $item['size'];
}
- }
+ return array(0 => array('name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size, 'writable' => false, 'type' => 'dir', 'directory' => '', 'permissions' => OCP\Share::PERMISSION_READ));
+ } else if ($format == self::FORMAT_OPENDIR) {
+ $files = array();
+ foreach ($items as $item) {
+ $files[] = basename($item['file_target']);
+ }
+ return $files;
+ }
return array();
}
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
index 2f101d33c8a..b6db96614fd 100644
--- a/apps/files_sharing/lib/share/folder.php
+++ b/apps/files_sharing/lib/share/folder.php
@@ -21,8 +21,32 @@
class OC_Share_Backend_Folder extends OC_Share_Backend_File {
- public function inCollection($collections, $item) {
- // TODO
+ public function formatItems($items, $format, $parameters = null) {
+ if ($format == self::FORMAT_SHARED_STORAGE) {
+ // Only 1 item should come through for this format call
+ return array('path' => $items[key($items)]['file_source'], 'permissions' => $items[key($items)]['permissions']);
+ } else if ($format == self::FORMAT_FILE_APP && isset($parameters['folder'])) {
+ // Only 1 item should come through for this format call
+ $folder = $items[key($items)];
+ if (isset($parameters['mimetype_filter'])) {
+ $mimetype_filter = $parameters['mimetype_filter'];
+ } else {
+ $mimetype_filter = '';
+ }
+ $path = $folder['file_source'].substr($parameters['folder'], 7 + strlen($folder['file_target']));
+ $files = OC_FileCache::getFolderContent($path, '', $mimetype_filter);
+ foreach ($files as &$file) {
+ $file['directory'] = $parameters['folder'];
+ $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
+ $file['permissions'] = $folder['permissions'];
+ if ($file['type'] == 'file') {
+ // Remove Create permission if type is file
+ $file['permissions'] &= ~OCP\Share::PERMISSION_CREATE;
+ }
+ }
+ return $files;
+ }
+ return array();
}
public function getChildren($itemSource) {
@@ -34,47 +58,4 @@ class OC_Share_Backend_Folder extends OC_Share_Backend_File {
return $sources;
}
- public function formatItems($items, $format, $parameters = null) {
- if ($format == self::FORMAT_FILE_APP && isset($parameters['folder'])) {
- $folder = $items[key($items)];
- $query = OCP\DB::prepare('SELECT path FROM *PREFIX*fscache WHERE id = ?');
- $result = $query->execute(array($folder['file_source']))->fetchRow();
- if (isset($result['path'])) {
- if (isset($parameters['mimetype_filter'])) {
- $mimetype_filter = $parameters['mimetype_filter'];
- } else {
- $mimetype_filter = '';
- }
- $pos = strpos($result['path'], $folder['item']);
- $path = substr($result['path'], $pos).substr($parameters['folder'], strlen($folder['file_target']));
- $root = substr($result['path'], 0, $pos);
- $files = OC_FileCache::getFolderContent($path, $root, $mimetype_filter);
- foreach ($files as &$file) {
- $file['directory'] = $parameters['folder'];
- $file['type'] = ($file['mimetype'] == 'httpd/unix-directory') ? 'dir' : 'file';
- $permissions = $folder['permissions'];
- if ($file['type'] == 'file') {
- // Remove Create permission if type is file
- $permissions &= ~OCP\Share::PERMISSION_CREATE;
- }
- $file['permissions'] = $permissions;
- }
- return $files;
- }
- }/* else if ($format == self::FORMAT_OPENDIR_ROOT) {
- $query = OCP\DB::prepare('SELECT name FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
- $result = $query->execute();
- $files = array();
- while ($file = $result->fetchRow()) {
- // Set target path
- $files[] = basename($shares[$file['id']]['item_target']);
- }
- return $files;
- }*/
- return array();
- }
-
-}
-
-
-?> \ No newline at end of file
+} \ No newline at end of file
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
index fc2e6e32c7c..582c9c66172 100644
--- a/apps/files_sharing/sharedstorage.php
+++ b/apps/files_sharing/sharedstorage.php
@@ -50,7 +50,7 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
if (isset($this->files[$folder])) {
$file = $this->files[$folder];
} else {
- $file = OCP\Share::getItemSharedWith('file', $folder, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
+ $file = OCP\Share::getItemSharedWith('folder', $folder, OC_Share_Backend_File::FORMAT_SHARED_STORAGE);
}
if ($file) {
$this->files[$target]['path'] = $file['path'].substr($target, strlen($folder));
@@ -285,19 +285,21 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
}
public function file_put_contents($path, $data) {
- if ($this->is_writable($path)) {
- $source = $this->getSourcePath($path);
- if ($source) {
- $info = array(
- 'target' => $this->sharedFolder.$path,
- 'source' => $source,
- );
- OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info);
- $storage = OC_Filesystem::getStorage($source);
- $result = $storage->file_put_contents($this->getInternalPath($source), $data);
- return $result;
+ if ($source = $this->getSourcePath($path)) {
+ // Check if permission is granted
+ if (($this->file_exists($path) && !$this->isUpdatable($path)) || ($this->is_dir($path) && !$this->isCreatable($path))) {
+ return false;
}
+ $info = array(
+ 'target' => $this->sharedFolder.$path,
+ 'source' => $source,
+ );
+ OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info);
+ $storage = OC_Filesystem::getStorage($source);
+ $result = $storage->file_put_contents($this->getInternalPath($source), $data);
+ return $result;
}
+ return false;
}
public function unlink($path) {