$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;
*/
namespace OC\Share20;
+use OCP\Files\File;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
private $node;
/** @var int */
private $fileId;
+ /** @var string */
+ private $nodeType;
/** @var int */
private $shareType;
/** @var string */
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
*/
*/
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
*
$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'])