|
|
|
@ -28,19 +28,11 @@ namespace OC\Files\Storage; |
|
|
|
|
*/ |
|
|
|
|
class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
private $mountPoint; // mount point relative to data/user/files |
|
|
|
|
private $type; // can be "file" or "folder" |
|
|
|
|
private $shareId; // share Id to identify the share in the database |
|
|
|
|
private $fileSource; // file cache ID of the shared item |
|
|
|
|
private $sharedFrom; // the user who shared the file |
|
|
|
|
private $share; // the shared resource |
|
|
|
|
private $files = array(); |
|
|
|
|
|
|
|
|
|
public function __construct($arguments) { |
|
|
|
|
$this->mountPoint = $arguments['shareTarget']; |
|
|
|
|
$this->type = $arguments['shareType']; |
|
|
|
|
$this->shareId = $arguments['shareId']; |
|
|
|
|
$this->fileSource = $arguments['fileSource']; |
|
|
|
|
$this->sharedFrom = $arguments['sharedFrom']; |
|
|
|
|
$this->share = $arguments['share']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -48,7 +40,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function getId() { |
|
|
|
|
return 'shared::' . $this->mountPoint; |
|
|
|
|
return 'shared::' . $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -56,7 +48,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function getSourceId() { |
|
|
|
|
return $this->fileSource; |
|
|
|
|
return $this->share['file_source']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -69,14 +61,14 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
if (!isset($this->files[$target])) { |
|
|
|
|
// Check for partial files |
|
|
|
|
if (pathinfo($target, PATHINFO_EXTENSION) === 'part') { |
|
|
|
|
$source = \OC_Share_Backend_File::getSource(substr($target, 0, -5), $this->getMountPoint(), $this->getShareType()); |
|
|
|
|
$source = \OC_Share_Backend_File::getSource(substr($target, 0, -5), $this->getMountPoint(), $this->getItemType()); |
|
|
|
|
if ($source) { |
|
|
|
|
$source['path'] .= '.part'; |
|
|
|
|
// All partial files have delete permission |
|
|
|
|
$source['permissions'] |= \OCP\PERMISSION_DELETE; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$source = \OC_Share_Backend_File::getSource($target, $this->getMountPoint(), $this->getShareType()); |
|
|
|
|
$source = \OC_Share_Backend_File::getSource($target, $this->getMountPoint(), $this->getItemType()); |
|
|
|
|
} |
|
|
|
|
$this->files[$target] = $source; |
|
|
|
|
} |
|
|
|
@ -191,7 +183,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
public function isCreatable($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
return ($this->getPermissions($path) & \OCP\PERMISSION_CREATE); |
|
|
|
|
} |
|
|
|
@ -202,21 +194,21 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
public function isUpdatable($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
return ($this->getPermissions($path) & \OCP\PERMISSION_UPDATE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function isDeletable($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
return ($this->getPermissions($path) & \OCP\PERMISSION_DELETE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function isSharable($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
return ($this->getPermissions($path) & \OCP\PERMISSION_SHARE); |
|
|
|
|
} |
|
|
|
@ -241,7 +233,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
$source = $this->getSourcePath($path); |
|
|
|
|
if ($source) { |
|
|
|
|
$info = array( |
|
|
|
|
'target' => $this->mountPoint . $path, |
|
|
|
|
'target' => $this->getMountPoint() . $path, |
|
|
|
|
'source' => $source, |
|
|
|
|
); |
|
|
|
|
\OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_get_contents', $info); |
|
|
|
@ -259,7 +251,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
$info = array( |
|
|
|
|
'target' => $this->mountPoint . '/' . $path, |
|
|
|
|
'target' => $this->getMountPoint() . '/' . $path, |
|
|
|
|
'source' => $source, |
|
|
|
|
); |
|
|
|
|
\OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_put_contents', $info); |
|
|
|
@ -332,7 +324,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
WHERE `id` = ?' |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$result = $query->execute(array($relTargetPath, $this->shareId)); |
|
|
|
|
$result = $query->execute(array($relTargetPath, $this->getShareId())); |
|
|
|
|
|
|
|
|
|
if ($result) { |
|
|
|
|
// update the mount manager with the new paths |
|
|
|
@ -358,7 +350,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
// if we renamed the mount point we need to adjust the file_target in the |
|
|
|
|
// database |
|
|
|
|
if (strlen($sourceMountPoint) >= strlen($path1)) { |
|
|
|
|
if (\OC\Files\Filesystem::normalizePath($sourceMountPoint) === \OC\Files\Filesystem::normalizePath($path1)) { |
|
|
|
|
return $this->renameMountPoint($path1, $path2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -417,7 +409,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$info = array( |
|
|
|
|
'target' => $this->mountPoint . $path, |
|
|
|
|
'target' => $this->getMountPoint() . $path, |
|
|
|
|
'source' => $source, |
|
|
|
|
'mode' => $mode, |
|
|
|
|
); |
|
|
|
@ -438,7 +430,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
public function free_space($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
$source = $this->getSourcePath($path); |
|
|
|
|
if ($source) { |
|
|
|
@ -471,11 +463,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
foreach ($shares as $share) { |
|
|
|
|
\OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', |
|
|
|
|
array( |
|
|
|
|
'shareTarget' => $share['file_target'], |
|
|
|
|
'shareType' => $share['item_type'], |
|
|
|
|
'shareId' => $share['id'], |
|
|
|
|
'fileSource' => $share['file_source'], |
|
|
|
|
'sharedFrom' => $share['uid_owner'], |
|
|
|
|
'share' => $share, |
|
|
|
|
), |
|
|
|
|
$options['user_dir'] . '/' . $share['file_target']); |
|
|
|
|
} |
|
|
|
@ -487,7 +475,23 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function getMountPoint() { |
|
|
|
|
return ltrim($this->mountPoint, '/'); |
|
|
|
|
return $this->share['file_target']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @brief get share type |
|
|
|
|
* @return integer can be single user share (0) group share (1), unique group share name (2) |
|
|
|
|
*/ |
|
|
|
|
private function getShareType() { |
|
|
|
|
return $this->share['share_type']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @brief get share ID |
|
|
|
|
* @return integer unique share ID |
|
|
|
|
*/ |
|
|
|
|
private function getShareId() { |
|
|
|
|
return $this->share['id']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -495,15 +499,15 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function getSharedFrom() { |
|
|
|
|
return $this->sharedFrom; |
|
|
|
|
return $this->share['uid_owner']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @brief return share type, can be "file" or "folder" |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function getShareType() { |
|
|
|
|
return $this->type; |
|
|
|
|
public function getItemType() { |
|
|
|
|
return $this->share['item_type']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function hasUpdated($path, $time) { |
|
|
|
@ -528,7 +532,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
public function getOwner($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
$source = $this->getFile($path); |
|
|
|
|
if ($source) { |
|
|
|
@ -539,7 +543,7 @@ class Shared extends \OC\Files\Storage\Common { |
|
|
|
|
|
|
|
|
|
public function getETag($path) { |
|
|
|
|
if ($path == '') { |
|
|
|
|
$path = $this->mountPoint; |
|
|
|
|
$path = $this->getMountPoint(); |
|
|
|
|
} |
|
|
|
|
if ($source = $this->getSourcePath($path)) { |
|
|
|
|
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source); |
|
|
|
|