From 5a500134fcbfd3671cb88985dad423b7493f39ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pauli=20J=C3=A4rvinen?= Date: Fri, 14 Jul 2017 01:05:07 +0300 Subject: [PATCH] Added emitting of hook post_unshareFromSelf to Share 2.0 - This hook used to be present in Share 1.0 but was missing from 2.0 - Some new key-value pairs have been added to the hook parameter data as compared to 1.0. This is to make the hook more useful and to enable unified handling of the hooks post_unshare and post_unshareFromSelf. - Fixes #28337 (cherry picked from commit 9a385ababc90a443452b1e6b9b34b9171889a3dc) --- lib/private/Share20/Manager.php | 67 ++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 2cbe3604993e..833d96a697b2 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -764,6 +764,32 @@ protected function deleteChildren(\OCP\Share\IShare $share) { return $deletedShares; } + protected static function formatUnshareHookParams(\OCP\Share\IShare $share) { + // Prepare hook + $shareType = $share->getShareType(); + $sharedWith = ''; + if ($shareType === \OCP\Share::SHARE_TYPE_USER) { + $sharedWith = $share->getSharedWith(); + } else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) { + $sharedWith = $share->getSharedWith(); + } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) { + $sharedWith = $share->getSharedWith(); + } + + $hookParams = [ + 'id' => $share->getId(), + 'itemType' => $share->getNodeType(), + 'itemSource' => $share->getNodeId(), + 'shareType' => $shareType, + 'shareWith' => $sharedWith, + 'itemparent' => method_exists($share, 'getParent') ? $share->getParent() : '', + 'uidOwner' => $share->getSharedBy(), + 'fileSource' => $share->getNodeId(), + 'fileTarget' => $share->getTarget() + ]; + return $hookParams; + } + /** * Delete a share * @@ -779,33 +805,7 @@ public function deleteShare(\OCP\Share\IShare $share) { throw new \InvalidArgumentException('Share does not have a full id'); } - $formatHookParams = function(\OCP\Share\IShare $share) { - // Prepare hook - $shareType = $share->getShareType(); - $sharedWith = ''; - if ($shareType === \OCP\Share::SHARE_TYPE_USER) { - $sharedWith = $share->getSharedWith(); - } else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) { - $sharedWith = $share->getSharedWith(); - } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) { - $sharedWith = $share->getSharedWith(); - } - - $hookParams = [ - 'id' => $share->getId(), - 'itemType' => $share->getNodeType(), - 'itemSource' => $share->getNodeId(), - 'shareType' => $shareType, - 'shareWith' => $sharedWith, - 'itemparent' => method_exists($share, 'getParent') ? $share->getParent() : '', - 'uidOwner' => $share->getSharedBy(), - 'fileSource' => $share->getNodeId(), - 'fileTarget' => $share->getTarget() - ]; - return $hookParams; - }; - - $hookParams = $formatHookParams($share); + $hookParams = self::formatUnshareHookParams($share); // Emit pre-hook \OC_Hook::emit('OCP\Share', 'pre_unshare', $hookParams); @@ -821,9 +821,7 @@ public function deleteShare(\OCP\Share\IShare $share) { $deletedShares[] = $share; //Format hook info - $formattedDeletedShares = array_map(function($share) use ($formatHookParams) { - return $formatHookParams($share); - }, $deletedShares); + $formattedDeletedShares = array_map('self::formatUnshareHookParams', $deletedShares); $hookParams['deletedShares'] = $formattedDeletedShares; @@ -846,6 +844,15 @@ public function deleteFromSelf(\OCP\Share\IShare $share, $recipientId) { $provider = $this->factory->getProvider($providerId); $provider->deleteFromSelf($share, $recipientId); + + // Emit post hook. The parameter data structure is slightly different + // from the post_unshare hook to maintain backward compatibility with + // Share 1.0: the array contains all the key-value pairs from the old + // library plus some new ones. + $hookParams = self::formatUnshareHookParams($share); + $hookParams['itemTarget'] = $hookParams['fileTarget']; + $hookParams['unsharedItems'] = [$hookParams]; + \OC_Hook::emit('OCP\Share', 'post_unshareFromSelf', $hookParams); } /**