Also add type (file/folder) to IShare object
We need this for the hooks :(
This commit is contained in:
parent
2c0cb5a00e
commit
0f22a8db1d
|
@ -745,6 +745,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
}
|
||||
|
||||
$share->setNodeId((int)$data['file_source']);
|
||||
$share->setNodeType($data['item_type']);
|
||||
|
||||
if ($data['expiration'] !== null) {
|
||||
$expiration = \DateTime::createFromFormat('Y-m-d H:i:s', $data['expiration']);
|
||||
|
|
|
@ -663,13 +663,13 @@ class Manager implements IManager {
|
|||
|
||||
$hookParams = [
|
||||
'id' => $share->getId(),
|
||||
'itemType' => $share->getNode() instanceof \OCP\Files\File ? 'file' : 'folder',
|
||||
'itemSource' => $share->getNode()->getId(),
|
||||
'itemType' => $share->getNodeType(),
|
||||
'itemSource' => $share->getNodeId(),
|
||||
'shareType' => $shareType,
|
||||
'shareWith' => $sharedWith,
|
||||
'itemparent' => $share->getParent(),
|
||||
'uidOwner' => $share->getSharedBy(),
|
||||
'fileSource' => $share->getNode()->getId(),
|
||||
'fileSource' => $share->getNodeId(),
|
||||
'fileTarget' => $share->getTarget()
|
||||
];
|
||||
return $hookParams;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*/
|
||||
namespace OC\Share20;
|
||||
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\Node;
|
||||
use OCP\Files\NotFoundException;
|
||||
|
@ -36,6 +37,8 @@ class Share implements \OCP\Share\IShare {
|
|||
private $node;
|
||||
/** @var int */
|
||||
private $fileId;
|
||||
/** @var string */
|
||||
private $nodeType;
|
||||
/** @var int */
|
||||
private $shareType;
|
||||
/** @var string */
|
||||
|
@ -138,6 +141,40 @@ class Share implements \OCP\Share\IShare {
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function getNodeId() {
|
||||
if ($this->fileId === null) {
|
||||
$this->fileId = $this->getNode()->getId();
|
||||
}
|
||||
|
||||
return $this->fileId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function setNodeType($type) {
|
||||
if ($type !== 'file' && $type !== 'folder') {
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
|
||||
$this->nodeType = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function getNodeType() {
|
||||
if ($this->nodeType === null) {
|
||||
$node = $this->getNode();
|
||||
$this->nodeType = $node instanceof File ? 'file' : 'folder';
|
||||
}
|
||||
|
||||
return $this->nodeType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
|
|
|
@ -77,6 +77,32 @@ interface IShare {
|
|||
*/
|
||||
public function setNodeId($fileId);
|
||||
|
||||
/**
|
||||
* Get the fileid of the node of this share
|
||||
* @return int
|
||||
* @since 9.0.0
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function getNodeId();
|
||||
|
||||
/**
|
||||
* Set the type of node (file/folder)
|
||||
*
|
||||
* @param string $type
|
||||
* @return \OCP\Share\IShare The modified object
|
||||
* @since 9.0.0
|
||||
*/
|
||||
public function setNodeType($type);
|
||||
|
||||
/**
|
||||
* Get the type of node (file/folder)
|
||||
*
|
||||
* @return string
|
||||
* @since 9.0.0
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function getNodeType();
|
||||
|
||||
/**
|
||||
* Set the shareType
|
||||
*
|
||||
|
|
|
@ -242,6 +242,86 @@ class ManagerTest extends \Test\TestCase {
|
|||
$manager->deleteShare($share);
|
||||
}
|
||||
|
||||
public function testDeleteLazyShare() {
|
||||
$manager = $this->createManagerMock()
|
||||
->setMethods(['getShareById', 'deleteChildren'])
|
||||
->getMock();
|
||||
|
||||
$share = $this->manager->newShare();
|
||||
$share->setId(42)
|
||||
->setProviderId('prov')
|
||||
->setShareType(\OCP\Share::SHARE_TYPE_USER)
|
||||
->setSharedWith('sharedWith')
|
||||
->setSharedBy('sharedBy')
|
||||
->setShareOwner('shareOwner')
|
||||
->setTarget('myTarget')
|
||||
->setNodeId(1)
|
||||
->setNodeType('file');
|
||||
|
||||
$this->rootFolder->expects($this->never())->method($this->anything());
|
||||
|
||||
$manager->expects($this->once())->method('getShareById')->with('prov:42')->willReturn($share);
|
||||
$manager->expects($this->once())->method('deleteChildren')->with($share);
|
||||
|
||||
$this->defaultProvider
|
||||
->expects($this->once())
|
||||
->method('delete')
|
||||
->with($share);
|
||||
|
||||
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre', 'post'])->getMock();
|
||||
\OCP\Util::connectHook('OCP\Share', 'pre_unshare', $hookListner, 'pre');
|
||||
\OCP\Util::connectHook('OCP\Share', 'post_unshare', $hookListner, 'post');
|
||||
|
||||
$hookListnerExpectsPre = [
|
||||
'id' => 42,
|
||||
'itemType' => 'file',
|
||||
'itemSource' => 1,
|
||||
'shareType' => \OCP\Share::SHARE_TYPE_USER,
|
||||
'shareWith' => 'sharedWith',
|
||||
'itemparent' => null,
|
||||
'uidOwner' => 'sharedBy',
|
||||
'fileSource' => 1,
|
||||
'fileTarget' => 'myTarget',
|
||||
];
|
||||
|
||||
$hookListnerExpectsPost = [
|
||||
'id' => 42,
|
||||
'itemType' => 'file',
|
||||
'itemSource' => 1,
|
||||
'shareType' => \OCP\Share::SHARE_TYPE_USER,
|
||||
'shareWith' => 'sharedWith',
|
||||
'itemparent' => null,
|
||||
'uidOwner' => 'sharedBy',
|
||||
'fileSource' => 1,
|
||||
'fileTarget' => 'myTarget',
|
||||
'deletedShares' => [
|
||||
[
|
||||
'id' => 42,
|
||||
'itemType' => 'file',
|
||||
'itemSource' => 1,
|
||||
'shareType' => \OCP\Share::SHARE_TYPE_USER,
|
||||
'shareWith' => 'sharedWith',
|
||||
'itemparent' => null,
|
||||
'uidOwner' => 'sharedBy',
|
||||
'fileSource' => 1,
|
||||
'fileTarget' => 'myTarget',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
$hookListner
|
||||
->expects($this->exactly(1))
|
||||
->method('pre')
|
||||
->with($hookListnerExpectsPre);
|
||||
$hookListner
|
||||
->expects($this->exactly(1))
|
||||
->method('post')
|
||||
->with($hookListnerExpectsPost);
|
||||
|
||||
$manager->deleteShare($share);
|
||||
}
|
||||
|
||||
public function testDeleteNested() {
|
||||
$manager = $this->createManagerMock()
|
||||
->setMethods(['getShareById'])
|
||||
|
|
Loading…
Reference in New Issue