芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/public_html/cloud.pulsehost.co.uk/modules/MailWebclient/js/utils/Sending.js
'use strict'; var _ = require('underscore'), TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'), Types = require('%PathToCoreWebclientModule%/js/utils/Types.js'), Api = require('%PathToCoreWebclientModule%/js/Api.js'), App = require('%PathToCoreWebclientModule%/js/App.js'), Routing = require('%PathToCoreWebclientModule%/js/Routing.js'), Screens = require('%PathToCoreWebclientModule%/js/Screens.js'), CAddressModel = require('%PathToCoreWebclientModule%/js/models/CAddressModel.js'), CAddressListModel = require('%PathToCoreWebclientModule%/js/models/CAddressListModel.js'), MessageUtils = require('modules/%ModuleName%/js/utils/Message.js'), AccountList = require('modules/%ModuleName%/js/AccountList.js'), Ajax = require('modules/%ModuleName%/js/Ajax.js'), MailCache = require('modules/%ModuleName%/js/Cache.js'), Settings = require('modules/%ModuleName%/js/Settings.js'), MainTab = App.isNewTab() && window.opener && window.opener.MainTabMailMethods, SendingUtils = { sReplyText: '', sReplyDraftUid: '', oPostponedMailData: null } ; /** * @param {string} sText * @param {string} sDraftUid */ SendingUtils.setReplyData = function (sText, sDraftUid) { this.sReplyText = sText; this.sReplyDraftUid = sDraftUid; }; function getLongUid(parameters) { return `${parameters.AccountID}:${parameters.DraftFolder}:${parameters.DraftUid}`; } /** * @param {string} sMethod * @param {Object} oParameters * @param {boolean} bShowLoading * @param {Function} fSendMessageResponseHandler * @param {Object} oSendMessageResponseContext * @param {boolean=} bPostponedSending = false * @param {boolean=} bAddToSentFolder = true */ SendingUtils.send = function (sMethod, oParameters, bShowLoading, fSendMessageResponseHandler, oSendMessageResponseContext, bPostponedSending, bAddToSentFolder) { bAddToSentFolder = (typeof bAddToSentFolder === 'boolean') ? bAddToSentFolder : true; var iAccountID = oParameters.AccountID, oAccount = AccountList.getAccount(iAccountID), oFolderList = MailCache.oFolderListItems[iAccountID], sLoadingMessage = '', sSentFolder = oFolderList ? oFolderList.sentFolderFullName() : '', sDraftFolder = oFolderList ? oFolderList.draftsFolderFullName() : '', sCurrEmail = oAccount ? oAccount.email() : '', bSelfRecipient = (oParameters.To.indexOf(sCurrEmail) > -1 || oParameters.Cc.indexOf(sCurrEmail) > -1 || oParameters.Bcc.indexOf(sCurrEmail) > -1) ; if (oAccount.bSaveRepliesToCurrFolder && !bSelfRecipient && Types.isNonEmptyArray(oParameters.DraftInfo, 3)) { sSentFolder = oParameters.DraftInfo[2]; } oParameters.Method = sMethod; oParameters.ShowReport = bShowLoading; switch (sMethod) { case 'SendMessage': sLoadingMessage = TextUtils.i18n('COREWEBCLIENT/INFO_SENDING'); if (bAddToSentFolder) { if (!Types.isNonEmptyString(oParameters.SentFolder)) { oParameters.SentFolder = sSentFolder; } if (oParameters.DraftUid !== '') { oParameters.DraftFolder = sDraftFolder; if (MainTab) { MainTab.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid); MainTab.replaceHashWithoutMessageUid(getLongUid(oParameters)); } else { MailCache.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid); Routing.replaceHashWithoutMessageUid(getLongUid(oParameters)); } } } else { delete oParameters.SentFolder; delete oParameters.DraftUid; delete oParameters.DraftFolder; } break; case 'SaveMessage': sLoadingMessage = TextUtils.i18n('%MODULENAME%/INFO_SAVING'); if (typeof oParameters.DraftFolder === 'undefined') { oParameters.DraftFolder = sDraftFolder; } // Message with this uid will not be selected from message list MailCache.savingDraftUid(oParameters.DraftUid); if (MainTab) { MainTab.startMessagesLoadingWhenDraftSaving(oParameters.AccountID, oParameters.DraftFolder); MainTab.replaceHashWithoutMessageUid(getLongUid(oParameters)); } else { MailCache.startMessagesLoadingWhenDraftSaving(oParameters.AccountID, oParameters.DraftFolder); Routing.replaceHashWithoutMessageUid(getLongUid(oParameters)); } break; } if (bShowLoading) { Screens.showLoading(sLoadingMessage); } if (bPostponedSending) { this.postponedMailData = { 'Parameters': oParameters, 'SendMessageResponseHandler': fSendMessageResponseHandler, 'SendMessageResponseContext': oSendMessageResponseContext }; } else { Ajax.send(sMethod, oParameters, fSendMessageResponseHandler, oSendMessageResponseContext); } }; /** * @param {string} sDraftUid */ SendingUtils.sendPostponedMail = function (sDraftUid) { var oData = this.postponedMailData, oParameters = oData.Parameters, iAccountID = oParameters.AccountID, oFolderList = MailCache.oFolderListItems[iAccountID], sDraftFolder = oFolderList ? oFolderList.draftsFolderFullName() : '' ; if (sDraftUid !== '') { oParameters.DraftUid = sDraftUid; oParameters.DraftFolder = sDraftFolder; if (MainTab) { MainTab.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid); MainTab.replaceHashWithoutMessageUid(getLongUid(oParameters)); } else { MailCache.removeOneMessageFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder, oParameters.DraftUid); Routing.replaceHashWithoutMessageUid(getLongUid(oParameters)); } } if (this.postponedMailData) { Ajax.send(oParameters.Method, oParameters, oData.SendMessageResponseHandler, oData.SendMessageResponseContext); this.postponedMailData = null; } }; /** * @param {string} sMethod * @param {string} sText * @param {string} sDraftUid * @param {Function} fSendMessageResponseHandler * @param {Object} oSendMessageResponseContext * @param {boolean} bRequiresPostponedSending */ SendingUtils.sendReplyMessage = function (sMethod, sText, sDraftUid, fSendMessageResponseHandler, oSendMessageResponseContext, bRequiresPostponedSending) { var oParameters = null, oMessage = MailCache.currentMessage(), aRecipients = [], oFetcherOrIdentity = null ; if (oMessage) { aRecipients = oMessage.oTo.aCollection.concat(oMessage.oCc.aCollection); oFetcherOrIdentity = this.getFirstFetcherOrIdentityByRecipientsOrDefault(aRecipients, oMessage.accountId()); oParameters = this.getReplyDataFromMessage(oMessage, Enums.ReplyType.ReplyAll, oMessage.accountId(), oFetcherOrIdentity, false, sText, sDraftUid); oParameters.AccountID = oMessage.accountId(); if (oFetcherOrIdentity) { oParameters.IdentityID = oFetcherOrIdentity && oFetcherOrIdentity.IDENTITY ? oFetcherOrIdentity.id() : ''; oParameters.AliasID = oFetcherOrIdentity && oFetcherOrIdentity.ALIAS ? oFetcherOrIdentity.id() : ''; oParameters.FetcherID = oFetcherOrIdentity && oFetcherOrIdentity.FETCHER ? oFetcherOrIdentity.id() : ''; } oParameters.Bcc = ''; oParameters.Importance = Enums.Importance.Normal; oParameters.SendReadingConfirmation = false; oParameters.IsQuickReply = true; oParameters.IsHtml = true; oParameters.Attachments = this.convertAttachmentsForSending(oParameters.Attachments); this.send(sMethod, oParameters, false, fSendMessageResponseHandler, oSendMessageResponseContext, bRequiresPostponedSending); } }; /** * @param {Array} aAttachments * * @return {Object} */ SendingUtils.convertAttachmentsForSending = function (aAttachments) { var oAttachments = {}; _.each(aAttachments, function (oAttach) { oAttachments[oAttach.tempName()] = [ oAttach.fileName(), oAttach.linked() ? oAttach.cid() : '', oAttach.inline() ? '1' : '0', oAttach.linked() ? '1' : '0', oAttach.contentLocation() ]; }); return oAttachments; }; /** * @param {Object} oResponse * @param {Object} oRequest * @param {boolean} bRequiresPostponedSending * * @return {Object} */ SendingUtils.onSendOrSaveMessageResponse = function (oResponse, oRequest, bRequiresPostponedSending) { var oParameters = oRequest.Parameters, bResult = !!oResponse.Result, sFullName, sUid, sReplyType ; if (!bRequiresPostponedSending) { Screens.hideLoading(); } switch (oRequest.Method) { case 'SaveMessage': // All messages can not be selected from message list if message saving is done MailCache.savingDraftUid(''); if (!bResult) { if (oParameters.ShowReport) { if (-1 !== $.inArray(oRequest.Parameters.DraftFolder, MailCache.getCurrentTemplateFolders())) { Api.showErrorByCode(oResponse, TextUtils.i18n('%MODULENAME%/ERROR_TEMPLATE_SAVING'), true); } else { Api.showErrorByCode(oResponse, TextUtils.i18n('%MODULENAME%/ERROR_MESSAGE_SAVING'), true); } } } else { if (oParameters.ShowReport && !bRequiresPostponedSending) { if (-1 !== $.inArray(oRequest.Parameters.DraftFolder, MailCache.getCurrentTemplateFolders())) { Screens.showReport(TextUtils.i18n('%MODULENAME%/REPORT_TEMPLATE_SAVED')); } else { Screens.showReport(TextUtils.i18n('%MODULENAME%/REPORT_MESSAGE_SAVED')); } } if (!oResponse.Result.NewUid) { Settings.AllowAutosaveInDrafts = false; } } break; case 'SendMessage': if (!bResult) { Api.showErrorByCode(oResponse, TextUtils.i18n('%MODULENAME%/ERROR_MESSAGE_SENDING'), true); } else { if (oParameters.IsQuickReply) { Screens.showReport(TextUtils.i18n('%MODULENAME%/REPORT_MESSAGE_SENT')); } else { if (MainTab) { MainTab.showReport(TextUtils.i18n('%MODULENAME%/REPORT_MESSAGE_SENT')); } else { Screens.showReport(TextUtils.i18n('%MODULENAME%/REPORT_MESSAGE_SENT')); } } if (_.isArray(oParameters.DraftInfo) && oParameters.DraftInfo.length === 3) { sReplyType = oParameters.DraftInfo[0]; sUid = oParameters.DraftInfo[1]; sFullName = oParameters.DraftInfo[2]; MailCache.markMessageReplied(oParameters.AccountID, sFullName, sUid, sReplyType); } } if (oParameters.SentFolder) { if (MainTab) { MainTab.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.SentFolder); } else { MailCache.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.SentFolder); } } break; } if (oParameters.DraftFolder && !bRequiresPostponedSending) { if (MainTab) { MainTab.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder); } else { MailCache.removeMessagesFromCacheForFolder(oParameters.AccountID, oParameters.DraftFolder); } } return {Method: oRequest.Method, Result: bResult, NewUid: oResponse.Result ? oResponse.Result.NewUid : ''}; }; SendingUtils.getReplytoAddresses = function (oMessage) { var oReplytoAddresses = oMessage.oReplyTo; if (oReplytoAddresses.getFull() === '' || oMessage.oFrom.getFirstEmail() === oReplytoAddresses.getFirstEmail() && oReplytoAddresses.getFirstName() === '') { oReplytoAddresses = oMessage.oFrom; } return oReplytoAddresses; }; /** * @param {Object} oMessage * @param {string} sReplyType * @param {number} iAccountId * @param {Object} oFetcherOrIdentity * @param {boolean} bPasteSignatureAnchor * @param {string} sText * @param {string} sDraftUid * * @return {Object} */ SendingUtils.getReplyDataFromMessage = function (oMessage, sReplyType, iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor, sText, sDraftUid) { var oReplyData = { DraftInfo: [], DraftUid: '', To: '', Cc: '', Bcc: '', Subject: '', Attachments: [], InReplyTo: oMessage.messageId(), References: this.getReplyReferences(oMessage) }, aAttachmentsLink = [], oReplytoAddresses = this.getReplytoAddresses(oMessage), sToAddr = oReplytoAddresses.getFull() ; if (!sText || sText === '') { sText = this.sReplyText; this.sReplyText = ''; } if (sReplyType === 'forward') { oReplyData.Text = sText + this.getForwardMessageBody(oMessage, iAccountId, oFetcherOrIdentity); } else if (sReplyType === 'resend') { oReplyData.Text = oMessage.getConvertedHtml(); oReplyData.Cc = oMessage.cc(); oReplyData.Bcc = oMessage.bcc(); } else { oReplyData.Text = sText + GetReplyMessageBody.call(this, oMessage, iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor); } if (sDraftUid) { oReplyData.DraftUid = sDraftUid; } else { oReplyData.DraftUid = this.sReplyDraftUid; this.sReplyDraftUid = ''; } switch (sReplyType) { case Enums.ReplyType.Reply: oReplyData.DraftInfo = [Enums.ReplyType.Reply, oMessage.uid(), oMessage.folder()]; oReplyData.To = sToAddr; oReplyData.Subject = this.getReplySubject(oMessage.subject(), true); aAttachmentsLink = _.filter(oMessage.attachments(), function (oAttach) { return oAttach.linked(); }); break; case Enums.ReplyType.ReplyAll: oReplyData.DraftInfo = [Enums.ReplyType.ReplyAll, oMessage.uid(), oMessage.folder()]; oReplyData.To = sToAddr; oReplyData.Cc = this.getReplyAllCcAddr(oMessage, iAccountId, oFetcherOrIdentity); oReplyData.Subject = this.getReplySubject(oMessage.subject(), true); aAttachmentsLink = _.filter(oMessage.attachments(), function (oAttach) { return oAttach.linked(); }); break; case Enums.ReplyType.Resend: oReplyData.DraftInfo = [Enums.ReplyType.Resend, oMessage.uid(), oMessage.folder(), oMessage.cc(), oMessage.bcc()]; oReplyData.To = oMessage.oTo.getFull(); oReplyData.Subject = oMessage.subject(); aAttachmentsLink = oMessage.attachments(); break; case Enums.ReplyType.ForwardAsAttach: case Enums.ReplyType.Forward: oReplyData.DraftInfo = [Enums.ReplyType.Forward, oMessage.uid(), oMessage.folder()]; oReplyData.Subject = this.getReplySubject(oMessage.subject(), false); aAttachmentsLink = oMessage.attachments(); break; } _.each(aAttachmentsLink, function (oAttachLink) { if (oAttachLink.getCopy) { var oCopy = oAttachLink.getCopy(); oReplyData.Attachments.push(oCopy); } }); return oReplyData; }; /** * Prepares and returns references for reply message. * * @param {Object} oMessage * * @return {string} */ SendingUtils.getReplyReferences = function (oMessage) { var sRef = oMessage.references(), sInR = oMessage.messageId(), sPos = sRef.indexOf(sInR) ; if (sPos === -1) { sRef += ' ' + sInR; } return sRef; }; /** * @param {Object} oMessage * @param {number} iAccountId * @param {Object} oFetcherOrIdentity * @param {boolean} bPasteSignatureAnchor * * @return {string} */ function GetReplyMessageBody(oMessage, iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor) { var sReplyTitle = TextUtils.i18n('%MODULENAME%/TEXT_REPLY_MESSAGE', { 'DATE': oMessage.oDateModel.getDate(), 'TIME': oMessage.oDateModel.getTime(), 'SENDER': TextUtils.encodeHtml(oMessage.oFrom.getFull()) }), sReplyBody = '
' + this.getSignatureText(iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor) + '
' + '
' + sReplyTitle + '
' + oMessage.getConvertedHtml() + '
' ; return sReplyBody; } /** * @param {number} iAccountId * @param {Object} oFetcherOrIdentity * * @return {string} */ SendingUtils.getClearSignature = function (iAccountId, oFetcherOrIdentity) { var oAccount = AccountList.getAccount(iAccountId), sSignature = '' ; if (oFetcherOrIdentity && oFetcherOrIdentity.accountId() === iAccountId) { if (oFetcherOrIdentity.useSignature()) { sSignature = oFetcherOrIdentity.signature(); } } else if (oAccount && oAccount.useSignature()) { sSignature = oAccount.signature(); } return sSignature; }; /** * @param {number} iAccountId * @param {Object} oFetcherOrIdentity * @param {boolean} bPasteSignatureAnchor * * @return {string} */ SendingUtils.getSignatureText = function (iAccountId, oFetcherOrIdentity, bPasteSignatureAnchor) { var sSignature = this.getClearSignature(iAccountId, oFetcherOrIdentity); if (bPasteSignatureAnchor) { return '
' + sSignature + '
'; } return '
' + sSignature + '
'; }; /** * @param {Array} aRecipients * @param {number} iAccountId * * @return Object */ SendingUtils.getFirstFetcherOrIdentityByRecipientsOrDefault = function (aRecipients, iAccountId) { var oAccount = AccountList.getAccount(iAccountId), aList = this.getAccountFetchersIdentitiesList(oAccount), aEqualEmailList = [], oFoundFetcherOrIdentity = null ; _.each(aRecipients, function (oAddr) { if (!oFoundFetcherOrIdentity) { aEqualEmailList = _.filter(aList, function (oItem) { return oAddr.sEmail === oItem.email; }); switch (aEqualEmailList.length) { case 0: break; case 1: oFoundFetcherOrIdentity = aEqualEmailList[0]; break; default: oFoundFetcherOrIdentity = _.find(aEqualEmailList, function (oItem) { return oAddr.sEmail === oItem.email && oAddr.sName === oItem.name; }); if (!oFoundFetcherOrIdentity) { oFoundFetcherOrIdentity = _.find(aEqualEmailList, function (oItem) { return oItem.isDefault; }); if (!oFoundFetcherOrIdentity) { oFoundFetcherOrIdentity = aEqualEmailList[0]; } } break; } } }); if (!oFoundFetcherOrIdentity) { oFoundFetcherOrIdentity = _.find(aList, function (oItem) { return oItem.isDefault; }); } return oFoundFetcherOrIdentity && oFoundFetcherOrIdentity.result; }; /** * @param {Object} oAccount * @returns {Array} */ SendingUtils.getAccountFetchersIdentitiesList = function (oAccount) { var aList = []; if (oAccount) { _.each(oAccount.fetchers(), function (oFetcher) { aList.push({ 'email': oFetcher.email(), 'name': oFetcher.userName(), 'isDefault': false, 'result': oFetcher }); }); _.each(oAccount.identities(), function (oIdnt) { aList.push({ 'email': oIdnt.email(), 'name': oIdnt.friendlyName(), 'isDefault': oIdnt.isDefault(), 'result': oIdnt }); }); _.each(oAccount.aliases(), function (oAlias) { aList.push({ 'email': oAlias.email(), 'name': oAlias.friendlyName(), 'isDefault': false, 'result': oAlias }); }); } return aList; }; /** * @param {Object} oMessage * @param {number} iAccountId * @param {Object} oFetcherOrIdentity * * @return {string} */ SendingUtils.getForwardMessageBody = function (oMessage, iAccountId, oFetcherOrIdentity) { var sCcAddr = TextUtils.encodeHtml(oMessage.oCc.getFull()), sCcPart = (sCcAddr !== '') ? TextUtils.i18n('%MODULENAME%/TEXT_FORWARD_MESSAGE_CCPART', {'CCADDR': sCcAddr}) : '', sForwardTitle = TextUtils.i18n('%MODULENAME%/TEXT_FORWARD_MESSAGE', { 'FROMADDR': TextUtils.encodeHtml(oMessage.oFrom.getFull()), 'TOADDR': TextUtils.encodeHtml(oMessage.oTo.getFull()), 'CCPART': sCcPart, 'FULLDATE': oMessage.oDateModel.getFullDate(), 'SUBJECT': TextUtils.encodeHtml(oMessage.subject()) }), sForwardBody = '
' + this.getSignatureText(iAccountId, oFetcherOrIdentity, true) + '
' + '
' + sForwardTitle + '
' + oMessage.getConvertedHtml() ; return sForwardBody; }; SendingUtils.hasReplyAllCcAddrs = function (oMessage) { var iAccountId = oMessage.accountId(), aRecipients = oMessage.oTo.aCollection.concat(oMessage.oCc.aCollection), oFetcherOrIdentity = this.getFirstFetcherOrIdentityByRecipientsOrDefault(aRecipients, oMessage.accountId()), sCcAddrs = this.getReplyAllCcAddr(oMessage, iAccountId, oFetcherOrIdentity) ; return sCcAddrs !== ''; }; /** * Prepares and returns cc address for reply message. * * @param {Object} oMessage * @param {number} iAccountId * @param {Object} oFetcherOrIdentity * * @return {string} */ SendingUtils.getReplyAllCcAddr = function (oMessage, iAccountId, oFetcherOrIdentity) { var oAddressList = new CAddressListModel(), aAddrCollection = _.union(oMessage.oTo.aCollection, oMessage.oCc.aCollection, oMessage.oBcc.aCollection), oCurrAccount = _.find(AccountList.collection(), function (oAccount) { return oAccount.id() === iAccountId; }, this), oCurrAccAddress = new CAddressModel(), oFetcherAddress = new CAddressModel(), oReplytoAddresses = this.getReplytoAddresses(oMessage) ; oCurrAccAddress.sEmail = oCurrAccount.email(); oFetcherAddress.sEmail = oFetcherOrIdentity ? oFetcherOrIdentity.email() : ''; oAddressList.addCollection(aAddrCollection); oAddressList.excludeCollection(_.union(oReplytoAddresses.aCollection, [oCurrAccAddress, oFetcherAddress])); return oAddressList.getFull(); }; /** * Obtains a subject of the message, which is the answer (reply or forward): * - adds the prefix "Re" of "Fwd" if the language is English, otherwise - their translation * - joins "Re" and "Fwd" prefixes if it is allowed for application in settings * * @param {string} sSubject Subject of the message, the answer to which is composed * @param {boolean} bReply If **true** the prefix will be "Re", otherwise - "Fwd" * * @return {string} */ SendingUtils.getReplySubject = function (sSubject, bReply) { var sRePrefix = TextUtils.i18n('%MODULENAME%/TEXT_REPLY_PREFIX'), sFwdPrefix = TextUtils.i18n('%MODULENAME%/TEXT_FORWARD_PREFIX'), sPrefix = bReply ? sRePrefix : sFwdPrefix, sReSubject = sPrefix + ': ' + sSubject ; if (Settings.JoinReplyPrefixes) { sReSubject = MessageUtils.joinReplyPrefixesInSubject(sReSubject, sRePrefix, sFwdPrefix); } return sReSubject; }; /** * @param {string} sPlain * * @return {string} */ SendingUtils.getHtmlFromText = function (sPlain) { return sPlain .replace(/&/g, '&').replace(/>/g, '>').replace(/') ; }; module.exports = SendingUtils;