diff --git a/.drone.yml b/.drone.yml index bf993b99a70b8..bfd173c134754 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,5 +1,9 @@ build: - backend: + jsunit: + image: morrisjobke/nextcloud-ci-jsunit:1.0.2 + commands: + - ./autotest-js.sh + sqlite: image: morrisjobke/nextcloud-ci-php7:1.0 commands: - git submodule update --init diff --git a/build/package.json b/build/package.json index f5a637171edff..df26ba977850e 100644 --- a/build/package.json +++ b/build/package.json @@ -16,7 +16,7 @@ "karma-junit-reporter": "*", "karma-coverage": "*", "karma-phantomjs-launcher": "*", - "phantomjs": "*", + "phantomjs-prebuilt": "*", "jasmine-core": "~2.3.4" }, "engine": "node >= 0.8" diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index dfc0b02081827..369d9675ddfa5 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -47,8 +47,14 @@ ' ' + ' ' + '' + + ' {{#if mailPublicNotificationEnabled}}' + + '' + + ' {{/if}}' + '{{else}}' + - // FIXME: this doesn't belong in this view + // FIXME: this doesn't belong in this view '{{#if noSharingPlaceholder}}{{/if}}' + '{{/if}}' ; @@ -77,6 +83,7 @@ showLink: true, events: { + 'submit .emailPrivateLinkForm': '_onEmailPrivateLink', 'focusout input.linkPassText': 'onPasswordEntered', 'keyup input.linkPassText': 'onPasswordKeyUp', 'click .linkCheckbox': 'onLinkCheckBoxChange', @@ -117,6 +124,7 @@ _.bindAll( this, + '_onEmailPrivateLink', 'onLinkCheckBoxChange', 'onPasswordEntered', 'onPasswordKeyUp', @@ -237,9 +245,38 @@ }); }, + _onEmailPrivateLink: function(event) { + event.preventDefault(); + + var $emailField = this.$el.find('.emailField'); + var $emailButton = this.$el.find('.emailButton'); + var email = $emailField.val(); + if (email !== '') { + $emailField.prop('disabled', true); + $emailButton.prop('disabled', true); + $emailField.val(t('core', 'Sending ...')); + this.model.sendEmailPrivateLink(email).done(function() { + $emailField.css('font-weight', 'bold').val(t('core','Email sent')); + setTimeout(function() { + $emailField.val(''); + $emailField.css('font-weight', 'normal'); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }, 2000); + }).fail(function() { + $emailField.val(email); + $emailField.css('font-weight', 'normal'); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }); + } + return false; + }, + render: function() { var linkShareTemplate = this.template(); var resharingAllowed = this.model.sharePermissionPossible(); + var email = this.$el.find('.emailField').val(); if(!resharingAllowed || !this.showLink @@ -297,9 +334,43 @@ hideFileListLabel: t('core', 'Hide file listing'), mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), mailPrivatePlaceholder: t('core', 'Email link to person'), - mailButtonText: t('core', 'Send') + mailButtonText: t('core', 'Send'), + email: email })); + var $emailField = this.$el.find('.emailField'); + if (isLinkShare && $emailField.length !== 0) { + $emailField.autocomplete({ + minLength: 1, + source: function (search, response) { + $.get( + OC.generateUrl('core/ajax/share.php'), { + fetch: 'getShareWithEmail', + search: search.term + }, function(result) { + if (result.status == 'success' && result.data.length > 0) { + response(result.data); + } + }); + }, + select: function( event, item ) { + $emailField.val(item.item.email); + return false; + } + }) + .data("ui-autocomplete")._renderItem = function( ul, item ) { + return $('
  • ') + .append('' + escapeHTML(item.displayname) + "
    " + escapeHTML(item.email) + '
    ' ) + .appendTo( ul ); + }; + } + + // TODO drop with IE8 drop + if($('html').hasClass('ie8')) { + this.$el.find('#linkPassText').removeAttr('placeholder'); + this.$el.find('#linkPassText').val(''); + } + this.delegateEvents(); return this; @@ -320,4 +391,4 @@ OC.Share.ShareDialogLinkShareView = ShareDialogLinkShareView; -})(); \ No newline at end of file +})(); diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index a3accb4f5dc60..30def474401d4 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -154,17 +154,21 @@ // Default permissions are Edit (CRUD) and Share // Check if these permissions are possible var permissions = OC.PERMISSION_READ; - if (this.updatePermissionPossible()) { - permissions = permissions | OC.PERMISSION_UPDATE; - } - if (this.createPermissionPossible()) { - permissions = permissions | OC.PERMISSION_CREATE; - } - if (this.deletePermissionPossible()) { - permissions = permissions | OC.PERMISSION_DELETE; - } - if (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) { - permissions = permissions | OC.PERMISSION_SHARE; + if (shareType === OC.Share.SHARE_TYPE_REMOTE) { + permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_READ; + } else { + if (this.updatePermissionPossible()) { + permissions = permissions | OC.PERMISSION_UPDATE; + } + if (this.createPermissionPossible()) { + permissions = permissions | OC.PERMISSION_CREATE; + } + if (this.deletePermissionPossible()) { + permissions = permissions | OC.PERMISSION_DELETE; + } + if (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) { + permissions = permissions | OC.PERMISSION_SHARE; + } } attributes.permissions = permissions; @@ -414,6 +418,12 @@ if(!_.isObject(share)) { throw "Unknown Share"; } + if( share.share_type === OC.Share.SHARE_TYPE_REMOTE + && ( permission === OC.PERMISSION_SHARE + || permission === OC.PERMISSION_DELETE)) + { + return false; + } return (share.permissions & permission) === permission; }, @@ -801,4 +811,4 @@ }); OC.Share.ShareItemModel = ShareItemModel; -})(); \ No newline at end of file +})();