aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@owncloud.com>2015-09-03 15:53:17 +0200
committerVincent Petry <pvince81@owncloud.com>2015-09-16 07:23:27 +0200
commitce1b0c650e3a0e4cb701609ee08a13182909219a (patch)
tree917a0b27ab41898fbc37861909489824f49f3392 /core
parent5dc2c35ce5f3023ccea4cc599cf54d6b1c0e2c01 (diff)
downloadnextcloud-server-ce1b0c650e3a0e4cb701609ee08a13182909219a.tar.gz
nextcloud-server-ce1b0c650e3a0e4cb701609ee08a13182909219a.zip
show link share
Diffstat (limited to 'core')
-rw-r--r--core/css/share.css4
-rw-r--r--core/js/shareconfigmodel.js3
-rw-r--r--core/js/sharedialogexpirationview.js10
-rw-r--r--core/js/sharedialoglinkshareview.js32
-rw-r--r--core/js/shareitemmodel.js57
5 files changed, 88 insertions, 18 deletions
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
};