Signed-off-by: Joas Schilling <coding@schilljs.com>tags/v18.0.0beta1
@@ -44,6 +44,7 @@ use OCP\IUserManager; | |||
use OCP\Notification\IManager; | |||
use OCP\OCS\IDiscoveryService; | |||
use OCP\Share; | |||
use OCP\Share\IShare; | |||
class Manager { | |||
const STORAGE = '\OCA\Files_Sharing\External\Storage'; | |||
@@ -151,7 +152,7 @@ class Manager { | |||
public function addShare($remote, $token, $password, $name, $owner, $shareType, $accepted=false, $user = null, $remoteId = -1, $parent = -1) { | |||
$user = $user ? $user : $this->uid; | |||
$accepted = $accepted ? 1 : 0; | |||
$accepted = $accepted ? IShare::STATUS_ACCEPTED : IShare::STATUS_PENDING; | |||
$name = Filesystem::normalizePath('/' . $name); | |||
if (!$accepted) { |
@@ -35,6 +35,7 @@ use OCP\IConfig; | |||
use OCP\ILogger; | |||
use OCP\IUser; | |||
use OCP\Share\IManager; | |||
use OCP\Share\IShare; | |||
class MountProvider implements IMountProvider { | |||
/** | |||
@@ -94,6 +95,11 @@ class MountProvider implements IMountProvider { | |||
try { | |||
/** @var \OCP\Share\IShare $parentShare */ | |||
$parentShare = $share[0]; | |||
if ($parentShare->getStatus() !== IShare::STATUS_ACCEPTED) { | |||
continue; | |||
} | |||
$owner = $parentShare->getShareOwner(); | |||
if (!isset($ownerViews[$owner])) { | |||
$ownerViews[$owner] = new View('/' . $parentShare->getShareOwner() . '/files'); | |||
@@ -188,8 +194,11 @@ class MountProvider implements IMountProvider { | |||
// use most permissive permissions | |||
$permissions = 0; | |||
$status = IShare::STATUS_PENDING; | |||
foreach ($shares as $share) { | |||
$permissions |= $share->getPermissions(); | |||
$status = max($status, $share->getStatus()); | |||
if ($share->getTarget() !== $superShare->getTarget()) { | |||
// adjust target, for database consistency | |||
$share->setTarget($superShare->getTarget()); | |||
@@ -216,7 +225,8 @@ class MountProvider implements IMountProvider { | |||
} | |||
} | |||
$superShare->setPermissions($permissions); | |||
$superShare->setPermissions($permissions) | |||
->setStatus($status); | |||
$result[] = [$superShare, $shares]; | |||
} |
@@ -142,6 +142,7 @@ class DefaultShareProvider implements IShareProvider { | |||
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER) { | |||
//Set the UID of the user we share with | |||
$qb->setValue('share_with', $qb->createNamedParameter($share->getSharedWith())); | |||
$qb->setValue('accepted', $qb->createNamedParameter(IShare::STATUS_PENDING)); | |||
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) { | |||
//Set the GID of the group we share with | |||
$qb->setValue('share_with', $qb->createNamedParameter($share->getSharedWith())); | |||
@@ -932,6 +933,7 @@ class DefaultShareProvider implements IShareProvider { | |||
->setTarget($data['file_target']) | |||
->setNote($data['note']) | |||
->setMailSend((bool)$data['mail_send']) | |||
->setStatus((int)$data['accepted']) | |||
->setLabel($data['label']); | |||
$shareTime = new \DateTime(); | |||
@@ -1020,6 +1022,7 @@ class DefaultShareProvider implements IShareProvider { | |||
while($data = $stmt->fetch()) { | |||
$shareMap[$data['parent']]->setPermissions((int)$data['permissions']); | |||
$shareMap[$data['parent']]->setStatus((int)$data['accepted']); | |||
$shareMap[$data['parent']]->setTarget($data['file_target']); | |||
$shareMap[$data['parent']]->setParent($data['parent']); | |||
} |
@@ -58,6 +58,8 @@ class Share implements \OCP\Share\IShare { | |||
private $shareOwner; | |||
/** @var int */ | |||
private $permissions; | |||
/** @var int */ | |||
private $status; | |||
/** @var string */ | |||
private $note = ''; | |||
/** @var \DateTime */ | |||
@@ -318,6 +320,21 @@ class Share implements \OCP\Share\IShare { | |||
return $this->permissions; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function setStatus(int $status): IShare { | |||
$this->status = $status; | |||
return $this; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function getStatus(): int { | |||
return $this->status; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ |
@@ -96,6 +96,21 @@ interface IShare { | |||
*/ | |||
// const TYPE_USERROOM = 11; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public const STATUS_PENDING = 0; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public const STATUS_ACCEPTED = 1; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public const STATUS_REJECTED = 2; | |||
/** | |||
* Set the internal id of the share | |||
* It is only allowed to set the internal id of a share once. | |||
@@ -279,6 +294,25 @@ interface IShare { | |||
*/ | |||
public function getPermissions(); | |||
/** | |||
* Set the accepted status | |||
* See self::STATUS_* | |||
* | |||
* @param int $status | |||
* @return IShare The modified object | |||
* @since 18.0.0 | |||
*/ | |||
public function setStatus(int $status): IShare; | |||
/** | |||
* Get the accepted status | |||
* See self::STATUS_* | |||
* | |||
* @return int | |||
* @since 18.0.0 | |||
*/ | |||
public function getStatus(): int; | |||
/** | |||
* Attach a note to a share | |||
* |