芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/cloud.pulsehost.co.uk/modules/OpenPgpFilesWebclient/js/popups/SharePopup.js
'use strict'; let _ = require('underscore'), ko = require('knockout'), TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'), UrlUtils = require('%PathToCoreWebclientModule%/js/utils/Url.js'), Ajax = require('%PathToCoreWebclientModule%/js/Ajax.js'), App = require('%PathToCoreWebclientModule%/js/App.js'), CAbstractPopup = require('%PathToCoreWebclientModule%/js/popups/CAbstractPopup.js'), ModulesManager = require('%PathToCoreWebclientModule%/js/ModulesManager.js'), Popups = require('%PathToCoreWebclientModule%/js/Popups.js'), Screens = require('%PathToCoreWebclientModule%/js/Screens.js'), ErrorsUtils = require('modules/%ModuleName%/js/utils/Errors.js'), ShowHistoryPopup = ModulesManager.run('ActivityHistory', 'getShowHistoryPopup'), OpenPgpEncryptor = ModulesManager.run('OpenPgpWebclient', 'getOpenPgpEncryptor') ; /** * @constructor */ function CSharePopup() { CAbstractPopup.call(this); this.item = null; this.publicLink = ko.observable(''); this.password = ko.observable(''); this.publicLinkFocus = ko.observable(false); this.isRemovingPublicLink = ko.observable(false); this.recipientAutocomplete = ko.observable(''); this.recipientAutocompleteItem = ko.observable(null); this.isEmailEncryptionAvailable = ko.observable(false); this.sendLinkHintText = ko.observable(''); this.linkLabel = ko.computed(function () { if (this.password()) { return TextUtils.i18n('%MODULENAME%/LABEL_PROTECTED_PUBLIC_LINK'); } return TextUtils.i18n('%MODULENAME%/LABEL_PUBLIC_LINK'); }, this); this.signEmailHintText = ko.observable(TextUtils.i18n('%MODULENAME%/HINT_NOT_SIGN_EMAIL')); this.sign = ko.observable(false); this.isPrivateKeyAvailable = ko.observable(false); this.isSigningAvailable = ko.observable(false); this.sUserEmail = ''; this.recipientAutocompleteItem.subscribe( oItem => { if (oItem) { let sHint = TextUtils.i18n('%MODULENAME%/HINT_SEND_LINK'); if (oItem.hasKey) { if (this.password()) { sHint = TextUtils.i18n('%MODULENAME%/HINT_SEND_LINK_AND_PASSWORD'); this.isEmailEncryptionAvailable(true); } else { this.isEmailEncryptionAvailable(false); } if (this.isPrivateKeyAvailable() && this.isEmailEncryptionAvailable()) { sHint = TextUtils.i18n('%MODULENAME%/HINT_SEND_LINK_AND_PASSWORD_SIGNED'); this.isSigningAvailable(true); this.sign(true); } } else { this.isEmailEncryptionAvailable(false); if (this.password()) { sHint = TextUtils.i18n('%MODULENAME%/HINT_SEND_DIFFERENT_CHANNEL'); } this.isSigningAvailable(false); this.sign(false); } this.sendLinkHintText(sHint); } else { this.isSigningAvailable(false); this.sign(false); } }); this.sign.subscribe(bSign => { if (bSign) { this.signEmailHintText(TextUtils.i18n('%MODULENAME%/HINT_SIGN_EMAIL')); this.sendLinkHintText(TextUtils.i18n('%MODULENAME%/HINT_SEND_LINK_AND_PASSWORD_SIGNED')); } else { this.signEmailHintText(TextUtils.i18n('%MODULENAME%/HINT_NOT_SIGN_EMAIL')); this.sendLinkHintText(TextUtils.i18n('%MODULENAME%/HINT_SEND_LINK_AND_PASSWORD')); } }); this.composeMessageWithData = ModulesManager.run('MailWebclient', 'getComposeMessageWithData'); this.bAllowSendMessage = !!this.composeMessageWithData; this.bAllowShowHistory = !!ShowHistoryPopup; this.addButtons = ko.observableArray([]); } _.extendOwn(CSharePopup.prototype, CAbstractPopup.prototype); CSharePopup.prototype.PopupTemplate = '%ModuleName%_SharePopup'; /** * @param {Object} oItem */ CSharePopup.prototype.onOpen = async function (oItem) { this.item = oItem; this.publicLink(''); this.password(''); if (this.item.published() && this.item.oExtendedProps && this.item.oExtendedProps.PublicLink ) { this.publicLink(UrlUtils.getAppPath() + this.item.oExtendedProps.PublicLink); this.publicLinkFocus(true); this.password(this.item.oExtendedProps.PasswordForSharing ? this.item.oExtendedProps.PasswordForSharing : ''); await OpenPgpEncryptor.oPromiseInitialised; this.sUserEmail = App.currentAccountEmail ? App.currentAccountEmail() : ''; const aPrivateKeys = OpenPgpEncryptor.findKeysByEmails([this.sUserEmail], false); if (aPrivateKeys.length > 0) { this.isPrivateKeyAvailable(true); } else { this.isPrivateKeyAvailable(false); } var oParams = { AddButtons: [], Item: oItem }; App.broadcastEvent('%ModuleName%::OpenSharePopup::after', oParams); this.addButtons(oParams.AddButtons); } else { Screens.showError(TextUtils.i18n('%MODULENAME%/ERROR_GET_PUBLIC_LINK')); } }; CSharePopup.prototype.cancelPopup = function () { this.clearPopup(); this.closePopup(); }; CSharePopup.prototype.clearPopup = function () { this.recipientAutocompleteItem(null); this.recipientAutocomplete(''); this.sign(false); this.isEmailEncryptionAvailable(false); this.sUserEmail = ''; }; CSharePopup.prototype.onCancelSharingClick = function () { if (this.item) { this.isRemovingPublicLink(true); Ajax.send('Files', 'DeletePublicLink', { 'Type': this.item.storageType(), 'Path': this.item.path(), 'Name': this.item.fileName() }, this.onCancelSharingResponse, this ); } }; CSharePopup.prototype.onCancelSharingResponse = function (oResponse, oRequest) { this.isRemovingPublicLink(false); if (oResponse.Result) { this.item.published(false); this.item.oExtendedProps.PublicLink = null; if (this.item.oExtendedProps.PasswordForSharing) { this.item.oExtendedProps.PasswordForSharing = null; } this.cancelPopup(); } else { Screens.showError(TextUtils.i18n('%MODULENAME%/ERROR_DELETE_PUBLIC_LINK')); } }; /** * @param {object} oRequest * @param {function} fResponse */ CSharePopup.prototype.autocompleteCallback = function (oRequest, fResponse) { if (!this.item) { fResponse([]); return; } const suggestParameters = { storage: 'all', addContactGroups: false, addUserGroups: false, exceptEmail: this.item.sOwnerName }, autocompleteCallback = ModulesManager.run( 'ContactsWebclient', 'getSuggestionsAutocompleteCallback', [suggestParameters] ) ; if (_.isFunction(autocompleteCallback)) { this.recipientAutocompleteItem(null); autocompleteCallback(oRequest, fResponse); } }; CSharePopup.prototype.sendEmail = async function () { const sSubject = TextUtils.i18n('%MODULENAME%/PUBLIC_LINK_MESSAGE_SUBJECT', {'FILENAME': this.item.fileName()}); if (this.recipientAutocompleteItem().hasKey && this.isEmailEncryptionAvailable()) {//message is encrypted let sBody = ''; if (this.password()) { sBody = TextUtils.i18n('%MODULENAME%/ENCRYPTED_LINK_MESSAGE_BODY_WITH_PASSWORD', { 'URL': this.publicLink(), 'BR': '\r\n', 'PASSWORD': this.password() } ); } else { sBody = TextUtils.i18n('%MODULENAME%/ENCRYPTED_LINK_MESSAGE_BODY', { 'URL': this.publicLink(), 'BR': '\r\n' } ); } const contactEmail = this.recipientAutocompleteItem().email, contactUUID = this.recipientAutocompleteItem().uuid, encryptResult = await OpenPgpEncryptor.encryptMessage(sBody, contactEmail, this.sign(), '', this.sUserEmail, contactUUID ) ; if (encryptResult && encryptResult.result) { const sEncryptedBody = encryptResult.result; this.composeMessageWithData({ to: this.recipientAutocompleteItem().value, subject: sSubject, body: sEncryptedBody, isHtml: false }); this.cancelPopup(); } else if (!encryptResult || !encryptResult.userCanceled) { ErrorsUtils.showPgpErrorByCode(encryptResult, Enums.PgpAction.Encrypt); } } else {//message is not encrypted const sBody = TextUtils.i18n('%MODULENAME%/LINK_MESSAGE_BODY', {'URL': this.publicLink()}); this.composeMessageWithData({ to: this.recipientAutocompleteItem().value, subject: sSubject, body: sBody, isHtml: true }); this.cancelPopup(); } }; CSharePopup.prototype.showHistory = function () { if (this.bAllowShowHistory) { Popups.showPopup(ShowHistoryPopup, [TextUtils.i18n('%MODULENAME%/HEADING_HISTORY_POPUP'), this.item]); } } module.exports = new CSharePopup();