-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement share co-owning #49073
base: master
Are you sure you want to change the base?
Implement share co-owning #49073
Conversation
$shares = []; | ||
foreach ($providers as $provider) { | ||
if ($isCoOwner) { | ||
foreach ($node->getDirectoryListing() as $childNode) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes it a lot more expensive, can we tweak getSharesInFolder
to make the $user
filter optional instead?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can't do this without a breaking change, as it would break provider implementations that don't expect to receive null.
Maybe that is fine though, as long as the providers only do database SELECTs where a null value is fine (but that would still result in unexpected results as nothing would be returned instead of everything).
dbee0fb
to
0ee7f19
Compare
Added tests for everything 🎉 |
58b9fb5
to
4c63eba
Compare
Signed-off-by: provokateurin <[email protected]>
…ath() Signed-off-by: provokateurin <[email protected]>
Signed-off-by: provokateurin <[email protected]>
Signed-off-by: provokateurin <[email protected]>
…es on IShareCoOwnerMount Signed-off-by: provokateurin <[email protected]>
…hare Signed-off-by: provokateurin <[email protected]>
Signed-off-by: provokateurin <[email protected]>
… owner Signed-off-by: provokateurin <[email protected]>
Signed-off-by: provokateurin <[email protected]>
4c63eba
to
cd4dc54
Compare
@@ -78,6 +78,11 @@ export default { | |||
} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GUEST) { | |||
title += ` (${t('files_sharing', 'guest')})` | |||
} | |||
if (!this.isShareOwner && this.share.ownerDisplayName) { | |||
title += t('files_sharing', ' by {initiator}', { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
leading / trailing spaces in translations are very likely to break
title += t('files_sharing', ' by {initiator}', { | |
title += ' ' + t('files_sharing', 'by {initiator}', { |
// Ignore share, file is still accessible | ||
} catch (NotFoundException) { | ||
// Access lost | ||
$this->deleteShare($share); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can lead to data loss, e.g. external storage that is temporarily not available.
@@ -1553,6 +1542,12 @@ protected function canEditShare(IShare $share): bool { | |||
return true; | |||
} | |||
|
|||
$userFolder = $this->rootFolder->getUserFolder($this->userId); | |||
$file = $userFolder->getFirstNodeById($share->getNodeId()); | |||
if ($file !== null && $file->getMountPoint() instanceof IShareCoOwnerMount && $this->shareProviderResharingRights($this->userId, $share, $file)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe if ($file?->getMountPoint() instanceof [...]) {
Summary
Can be tested with nextcloud/groupfolders#3401
Tests still need to be written, but other than that this is ready.It doesn't work with files_external yet, but I think that is due to permissions (UI says there is no reshare permission).
I'm surprised how little lines had to be changed in the end, but the challenging part was exploring how this can be implemented and where things needs to be changed and fixed to make it work.
Behavior:
Checklist