Emit hook postUnshareFromSelf when the recipient of a share unshares it
- This kind of hook signal used to be emitted in the old Share library but it was missing from Share 2.0 Signed-off-by: Pauli Järvinen <pauli.jarvinen@gmail.com>
This commit is contained in:
parent
8dce97a3e1
commit
7c4a15f215
|
@ -40,6 +40,7 @@ class LegacyHooks {
|
||||||
|
|
||||||
$this->eventDispatcher->addListener('OCP\Share::preUnshare', [$this, 'preUnshare']);
|
$this->eventDispatcher->addListener('OCP\Share::preUnshare', [$this, 'preUnshare']);
|
||||||
$this->eventDispatcher->addListener('OCP\Share::postUnshare', [$this, 'postUnshare']);
|
$this->eventDispatcher->addListener('OCP\Share::postUnshare', [$this, 'postUnshare']);
|
||||||
|
$this->eventDispatcher->addListener('OCP\Share::postUnshareFromSelf', [$this, 'postUnshareFromSelf']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,6 +75,20 @@ class LegacyHooks {
|
||||||
\OC_Hook::emit('OCP\Share', 'post_unshare', $formatted);
|
\OC_Hook::emit('OCP\Share', 'post_unshare', $formatted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param GenericEvent $e
|
||||||
|
*/
|
||||||
|
public function postUnshareFromSelf(GenericEvent $e) {
|
||||||
|
/** @var IShare $share */
|
||||||
|
$share = $e->getSubject();
|
||||||
|
|
||||||
|
$formatted = $this->formatHookParams($share);
|
||||||
|
$formatted['itemTarget'] = $formatted['fileTarget'];
|
||||||
|
$formatted['unsharedItems'] = [$formatted];
|
||||||
|
|
||||||
|
\OC_Hook::emit('OCP\Share', 'post_unshareFromSelf', $formatted);
|
||||||
|
}
|
||||||
|
|
||||||
private function formatHookParams(IShare $share) {
|
private function formatHookParams(IShare $share) {
|
||||||
// Prepare hook
|
// Prepare hook
|
||||||
$shareType = $share->getShareType();
|
$shareType = $share->getShareType();
|
||||||
|
|
|
@ -873,6 +873,8 @@ class Manager implements IManager {
|
||||||
$provider = $this->factory->getProvider($providerId);
|
$provider = $this->factory->getProvider($providerId);
|
||||||
|
|
||||||
$provider->deleteFromSelf($share, $recipientId);
|
$provider->deleteFromSelf($share, $recipientId);
|
||||||
|
$event = new GenericEvent($share);
|
||||||
|
$this->eventDispatcher->dispatch('OCP\Share::postUnshareFromSelf', $event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -135,4 +135,56 @@ class LegacyHooksTest extends TestCase {
|
||||||
$event->setArgument('deletedShares', [$share]);
|
$event->setArgument('deletedShares', [$share]);
|
||||||
$this->eventDispatcher->dispatch('OCP\Share::postUnshare', $event);
|
$this->eventDispatcher->dispatch('OCP\Share::postUnshare', $event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPostUnshareFromSelf() {
|
||||||
|
$path = $this->createMock(File::class);
|
||||||
|
$path->method('getId')->willReturn(1);
|
||||||
|
|
||||||
|
$share = $this->manager->newShare();
|
||||||
|
$share->setId(42)
|
||||||
|
->setProviderId('prov')
|
||||||
|
->setShareType(\OCP\Share::SHARE_TYPE_USER)
|
||||||
|
->setSharedWith('awesomeUser')
|
||||||
|
->setSharedBy('sharedBy')
|
||||||
|
->setNode($path)
|
||||||
|
->setTarget('myTarget');
|
||||||
|
|
||||||
|
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['postFromSelf'])->getMock();
|
||||||
|
\OCP\Util::connectHook('OCP\Share', 'post_unshareFromSelf', $hookListner, 'postFromSelf');
|
||||||
|
|
||||||
|
$hookListnerExpectsPostFromSelf = [
|
||||||
|
'id' => 42,
|
||||||
|
'itemType' => 'file',
|
||||||
|
'itemSource' => 1,
|
||||||
|
'shareType' => \OCP\Share::SHARE_TYPE_USER,
|
||||||
|
'shareWith' => 'awesomeUser',
|
||||||
|
'itemparent' => null,
|
||||||
|
'uidOwner' => 'sharedBy',
|
||||||
|
'fileSource' => 1,
|
||||||
|
'fileTarget' => 'myTarget',
|
||||||
|
'itemTarget' => 'myTarget',
|
||||||
|
'unsharedItems' => [
|
||||||
|
[
|
||||||
|
'id' => 42,
|
||||||
|
'itemType' => 'file',
|
||||||
|
'itemSource' => 1,
|
||||||
|
'shareType' => \OCP\Share::SHARE_TYPE_USER,
|
||||||
|
'shareWith' => 'awesomeUser',
|
||||||
|
'itemparent' => null,
|
||||||
|
'uidOwner' => 'sharedBy',
|
||||||
|
'fileSource' => 1,
|
||||||
|
'fileTarget' => 'myTarget',
|
||||||
|
'itemTarget' => 'myTarget',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$hookListner
|
||||||
|
->expects($this->exactly(1))
|
||||||
|
->method('postFromSelf')
|
||||||
|
->with($hookListnerExpectsPostFromSelf);
|
||||||
|
|
||||||
|
$event = new GenericEvent($share);
|
||||||
|
$this->eventDispatcher->dispatch('OCP\Share::postUnshareFromSelf', $event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -332,6 +332,40 @@ class ManagerTest extends \Test\TestCase {
|
||||||
$manager->deleteShare($share1);
|
$manager->deleteShare($share1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDeleteFromSelf() {
|
||||||
|
$manager = $this->createManagerMock()
|
||||||
|
->setMethods(['getShareById'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$recipientId = 'unshareFrom';
|
||||||
|
$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->defaultProvider
|
||||||
|
->expects($this->once())
|
||||||
|
->method('deleteFromSelf')
|
||||||
|
->with($share, $recipientId);
|
||||||
|
|
||||||
|
$this->eventDispatcher->expects($this->at(0))
|
||||||
|
->method('dispatch')
|
||||||
|
->with(
|
||||||
|
'OCP\Share::postUnshareFromSelf',
|
||||||
|
$this->callBack(function(GenericEvent $e) use ($share) {
|
||||||
|
return $e->getSubject() === $share;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
$manager->deleteFromSelf($share, $recipientId);
|
||||||
|
}
|
||||||
|
|
||||||
public function testDeleteChildren() {
|
public function testDeleteChildren() {
|
||||||
$manager = $this->createManagerMock()
|
$manager = $this->createManagerMock()
|
||||||
->setMethods(['deleteShare'])
|
->setMethods(['deleteShare'])
|
||||||
|
|
Loading…
Reference in New Issue