Allow to navigate to others with access from the sidebar
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl> Signed-off-by: npmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com>
This commit is contained in:
parent
b219eadb8f
commit
d466a7b808
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,2 +1,2 @@
|
||||||
!function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/js/",t(t.s=196)}({196:function(e,n,r){r.p=OC.linkTo("files_sharing","js/dist/"),r.nc=btoa(OC.requestToken),window.OCP.Collaboration.registerType("file",{action:function(){return new Promise((function(e,n){OC.dialogs.filepicker(t("files_sharing","Link to a file"),(function(t){OC.Files.getClient().getFileInfo(t).then((function(n,t){e(t.id)})).fail((function(){n(new Error("Cannot get fileinfo"))}))}),!1,null,!1,OC.dialogs.FILEPICKER_TYPE_CHOOSE,"",{allowDirectoryChooser:!0})}))},typeString:t("files_sharing","Link to a file"),typeIconClass:"icon-files-dark"})}});
|
!function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/js/",t(t.s=200)}({200:function(e,n,r){r.p=OC.linkTo("files_sharing","js/dist/"),r.nc=btoa(OC.requestToken),window.OCP.Collaboration.registerType("file",{action:function(){return new Promise((function(e,n){OC.dialogs.filepicker(t("files_sharing","Link to a file"),(function(t){OC.Files.getClient().getFileInfo(t).then((function(n,t){e(t.id)})).fail((function(){n(new Error("Cannot get fileinfo"))}))}),!1,null,!1,OC.dialogs.FILEPICKER_TYPE_CHOOSE,"",{allowDirectoryChooser:!0})}))},typeString:t("files_sharing","Link to a file"),typeIconClass:"icon-files-dark"})}});
|
||||||
//# sourceMappingURL=collaboration.js.map
|
//# sourceMappingURL=collaboration.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
||||||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/js/",r(r.s=377)}({377:function(e,t){
|
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/js/",r(r.s=381)}({381:function(e,t){
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
|
* @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
|
||||||
*
|
*
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -853,8 +853,12 @@ class ShareAPIController extends OCSController {
|
||||||
throw new OCSNotFoundException($this->l->t('Could not lock path'));
|
throw new OCSNotFoundException($this->l->t('Could not lock path'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// current User has resharing rights ?
|
if (!($node->getPermissions() & Constants::PERMISSION_SHARE)) {
|
||||||
$this->confirmSharingRights($node);
|
throw new SharingRightsException('no sharing rights on this item');
|
||||||
|
}
|
||||||
|
|
||||||
|
// The current top parent we have access to
|
||||||
|
$parent = $node;
|
||||||
|
|
||||||
// initiate real owner.
|
// initiate real owner.
|
||||||
$owner = $node->getOwner()
|
$owner = $node->getOwner()
|
||||||
|
@ -882,10 +886,25 @@ class ShareAPIController extends OCSController {
|
||||||
$nodes[] = $node;
|
$nodes[] = $node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The user that is requesting this list
|
||||||
|
$currentUserFolder = $this->rootFolder->getUserFolder($this->currentUser);
|
||||||
|
|
||||||
// for each nodes, retrieve shares.
|
// for each nodes, retrieve shares.
|
||||||
$shares = [];
|
$shares = [];
|
||||||
|
|
||||||
foreach ($nodes as $node) {
|
foreach ($nodes as $node) {
|
||||||
$getShares = $this->getFormattedShares($owner, $node, false, true);
|
$getShares = $this->getFormattedShares($owner, $node, false, true);
|
||||||
|
|
||||||
|
$currentUserNodes = $currentUserFolder->getById($node->getId());
|
||||||
|
if (!empty($currentUserNodes)) {
|
||||||
|
$parent = array_pop($currentUserNodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
$subPath = $currentUserFolder->getRelativePath($parent->getPath());
|
||||||
|
foreach ($getShares as &$share) {
|
||||||
|
$share['via_fileid'] = $parent->getId();
|
||||||
|
$share['via_path'] = $subPath;
|
||||||
|
}
|
||||||
$this->mergeFormattedShares($shares, $getShares);
|
$this->mergeFormattedShares($shares, $getShares);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,10 @@
|
||||||
<ActionText icon="icon-user">
|
<ActionText icon="icon-user">
|
||||||
{{ t('files_sharing', 'Added by {initiator}', { initiator: share.ownerDisplayName }) }}
|
{{ t('files_sharing', 'Added by {initiator}', { initiator: share.ownerDisplayName }) }}
|
||||||
</ActionText>
|
</ActionText>
|
||||||
<ActionLink v-if="share.canDelete && share.fileSource"
|
<ActionLink v-if="share.viaPath && share.viaFileid"
|
||||||
icon="icon-folder"
|
icon="icon-folder"
|
||||||
:href="fileTargetUrl">
|
:href="viaFileTargetUrl">
|
||||||
{{ t('files_sharing', 'Via folder') }}
|
{{ t('files_sharing', 'Via “{folder}”', {folder: viaFolderName} ) }}
|
||||||
</ActionLink>
|
</ActionLink>
|
||||||
<ActionButton v-if="share.canDelete"
|
<ActionButton v-if="share.canDelete"
|
||||||
icon="icon-close"
|
icon="icon-close"
|
||||||
|
@ -50,6 +50,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { generateUrl } from '@nextcloud/router'
|
import { generateUrl } from '@nextcloud/router'
|
||||||
|
import { basename } from '@nextcloud/paths'
|
||||||
import Avatar from '@nextcloud/vue/dist/Components/Avatar'
|
import Avatar from '@nextcloud/vue/dist/Components/Avatar'
|
||||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||||
import ActionLink from '@nextcloud/vue/dist/Components/ActionLink'
|
import ActionLink from '@nextcloud/vue/dist/Components/ActionLink'
|
||||||
|
@ -81,11 +82,15 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
fileTargetUrl() {
|
viaFileTargetUrl() {
|
||||||
return generateUrl('/f/{fileid}', {
|
return generateUrl('/f/{fileid}', {
|
||||||
fileid: this.share.fileSource,
|
fileid: this.share.viaFileid,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
viaFolderName() {
|
||||||
|
return basename(this.share.viaPath)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -467,6 +467,26 @@ export default class Share {
|
||||||
return this.#share.can_delete === true
|
return this.#share.can_delete === true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Top level accessible shared folder fileid for the current user
|
||||||
|
* @returns {string}
|
||||||
|
* @readonly
|
||||||
|
* @memberof Share
|
||||||
|
*/
|
||||||
|
get viaFileid() {
|
||||||
|
return this.#share.via_fileid
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Top level accessible shared folder path for the current user
|
||||||
|
* @returns {string}
|
||||||
|
* @readonly
|
||||||
|
* @memberof Share
|
||||||
|
*/
|
||||||
|
get viaPath() {
|
||||||
|
return this.#share.via_path
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: SORT THOSE PROPERTIES
|
// TODO: SORT THOSE PROPERTIES
|
||||||
get label() {
|
get label() {
|
||||||
return this.#share.label
|
return this.#share.label
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
<!-- Inherited shares list -->
|
<!-- Inherited shares list -->
|
||||||
<SharingEntryInherited v-for="share in shares"
|
<SharingEntryInherited v-for="share in shares"
|
||||||
:key="share.id"
|
:key="share.id"
|
||||||
|
:file-info="fileInfo"
|
||||||
:share="share" />
|
:share="share" />
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
Loading…
Reference in New Issue