diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index 7efb361f512dd..d4610ad9650cd 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -19,7 +19,34 @@ '
' + '{{#if isSharingAllowed}}' + '' + - '
' + + '
' + + ' ' + + '' + ' ' + ' '+ '{{{remoteShareInfo}}}' + @@ -74,7 +101,9 @@ mailView: undefined, events: { - 'input .shareWithField': 'onShareWithFieldChanged' + 'input .shareWithField': 'onShareWithFieldChanged', + 'click .preSharePermissions': 'onTogglePermissionsMenu', + 'click .permissions': 'onPermissionChange', }, initialize: function(options) { @@ -297,18 +326,25 @@ $loading.removeClass('hidden') .addClass('inlineblock'); - this.model.addShare(s.item.value, {success: function() { - $(e.target).val('') - .attr('disabled', false); - $loading.addClass('hidden') - .removeClass('inlineblock'); - }, error: function(obj, msg) { - OC.Notification.showTemporary(msg); - $(e.target).attr('disabled', false) - .autocomplete('search', $(e.target).val()); - $loading.addClass('hidden') - .removeClass('inlineblock'); - }}); + var permissions = $(this.$el.find('.preSharePermissions')).data('permissions'); + var attributes = s.item.value; + attributes.permissions = permissions; + + this.model.addShare(attributes, { + success: function() { + $(e.target).val('') + .attr('disabled', false); + $loading.addClass('hidden') + .removeClass('inlineblock'); + }, + error: function(obj, msg) { + OC.Notification.showTemporary(msg); + $(e.target).attr('disabled', false) + .autocomplete('search', $(e.target).val()); + $loading.addClass('hidden') + .removeClass('inlineblock'); + } + }); }, _toggleLoading: function(state) { @@ -339,14 +375,40 @@ render: function() { var baseTemplate = this._getTemplate('base', TEMPLATE_BASE); + var editPermission = 0; + if (this.model.updatePermissionPossible()) { + editPermission |= OC.PERMISSION_UPDATE; + } + if (this.model.createPermissionPossible()) { + editPermission |= OC.PERMISSION_CREATE; + } + if (this.model.deletePermissionPossible()) { + editPermission |= OC.PERMISSION_DELETE; + } + + var canShare = this.configModel.get('isResharingAllowed') && this.model.sharePermissionPossible(); + this.$el.html(baseTemplate({ cid: this.cid, shareLabel: t('core', 'Share'), sharePlaceholder: this._renderSharePlaceholderPart(), remoteShareInfo: this._renderRemoteShareInfoPart(), - isSharingAllowed: this.model.sharePermissionPossible() + isSharingAllowed: this.model.sharePermissionPossible(), + readLabel: t('core', 'Read'), + editLabel: t('core', 'Edit'), + readPermission: OC.PERMISSION_READ, + sharePermission: OC.PERMISSION_SHARE, + editPermission: editPermission, + canEdit: editPermission !== 0, + canShare: canShare })); + var permissions = OC.PERMISSION_READ | editPermission; + if (canShare) { + permissions |= OC.PERMISSION_SHARE; + } + this.updatePermissions(permissions); + var $shareField = this.$el.find('.shareWithField'); if ($shareField.length) { $shareField.autocomplete({ @@ -442,6 +504,35 @@ */ _getRemoteShareInfoTemplate: function() { return this._getTemplate('remoteShareInfo', TEMPLATE_REMOTE_SHARE_INFO); + }, + + onTogglePermissionsMenu: function(event) { + event.preventDefault(); + event.stopPropagation(); + var $element = $(event.target); + var $div = $element.closest('.shareInput'); + var $menu = $div.find('.popovermenu'); + + OC.showMenu(null, $menu); + this._menuOpen = true; + }, + + onPermissionChange: function(event) { + var $element = $(event.target); + var $div = $element.closest('.shareInput'); + + var permissions = 0; + $('.permissions', $div).filter(':checked').each(function(index, checkbox) { + permissions |= $(checkbox).data('permissions'); + }); + + this.updatePermissions(permissions); + }, + + updatePermissions: function(permissions) { + var el = $(this.$el.find('.preSharePermissions')); + el.html(permissions); + el.data('permissions', permissions); } }); diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index e8a0d17a7c2df..43b6fa801d440 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -147,9 +147,10 @@ }, addShare: function(attributes, options) { - var shareType = attributes.shareType; options = options || {}; - attributes = _.extend({}, attributes); + attributes = _.extend({ + permissions: OC.PERMISSION_ALL + }, attributes); // Default permissions are Edit (CRUD) and Share // Check if these permissions are possible @@ -167,7 +168,7 @@ permissions = permissions | OC.PERMISSION_SHARE; } - attributes.permissions = permissions; + attributes.permissions &= permissions; if (_.isUndefined(attributes.path)) { attributes.path = this.fileInfoModel.getFullPath(); }