Merge pull request #3231 from nextcloud/allow-editing-public-links

allow editing single files shared as public link
This commit is contained in:
Björn Schießle 2017-01-25 15:35:57 +01:00 committed by GitHub
commit 5873a0a7d4
3 changed files with 55 additions and 1 deletions

View File

@ -668,6 +668,7 @@ class ShareAPIController extends OCSController {
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE, // legacy \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE, // legacy
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE, // correct \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE, // correct
\OCP\Constants::PERMISSION_CREATE, // hidden file list \OCP\Constants::PERMISSION_CREATE, // hidden file list
\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE, // allow to edit single files
]) ])
) { ) {
throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links')); throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links'));

View File

@ -43,6 +43,13 @@
'</div>' + '</div>' +
' {{/if}}' + ' {{/if}}' +
' {{/if}}' + ' {{/if}}' +
' {{#if publicEditing}}' +
'<div id="allowPublicEditingWrapper">' +
' <span class="icon-loading-small hidden"></span>' +
' <input type="checkbox" value="1" name="allowPublicEditing" id="sharingDialogAllowPublicEditing-{{cid}}" class="checkbox publicEditingCheckbox" {{{publicEditingChecked}}} />' +
'<label for="sharingDialogAllowPublicEditing-{{cid}}">{{publicEditingLabel}}</label>' +
'</div>' +
' {{/if}}' +
' {{#if showPasswordCheckBox}}' + ' {{#if showPasswordCheckBox}}' +
'<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' + '<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' +
'<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' + '<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' +
@ -87,6 +94,7 @@
'click .linkCheckbox': 'onLinkCheckBoxChange', 'click .linkCheckbox': 'onLinkCheckBoxChange',
'click .linkText': 'onLinkTextClick', 'click .linkText': 'onLinkTextClick',
'change .publicUploadCheckbox': 'onAllowPublicUploadChange', 'change .publicUploadCheckbox': 'onAllowPublicUploadChange',
'change .publicEditingCheckbox': 'onAllowPublicEditingChange',
'change .hideFileListCheckbox': 'onHideFileListChange', 'change .hideFileListCheckbox': 'onHideFileListChange',
'click .showPasswordCheckbox': 'onShowPasswordClick' 'click .showPasswordCheckbox': 'onShowPasswordClick'
}, },
@ -128,7 +136,8 @@
'onLinkTextClick', 'onLinkTextClick',
'onShowPasswordClick', 'onShowPasswordClick',
'onHideFileListChange', 'onHideFileListChange',
'onAllowPublicUploadChange' 'onAllowPublicUploadChange',
'onAllowPublicEditingChange'
); );
var clipboard = new Clipboard('.clipboardButton'); var clipboard = new Clipboard('.clipboardButton');
@ -266,6 +275,20 @@
}); });
}, },
onAllowPublicEditingChange: function() {
var $checkbox = this.$('.publicEditingCheckbox');
$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
var permissions = OC.PERMISSION_READ;
if($checkbox.is(':checked')) {
permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ;
}
this.model.saveLinkShare({
permissions: permissions
});
},
onHideFileListChange: function () { onHideFileListChange: function () {
var $checkbox = this.$('.hideFileListCheckbox'); var $checkbox = this.$('.hideFileListCheckbox');
$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock'); $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
@ -307,6 +330,12 @@
publicUploadChecked = 'checked="checked"'; publicUploadChecked = 'checked="checked"';
} }
var publicEditingChecked = '';
if(this.model.isPublicEditingAllowed()) {
publicEditingChecked = 'checked="checked"';
}
var hideFileList = publicUploadChecked; var hideFileList = publicUploadChecked;
var hideFileListChecked = ''; var hideFileListChecked = '';
@ -320,6 +349,11 @@
&& ( !this.configModel.get('enforcePasswordForPublicLink') && ( !this.configModel.get('enforcePasswordForPublicLink')
|| !this.model.get('linkShare').password); || !this.model.get('linkShare').password);
var publicEditable =
!this.model.isFolder()
&& isLinkShare
&& this.model.updatePermissionPossible();
this.$el.html(linkShareTemplate({ this.$el.html(linkShareTemplate({
cid: this.cid, cid: this.cid,
shareAllowed: true, shareAllowed: true,
@ -337,6 +371,9 @@
publicUploadChecked: publicUploadChecked, publicUploadChecked: publicUploadChecked,
hideFileListChecked: hideFileListChecked, hideFileListChecked: hideFileListChecked,
publicUploadLabel: t('core', 'Allow upload and editing'), publicUploadLabel: t('core', 'Allow upload and editing'),
publicEditing: publicEditable,
publicEditingChecked: publicEditingChecked,
publicEditingLabel: t('core', 'Allow editing'),
hideFileListLabel: t('core', 'File drop (upload only)'), hideFileListLabel: t('core', 'File drop (upload only)'),
mailPrivatePlaceholder: t('core', 'Email link to person'), mailPrivatePlaceholder: t('core', 'Email link to person'),
mailButtonText: t('core', 'Send') mailButtonText: t('core', 'Send')

View File

@ -272,6 +272,10 @@
return this.get('allowPublicUploadStatus'); return this.get('allowPublicUploadStatus');
}, },
isPublicEditingAllowed: function() {
return this.get('allowPublicEditingStatus');
},
/** /**
* @returns {boolean} * @returns {boolean}
*/ */
@ -679,6 +683,17 @@
}); });
} }
var allowPublicEditingStatus = true;
if(!_.isUndefined(data.shares)) {
$.each(data.shares, function (key, value) {
if (value.share_type === OC.Share.SHARE_TYPE_LINK) {
allowPublicEditingStatus = (value.permissions & OC.PERMISSION_UPDATE) ? true : false;
return true;
}
});
}
var hideFileListStatus = false; var hideFileListStatus = false;
if(!_.isUndefined(data.shares)) { if(!_.isUndefined(data.shares)) {
$.each(data.shares, function (key, value) { $.each(data.shares, function (key, value) {
@ -762,6 +777,7 @@
linkShare: linkShare, linkShare: linkShare,
permissions: permissions, permissions: permissions,
allowPublicUploadStatus: allowPublicUploadStatus, allowPublicUploadStatus: allowPublicUploadStatus,
allowPublicEditingStatus: allowPublicEditingStatus,
hideFileListStatus: hideFileListStatus hideFileListStatus: hideFileListStatus
}; };
}, },