PATH:
home
/
letacommog
/
crmleta
/
layouts
/
v7
/
modules
/
Emails
/
resources
/*+*********************************************************************************** * The contents of this file are subject to the vtiger CRM Public License Version 1.0 * ("License"); You may not use this file except in compliance with the License * The Original Code is: vtiger CRM Open Source * The Initial Developer of the Original Code is vtiger. * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. *************************************************************************************/ jQuery.Class("Emails_MassEdit_Js",{},{ init: function () { this.preloadData = new Array(); }, ckEditorInstance : false, massEmailForm : false, saved : "SAVED", sent : "SENT", attachmentsFileSize : 0, documentsFileSize : 0, getPreloadData : function() { return this.preloadData; }, setPreloadData : function(dataInfo){ this.preloadData = dataInfo; return this; }, /* * Function to get the Mass Email Form */ getMassEmailForm : function(){ if(this.massEmailForm == false){ this.massEmailForm = jQuery("#massEmailForm"); } return this.massEmailForm; }, /** * Function to get ckEditorInstance */ getckEditorInstance : function(){ if(this.ckEditorInstance == false){ this.ckEditorInstance = new Vtiger_CkEditor_Js(); } return this.ckEditorInstance; }, /** * function to display the email form * return UI */ showComposeEmailForm : function(params){ var aDeferred = jQuery.Deferred(); var thisInstance = this; app.request.post({data:params}).then(function(err,data){ app.helper.hideProgress(); if(err == null) { var modalContainer = app.helper.showModal(data, {cb: function(){ thisInstance.registerEvents(); }}); return aDeferred.resolve(modalContainer); } }); return aDeferred.promise(); }, /** * function to call the registerevents of send Email step1 */ registerEmailFieldSelectionEvent : function(callBack){ var thisInstance = this; var selectEmailForm = jQuery("#SendEmailFormStep1"); selectEmailForm.on('submit',function(e){ e.preventDefault(); var form = jQuery(e.currentTarget); var checkedEmails = form.find('.emailField:checked').length; if (checkedEmails < 1) { app.helper.showErrorNotification({message: app.vtranslate("JS_PLEASE_SELECT_ATLEAST_ONE_OPTION")}); return false; } //added check to handle save recipient email preferences var saveRecipientPref = form.find('#saveRecipientPrefs').is(':checked'); if (saveRecipientPref) { var selectedFieldEles = form.find('.emailField').filter(':checked'); var selectedFields = new Array(); jQuery.each(selectedFieldEles, function (i, ele) { selectedFields.push(JSON.parse(jQuery(ele).val())); }); var params = { module: app.getModuleName(), action: "RecipientPreferencesSaveAjax", selectedFields: selectedFields, source_module: form.find('input[name="source_module"]').val() }; app.request.post({"data":params}); } var params = form.serialize(); app.helper.showProgress(); app.helper.hideModal().then(function(e){ thisInstance.showComposeEmailForm(params).then(function(response){ if (typeof callBack === 'function') { callBack(response); } }); }); }); }, registerPreventFormSubmitEvent : function(){ var form = this.getMassEmailForm(); form.on('submit',function(e){ e.preventDefault(); }).on('keypress',function(e){ if(e.which == 13){ e.preventDefault(); } }); }, /** * Function to register select Email Template click event * @returns {undefined} */ registerSelectEmailTemplateEvent : function(){ var thisInstance = this; jQuery("#selectEmailTemplate").on("click",function(e){ var url = "index.php?"+jQuery(e.currentTarget).data('url'); var postParams = app.convertUrlToDataParams(url); app.request.post({data:postParams}).then(function(err,data){ if(err === null){ jQuery('.popupModal').remove(); var ele = jQuery('<div class="modal popupModal"></div>'); ele.append(data); jQuery('body').append(ele); thisInstance.showpopupModal(); app.event.trigger("post.Popup.Load",{"eventToTrigger":"post.EmailTemplateList.click"}) } }); }); }, showpopupModal : function(){ var thisInstance = this; vtUtils.applyFieldElementsView(jQuery('.popupModal')); jQuery('.popupModal').modal(); jQuery('.popupModal').on('shown.bs.modal', function() { jQuery('.myModal').css('opacity', .5); jQuery('.myModal').unbind(); }); jQuery('.popupModal').on('hidden.bs.modal', function() { this.remove(); jQuery('.myModal').css('opacity', 1); jQuery('.myModal').removeData("modal").modal(app.helper.defaultModalParams()); jQuery('.myModal').bind(); }); }, registerSaveDraftOrSendEmailEvent : function(){ var thisInstance = this; var form = this.getMassEmailForm(); form.on('click','#sendEmail, #saveDraft',function(e){ var targetName = jQuery(e.currentTarget).attr('name'); if(targetName === 'savedraft'){ jQuery('#flag').val(thisInstance.saved); } else { jQuery('#flag').val(thisInstance.sent); } var params = { submitHandler: function(form) { form = jQuery(form); app.helper.hideModal(); app.helper.showProgress(); if (CKEDITOR.instances['description']) { form.find('#description').val(CKEDITOR.instances['description'].getData()); } var data = new FormData(form[0]); var postParams = { data:data, // jQuery will set contentType = multipart/form-data based on data we are sending contentType:false, // we don’t want jQuery trying to transform file data into a huge query string, we want raw data to be sent to server processData:false }; app.request.post(postParams).then(function(err,data){ app.helper.hideProgress(); var ele = jQuery(data); var success = ele.find('.mailSentSuccessfully'); if(success.length <= 0){ app.helper.showModal(data); } else { app.event.trigger('post.mail.sent',data); } }); } }; form.vtValidate(params); }); }, /* * Function to register the events for bcc and cc links */ registerCcAndBccEvents : function(){ var thisInstance = this; jQuery('#ccLink').on('click',function(e){ jQuery('.ccContainer').removeClass("hide"); jQuery(e.currentTarget).hide(); }); jQuery('#bccLink').on('click',function(e){ jQuery('.bccContainer').removeClass("hide"); jQuery(e.currentTarget).hide(); }); }, /** * Function which will handle the reference auto complete event registrations * @params - container <jQuery> - element in which auto complete fields needs to be searched */ registerAutoCompleteFields : function(container) { var thisInstance = this; var lastResults = []; container.find('#emailField').select2({ minimumInputLength: 3, closeOnSelect : false, tags : [], tokenSeparators: [","], ajax : { 'url' : 'index.php?module=Emails&action=BasicAjax', 'dataType' : 'json', 'data' : function(term,page){ var data = {}; data['searchValue'] = term; return data; }, 'results' : function(data){ var finalResult = []; var results = data.result; var resultData = new Array(); for(var moduleName in results) { var moduleResult = []; moduleResult.text = moduleName; var children = new Array(); for(var recordId in data.result[moduleName]) { var emailInfo = data.result[moduleName][recordId]; for (var i in emailInfo) { var childrenInfo = []; childrenInfo.recordId = recordId; childrenInfo.id = emailInfo[i].value; childrenInfo.text = emailInfo[i].label; children.push(childrenInfo); } } moduleResult.children = children; resultData.push(moduleResult); } finalResult.results = resultData; lastResults = resultData; return finalResult; }, transport : function(params) { return jQuery.ajax(params); } }, createSearchChoice : function(term) { //checking for results if there is any if not creating as value if(lastResults.length == 0) { return { id: term, text: term }; } }, escapeMarkup: function(m) { // Do not escape HTML in the select options text return m; }, }).on("change", function (selectedData) { var addedElement = selectedData.added; if (typeof addedElement != 'undefined') { var data = { 'id' : addedElement.recordId, 'name' : addedElement.text, 'emailid' : addedElement.id } thisInstance.addToEmails(data); if (typeof addedElement.recordId != 'undefined') { thisInstance.addToEmailAddressData(data); thisInstance.appendToSelectedIds(addedElement.recordId); } var preloadData = thisInstance.getPreloadData(); var emailInfo = { 'id' : addedElement.id } if (typeof addedElement.recordId != 'undefined') { emailInfo['text'] = addedElement.text; emailInfo['recordId'] = addedElement.recordId; } else { emailInfo['text'] = addedElement.id; } preloadData.push(emailInfo); thisInstance.setPreloadData(preloadData); } var removedElement = selectedData.removed; if (typeof removedElement != 'undefined') { var data = { 'id' : removedElement.recordId, 'name' : removedElement.text, 'emailid' : removedElement.id } thisInstance.removeFromEmails(data); if (typeof removedElement.recordId != 'undefined') { thisInstance.removeFromSelectedIds(removedElement.recordId); thisInstance.removeFromEmailAddressData(data); } var preloadData = thisInstance.getPreloadData(); var updatedPreloadData = []; for(var i in preloadData) { var preloadDataInfo = preloadData[i]; var skip = false; if (removedElement.id == preloadDataInfo.id) { skip = true; } if (skip == false) { updatedPreloadData.push(preloadDataInfo); } } thisInstance.setPreloadData(updatedPreloadData); } }); container.find('#emailField').select2("container").find("ul.select2-choices").sortable({ containment: 'parent', start: function(){ container.find('#emailField').select2("onSortStart"); }, update: function(){ container.find('#emailField').select2("onSortEnd"); } }); var toEmailNamesList = JSON.parse(container.find('[name="toMailNamesList"]').val()); var toEmailInfo = JSON.parse(container.find('[name="toemailinfo"]').val()); var toEmails = container.find('[name="toEmail"]').val(); var toFieldValues = Array(); if (toEmails.length > 0) { toFieldValues = toEmails.split(','); } var preloadData = thisInstance.getPreloadData(); if (typeof toEmailInfo != 'undefined') { for(var key in toEmailInfo) { if (toEmailNamesList.hasOwnProperty(key)) { for (var i in toEmailNamesList[key]) { var emailInfo = []; var emailId = toEmailNamesList[key][i].value; var emailInfo = { 'recordId' : key, 'id' : emailId, 'text' : toEmailNamesList[key][i].label+' <b>('+emailId+')</b>' } preloadData.push(emailInfo); if (jQuery.inArray(emailId, toFieldValues) != -1) { var index = toFieldValues.indexOf(emailId); if (index !== -1) { toFieldValues.splice(index, 1); } } } } } } if (typeof toFieldValues != 'undefined') { for(var i in toFieldValues) { var emailId = toFieldValues[i]; var emailInfo = { 'id' : emailId, 'text' : emailId } preloadData.push(emailInfo); } } if (typeof preloadData != 'undefined') { thisInstance.setPreloadData(preloadData); container.find('#emailField').select2('data', preloadData); } }, removeFromEmailAddressData : function(mailInfo) { var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]'); var previousValue = JSON.parse(mailInfoElement.val()); var elementSize = previousValue[mailInfo.id].length; var emailAddress = mailInfo.emailid; var selectedId = mailInfo.id; //If element length is not more than two delete existing record. if(elementSize < 2){ delete previousValue[selectedId]; } else { // Update toemailinfo hidden element value var newValue; var reserveValue = previousValue[selectedId]; delete previousValue[selectedId]; //Remove value from an array and return the resultant array newValue = jQuery.grep(reserveValue, function(value) { return value != emailAddress; }); previousValue[selectedId] = newValue; //update toemailnameslist hidden element value } mailInfoElement.val(JSON.stringify(previousValue)); }, removeFromSelectedIds : function(selectedId) { var selectedIdElement = this.getMassEmailForm().find('[name="selected_ids"]'); var previousValue = JSON.parse(selectedIdElement.val()); var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]'); var mailAddress = JSON.parse(mailInfoElement.val()); var elements = mailAddress[selectedId]; var noOfEmailAddress = elements.length; //Don't remove id from selected_ids if element is having more than two email id's if(noOfEmailAddress < 2){ var updatedValue = []; for (var i in previousValue) { var id = previousValue[i]; var skip = false; if (id == selectedId) { skip = true; } if (skip == false) { updatedValue.push(id); } } selectedIdElement.val(JSON.stringify(updatedValue)); } }, removeFromEmails : function(mailInfo){ var toEmails = this.getMassEmailForm().find('[name="to"]'); var previousValue = JSON.parse(toEmails.val()); var updatedValue = []; for (var i in previousValue) { var email = previousValue[i]; var skip = false; if (email == mailInfo.emailid) { skip = true; } if (skip == false) { updatedValue.push(email); } } toEmails.val(JSON.stringify(updatedValue)); }, addToEmails : function(mailInfo){ var toEmails = this.getMassEmailForm().find('[name="to"]'); var value = JSON.parse(toEmails.val()); if(value == ""){ value = new Array(); } value.push(mailInfo.emailid); toEmails.val(JSON.stringify(value)); }, addToEmailAddressData : function(mailInfo) { var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]'); var existingToMailInfo = JSON.parse(mailInfoElement.val()); if(typeof existingToMailInfo.length != 'undefined') { existingToMailInfo = {}; } //If same record having two different email id's then it should be appended to //existing email id if(existingToMailInfo.hasOwnProperty(mailInfo.id) === true){ var existingValues = existingToMailInfo[mailInfo.id]; var newValue = new Array(mailInfo.emailid); existingToMailInfo[mailInfo.id] = jQuery.merge(existingValues,newValue); } else { existingToMailInfo[mailInfo.id] = new Array(mailInfo.emailid); } mailInfoElement.val(JSON.stringify(existingToMailInfo)); }, appendToSelectedIds : function(selectedId) { var selectedIdElement = this.getMassEmailForm().find('[name="selected_ids"]'); var previousValue = ''; if(JSON.parse(selectedIdElement.val()) != '') { previousValue = JSON.parse(selectedIdElement.val()); //If value doesn't exist then insert into an array if(jQuery.inArray(selectedId,previousValue) === -1){ previousValue.push(selectedId); } } else { previousValue = new Array(selectedId); } selectedIdElement.val(JSON.stringify(previousValue)); }, checkHiddenStatusofCcandBcc : function(){ var ccLink = jQuery('#ccLink'); var bccLink = jQuery('#bccLink'); if(ccLink.is(':hidden') && bccLink.is(':hidden')){ ccLink.closest('div.row').addClass('hide'); } }, loadCkEditor : function(textAreaElement){ var ckEditorInstance = this.getckEditorInstance(); ckEditorInstance.loadCkEditor(textAreaElement); }, setAttachmentsFileSizeByElement : function(element){ this.attachmentsFileSize += element.get(0).files[0].size; }, setAttachmentsFileSizeBySize : function(fileSize){ this.attachmentsFileSize += parseFloat(fileSize); }, getAttachmentsFileSize : function(){ return this.attachmentsFileSize; }, setDocumentsFileSize : function(documentSize){ this.documentsFileSize += parseFloat(documentSize); }, getDocumentsFileSize : function(){ return this.documentsFileSize; }, getTotalAttachmentsSize : function(){ return parseFloat(this.getAttachmentsFileSize())+parseFloat(this.getDocumentsFileSize()); }, getMaxUploadSize : function(){ return jQuery('#maxUploadSize').val(); }, removeAttachmentFileSizeByElement : function(element) { this.attachmentsFileSize -= element.get(0).files[0].size; }, removeDocumentsFileSize : function(documentSize){ this.documentsFileSize -= parseFloat(documentSize); }, removeAttachmentFileSizeBySize : function(fileSize) { this.attachmentsFileSize -= parseFloat(fileSize); }, /** * Function to calculate upload file size */ calculateUploadFileSize : function(){ var thisInstance = this; var composeEmailForm = this.getMassEmailForm(); var attachmentsList = composeEmailForm.find('#attachments'); var attachments = attachmentsList.find('.customAttachment'); jQuery.each(attachments,function(){ var element = jQuery(this); var fileSize = element.data('fileSize'); var fileType = element.data('fileType'); if(fileType == "file"){ thisInstance.setAttachmentsFileSizeBySize(fileSize); } else if(fileType == "document"){ thisInstance.setDocumentsFileSize(fileSize); } }) }, setReferenceFieldValue : function(container,object){ var thisInstance = this; var preloadData = thisInstance.getPreloadData(); var emailInfo = { 'recordId' : object.id, 'id' : object.emailid, 'text' : object.name+' <b>('+object.emailid+')</b>' } preloadData.push(emailInfo); thisInstance.setPreloadData(preloadData); container.find('#emailField').select2('data', preloadData); var toEmailField = container.find('.sourceField'); var toEmailFieldExistingValue = toEmailField.val(); var toEmailFieldNewValue; if(toEmailFieldExistingValue != ""){ toEmailFieldNewValue = toEmailFieldExistingValue+","+object.emailid; } else { toEmailFieldNewValue = object.emailid; } toEmailField.val(toEmailFieldNewValue); }, fileAfterSelectHandler : function(element, value, master_element){ var thisInstance = this; var mode = jQuery('[name="emailMode"]').val(); var existingAttachment = JSON.parse(jQuery('[name="attachments"]').val()); element = jQuery(element); thisInstance.setAttachmentsFileSizeByElement(element); var totalAttachmentsSize = thisInstance.getTotalAttachmentsSize(); var maxUploadSize = thisInstance.getMaxUploadSize(); if(totalAttachmentsSize > maxUploadSize){ app.helper.showAlertBox({message:app.vtranslate('JS_MAX_FILE_UPLOAD_EXCEEDS')}); this.removeAttachmentFileSizeByElement(jQuery(element)); master_element.list.find('.MultiFile-label:last').find('.MultiFile-remove').trigger('click'); }else if((mode != "") && (existingAttachment != "")){ var pattern = /\\/; var fileuploaded = value; jQuery.each(existingAttachment,function(key,value){ if((value['attachment'] == fileuploaded) && !(value.hasOwnProperty( "docid"))){ var errorMsg = app.vtranslate("JS_THIS_FILE_HAS_ALREADY_BEEN_SELECTED")+fileuploaded; app.helper.showAlertBox({message:app.vtranslate(errorMsg)}); thisInstance.removeAttachmentFileSizeByElement(jQuery(element),value); master_element.list.find('.MultiFile-label:last').find('.MultiFile-remove').trigger('click'); return false; } }) } return true; }, registerEventsForToField: function() { var thisInstance = this; this.getMassEmailForm().on('click','.selectEmail',function(e){ var moduleSelected = jQuery('.emailModulesList').select2('val'); var parentElem = jQuery(e.target).closest('.toEmailField'); var sourceModule = jQuery('[name=module]').val(); var params = { 'module' : moduleSelected, 'src_module' : sourceModule, 'view': 'EmailsRelatedModulePopup' } var popupInstance =Vtiger_Popup_Js.getInstance(); popupInstance.showPopup(params, function(data){ var responseData = JSON.parse(data); for(var id in responseData){ var data = { 'name' : responseData[id].name, 'id' : id, 'emailid' : responseData[id].email } thisInstance.setReferenceFieldValue(parentElem, data); thisInstance.addToEmailAddressData(data); thisInstance.appendToSelectedIds(id); thisInstance.addToEmails(data); } },'relatedEmailModules'); }); this.getMassEmailForm().on('click','[name="clearToEmailField"]',function(e){ var element = jQuery(e.currentTarget); element.closest('div.toEmailField').find('.sourceField').val(''); thisInstance.getMassEmailForm().find('[name="toemailinfo"]').val(JSON.stringify(new Array())); thisInstance.getMassEmailForm().find('[name="selected_ids"]').val(JSON.stringify(new Array())); thisInstance.getMassEmailForm().find('[name="to"]').val(JSON.stringify(new Array())); var preloadData = []; thisInstance.setPreloadData(preloadData); thisInstance.getMassEmailForm().find('#emailField').select2('data', preloadData); }); }, registerBrowseCrmEvent : function(){ var thisInstance = this; jQuery('#browseCrm').on('click',function(e){ var url = jQuery(e.currentTarget).data('url'); var postParams = app.convertUrlToDataParams("index.php?"+url); app.request.post({"data":postParams}).then(function(err,data){ jQuery('.popupModal').remove(); var ele = jQuery('<div class="modal popupModal"></div>'); ele.append(data); jQuery('body').append(ele); thisInstance.showpopupModal(); app.event.trigger("post.Popup.Load",{"eventToTrigger":"post.DocumentsList.click"}); }); }); }, getDocumentAttachmentElement : function(selectedFileName,id,selectedFileSize){ return '<div class="MultiFile-label"><a href="#" class="removeAttachment cursorPointer" data-id='+id+' data-file-size='+selectedFileSize+'>x </a><span>'+selectedFileName+'</span></div>'; }, /** * Function to check whether selected document * is already an existing attachment * @param expects document id to check * @return true if present false if not present */ checkIfExisitingAttachment : function(selectedDocumentId){ var documentExist; var documentPresent; var mode = jQuery('[name="emailMode"]').val(); var selectedDocumentIds = jQuery('#documentIds').val(); var existingAttachment = JSON.parse(jQuery('[name="attachments"]').val()); if((mode != "") && (existingAttachment != "")){ jQuery.each(existingAttachment,function(key,value){ if(value.hasOwnProperty( "docid")){ if(value['docid'] == selectedDocumentId){ documentExist = 1; return false; } } }) if(selectedDocumentIds != ""){ selectedDocumentIds = JSON.parse(selectedDocumentIds); } if((documentExist == 1) || (jQuery.inArray(selectedDocumentId,selectedDocumentIds) != '-1')){ documentPresent = 1; } else { documentPresent = 0; } } else if(selectedDocumentIds != ""){ selectedDocumentIds = JSON.parse(selectedDocumentIds); if((jQuery.inArray(selectedDocumentId,selectedDocumentIds) != '-1')){ documentPresent = 1; } else { documentPresent = 0; } } if(documentPresent == 1){ var errorMsg = app.vtranslate("JS_THIS_DOCUMENT_HAS_ALREADY_BEEN_SELECTED"); app.helper.showErrorNotification({message: errorMsg}); return true; } else { return false; } }, writeDocumentIds :function(selectedDocumentId){ var thisInstance = this; var newAttachment; var selectedDocumentIds = jQuery('#documentIds').val(); if(selectedDocumentIds != ""){ selectedDocumentIds = JSON.parse(selectedDocumentIds); var existingAttachment = thisInstance.checkIfExisitingAttachment(selectedDocumentId); if(!existingAttachment){ newAttachment = 1; } else { newAttachment = 0; } } else { var existingAttachment = thisInstance.checkIfExisitingAttachment(selectedDocumentId); if(!existingAttachment){ newAttachment = 1; var selectedDocumentIds = new Array(); } } if(newAttachment == 1){ selectedDocumentIds.push(selectedDocumentId); jQuery('#documentIds').val(JSON.stringify(selectedDocumentIds)); return true; } else { return false; } }, removeDocumentIds : function(removedDocumentId){ var documentIdsContainer = jQuery('#documentIds'); var documentIdsArray = JSON.parse(documentIdsContainer.val()); documentIdsArray.splice( jQuery.inArray('"'+removedDocumentId+'"', documentIdsArray), 1 ); documentIdsContainer.val(JSON.stringify(documentIdsArray)); }, registerRemoveAttachmentEvent : function(){ var thisInstance = this; this.getMassEmailForm().on('click','.removeAttachment',function(e){ var currentTarget = jQuery(e.currentTarget); var id = currentTarget.data('id'); var fileSize = currentTarget.data('fileSize'); currentTarget.closest('.MultiFile-label').remove(); thisInstance.removeDocumentsFileSize(fileSize); thisInstance.removeDocumentIds(id); if (jQuery('#attachments').is(':empty')){ jQuery('.MultiFile,.MultiFile-applied').removeClass('removeNoFileChosen'); } }); }, registerEventForRemoveCustomAttachments : function() { var thisInstance = this; var composeEmailForm = this.getMassEmailForm(); jQuery('[name="removeAttachment"]').on('click',function(e){ var attachmentsContainer = composeEmailForm.find('[ name="attachments"]'); var attachmentsInfo = JSON.parse(attachmentsContainer.val()); var element = jQuery(e.currentTarget); var imageContainer = element.closest('div.MultiFile-label'); var imageContainerData = imageContainer.data(); var fileType = imageContainerData['fileType']; var fileSize = imageContainerData['fileSize']; var fileId = imageContainerData['fileId']; if(fileType == "document"){ thisInstance.removeDocumentsFileSize(fileSize); } else if(fileType == "file"){ thisInstance.removeAttachmentFileSizeBySize(fileSize); } jQuery.each(attachmentsInfo,function(index,attachmentObject){ if((typeof attachmentObject != "undefined") && (attachmentObject.fileid == fileId)){ attachmentsInfo.splice(index,1); } }); attachmentsContainer.val(JSON.stringify(attachmentsInfo)); imageContainer.remove(); }); }, registerEvents : function(){ var thisInstance = this; var container = this.getMassEmailForm(); if(container.length > 0){ this.registerPreventFormSubmitEvent(); this.registerCcAndBccEvents(); this.registerAutoCompleteFields(container); jQuery("#multiFile").MultiFile({ list: '#attachments', 'afterFileSelect' : function(element, value, master_element){ var masterElement = master_element; var newElement = jQuery(masterElement.current); newElement.addClass('removeNoFileChosen'); thisInstance.fileAfterSelectHandler(element, value, master_element); }, 'afterFileRemove' : function(element, value, master_element){ if (jQuery('#attachments').is(':empty')){ jQuery('.MultiFile,.MultiFile-applied').removeClass('removeNoFileChosen'); } thisInstance.removeAttachmentFileSizeByElement(jQuery(element)); } }); this.registerRemoveAttachmentEvent(); this.registerBrowseCrmEvent(); this.calculateUploadFileSize(); this.registerSaveDraftOrSendEmailEvent(); var isCkeditorApplied = jQuery('#description').data('isCkeditorApplied'); if(isCkeditorApplied != true && jQuery('#description').length > 0){ this.loadCkEditor(jQuery('#description').data('isCkeditorApplied',true)); } this.registerSelectEmailTemplateEvent(); this.registerEventsForToField(); this.registerEventForRemoveCustomAttachments(); app.event.on("post.DocumentsList.click",function(event, data){ var responseData = JSON.parse(data); jQuery('.popupModal').modal('hide'); for(var id in responseData){ selectedDocumentId = id; var selectedFileName = responseData[id].info['filename']; var selectedFileSize = responseData[id].info['filesize']; var response = thisInstance.writeDocumentIds(selectedDocumentId) if(response){ var attachmentElement = thisInstance.getDocumentAttachmentElement(selectedFileName,id,selectedFileSize); //TODO handle the validation if the size exceeds 5mb before appending. jQuery(attachmentElement).appendTo(jQuery('#attachments')); jQuery('.MultiFile-applied,.MultiFile').addClass('removeNoFileChosen'); thisInstance.setDocumentsFileSize(selectedFileSize); } } }); jQuery('#emailTemplateWarning .alert-warning .close').click(function(e){ e.preventDefault(); e.stopPropagation(); jQuery('#emailTemplateWarning').addClass('hide'); }); app.event.on("post.EmailTemplateList.click",function(event, data){ var responseData = JSON.parse(data); jQuery('.popupModal').modal('hide'); var ckEditorInstance = thisInstance.getckEditorInstance(); for(var id in responseData){ var data = responseData[id]; ckEditorInstance.loadContentsInCkeditor(data['info']); //fill subject jQuery('#subject').val(data['name']); var selectedTemplateBody = responseData[id].info; } var sourceModule = jQuery('[name=source_module]').val(); var tokenDataPair = selectedTemplateBody.split('$'); var showWarning = false; for (var i=0; i<tokenDataPair.length; i++) { var module = tokenDataPair[i].split('-'); var pattern = /^[A-z]+$/; if(pattern.test(module[0])) { if(!(module[0] == sourceModule.toLowerCase() || module[0] == 'users' || module[0] == 'custom')) { showWarning = true; } } } if(showWarning) { jQuery('#emailTemplateWarning').removeClass('hide'); } else { jQuery('#emailTemplateWarning').addClass('hide'); } }); var params = { setHeight:(jQuery(window).height() - container.find('.modal-header').height() - container.find('.modal-footer').height() - 100)+'px' }; app.helper.showVerticalScroll(container.find('.modal-body'), params); } } });
[+]
..
[-] EmailPreview.js
[edit]
[-] MassEdit.js
[edit]