aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-02-05 10:04:41 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-02-05 10:04:41 +0100
commitc8e136b7dc2f51fa260d9eb67452c86f2317c79c (patch)
tree2a030b892b9c6212a007fa49e78af1786b26b151
parent96ccbca2e3c0e588eb2d2cadefda6b8556f2e97b (diff)
parent169874957a155bc01f5e573350a16f60ab586e0c (diff)
downloadnextcloud-server-c8e136b7dc2f51fa260d9eb67452c86f2317c79c.tar.gz
nextcloud-server-c8e136b7dc2f51fa260d9eb67452c86f2317c79c.zip
Merge pull request #22118 from owncloud/post_update_permissions_hook
[Share 2.0] Add missing post_update_permissions hook
-rw-r--r--lib/private/share20/manager.php14
-rw-r--r--lib/private/share20/share.php2
-rw-r--r--tests/lib/share20/managertest.php44
3 files changed, 53 insertions, 7 deletions
diff --git a/lib/private/share20/manager.php b/lib/private/share20/manager.php
index 6ea638b84e6..d65fb927f9b 100644
--- a/lib/private/share20/manager.php
+++ b/lib/private/share20/manager.php
@@ -77,6 +77,7 @@ class Manager implements IManager {
* @param IL10N $l
* @param IProviderFactory $factory
* @param IUserManager $userManager
+ * @param IRootFolder $rootFolder
*/
public function __construct(
ILogger $logger,
@@ -613,6 +614,19 @@ class Manager implements IManager {
]);
}
+ if ($share->getPermissions() !== $originalShare->getPermissions()) {
+ $userFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
+ \OC_Hook::emit('OCP\Share', 'post_update_permissions', array(
+ 'itemType' => $share->getNode() instanceof \OCP\Files\File ? 'file' : 'folder',
+ 'itemSource' => $share->getNode()->getId(),
+ 'shareType' => $share->getShareType(),
+ 'shareWith' => $share->getSharedWith(),
+ 'uidOwner' => $share->getSharedBy(),
+ 'permissions' => $share->getPermissions(),
+ 'path' => $userFolder->getRelativePath($share->getNode()->getPath()),
+ ));
+ }
+
return $share;
}
diff --git a/lib/private/share20/share.php b/lib/private/share20/share.php
index 448b05d20a3..cd30f24c42e 100644
--- a/lib/private/share20/share.php
+++ b/lib/private/share20/share.php
@@ -105,6 +105,8 @@ class Share implements \OCP\Share\IShare {
* @inheritdoc
*/
public function setNode(Node $node) {
+ $this->fileId = null;
+ $this->nodeType = null;
$this->node = $node;
return $this;
}
diff --git a/tests/lib/share20/managertest.php b/tests/lib/share20/managertest.php
index 270f5da33cd..131bc7fbfd2 100644
--- a/tests/lib/share20/managertest.php
+++ b/tests/lib/share20/managertest.php
@@ -1870,19 +1870,24 @@ class ManagerTest extends \Test\TestCase {
$originalShare = $this->manager->newShare();
$originalShare->setShareType(\OCP\Share::SHARE_TYPE_USER)
- ->setSharedWith('origUser');
+ ->setSharedWith('origUser')
+ ->setPermissions(1);
+
+ $node = $this->getMock('\OCP\Files\File');
+ $node->method('getId')->willReturn(100);
+ $node->method('getPath')->willReturn('/newUser/files/myPath');
$manager->expects($this->once())->method('canShare')->willReturn(true);
$manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare);
- $node = $this->getMock('\OCP\Files\File');
-
$share = $this->manager->newShare();
$share->setProviderId('foo')
->setId('42')
->setShareType(\OCP\Share::SHARE_TYPE_USER)
->setSharedWith('origUser')
->setShareOwner('newUser')
+ ->setSharedBy('sharer')
+ ->setPermissions(31)
->setNode($node);
$this->defaultProvider->expects($this->once())
@@ -1894,6 +1899,20 @@ class ManagerTest extends \Test\TestCase {
\OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListner, 'post');
$hookListner->expects($this->never())->method('post');
+ $this->rootFolder->method('getUserFolder')->with('newUser')->will($this->returnSelf());
+ $this->rootFolder->method('getRelativePath')->with('/newUser/files/myPath')->willReturn('/myPath');
+
+ $hookListner2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock();
+ \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListner2, 'post');
+ $hookListner2->expects($this->once())->method('post')->with([
+ 'itemType' => 'file',
+ 'itemSource' => 100,
+ 'shareType' => \OCP\Share::SHARE_TYPE_USER,
+ 'shareWith' => 'origUser',
+ 'uidOwner' => 'sharer',
+ 'permissions' => 31,
+ 'path' => '/myPath',
+ ]);
$manager->updateShare($share);
}
@@ -1911,7 +1930,8 @@ class ManagerTest extends \Test\TestCase {
$originalShare = $this->manager->newShare();
$originalShare->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
- ->setSharedWith('origUser');
+ ->setSharedWith('origUser')
+ ->setPermissions(31);
$manager->expects($this->once())->method('canShare')->willReturn(true);
$manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare);
@@ -1924,7 +1944,8 @@ class ManagerTest extends \Test\TestCase {
->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
->setSharedWith('origUser')
->setShareOwner('owner')
- ->setNode($node);
+ ->setNode($node)
+ ->setPermissions(31);
$this->defaultProvider->expects($this->once())
->method('update')
@@ -1935,6 +1956,9 @@ class ManagerTest extends \Test\TestCase {
\OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListner, 'post');
$hookListner->expects($this->never())->method('post');
+ $hookListner2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock();
+ \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListner2, 'post');
+ $hookListner2->expects($this->never())->method('post');
$manager->updateShare($share);
}
@@ -1953,7 +1977,8 @@ class ManagerTest extends \Test\TestCase {
->getMock();
$originalShare = $this->manager->newShare();
- $originalShare->setShareType(\OCP\Share::SHARE_TYPE_LINK);
+ $originalShare->setShareType(\OCP\Share::SHARE_TYPE_LINK)
+ ->setPermissions(15);
$tomorrow = new \DateTime();
$tomorrow->setTime(0,0,0);
@@ -1970,7 +1995,8 @@ class ManagerTest extends \Test\TestCase {
->setShareOwner('owner')
->setPassword('password')
->setExpirationDate($tomorrow)
- ->setNode($file);
+ ->setNode($file)
+ ->setPermissions(15);
$manager->expects($this->once())->method('canShare')->willReturn(true);
$manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare);
@@ -1990,6 +2016,10 @@ class ManagerTest extends \Test\TestCase {
'uidOwner' => 'owner',
]);
+ $hookListner2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock();
+ \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListner2, 'post');
+ $hookListner2->expects($this->never())->method('post');
+
$manager->updateShare($share);
}