From 858a2a4e6c42f8cc68212439930c16029a6bba36 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Fri, 4 Sep 2015 15:31:45 +0200 Subject: [PATCH] display expiration info --- core/js/shareconfigmodel.js | 18 ++------- core/js/sharedialogexpirationview.js | 57 ++++++++++++++++++++++++---- core/js/sharedialogview.js | 1 + core/js/shareitemmodel.js | 7 +++- 4 files changed, 60 insertions(+), 23 deletions(-) diff --git a/core/js/shareconfigmodel.js b/core/js/shareconfigmodel.js index 846b2692ecb..472fdcc75d7 100644 --- a/core/js/shareconfigmodel.js +++ b/core/js/shareconfigmodel.js @@ -17,7 +17,9 @@ var ShareConfigModel = OC.Backbone.Model.extend({ defaults: { publicUploadEnabled: false, - enforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink + enforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink, + isDefaultExpireDateEnforced: oc_appconfig.core.defaultExpireDateEnforced === true, + defaultExpireDate: oc_appconfig.core.defaultExpireDate, }, /** @@ -42,13 +44,6 @@ return $('input:hidden[name=mailPublicNotificationEnabled]').val() === 'yes'; }, - /** - * @returns {boolean} - */ - isDefaultExpireDateEnforced: function() { - return oc_appconfig.core.defaultExpireDateEnforced === true; - }, - /** * @returns {boolean} */ @@ -75,13 +70,6 @@ */ getFederatedShareDocLink: function() { return oc_appconfig.core.federatedCloudShareDoc; - }, - - /** - * @returns {number} - */ - getDefaultExpireDate: function () { - return oc_appconfig.core.defaultExpireDate; } }); diff --git a/core/js/sharedialogexpirationview.js b/core/js/sharedialogexpirationview.js index 9fb404a090e..56473cdb1fa 100644 --- a/core/js/sharedialogexpirationview.js +++ b/core/js/sharedialogexpirationview.js @@ -14,13 +14,22 @@ } var TEMPLATE = - // well that could go to linkShareView… + // currently expiration is only effective for link share. + // this is about to change in future. Therefore this is not included + // in the LinkShareView to ease reusing it in future. Then, + // modifications (getting rid of IDs) are still necessary. '{{#if isLinkShare}}' + - '' + + '' + '' + - '' + - '' + + ' {{#if isExpirationSet}}' + + '' + + '' + + ' {{/if}}' + + ' {{#if isExpirationEnforced}}' + + // originally the expire message was shown when a default date was set, however it never had text '{{defaultExpireMessage}}' + + ' {{/if}}' + '{{/if}}' ; @@ -59,24 +68,58 @@ render: function() { var defaultExpireMessage = ''; + var defaultExpireDays = this.configModel.get('defaultExpireDate'); if( (this.model.isFolder() || this.model.isFile()) - && this.configModel.isDefaultExpireDateEnforced()) { + && this.configModel.get('isDefaultExpireDateEnforced')) { defaultExpireMessage = t( 'core', 'The public link will expire no later than {days} days after it is created', - {'days': this.configModel.getDefaultExpireDate()} + {'days': defaultExpireDays } ); } + var isExpirationSet = !!this.model.get('linkShare').expiration; + var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced'); + var expirationTemplate = this.template(); this.$el.html(expirationTemplate({ setExpirationLabel: t('core', 'Set expiration date'), expirationLabel: t('core', 'Expiration'), expirationDatePlaceholder: t('core', 'Expiration date'), defaultExpireMessage: defaultExpireMessage, - isLinkShare: this.model.get('linkShare').isLinkShare + isLinkShare: this.model.get('linkShare').isLinkShare, + isExpirationSet: isExpirationSet, + isExpirationEnforced: isExpirationEnforced, + disableCheckbox: isExpirationEnforced && isExpirationSet, + expirationValue: this.model.get('linkShare').expiration })); + if(isExpirationSet) { + // what if there is another date picker on that page? + var minDate = new Date(); + // min date should always be the next day + minDate.setDate(minDate.getDate()+1); + + var maxDate = null; + if(isExpirationEnforced) { + // TODO: hack: backend returns string instead of integer + var shareTime = this.model.get('linkShare').stime; + if (_.isNumber(shareTime)) { + shareTime = new Date(shareTime * 1000); + } + if (!shareTime) { + shareTime = new Date(); // now + } + shareTime = OC.Util.stripTime(shareTime).getTime(); + maxDate = new Date(shareTime + defaultExpireDays * 24 * 3600 * 1000); + } + + $.datepicker.setDefaults({ + minDate: minDate, + maxDate: maxDate + }); + } + return this; }, diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index 9bfe38eea3c..12e682a3b82 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -134,6 +134,7 @@ $this.imageplaceholder($this.data('seed')); }); } + this.$el.find('.datepicker').datepicker({dateFormat : 'dd-mm-yy'}); return this; }, diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index e8371e16e0a..24aa5fe344d 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -20,6 +20,8 @@ * @property {string} token * @property {string|null} password * @property {string} link + * @property {Date} expiration + * @property {number} stime share time */ /** @@ -445,7 +447,10 @@ isLinkShare: true, token: share.token, password: share.share_with, - link: link + link: link, + // currently expiration is only effective for link shares. + expiration: share.expiration, + stime: share.stime }; return share;