diff --git a/apps/files_sharing/js/sharetabview.js b/apps/files_sharing/js/sharetabview.js
index 11f25c0c47..6836107306 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 0d687cb76d..bdf34e9a86 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 e948c57cba..846b2692ec 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 4c628f5498..9fb404a090 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}}' +
'' +
'' +
'' +
'' +
- '{{defaultExpireMessage}}'
+ '{{defaultExpireMessage}}' +
+ '{{/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 eebf8a3424..373d6d180b 100644
--- a/core/js/sharedialoglinkshareview.js
+++ b/core/js/sharedialoglinkshareview.js
@@ -16,16 +16,20 @@
var TEMPLATE =
'{{#if shareAllowed}}' +
'' +
- '' +
+ '' +
'
' +
'' +
- '' +
- '' +
+ '' +
+ ' {{#if showPasswordCheckBox}}' +
+ '' +
+ ' {{/if}}' +
+ ' {{#if isPasswordSet}}' +
'
' +
' ' +
- ' ' +
+ ' ' +
' ' +
'
' +
+ ' {{/if}}' +
' {{#if publicUpload}}' +
'' +
' ' +
@@ -35,8 +39,8 @@
' {{/if}}' +
' {{#if mailPublicNotificationEnabled}}' +
'' +
' {{/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 acaa890be1..e8371e16e0 100644
--- a/core/js/shareitemmodel.js
+++ b/core/js/shareitemmodel.js
@@ -14,6 +14,14 @@
OC.Share.Types = {};
}
+ /**
+ * @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
@@ -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
};