diff options
-rw-r--r-- | apps/files_sharing/js/sharetabview.js | 6 | ||||
-rw-r--r-- | core/css/share.css | 4 | ||||
-rw-r--r-- | core/js/shareconfigmodel.js | 3 | ||||
-rw-r--r-- | core/js/sharedialogexpirationview.js | 10 | ||||
-rw-r--r-- | core/js/sharedialoglinkshareview.js | 32 | ||||
-rw-r--r-- | core/js/shareitemmodel.js | 57 |
6 files changed, 92 insertions, 20 deletions
diff --git a/apps/files_sharing/js/sharetabview.js b/apps/files_sharing/js/sharetabview.js index 11f25c0c47c..6836107306a 100644 --- a/apps/files_sharing/js/sharetabview.js +++ b/apps/files_sharing/js/sharetabview.js @@ -45,7 +45,6 @@ } if (this.model) { - console.log(this.model); var owner = this.model.get('shareOwner'); if (owner === OC.currentUser) { owner = null; @@ -59,8 +58,11 @@ itemSource: this.model.get('id'), possiblePermissions: this.model.get('sharePermissions') }; - var shareModel = new OC.Share.ShareItemModel(attributes, {configModel: configModel}); var configModel = new OC.Share.ShareConfigModel(); + var shareModel = new OC.Share.ShareItemModel(attributes, { + configModel: configModel, + fileInfoModel: this.model + }); this._dialog = new OC.Share.ShareDialogView({ configModel: configModel, model: shareModel diff --git a/core/css/share.css b/core/css/share.css index 0d687cb76da..bdf34e9a863 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -126,10 +126,6 @@ a.unshare { margin-right: 0; } -#linkText,#linkPass,#expiration { - display:none; -} - #link #showPassword img { padding-left:5px; width:12px; diff --git a/core/js/shareconfigmodel.js b/core/js/shareconfigmodel.js index e948c57cbac..846b2692ecb 100644 --- a/core/js/shareconfigmodel.js +++ b/core/js/shareconfigmodel.js @@ -16,7 +16,8 @@ var ShareConfigModel = OC.Backbone.Model.extend({ defaults: { - publicUploadEnabled: false + publicUploadEnabled: false, + enforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink }, /** diff --git a/core/js/sharedialogexpirationview.js b/core/js/sharedialogexpirationview.js index 4c628f5498a..9fb404a090e 100644 --- a/core/js/sharedialogexpirationview.js +++ b/core/js/sharedialogexpirationview.js @@ -14,11 +14,14 @@ } var TEMPLATE = + // well that could go to linkShareView… + '{{#if isLinkShare}}' + '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" />' + '<label for="expirationCheckbox">{{setExpirationLabel}}</label>' + '<label for="expirationDate" class="hidden-visually">{{expirationLabel}}</label>' + '<input id="expirationDate" type="text" placeholder="{{expirationDatePlaceholder}}" class="hidden" />' + - '<em id="defaultExpireMessage">{{defaultExpireMessage}}</em>' + '<em id="defaultExpireMessage">{{defaultExpireMessage}}</em>' + + '{{/if}}' ; /** @@ -44,6 +47,8 @@ /** @type {boolean} **/ showLink: true, + className: 'hidden', + initialize: function(options) { if(!_.isUndefined(options.configModel)) { this.configModel = options.configModel; @@ -68,7 +73,8 @@ setExpirationLabel: t('core', 'Set expiration date'), expirationLabel: t('core', 'Expiration'), expirationDatePlaceholder: t('core', 'Expiration date'), - defaultExpireMessage: defaultExpireMessage + defaultExpireMessage: defaultExpireMessage, + isLinkShare: this.model.get('linkShare').isLinkShare })); return this; diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index eebf8a34247..373d6d180bc 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -16,16 +16,20 @@ var TEMPLATE = '{{#if shareAllowed}}' + '<span class="icon-loading-small hidden"></span>' + - '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">{{linkShareLabel}}</label>' + + '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" {{#if isLinkShare}}checked="checked"{{/if}} /><label for="linkCheckbox">{{linkShareLabel}}</label>' + '<br />' + '<label for="linkText" class="hidden-visually">{{urlLabel}}</label>' + - '<input id="linkText" type="text" readonly="readonly" />' + - '<input type="checkbox" name="showPassword" id="showPassword" value="1" class="hidden" /><label for="showPassword" class="hidden-visually">{{enablePasswordLabel}}</label>' + + '<input id="linkText" {{#unless isLinkShare}}class="hidden"{{/unless}} type="text" readonly="readonly" value="{{shareLinkURL}}" />' + + ' {{#if showPasswordCheckBox}}' + + '<input type="checkbox" name="showPassword" id="showPassword" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" /><label for="showPassword">{{enablePasswordLabel}}</label>' + + ' {{/if}}' + + ' {{#if isPasswordSet}}' + '<div id="linkPass">' + ' <label for="linkPassText" class="hidden-visually">{{passwordLabel}}</label>' + - ' <input id="linkPassText" type="password" placeholder="passwordPlaceholder" />' + + ' <input id="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" />' + ' <span class="icon-loading-small hidden"></span>' + '</div>' + + ' {{/if}}' + ' {{#if publicUpload}}' + '<div id="allowPublicUploadWrapper" class="hidden">' + ' <span class="icon-loading-small hidden"></span>' + @@ -35,8 +39,8 @@ ' {{/if}}' + ' {{#if mailPublicNotificationEnabled}}' + '<form id="emailPrivateLink">' + - ' <input id="email" class="hidden" value="" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + - ' <input id="emailButton" class="hidden" type="submit" value="{{mailButtonText}}" />' + + ' <input id="email" value="" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + + ' <input id="emailButton" type="submit" value="{{mailButtonText}}" />' + '</form>' + ' {{/if}}' + '{{else}}' + @@ -113,17 +117,27 @@ publicUploadChecked = 'checked="checked"'; } + var isLinkShare = this.model.get('linkShare').isLinkShare; + var isPasswordSet = !!this.model.get('linkShare').password; + var showPasswordCheckBox = isLinkShare + && ( !this.configModel.get('enforcePasswordForPublicLink') + || !this.model.get('linkShare').password); + this.$el.html(linkShareTemplate({ shareAllowed: true, + isLinkShare: isLinkShare, + shareLinkURL: this.model.get('linkShare').link, linkShareLabel: t('core', 'Share link'), urlLabel: t('core', 'Link'), enablePasswordLabel: t('core', 'Password protect'), passwordLabel: t('core', 'Password'), - passwordPlaceholder: t('core', 'Choose a password for the public link'), - publicUpload: publicUpload, + passwordPlaceholder: isPasswordSet ? '**********' : t('core', 'Choose a password for the public link'), + isPasswordSet: isPasswordSet, + showPasswordCheckBox: showPasswordCheckBox, + publicUpload: publicUpload && isLinkShare, publicUploadChecked: publicUploadChecked, publicUploadLabel: t('core', 'Allow editing'), - mailPublicNotificationEnabled: this.configModel.isMailPublicNotificationEnabled(), + mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), mailPrivatePlaceholder: t('core', 'Email link to person'), mailButtonText: t('core', 'Send') })); diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index acaa890be11..e8371e16e0a 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -15,6 +15,14 @@ } /** + * @typedef {object} OC.Share.Types.LinkShareInfo + * @property {bool} isLinkShare + * @property {string} token + * @property {string|null} password + * @property {string} link + */ + + /** * @typedef {object} OC.Share.Types.Collection * @property {string} item_type * @property {string} path @@ -49,6 +57,7 @@ * @typedef {object} OC.Share.Types.ShareItemInfo * @property {OC.Share.Types.Reshare} reshare * @property {OC.Share.Types.ShareInfo[]} shares + * @property {OC.Share.Types.LinkShareInfo|undefined} linkShare */ /** @@ -64,11 +73,16 @@ if(!_.isUndefined(options.configModel)) { this.configModel = options.configModel; } + if(!_.isUndefined(options.fileInfoModel)) { + /** @type {OC.Files.FileInfo} **/ + this.fileInfoModel = options.fileInfoModel; + } }, defaults: { allowPublicUploadStatus: false, - permissions: 0 + permissions: 0, + linkShare: {} }, /** @@ -186,7 +200,6 @@ * @returns {string} */ getReshareOwnerDisplayname: function() { - return 'foo'; return this.get('reshare').displayname_owner; }, @@ -399,12 +412,52 @@ }); } + /** @type {OC.Share.Types.ShareInfo[]} **/ var shares = _.toArray(data.shares); this.legacyFillCurrentShares(shares); + var linkShare = { isLinkShare: false }; + // filter out the share by link + shares = _.reject(shares, + /** + * @param {OC.Share.Types.ShareInfo} share + */ + function(share) { + var isShareLink = + share.share_type === OC.Share.SHARE_TYPE_LINK + && ( share.file_source === this.get('itemSource') + || share.item_source === this.get('itemSource')); + + if (isShareLink) { + var link = window.location.protocol + '//' + window.location.host; + if (!share.token) { + // pre-token link + var fullPath = this.fileInfoModel.get('path') + '/' + + this.fileInfoModel.get('name'); + var location = '/' + OC.currentUser + '/files' + fullPath; + var type = this.fileInfoModel.isDirectory() ? 'folder' : 'file'; + link += OC.linkTo('', 'public.php') + '?service=files&' + + type + '=' + encodeURIComponent(location); + } else { + link += OC.generateUrl('/s/') + share.token; + } + linkShare = { + isLinkShare: true, + token: share.token, + password: share.share_with, + link: link + }; + + return share; + } + }, + this + ); + return { reshare: data.reshare, shares: shares, + linkShare: linkShare, permissions: permissions, allowPublicUploadStatus: allowPublicUploadStatus }; |