Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/circles.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2022-11-10 13:20:56 +0300
committerMaxence Lange <maxence@artificial-owl.com>2022-11-10 13:21:05 +0300
commitaa53d53464aec57632639d3f58d0b9150bcdc6d9 (patch)
treeefc9777e608b09559a6b59723efd90c236a1e497
parentaa802b8b14dda99f1177b3db7d073b9577ea11ca (diff)
remove shares on removing membersfix/noid/remove-share-on-members-removing
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
-rw-r--r--lib/Listeners/Files/RemovingMember.php79
-rw-r--r--lib/Service/ShareWrapperService.php9
2 files changed, 60 insertions, 28 deletions
diff --git a/lib/Listeners/Files/RemovingMember.php b/lib/Listeners/Files/RemovingMember.php
index 8355a7e0..04e681e1 100644
--- a/lib/Listeners/Files/RemovingMember.php
+++ b/lib/Listeners/Files/RemovingMember.php
@@ -31,17 +31,17 @@ declare(strict_types=1);
namespace OCA\Circles\Listeners\Files;
-use OCA\Circles\Tools\Traits\TNCLogger;
-use OCA\Circles\Tools\Traits\TStringTools;
-use OCA\Circles\AppInfo\Application;
use OCA\Circles\Events\RemovingCircleMemberEvent;
use OCA\Circles\Exceptions\MembershipNotFoundException;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\Membership;
use OCA\Circles\Service\MemberService;
use OCA\Circles\Service\ShareTokenService;
+use OCA\Circles\Service\ShareWrapperService;
+use OCA\Circles\Tools\Traits\TStringTools;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
+use Psr\Log\LoggerInterface;
/**
* Class RemovingMember
@@ -50,30 +50,30 @@ use OCP\EventDispatcher\IEventListener;
*/
class RemovingMember implements IEventListener {
use TStringTools;
- use TNCLogger;
-
-
- /** @var MemberService */
- private $memberService;
-
- /** @var ShareTokenService */
- private $shareTokenService;
+ private LoggerInterface $logger;
+ private MemberService $memberService;
+ private ShareTokenService $shareTokenService;
+ private ShareWrapperService $shareWrapperService;
/**
* RemovingMember constructor.
*
+ * @param LoggerInterface $logger
* @param MemberService $memberService
* @param ShareTokenService $shareTokenService
+ * @param ShareWrapperService $shareWrapperService
*/
public function __construct(
+ LoggerInterface $logger,
MemberService $memberService,
- ShareTokenService $shareTokenService
+ ShareTokenService $shareTokenService,
+ ShareWrapperService $shareWrapperService
) {
+ $this->logger = $logger;
$this->memberService = $memberService;
$this->shareTokenService = $shareTokenService;
-
- $this->setup('app', Application::APP_ID);
+ $this->shareWrapperService = $shareWrapperService;
}
@@ -105,20 +105,53 @@ class RemovingMember implements IEventListener {
/** @var Member[] $members */
foreach ($members as $member) {
- if ($member->getUserType() !== Member::TYPE_MAIL
- && $member->getUserType() !== Member::TYPE_CONTACT
+ if ($member->getUserType() === Member::TYPE_MAIL
+ || $member->getUserType() === Member::TYPE_CONTACT
) {
+ $this->removingSharesExternalMember($member, $singleIds);
+ continue;
+ }
+
+ if ($member->getUserType() === Member::TYPE_USER) {
+ $this->removingSharesInternalMember($member, $singleIds);
+ }
+ }
+ }
+
+
+ /**
+ * @param Member $member
+ * @param string[] $singleIds
+ */
+ private function removingSharesExternalMember(Member $member, array $singleIds) {
+ foreach ($singleIds as $singleId) {
+ try {
+ $member->getLink($singleId);
continue;
+ } catch (MembershipNotFoundException $e) {
}
- foreach ($singleIds as $singleId) {
- try {
- $member->getLink($singleId);
- continue;
- } catch (MembershipNotFoundException $e) {
- }
+ $this->shareTokenService->removeTokens($member->getSingleId(), $singleId);
+ }
+ }
+
+
+ /**
+ * @param Member $member
+ * @param string[] $singleIds
+ */
+ private function removingSharesInternalMember(Member $member, array $singleIds) {
+ foreach ($singleIds as $singleId) {
+ try {
+ $member->getLink($singleId);
+ continue;
+ } catch (MembershipNotFoundException $e) {
+ }
- $this->shareTokenService->removeTokens($member->getSingleId(), $singleId);
+ try {
+ $this->shareWrapperService->deleteUserSharesToCircle($singleId, $member->getUserId());
+ } catch (\Exception $e) {
+ $this->logger->notice('issue while deleting user shares: ' . $e->getMessage());
}
}
}
diff --git a/lib/Service/ShareWrapperService.php b/lib/Service/ShareWrapperService.php
index c6ec3d18..a6ffe252 100644
--- a/lib/Service/ShareWrapperService.php
+++ b/lib/Service/ShareWrapperService.php
@@ -122,18 +122,17 @@ class ShareWrapperService {
/**
* @param string $circleId
- * @param string $initiator
- * @param bool $force
+ * @param string $userId
*
* @throws Exception
*/
- public function deleteUserSharesToCircle(string $circleId, string $initiator): void {
- if ($initiator === '') {
+ public function deleteUserSharesToCircle(string $circleId, string $userId): void {
+ if ($userId === '') {
throw new Exception('$initiator cannot be empty');
}
$this->cache->clear('');
- $this->shareWrapperRequest->deleteSharesToCircle($circleId, $initiator);
+ $this->shareWrapperRequest->deleteSharesToCircle($circleId, $userId);
}