diff --git a/layouts/vlayout/modules/Emails/resources/MassEdit.js b/layouts/vlayout/modules/Emails/resources/MassEdit.js index dfb59d5304df3cc2f06764861c8614a1412deb8f..90c5a26e86e11892a1bfd086ab07272807e04d81 100644 --- a/layouts/vlayout/modules/Emails/resources/MassEdit.js +++ b/layouts/vlayout/modules/Emails/resources/MassEdit.js @@ -63,7 +63,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ * return UI */ showComposeEmailForm : function(params,cb,windowName){ - app.hideModalWindow(); + app.hideModalWindow(); var popupInstance = Vtiger_Popup_Js.getInstance(); return popupInstance.show(params,cb,windowName); @@ -279,7 +279,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ for(var id in responseData){ selectedDocumentId = id; var selectedFileName = responseData[id].info['filename']; - var selectedFileSize = responseData[id].info['filesize']; + var selectedFileSize = responseData[id].info['filesize']; var response = thisInstance.writeDocumentIds(selectedDocumentId) if(response){ var attachmentElement = thisInstance.getDocumentAttachmentElement(selectedFileName,id,selectedFileSize); @@ -405,31 +405,31 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } var popupInstance =Vtiger_Popup_Js.getInstance(); popupInstance.show(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); + var responseData = JSON.parse(data); + for(var id in responseData){ + var data = { + 'name' : responseData[id].name, + 'id' : id, + 'emailid' : responseData[id].email } - },'relatedEmailModules'); + 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(''); + element.closest('div.toEmailField').find('#toEmail').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); + thisInstance.getMassEmailForm().find('#toEmail').select2('data', preloadData); }); @@ -446,9 +446,9 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } preloadData.push(emailInfo); thisInstance.setPreloadData(preloadData); - container.find('#emailField').select2('data', preloadData); + container.find('#toEmail').select2('data', preloadData); - var toEmailField = container.find('.sourceField'); + var toEmailField = container.find('#toEmail'); var toEmailFieldExistingValue = toEmailField.val(); var toEmailFieldNewValue; if(toEmailFieldExistingValue != ""){ @@ -459,50 +459,50 @@ jQuery.Class("Emails_MassEdit_Js",{},{ toEmailField.val(toEmailFieldNewValue); }, - 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 { + 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)); - }, + }, - addToEmails : function(mailInfo){ - var toEmails = this.getMassEmailForm().find('[name="to"]'); - var value = JSON.parse(toEmails.val()); + 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)); - }, - + value.push(mailInfo.emailid); + toEmails.val(JSON.stringify(value)); + }, + /** * Function to remove attachments that are added in * edit view of email in compose email form @@ -614,7 +614,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ registerAutoCompleteFields : function(container) { var thisInstance = this; - container.find('#emailField').select2({ + container.find('.emailField').select2({ minimumInputLength: 3, closeOnSelect : false, @@ -626,18 +626,18 @@ jQuery.Class("Emails_MassEdit_Js",{},{ }, ajax : { - 'url' : 'index.php?module=Emails&action=BasicAjax', - 'dataType' : 'json', - 'data' : function(term,page){ - var data = {}; - data['searchValue'] = term; - return data; - }, - 'results' : function(data){ + '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) { + for(var moduleName in results) { var moduleResult = []; moduleResult.text = moduleName; @@ -654,18 +654,51 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } moduleResult.children = children; resultData.push(moduleResult); - } + } finalResult.results = resultData; - return finalResult; - }, + return finalResult; + }, transport : function(params) { return jQuery.ajax(params); } - } + } }).on("change", function (selectedData) { - console.log("Change of select element"); var addedElement = selectedData.added; + var removedData = selectedData.removed; + var currentElementName = jQuery(selectedData.currentTarget).attr('name'); + if(currentElementName == 'cc' || currentElementName == 'bcc') { + var fieldName = 'ccInfo'; + if(currentElementName == 'bcc') { + fieldName = 'bccInfo'; + } + + var emailData = []; + var fieldData = jQuery('[name="'+fieldName+'"]').val(); + if(fieldData.length) { + emailData = JSON.parse(fieldData); + emailData = jQuery.map(emailData, function(value, index) { + return [value]; + }); + } + + if(typeof addedElement != 'undefined') { + var data = { + 'id' : addedElement.recordId, + 'name' : addedElement.text, + 'emailid' : addedElement.id + } + emailData.push(data); + } else if(typeof removedData != 'undefined') { + for(var i in emailData) { + if(emailData[i].id == removedData.recordId || emailData[i].emailid == removedData.id) { + emailData.splice(i, 1); + } + } + } + jQuery('[name="'+fieldName+'"]').val(JSON.stringify(emailData)); + } + if (typeof addedElement != 'undefined') { var data = { 'id' : addedElement.recordId, @@ -721,13 +754,13 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } }); - container.find('#emailField').select2("container").find("ul.select2-choices").sortable({ + container.find('.emailField').select2("container").find("ul.select2-choices").sortable({ containment: 'parent', start: function(){ - container.find('#emailField').select2("onSortStart"); + container.find('.emailField').select2("onSortStart"); }, update: function(){ - container.find('#emailField').select2("onSortEnd"); + container.find('.emailField').select2("onSortEnd"); } }); @@ -762,6 +795,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } } } + if (typeof toFieldValues != 'undefined') { for(var i in toFieldValues) { var emailId = toFieldValues[i]; @@ -774,14 +808,47 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } if (typeof preloadData != 'undefined') { thisInstance.setPreloadData(preloadData); - container.find('#emailField').select2('data', preloadData); + container.find('.emailField[name="toEmail"]').select2('data', preloadData); + } + + var ccValues = container.find('[name="ccInfo"]').val(); + if(ccValues) { + ccValues = JSON.parse(ccValues); + var emailData = []; + for(var i in ccValues) { + var ccValue = ccValue[i]; + if(ccValue.id) { + emailData.push({'id' : ccValue.emailid, 'text' : ccValue.name, 'recordId' : ccValue.id}); + } else if(ccValue.emailid) { + emailData.push({'id' : ccValue.emailid, 'text' : ccValue.name}); + } else { + emailData.push({'id' : ccValue.trim(), 'text' : ccValue.trim()}); + } + } + container.find('.emailField[name="cc"]').select2('data', emailData); } + var bccValues = container.find('[name="bccInfo"]').val(); + if(bccValues) { + bccValues = JSON.parse(bccValues); + var bemailData = []; + for(var i in bccValues) { + var bccValue = bccValues[i]; + if(bccValue.id) { + bemailData.push({'id' : bccValue.emailid, 'text' : bccValue.name, 'recordId' : bccValue.id}); + } else if(bccValue.emailid) { + bemailData.push({'id' : bccValue.emailid, 'text' : bccValue.name}); + } else { + bemailData.push({'id' : bccValue.trim(), 'text' : bccValue.trim()}); + } + } + container.find('.emailField[name="bcc"]').select2('data', bemailData); + } }, removeFromEmailAddressData : function(mailInfo) { - var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]'); - var previousValue = JSON.parse(mailInfoElement.val()); + 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; @@ -801,14 +868,14 @@ jQuery.Class("Emails_MassEdit_Js",{},{ //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()); + 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 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 @@ -826,11 +893,11 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } selectedIdElement.val(JSON.stringify(updatedValue)); } - }, + }, - removeFromEmails : function(mailInfo){ - var toEmails = this.getMassEmailForm().find('[name="to"]'); - var previousValue = JSON.parse(toEmails.val()); + removeFromEmails : function(mailInfo){ + var toEmails = this.getMassEmailForm().find('[name="to"]'); + var previousValue = JSON.parse(toEmails.val()); var updatedValue = []; for (var i in previousValue) { @@ -843,8 +910,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ updatedValue.push(email); } } - toEmails.val(JSON.stringify(updatedValue)); - }, + toEmails.val(JSON.stringify(updatedValue)); + }, registerEvents : function(){ var thisInstance = this; diff --git a/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl b/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl index 8febca558ba3c719e3159db2fa8c48810197a9b4..d6dcf7e1ab92f0bc219adc16c23ff0f155796451 100644 --- a/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl +++ b/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl @@ -20,28 +20,28 @@ <input type="hidden" name="excluded_ids" value='{ZEND_JSON::encode($EXCLUDED_IDS)}' /> <input type="hidden" name="viewname" value="{$VIEWNAME}" /> <input type="hidden" name="module" value="{$MODULE}"/> - <input type="hidden" name="selectedFields" value='{ZEND_JSON::encode($SELECTED_FIELDS)}'/> + <input type="hidden" name="selectedFields" value='{ZEND_JSON::encode($SELECTED_FIELDS)}'/> <input type="hidden" name="mode" value="massSave" /> <input type="hidden" name="toemailinfo" value='{ZEND_JSON::encode($TOMAIL_INFO)}' /> <input type="hidden" name="view" value="MassSaveAjax" /> - <input type="hidden" name="to" value='{ZEND_JSON::encode($TO)}' /> - <input type="hidden" name="toMailNamesList" value='{ZEND_JSON::encode($TOMAIL_NAMES_LIST)}' /> + <input type="hidden" name="to" value='{ZEND_JSON::encode($TO)}' /> + <input type="hidden" name="toMailNamesList" value='{ZEND_JSON::encode($TOMAIL_NAMES_LIST)}' /> <input type="hidden" id="flag" name="flag" value="" /> <input type="hidden" id="maxUploadSize" value="{$MAX_UPLOAD_SIZE}" /> <input type="hidden" id="documentIds" name="documentids" value="" /> <input type="hidden" name="emailMode" value="{$EMAIL_MODE}" /> - {if !empty($PARENT_EMAIL_ID)} - <input type="hidden" name="parent_id" value="{$PARENT_EMAIL_ID}" /> + {if !empty($PARENT_EMAIL_ID)} + <input type="hidden" name="parent_id" value="{$PARENT_EMAIL_ID}" /> <input type="hidden" name="parent_record_id" value="{$PARENT_RECORD}" /> - {/if} - {if !empty($RECORDID)} - <input type="hidden" name="record" value="{$RECORDID}" /> - {/if} - <input type="hidden" name="search_key" value= "{$SEARCH_KEY}" /> - <input type="hidden" name="operator" value="{$OPERATOR}" /> - <input type="hidden" name="search_value" value="{$ALPHABET_VALUE}" /> - <input type="hidden" name="search_params" value='{ZEND_JSON::encode($SEARCH_PARAMS)}' /> - + {/if} + {if !empty($RECORDID)} + <input type="hidden" name="record" value="{$RECORDID}" /> + {/if} + <input type="hidden" name="search_key" value= "{$SEARCH_KEY}" /> + <input type="hidden" name="operator" value="{$OPERATOR}" /> + <input type="hidden" name="search_value" value="{$ALPHABET_VALUE}" /> + <input type="hidden" name="search_params" value='{ZEND_JSON::encode($SEARCH_PARAMS)}' /> + <div class="row-fluid toEmailField padding10"> <span class="span8"> <span class="row-fluid"> @@ -49,8 +49,8 @@ {if !empty($TO)} {assign var=TO_EMAILS value=","|implode:$TO} {/if} - <span class="span9"> - <input id="emailField" name="toEmail" type="text" class="row-fluid autoComplete sourceField select2" + <span class="span9"> + <input id="toEmail" name="toEmail" type="text" class="row-fluid autoComplete emailField select2" value="{$TO_EMAILS}" data-validation-engine="validate[required, funcCall[Vtiger_To_Email_Validator_Js.invokeValidation]]" data-fieldinfo='{$FIELD_INFO}' {if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if}/> @@ -83,7 +83,7 @@ <div class="span8"> <div class="row-fluid"> <div class="span2">{vtranslate('LBL_CC',$MODULE)}</div> - <input class="span9" data-validation-engine="validate[funcCall[Vtiger_MultiEmails_Validator_Js.invokeValidation]]" type="text" name="cc" value="{if !empty($CC)}{$CC}{/if}"/> + <input class="span9 row-fluid emailField select2" data-validation-engine="validate[funcCall[Vtiger_To_Email_Validator_Js.invokeValidation]]" type="text" name="cc" value="{if !empty($CC)}{$CC}{/if}"/> </div> </div> <div class="span4"></div> @@ -92,7 +92,7 @@ <span class="span8"> <span class="row-fluid"> <span class="span2">{vtranslate('LBL_BCC',$MODULE)}</span> - <input class="span9" data-validation-engine="validate[funcCall[Vtiger_MultiEmails_Validator_Js.invokeValidation]]" type="text" name="bcc" value="{if !empty($BCC)}{$BCC}{/if}"/> + <input class="span9 row-fluid emailField select2" data-validation-engine="validate[funcCall[Vtiger_To_Email_Validator_Js.invokeValidation]]" type="text" name="bcc" value="{if !empty($BCC)}{$BCC}{/if}"/> </span> </span> <span class="span4"></span> @@ -113,11 +113,11 @@ <span class="span8"> <span class="row-fluid"> <span class="span2">{vtranslate('LBL_SUBJECT',$MODULE)}<span class="redColor">*</span></span> - <span class="span9"> - <input data-validation-engine='validate[required]' class="row-fluid" type="text" name="subject" value="{$SUBJECT}" id="subject" spellcheck="true"/> - </span> + <span class="span9"> + <input data-validation-engine='validate[required]' class="row-fluid" type="text" name="subject" value="{$SUBJECT}" id="subject" spellcheck="true"/> + </span> + </span> </span> - </span> <span class="span4"></span> </div> <div class="row-fluid padding10"> @@ -135,7 +135,7 @@ {else} {assign var=FILE_TYPE value="file"} {/if} - <div class="MultiFile-label customAttachment" data-file-id="{$ATTACHMENT['fileid']}" data-file-type="{$FILE_TYPE}" data-file-size="{$ATTACHMENT['size']}" {if $FILE_TYPE eq "document"} data-document-id="{$DOCUMENT_ID}"{/if}> + <div class="MultiFile-label customAttachment" data-file-id="{$ATTACHMENT['fileid']}" data-file-type="{$FILE_TYPE}" data-file-size="{$ATTACHMENT['size']}" {if $FILE_TYPE eq "document"} data-document-id="{$DOCUMENT_ID}"{/if}> {if $ATTACHMENT['nondeletable'] neq true} <a name="removeAttachment" class="cursorPointer">x </a> {/if} @@ -158,7 +158,7 @@ <button type="button" class="btn" id="gotoPreview" title="{vtranslate('LBL_GO_TO_PREVIEW',$MODULE)}" style="margin-left: 5px;"><strong>{vtranslate('LBL_GO_TO_PREVIEW',$MODULE)}</strong></button> {/if} </span> - <span name="progressIndicator" style="height:30px;"> </span> + <span name="progressIndicator" style="height:30px;"> </span> </div> </div> {if $MODULE_IS_ACTIVE} @@ -169,9 +169,9 @@ </div> {/if} </div> - {if $RELATED_LOAD eq true} - <input type="hidden" name="related_load" value={$RELATED_LOAD} /> - {/if} + {if $RELATED_LOAD eq true} + <input type="hidden" name="related_load" value={$RELATED_LOAD} /> + {/if} <textarea id="description" name="description">{$DESCRIPTION}</textarea> <input type="hidden" name="attachments" value='{ZEND_JSON::encode($ATTACHMENTS)}' /> </form>