diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2022-11-10 13:20:56 +0300 |
---|---|---|
committer | Maxence Lange <maxence@artificial-owl.com> | 2022-11-10 13:21:05 +0300 |
commit | aa53d53464aec57632639d3f58d0b9150bcdc6d9 (patch) | |
tree | efc9777e608b09559a6b59723efd90c236a1e497 | |
parent | aa802b8b14dda99f1177b3db7d073b9577ea11ca (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.php | 79 | ||||
-rw-r--r-- | lib/Service/ShareWrapperService.php | 9 |
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); } |