diff --git a/layouts/v7/modules/Emails/resources/MassEdit.js b/layouts/v7/modules/Emails/resources/MassEdit.js index cc2c02b1ca43730ba9a21d1316d8c3e70eda6b1b..a9ced971c20416f8454171f0515858d651654ffd 100644 --- a/layouts/v7/modules/Emails/resources/MassEdit.js +++ b/layouts/v7/modules/Emails/resources/MassEdit.js @@ -8,16 +8,16 @@ *************************************************************************************/ jQuery.Class("Emails_MassEdit_Js",{},{ - - init: function () { - this.preloadData = new Array(); - }, + + init: function () { + this.preloadData = new Array(); + }, ckEditorInstance : false, massEmailForm : false, - saved : "SAVED", - sent : "SENT", - attachmentsFileSize : 0, + saved : "SAVED", + sent : "SENT", + attachmentsFileSize : 0, documentsFileSize : 0, getPreloadData : function() { @@ -28,8 +28,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ this.preloadData = dataInfo; return this; }, - - /* + + /* * Function to get the Mass Email Form */ getMassEmailForm : function(){ @@ -38,8 +38,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } return this.massEmailForm; }, - - /** + + /** * Function to get ckEditorInstance */ getckEditorInstance : function(){ @@ -54,153 +54,153 @@ jQuery.Class("Emails_MassEdit_Js",{},{ * 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(); - }, - - /** + 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(){ var thisInstance = this; var selectEmailForm = jQuery("#SendEmailFormStep1"); selectEmailForm.on('submit',function(e){ - e.preventDefault(); + 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 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); - }); + app.helper.showProgress(); + app.helper.hideModal().then(function(e){ + thisInstance.showComposeEmailForm(params); + }); }); }, - - registerPreventFormSubmitEvent : function(){ - var form = this.getMassEmailForm(); - form.on('submit',function(e){ - e.preventDefault(); - }).on('keypress',function(e){ - if(e.which == 13){ + + 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){ + }); + }, + + /** + * 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(); + 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); + 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); }); }, @@ -208,7 +208,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ * Function to register the events for bcc and cc links */ registerCcAndBccEvents : function(){ - var thisInstance = this; + var thisInstance = this; jQuery('#ccLink').on('click',function(e){ jQuery('.ccContainer').removeClass("hide"); jQuery(e.currentTarget).hide(); @@ -218,8 +218,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ 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 */ @@ -229,23 +229,23 @@ jQuery.Class("Emails_MassEdit_Js",{},{ 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){ + '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; @@ -262,21 +262,21 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } moduleResult.children = children; resultData.push(moduleResult); - } + } finalResult.results = resultData; lastResults = resultData; - return finalResult; - }, + 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; @@ -396,10 +396,10 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } }, - - removeFromEmailAddressData : function(mailInfo) { - var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]'); - var previousValue = JSON.parse(mailInfoElement.val()); + + 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; @@ -419,16 +419,16 @@ 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 if(noOfEmailAddress < 2){ var updatedValue = []; @@ -444,11 +444,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) { @@ -461,75 +461,75 @@ jQuery.Class("Emails_MassEdit_Js",{},{ updatedValue.push(email); } } - toEmails.val(JSON.stringify(updatedValue)); - }, - - addToEmails : function(mailInfo){ - var toEmails = this.getMassEmailForm().find('[name="to"]'); - var value = JSON.parse(toEmails.val()); + 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 { + 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(){ + }, + + 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){ + + 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(){ + + getAttachmentsFileSize : function(){ return this.attachmentsFileSize; }, setDocumentsFileSize : function(documentSize){ @@ -542,24 +542,24 @@ jQuery.Class("Emails_MassEdit_Js",{},{ getTotalAttachmentsSize : function(){ return parseFloat(this.getAttachmentsFileSize())+parseFloat(this.getDocumentsFileSize()); }, - - getMaxUploadSize : function(){ + + getMaxUploadSize : function(){ return jQuery('#maxUploadSize').val(); }, - - removeAttachmentFileSizeByElement : function(element) { - this.attachmentsFileSize -= element.get(0).files[0].size; + + removeAttachmentFileSizeByElement : function(element) { + this.attachmentsFileSize -= element.get(0).files[0].size; }, - - removeDocumentsFileSize : function(documentSize){ + + removeDocumentsFileSize : function(documentSize){ this.documentsFileSize -= parseFloat(documentSize); }, - + removeAttachmentFileSizeBySize : function(fileSize) { this.attachmentsFileSize -= parseFloat(fileSize); }, - - /** + + /** * Function to calculate upload file size */ calculateUploadFileSize : function(){ @@ -578,8 +578,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } }) }, - - setReferenceFieldValue : function(container,object){ + + setReferenceFieldValue : function(container,object){ var thisInstance = this; var preloadData = thisInstance.getPreloadData(); @@ -602,8 +602,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } toEmailField.val(toEmailFieldNewValue); }, - - fileAfterSelectHandler : function(element, value, master_element){ + + fileAfterSelectHandler : function(element, value, master_element){ var thisInstance = this; var mode = jQuery('[name="emailMode"]').val(); var existingAttachment = JSON.parse(jQuery('[name="attachments"]').val()); @@ -617,7 +617,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ master_element.list.find('.MultiFile-label:last').find('.MultiFile-remove').trigger('click'); }else if((mode != "") && (existingAttachment != "")){ var pattern = /\\/; - var fileuploaded = value; + 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; @@ -630,9 +630,9 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } return true; }, - - registerEventsForToField: function() { - var thisInstance = this; + + 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'); @@ -645,7 +645,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ 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, @@ -653,13 +653,13 @@ jQuery.Class("Emails_MassEdit_Js",{},{ 'emailid' : responseData[id].email } thisInstance.setReferenceFieldValue(parentElem, data); - thisInstance.addToEmailAddressData(data); - thisInstance.appendToSelectedIds(id); - thisInstance.addToEmails(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(''); @@ -671,32 +671,32 @@ jQuery.Class("Emails_MassEdit_Js",{},{ thisInstance.setPreloadData(preloadData); thisInstance.getMassEmailForm().find('#emailField').select2('data', preloadData); }); - - }, - - registerBrowseCrmEvent : function(){ + + }, + + 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"}); - }); + 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){ + + + 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 @@ -741,8 +741,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{ return false; } }, - - writeDocumentIds :function(selectedDocumentId){ + + writeDocumentIds :function(selectedDocumentId){ var thisInstance = this; var newAttachment; var selectedDocumentIds = jQuery('#documentIds').val(); @@ -769,14 +769,14 @@ jQuery.Class("Emails_MassEdit_Js",{},{ return false; } }, - - removeDocumentIds : function(removedDocumentId){ + + 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){ @@ -791,7 +791,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{ } }); }, - + registerEventForRemoveCustomAttachments : function() { var thisInstance = this; var composeEmailForm = this.getMassEmailForm(); @@ -818,102 +818,102 @@ jQuery.Class("Emails_MassEdit_Js",{},{ 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){ - this.loadCkEditor(jQuery('#description').data('isCkeditorApplied',true)); - } - this.registerSelectEmailTemplateEvent(); - this.registerEventsForToField(); + + 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){ + 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'); - } - }); + + 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); - } - } + } + } }); diff --git a/layouts/v7/modules/Settings/Vtiger/OutgoingServerEdit.tpl b/layouts/v7/modules/Settings/Vtiger/OutgoingServerEdit.tpl index a830c8d744f1bab67a92e977742fab807038c1c3..7c52a0cd896031978f1e4325476d28d153fab750 100644 --- a/layouts/v7/modules/Settings/Vtiger/OutgoingServerEdit.tpl +++ b/layouts/v7/modules/Settings/Vtiger/OutgoingServerEdit.tpl @@ -42,7 +42,7 @@ <div class=" col-lg-6 col-md-6 col-sm-12"> <select class="select2 inputElement col-lg-12 col-md-12 col-lg-12" name="serverType"> <option value="">{vtranslate('LBL_SELECT_OPTION','Vtiger')}</option> - <option value="{"ssl://smtp.gmail.com:465"}" {if {$MODEL->get('server')} eq "ssl://smtp.gmail.com:465;"} selected {/if}>{vtranslate('LBL_GMAIL', $QUALIFIED_MODULE)} </option> + <option value="{"ssl://smtp.gmail.com:465"}" {if {$MODEL->get('server')} eq "ssl://smtp.gmail.com:465"} selected {/if}>{vtranslate('LBL_GMAIL', $QUALIFIED_MODULE)} </option> <option value="{"smtp.live.com"}" {if {$MODEL->get('server')} eq "smtp.live.com"} selected {/if}>{vtranslate('LBL_HOTMAIL', $QUALIFIED_MODULE)}</option> <option value="{"smtp-mail.outlook.com"}" {if {$MODEL->get('server')} eq "smtp.live.com"} selected {/if}>{vtranslate('LBL_OFFICE365', $QUALIFIED_MODULE)}</option> <option value="{"smtp.mail.yahoo.com"}" {if {$MODEL->get('server')} eq "smtp.mail.yahoo.com"} selected {/if}>{vtranslate('LBL_YAHOO', $QUALIFIED_MODULE)}</option> diff --git a/layouts/v7/modules/Users/Login.tpl b/layouts/v7/modules/Users/Login.tpl index 31f74822278fcc38306434cdae32381eeda5eca0..50c5d7278f227127dc603a8c0f866f775332ab81 100644 --- a/layouts/v7/modules/Users/Login.tpl +++ b/layouts/v7/modules/Users/Login.tpl @@ -80,22 +80,20 @@ display: block; color: red; } + .app-footer p { + margin-top: 0px; + } + #page { + padding-top: 55px; + } </style> </head> <body> <div class="header"> - <div class="row"> - <div class="login-logo"> - <img src='layouts/v7/resources/Images/vtiger.jpg'/> - </div> - </div> - <div class="row"> - <h1>One account. All of Vtiger.</h1> - </div> - <div class="row"> - <h4>Sign in to continue to Vtiger</h4> - </div> + <div class="login-logo"><img src='layouts/v7/resources/Images/vtiger.jpg'/></div> + <div><h1>One account. All of Vtiger.</h1></div> + <div><h4>Sign in to continue to Vtiger</h4></div> </div> <div class="body"> <div class="container login-form" id="login-form-div"> @@ -139,8 +137,10 @@ </form> </div> </div> - <div class="footer"></div> -</body> + <div class="footer"> + {include file="Footer.tpl"|vtemplate_path:$MODULE} + </div> + </body> <script> jQuery(document).ready(function () { jQuery('#login-form-div #username').focus(); diff --git a/layouts/v7/modules/Vtiger/Footer.tpl b/layouts/v7/modules/Vtiger/Footer.tpl index 864df35a3aefffb08ef0fa9be2b3bf73dfb56468..3191efc377f9fdb65dac68c390ed519623e377be 100644 --- a/layouts/v7/modules/Vtiger/Footer.tpl +++ b/layouts/v7/modules/Vtiger/Footer.tpl @@ -8,7 +8,8 @@ ************************************************************************************} <footer class="app-footer"> - <p>Powered by vtiger CRM - 7.0 © 2004 - 2015 + <p> + Powered by vtiger CRM - 7.0 © 2004 - 2017 <a href="//www.vtiger.com" target="_blank">Vtiger</a> | <a href="https://www.vtiger.com/privacy-policy" target="_blank">Privacy Policy</a> </p> diff --git a/layouts/v7/modules/Vtiger/resources/Detail.js b/layouts/v7/modules/Vtiger/resources/Detail.js index f64cdf57c773603b42db413be45103dc4b4e9687..66be15a02ce3f28fd99cbcc6c97d5f0bca76ad00 100644 --- a/layouts/v7/modules/Vtiger/resources/Detail.js +++ b/layouts/v7/modules/Vtiger/resources/Detail.js @@ -8,61 +8,61 @@ *************************************************************************************/ Vtiger.Class("Vtiger_Detail_Js",{ - - detailInstance : false, - PreAjaxSaveEvent : 'PreAjaxSaveEvent', - PostAjaxSaveEvent : 'PostAjaxSaveEvent', + + detailInstance : false, + PreAjaxSaveEvent : 'PreAjaxSaveEvent', + PostAjaxSaveEvent : 'PostAjaxSaveEvent', getInstance: function(){ - if( Vtiger_Detail_Js.detailInstance == false ){ - var module = app.getModuleName(); - var view = app.view; - var moduleClassName = module+"_"+view+"_Js"; - var fallbackClassName = Vtiger_Detail_Js; - if(typeof window[moduleClassName] != 'undefined'){ - var instance = new window[moduleClassName](); - }else{ - var instance = new fallbackClassName(); - } - Vtiger_Detail_Js.detailInstance = instance; - } - return Vtiger_Detail_Js.detailInstance; - }, - - getInstanceByModuleName : function(moduleName){ - if(typeof moduleName == "undefined"){ - moduleName = app.getModuleName(); - } - var parentModule = app.getParentModuleName(); - if(parentModule == 'Settings'){ - var moduleClassName = parentModule+"_"+moduleName+"_Detail_Js"; - if(typeof window[moduleClassName] == 'undefined'){ - moduleClassName = moduleName+"_Detail_Js"; - } - var fallbackClassName = parentModule+"_Vtiger_Detail_Js"; - if(typeof window[fallbackClassName] == 'undefined') { - fallbackClassName = "Vtiger_Detail_Js"; - } - } else { - moduleClassName = moduleName+"_Detail_Js"; - fallbackClassName = "Vtiger_Detail_Js"; - } - if(typeof window[moduleClassName] != 'undefined'){ - var instance = new window[moduleClassName](); - }else{ - var instance = new window[fallbackClassName](); - } - return instance; - }, - - triggerSendSms: function(detailActionUrl, module) { - var self = this.getInstance(); - self.sendSMS(detailActionUrl,module); - }, - - deleteRelatedActivity : function(e) { - var thisInstance = this; - var currentElement = jQuery(e.currentTarget); - var id = currentElement.data('id'); + if( Vtiger_Detail_Js.detailInstance == false ){ + var module = app.getModuleName(); + var view = app.view; + var moduleClassName = module+"_"+view+"_Js"; + var fallbackClassName = Vtiger_Detail_Js; + if(typeof window[moduleClassName] != 'undefined'){ + var instance = new window[moduleClassName](); + }else{ + var instance = new fallbackClassName(); + } + Vtiger_Detail_Js.detailInstance = instance; + } + return Vtiger_Detail_Js.detailInstance; + }, + + getInstanceByModuleName : function(moduleName){ + if(typeof moduleName == "undefined"){ + moduleName = app.getModuleName(); + } + var parentModule = app.getParentModuleName(); + if(parentModule == 'Settings'){ + var moduleClassName = parentModule+"_"+moduleName+"_Detail_Js"; + if(typeof window[moduleClassName] == 'undefined'){ + moduleClassName = moduleName+"_Detail_Js"; + } + var fallbackClassName = parentModule+"_Vtiger_Detail_Js"; + if(typeof window[fallbackClassName] == 'undefined') { + fallbackClassName = "Vtiger_Detail_Js"; + } + } else { + moduleClassName = moduleName+"_Detail_Js"; + fallbackClassName = "Vtiger_Detail_Js"; + } + if(typeof window[moduleClassName] != 'undefined'){ + var instance = new window[moduleClassName](); + }else{ + var instance = new window[fallbackClassName](); + } + return instance; + }, + + triggerSendSms: function(detailActionUrl, module) { + var self = this.getInstance(); + self.sendSMS(detailActionUrl,module); + }, + + deleteRelatedActivity : function(e) { + var thisInstance = this; + var currentElement = jQuery(e.currentTarget); + var id = currentElement.data('id'); var recurringEnabled = currentElement.data('recurringEnabled'); var postData = {'related_record_list' : [id]}; if(recurringEnabled) { @@ -80,25 +80,25 @@ Vtiger.Class("Vtiger_Detail_Js",{ function(error,err) { }); } - }, - + }, + deleteActivityRelation : function(customParams) { var params = { - 'module' : app.getModuleName(), - 'related_module' : 'Calendar', - 'action' : 'RelationAjax', - 'mode' : 'deleteRelation', - 'src_record' : jQuery('#recordId').val() + 'module' : app.getModuleName(), + 'related_module' : 'Calendar', + 'action' : 'RelationAjax', + 'mode' : 'deleteRelation', + 'src_record' : jQuery('#recordId').val() }; params = jQuery.extend(params, customParams); - + app.request.post({data: params}).then(function(err, data) { if(data) { params = { - 'record' : jQuery('#recordId').val(), - 'view' : 'Detail', - 'module' : app.getModuleName(), - 'mode' : 'getActivities' + 'record' : jQuery('#recordId').val(), + 'view' : 'Detail', + 'module' : app.getModuleName(), + 'mode' : 'getActivities' }; app.request.get({data: params}).then(function(err, result) { jQuery('#relatedActivities').html(result); @@ -107,132 +107,132 @@ Vtiger.Class("Vtiger_Detail_Js",{ } }); }, - - - showUpdates : function(element){ - jQuery(".historyButtons").find("button").removeAttr("disabled").removeClass("btn-success"); - var currentElement = jQuery(element); - currentElement.attr("disabled","disabled").addClass("btn-success"); - - var params = []; - var recordId = jQuery('#recordId').val(); - params.url = "index.php?view=Detail&module="+app.getModuleName()+"&mode=showRecentActivities&record="+recordId; - - app.helper.showProgress(); - app.request.get(params).then(function(error,response){ - app.helper.hideProgress(); - jQuery(".HistoryContainer").find(".data-body").html(response); - }); - }, - - - checkSMSStatus: function(url) { - app.request.post({url: url}).then( - function(err, data) { - var status = data['status']; - if(status == 'Failed'){ - var message = data['message']; - app.helper.showErrorNotification({title: status, message: message}); - } - else if (status == null) { - app.helper.showErrorNotification({title: 'Error', message: 'Failed to send SMS.'}); - } - else { - var message = data['message']; - app.helper.showErrorNotification({title:status, message:message}); - } - }); - }, - - /* + + + showUpdates : function(element){ + jQuery(".historyButtons").find("button").removeAttr("disabled").removeClass("btn-success"); + var currentElement = jQuery(element); + currentElement.attr("disabled","disabled").addClass("btn-success"); + + var params = []; + var recordId = jQuery('#recordId').val(); + params.url = "index.php?view=Detail&module="+app.getModuleName()+"&mode=showRecentActivities&record="+recordId; + + app.helper.showProgress(); + app.request.get(params).then(function(error,response){ + app.helper.hideProgress(); + jQuery(".HistoryContainer").find(".data-body").html(response); + }); + }, + + + checkSMSStatus: function(url) { + app.request.post({url: url}).then( + function(err, data) { + var status = data['status']; + if(status == 'Failed'){ + var message = data['message']; + app.helper.showErrorNotification({title: status, message: message}); + } + else if (status == null) { + app.helper.showErrorNotification({title: 'Error', message: 'Failed to send SMS.'}); + } + else { + var message = data['message']; + app.helper.showErrorNotification({title:status, message:message}); + } + }); + }, + + /* * function to trigger delete record action * @params: delete record url. */ - deleteRecord : function(deleteRecordActionUrl) { - var detailInstance = window.app.controller(); - detailInstance.remove(deleteRecordActionUrl); - }, - - - /** - * Function to trigger Transfer Ownership - * @param {type} massActionUrl - * @returns {undefined} - */ - triggerTransferOwnership : function(massActionUrl){ + deleteRecord : function(deleteRecordActionUrl) { + var detailInstance = window.app.controller(); + detailInstance.remove(deleteRecordActionUrl); + }, + + + /** + * Function to trigger Transfer Ownership + * @param {type} massActionUrl + * @returns {undefined} + */ + triggerTransferOwnership : function(massActionUrl){ var thisInstance = this; - var params = app.convertUrlToDataParams(massActionUrl); - app.helper.showProgress(); + var params = app.convertUrlToDataParams(massActionUrl); + app.helper.showProgress(); app.request.post({data:params}).then( function(error, data) { - app.helper.hideProgress(); - app.helper.showModal(data); - var form = jQuery('form#changeOwner'); - var isFormExists = form.length; - if(isFormExists){ - thisInstance.transferOwnershipSave(form); - } + app.helper.hideProgress(); + app.helper.showModal(data); + var form = jQuery('form#changeOwner'); + var isFormExists = form.length; + if(isFormExists){ + thisInstance.transferOwnershipSave(form); + } } ); }, - - /** - * Saving transfer ownership - * @param {type} form - * @returns {undefined} - */ - transferOwnershipSave : function (form){ - form.on("click","button[name='saveButton']",function(e){ - e.preventDefault(); - var rules = {}; - rules["related_modules"] = {'required' : true}; - rules["transferOwnerId"] = {'required' : true}; - var params = { - rules : rules, - submitHandler: function(form) { - // to Prevent submit if already submitted - jQuery(form).find("button[name='saveButton']").attr("disabled","disabled"); - if(this.numberOfInvalids() > 0) { - return false; - } - var transferOwner = jQuery('#transferOwnerId').val(); - var relatedModules = jQuery('#related_modules').val(); - var recordId = jQuery('#recordId').val(); - var reqParams = { - 'module': app.getModuleName(), - 'action' : 'TransferOwnership', - 'record':recordId, - 'transferOwnerId' : transferOwner, - 'related_modules' : relatedModules - }; - app.request.post({data:reqParams}).then( - function(error,data) { - if(error === null){ - app.helper.hideModal(); - app.helper.showAlertBox({'message':app.vtranslate('JS_RECORDS_TRANSFERRED_SUCCESSFULLY')}); - } - } - ); - } - }; - validateAndSubmitForm(form,params); - }); - }, - - /* + + /** + * Saving transfer ownership + * @param {type} form + * @returns {undefined} + */ + transferOwnershipSave : function (form){ + form.on("click","button[name='saveButton']",function(e){ + e.preventDefault(); + var rules = {}; + rules["related_modules"] = {'required' : true}; + rules["transferOwnerId"] = {'required' : true}; + var params = { + rules : rules, + submitHandler: function(form) { + // to Prevent submit if already submitted + jQuery(form).find("button[name='saveButton']").attr("disabled","disabled"); + if(this.numberOfInvalids() > 0) { + return false; + } + var transferOwner = jQuery('#transferOwnerId').val(); + var relatedModules = jQuery('#related_modules').val(); + var recordId = jQuery('#recordId').val(); + var reqParams = { + 'module': app.getModuleName(), + 'action' : 'TransferOwnership', + 'record':recordId, + 'transferOwnerId' : transferOwner, + 'related_modules' : relatedModules + }; + app.request.post({data:reqParams}).then( + function(error,data) { + if(error === null){ + app.helper.hideModal(); + app.helper.showAlertBox({'message':app.vtranslate('JS_RECORDS_TRANSFERRED_SUCCESSFULLY')}); + } + } + ); + } + }; + validateAndSubmitForm(form,params); + }); + }, + + /* * function to trigger send Email * @params: send email url , module name. */ triggerSendEmail : function(detailActionUrl, module){ - var currentInstance = window.app.controller(); - var parentRecord = new Array(); - var params = {}; - parentRecord.push(currentInstance.getRecordId()); - var urlParams = app.convertUrlToDataParams(detailActionUrl); - urlParams['selected_ids'] = parentRecord; - Vtiger_Index_Js.showComposeEmailPopup(urlParams); - }, - + var currentInstance = window.app.controller(); + var parentRecord = new Array(); + var params = {}; + parentRecord.push(currentInstance.getRecordId()); + var urlParams = app.convertUrlToDataParams(detailActionUrl); + urlParams['selected_ids'] = parentRecord; + Vtiger_Index_Js.showComposeEmailPopup(urlParams); + }, + /** * Function to show the content of a file in an iframe * @param {type} e @@ -242,92 +242,92 @@ Vtiger.Class("Vtiger_Detail_Js",{ previewFile: function (e, recordId,attachmentId) { Vtiger_Index_Js.previewFile(e, recordId,attachmentId); } - + },{ - - detailViewSummaryTabLabel : 'LBL_RECORD_SUMMARY', + + detailViewSummaryTabLabel : 'LBL_RECORD_SUMMARY', detailViewDetailTabLabel : 'LBL_RECORD_DETAILS', - detailViewHistoryTabLabel : 'LBL_HISTORY', - detailViewRecentCommentsTabLabel : 'ModComments', - detailViewRecentActivitiesTabLabel : 'Activities', - detailViewRecentDocumentsLabel : 'Documents', - widgetPostLoad : 'Vtiger.Widget.PostLoad', - _moduleName : false, - targetPicklistChange : false, - targetPicklist : false, - sourcePicklistname : false, - - getModuleName : function() { - if(this._moduleName != false){ - return this._moduleName; - } - return app.module(); - }, - - setModuleName : function(module){ - this._moduleName = module; - return this; - }, - - registerOverlayEditEvents: function(module, container) { - var editInstance = Vtiger_Edit_Js.getInstanceByModuleName(module); - editInstance.setModuleName(module); - var editContainer = container.find('.overlayEdit'); - editInstance.setEditViewContainer(editContainer); - editInstance.registerEvents(false); - }, - - setContentHolder: function(container){ - this.detailViewContentHolder = container; - }, - - overlayMode: false, - setOverlayDetailMode: function(option){ - this.overlayMode = option; - }, - getOverlayDetailMode: function(){ - return this.overlayMode; - }, - - registerRelatedRecordSave: function(){ - var thisInstance = this; - app.event.on('post.overLayEditView.loaded',function(e, container){ - jQuery('#EditView').vtValidate({ - submitHandler : function(form){ + detailViewHistoryTabLabel : 'LBL_HISTORY', + detailViewRecentCommentsTabLabel : 'ModComments', + detailViewRecentActivitiesTabLabel : 'Activities', + detailViewRecentDocumentsLabel : 'Documents', + widgetPostLoad : 'Vtiger.Widget.PostLoad', + _moduleName : false, + targetPicklistChange : false, + targetPicklist : false, + sourcePicklistname : false, + + getModuleName : function() { + if(this._moduleName != false){ + return this._moduleName; + } + return app.module(); + }, + + setModuleName : function(module){ + this._moduleName = module; + return this; + }, + + registerOverlayEditEvents: function(module, container) { + var editInstance = Vtiger_Edit_Js.getInstanceByModuleName(module); + editInstance.setModuleName(module); + var editContainer = container.find('.overlayEdit'); + editInstance.setEditViewContainer(editContainer); + editInstance.registerEvents(false); + }, + + setContentHolder: function(container){ + this.detailViewContentHolder = container; + }, + + overlayMode: false, + setOverlayDetailMode: function(option){ + this.overlayMode = option; + }, + getOverlayDetailMode: function(){ + return this.overlayMode; + }, + + registerRelatedRecordSave: function(){ + var thisInstance = this; + app.event.on('post.overLayEditView.loaded',function(e, container){ + jQuery('#EditView').vtValidate({ + submitHandler : function(form){ window.onbeforeunload = null; - var e = jQuery.Event(Vtiger_Edit_Js.recordPresaveEvent); - app.event.trigger(e); - if(e.isDefaultPrevented()) { - return false; - } - var formData = new FormData(form); - var postParams = { - data: formData, - contentType: false, - processData: false - }; - app.helper.showProgress(); - app.request.post(postParams).then(function(err,data){ - app.helper.hideProgress(); - app.helper.hidePageContentOverlay(); - var relatedModuleName = formData.module; + var e = jQuery.Event(Vtiger_Edit_Js.recordPresaveEvent); + app.event.trigger(e); + if(e.isDefaultPrevented()) { + return false; + } + var formData = new FormData(form); + var postParams = { + data: formData, + contentType: false, + processData: false + }; + app.helper.showProgress(); + app.request.post(postParams).then(function(err,data){ + app.helper.hideProgress(); + app.helper.hidePageContentOverlay(); + var relatedModuleName = formData.module; if(relatedModuleName == 'Events') { relatedModuleName = 'Calendar'; } - var relatedController = thisInstance.getRelatedController(relatedModuleName); - relatedController.loadRelatedList(); - }); - return false; - } + var relatedController = thisInstance.getRelatedController(relatedModuleName); + relatedController.loadRelatedList(); + }); + return false; + } }); - + jQuery('#EditView').find('.saveButton').on('click', function(e){ window.onbeforeunload = null; }); }); - }, - - referenceFieldNames : { + }, + + referenceFieldNames : { 'Accounts' : 'parent_id', 'Contacts' : 'contact_id', 'Leads' : 'parent_id', @@ -335,264 +335,264 @@ Vtiger.Class("Vtiger_Detail_Js",{ 'HelpDesk' : 'parent_id', 'Project' : 'projectid' }, - - init : function() { - this.addComponents(); - }, - - addComponents : function() { - var emailPreviewClassName = 'Vtiger_EmailPreview_Js'; + + init : function() { + this.addComponents(); + }, + + addComponents : function() { + var emailPreviewClassName = 'Vtiger_EmailPreview_Js'; this.addIndexComponent(); - this.addComponent(emailPreviewClassName); - this.addComponent('Vtiger_Tag_Js'); - }, - - - + this.addComponent(emailPreviewClassName); + this.addComponent('Vtiger_Tag_Js'); + }, + + + addIndexComponent : function() { this.addModuleSpecificComponent('Index','Vtiger',app.getParentModuleName()); }, - - /** + + /** * Function which will give the detail view form * @return : jQuery element */ - detailViewForm : false, + detailViewForm : false, getForm : function() { if(this.detailViewForm == false) { this.detailViewForm = jQuery('#detailView'); } return this.detailViewForm; }, - - detailViewContainer : false, - getDetailViewContainer : function(){ - if(this.detailViewContainer === false){ + + detailViewContainer : false, + getDetailViewContainer : function(){ + if(this.detailViewContainer === false){ this.detailViewContainer = jQuery('.detailViewContainer'); } return this.detailViewContainer; - }, - setDetailViewContainer : function(container){ - this.detailViewContainer = container; - }, - - detailViewContentHolder : false, - getContentHolder : function() { + }, + setDetailViewContainer : function(container){ + this.detailViewContainer = container; + }, + + detailViewContentHolder : false, + getContentHolder : function() { if(this.detailViewContentHolder == false) { this.detailViewContentHolder = jQuery('div.details'); } return this.detailViewContentHolder; }, - - /** - * Function to load related list - */ - loadRelatedListRecords : function(urlParams) { - var self = this; - var aDeferred = jQuery.Deferred(); - var defParams = self.getDefaultParams(); - urlParams = jQuery.extend(defParams, urlParams); - app.helper.showProgress(); - app.request.get({data:urlParams}).then(function(err, res){ - aDeferred.resolve(res); - var container = jQuery('.relatedContainer'); + + /** + * Function to load related list + */ + loadRelatedListRecords : function(urlParams) { + var self = this; + var aDeferred = jQuery.Deferred(); + var defParams = self.getDefaultParams(); + urlParams = jQuery.extend(defParams, urlParams); + app.helper.showProgress(); + app.request.get({data:urlParams}).then(function(err, res){ + aDeferred.resolve(res); + var container = jQuery('.relatedContainer'); container.html(res); - app.helper.hideProgress(); - app.event.trigger("post.relatedListLoad.click",container.find(".searchRow")); - }); - return aDeferred.promise(); - }, - sendSMS: function(detailActionUrl, module){ - var self = this; - app.helper.checkServerConfig(module).then(function(data) { - if (data == true) { - var cb = function(container) { - $('#phoneFormatWarningPop').popover(); - } - self.sendSMSAction(detailActionUrl, cb); - } else { - app.helper.showAlertBox({message:app.vtranslate('JS_SMS_SERVER_CONFIGURATION')}) - } - }); - }, - sendSMSAction: function(detailActionUrl, callBackFunction) { - var self = this; - var selectedIds = new Array(); - selectedIds.push(self.getRecordId()); - var postData = { - "selected_ids": JSON.stringify(selectedIds) - }; - app.request.post({url:detailActionUrl, data:postData, dataType:"html"}).then( - function(err, data) { - if (data) { - app.helper.showModal(data); - if (typeof callBackFunction == 'function') { - callBackFunction(data); - } - } - }); - }, - - /** - * Function to fetch default params - */ - getDefaultParams : function() { + app.helper.hideProgress(); + app.event.trigger("post.relatedListLoad.click",container.find(".searchRow")); + }); + return aDeferred.promise(); + }, + sendSMS: function(detailActionUrl, module){ + var self = this; + app.helper.checkServerConfig(module).then(function(data) { + if (data == true) { + var cb = function(container) { + $('#phoneFormatWarningPop').popover(); + } + self.sendSMSAction(detailActionUrl, cb); + } else { + app.helper.showAlertBox({message:app.vtranslate('JS_SMS_SERVER_CONFIGURATION')}) + } + }); + }, + sendSMSAction: function(detailActionUrl, callBackFunction) { + var self = this; + var selectedIds = new Array(); + selectedIds.push(self.getRecordId()); + var postData = { + "selected_ids": JSON.stringify(selectedIds) + }; + app.request.post({url:detailActionUrl, data:postData, dataType:"html"}).then( + function(err, data) { + if (data) { + app.helper.showModal(data); + if (typeof callBackFunction == 'function') { + callBackFunction(data); + } + } + }); + }, + + /** + * Function to fetch default params + */ + getDefaultParams : function() { var module = app.module(); - var activeModule = jQuery(".related-tabs li.active"); - var relatedModule = activeModule.attr("data-module") - var label = activeModule.attr("data-label-key"); - var relationId = activeModule.attr("data-relation-id"); - var orderBy = jQuery('#orderBy').val(); + var activeModule = jQuery(".related-tabs li.active"); + var relatedModule = activeModule.attr("data-module") + var label = activeModule.attr("data-label-key"); + var relationId = activeModule.attr("data-relation-id"); + var orderBy = jQuery('#orderBy').val(); var sortOrder = jQuery("#sortOrder").val(); - var pageNumber = jQuery('#pageNumber').val(); - - var recordId = jQuery('#recordId').val(); + var pageNumber = jQuery('#pageNumber').val(); + + var recordId = jQuery('#recordId').val(); var params = { 'module': module, - 'relatedModule': relatedModule, + 'relatedModule': relatedModule, 'view' : "Detail", - 'record' : recordId, - 'page' : pageNumber, + 'record' : recordId, + 'page' : pageNumber, 'mode' : 'showRelatedList', 'relationId' : relationId, - 'tab_label' : label, - 'orderby' : orderBy, + 'tab_label' : label, + 'orderby' : orderBy, 'sortorder' : sortOrder }; - params.search_params = JSON.stringify(this.getRelatedListSearchParams()); - params.nolistcache = (jQuery('#noFilterCache').val() == 1) ? 1 : 0; - return params; - }, - - /** - * Function to fetch search params - */ - getRelatedListSearchParams : function() { - var detailViewContainer = this.getDetailViewContainer(); - var relatedListTable = detailViewContainer.find('.searchRow'); - var searchParams = []; - var currentSearchParams = []; - if(jQuery('#currentSearchParams').val()) { - currentSearchParams = JSON.parse(jQuery('#currentSearchParams').val()); - } - relatedListTable.find('.listSearchContributor').each(function(index,domElement){ - var searchInfo = []; - var searchContributorElement = jQuery(domElement); - var fieldName = searchContributorElement.attr('name'); - var fieldInfo = related_uimeta.field.get(fieldName); - - if(fieldName in currentSearchParams) { - delete currentSearchParams[fieldName]; - } - - var searchValue = searchContributorElement.val(); - - if(typeof searchValue == "object") { - if(searchValue == null) { - searchValue = ""; - }else{ - searchValue = searchValue.join(','); - } - } - searchValue = searchValue.trim(); - if(searchValue.length <=0 ) { - //continue - return true; - } - var searchOperator = 'c'; - if(fieldInfo.type == "date" || fieldInfo.type == "datetime") { - searchOperator = 'bw'; - }else if (fieldInfo.type == 'percentage' || fieldInfo.type == "double" || fieldInfo.type == "integer" - || fieldInfo.type == 'currency' || fieldInfo.type == "number" || fieldInfo.type == "boolean" || - fieldInfo.type == "picklist") { - searchOperator = 'e'; - } - var storedOperator = searchContributorElement.parent().parent().find('.operatorValue').val(); - if(storedOperator) { - searchOperator = storedOperator; - storedOperator = false; - } - searchInfo.push(fieldName); - searchInfo.push(searchOperator); - searchInfo.push(searchValue); - searchInfo.push(fieldInfo.type); - searchParams.push(searchInfo); - }); - for(var i in currentSearchParams) { - var fieldName = currentSearchParams[i]['fieldName']; - var searchValue = currentSearchParams[i]['searchValue']; - var searchOperator = currentSearchParams[i]['comparator']; - if(fieldName== null || fieldName.length <=0 ){ - continue; - } - var searchInfo = []; - searchInfo.push(fieldName); - searchInfo.push(searchOperator); - searchInfo.push(searchValue); - searchParams.push(searchInfo); - } - var params = []; - params.push(searchParams); - return params; - }, - - getTabContainer : function(){ + params.search_params = JSON.stringify(this.getRelatedListSearchParams()); + params.nolistcache = (jQuery('#noFilterCache').val() == 1) ? 1 : 0; + return params; + }, + + /** + * Function to fetch search params + */ + getRelatedListSearchParams : function() { + var detailViewContainer = this.getDetailViewContainer(); + var relatedListTable = detailViewContainer.find('.searchRow'); + var searchParams = []; + var currentSearchParams = []; + if(jQuery('#currentSearchParams').val()) { + currentSearchParams = JSON.parse(jQuery('#currentSearchParams').val()); + } + relatedListTable.find('.listSearchContributor').each(function(index,domElement){ + var searchInfo = []; + var searchContributorElement = jQuery(domElement); + var fieldName = searchContributorElement.attr('name'); + var fieldInfo = related_uimeta.field.get(fieldName); + + if(fieldName in currentSearchParams) { + delete currentSearchParams[fieldName]; + } + + var searchValue = searchContributorElement.val(); + + if(typeof searchValue == "object") { + if(searchValue == null) { + searchValue = ""; + }else{ + searchValue = searchValue.join(','); + } + } + searchValue = searchValue.trim(); + if(searchValue.length <=0 ) { + //continue + return true; + } + var searchOperator = 'c'; + if(fieldInfo.type == "date" || fieldInfo.type == "datetime") { + searchOperator = 'bw'; + }else if (fieldInfo.type == 'percentage' || fieldInfo.type == "double" || fieldInfo.type == "integer" + || fieldInfo.type == 'currency' || fieldInfo.type == "number" || fieldInfo.type == "boolean" || + fieldInfo.type == "picklist") { + searchOperator = 'e'; + } + var storedOperator = searchContributorElement.parent().parent().find('.operatorValue').val(); + if(storedOperator) { + searchOperator = storedOperator; + storedOperator = false; + } + searchInfo.push(fieldName); + searchInfo.push(searchOperator); + searchInfo.push(searchValue); + searchInfo.push(fieldInfo.type); + searchParams.push(searchInfo); + }); + for(var i in currentSearchParams) { + var fieldName = currentSearchParams[i]['fieldName']; + var searchValue = currentSearchParams[i]['searchValue']; + var searchOperator = currentSearchParams[i]['comparator']; + if(fieldName== null || fieldName.length <=0 ){ + continue; + } + var searchInfo = []; + searchInfo.push(fieldName); + searchInfo.push(searchOperator); + searchInfo.push(searchValue); + searchParams.push(searchInfo); + } + var params = []; + params.push(searchParams); + return params; + }, + + getTabContainer : function(){ return jQuery('div.related-tabs'); }, - - getRecordId : function(){ + + getRecordId : function(){ return app.getRecordId(); }, - - getRelatedTabs : function() { + + getRelatedTabs : function() { return this.getTabContainer().find('li'); }, - - deSelectAllrelatedTabs : function() { + + deSelectAllrelatedTabs : function() { this.getRelatedTabs().removeClass('active'); }, - - markRelatedTabAsSelected : function(tabElement){ + + markRelatedTabAsSelected : function(tabElement){ tabElement.addClass('active'); }, - - /* - * Function to register the submit event for Send Sms - */ - registerSendSmsSubmitEvent: function() { - var thisInstance = this; - jQuery('body').on('submit', '#massSave', function(e) { - var form = jQuery(e.currentTarget); + + /* + * Function to register the submit event for Send Sms + */ + registerSendSmsSubmitEvent: function() { + var thisInstance = this; + jQuery('body').on('submit', '#massSave', function(e) { + var form = jQuery(e.currentTarget); form.vtValidate({onsubmit : false}); if(!form.valid()) { return false; } - var smsTextLength = form.find('#message').val().length; - if (smsTextLength > 160) { - app.helper.showErrorNotification({message:app.vtranslate('LBL_SMS_MAX_CHARACTERS_ALLOWED')}); - return false; - } - var submitButton = form.find(':submit'); - submitButton.attr('disabled', 'disabled'); - thisInstance.SendSmsSave(form); - e.preventDefault(); - }); - }, - /* - * Function to Save and sending the Sms and hide the modal window of send sms - */ - SendSmsSave: function(form) { - app.helper.showProgress(); - var formData = form.serializeFormData(); - app.request.post({data: formData}).then( - function(err, data) { - app.helper.hideProgress(); - app.helper.hideModal(); - if(err){ - app.helper.showErrorNotification({message:app.vtranslate('JS_PHONEFORMAT_ERROR')}); - return; - } + var smsTextLength = form.find('#message').val().length; + if (smsTextLength > 160) { + app.helper.showErrorNotification({message:app.vtranslate('LBL_SMS_MAX_CHARACTERS_ALLOWED')}); + return false; + } + var submitButton = form.find(':submit'); + submitButton.attr('disabled', 'disabled'); + thisInstance.SendSmsSave(form); + e.preventDefault(); + }); + }, + /* + * Function to Save and sending the Sms and hide the modal window of send sms + */ + SendSmsSave: function(form) { + app.helper.showProgress(); + var formData = form.serializeFormData(); + app.request.post({data: formData}).then( + function(err, data) { + app.helper.hideProgress(); + app.helper.hideModal(); + if(err){ + app.helper.showErrorNotification({message:app.vtranslate('JS_PHONEFORMAT_ERROR')}); + return; + } var statusDetails = data.statusdetails; var status = statusDetails.status; if(status == 'Failed') { @@ -602,144 +602,144 @@ Vtiger.Class("Vtiger_Detail_Js",{ var msg = statusDetails.statusmessage; app.helper.showSuccessNotification({'title' : status, 'message' : msg}); } - } - ); - }, - /** - * To load Related List Contents - * @returns {undefined} - */ - registerEventForRelatedTabClick : function(){ - var self = this; - var detailViewContainer = this.getDetailViewContainer(); - jQuery('.related-tabs', detailViewContainer).on('click', 'li.tab-item a', function(e, urlAttributes) { - e.preventDefault(); - }); - jQuery('.related-tabs', detailViewContainer).on('click', 'li.more-tab a', function(e, urlAttributes) { - e.preventDefault(); - }); - jQuery('.related-tabs', detailViewContainer).on('click', 'li.more-tab', function(e,urlAttributes){ - if(jQuery('.moreTabElement').length != 0){ - jQuery('.moreTabElement').remove(); - } - var moreTabElement = jQuery(e.currentTarget).clone(); - moreTabElement.find('.content').text(''); - moreTabElement.addClass('moreTabElement'); - moreTabElement.addClass('active'); - var moreElementTitle = moreTabElement.find('a').attr('displaylabel') - moreTabElement.attr('title',moreElementTitle); - moreTabElement.find('.tab-icon').removeClass('textOverflowEllipsis'); - jQuery('.related-tab-more-element').before(moreTabElement); - self.loadSelectedTabContents(moreTabElement, urlAttributes); - self.registerQtipevent(moreTabElement); - }); - jQuery('.related-tabs', detailViewContainer).on('click', 'li.tab-item', function(e,urlAttributes){ - var tabElement = jQuery(e.currentTarget); - self.loadSelectedTabContents(tabElement, urlAttributes); - }); - }, - - loadSelectedTabContents: function(tabElement, urlAttributes){ - var self = this; - var detailViewContainer = this.getDetailViewContainer(); - var url = tabElement.data('url'); - self.loadContents(url,urlAttributes).then(function(data){ - self.deSelectAllrelatedTabs(); - self.markRelatedTabAsSelected(tabElement); - var container = jQuery('.relatedContainer'); - app.event.trigger("post.relatedListLoad.click",container.find(".searchRow")); - // Added this to register pagination events in related list - var relatedModuleInstance = self.getRelatedController(); - //Summary tab is clicked - if(tabElement.data('linkKey') == self.detailViewSummaryTabLabel) { - self.registerSummaryViewContainerEvents(detailViewContainer); + } + ); + }, + /** + * To load Related List Contents + * @returns {undefined} + */ + registerEventForRelatedTabClick : function(){ + var self = this; + var detailViewContainer = this.getDetailViewContainer(); + jQuery('.related-tabs', detailViewContainer).on('click', 'li.tab-item a', function(e, urlAttributes) { + e.preventDefault(); + }); + jQuery('.related-tabs', detailViewContainer).on('click', 'li.more-tab a', function(e, urlAttributes) { + e.preventDefault(); + }); + jQuery('.related-tabs', detailViewContainer).on('click', 'li.more-tab', function(e,urlAttributes){ + if(jQuery('.moreTabElement').length != 0){ + jQuery('.moreTabElement').remove(); + } + var moreTabElement = jQuery(e.currentTarget).clone(); + moreTabElement.find('.content').text(''); + moreTabElement.addClass('moreTabElement'); + moreTabElement.addClass('active'); + var moreElementTitle = moreTabElement.find('a').attr('displaylabel') + moreTabElement.attr('title',moreElementTitle); + moreTabElement.find('.tab-icon').removeClass('textOverflowEllipsis'); + jQuery('.related-tab-more-element').before(moreTabElement); + self.loadSelectedTabContents(moreTabElement, urlAttributes); + self.registerQtipevent(moreTabElement); + }); + jQuery('.related-tabs', detailViewContainer).on('click', 'li.tab-item', function(e,urlAttributes){ + var tabElement = jQuery(e.currentTarget); + self.loadSelectedTabContents(tabElement, urlAttributes); + }); + }, + + loadSelectedTabContents: function(tabElement, urlAttributes){ + var self = this; + var detailViewContainer = this.getDetailViewContainer(); + var url = tabElement.data('url'); + self.loadContents(url,urlAttributes).then(function(data){ + self.deSelectAllrelatedTabs(); + self.markRelatedTabAsSelected(tabElement); + var container = jQuery('.relatedContainer'); + app.event.trigger("post.relatedListLoad.click",container.find(".searchRow")); + // Added this to register pagination events in related list + var relatedModuleInstance = self.getRelatedController(); + //Summary tab is clicked + if(tabElement.data('linkKey') == self.detailViewSummaryTabLabel) { + self.registerSummaryViewContainerEvents(detailViewContainer); self.registerEventForPicklistDependencySetup(self.getForm()); - } + } //Detail tab is clicked - if(tabElement.data('linkKey') == self.detailViewDetailTabLabel) { - self.triggerDetailViewContainerEvents(detailViewContainer); + if(tabElement.data('linkKey') == self.detailViewDetailTabLabel) { + self.triggerDetailViewContainerEvents(detailViewContainer); self.registerEventForPicklistDependencySetup(self.getForm()); - } - - // Registering engagement events if clicked tab is History - if(tabElement.data('labelKey') == self.detailViewHistoryTabLabel){ - var engagementsContainer = jQuery(".engagementsContainer"); - if(engagementsContainer.length > 0){ - app.event.trigger("post.engagements.load"); - } - } - + } + + // Registering engagement events if clicked tab is History + if(tabElement.data('labelKey') == self.detailViewHistoryTabLabel){ + var engagementsContainer = jQuery(".engagementsContainer"); + if(engagementsContainer.length > 0){ + app.event.trigger("post.engagements.load"); + } + } + relatedModuleInstance.initializePaginationEvents(); - //prevent detail view ajax form submissions - jQuery('form#detailView').on('submit', function(e) { - e.preventDefault(); - }); - }); - }, + //prevent detail view ajax form submissions + jQuery('form#detailView').on('submit', function(e) { + e.preventDefault(); + }); + }); + }, triggerDetailViewContainerEvents: function(detailViewContainer) { }, - registerRollupCommentsSwitchEvent : function() { - var self = this; - var commentsRelatedContainer = jQuery('.commentsRelatedContainer'); - if(jQuery('#rollupcomments').length > 0 && commentsRelatedContainer.length) { - app.helper.hideProgress(); - commentsRelatedContainer.off('switchChange.bootstrapSwitch') - .on('switchChange.bootstrapSwitch','#rollupcomments', function(e){ - app.helper.showProgress(); - self.toggleRollupComments(e); - }); - if(jQuery('#rollupcomments').attr('rollup-status') == 1) { - jQuery('#rollupcomments').bootstrapSwitch('state', true, true); - - }else{ - jQuery('#rollupcomments').bootstrapSwitch('state', false, true); - } - } - }, - - /** + registerRollupCommentsSwitchEvent : function() { + var self = this; + var commentsRelatedContainer = jQuery('.commentsRelatedContainer'); + if(jQuery('#rollupcomments').length > 0 && commentsRelatedContainer.length) { + app.helper.hideProgress(); + commentsRelatedContainer.off('switchChange.bootstrapSwitch') + .on('switchChange.bootstrapSwitch','#rollupcomments', function(e){ + app.helper.showProgress(); + self.toggleRollupComments(e); + }); + if(jQuery('#rollupcomments').attr('rollup-status') == 1) { + jQuery('#rollupcomments').bootstrapSwitch('state', true, true); + + }else{ + jQuery('#rollupcomments').bootstrapSwitch('state', false, true); + } + } + }, + + /** * To handle related record delete confirmation message */ getDeleteMessageKey : function() { return 'LBL_DELETE_CONFIRMATION'; }, - /** - * Funtion to register Related List Events - * @returns {undefined} - */ - registerEventsForRelatedList : function(){ - var self = this; - var detailContentsHolder = this.getContentHolder(); - this.registerRelatedRecordEdit(); - - this.registerEventForRelatedTabClick(); - this.registerRelatedListSearch(); - this.registerRelatedListSort(); - this.registerRemoveRelatedListSort(); - this.registerEventForEmailsRelatedRecord(); - this.registerRelatedListPageNavigationEvents(); - this.registerEventForAddingRelatedRecord(); - this.registerEventForSelectingRelatedRecord(); - self.registerScrollForRollupEvents(); - - app.event.on("post.relatedListLoad.click",function(event, container){ - vtUtils.applyFieldElementsView(container); - vtUtils.enableTooltips(); - var vtigerInstance = Vtiger_Index_Js.getInstance(); - vtigerInstance.registerMultiUpload(); - //For Rollup Comments + /** + * Funtion to register Related List Events + * @returns {undefined} + */ + registerEventsForRelatedList : function(){ + var self = this; + var detailContentsHolder = this.getContentHolder(); + this.registerRelatedRecordEdit(); + + this.registerEventForRelatedTabClick(); + this.registerRelatedListSearch(); + this.registerRelatedListSort(); + this.registerRemoveRelatedListSort(); + this.registerEventForEmailsRelatedRecord(); + this.registerRelatedListPageNavigationEvents(); + this.registerEventForAddingRelatedRecord(); + this.registerEventForSelectingRelatedRecord(); + self.registerScrollForRollupEvents(); + + app.event.on("post.relatedListLoad.click",function(event, container){ + vtUtils.applyFieldElementsView(container); + vtUtils.enableTooltips(); + var vtigerInstance = Vtiger_Index_Js.getInstance(); + vtigerInstance.registerMultiUpload(); + //For Rollup Comments self.registerRollupCommentsSwitchEvent(); //END - }); - + }); + var vtigerInstance = Vtiger_Index_Js.getInstance(); vtigerInstance.registerMultiUpload(); - detailContentsHolder.on('click', 'a.relationDelete', function(e){ + detailContentsHolder.on('click', 'a.relationDelete', function(e){ e.stopImmediatePropagation(); var element = jQuery(e.currentTarget); var key = self.getDeleteMessageKey(); @@ -779,18 +779,18 @@ Vtiger.Class("Vtiger_Detail_Js",{ } } }); - }, - - registerEventForEmailsRelatedRecord : function(){ + }, + + registerEventForEmailsRelatedRecord : function(){ var detailContentsHolder = this.getContentHolder(); var parentId = this.getRecordId(); - - var params = {}; - params['module'] = "Emails"; - params['view'] = "ComposeEmail"; - params['parentId'] = parentId; - params['relatedLoad'] = true; - + + var params = {}; + params['module'] = "Emails"; + params['view'] = "ComposeEmail"; + params['parentId'] = parentId; + params['relatedLoad'] = true; + detailContentsHolder.on('click','[name="emailsRelatedRecord"], [name="emailsDetailView"]',function(e){ e.stopPropagation(); var element = jQuery(e.currentTarget); @@ -799,25 +799,25 @@ Vtiger.Class("Vtiger_Detail_Js",{ var mode = 'emailEdit'; } else { mode = 'emailPreview'; - params['parentModule'] = app.getModuleName(); + params['parentModule'] = app.getModuleName(); } params['mode'] = mode; params['record'] = recordId; - app.helper.showProgress(); - app.request.post({data:params}).then(function(err,data){ - app.helper.hideProgress(); - if(err === null){ + app.helper.showProgress(); + app.request.post({data:params}).then(function(err,data){ + app.helper.hideProgress(); + if(err === null){ var dataObj = jQuery(data); var descriptionContent = dataObj.find('#iframeDescription').val(); - app.helper.showModal(data,{cb:function(){ + app.helper.showModal(data,{cb:function(){ if(mode === 'emailEdit'){ var editInstance = new Emails_MassEdit_Js(); editInstance.registerEvents(); }else { - app.event.trigger('post.EmailPreview.load',null); + app.event.trigger('post.EmailPreview.load',null); } jQuery('#emailPreviewIframe').contents().find('html').html(descriptionContent); - jQuery("#emailPreviewIframe").height(jQuery('.email-body-preview').height()); + jQuery("#emailPreviewIframe").height(jQuery('.email-body-preview').height()); jQuery('#emailPreviewIframe').contents().find('html').find('a').on('click', function(e) { e.preventDefault(); var url = jQuery(e.currentTarget).attr('href'); @@ -825,11 +825,11 @@ Vtiger.Class("Vtiger_Detail_Js",{ }); //jQuery("#emailPreviewIframe").height(jQuery('#emailPreviewIframe').contents().find('html').height()); }}); - } - }); + } + }); }) - - detailContentsHolder.on('click','[name="emailsEditView"]',function(e){ + + detailContentsHolder.on('click','[name="emailsEditView"]',function(e){ e.stopPropagation(); var module = "Emails"; app.helper.checkServerConfig(module).then(function(data){ @@ -839,154 +839,154 @@ Vtiger.Class("Vtiger_Detail_Js",{ var recordId = closestROw.data('id'); var parentRecord = new Array(); parentRecord.push(parentId); - + params['mode'] = "emailEdit"; params['record'] = recordId; params['selected_ids'] = parentRecord; - app.helper.showProgress(); - app.request.post({'data':params}).then(function(err,data){ - app.helper.hideProgress(); - if(err === null){ - app.helper.showModal(data); - var editInstance = new Emails_MassEdit_Js(); - editInstance.registerEvents(); - } - }); + app.helper.showProgress(); + app.request.post({'data':params}).then(function(err,data){ + app.helper.hideProgress(); + if(err === null){ + app.helper.showModal(data); + var editInstance = new Emails_MassEdit_Js(); + editInstance.registerEvents(); + } + }); } else { app.helper.showErrorMessage(app.vtranslate('JS_EMAIL_SERVER_CONFIGURATION')); } }) }) - }, - - /** - * To Delete Record from detail View - * @param {type} deleteRecordActionUrl - * @returns {undefined} - */ - remove : function(deleteRecordActionUrl){ - var message = app.vtranslate('LBL_DELETE_CONFIRMATION'); + }, + + /** + * To Delete Record from detail View + * @param {type} deleteRecordActionUrl + * @returns {undefined} + */ + remove : function(deleteRecordActionUrl){ + var message = app.vtranslate('LBL_DELETE_CONFIRMATION'); app.helper.showConfirmationBox({'message' : message}).then(function(data) { - var params = app.convertUrlToDataParams(deleteRecordActionUrl+"&ajaxDelete=true"); - app.request.post({data:params}).then( + var params = app.convertUrlToDataParams(deleteRecordActionUrl+"&ajaxDelete=true"); + app.request.post({data:params}).then( function(err,data){ - if(err === null){ - if(typeof data !== 'object'){ - var appName = app.getAppName(); - window.location.href = data+'&app='+appName; - }else { - app.helper.showAlertBox({'message' : data.prototype.message}); - } - } else { - app.helper.showAlertBox({'message' : err}); - } + if(err === null){ + if(typeof data !== 'object'){ + var appName = app.getAppName(); + window.location.href = data+'&app='+appName; + }else { + app.helper.showAlertBox({'message' : data.prototype.message}); + } + } else { + app.helper.showAlertBox({'message' : err}); + } }); } ); - }, - - /** - * Function to register the related list search event - */ - registerRelatedListSearch : function() { - var thisInstance = this; - var detailViewContainer = thisInstance.getDetailViewContainer(); - detailViewContainer.on('click','[data-trigger="relatedListSearch"]',function(e){ - var params = {'page' : '1'}; - thisInstance.getRelatedController().loadRelatedList(params); - }); - detailViewContainer.on('keypress','input.listSearchContributor',function(e){ - if(e.keyCode == 13){ - var element = jQuery(e.currentTarget); - var parentElement = element.closest('tr'); - var searchTriggerElement = parentElement.find('[data-trigger="relatedListSearch"]'); - searchTriggerElement.trigger('click'); - } - }); - }, - - /** - * Function to register the related list sort event - */ - registerRelatedListSort : function() { - var thisInstance = this; - var detailViewContainer = thisInstance.getDetailViewContainer(); - detailViewContainer.on('click','.listViewContentHeaderValues,.relatedListHeaderValues',function(e){ - var fieldName = jQuery(e.currentTarget).attr('data-fieldname'); - var sortOrderVal = jQuery(e.currentTarget).attr('data-nextsortorderval'); - if(sortOrderVal === 'ASC'){ - jQuery('i',e.currentTarget).addClass('fa-sort-asc'); - }else{ - jQuery('i',e.currentTarget).addClass('fa-sort-desc'); - } - jQuery('#sortOrder').val(sortOrderVal); - jQuery('#orderBy').val(fieldName); - var params = []; - thisInstance.getRelatedController().loadRelatedList(params); - }); - }, - - /** - * Function to register remove related list sorting - */ - registerRemoveRelatedListSort : function() { - var thisInstance = this; - var detailViewContainer = thisInstance.getDetailViewContainer(); - detailViewContainer.on('click','.removeSorting',function(e){ - jQuery('#sortOrder').val(null); - jQuery('#orderBy').val(null); - var params = []; - thisInstance.getRelatedController().loadRelatedList(params); - }); - }, - - /** - * Function to register Related List View Pagination - * @returns {undefined} - */ - registerRelatedListPageNavigationEvents : function(){ - var thisInstance = this; - var detailViewContainer = thisInstance.getDetailViewContainer(); - var urlParams = {}; - detailViewContainer.on('click','#listViewNextPageButton',function(e){ - var pageLimit = jQuery('#pageLimit').val(); - var noOfEntries = jQuery('#noOfEntries').val(); - var nextPageExist = jQuery('#nextPageExist').val(); - - if(noOfEntries == pageLimit && nextPageExist){ - var pageNumber = jQuery('#pageNumber').val(); - var nextPageNumber = parseInt(parseFloat(pageNumber)) + 1; - jQuery('#pageNumber').val(nextPageNumber); - var params = []; - thisInstance.loadRelatedListRecords(params); - } - }); - - detailViewContainer.on('click','#listViewPreviousPageButton',function(e){ - var pageNumber = jQuery('#pageNumber').val(); - if(pageNumber > 1){ - var previousPageNumber = parseInt(parseFloat(pageNumber)) - 1; - jQuery('#pageNumber').val(previousPageNumber); - var params = []; - thisInstance.loadRelatedListRecords(params); - } - }); - }, - - /** + }, + + /** + * Function to register the related list search event + */ + registerRelatedListSearch : function() { + var thisInstance = this; + var detailViewContainer = thisInstance.getDetailViewContainer(); + detailViewContainer.on('click','[data-trigger="relatedListSearch"]',function(e){ + var params = {'page' : '1'}; + thisInstance.getRelatedController().loadRelatedList(params); + }); + detailViewContainer.on('keypress','input.listSearchContributor',function(e){ + if(e.keyCode == 13){ + var element = jQuery(e.currentTarget); + var parentElement = element.closest('tr'); + var searchTriggerElement = parentElement.find('[data-trigger="relatedListSearch"]'); + searchTriggerElement.trigger('click'); + } + }); + }, + + /** + * Function to register the related list sort event + */ + registerRelatedListSort : function() { + var thisInstance = this; + var detailViewContainer = thisInstance.getDetailViewContainer(); + detailViewContainer.on('click','.listViewContentHeaderValues,.relatedListHeaderValues',function(e){ + var fieldName = jQuery(e.currentTarget).attr('data-fieldname'); + var sortOrderVal = jQuery(e.currentTarget).attr('data-nextsortorderval'); + if(sortOrderVal === 'ASC'){ + jQuery('i',e.currentTarget).addClass('fa-sort-asc'); + }else{ + jQuery('i',e.currentTarget).addClass('fa-sort-desc'); + } + jQuery('#sortOrder').val(sortOrderVal); + jQuery('#orderBy').val(fieldName); + var params = []; + thisInstance.getRelatedController().loadRelatedList(params); + }); + }, + + /** + * Function to register remove related list sorting + */ + registerRemoveRelatedListSort : function() { + var thisInstance = this; + var detailViewContainer = thisInstance.getDetailViewContainer(); + detailViewContainer.on('click','.removeSorting',function(e){ + jQuery('#sortOrder').val(null); + jQuery('#orderBy').val(null); + var params = []; + thisInstance.getRelatedController().loadRelatedList(params); + }); + }, + + /** + * Function to register Related List View Pagination + * @returns {undefined} + */ + registerRelatedListPageNavigationEvents : function(){ + var thisInstance = this; + var detailViewContainer = thisInstance.getDetailViewContainer(); + var urlParams = {}; + detailViewContainer.on('click','#listViewNextPageButton',function(e){ + var pageLimit = jQuery('#pageLimit').val(); + var noOfEntries = jQuery('#noOfEntries').val(); + var nextPageExist = jQuery('#nextPageExist').val(); + + if(noOfEntries == pageLimit && nextPageExist){ + var pageNumber = jQuery('#pageNumber').val(); + var nextPageNumber = parseInt(parseFloat(pageNumber)) + 1; + jQuery('#pageNumber').val(nextPageNumber); + var params = []; + thisInstance.loadRelatedListRecords(params); + } + }); + + detailViewContainer.on('click','#listViewPreviousPageButton',function(e){ + var pageNumber = jQuery('#pageNumber').val(); + if(pageNumber > 1){ + var previousPageNumber = parseInt(parseFloat(pageNumber)) - 1; + jQuery('#pageNumber').val(previousPageNumber); + var params = []; + thisInstance.loadRelatedListRecords(params); + } + }); + }, + + /** * Function to register event for adding related record for module */ registerEventForAddingRelatedRecord : function(){ var thisInstance = this; - var detailViewContainer = thisInstance.getDetailViewContainer(); + var detailViewContainer = thisInstance.getDetailViewContainer(); detailViewContainer.on('click','[name="addButton"]',function(e){ var element = jQuery(e.currentTarget); - var relatedModuleName = element.attr('module'); - var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ relatedModuleName +'"]'); - if(quickCreateNode.length <= 0) { - window.location.href = element.data('url'); - return; - } + var relatedModuleName = element.attr('module'); + var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ relatedModuleName +'"]'); + if(quickCreateNode.length <= 0) { + window.location.href = element.data('url'); + return; + } var relatedController = thisInstance.getRelatedController(relatedModuleName); if(relatedController){ @@ -994,26 +994,26 @@ Vtiger.Class("Vtiger_Detail_Js",{ } }) }, - - /** + + /** * Function to register event for selecting related record for module */ registerEventForSelectingRelatedRecord : function() { var thisInstance = this; - var detailViewContainer = thisInstance.getDetailViewContainer(); - detailViewContainer.on('click', 'button.selectRelation', function(e){ - var relatedController = thisInstance.getRelatedController(); + var detailViewContainer = thisInstance.getDetailViewContainer(); + detailViewContainer.on('click', 'button.selectRelation', function(e){ + var relatedController = thisInstance.getRelatedController(); if(relatedController){ relatedController.showSelectRelationPopup(); } }); }, - - getRelatedModuleName : function() { + + getRelatedModuleName : function() { return jQuery('.relatedModuleName').val(); }, - - getRelatedController : function(relatedModuleName) { + + getRelatedController : function(relatedModuleName) { var thisInstance = this; var recordId = thisInstance.getRecordId(); var moduleName = app.getModuleName(); @@ -1028,37 +1028,37 @@ Vtiger.Class("Vtiger_Detail_Js",{ } return null; }, - - getSelectedTab : function() { + + getSelectedTab : function() { var tabContainer = this.getTabContainer(); return tabContainer.find('li.active'); }, - - /** - * To Register Ajax Edit Event - * @returns {undefined} - */ - registerAjaxEditEvent : function(){ - var thisInstance = this; - var detailContentsHolder = this.getContentHolder(); - detailContentsHolder.on('click','table.detailview-table td.fieldValue .editAction', function(e) { - var editedLength = jQuery('table.detailview-table td.fieldValue .ajaxEdited').length; - if(editedLength === 0) { - var selection = window.getSelection().toString(); - if(selection.length == 0) { - var currentTdElement = jQuery(e.currentTarget).closest('td'); - thisInstance.ajaxEditHandling(currentTdElement); - } - } - }); - }, - - /** - * To Save Ajax Edited field - * @param {type} fieldDetailList - * @returns {unresolved} - */ - saveFieldValues : function (fieldDetailList) { + + /** + * To Register Ajax Edit Event + * @returns {undefined} + */ + registerAjaxEditEvent : function(){ + var thisInstance = this; + var detailContentsHolder = this.getContentHolder(); + detailContentsHolder.on('click','table.detailview-table td.fieldValue .editAction', function(e) { + var editedLength = jQuery('table.detailview-table td.fieldValue .ajaxEdited').length; + if(editedLength === 0) { + var selection = window.getSelection().toString(); + if(selection.length == 0) { + var currentTdElement = jQuery(e.currentTarget).closest('td'); + thisInstance.ajaxEditHandling(currentTdElement); + } + } + }); + }, + + /** + * To Save Ajax Edited field + * @param {type} fieldDetailList + * @returns {unresolved} + */ + saveFieldValues : function (fieldDetailList) { var aDeferred = jQuery.Deferred(); var recordId = this.getRecordId(); @@ -1074,319 +1074,319 @@ Vtiger.Class("Vtiger_Detail_Js",{ app.request.post({data:data}).then( function(err, reponseData){ - if(err === null){ - app.helper.showSuccessNotification({"message":""}); - aDeferred.resolve(reponseData); - } else { - app.helper.showErrorNotification({"message":err}); - } + if(err === null){ + app.helper.showSuccessNotification({"message":""}); + aDeferred.resolve(reponseData); + } else { + app.helper.showErrorNotification({"message":err}); + } } ); return aDeferred.promise(); }, - - registerSaveOnEnterEvent: function(editElement) { - editElement.find('.inputElement:not(textarea)').on('keyup', function(e) { - var textArea = editElement.find('textarea'); - var ignoreList = ['reference','picklist','multipicklist','owner']; - var fieldType = jQuery(e.target).closest('.ajaxEdited').find('.fieldBasicData').data('type'); - if(ignoreList.indexOf(fieldType) !== -1) return; - if(!textArea.length){ - (e.keyCode || e.which) === 13 && editElement.find('.inlineAjaxSave').trigger('click'); - } - }); - }, - - /** - * Handling Ajax Edit - * @param {type} currentTdElement - * @returns {undefined} - */ - ajaxEditHandling : function(currentTdElement){ - var thisInstance = this; - var detailViewValue = jQuery('.value',currentTdElement); - var editElement = jQuery('.edit',currentTdElement); - var fieldBasicData = jQuery('.fieldBasicData', editElement); - var fieldName = fieldBasicData.data('name'); - var fieldType = fieldBasicData.data('type'); - var value = fieldBasicData.data('displayvalue'); - var rawValue = fieldBasicData.data('value'); - var self = this; - var fieldElement = jQuery('[name="'+ fieldName +'"]', editElement); - - // If Reference field has value, then we are disabling the field by default - if(fieldElement.attr('disabled') == 'disabled' && fieldType != 'reference'){ - return; - } - - if(editElement.length <= 0) { - return; - } - - if(editElement.is(':visible')){ - return; - } - - if(fieldType === 'multipicklist') { - var multiPicklistFieldName = fieldName.split('[]'); - fieldName = multiPicklistFieldName[0]; - } - - var customHandlingFields = ['owner','ownergroup','picklist','multipicklist','reference','currencyList','text']; - if(jQuery.inArray(fieldType, customHandlingFields) !== -1){ - value = rawValue; - } - if(jQuery('.editElement',editElement).length === 0){ - var fieldInfo; - if(self.getOverlayDetailMode() == true){ - fieldInfo = related_uimeta.field.get(fieldName); - } - else{ - fieldInfo = uimeta.field.get(fieldName); - } - fieldInfo['value'] = value; - var fieldObject = Vtiger_Field_Js.getInstance(fieldInfo); - var fieldModel = fieldObject.getUiTypeModel(); - - var ele = jQuery('<div class="input-group editElement"></div>'); - var actionButtons = '<span class="pointerCursorOnHover input-group-addon input-group-addon-save inlineAjaxSave"><i class="fa fa-check"></i></span>'; - actionButtons += '<span class="pointerCursorOnHover input-group-addon input-group-addon-cancel inlineAjaxCancel"><i class="fa fa-close"></i></span>'; - //wrapping action buttons with class called input-save-wrap - var inlineSaveWrap=jQuery('<div class="input-save-wrap"></div>'); - inlineSaveWrap.append(actionButtons); - // we should have atleast one submit button for the form to submit which is required for validation - ele.append(fieldModel.getUi()).append(inlineSaveWrap); - ele.find('.inputElement').addClass('form-control'); - editElement.append(ele); - } - - // for reference fields, actual value will be ID but we need to show related name of that ID - if(fieldType === 'reference'){ - if(value !== 0){ - jQuery('input[name="'+fieldName+'"]',editElement).prop('value',jQuery.trim(detailViewValue.text())); - var referenceElement = jQuery('input[name="'+fieldName+'"]',editElement); - if(!referenceElement.attr('disabled')) { - referenceElement.attr('disabled','disabled'); - editElement.find('.clearReferenceSelection').removeClass('hide') - } - } - } - - detailViewValue.css('display', 'none'); - editElement.removeClass('hide').show().children().filter('input[type!="hidden"]input[type!="image"],select').filter(':first').focus(); - vtUtils.applyFieldElementsView(currentTdElement); - var contentHolder = this.getDetailViewContainer(); - var vtigerInstance = Vtiger_Index_Js.getInstance(); - vtigerInstance.registerAutoCompleteFields(contentHolder); - vtigerInstance.referenceModulePopupRegisterEvent(contentHolder); - editElement.addClass('ajaxEdited'); - thisInstance.registerSaveOnEnterEvent(editElement); - jQuery('.editAction').addClass('hide'); - - if(fieldType == 'picklist' || fieldType == 'ownergroup' || fieldType == 'owner') { - var sourcePicklistFieldName = thisInstance.getDependentSourcePicklistName(fieldName); - if(sourcePicklistFieldName) { - thisInstance.handlePickListDependencyMap(sourcePicklistFieldName); - } - } - }, - - getDependentSourcePicklistName : function(fieldName) { - var container = this.getForm(); - var picklistDependcyElemnt = jQuery('[name="picklistDependency"]',container); - if(picklistDependcyElemnt.length <= 0) { - return ''; - } - - var picklistDependencyMapping = JSON.parse(picklistDependcyElemnt.val()); - var sourcePicklists = Object.keys(picklistDependencyMapping); - if(sourcePicklists.length <= 0){ - return ''; - } - var sourcePicklistFieldName = ''; - jQuery.each(picklistDependencyMapping, function(sourcePicklistName, configuredDependencyObject) { - var picklistmap = configuredDependencyObject["__DEFAULT__"]; - jQuery.each(picklistmap,function(targetPickListName,targetPickListValues){ - if(targetPickListName == fieldName){ - sourcePicklistFieldName = sourcePicklistName; - } - }); - }); - - return sourcePicklistFieldName; - }, - - getInlineWrapper : function(element) { - var wrapperElement = element.closest('td'); - if(!wrapperElement.length) { - wrapperElement = element.closest('.td'); - } - return wrapperElement; - }, - - /** - * Ajax Edit Save Event - * @param {type} currentTdElement - * @returns {undefined} - */ - registerAjaxEditSaveEvent : function(contentHolder){ - var thisInstance = this; - if(typeof contentHolder === 'undefined') { - contentHolder = this.getContentHolder(); - } - - contentHolder.on('click','.inlineAjaxSave',function(e){ - e.preventDefault(); - e.stopPropagation(); - var currentTarget = jQuery(e.currentTarget); - var currentTdElement = thisInstance.getInlineWrapper(currentTarget); - var detailViewValue = jQuery('.value',currentTdElement); - var editElement = jQuery('.edit',currentTdElement); - var actionElement = jQuery('.editAction', currentTdElement); - var fieldBasicData = jQuery('.fieldBasicData', editElement); - var fieldName = fieldBasicData.data('name'); - var fieldType = fieldBasicData.data("type"); - var previousValue = jQuery.trim(fieldBasicData.data('displayvalue')); - - var fieldElement = jQuery('[name="'+ fieldName +'"]', editElement); - var ajaxEditNewValue = fieldElement.val(); - - // ajaxEditNewValue should be taken based on field Type - if(fieldElement.is('input:checkbox')) { - if(fieldElement.is(':checked')) { - ajaxEditNewValue = '1'; - } else { - ajaxEditNewValue = '0'; - } - fieldElement = fieldElement.filter('[type="checkbox"]'); - } else if(fieldType == 'reference'){ - ajaxEditNewValue = fieldElement.attr('value'); - } - - // prev Value should be taken based on field Type - var customHandlingFields = ['owner','ownergroup','picklist','multipicklist','reference','boolean']; - if(jQuery.inArray(fieldType, customHandlingFields) !== -1){ - previousValue = fieldBasicData.data('value'); - } - - // Field Specific custom Handling - if(fieldType === 'multipicklist'){ - var multiPicklistFieldName = fieldName.split('[]'); - fieldName = multiPicklistFieldName[0]; - } - - var fieldValue = ajaxEditNewValue; - - //Before saving ajax edit values we need to check if the value is changed then only we have to save - if(previousValue == ajaxEditNewValue) { - detailViewValue.css('display', 'inline-block'); - editElement.addClass('hide'); - editElement.removeClass('ajaxEdited'); - jQuery('.editAction').removeClass('hide'); - actionElement.show(); - }else{ - var fieldNameValueMap = {}; - fieldNameValueMap['value'] = fieldValue; - fieldNameValueMap['field'] = fieldName; - var form = currentTarget.closest('form'); - var params = { - 'ignore' : 'span.hide .inputElement,input[type="hidden"]', - submitHandler : function(form){ - var preAjaxSaveEvent = jQuery.Event(Vtiger_Detail_Js.PreAjaxSaveEvent); - app.event.trigger(preAjaxSaveEvent,{form:jQuery(form),tiggeredFiledInfo:fieldNameValueMap}); - if(preAjaxSaveEvent.isDefaultPrevented()) { - return false; - } - - jQuery(currentTdElement).find('.input-group-addon').addClass('disabled'); - app.helper.showProgress(); - thisInstance.saveFieldValues(fieldNameValueMap).then(function(response) { - app.helper.hideProgress(); - var postSaveRecordDetails = response; - if(fieldBasicData.data('type') == 'picklist' && app.getModuleName() != 'Users') { - var color = postSaveRecordDetails[fieldName].colormap[postSaveRecordDetails[fieldName].value]; - if(color) { - var contrast = app.helper.getColorContrast(color); - var textColor = (contrast === 'dark') ? 'white' : 'black'; - var picklistHtml = '<span class="picklist-color" style="background-color: ' + color + '; color: '+ textColor + ';">' + - postSaveRecordDetails[fieldName].display_value + - '</span>'; - } else { - var picklistHtml = '<span class="picklist-color">' + - postSaveRecordDetails[fieldName].display_value + - '</span>'; - } - detailViewValue.html(picklistHtml); - } else if(fieldBasicData.data('type') == 'multipicklist' && app.getModuleName() != 'Users') { - var picklistHtml = ''; - var rawPicklistValues = postSaveRecordDetails[fieldName].value; - rawPicklistValues = rawPicklistValues.split('|##|'); - var picklistValues = postSaveRecordDetails[fieldName].display_value; - picklistValues = picklistValues.split(','); - for(var i=0; i< rawPicklistValues.length; i++) { - var color = postSaveRecordDetails[fieldName].colormap[rawPicklistValues[i].trim()]; - if(color) { - var contrast = app.helper.getColorContrast(color); - var textColor = (contrast === 'dark') ? 'white' : 'black'; - picklistHtml = picklistHtml + - '<span class="picklist-color" style="background-color: ' + color + '; color: '+ textColor + ';">' + - picklistValues[i] + - '</span>'; - } else { - picklistHtml = picklistHtml + - '<span class="picklist-color">' + - picklistValues[i] + - '</span>'; - } - if(picklistValues[i+1]!==undefined) - picklistHtml+=' , '; - } - detailViewValue.html(picklistHtml); - } else if(fieldBasicData.data('type') == 'currency' && app.getModuleName() != 'Users') { + + registerSaveOnEnterEvent: function(editElement) { + editElement.find('.inputElement:not(textarea)').on('keyup', function(e) { + var textArea = editElement.find('textarea'); + var ignoreList = ['reference','picklist','multipicklist','owner']; + var fieldType = jQuery(e.target).closest('.ajaxEdited').find('.fieldBasicData').data('type'); + if(ignoreList.indexOf(fieldType) !== -1) return; + if(!textArea.length){ + (e.keyCode || e.which) === 13 && editElement.find('.inlineAjaxSave').trigger('click'); + } + }); + }, + + /** + * Handling Ajax Edit + * @param {type} currentTdElement + * @returns {undefined} + */ + ajaxEditHandling : function(currentTdElement){ + var thisInstance = this; + var detailViewValue = jQuery('.value',currentTdElement); + var editElement = jQuery('.edit',currentTdElement); + var fieldBasicData = jQuery('.fieldBasicData', editElement); + var fieldName = fieldBasicData.data('name'); + var fieldType = fieldBasicData.data('type'); + var value = fieldBasicData.data('displayvalue'); + var rawValue = fieldBasicData.data('value'); + var self = this; + var fieldElement = jQuery('[name="'+ fieldName +'"]', editElement); + + // If Reference field has value, then we are disabling the field by default + if(fieldElement.attr('disabled') == 'disabled' && fieldType != 'reference'){ + return; + } + + if(editElement.length <= 0) { + return; + } + + if(editElement.is(':visible')){ + return; + } + + if(fieldType === 'multipicklist') { + var multiPicklistFieldName = fieldName.split('[]'); + fieldName = multiPicklistFieldName[0]; + } + + var customHandlingFields = ['owner','ownergroup','picklist','multipicklist','reference','currencyList','text']; + if(jQuery.inArray(fieldType, customHandlingFields) !== -1){ + value = rawValue; + } + if(jQuery('.editElement',editElement).length === 0){ + var fieldInfo; + if(self.getOverlayDetailMode() == true){ + fieldInfo = related_uimeta.field.get(fieldName); + } + else{ + fieldInfo = uimeta.field.get(fieldName); + } + fieldInfo['value'] = value; + var fieldObject = Vtiger_Field_Js.getInstance(fieldInfo); + var fieldModel = fieldObject.getUiTypeModel(); + + var ele = jQuery('<div class="input-group editElement"></div>'); + var actionButtons = '<span class="pointerCursorOnHover input-group-addon input-group-addon-save inlineAjaxSave"><i class="fa fa-check"></i></span>'; + actionButtons += '<span class="pointerCursorOnHover input-group-addon input-group-addon-cancel inlineAjaxCancel"><i class="fa fa-close"></i></span>'; + //wrapping action buttons with class called input-save-wrap + var inlineSaveWrap=jQuery('<div class="input-save-wrap"></div>'); + inlineSaveWrap.append(actionButtons); + // we should have atleast one submit button for the form to submit which is required for validation + ele.append(fieldModel.getUi()).append(inlineSaveWrap); + ele.find('.inputElement').addClass('form-control'); + editElement.append(ele); + } + + // for reference fields, actual value will be ID but we need to show related name of that ID + if(fieldType === 'reference'){ + if(value !== 0){ + jQuery('input[name="'+fieldName+'"]',editElement).prop('value',jQuery.trim(detailViewValue.text())); + var referenceElement = jQuery('input[name="'+fieldName+'"]',editElement); + if(!referenceElement.attr('disabled')) { + referenceElement.attr('disabled','disabled'); + editElement.find('.clearReferenceSelection').removeClass('hide') + } + } + } + + detailViewValue.css('display', 'none'); + editElement.removeClass('hide').show().children().filter('input[type!="hidden"]input[type!="image"],select').filter(':first').focus(); + vtUtils.applyFieldElementsView(currentTdElement); + var contentHolder = this.getDetailViewContainer(); + var vtigerInstance = Vtiger_Index_Js.getInstance(); + vtigerInstance.registerAutoCompleteFields(contentHolder); + vtigerInstance.referenceModulePopupRegisterEvent(contentHolder); + editElement.addClass('ajaxEdited'); + thisInstance.registerSaveOnEnterEvent(editElement); + jQuery('.editAction').addClass('hide'); + + if(fieldType == 'picklist' || fieldType == 'ownergroup' || fieldType == 'owner') { + var sourcePicklistFieldName = thisInstance.getDependentSourcePicklistName(fieldName); + if(sourcePicklistFieldName) { + thisInstance.handlePickListDependencyMap(sourcePicklistFieldName); + } + } + }, + + getDependentSourcePicklistName : function(fieldName) { + var container = this.getForm(); + var picklistDependcyElemnt = jQuery('[name="picklistDependency"]',container); + if(picklistDependcyElemnt.length <= 0) { + return ''; + } + + var picklistDependencyMapping = JSON.parse(picklistDependcyElemnt.val()); + var sourcePicklists = Object.keys(picklistDependencyMapping); + if(sourcePicklists.length <= 0){ + return ''; + } + var sourcePicklistFieldName = ''; + jQuery.each(picklistDependencyMapping, function(sourcePicklistName, configuredDependencyObject) { + var picklistmap = configuredDependencyObject["__DEFAULT__"]; + jQuery.each(picklistmap,function(targetPickListName,targetPickListValues){ + if(targetPickListName == fieldName){ + sourcePicklistFieldName = sourcePicklistName; + } + }); + }); + + return sourcePicklistFieldName; + }, + + getInlineWrapper : function(element) { + var wrapperElement = element.closest('td'); + if(!wrapperElement.length) { + wrapperElement = element.closest('.td'); + } + return wrapperElement; + }, + + /** + * Ajax Edit Save Event + * @param {type} currentTdElement + * @returns {undefined} + */ + registerAjaxEditSaveEvent : function(contentHolder){ + var thisInstance = this; + if(typeof contentHolder === 'undefined') { + contentHolder = this.getContentHolder(); + } + + contentHolder.on('click','.inlineAjaxSave',function(e){ + e.preventDefault(); + e.stopPropagation(); + var currentTarget = jQuery(e.currentTarget); + var currentTdElement = thisInstance.getInlineWrapper(currentTarget); + var detailViewValue = jQuery('.value',currentTdElement); + var editElement = jQuery('.edit',currentTdElement); + var actionElement = jQuery('.editAction', currentTdElement); + var fieldBasicData = jQuery('.fieldBasicData', editElement); + var fieldName = fieldBasicData.data('name'); + var fieldType = fieldBasicData.data("type"); + var previousValue = jQuery.trim(fieldBasicData.data('displayvalue')); + + var fieldElement = jQuery('[name="'+ fieldName +'"]', editElement); + var ajaxEditNewValue = fieldElement.val(); + + // ajaxEditNewValue should be taken based on field Type + if(fieldElement.is('input:checkbox')) { + if(fieldElement.is(':checked')) { + ajaxEditNewValue = '1'; + } else { + ajaxEditNewValue = '0'; + } + fieldElement = fieldElement.filter('[type="checkbox"]'); + } else if(fieldType == 'reference'){ + ajaxEditNewValue = fieldElement.attr('value'); + } + + // prev Value should be taken based on field Type + var customHandlingFields = ['owner','ownergroup','picklist','multipicklist','reference','boolean']; + if(jQuery.inArray(fieldType, customHandlingFields) !== -1){ + previousValue = fieldBasicData.data('value'); + } + + // Field Specific custom Handling + if(fieldType === 'multipicklist'){ + var multiPicklistFieldName = fieldName.split('[]'); + fieldName = multiPicklistFieldName[0]; + } + + var fieldValue = ajaxEditNewValue; + + //Before saving ajax edit values we need to check if the value is changed then only we have to save + if(previousValue == ajaxEditNewValue) { + detailViewValue.css('display', 'inline-block'); + editElement.addClass('hide'); + editElement.removeClass('ajaxEdited'); + jQuery('.editAction').removeClass('hide'); + actionElement.show(); + }else{ + var fieldNameValueMap = {}; + fieldNameValueMap['value'] = fieldValue; + fieldNameValueMap['field'] = fieldName; + var form = currentTarget.closest('form'); + var params = { + 'ignore' : 'span.hide .inputElement,input[type="hidden"]', + submitHandler : function(form){ + var preAjaxSaveEvent = jQuery.Event(Vtiger_Detail_Js.PreAjaxSaveEvent); + app.event.trigger(preAjaxSaveEvent,{form:jQuery(form),tiggeredFiledInfo:fieldNameValueMap}); + if(preAjaxSaveEvent.isDefaultPrevented()) { + return false; + } + + jQuery(currentTdElement).find('.input-group-addon').addClass('disabled'); + app.helper.showProgress(); + thisInstance.saveFieldValues(fieldNameValueMap).then(function(response) { + app.helper.hideProgress(); + var postSaveRecordDetails = response; + if(fieldBasicData.data('type') == 'picklist' && app.getModuleName() != 'Users') { + var color = postSaveRecordDetails[fieldName].colormap[postSaveRecordDetails[fieldName].value]; + if(color) { + var contrast = app.helper.getColorContrast(color); + var textColor = (contrast === 'dark') ? 'white' : 'black'; + var picklistHtml = '<span class="picklist-color" style="background-color: ' + color + '; color: '+ textColor + ';">' + + postSaveRecordDetails[fieldName].display_value + + '</span>'; + } else { + var picklistHtml = '<span class="picklist-color">' + + postSaveRecordDetails[fieldName].display_value + + '</span>'; + } + detailViewValue.html(picklistHtml); + } else if(fieldBasicData.data('type') == 'multipicklist' && app.getModuleName() != 'Users') { + var picklistHtml = ''; + var rawPicklistValues = postSaveRecordDetails[fieldName].value; + rawPicklistValues = rawPicklistValues.split('|##|'); + var picklistValues = postSaveRecordDetails[fieldName].display_value; + picklistValues = picklistValues.split(','); + for(var i=0; i< rawPicklistValues.length; i++) { + var color = postSaveRecordDetails[fieldName].colormap[rawPicklistValues[i].trim()]; + if(color) { + var contrast = app.helper.getColorContrast(color); + var textColor = (contrast === 'dark') ? 'white' : 'black'; + picklistHtml = picklistHtml + + '<span class="picklist-color" style="background-color: ' + color + '; color: '+ textColor + ';">' + + picklistValues[i] + + '</span>'; + } else { + picklistHtml = picklistHtml + + '<span class="picklist-color">' + + picklistValues[i] + + '</span>'; + } + if(picklistValues[i+1]!==undefined) + picklistHtml+=' , '; + } + detailViewValue.html(picklistHtml); + } else if(fieldBasicData.data('type') == 'currency' && app.getModuleName() != 'Users') { detailViewValue.find('.currencyValue').html(postSaveRecordDetails[fieldName].display_value); contentHolder.closest('.detailViewContainer').find('.detailview-header-block').find('.'+fieldName).html(postSaveRecordDetails[fieldName].display_value); }else { - detailViewValue.html(postSaveRecordDetails[fieldName].display_value); - //update namefields displayvalue in header - if(contentHolder.hasClass('overlayDetail')) { - contentHolder.find('.overlayDetailHeader').find('.'+fieldName) - .html(postSaveRecordDetails[fieldName].display_value); - } else { - contentHolder.closest('.detailViewContainer').find('.detailview-header-block') - .find('.'+fieldName).html(postSaveRecordDetails[fieldName].display_value); - } - } - fieldBasicData.data('displayvalue',postSaveRecordDetails[fieldName].display_value); - fieldBasicData.data('value',postSaveRecordDetails[fieldName].value); - jQuery(currentTdElement).find('.input-group-addon').removeClass("disabled"); - - detailViewValue.css('display', 'inline-block'); - editElement.addClass('hide'); - editElement.removeClass('ajaxEdited'); - jQuery('.editAction').removeClass('hide'); - actionElement.show(); - var postAjaxSaveEvent = jQuery.Event(Vtiger_Detail_Js.PostAjaxSaveEvent); - app.event.trigger(postAjaxSaveEvent, fieldBasicData, postSaveRecordDetails, contentHolder); - //After saving source field value, If Target field value need to change by user, show the edit view of target field. - if(thisInstance.targetPicklistChange) { - var sourcePicklistname = thisInstance.sourcePicklistname; - thisInstance.targetPicklist.find('.editAction').trigger('click'); - thisInstance.targetPicklistChange = false; - thisInstance.targetPicklist = false; - thisInstance.handlePickListDependencyMap(sourcePicklistname); - thisInstance.sourcePicklistname = false; - } - }); - } - }; - validateAndSubmitForm(form,params); - } - }); - }, - - handlePickListDependencyMap : function(sourcePicklistName) { - var container = this.getForm(); + detailViewValue.html(postSaveRecordDetails[fieldName].display_value); + //update namefields displayvalue in header + if(contentHolder.hasClass('overlayDetail')) { + contentHolder.find('.overlayDetailHeader').find('.'+fieldName) + .html(postSaveRecordDetails[fieldName].display_value); + } else { + contentHolder.closest('.detailViewContainer').find('.detailview-header-block') + .find('.'+fieldName).html(postSaveRecordDetails[fieldName].display_value); + } + } + fieldBasicData.data('displayvalue',postSaveRecordDetails[fieldName].display_value); + fieldBasicData.data('value',postSaveRecordDetails[fieldName].value); + jQuery(currentTdElement).find('.input-group-addon').removeClass("disabled"); + + detailViewValue.css('display', 'inline-block'); + editElement.addClass('hide'); + editElement.removeClass('ajaxEdited'); + jQuery('.editAction').removeClass('hide'); + actionElement.show(); + var postAjaxSaveEvent = jQuery.Event(Vtiger_Detail_Js.PostAjaxSaveEvent); + app.event.trigger(postAjaxSaveEvent, fieldBasicData, postSaveRecordDetails, contentHolder); + //After saving source field value, If Target field value need to change by user, show the edit view of target field. + if(thisInstance.targetPicklistChange) { + var sourcePicklistname = thisInstance.sourcePicklistname; + thisInstance.targetPicklist.find('.editAction').trigger('click'); + thisInstance.targetPicklistChange = false; + thisInstance.targetPicklist = false; + thisInstance.handlePickListDependencyMap(sourcePicklistname); + thisInstance.sourcePicklistname = false; + } + }); + } + }; + validateAndSubmitForm(form,params); + } + }); + }, + + handlePickListDependencyMap : function(sourcePicklistName) { + var container = this.getForm(); var picklistDependcyElemnt = jQuery('[name="picklistDependency"]',container); if(picklistDependcyElemnt.length <= 0) { return; @@ -1397,101 +1397,101 @@ Vtiger.Class("Vtiger_Detail_Js",{ return; } - var configuredDependencyObject = picklistDependencyMapping[sourcePicklistName]; - var selectedValue = container.find('[data-name='+sourcePicklistName+']').data('value'); - var targetObjectForSelectedSourceValue = configuredDependencyObject[selectedValue]; - var picklistmap = configuredDependencyObject["__DEFAULT__"]; - if(typeof targetObjectForSelectedSourceValue == 'undefined'){ - targetObjectForSelectedSourceValue = picklistmap; - } - jQuery.each(picklistmap,function(targetPickListName,targetPickListValues){ - var targetPickListMap = targetObjectForSelectedSourceValue[targetPickListName]; - if(typeof targetPickListMap == "undefined"){ - targetPickListMap = targetPickListValues; - } - var targetPickList = jQuery('[name="'+targetPickListName+'"]',container); - if(targetPickList.length <= 0){ - return; - } - - var listOfAvailableOptions = targetPickList.data('available-options'); - if(typeof listOfAvailableOptions == "undefined"){ - listOfAvailableOptions = jQuery('option',targetPickList); - targetPickList.data('available-options', listOfAvailableOptions); - } - - var targetOptions = new jQuery(); - var optionSelector = []; - optionSelector.push(''); - for(var i=0; i<targetPickListMap.length; i++){ - optionSelector.push(targetPickListMap[i]); - } - - jQuery.each(listOfAvailableOptions, function(i,e) { - var picklistValue = jQuery(e).val(); - if(jQuery.inArray(picklistValue, optionSelector) != -1) { - targetOptions = targetOptions.add(jQuery(e)); - } - }) - var targetPickListSelectedValue = ''; - targetPickListSelectedValue = targetOptions.filter('[selected]').val(); - if(targetPickListMap.length == 1) { - targetPickListSelectedValue = targetPickListMap[0]; // to automatically select picklist if only one picklistmap is present. - } + var configuredDependencyObject = picklistDependencyMapping[sourcePicklistName]; + var selectedValue = container.find('[data-name='+sourcePicklistName+']').data('value'); + var targetObjectForSelectedSourceValue = configuredDependencyObject[selectedValue]; + var picklistmap = configuredDependencyObject["__DEFAULT__"]; + if(typeof targetObjectForSelectedSourceValue == 'undefined'){ + targetObjectForSelectedSourceValue = picklistmap; + } + jQuery.each(picklistmap,function(targetPickListName,targetPickListValues){ + var targetPickListMap = targetObjectForSelectedSourceValue[targetPickListName]; + if(typeof targetPickListMap == "undefined"){ + targetPickListMap = targetPickListValues; + } + var targetPickList = jQuery('[name="'+targetPickListName+'"]',container); + if(targetPickList.length <= 0){ + return; + } + + var listOfAvailableOptions = targetPickList.data('available-options'); + if(typeof listOfAvailableOptions == "undefined"){ + listOfAvailableOptions = jQuery('option',targetPickList); + targetPickList.data('available-options', listOfAvailableOptions); + } + + var targetOptions = new jQuery(); + var optionSelector = []; + optionSelector.push(''); + for(var i=0; i<targetPickListMap.length; i++){ + optionSelector.push(targetPickListMap[i]); + } + + jQuery.each(listOfAvailableOptions, function(i,e) { + var picklistValue = jQuery(e).val(); + if(jQuery.inArray(picklistValue, optionSelector) != -1) { + targetOptions = targetOptions.add(jQuery(e)); + } + }) + var targetPickListSelectedValue = ''; + targetPickListSelectedValue = targetOptions.filter('[selected]').val(); + if(targetPickListMap.length == 1) { + targetPickListSelectedValue = targetPickListMap[0]; // to automatically select picklist if only one picklistmap is present. + } if((targetPickListName == 'group_id' || targetPickListName == 'assigned_user_id') && jQuery("[data-name="+ sourcePicklistName +"]").data('value') == ''){ return false; } - targetPickList.html(targetOptions).val(targetPickListSelectedValue).trigger("change"); - }) - - }, - - /** - * Ajax Edit Calcel Event - * @param {type} currentTdElement - * @returns {undefined} - */ - registerAjaxEditCancelEvent : function(contentHolder){ - var thisInstance = this; - if(typeof contentHolder === 'undefined') { - contentHolder = this.getContentHolder(); - } - contentHolder.on('click','.inlineAjaxCancel',function(e){ - e.preventDefault(); - e.stopPropagation(); - var currentTarget = jQuery(e.currentTarget); - var currentTdElement = thisInstance.getInlineWrapper(currentTarget); - var detailViewValue = jQuery('.value',currentTdElement); - var editElement = jQuery('.edit',currentTdElement); - var actionElement = jQuery('.editAction', currentTdElement); - detailViewValue.css('display', 'inline-block'); - editElement.addClass('hide'); - editElement.find('.inputElement').trigger('Vtiger.Validation.Hide.Messsage') - editElement.removeClass('ajaxEdited'); - jQuery('.editAction').removeClass('hide'); - actionElement.show(); - }); - }, - - registerClearReferenceSelectionEvent : function(contentHolder) { - var thisInstance = this; - if(typeof contentHolder === 'undefined') { - contentHolder = this.getContentHolder(); - } + targetPickList.html(targetOptions).val(targetPickListSelectedValue).trigger("change"); + }) + + }, + + /** + * Ajax Edit Calcel Event + * @param {type} currentTdElement + * @returns {undefined} + */ + registerAjaxEditCancelEvent : function(contentHolder){ + var thisInstance = this; + if(typeof contentHolder === 'undefined') { + contentHolder = this.getContentHolder(); + } + contentHolder.on('click','.inlineAjaxCancel',function(e){ + e.preventDefault(); + e.stopPropagation(); + var currentTarget = jQuery(e.currentTarget); + var currentTdElement = thisInstance.getInlineWrapper(currentTarget); + var detailViewValue = jQuery('.value',currentTdElement); + var editElement = jQuery('.edit',currentTdElement); + var actionElement = jQuery('.editAction', currentTdElement); + detailViewValue.css('display', 'inline-block'); + editElement.addClass('hide'); + editElement.find('.inputElement').trigger('Vtiger.Validation.Hide.Messsage') + editElement.removeClass('ajaxEdited'); + jQuery('.editAction').removeClass('hide'); + actionElement.show(); + }); + }, + + registerClearReferenceSelectionEvent : function(contentHolder) { + var thisInstance = this; + if(typeof contentHolder === 'undefined') { + contentHolder = this.getContentHolder(); + } contentHolder.on('click','.clearReferenceSelection',function(e){ - e.preventDefault(); + e.preventDefault(); var element = jQuery(e.currentTarget); var parentTdElement = thisInstance.getInlineWrapper(element); - var inputElement = parentTdElement.find('.inputElement'); - parentTdElement.find('.referencefield-wrapper').removeClass('selected'); - inputElement.removeAttr("disabled"); - inputElement.attr("value",""); - inputElement.val(""); - element.addClass('hide'); + var inputElement = parentTdElement.find('.inputElement'); + parentTdElement.find('.referencefield-wrapper').removeClass('selected'); + inputElement.removeAttr("disabled"); + inputElement.attr("value",""); + inputElement.val(""); + element.addClass('hide'); }); }, - - searchModuleNames : function(params) { + + searchModuleNames : function(params) { var aDeferred = jQuery.Deferred(); if(typeof params.module == 'undefined') { @@ -1501,7 +1501,7 @@ Vtiger.Class("Vtiger_Detail_Js",{ if(typeof params.action == 'undefined') { params.action = 'BasicAjax'; } - + if(typeof params.base_record == 'undefined') { var record = jQuery('[name="record"]'); var recordId = app.getRecordId(); @@ -1516,7 +1516,7 @@ Vtiger.Class("Vtiger_Detail_Js",{ } } } - + app.request.get({data:params}).then( function(err, res){ aDeferred.resolve(res); @@ -1525,51 +1525,51 @@ Vtiger.Class("Vtiger_Detail_Js",{ //TODO : Handle error aDeferred.reject(); } - ); + ); return aDeferred.promise(); }, - - /** + + /** * Function to get reference search params */ getReferenceSearchParams : function(element){ var tdElement = jQuery(element).closest('td'); var params = {}; - var referenceModuleElement = jQuery('input[name="referenceModule"]',tdElement).length ? - jQuery('input[name="referenceModule"]',tdElement) : jQuery('input.referenceModule',tdElement); + var referenceModuleElement = jQuery('input[name="referenceModule"]',tdElement).length ? + jQuery('input[name="referenceModule"]',tdElement) : jQuery('input.referenceModule',tdElement); var searchModule = referenceModuleElement.val(); params.search_module = searchModule; return params; }, - - /** - * Load Detail View Contents - * @param {type} url - * @returns {unresolved} - */ - loadContents : function(url,data){ + + /** + * Load Detail View Contents + * @param {type} url + * @returns {unresolved} + */ + loadContents : function(url,data){ var thisInstance = this; - var detailContentsHolder = this.getContentHolder(); - var aDeferred = jQuery.Deferred(); - if(url.indexOf('index.php') < 0) { - url = 'index.php?' + url; - } - var params = []; - params.url = url; - if(typeof data != 'undefined'){ - params.data = data; - } - app.helper.showProgress(); - app.request.pjax(params).then(function(error,response){ - detailContentsHolder.html(response); - thisInstance.detailViewForm = jQuery('#detailView'); + var detailContentsHolder = this.getContentHolder(); + var aDeferred = jQuery.Deferred(); + if(url.indexOf('index.php') < 0) { + url = 'index.php?' + url; + } + var params = []; + params.url = url; + if(typeof data != 'undefined'){ + params.data = data; + } + app.helper.showProgress(); + app.request.pjax(params).then(function(error,response){ + detailContentsHolder.html(response); + thisInstance.detailViewForm = jQuery('#detailView'); thisInstance.registerBlockStatusCheckOnLoad(); - aDeferred.resolve(response); - app.helper.hideProgress(); - }); - return aDeferred.promise(); - }, - + aDeferred.resolve(response); + app.helper.hideProgress(); + }); + return aDeferred.promise(); + }, + registerBlockAnimationEvent : function(){ var detailContentsHolder = this.getContentHolder(); detailContentsHolder.on('click','.blockToggle',function(e){ @@ -1599,7 +1599,7 @@ Vtiger.Class("Vtiger_Detail_Js",{ }); }, - + registerBlockStatusCheckOnLoad : function(){ var blocks = this.getContentHolder().find('.block'); var module = app.getModuleName(); @@ -1611,38 +1611,38 @@ Vtiger.Class("Vtiger_Detail_Js",{ var cacheKey = module+'.'+blockId; var value = app.storage.get(cacheKey); if(value != null){ - if(value == 1){ - headerAnimationElement.hide(); - currentBlock.find("[data-mode='show']").removeClass('hide').show(); - bodyContents.removeClass('hide').show(); - } else { - headerAnimationElement.hide(); - currentBlock.find("[data-mode='hide']").removeClass('hide').show(); - bodyContents.hide(); - } + if(value == 1){ + headerAnimationElement.hide(); + currentBlock.find("[data-mode='show']").removeClass('hide').show(); + bodyContents.removeClass('hide').show(); + } else { + headerAnimationElement.hide(); + currentBlock.find("[data-mode='hide']").removeClass('hide').show(); + bodyContents.hide(); + } } else { - if(bodyContents.hasClass("hide")) { - headerAnimationElement.hide(); + if(bodyContents.hasClass("hide")) { + headerAnimationElement.hide(); currentBlock.find("[data-mode='hide']").show(); bodyContents.hide(); - } - } + } + } }); }, - - registerEventForActivityWidget : function(){ + + registerEventForActivityWidget : function(){ var thisInstance = this; /* * Register click event for add button in Related Activities widget */ jQuery('.createActivity').on('click', function(e){ - var currentTarget = jQuery(e.currentTarget); - var referenceModuleName; - if(currentTarget.hasClass('toDotask')){ - referenceModuleName = 'Calendar'; - }else{ - referenceModuleName = "Events"; - } + var currentTarget = jQuery(e.currentTarget); + var referenceModuleName; + if(currentTarget.hasClass('toDotask')){ + referenceModuleName = 'Calendar'; + }else{ + referenceModuleName = "Events"; + } var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]'); var recordId = thisInstance.getRecordId(); var module = app.getModuleName(); @@ -1655,20 +1655,20 @@ Vtiger.Class("Vtiger_Detail_Js",{ if(typeof fieldName == 'undefined' && module != 'Contacts'){ fieldName = 'parent_id'; } - + var customParams = {}; customParams[fieldName] = recordId; customParams['parentModule'] = module; - - app.event.on("post.QuickCreateForm.show",function(event,form){ - jQuery('<input type="hidden" name="sourceModule" value="'+module+'" >').appendTo(form); - jQuery('<input type="hidden" name="sourceRecord" value="'+recordId+'" >').appendTo(form); - jQuery('<input type="hidden" name="relationOperation" value="true" >').appendTo(form); - jQuery('<input type="hidden" name="'+fieldName+'" value="'+recordId+'" >').appendTo(form); - }); - - app.event.on('post.QuickCreateForm.save',function(event,data){ - var params = {}; + + app.event.on("post.QuickCreateForm.show",function(event,form){ + jQuery('<input type="hidden" name="sourceModule" value="'+module+'" >').appendTo(form); + jQuery('<input type="hidden" name="sourceRecord" value="'+recordId+'" >').appendTo(form); + jQuery('<input type="hidden" name="relationOperation" value="true" >').appendTo(form); + jQuery('<input type="hidden" name="'+fieldName+'" value="'+recordId+'" >').appendTo(form); + }); + + app.event.on('post.QuickCreateForm.save',function(event,data){ + var params = {}; params['record'] = recordId; params['view'] = 'Detail'; params['module'] = module; @@ -1679,23 +1679,23 @@ Vtiger.Class("Vtiger_Detail_Js",{ var activitiesWidget = jQuery('#relatedActivities'); activitiesWidget.html(data); vtUtils.applyFieldElementsView(activitiesWidget); - thisInstance.registerEventForActivityWidget(); + thisInstance.registerEventForActivityWidget(); } ); - }); - + }); + var QuickCreateParams = {}; QuickCreateParams['noCache'] = false; QuickCreateParams['data'] = customParams; quickCreateNode.trigger('click', QuickCreateParams); }); }, - - registerSummaryViewContainerEvents : function(summaryViewContainer){ - var self = this; - this.registerEventForActivityWidget(); - this.loadWidgets(); - /** + + registerSummaryViewContainerEvents : function(summaryViewContainer){ + var self = this; + this.registerEventForActivityWidget(); + this.loadWidgets(); + /** * Function to handle the ajax edit for summary view fields */ summaryViewContainer.on('click','table.summary-table td.fieldValue .editAction', function(e){ @@ -1704,8 +1704,8 @@ Vtiger.Class("Vtiger_Detail_Js",{ var currentTdElement = currentTarget.closest('td.fieldValue'); self.ajaxEditHandling(currentTdElement); }); - - jQuery('.createRecord').on('click',function(e){ + + jQuery('.createRecord').on('click',function(e){ var currentElement = jQuery(e.currentTarget); var summaryWidgetContainer = currentElement.closest('.summaryWidgetContainer'); var widgetHeaderContainer = summaryWidgetContainer.find('.widget_header'); @@ -1721,27 +1721,27 @@ Vtiger.Class("Vtiger_Detail_Js",{ if(quickCreateNode.length <= 0) { app.helper.showErrorMessage(app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED')); } - - app.event.on('post.QuickCreateForm.save',function(event,data){ - var idList = new Array(); - idList.push(data._recordId); - - self.addRelationBetweenRecords(referenceModuleName,idList).then(function(data){ - self.loadWidget(summaryWidgetContainer.find('[class^="widgetContainer_"]')); - }); - }); + + app.event.on('post.QuickCreateForm.save',function(event,data){ + var idList = new Array(); + idList.push(data._recordId); + + self.addRelationBetweenRecords(referenceModuleName,idList).then(function(data){ + self.loadWidget(summaryWidgetContainer.find('[class^="widgetContainer_"]')); + }); + }); var QuickCreateParams = {}; QuickCreateParams['data'] = customParams; QuickCreateParams['noCache'] = false; quickCreateNode.trigger('click', QuickCreateParams); }); - - /* + + /* * Register the event to edit the status for for related activities */ summaryViewContainer.on('click', '.editStatus', function(e){ - var currentTarget = jQuery(e.currentTarget); + var currentTarget = jQuery(e.currentTarget); var currentDiv = currentTarget.closest('.activityStatus'); var editElement = currentDiv.find('.edit'); var detailViewElement = currentDiv.find('.value'); @@ -1749,15 +1749,15 @@ Vtiger.Class("Vtiger_Detail_Js",{ currentTarget.hide(); detailViewElement.addClass('hide'); editElement.removeClass('hide').show(); - - var callbackFunction = function() { - var fieldnameElement = jQuery('.fieldname', editElement); + + var callbackFunction = function() { + var fieldnameElement = jQuery('.fieldname', editElement); var fieldName = fieldnameElement.val(); var fieldElement = jQuery('[name="'+ fieldName +'"]', editElement); var previousValue = fieldnameElement.data('prevValue'); var ajaxEditNewValue = fieldElement.find('option:selected').val(); var translatedValue = fieldElement.find('option:selected').text(); - + var select2Element = fieldElement.parent().find('.select2-container'); if(ajaxEditNewValue == '') { vtUtils.showValidationMessage(select2Element, app.vtranslate('JS_REQUIRED_FIELD')); @@ -1766,19 +1766,19 @@ Vtiger.Class("Vtiger_Detail_Js",{ } else { vtUtils.hideValidationMessage(select2Element); } - + if(previousValue == ajaxEditNewValue) { - editElement.addClass('hide'); - detailViewElement.removeClass('hide'); + editElement.addClass('hide'); + detailViewElement.removeClass('hide'); currentTarget.show(); - } else { + } else { var activityDiv = currentDiv.closest('.activityEntries'); var activityId = activityDiv.find('.activityId').val(); var moduleName = activityDiv.find('.activityModule').val(); var activityType = activityDiv.find('.activityType').val(); - app.helper.showProgress(); - editElement.addClass('hide'); + app.helper.showProgress(); + editElement.addClass('hide'); var params = { action : 'SaveAjax', record : activityId, @@ -1792,26 +1792,26 @@ Vtiger.Class("Vtiger_Detail_Js",{ app.request.post({"data":params}).then( function(err,data) { - app.helper.hideProgress(); + app.helper.hideProgress(); detailViewElement.removeClass('hide'); currentTarget.show(); detailViewElement.html(translatedValue); fieldnameElement.data('prevValue', ajaxEditNewValue); - }); - } - } - app.helper.addClickOutSideEvent(currentDiv,callbackFunction); - }); - }, - - addRelationBetweenRecords : function(relatedModule, relatedModuleRecordId){ + }); + } + } + app.helper.addClickOutSideEvent(currentDiv,callbackFunction); + }); + }, + + addRelationBetweenRecords : function(relatedModule, relatedModuleRecordId){ var aDeferred = jQuery.Deferred(); var thisInstance = this; var relatedController = thisInstance.getRelatedController(relatedModule); - if(thisInstance.getOverlayDetailMode() == true){ - relatedController.parentModuleName = thisInstance.getModuleName(); - relatedController.setSelectedTabElement(''); - } + if(thisInstance.getOverlayDetailMode() == true){ + relatedController.parentModuleName = thisInstance.getModuleName(); + relatedController.setSelectedTabElement(''); + } if(relatedController){ relatedController.addRelations(relatedModuleRecordId).then( function(data){ @@ -1825,56 +1825,56 @@ Vtiger.Class("Vtiger_Detail_Js",{ } return aDeferred.promise(); }, - - loadWidgets : function(){ + + loadWidgets : function(){ var self = this; var widgetList = jQuery('[class^="widgetContainer_"]'); widgetList.each(function(index,widgetContainerELement){ var widgetContainer = jQuery(widgetContainerELement); self.loadWidget(widgetContainer).then(function(){ - app.event.trigger('post.summarywidget.load',widgetContainer); - }); + app.event.trigger('post.summarywidget.load',widgetContainer); + }); }); }, loadWidget : function(widgetContainer) { - var aDeferred = jQuery.Deferred(); - var thisInstance = this; + var aDeferred = jQuery.Deferred(); + var thisInstance = this; var contentContainer = jQuery('.widget_contents',widgetContainer); var urlParams = widgetContainer.data('url'); - + var params = { 'type' : 'GET', 'dataType': 'html', 'data' : urlParams }; - app.helper.showProgress(); + app.helper.showProgress(); app.request.post(params).then( function(err,data){ - app.helper.hideProgress(); - contentContainer.html(data); - contentContainer.trigger(thisInstance.widgetPostLoad); - - var adjustedHeight = contentContainer.height()-50; - app.helper.showVerticalScroll(contentContainer.find('.twitterContainer'),{ - 'setHeight' : adjustedHeight - }); - - aDeferred.resolve(params); + app.helper.hideProgress(); + contentContainer.html(data); + contentContainer.trigger(thisInstance.widgetPostLoad); + + var adjustedHeight = contentContainer.height()-50; + app.helper.showVerticalScroll(contentContainer.find('.twitterContainer'),{ + 'setHeight' : adjustedHeight + }); + + aDeferred.resolve(params); }, function(){ - aDeferred.reject(); + aDeferred.reject(); } ); - return aDeferred.promise(); + return aDeferred.promise(); }, - - - getTabs : function() { + + + getTabs : function() { return this.getTabContainer().find('li'); }, - - /** + + /** * Function to return related tab. * @return : jQuery Object. */ @@ -1891,8 +1891,8 @@ Vtiger.Class("Vtiger_Detail_Js",{ }); return targetTab; }, - - /** + + /** * function to save comment * return json response */ @@ -1906,26 +1906,26 @@ Vtiger.Class("Vtiger_Detail_Js",{ var commentContent = closestCommentBlock.find('.commentcontent'); var formData = new FormData(form[0]); var commentContentValue = commentContent.val(); - var isPrivate; - if(closestCommentBlock.find('#is_private').is(":checked")) { - isPrivate = 1; - } else { - isPrivate = 0; - } + var isPrivate; + if(closestCommentBlock.find('#is_private').is(":checked")) { + isPrivate = 1; + } else { + isPrivate = 0; + } var errorMsg; if(commentContentValue.trim() == ""){ errorMsg = app.vtranslate('JS_LBL_COMMENT_VALUE_CANT_BE_EMPTY'); - vtUtils.showValidationMessage(commentContent, errorMsg); + vtUtils.showValidationMessage(commentContent, errorMsg); aDeferred.reject(); return aDeferred.promise(); } - vtUtils.hideValidationMessage(commentContent); + vtUtils.hideValidationMessage(commentContent); if(commentMode == "edit"){ var editCommentReason = closestCommentBlock.find('[name="reasonToEdit"]').val(); - isPrivate = closestCommentBlock.find('[name="is_private"]').val(); + isPrivate = closestCommentBlock.find('[name="is_private"]').val(); } - app.helper.showProgress(); + app.helper.showProgress(); var element = jQuery(e.currentTarget); element.attr('disabled', 'disabled'); @@ -1934,14 +1934,14 @@ Vtiger.Class("Vtiger_Detail_Js",{ var parentCommentId = commentInfoHeader.data('parentcommentid'); var commentRelatedTo = commentInfoHeader.data('relatedto'); if(!commentRelatedTo) commentRelatedTo = self.getRecordId(); - - var postData = { + + var postData = { 'commentcontent' : commentContentValue, 'related_to': commentRelatedTo, 'module' : 'ModComments', - 'is_private' : isPrivate + 'is_private' : isPrivate } - var incrementCount = false; + var incrementCount = false; if(commentMode == "edit"){ postData['record'] = commentId; postData['reasontoedit'] = editCommentReason; @@ -1952,7 +1952,7 @@ Vtiger.Class("Vtiger_Detail_Js",{ postData['parent_comments'] = commentId; postData['action'] = 'SaveAjax'; postData['filename'] = Vtiger_Index_Js.files, - incrementCount = true; + incrementCount = true; } jQuery.each(postData, function (key, value) { formData.append(key, value); @@ -1967,18 +1967,18 @@ Vtiger.Class("Vtiger_Detail_Js",{ app.request.post(postData).then( function(err,data){ Vtiger_Index_Js.files = ''; - jQuery('.MultiFile-remove').trigger('click'); - app.helper.hideProgress(); - if(incrementCount){ - // to increment related records count when we add comment from related tab / summary view widget - var tabElement = self.getTabByLabel("ModComments"); - var relatedController = new Vtiger_RelatedList_Js(self.getRecordId(), app.getModuleName(), tabElement, self.getRelatedModuleName()); - relatedController.updateRelatedRecordsCount(jQuery(tabElement).data('relation-id'),[1],true); - } + jQuery('.MultiFile-remove').trigger('click'); + app.helper.hideProgress(); + if(incrementCount){ + // to increment related records count when we add comment from related tab / summary view widget + var tabElement = self.getTabByLabel("ModComments"); + var relatedController = new Vtiger_RelatedList_Js(self.getRecordId(), app.getModuleName(), tabElement, self.getRelatedModuleName()); + relatedController.updateRelatedRecordsCount(jQuery(tabElement).data('relation-id'),[1],true); + } aDeferred.resolve(data); }, function(textStatus, errorThrown){ - app.helper.hideProgress(); + app.helper.hideProgress(); element.removeAttr('disabled'); aDeferred.reject(textStatus, errorThrown); } @@ -1986,8 +1986,8 @@ Vtiger.Class("Vtiger_Detail_Js",{ return aDeferred.promise(); }, - - /** + + /** * function to remove comment block if its exists. */ removeCommentBlockIfExists : function() { @@ -1995,8 +1995,8 @@ Vtiger.Class("Vtiger_Detail_Js",{ var Commentswidget = jQuery('.commentsBody',detailContentsHolder); jQuery('.addCommentBlock',Commentswidget).remove(); }, - - /** + + /** * function to return cloned edit comment block * return jQuery Obj. */ @@ -2004,11 +2004,11 @@ Vtiger.Class("Vtiger_Detail_Js",{ var detailContentsHolder = this.getContentHolder(); var clonedCommentBlock = jQuery('.basicEditCommentBlock',detailContentsHolder).clone(true,true).removeClass('basicEditCommentBlock hide').addClass('addCommentBlock'); clonedCommentBlock.find('.commentcontenthidden').removeClass('commentcontenthidden').addClass('commentcontent'); - clonedCommentBlock.find('.commentcontent').addClass('mention_listener'); + clonedCommentBlock.find('.commentcontent').addClass('mention_listener'); return clonedCommentBlock; }, - - /** + + /** * function to return cloned add comment block * return jQuery Obj. */ @@ -2016,25 +2016,25 @@ Vtiger.Class("Vtiger_Detail_Js",{ var detailContentsHolder = this.getContentHolder(); var clonedCommentBlock = jQuery('.basicAddCommentBlock',detailContentsHolder).clone(true,true).removeClass('basicAddCommentBlock hide').addClass('addCommentBlock'); clonedCommentBlock.find('.commentcontenthidden').removeClass('commentcontenthidden').addClass('commentcontent'); - clonedCommentBlock.find('.commentcontent').addClass('mention_listener'); + clonedCommentBlock.find('.commentcontent').addClass('mention_listener'); return clonedCommentBlock; }, - - - /** + + + /** * function to get the Comment thread for the given parent. * params: Url to get the Comment thread */ getCommentThread : function(url) { var aDeferred = jQuery.Deferred(); app.request.post({"url":url}).then(function(err,data) { - aDeferred.resolve(data); - }); + aDeferred.resolve(data); + }); return aDeferred.promise(); }, - - - /** + + + /** * Function to get child comments */ getChildComments : function(commentId){ @@ -2046,8 +2046,8 @@ Vtiger.Class("Vtiger_Detail_Js",{ }); return aDeferred.promise(); }, - - /** + + /** * function to return the UI of the comment. * return html */ @@ -2061,650 +2061,650 @@ Vtiger.Class("Vtiger_Detail_Js",{ app.request.post({"data":postData}).then( function(err,data){ aDeferred.resolve(data); - }); + }); return aDeferred.promise(); }, - - - getRelatedRecordsCount : function(recordId, moduleName){ - var aDeferred = jQuery.Deferred(); - var params = { - 'type' : 'GET', - 'data' : { - 'module' : moduleName, - 'recordId' : recordId, - 'action' : 'RelatedRecordsAjax', - 'mode' : 'getRelatedRecordsCount' - } - }; - app.request.get(params).then(function(err,data){ - if(err == null){ - aDeferred.resolve(data); - } - }); - return aDeferred.promise(); - }, - - updateRelatedRecordsCount : function(){ - var self = this; - var recordId = self.getRecordId(); - var moduleName = app.getModuleName(); - self.getRelatedRecordsCount(recordId, moduleName).then(function(data){ - jQuery.each(data, function(key, value){ - var element = new Object(jQuery("a","li[data-relation-id="+key+"]")); - var numberEle = element.find('.numberCircle'); - numberEle.text(value); - if(parseInt(value) > 0){ - numberEle.removeClass('hide'); - } else{ - numberEle.addClass('hide'); - } - element.attr("recordscount",value); - }); - }); - }, - - registerAddTwitterToRecordEvent : function(elementId){ - jQuery('.searchProfileToolTip').tooltip({'placement': 'top','content':'html'}); - jQuery('#'+elementId).on('click', function(e){ - jQuery('.searchProfileToolTip').tooltip('hide'); - var twitterNameArray = elementId.split("__"); - Vtiger_Detail_Js.saveTwitterHandler(twitterNameArray[1]); - }); - }, - + + + getRelatedRecordsCount : function(recordId, moduleName){ + var aDeferred = jQuery.Deferred(); + var params = { + 'type' : 'GET', + 'data' : { + 'module' : moduleName, + 'recordId' : recordId, + 'action' : 'RelatedRecordsAjax', + 'mode' : 'getRelatedRecordsCount' + } + }; + app.request.get(params).then(function(err,data){ + if(err == null){ + aDeferred.resolve(data); + } + }); + return aDeferred.promise(); + }, + + updateRelatedRecordsCount : function(){ + var self = this; + var recordId = self.getRecordId(); + var moduleName = app.getModuleName(); + self.getRelatedRecordsCount(recordId, moduleName).then(function(data){ + jQuery.each(data, function(key, value){ + var element = new Object(jQuery("a","li[data-relation-id="+key+"]")); + var numberEle = element.find('.numberCircle'); + numberEle.text(value); + if(parseInt(value) > 0){ + numberEle.removeClass('hide'); + } else{ + numberEle.addClass('hide'); + } + element.attr("recordscount",value); + }); + }); + }, + + registerAddTwitterToRecordEvent : function(elementId){ + jQuery('.searchProfileToolTip').tooltip({'placement': 'top','content':'html'}); + jQuery('#'+elementId).on('click', function(e){ + jQuery('.searchProfileToolTip').tooltip('hide'); + var twitterNameArray = elementId.split("__"); + Vtiger_Detail_Js.saveTwitterHandler(twitterNameArray[1]); + }); + }, + toggleRollupComments : function (e) { - e.stopPropagation(); - e.preventDefault(); - var self = this; - var currentTarget = jQuery(e.currentTarget); - var moduleName = currentTarget.attr('module'); - var recordId = currentTarget.attr('record'); - var rollupId = currentTarget.attr('rollupid'); - var rollupstatus = currentTarget.attr('rollup-status'); - var viewtype = currentTarget.data('view'); + e.stopPropagation(); + e.preventDefault(); + var self = this; + var currentTarget = jQuery(e.currentTarget); + var moduleName = currentTarget.attr('module'); + var recordId = currentTarget.attr('record'); + var rollupId = currentTarget.attr('rollupid'); + var rollupstatus = currentTarget.attr('rollup-status'); + var viewtype = currentTarget.data('view'); var startindex = parseInt(currentTarget.attr('startindex')); - var contents, url, params; - - if(rollupstatus == 0) { - if(viewtype == 'relatedlist') { + var contents, url, params; + + if(rollupstatus == 0) { + if(viewtype == 'relatedlist') { url = 'index.php?module=Vtiger&view=ModCommentsDetailAjax&parent='+ moduleName+'&parentId='+recordId+'&rollupid='+rollupId+'&rollup_status='+rollupstatus+ '&startindex='+startindex; - contents = jQuery('.details'); - }else { - url = 'index.php?module='+moduleName+'&relatedModule=ModComments&view=Detail&record='+ - recordId+'&mode=showRecentComments'+'&rollupid='+rollupId - +'&rollup_status=1&parent='+moduleName+'&rollup-toggle=1&limit=5'; - contents = jQuery('div[data-name="ModComments"] div.widget_contents'); - } - + contents = jQuery('.details'); + }else { + url = 'index.php?module='+moduleName+'&relatedModule=ModComments&view=Detail&record='+ + recordId+'&mode=showRecentComments'+'&rollupid='+rollupId + +'&rollup_status=1&parent='+moduleName+'&rollup-toggle=1&limit=5'; + contents = jQuery('div[data-name="ModComments"] div.widget_contents'); + } + params = { 'type' : 'GET', 'url' : url }; - - app.request.get(params).then(function(err, data){ + + app.request.get(params).then(function(err, data){ app.helper.hideProgress(); - contents.html(data); - self.registerRollupCommentsSwitchEvent(); + contents.html(data); + self.registerRollupCommentsSwitchEvent(); jQuery('#rollupcomments').bootstrapSwitch('state', true, true); - }); - }else { - if(viewtype == 'relatedlist') { - url = 'index.php?module=Vtiger&view=ModCommentsDetailAjax&parent='+ - moduleName+'&parentId='+recordId+'&rollupid='+rollupId+'&rollup_status=0&mode=saveRollupSettings'; + }); + }else { + if(viewtype == 'relatedlist') { + url = 'index.php?module=Vtiger&view=ModCommentsDetailAjax&parent='+ + moduleName+'&parentId='+recordId+'&rollupid='+rollupId+'&rollup_status=0&mode=saveRollupSettings'; params = { 'type' : 'GET', 'url' : url }; - app.request.get(params).then(function(err, data){ - currentTarget.attr('rollup-status', 0); - jQuery('div.related-tabs li[data-label-key="ModComments"]').trigger('click'); - }); - }else { - url = 'index.php?module='+moduleName+'&relatedModule=ModComments&view=Detail&record='+ - recordId+'&mode=showRecentComments'+'&rollupid='+rollupId - +'&rollup_status=0&parent='+moduleName+'&rollup-toggle=1&limit=5'; - contents = jQuery('div[data-name="ModComments"] div.widget_contents'); + app.request.get(params).then(function(err, data){ + currentTarget.attr('rollup-status', 0); + jQuery('div.related-tabs li[data-label-key="ModComments"]').trigger('click'); + }); + }else { + url = 'index.php?module='+moduleName+'&relatedModule=ModComments&view=Detail&record='+ + recordId+'&mode=showRecentComments'+'&rollupid='+rollupId + +'&rollup_status=0&parent='+moduleName+'&rollup-toggle=1&limit=5'; + contents = jQuery('div[data-name="ModComments"] div.widget_contents'); params = { 'type' : 'GET', 'url' : url }; - app.request.get(params).then(function(err, data){ + app.request.get(params).then(function(err, data){ app.helper.hideProgress(); - contents.html(data); - self.registerRollupCommentsSwitchEvent(); + contents.html(data); + self.registerRollupCommentsSwitchEvent(); jQuery('#rollupcomments').bootstrapSwitch('state', false, true); - }); - } - } - }, - - registerScrollForRollupEvents : function() { - var relatedController = this.getRelatedController(); + }); + } + } + }, + + registerScrollForRollupEvents : function() { + var relatedController = this.getRelatedController(); if(relatedController) relatedController.registerScrollForRollupComments(); - }, - - registerStarToggle : function() { - var self = this; - jQuery('#starToggle').on('click',function(e){ - var element = jQuery(e.currentTarget); - if(element.hasClass('processing')) return; - element.addClass('processing'); - var record = self.getRecordId(); - var params = {}; - params.module = app.getModuleName(); - params.action = 'SaveAjax'; - params.record = record; - if(element.hasClass('active')) { - params.starred = 0; - }else { - params.starred = 1; - } - - element.toggleClass('active'); - - - app.request.post({data:params}).then(function(err,data){ - element.removeClass('processing'); - }) - }); - }, - - saveTag : function(callerParams) { - var self = this; - var aDeferred = jQuery.Deferred(); - var params = { - 'module' : app.getModuleName(), - 'action' : 'TagCloud', - 'mode' : 'saveTags', - 'record' : this.getRecordId() - - }; - var params = jQuery.extend(params, callerParams); - app.request.post({'data': params}).then( - function(error, data) { - if(error == null) { - var tagContainer = jQuery('.tagContainer'); - var tagInstance = self.getComponentInstance('Vtiger_Tag_Js'); - tagInstance.addTagsToShowAllTagContianer(data.tags); - self.addTagsToSummaryTag(data.tags); - if(parseInt(data.moreTagCount) > 0) { - tagContainer.find('.tagMoreCount').text(data.moreTagCount).closest('.moreTags').removeClass('hide'); - } - aDeferred.resolve(data); - }else{ - aDeferred.reject(data); - } - } - ); - return aDeferred.promise(); - }, - - deleteTag : function(callerParams) { - var aDeferred = jQuery.Deferred(); - - var params = { - 'module' : app.getModuleName(), - 'action' : 'TagCloud', - 'mode' : 'delete', - 'record' : this.getRecordId() - } - - var params = jQuery.extend(params, callerParams); - app.request.post({'data': params}).then( - function(error, data) { - if(error == null) { - aDeferred.resolve(data); - }else{ - aDeferred.reject(data); - } - } - ); - - return aDeferred.promise(); - }, - - constructTagElement : function (params) { - var tagElement = jQuery(jQuery('#dummyTagElement').html()).clone(true); - tagElement.attr('data-id',params.id).attr('data-type',params.type); - tagElement.find('.tagLabel').html(params.name); - return tagElement - }, - - showAllTags : function(container) { - var self = this; - var showTagModal = container.find('.showAllTagContainer').clone(true); - app.helper.showModal(showTagModal.find('.modal-dialog'),{'cb' : function(modalContainer){ - - var registerShowAllTagEvents = function(modalContainer) { - var currentTagsSelected = new Array(); - var currentTagHolder = modalContainer.find('.currentTag'); - - modalContainer.find('.dropdown-menu').on('click',function(e){ - e.stopPropagation(); - }); - - modalContainer.find('.currentTagMenu > li > a ').on('click', function(e){ - var element = jQuery(e.currentTarget); - var selectedTag = jQuery(element.html()); - currentTagsSelected.push(selectedTag.data('id')); - element.remove(); - currentTagHolder.append(selectedTag); - }); - - app.helper.showVerticalScroll(currentTagHolder); - - modalContainer.find('.currentTagSelector').instaFilta({ - targets : '.currentTagMenu > li', - sections : '.currentTagMenu', - scope : '.detailShowAllModal', - hideEmptySections : true, - beginsWith : false, - caseSensitive : false, - typeDelay : 0 - }); - - var tagInputEle = modalContainer.find('input[name="createNewTag"]'); - var params = {tags : [], tokenSeparators: [","]}; - vtUtils.showSelect2ElementView(tagInputEle, params); - - var form = modalContainer.find('form'); - form.on('submit',function(e){ - e.preventDefault(); - var modalContainerClone = modalContainer.clone(true); - app.helper.hideModal(); - var saveParams = {}; - var saveTagList = {}; - saveTagList['existing'] = currentTagsSelected; - saveTagList['new'] = tagInputEle.val().split(',') - saveParams['tagsList'] = saveTagList; - - var formData = form.serializeFormData(); - saveParams['newTagType'] = formData['visibility']; - self.saveTag(saveParams).then(function(data){ - jQuery('.showAllTagContainer').find('.currentTag').html(modalContainerClone.find('.currentTag').html()); - jQuery('.showAllTagContainer').find('.currentTagMenu').html(modalContainerClone.find('.currentTagMenu').html()); - }) - return false; - }) - - } - registerShowAllTagEvents(modalContainer); - }}); - }, - - addTagsToSummaryTag : function(tagsList) { - var summaryTagList = jQuery('.detailTagList'); - var numOfTagsToShow = parseInt(summaryTagList.data('numOfTagsToShow')); - var numOfTagsToAppend = numOfTagsToShow - (parseInt(summaryTagList.find('.tag').length)); - for(var index in tagsList) { - if(numOfTagsToAppend <= 0) { - break; - } - var tagInfo = tagsList[index]; - var tagId = tagInfo.id; - if(summaryTagList.find('[data-id="'+ tagId +'"]').length <= 0) { - var newTagEle = this.constructTagElement(tagInfo); - summaryTagList.find('.moreTags').before(newTagEle); - summaryTagList.find('.noTagsPlaceHolder').addClass('hide'); - numOfTagsToAppend--; - } - } - - if(summaryTagList.find('.tag').length > 0){ - summaryTagList.closest('.tag-contents').removeClass('hide'); - } - - }, - - removeDeletedTagsFromSummaryTag : function(deletedTags){ - var summaryTagContainer = jQuery('.detailTagList'); - for(var index in deletedTags) { - var tag = summaryTagContainer.find('.tag[data-id="'+deletedTags[index]+'"]'); - if(tag.length > 0){ - var showAllTagContainer = jQuery('.showAllTagContainer'); - var currentTagHolder = showAllTagContainer.find('.currentTag'); - var summaryLastTag = summaryTagContainer.find('.tag').filter(':last'); - var nextTag = currentTagHolder.find('[data-id="'+ summaryLastTag.data('id') +'"]').next(); - summaryTagContainer.find('.moreTags').before(nextTag.clone(true)); - tag.remove(); - } - } - - if(summaryTagContainer.find(".tag").length <=0){ - summaryTagContainer.find(".noTagsPlaceHolder").removeClass("hide"); - } - - }, - - registerTagSearch : function() { - jQuery('#tag-search').instaFilta({ - targets : '#addTagContainer .existingTag .tag-item', - sections : '#addTagContainer .existingTag', - hideEmptySections : true, - beginsWith : false, - caseSensitive : false, - typeDelay : 0 - }); - }, - - postTagDeleteActions : function(deletedTagClone) { - var summaryTagContainer = jQuery('.detailTagList'); - var tagInstance = this.getComponentInstance('Vtiger_Tag_Js'); - var tagInfo = { - 'id' : deletedTagClone.data('id') - }; - tagInstance.removeTagsFromShowTagContainer(new Array(tagInfo)); - - if(summaryTagContainer.find('.tag').length <= 0 ) { - summaryTagContainer.find('.noTagsPlaceHolder').removeClass('hide'); - }else{ - var moreTagsEle = summaryTagContainer.find('.tagMoreCount'); - if(!moreTagsEle.closest('.moreTags').hasClass('hide')) { - var moreTagsCount = parseInt(moreTagsEle.text()); - moreTagsCount--; - moreTagsEle.text(moreTagsCount); - if(moreTagsCount <=0 ){ - moreTagsEle.closest('.moreTags').addClass('hide'); - } - } - } - }, - - - registerTagEvents : function() { - var self = this; - var tagContainer = jQuery('.tagContainer'); - - tagContainer.find('#addTagContainer .dropdown-menu').on('click',function(e){ - e.stopPropagation(); - }); - var tagInputEle = tagContainer.find('.newTags'); - var params = {tags : [], tokenSeparators: [","]}; - vtUtils.showSelect2ElementView(tagInputEle, params); - - var existinTagContainer = tagContainer.find('.existingTag'); - app.helper.showVerticalScroll(existinTagContainer); - - this.registerTagSearch(); - - jQuery('#saveTag').on('click', function(e){ - tagContainer.find('.dropdown-toggle').dropdown('toggle'); - var element = jQuery(e.currentTarget); - var createTagContainer = element.closest('.createTagContainer'); - var existingTagContainer = createTagContainer.find('.existingTag'); - var selectedExistingTags = new Array(); - var selectedTagElement = existingTagContainer.find('.tagSelector').filter(':checked').closest('li.tag-item'); - selectedTagElement.each(function(index, domEle){ - var ele = jQuery(domEle); - selectedExistingTags.push(ele.find('.tag').data('id')); - }); - var newTagEle = createTagContainer.find('input.newTags'); - var newTags = newTagEle.val(); - var tagsList = {}; - tagsList['new'] = newTags.split(','); - tagsList['existing'] = selectedExistingTags; - var visibility = createTagContainer.find('[name="visibility"]').val(); - var visibilityCheckBox = createTagContainer.find('[type="checkbox"][name="visibility"]'); - if(visibilityCheckBox.is(':checked')){ - visibility = visibilityCheckBox.val(); - } - self.saveTag({'tagsList':tagsList,'newTagType': visibility}).then(function(data){ - selectedTagElement.remove(); - newTagEle.select2('val',''); - }); - }); - - tagContainer.find('.cancelLink').on('click', function(e){ - tagContainer.find('.dropdown-toggle').dropdown('toggle'); - }); - - app.event.on('post.MassTag.save',function(e, modalContainerClone, data){ - var moreTagCount = parseInt(data.moreTagCount); - if(moreTagCount === 0) { - tagContainer.find('.tagMoreCount').closest('.moreTags').addClass('hide'); - } else if(moreTagCount > 0){ - tagContainer.find('.tagMoreCount').text(data.moreTagCount).closest('.moreTags').removeClass('hide'); - } - jQuery('.showAllTagContainer').find('.currentTag').html(modalContainerClone.find('.currentTag').html()); - jQuery('.viewAllTagsContainer').find('.currentTag').html(modalContainerClone.find('.currentTag').html()); - jQuery('.showAllTagContainer').find('.currentTagMenu').html(modalContainerClone.find('.currentTagMenu').html()); - var tagInstance = self.getComponentInstance('Vtiger_Tag_Js'); - tagInstance.addTagsToShowAllTagContianer(data.tags); - self.removeDeletedTagsFromSummaryTag(data.deleted); - self.addTagsToSummaryTag(data.tags); - }) - - tagContainer.find('.moreTags').on('click',function(e){ - //self.showAllTags(tagContainer); - app.event.trigger('Request.AllTag.show',tagContainer, {'record' : self.getRecordId()}); - }); - - tagContainer.on('click', '.deleteTag', function(e){ - var tag = jQuery(e.currentTarget).closest('.tag'); - self.deleteTag({'tag_id':tag.data('id')}).then(function(){ - var summaryTagContainer = jQuery('.detailTagList'); - var showAllTagContainer = jQuery('.showAllTagContainer'); - var currentTagHolder = showAllTagContainer.find('.currentTag'); - var summaryLastTag = summaryTagContainer.find('.tag').filter(':last'); - var nextTag = currentTagHolder.find('[data-id="'+ summaryLastTag.data('id') +'"]').next(); - - summaryTagContainer.find('.moreTags').before(nextTag.clone(true)); - tag.remove(); - - self.postTagDeleteActions(tag.clone(true)); - if(summaryTagContainer.find('.tag').length == 0){ - summaryTagContainer.closest('.tag-contents').addClass('hide'); - } - }) - }); - - jQuery('#addTagTriggerer').on('click', function(e){ - app.event.trigger('Request.MassTag.show',tagContainer, {'record' : self.getRecordId()}); - }); - }, - - /** + }, + + registerStarToggle : function() { + var self = this; + jQuery('#starToggle').on('click',function(e){ + var element = jQuery(e.currentTarget); + if(element.hasClass('processing')) return; + element.addClass('processing'); + var record = self.getRecordId(); + var params = {}; + params.module = app.getModuleName(); + params.action = 'SaveAjax'; + params.record = record; + if(element.hasClass('active')) { + params.starred = 0; + }else { + params.starred = 1; + } + + element.toggleClass('active'); + + + app.request.post({data:params}).then(function(err,data){ + element.removeClass('processing'); + }) + }); + }, + + saveTag : function(callerParams) { + var self = this; + var aDeferred = jQuery.Deferred(); + var params = { + 'module' : app.getModuleName(), + 'action' : 'TagCloud', + 'mode' : 'saveTags', + 'record' : this.getRecordId() + + }; + var params = jQuery.extend(params, callerParams); + app.request.post({'data': params}).then( + function(error, data) { + if(error == null) { + var tagContainer = jQuery('.tagContainer'); + var tagInstance = self.getComponentInstance('Vtiger_Tag_Js'); + tagInstance.addTagsToShowAllTagContianer(data.tags); + self.addTagsToSummaryTag(data.tags); + if(parseInt(data.moreTagCount) > 0) { + tagContainer.find('.tagMoreCount').text(data.moreTagCount).closest('.moreTags').removeClass('hide'); + } + aDeferred.resolve(data); + }else{ + aDeferred.reject(data); + } + } + ); + return aDeferred.promise(); + }, + + deleteTag : function(callerParams) { + var aDeferred = jQuery.Deferred(); + + var params = { + 'module' : app.getModuleName(), + 'action' : 'TagCloud', + 'mode' : 'delete', + 'record' : this.getRecordId() + } + + var params = jQuery.extend(params, callerParams); + app.request.post({'data': params}).then( + function(error, data) { + if(error == null) { + aDeferred.resolve(data); + }else{ + aDeferred.reject(data); + } + } + ); + + return aDeferred.promise(); + }, + + constructTagElement : function (params) { + var tagElement = jQuery(jQuery('#dummyTagElement').html()).clone(true); + tagElement.attr('data-id',params.id).attr('data-type',params.type); + tagElement.find('.tagLabel').html(params.name); + return tagElement + }, + + showAllTags : function(container) { + var self = this; + var showTagModal = container.find('.showAllTagContainer').clone(true); + app.helper.showModal(showTagModal.find('.modal-dialog'),{'cb' : function(modalContainer){ + + var registerShowAllTagEvents = function(modalContainer) { + var currentTagsSelected = new Array(); + var currentTagHolder = modalContainer.find('.currentTag'); + + modalContainer.find('.dropdown-menu').on('click',function(e){ + e.stopPropagation(); + }); + + modalContainer.find('.currentTagMenu > li > a ').on('click', function(e){ + var element = jQuery(e.currentTarget); + var selectedTag = jQuery(element.html()); + currentTagsSelected.push(selectedTag.data('id')); + element.remove(); + currentTagHolder.append(selectedTag); + }); + + app.helper.showVerticalScroll(currentTagHolder); + + modalContainer.find('.currentTagSelector').instaFilta({ + targets : '.currentTagMenu > li', + sections : '.currentTagMenu', + scope : '.detailShowAllModal', + hideEmptySections : true, + beginsWith : false, + caseSensitive : false, + typeDelay : 0 + }); + + var tagInputEle = modalContainer.find('input[name="createNewTag"]'); + var params = {tags : [], tokenSeparators: [","]}; + vtUtils.showSelect2ElementView(tagInputEle, params); + + var form = modalContainer.find('form'); + form.on('submit',function(e){ + e.preventDefault(); + var modalContainerClone = modalContainer.clone(true); + app.helper.hideModal(); + var saveParams = {}; + var saveTagList = {}; + saveTagList['existing'] = currentTagsSelected; + saveTagList['new'] = tagInputEle.val().split(',') + saveParams['tagsList'] = saveTagList; + + var formData = form.serializeFormData(); + saveParams['newTagType'] = formData['visibility']; + self.saveTag(saveParams).then(function(data){ + jQuery('.showAllTagContainer').find('.currentTag').html(modalContainerClone.find('.currentTag').html()); + jQuery('.showAllTagContainer').find('.currentTagMenu').html(modalContainerClone.find('.currentTagMenu').html()); + }) + return false; + }) + + } + registerShowAllTagEvents(modalContainer); + }}); + }, + + addTagsToSummaryTag : function(tagsList) { + var summaryTagList = jQuery('.detailTagList'); + var numOfTagsToShow = parseInt(summaryTagList.data('numOfTagsToShow')); + var numOfTagsToAppend = numOfTagsToShow - (parseInt(summaryTagList.find('.tag').length)); + for(var index in tagsList) { + if(numOfTagsToAppend <= 0) { + break; + } + var tagInfo = tagsList[index]; + var tagId = tagInfo.id; + if(summaryTagList.find('[data-id="'+ tagId +'"]').length <= 0) { + var newTagEle = this.constructTagElement(tagInfo); + summaryTagList.find('.moreTags').before(newTagEle); + summaryTagList.find('.noTagsPlaceHolder').addClass('hide'); + numOfTagsToAppend--; + } + } + + if(summaryTagList.find('.tag').length > 0){ + summaryTagList.closest('.tag-contents').removeClass('hide'); + } + + }, + + removeDeletedTagsFromSummaryTag : function(deletedTags){ + var summaryTagContainer = jQuery('.detailTagList'); + for(var index in deletedTags) { + var tag = summaryTagContainer.find('.tag[data-id="'+deletedTags[index]+'"]'); + if(tag.length > 0){ + var showAllTagContainer = jQuery('.showAllTagContainer'); + var currentTagHolder = showAllTagContainer.find('.currentTag'); + var summaryLastTag = summaryTagContainer.find('.tag').filter(':last'); + var nextTag = currentTagHolder.find('[data-id="'+ summaryLastTag.data('id') +'"]').next(); + summaryTagContainer.find('.moreTags').before(nextTag.clone(true)); + tag.remove(); + } + } + + if(summaryTagContainer.find(".tag").length <=0){ + summaryTagContainer.find(".noTagsPlaceHolder").removeClass("hide"); + } + + }, + + registerTagSearch : function() { + jQuery('#tag-search').instaFilta({ + targets : '#addTagContainer .existingTag .tag-item', + sections : '#addTagContainer .existingTag', + hideEmptySections : true, + beginsWith : false, + caseSensitive : false, + typeDelay : 0 + }); + }, + + postTagDeleteActions : function(deletedTagClone) { + var summaryTagContainer = jQuery('.detailTagList'); + var tagInstance = this.getComponentInstance('Vtiger_Tag_Js'); + var tagInfo = { + 'id' : deletedTagClone.data('id') + }; + tagInstance.removeTagsFromShowTagContainer(new Array(tagInfo)); + + if(summaryTagContainer.find('.tag').length <= 0 ) { + summaryTagContainer.find('.noTagsPlaceHolder').removeClass('hide'); + }else{ + var moreTagsEle = summaryTagContainer.find('.tagMoreCount'); + if(!moreTagsEle.closest('.moreTags').hasClass('hide')) { + var moreTagsCount = parseInt(moreTagsEle.text()); + moreTagsCount--; + moreTagsEle.text(moreTagsCount); + if(moreTagsCount <=0 ){ + moreTagsEle.closest('.moreTags').addClass('hide'); + } + } + } + }, + + + registerTagEvents : function() { + var self = this; + var tagContainer = jQuery('.tagContainer'); + + tagContainer.find('#addTagContainer .dropdown-menu').on('click',function(e){ + e.stopPropagation(); + }); + var tagInputEle = tagContainer.find('.newTags'); + var params = {tags : [], tokenSeparators: [","]}; + vtUtils.showSelect2ElementView(tagInputEle, params); + + var existinTagContainer = tagContainer.find('.existingTag'); + app.helper.showVerticalScroll(existinTagContainer); + + this.registerTagSearch(); + + jQuery('#saveTag').on('click', function(e){ + tagContainer.find('.dropdown-toggle').dropdown('toggle'); + var element = jQuery(e.currentTarget); + var createTagContainer = element.closest('.createTagContainer'); + var existingTagContainer = createTagContainer.find('.existingTag'); + var selectedExistingTags = new Array(); + var selectedTagElement = existingTagContainer.find('.tagSelector').filter(':checked').closest('li.tag-item'); + selectedTagElement.each(function(index, domEle){ + var ele = jQuery(domEle); + selectedExistingTags.push(ele.find('.tag').data('id')); + }); + var newTagEle = createTagContainer.find('input.newTags'); + var newTags = newTagEle.val(); + var tagsList = {}; + tagsList['new'] = newTags.split(','); + tagsList['existing'] = selectedExistingTags; + var visibility = createTagContainer.find('[name="visibility"]').val(); + var visibilityCheckBox = createTagContainer.find('[type="checkbox"][name="visibility"]'); + if(visibilityCheckBox.is(':checked')){ + visibility = visibilityCheckBox.val(); + } + self.saveTag({'tagsList':tagsList,'newTagType': visibility}).then(function(data){ + selectedTagElement.remove(); + newTagEle.select2('val',''); + }); + }); + + tagContainer.find('.cancelLink').on('click', function(e){ + tagContainer.find('.dropdown-toggle').dropdown('toggle'); + }); + + app.event.on('post.MassTag.save',function(e, modalContainerClone, data){ + var moreTagCount = parseInt(data.moreTagCount); + if(moreTagCount === 0) { + tagContainer.find('.tagMoreCount').closest('.moreTags').addClass('hide'); + } else if(moreTagCount > 0){ + tagContainer.find('.tagMoreCount').text(data.moreTagCount).closest('.moreTags').removeClass('hide'); + } + jQuery('.showAllTagContainer').find('.currentTag').html(modalContainerClone.find('.currentTag').html()); + jQuery('.viewAllTagsContainer').find('.currentTag').html(modalContainerClone.find('.currentTag').html()); + jQuery('.showAllTagContainer').find('.currentTagMenu').html(modalContainerClone.find('.currentTagMenu').html()); + var tagInstance = self.getComponentInstance('Vtiger_Tag_Js'); + tagInstance.addTagsToShowAllTagContianer(data.tags); + self.removeDeletedTagsFromSummaryTag(data.deleted); + self.addTagsToSummaryTag(data.tags); + }) + + tagContainer.find('.moreTags').on('click',function(e){ + //self.showAllTags(tagContainer); + app.event.trigger('Request.AllTag.show',tagContainer, {'record' : self.getRecordId()}); + }); + + tagContainer.on('click', '.deleteTag', function(e){ + var tag = jQuery(e.currentTarget).closest('.tag'); + self.deleteTag({'tag_id':tag.data('id')}).then(function(){ + var summaryTagContainer = jQuery('.detailTagList'); + var showAllTagContainer = jQuery('.showAllTagContainer'); + var currentTagHolder = showAllTagContainer.find('.currentTag'); + var summaryLastTag = summaryTagContainer.find('.tag').filter(':last'); + var nextTag = currentTagHolder.find('[data-id="'+ summaryLastTag.data('id') +'"]').next(); + + summaryTagContainer.find('.moreTags').before(nextTag.clone(true)); + tag.remove(); + + self.postTagDeleteActions(tag.clone(true)); + if(summaryTagContainer.find('.tag').length == 0){ + summaryTagContainer.closest('.tag-contents').addClass('hide'); + } + }) + }); + + jQuery('#addTagTriggerer').on('click', function(e){ + app.event.trigger('Request.MassTag.show',tagContainer, {'record' : self.getRecordId()}); + }); + }, + + /** * Function to register event for related list row click */ registerRelatedRowClickEvent: function() { - var detailContentsHolder = this.getContentHolder(); - detailContentsHolder.on('click','.relatedListEntryValues a',function(e){ - e.preventDefault(); - }); + var detailContentsHolder = this.getContentHolder(); + detailContentsHolder.on('click','.relatedListEntryValues a',function(e){ + e.preventDefault(); + }); detailContentsHolder.on('click','.listViewEntries',function(e){ - var selection = window.getSelection().toString(); - if(selection.length == 0) { - var targetElement = jQuery(e.target, jQuery(e.currentTarget)); - if(targetElement.hasClass('js-reference-display-value')) return; + var selection = window.getSelection().toString(); + if(selection.length == 0) { + var targetElement = jQuery(e.target, jQuery(e.currentTarget)); + if(targetElement.hasClass('js-reference-display-value')) return; if(targetElement.is('td:first-child') && (targetElement.children('input[type="checkbox"]').length > 0)) return; if(jQuery(e.target).is('input[type="checkbox"]')) return; - var elem = jQuery(e.currentTarget); - var recordUrl = elem.data('recordurl'); + var elem = jQuery(e.currentTarget); + var recordUrl = elem.data('recordurl'); if(typeof recordUrl != "undefined"){ - var params = app.convertUrlToDataParams(recordUrl); - //Display Mode to show details in overlay - params['mode'] = 'showDetailViewByMode'; - params['requestMode'] = 'full'; - params['displayMode'] = 'overlay'; - var parentRecordId = app.getRecordId(); - app.helper.showProgress(); - app.request.get({data: params}).then(function(err, response) { - app.helper.hideProgress(); + var params = app.convertUrlToDataParams(recordUrl); + //Display Mode to show details in overlay + params['mode'] = 'showDetailViewByMode'; + params['requestMode'] = 'full'; + params['displayMode'] = 'overlay'; + var parentRecordId = app.getRecordId(); + app.helper.showProgress(); + app.request.get({data: params}).then(function(err, response) { + app.helper.hideProgress(); var overlayParams = {'backdrop' : 'static', 'keyboard' : false}; - app.helper.loadPageContentOverlay(response, overlayParams).then(function(container) { - var detailjs = Vtiger_Detail_Js.getInstanceByModuleName(params.module); - detailjs.showScroll(jQuery('.overlayDetail .modal-body')); - detailjs.setModuleName(params.module); - detailjs.setOverlayDetailMode(true); - detailjs.setContentHolder(container.find('.overlayDetail')); - detailjs.setDetailViewContainer(container.find('.overlayDetail')); - detailjs.registerOverlayEditEvent(); - detailjs.registerBasicEvents(); - detailjs.registerClickEvent(); - detailjs.registerHeaderAjaxEditEvents(container.find('.overlayDetailHeader')); - detailjs.registerEventToReloadRelatedListOnCloseOverlay(parentRecordId); - container.find('form#detailView').on('submit', function(e) { - e.preventDefault(); - }); - }); - }); - } - } - }); - }, - - registerEventToReloadRelatedListOnCloseOverlay: function(parentId) { - var self = this; - var overlayContainer = jQuery('#overlayPageContent'); - overlayContainer.one("click", ".close", function(e) { - self.loadRelatedListOfParent(parentId); - }); - }, - - loadRelatedListOfParent: function(parentRecordId) { - var self = this; - var relatedController = self.getRelatedController(); - relatedController.setParentId(parentRecordId); - if (relatedController) { - relatedController.loadRelatedList(); - } - }, - - - showOverlayEditView: function(recordUrl) { - var self = this; - var params = app.convertUrlToDataParams(recordUrl); - params['displayMode'] = 'overlay'; - var postData = self.getDefaultParams(); - for (var key in postData) { - if (postData[key]) { - if (key == 'relatedModule') { - params['returnrelatedModuleName'] = postData[key]; - } else { - params['return' + key] = postData[key]; - } - delete postData[key]; - } else { - delete postData[key]; - } - } - params['returnrecord'] = jQuery('[name="record_id"]').val(); - app.helper.showProgress(); - app.request.get({data: params}).then(function(err, response) { - app.helper.hideProgress(); - var overlayParams = {'backdrop': 'static', 'keyboard': false}; - app.helper.loadPageContentOverlay(response, overlayParams).then(function(container) { - var height = jQuery(window).height() - jQuery('.app-fixed-navbar').height() - jQuery('.overlayFooter').height() - 80; - - var scrollParams = { - setHeight: height, - alwaysShowScrollbar: 2, - autoExpandScrollbar: true, - setTop: 0, - scrollInertia: 70 - } - app.helper.showVerticalScroll(jQuery('.editViewContents'), scrollParams); - self.registerOverlayEditEvents(params.module, container); - self.registerRelatedRecordSave(); - app.event.trigger('post.overLayEditView.loaded', jQuery('.overlayEdit')); - }); - }); - }, - registerOverlayEditEvent: function() { - var self = this; - jQuery('.editRelatedRecord').on('click', function() { - var editUrl = jQuery('.editRelatedRecord').val(); - self.showOverlayEditView(editUrl); - }); - }, - - registerRelatedRecordEdit: function(){ - var self = this; - var detailViewContainer = this.getContentHolder(); - detailViewContainer.on('click', 'a[name="relationEdit"]', function(e) { - e.stopImmediatePropagation(); - var element = jQuery(e.currentTarget); - var editUrl = element.data('url'); - self.showOverlayEditView(editUrl); - }); - }, - - getDetails: function() { - return jQuery('.details'); - }, - + app.helper.loadPageContentOverlay(response, overlayParams).then(function(container) { + var detailjs = Vtiger_Detail_Js.getInstanceByModuleName(params.module); + detailjs.showScroll(jQuery('.overlayDetail .modal-body')); + detailjs.setModuleName(params.module); + detailjs.setOverlayDetailMode(true); + detailjs.setContentHolder(container.find('.overlayDetail')); + detailjs.setDetailViewContainer(container.find('.overlayDetail')); + detailjs.registerOverlayEditEvent(); + detailjs.registerBasicEvents(); + detailjs.registerClickEvent(); + detailjs.registerHeaderAjaxEditEvents(container.find('.overlayDetailHeader')); + detailjs.registerEventToReloadRelatedListOnCloseOverlay(parentRecordId); + container.find('form#detailView').on('submit', function(e) { + e.preventDefault(); + }); + }); + }); + } + } + }); + }, + + registerEventToReloadRelatedListOnCloseOverlay: function(parentId) { + var self = this; + var overlayContainer = jQuery('#overlayPageContent'); + overlayContainer.one("click", ".close", function(e) { + self.loadRelatedListOfParent(parentId); + }); + }, + + loadRelatedListOfParent: function(parentRecordId) { + var self = this; + var relatedController = self.getRelatedController(); + relatedController.setParentId(parentRecordId); + if (relatedController) { + relatedController.loadRelatedList(); + } + }, + + + showOverlayEditView: function(recordUrl) { + var self = this; + var params = app.convertUrlToDataParams(recordUrl); + params['displayMode'] = 'overlay'; + var postData = self.getDefaultParams(); + for (var key in postData) { + if (postData[key]) { + if (key == 'relatedModule') { + params['returnrelatedModuleName'] = postData[key]; + } else { + params['return' + key] = postData[key]; + } + delete postData[key]; + } else { + delete postData[key]; + } + } + params['returnrecord'] = jQuery('[name="record_id"]').val(); + app.helper.showProgress(); + app.request.get({data: params}).then(function(err, response) { + app.helper.hideProgress(); + var overlayParams = {'backdrop': 'static', 'keyboard': false}; + app.helper.loadPageContentOverlay(response, overlayParams).then(function(container) { + var height = jQuery(window).height() - jQuery('.app-fixed-navbar').height() - jQuery('.overlayFooter').height() - 80; + + var scrollParams = { + setHeight: height, + alwaysShowScrollbar: 2, + autoExpandScrollbar: true, + setTop: 0, + scrollInertia: 70 + } + app.helper.showVerticalScroll(jQuery('.editViewContents'), scrollParams); + self.registerOverlayEditEvents(params.module, container); + self.registerRelatedRecordSave(); + app.event.trigger('post.overLayEditView.loaded', jQuery('.overlayEdit')); + }); + }); + }, + registerOverlayEditEvent: function() { + var self = this; + jQuery('.editRelatedRecord').on('click', function() { + var editUrl = jQuery('.editRelatedRecord').val(); + self.showOverlayEditView(editUrl); + }); + }, + + registerRelatedRecordEdit: function(){ + var self = this; + var detailViewContainer = this.getContentHolder(); + detailViewContainer.on('click', 'a[name="relationEdit"]', function(e) { + e.stopImmediatePropagation(); + var element = jQuery(e.currentTarget); + var editUrl = element.data('url'); + self.showOverlayEditView(editUrl); + }); + }, + + getDetails: function() { + return jQuery('.details'); + }, + registerClickEvent: function() { - this.getContentHolder().on('click', '.inventoryLineItemDetails', function(e) { - jQuery('.inventoryLineItemDetails').popover({html: true}).show(); - }); - }, - showScroll: function(container) { - var params = { - setHeight: container.height, - alwaysShowScrollbar: 2, - autoExpandScrollbar: true, - setTop: 0, - scrollInertia: 70, - mouseWheel: {preventDefault: true} - }; - app.helper.showVerticalScroll(container, params); - }, - - recordImageRandomColors: function(){ - var color= jQuery('.recordImage').css('background-color'); - if(color === "rgba(0, 0, 0, 0)"){ - jQuery('.recordImage').css('background-color', app.helper.getRandomColor()); - } - }, - - getFieldValue : function(fieldName,sourceElement){ - var form = this.getForm(); - var fieldBasicData = form.find('.fieldBasicData').filter('[data-name="'+fieldName+'"]'); - return fieldBasicData.attr('data-value'); - }, - - registerQtipevent: function (tabItem) { - if(typeof tabItem == 'undefined'){ - var container = jQuery('.related-tabs.row'); - var scrollContent = container.find('.dropdown #relatedmenuList'); - app.helper.showVerticalScroll(scrollContent,{autoHideScrollbar: true}); - tabItem = container.find('.tab-item, .more-tab'); - } - var title; - jQuery(tabItem).each(function () { - title = jQuery(this).attr('title'); - jQuery(this).qtip({ - content: title, - hide: { - event:'click mouseleave', - }, - position: { - my: 'bottom center', - at: 'top left', - adjust: { - x: 30, - y: 10 - } - }, - style: { - classes: 'qtip-dark' - } - }); - }); - }, - - - registerEvents : function() { - this._super(); - this.registerEventsForRelatedList(); - var detailContentsHolder = this.getContentHolder(); - var self = this; - this.registerSendSmsSubmitEvent(); - detailContentsHolder.on('click','.viewThread', function(e){ + this.getContentHolder().on('click', '.inventoryLineItemDetails', function(e) { + jQuery('.inventoryLineItemDetails').popover({html: true}).show(); + }); + }, + showScroll: function(container) { + var params = { + setHeight: container.height, + alwaysShowScrollbar: 2, + autoExpandScrollbar: true, + setTop: 0, + scrollInertia: 70, + mouseWheel: {preventDefault: true} + }; + app.helper.showVerticalScroll(container, params); + }, + + recordImageRandomColors: function(){ + var color= jQuery('.recordImage').css('background-color'); + if(color === "rgba(0, 0, 0, 0)"){ + jQuery('.recordImage').css('background-color', app.helper.getRandomColor()); + } + }, + + getFieldValue : function(fieldName,sourceElement){ + var form = this.getForm(); + var fieldBasicData = form.find('.fieldBasicData').filter('[data-name="'+fieldName+'"]'); + return fieldBasicData.attr('data-value'); + }, + + registerQtipevent: function (tabItem) { + if(typeof tabItem == 'undefined'){ + var container = jQuery('.related-tabs.row'); + var scrollContent = container.find('.dropdown #relatedmenuList'); + app.helper.showVerticalScroll(scrollContent,{autoHideScrollbar: true}); + tabItem = container.find('.tab-item, .more-tab'); + } + var title; + jQuery(tabItem).each(function () { + title = jQuery(this).attr('title'); + jQuery(this).qtip({ + content: title, + hide: { + event:'click mouseleave', + }, + position: { + my: 'bottom center', + at: 'top left', + adjust: { + x: 30, + y: 10 + } + }, + style: { + classes: 'qtip-dark' + } + }); + }); + }, + + + registerEvents : function() { + this._super(); + this.registerEventsForRelatedList(); + var detailContentsHolder = this.getContentHolder(); + var self = this; + this.registerSendSmsSubmitEvent(); + detailContentsHolder.on('click','.viewThread', function(e){ var currentTarget = jQuery(e.currentTarget); var currentTargetParent = currentTarget.parent(); var commentActionsBlock = currentTarget.closest('.commentActions'); @@ -2723,7 +2723,7 @@ Vtiger.Class("Vtiger_Detail_Js",{ currentTargetParent.hide(); }); }); - detailContentsHolder.on('click','.hideThread', function(e){ + detailContentsHolder.on('click','.hideThread', function(e){ var currentTarget = jQuery(e.currentTarget); var currentTargetParent = currentTarget.parent(); var commentActionsBlock = currentTarget.closest('.commentActions'); @@ -2732,138 +2732,140 @@ Vtiger.Class("Vtiger_Detail_Js",{ currentTargetParent.hide(); commentActionsBlock.find('.viewThreadBlock').show(); }); - detailContentsHolder.on('click','.detailViewThread',function(e){ + detailContentsHolder.on('click','.detailViewThread',function(e){ var recentCommentsTab = self.getTabByLabel(self.detailViewRecentCommentsTabLabel); var commentId = jQuery(e.currentTarget).closest('.singleComment').find('.commentInfoHeader').data('commentid'); recentCommentsTab.trigger('click',{'commentid':commentId}); }); - this.registerStarToggle(); - this.registerTagEvents(); - app.event.on("post.mail.sent",function(event,data){ - var resultEle = jQuery(data); - var success = resultEle.find('.mailSentSuccessfully'); - if(success.length > 0){ - var relatedLoad = success.data("relatedload"); - if(relatedLoad == 1){ - var pageNumber = jQuery('[name="currentPageNum"]').val(); - window.app.controller().loadRelatedListRecords({page: pageNumber}); - } - } - }); - detailContentsHolder.on('click','.moreRecentUpdates', function() { - app.helper.showProgress(); + this.registerStarToggle(); + this.registerTagEvents(); + app.event.on("post.mail.sent",function(event,data){ + var resultEle = jQuery(data); + var success = resultEle.find('.mailSentSuccessfully'); + if(success.length > 0){ + var relatedLoad = success.data("relatedload"); + if(relatedLoad == 1){ + var pageNumber = jQuery('[name="currentPageNum"]').val(); + window.app.controller().loadRelatedListRecords({page: pageNumber}); + } else { + app.helper.showModal(data); + } + } + }); + detailContentsHolder.on('click','.moreRecentUpdates', function() { + app.helper.showProgress(); var currentPage = jQuery("#updatesCurrentPage").val(); var recordId = jQuery("#recordId").val(); var nextPage = parseInt(currentPage) + 1; var url = "index.php?module=" + app.getModuleName() + "&view=Detail&record=" + recordId + "&mode=showRecentActivities&page=" - + nextPage + "&limit=5&tab_label=LBL_UPDATES"; - var postParams = app.convertUrlToDataParams(url); - - app.request.post({data:postParams}).then(function(err,data){ - jQuery("#updatesCurrentPage").remove(); - jQuery("#moreLink").remove(); - jQuery("#more_button").remove(); - data = jQuery(data).removeClass("recentActivitiesContainer"); - jQuery('#updates').append(data); - app.helper.hideProgress(); - }); - - }); - this.updateRelatedRecordsCount(); - //RegisterBasicEvents for Related-List overlay's - this.registerBasicEvents(); - this.registerHeaderAjaxEditEvents(); - detailContentsHolder.on('click','.detailViewSaveComment', function(e){ - var element = jQuery(e.currentTarget); - if(!element.is(":disabled")) { - var dataObj = self.saveComment(e); - dataObj.then(function(){ - var commentsContainer = detailContentsHolder.find("[data-name='ModComments']"); - self.loadWidget(commentsContainer).then(function() { - element.removeAttr('disabled'); + + nextPage + "&limit=5&tab_label=LBL_UPDATES"; + var postParams = app.convertUrlToDataParams(url); + + app.request.post({data:postParams}).then(function(err,data){ + jQuery("#updatesCurrentPage").remove(); + jQuery("#moreLink").remove(); + jQuery("#more_button").remove(); + data = jQuery(data).removeClass("recentActivitiesContainer"); + jQuery('#updates').append(data); + app.helper.hideProgress(); + }); + + }); + this.updateRelatedRecordsCount(); + //RegisterBasicEvents for Related-List overlay's + this.registerBasicEvents(); + this.registerHeaderAjaxEditEvents(); + detailContentsHolder.on('click','.detailViewSaveComment', function(e){ + var element = jQuery(e.currentTarget); + if(!element.is(":disabled")) { + var dataObj = self.saveComment(e); + dataObj.then(function(){ + var commentsContainer = detailContentsHolder.find("[data-name='ModComments']"); + self.loadWidget(commentsContainer).then(function() { + element.removeAttr('disabled'); app.event.trigger('post.summarywidget.load',commentsContainer); var indexInstance = Vtiger_Index_Js.getInstance(); indexInstance.registerMultiUpload(); - }); - }); - } - }); - - detailContentsHolder.on('click','.saveComment', function(e){ - var element = jQuery(e.currentTarget); - if(!element.is(":disabled")) { - var currentTarget = jQuery(e.currentTarget); - var mode = currentTarget.data('mode'); - var dataObj = self.saveComment(e); - dataObj.then(function(data){ - var closestAddCommentBlock = currentTarget.closest('.addCommentBlock'); - var commentTextAreaElement = closestAddCommentBlock.find('.commentcontent'); - var commentInfoBlock = currentTarget.closest('.singleComment'); - commentTextAreaElement.val(''); - closestAddCommentBlock.find('#is_private').removeAttr('checked'); - if(mode == "add"){ - var commentId = data['id']; - var commentHtml = self.getCommentUI(commentId); - commentHtml.then(function(data){ - var html; - if(jQuery(data).hasClass('privateComment')) { - html = '<ul class="unstyled"><li class="commentDetails" style="background: #fff9ea;">'+data+'</li></ul>'; - } else { - html = '<ul class="unstyled"><li class="commentDetails">'+data+'</li></ul>'; - } - var commentBlock = closestAddCommentBlock.closest('.commentDetails'); - var detailContentsHolder = self.getContentHolder(); - var noCommentsMsgContainer = jQuery('.noCommentsMsgContainer',detailContentsHolder); - noCommentsMsgContainer.remove(); - if(commentBlock.length > 0){ - closestAddCommentBlock.remove(); - var childComments = commentBlock.find('ul'); - if(childComments.length <= 0){ - var currentChildCommentsCount = commentInfoBlock.find('.viewThreadBlock').data('childCommentsCount'); - var newChildCommentCount = currentChildCommentsCount + 1; - commentInfoBlock.find('.childCommentsCount').text(newChildCommentCount); - var parentCommentId = commentInfoBlock.find('.commentInfoHeader').data('commentid'); - self.getChildComments(parentCommentId).then(function(responsedata){ - jQuery(responsedata).appendTo(commentBlock); - commentInfoBlock.find('.viewThreadBlock').hide(); - commentInfoBlock.find('.hideThreadBlock').show(); - }); - }else { - jQuery(html).appendTo(commentBlock); - } - } else { - jQuery(html).prependTo(closestAddCommentBlock.closest('.commentContainer').find('.commentsList')); - commentTextAreaElement.css({height : '71px'}); - } - commentInfoBlock.find('.commentActionsContainer').show(); - }); - }else if(mode == "edit"){ - var modifiedTime = commentInfoBlock.find('.commentModifiedTime'); - var commentInfoContent = commentInfoBlock.find('.commentInfoContent'); - var commentEditStatus = commentInfoBlock.find('[name="editStatus"]'); - var commentReason = commentInfoBlock.find('[name="editReason"]'); - commentInfoContent.html(data.commentcontent); - commentReason.html(data.reasontoedit); - modifiedTime.text(data.modifiedtime); - modifiedTime.attr('title',data.modifiedtimetitle) - if(commentEditStatus.hasClass('hide')){ - commentEditStatus.removeClass('hide'); - } + }); + }); + } + }); + + detailContentsHolder.on('click','.saveComment', function(e){ + var element = jQuery(e.currentTarget); + if(!element.is(":disabled")) { + var currentTarget = jQuery(e.currentTarget); + var mode = currentTarget.data('mode'); + var dataObj = self.saveComment(e); + dataObj.then(function(data){ + var closestAddCommentBlock = currentTarget.closest('.addCommentBlock'); + var commentTextAreaElement = closestAddCommentBlock.find('.commentcontent'); + var commentInfoBlock = currentTarget.closest('.singleComment'); + commentTextAreaElement.val(''); + closestAddCommentBlock.find('#is_private').removeAttr('checked'); + if(mode == "add"){ + var commentId = data['id']; + var commentHtml = self.getCommentUI(commentId); + commentHtml.then(function(data){ + var html; + if(jQuery(data).hasClass('privateComment')) { + html = '<ul class="unstyled"><li class="commentDetails" style="background: #fff9ea;">'+data+'</li></ul>'; + } else { + html = '<ul class="unstyled"><li class="commentDetails">'+data+'</li></ul>'; + } + var commentBlock = closestAddCommentBlock.closest('.commentDetails'); + var detailContentsHolder = self.getContentHolder(); + var noCommentsMsgContainer = jQuery('.noCommentsMsgContainer',detailContentsHolder); + noCommentsMsgContainer.remove(); + if(commentBlock.length > 0){ + closestAddCommentBlock.remove(); + var childComments = commentBlock.find('ul'); + if(childComments.length <= 0){ + var currentChildCommentsCount = commentInfoBlock.find('.viewThreadBlock').data('childCommentsCount'); + var newChildCommentCount = currentChildCommentsCount + 1; + commentInfoBlock.find('.childCommentsCount').text(newChildCommentCount); + var parentCommentId = commentInfoBlock.find('.commentInfoHeader').data('commentid'); + self.getChildComments(parentCommentId).then(function(responsedata){ + jQuery(responsedata).appendTo(commentBlock); + commentInfoBlock.find('.viewThreadBlock').hide(); + commentInfoBlock.find('.hideThreadBlock').show(); + }); + }else { + jQuery(html).appendTo(commentBlock); + } + } else { + jQuery(html).prependTo(closestAddCommentBlock.closest('.commentContainer').find('.commentsList')); + commentTextAreaElement.css({height : '71px'}); + } + commentInfoBlock.find('.commentActionsContainer').show(); + }); + }else if(mode == "edit"){ + var modifiedTime = commentInfoBlock.find('.commentModifiedTime'); + var commentInfoContent = commentInfoBlock.find('.commentInfoContent'); + var commentEditStatus = commentInfoBlock.find('[name="editStatus"]'); + var commentReason = commentInfoBlock.find('[name="editReason"]'); + commentInfoContent.html(data.commentcontent); + commentReason.html(data.reasontoedit); + modifiedTime.text(data.modifiedtime); + modifiedTime.attr('title',data.modifiedtimetitle) + if(commentEditStatus.hasClass('hide')){ + commentEditStatus.removeClass('hide'); + } if(data.reasontoedit != ""){ commentInfoBlock.find('.editReason').removeClass('hide') } - commentInfoContent.show(); - commentInfoBlock.find('.commentActionsContainer').show(); - closestAddCommentBlock.remove(); - } - element.removeAttr('disabled'); + commentInfoContent.show(); + commentInfoBlock.find('.commentActionsContainer').show(); + closestAddCommentBlock.remove(); + } + element.removeAttr('disabled'); var indexInstance = Vtiger_Index_Js.getInstance(); indexInstance.registerMultiUpload(); - }); - } + }); + } }); - - detailContentsHolder.on('click','.editComment', function(e){ + + detailContentsHolder.on('click','.editComment', function(e){ self.removeCommentBlockIfExists(); var currentTarget = jQuery(e.currentTarget); var commentInfoBlock = currentTarget.closest('.singleComment'); @@ -2872,94 +2874,94 @@ Vtiger.Class("Vtiger_Detail_Js",{ var editCommentBlock = self.getEditCommentBlock(); editCommentBlock.find('.commentcontent').text(commentInfoContent.text()); editCommentBlock.find('[name="reasonToEdit"]').val(commentReason.text()); - editCommentBlock.find('[name="is_private"]').val(commentInfoBlock.find('[name="is_private"]').val()); + editCommentBlock.find('[name="is_private"]').val(commentInfoBlock.find('[name="is_private"]').val()); /*commentInfoContent.hide(); commentInfoBlock.find('.commentActionsContainer').hide();*/ editCommentBlock.appendTo(commentInfoBlock).show(); }); - - detailContentsHolder.on('click','.closeCommentBlock', function(e){ + + detailContentsHolder.on('click','.closeCommentBlock', function(e){ var currentTarget = jQuery(e.currentTarget); var commentInfoBlock = currentTarget.closest('.singleComment'); commentInfoBlock.find('.commentActionsContainer').show(); commentInfoBlock.find('.commentInfoContent').show(); self.removeCommentBlockIfExists(); }); - - detailContentsHolder.on('click','.replyComment', function(e){ + + detailContentsHolder.on('click','.replyComment', function(e){ self.removeCommentBlockIfExists(); var currentTarget = jQuery(e.currentTarget); var commentInfoBlock = currentTarget.closest('.singleComment'); - var message = commentInfoBlock.find('.commentInfoContent').text(); - var commentInfoHeader = commentInfoBlock.find('.commentInfoHeader'); - var commentId = commentInfoHeader.data('commentid'); + var message = commentInfoBlock.find('.commentInfoContent').text(); + var commentInfoHeader = commentInfoBlock.find('.commentInfoHeader'); + var commentId = commentInfoHeader.data('commentid'); var addCommentBlock = self.getCommentBlock(); /*commentInfoBlock.find('.commentActionsContainer').hide();*/ addCommentBlock.appendTo(commentInfoBlock).show(); - - var params = { - 'module': app.getModuleName(), - 'action': 'MentionedUsers', - 'message':message, - 'crmid':commentId - }; - - app.request.post({data: params}).then( - function(err, data) { - if (data) { - commentArea = commentInfoBlock.find('.commentcontent'); - commentArea.val(data.usersString); - commentArea.focus(); - var strLength= commentArea.val().length * 2; - commentArea[0].setSelectionRange(strLength, strLength); - } - }); - }); - - detailContentsHolder.on('click','.moreRecentComments', function(){ + + var params = { + 'module': app.getModuleName(), + 'action': 'MentionedUsers', + 'message':message, + 'crmid':commentId + }; + + app.request.post({data: params}).then( + function(err, data) { + if (data) { + commentArea = commentInfoBlock.find('.commentcontent'); + commentArea.val(data.usersString); + commentArea.focus(); + var strLength= commentArea.val().length * 2; + commentArea[0].setSelectionRange(strLength, strLength); + } + }); + }); + + detailContentsHolder.on('click','.moreRecentComments', function(){ var recentCommentsTab = self.getTabByLabel(self.detailViewRecentCommentsTabLabel); recentCommentsTab.trigger('click'); }); - - detailContentsHolder.on('click','.moreRecentActivities', function(){ + + detailContentsHolder.on('click','.moreRecentActivities', function(){ var recentActivitiesTab = self.getTabByLabel(self.detailViewRecentActivitiesTabLabel); recentActivitiesTab.trigger('click'); }); - - detailContentsHolder.on('click', '.moreRecentDocuments', function () { - var recentDocumentsTab = self.getTabByLabel(self.detailViewRecentDocumentsLabel); - recentDocumentsTab.trigger('click'); - }); - app.event.on('post.summarywidget.load',function(event,widgetContainer){ - vtUtils.applyFieldElementsView(widgetContainer); - + detailContentsHolder.on('click', '.moreRecentDocuments', function () { + var recentDocumentsTab = self.getTabByLabel(self.detailViewRecentDocumentsLabel); + recentDocumentsTab.trigger('click'); + }); + + app.event.on('post.summarywidget.load',function(event,widgetContainer){ + vtUtils.applyFieldElementsView(widgetContainer); + //For Rollup Comments if(jQuery('#rollupcomments').length > 0 && widgetContainer.data('name') == 'ModComments') { widgetContainer.off('switchChange.bootstrapSwitch').on('switchChange.bootstrapSwitch', '#rollupcomments', function(e){ app.helper.showProgress(); self.toggleRollupComments(e); }); - + if(jQuery('#rollupcomments').attr('rollup-status') == 1) { jQuery('#rollupcomments').bootstrapSwitch('state', true, true); }else{ jQuery('#rollupcomments').bootstrapSwitch('state', false, true); } - + } - var vtigerInstance = Vtiger_Index_Js.getInstance(); - vtUtils.enableTooltips(); + var vtigerInstance = Vtiger_Index_Js.getInstance(); + vtUtils.enableTooltips(); //END - }); + }); //For Rollup Comments if(jQuery('#rollupcomments').length > 0) { detailContentsHolder.on('switchChange.bootstrapSwitch', '#rollupcomments', function(e){ app.helper.showProgress(); self.toggleRollupComments(e); }); - + if(jQuery('#rollupcomments').attr('rollup-status') == 1) { jQuery('#rollupcomments').bootstrapSwitch('state', true, true); @@ -2970,22 +2972,22 @@ Vtiger.Class("Vtiger_Detail_Js",{ } //END - this.registerRelatedRowClickEvent(); - this.registerSummaryViewContainerEvents(this.getContentHolder()); - - //prevent detail view ajax form submissions - jQuery('form#detailView, form#headerForm').on('submit', function(e) { - e.preventDefault(); - }); - + this.registerRelatedRowClickEvent(); + this.registerSummaryViewContainerEvents(this.getContentHolder()); + + //prevent detail view ajax form submissions + jQuery('form#detailView, form#headerForm').on('submit', function(e) { + e.preventDefault(); + }); + if(typeof jQuery.fn.sadropdown === 'function') { jQuery('.widgetContainer_documents').find('.dropdown-toggle').sadropdown({ relativeTo: '#detailView' }); } - }, - - /** + }, + + /** * Function to register event for setting up picklistdependency * for a module if exist on change of picklist value */ @@ -3005,7 +3007,7 @@ Vtiger.Class("Vtiger_Detail_Js",{ for(var i=0;i<sourcePicklists.length;i++){ sourcePickListNames += '[name="'+sourcePicklists[i]+'"],'; } - sourcePickListNames = sourcePickListNames.replace(/(^,)|(,$)/g, ""); + sourcePickListNames = sourcePickListNames.replace(/(^,)|(,$)/g, ""); container.on('change', sourcePickListNames, function(e) { var currentElement = jQuery(e.currentTarget); var sourcePicklistname = currentElement.attr('name'); @@ -3026,17 +3028,17 @@ Vtiger.Class("Vtiger_Detail_Js",{ if(targetPickList.length <= 0){ return; } - + //On change of SourceField value, If TargetField value is not there in mapping, make user to select the new target value also. var selectedValue = targetPickList.data('value'); if(jQuery.inArray(selectedValue, targetPickListMap) == -1) { thisInstance.targetPicklistChange = true; thisInstance.targetPicklist = targetPickList.closest('td'); - thisInstance.sourcePicklistname = sourcePicklistname; + thisInstance.sourcePicklistname = sourcePicklistname; } else { thisInstance.targetPicklistChange = false; thisInstance.targetPicklist = false; - thisInstance.sourcePicklistname = false; + thisInstance.sourcePicklistname = false; } }) }); @@ -3062,55 +3064,55 @@ Vtiger.Class("Vtiger_Detail_Js",{ } }); }, - - registerHeaderAjaxEditEvents : function(contentHolder) { - var self = this; - - if(typeof contentHolder === 'undefined') { - contentHolder = jQuery('.detailview-header'); - } - + + registerHeaderAjaxEditEvents : function(contentHolder) { + var self = this; + + if(typeof contentHolder === 'undefined') { + contentHolder = jQuery('.detailview-header'); + } + contentHolder.on('click','.recordBasicInfo .fieldLabel .editAction', function(e){ var currentTarget = jQuery(e.currentTarget); currentTarget.hide(); var currentContainerElement = currentTarget.closest('.headerAjaxEdit'); self.ajaxEditHandling(currentContainerElement); }); - - this.registerAjaxEditSaveEvent(contentHolder); - this.registerAjaxEditCancelEvent(contentHolder); - this.registerClearReferenceSelectionEvent(contentHolder); - this.registerPostAjaxSaveEvent(); - }, - - //Events common for DetailView and OverlayDetailView - registerBasicEvents: function(){ - var self = this; - this.registerAjaxEditEvent(); - this.registerAjaxEditSaveEvent(); - this.registerAjaxEditCancelEvent(); - this.recordImageRandomColors(); - this.registerQtipevent(); - - app.event.on("post.RecordList.click", function(event, data) { - var responseData = JSON.parse(data); - var idList = new Array(); - for (var id in responseData) { - idList.push(id); - } - app.helper.hideModal(); - var relatedController = self.getRelatedController(); - if (relatedController) { - relatedController.addRelations(idList).then(function() { - relatedController.loadRelatedList(); - }); - } - }); - this.registerBlockAnimationEvent(); + + this.registerAjaxEditSaveEvent(contentHolder); + this.registerAjaxEditCancelEvent(contentHolder); + this.registerClearReferenceSelectionEvent(contentHolder); + this.registerPostAjaxSaveEvent(); + }, + + //Events common for DetailView and OverlayDetailView + registerBasicEvents: function(){ + var self = this; + this.registerAjaxEditEvent(); + this.registerAjaxEditSaveEvent(); + this.registerAjaxEditCancelEvent(); + this.recordImageRandomColors(); + this.registerQtipevent(); + + app.event.on("post.RecordList.click", function(event, data) { + var responseData = JSON.parse(data); + var idList = new Array(); + for (var id in responseData) { + idList.push(id); + } + app.helper.hideModal(); + var relatedController = self.getRelatedController(); + if (relatedController) { + relatedController.addRelations(idList).then(function() { + relatedController.loadRelatedList(); + }); + } + }); + this.registerBlockAnimationEvent(); this.registerBlockStatusCheckOnLoad(); - this.registerClearReferenceSelectionEvent(); - //register event for picklist dependency setup - this.registerEventForPicklistDependencySetup(this.getForm()); - vtUtils.enableTooltips(); - }, + this.registerClearReferenceSelectionEvent(); + //register event for picklist dependency setup + this.registerEventForPicklistDependencySetup(this.getForm()); + vtUtils.enableTooltips(); + }, }); diff --git a/layouts/v7/modules/Vtiger/resources/Vtiger.js b/layouts/v7/modules/Vtiger/resources/Vtiger.js index 7e92943b8a25f388e0c641a8ffa20cc1cdd98a00..a7ca56d6d78195831aadb80f434772e0f1cd2fed 100644 --- a/layouts/v7/modules/Vtiger/resources/Vtiger.js +++ b/layouts/v7/modules/Vtiger/resources/Vtiger.js @@ -7,14 +7,14 @@ * All Rights Reserved. *************************************************************************************/ Vtiger.Class('Vtiger_Index_Js', { - files: [], - hideNC: true, - - getInstance : function() { - return new Vtiger_Index_Js(); - }, - - /** + files: [], + hideNC: true, + + getInstance : function() { + return new Vtiger_Index_Js(); + }, + + /** * Function to show the content of a file in an iframe * @param {type} e * @param {type} recordId @@ -31,12 +31,12 @@ Vtiger.Class('Vtiger_Index_Js', { }; app.request.post({data:params}).then(function(err, res){ app.helper.showModal(res); - jQuery('.filePreview .preview-area').height(jQuery(window).height()-143); + jQuery('.filePreview .preview-area').height(jQuery(window).height()-143); }); } }, - - /** + + /** * Function to show email preview in popup */ showEmailPreview : function(recordId, parentId) { @@ -48,8 +48,8 @@ Vtiger.Class('Vtiger_Index_Js', { params['record'] = recordId; params['parentId'] = parentId; params['relatedLoad'] = true; - - var callback = function(data){ + + var callback = function(data){ emailPreviewClass = app.getModuleSpecificViewClass('EmailPreview','Vtiger'); _controller = new window[emailPreviewClass](); _controller.registerEventsForActionButtons(); @@ -64,11 +64,11 @@ Vtiger.Class('Vtiger_Index_Js', { var url = jQuery(e.currentTarget).attr('href'); window.open(url, '_blank'); }); - } + } popupInstance.showPopup(params,null,callback); }, - - /** + + /** * Function to show compose email popup based on number of * email fields in given module,if email fields are more than * one given option for user to select email for whom mail should @@ -79,106 +79,106 @@ Vtiger.Class('Vtiger_Index_Js', { */ showComposeEmailPopup : function(params, cb){ - var currentModule = "Emails"; - app.helper.showProgress(); - app.helper.checkServerConfig(currentModule).then(function(data){ - if(data == true){ - app.request.post({data:params}).then(function(err,data){ - if(err === null){ - data = jQuery(data); - var form = data.find('#SendEmailFormStep1'); - var emailFields = form.find('.emailField'); - var length = emailFields.length; - var emailEditInstance = new Emails_MassEdit_Js(); - - var prefsNeedToUpdate = form.find('#prefsNeedToUpdate').val(); - if(prefsNeedToUpdate && length > 1) { - app.helper.hideProgress(); - app.helper.showModal(data); - emailEditInstance.registerEmailFieldSelectionEvent(); - return true; - } - - if(length > 1) { - var saveRecipientPref = form.find('#saveRecipientPrefs').is(':checked'); - if(saveRecipientPref) { - var params = form.serializeFormData(); - emailEditInstance.showComposeEmailForm(params).then(function(response) { - jQuery(document).on('shown.bs.modal', function() { - if (typeof cb === 'function') cb(response); - }); - }); - }else { - app.helper.hideProgress(); - app.helper.showModal(data); - emailEditInstance.registerEmailFieldSelectionEvent(); - } - }else{ - emailFields.attr('checked','checked'); - var params = form.serialize(); - emailEditInstance.showComposeEmailForm(params).then(function(response) { - jQuery(document).on('shown.bs.modal', function() { - if (typeof cb === 'function') cb(response); - }); - }); - } - } - }); - } else { - app.helper.showAlertBox({'message':app.vtranslate('JS_EMAIL_SERVER_CONFIGURATION')}); - } - }); + var currentModule = "Emails"; + app.helper.showProgress(); + app.helper.checkServerConfig(currentModule).then(function(data){ + if(data == true){ + app.request.post({data:params}).then(function(err,data){ + if(err === null){ + data = jQuery(data); + var form = data.find('#SendEmailFormStep1'); + var emailFields = form.find('.emailField'); + var length = emailFields.length; + var emailEditInstance = new Emails_MassEdit_Js(); + + var prefsNeedToUpdate = form.find('#prefsNeedToUpdate').val(); + if(prefsNeedToUpdate && length > 1) { + app.helper.hideProgress(); + app.helper.showModal(data); + emailEditInstance.registerEmailFieldSelectionEvent(); + return true; + } + + if(length > 1) { + var saveRecipientPref = form.find('#saveRecipientPrefs').is(':checked'); + if(saveRecipientPref) { + var params = form.serializeFormData(); + emailEditInstance.showComposeEmailForm(params).then(function(response) { + jQuery(document).on('shown.bs.modal', function() { + if (typeof cb === 'function') cb(response); + }); + }); + }else { + app.helper.hideProgress(); + app.helper.showModal(data); + emailEditInstance.registerEmailFieldSelectionEvent(); + } + }else{ + emailFields.attr('checked','checked'); + var params = form.serialize(); + emailEditInstance.showComposeEmailForm(params).then(function(response) { + jQuery(document).on('shown.bs.modal', function() { + if (typeof cb === 'function') cb(response); + }); + }); + } + } + }); + } else { + app.helper.showAlertBox({'message':app.vtranslate('JS_EMAIL_SERVER_CONFIGURATION')}); + } + }); }, - - showRecipientPreferences: function (module) { - var params = { - module: module, - view: "RecipientPreferences", - }; - - var callback = function (data) { - var form = jQuery(data).find('#recipientsForm'); - if (form.find('#multiEmailContainer').height() > 300) { - app.helper.showVerticalScroll(form.find('#multiEmailContainer'),{ + + showRecipientPreferences: function (module) { + var params = { + module: module, + view: "RecipientPreferences", + }; + + var callback = function (data) { + var form = jQuery(data).find('#recipientsForm'); + if (form.find('#multiEmailContainer').height() > 300) { + app.helper.showVerticalScroll(form.find('#multiEmailContainer'),{ setHeight: '300px', - autoHideScrollbar: false, - }); - } - - form.on('submit', function (e) { - e.preventDefault(); - form.find('.savePreference').attr('disabled', true); - var params = form.serialize(); - app.helper.hideModal(); - app.helper.showProgress(); - app.request.post({"data":params}).then(function (err,data) { - if (err == null) { - app.helper.hideProgress(); - app.helper.showSuccessNotification({"message":''}); - } else { - app.helper.showErrorNotification({"message":''}); - } - }); - }); - } - - app.helper.showProgress(); - app.request.post({"data":params}).then(function (err,data) { - if(err == null){ - app.helper.hideProgress(); - app.helper.showModal(data,{"cb":callback}); - } - }); - }, - - /** - * Function to show record address in Google Map - * @param {type} e - * @returns {undefined} - */ - showMap : function(e) { - var currentElement = jQuery(e); - var params1 = { + autoHideScrollbar: false, + }); + } + + form.on('submit', function (e) { + e.preventDefault(); + form.find('.savePreference').attr('disabled', true); + var params = form.serialize(); + app.helper.hideModal(); + app.helper.showProgress(); + app.request.post({"data":params}).then(function (err,data) { + if (err == null) { + app.helper.hideProgress(); + app.helper.showSuccessNotification({"message":''}); + } else { + app.helper.showErrorNotification({"message":''}); + } + }); + }); + } + + app.helper.showProgress(); + app.request.post({"data":params}).then(function (err,data) { + if(err == null){ + app.helper.hideProgress(); + app.helper.showModal(data,{"cb":callback}); + } + }); + }, + + /** + * Function to show record address in Google Map + * @param {type} e + * @returns {undefined} + */ + showMap : function(e) { + var currentElement = jQuery(e); + var params1 = { 'module' : 'Google', 'action' : 'MapAjax', 'mode' : 'getLocation', @@ -208,27 +208,27 @@ Vtiger.Class('Vtiger_Index_Js', { }); } }); - }, - - /** + }, + + /** * Function registers event for Calendar Reminder popups */ registerActivityReminder : function() { - var activityReminderInterval = app.getActivityReminderInterval(); - if(activityReminderInterval != '') { + var activityReminderInterval = app.getActivityReminderInterval(); + if(activityReminderInterval != '') { var cacheActivityReminder = app.storage.get('activityReminder', 0); var currentTime = new Date().getTime()/1000; - var nextActivityReminderCheck = app.storage.get('nextActivityReminderCheckTime', 0); - //If activity Reminder Changed, nextActivityReminderCheck should reset + var nextActivityReminderCheck = app.storage.get('nextActivityReminderCheckTime', 0); + //If activity Reminder Changed, nextActivityReminderCheck should reset if(activityReminderInterval != cacheActivityReminder) { nextActivityReminderCheck = 0; } if(currentTime >= nextActivityReminderCheck) { Vtiger_Index_Js.requestReminder(); } else { - var nextInterval = nextActivityReminderCheck - currentTime; - setTimeout(function() {Vtiger_Index_Js.requestReminder()}, nextInterval*1000); - } + var nextInterval = nextActivityReminderCheck - currentTime; + setTimeout(function() {Vtiger_Index_Js.requestReminder()}, nextInterval*1000); + } } }, @@ -237,708 +237,708 @@ Vtiger.Class('Vtiger_Index_Js', { */ requestReminder : function() { var activityReminder = app.getActivityReminderInterval(); - if(!activityReminder);return; + if(!activityReminder);return; var currentTime = new Date().getTime()/1000; //requestReminder function should call after activityreminder popup interval setTimeout(function() {Vtiger_Index_Js.requestReminder()}, activityReminder*1000); app.storage.set('activityReminder', activityReminder); //setting next activity reminder check time app.storage.set('nextActivityReminderCheckTime', currentTime + parseInt(activityReminder)); - - app.request.post({ - 'data' : { - 'module' : 'Calendar', - 'action' : 'ActivityReminder', - 'mode' : 'getReminders' - } - }).then(function(e, res) { - if(!res.hasOwnProperty('result')) { - for(i=0; i< res.length; i++) { - var record = res[i]; + + app.request.post({ + 'data' : { + 'module' : 'Calendar', + 'action' : 'ActivityReminder', + 'mode' : 'getReminders' + } + }).then(function(e, res) { + if(!res.hasOwnProperty('result')) { + for(i=0; i< res.length; i++) { + var record = res[i]; if(typeof record == 'object') { Vtiger_Index_Js.showReminderPopup(record); } - } - } - }); + } + } + }); }, /** * Function display the Reminder popup */ showReminderPopup : function(record) { - var notifyParams = { - 'title' : record.activitytype + ' - ' + - '<a target="_blank" href="index.php?module=Calendar&view=Detail&record='+record.id+'">'+record.subject+'</a> '+ - '<i id="reminder-postpone-'+record.id+'" title="'+app.vtranslate('JS_POSTPONE')+'" class="cursorPointer fa fa-clock-o"></i>', - 'message' : '<div class="col-sm-12">'+ - '<div class="row">'+ - '<div class="col-sm-12 font13px">'+ - app.vtranslate('JS_START_DATE_TIME') + ' : ' + record.date_start+ - '</div>'+ - '<div class="col-sm-12 font13px">'+ - app.vtranslate('JS_END_DATE_TIME') + ' : ' + record.due_date+ - '</div>'+ - '</div>'+ - '</div>' - }; - var settings = { - 'element' : 'body', - 'type' : 'danger', - 'delay' : 0 - }; - - jQuery.notify(notifyParams, settings); - jQuery('#reminder-postpone-'+record.id).on('click', function(e) { + var notifyParams = { + 'title' : record.activitytype + ' - ' + + '<a target="_blank" href="index.php?module=Calendar&view=Detail&record='+record.id+'">'+record.subject+'</a> '+ + '<i id="reminder-postpone-'+record.id+'" title="'+app.vtranslate('JS_POSTPONE')+'" class="cursorPointer fa fa-clock-o"></i>', + 'message' : '<div class="col-sm-12">'+ + '<div class="row">'+ + '<div class="col-sm-12 font13px">'+ + app.vtranslate('JS_START_DATE_TIME') + ' : ' + record.date_start+ + '</div>'+ + '<div class="col-sm-12 font13px">'+ + app.vtranslate('JS_END_DATE_TIME') + ' : ' + record.due_date+ + '</div>'+ + '</div>'+ + '</div>' + }; + var settings = { + 'element' : 'body', + 'type' : 'danger', + 'delay' : 0 + }; + + jQuery.notify(notifyParams, settings); + jQuery('#reminder-postpone-'+record.id).on('click', function(e) { jQuery(e.currentTarget).closest('.notificationHeader').find('[data-notify="dismiss"]').trigger('click'); app.request.post({ - 'data' : { - 'module' : 'Calendar', - 'action' : 'ActivityReminder', - 'mode' : 'postpone', - 'record' : record.id - } - }).then(function(e,res) {}); + 'data' : { + 'module' : 'Calendar', + 'action' : 'ActivityReminder', + 'mode' : 'postpone', + 'record' : record.id + } + }).then(function(e,res) {}); }); - jQuery('#reminder-postpone-'+record.id).closest('[data-notify="container"]').draggable({'containment' : 'body'}); + jQuery('#reminder-postpone-'+record.id).closest('[data-notify="container"]').draggable({'containment' : 'body'}); } - + }, { - _SearchIntiatedEventName : 'VT_SEARCH_INTIATED', - usernames : [], - userList : {}, + _SearchIntiatedEventName : 'VT_SEARCH_INTIATED', + usernames : [], + userList : {}, autoFillElement : false, - - init : function() { - this.addComponents(); - }, - - addComponents : function() { - var basicSearchClassName = 'Vtiger_BasicSearch_Js'; - var textsearchClassName = 'TextSearch_BasicSearch_Js'; - if(typeof window[textsearchClassName] != "undefined") { - this.addComponent(textsearchClassName); - } else{ - this.addComponent(basicSearchClassName); - } - }, - - registerListEssentialsToggleEvent : function() { - jQuery('.main-container').on('click', '.essentials-toggle', function() { - jQuery('.sidebar-essentials').toggleClass('hide'); - jQuery(".content-area").toggleClass("full-width"); - var params = { - 'module' : 'Users', - 'action' : 'IndexAjax', - 'mode' : 'toggleLeftPanel', - 'showPanel' : +jQuery('.sidebar-essentials').hasClass('hide') - } - app.request.post({data: params}); - if(jQuery('.sidebar-essentials').hasClass('hide')) { - jQuery('.essentials-toggle-marker').removeClass('fa-chevron-left') - .addClass('fa-chevron-right'); - } else { - jQuery('.essentials-toggle-marker').removeClass('fa-chevron-right') - .addClass('fa-chevron-left'); - } - app.event.trigger("Vtiger.Post.MenuToggle"); - }); - }, - - registerModuleQtips : function() { - jQuery('.module-qtip').qtip({ - position: { - my: 'left center', - at: 'center right', - adjust: { - y: 1 - } - }, - style: { - classes: 'qtip-dark qtip-shadow module-name-tooltip' - }, - show: { - delay: 500 - } - }); - }, - - registerEvents: function() { - this.registerMenuToggle(); - this.registerGlobalSearch(); - this.registerAppTriggerEvent(); - this.registerModuleQtips(); - this.registerListEssentialsToggleEvent(); - this.registerAdvanceSeachIntiator(); - this.registerQuickCreateEvent(); - this.registerQuickCreateSubMenus(); - this.registerPostQuickCreateEvent(); - this.registerEventForTaskManagement(); + + init : function() { + this.addComponents(); + }, + + addComponents : function() { + var basicSearchClassName = 'Vtiger_BasicSearch_Js'; + var textsearchClassName = 'TextSearch_BasicSearch_Js'; + if(typeof window[textsearchClassName] != "undefined") { + this.addComponent(textsearchClassName); + } else{ + this.addComponent(basicSearchClassName); + } + }, + + registerListEssentialsToggleEvent : function() { + jQuery('.main-container').on('click', '.essentials-toggle', function() { + jQuery('.sidebar-essentials').toggleClass('hide'); + jQuery(".content-area").toggleClass("full-width"); + var params = { + 'module' : 'Users', + 'action' : 'IndexAjax', + 'mode' : 'toggleLeftPanel', + 'showPanel' : +jQuery('.sidebar-essentials').hasClass('hide') + } + app.request.post({data: params}); + if(jQuery('.sidebar-essentials').hasClass('hide')) { + jQuery('.essentials-toggle-marker').removeClass('fa-chevron-left') + .addClass('fa-chevron-right'); + } else { + jQuery('.essentials-toggle-marker').removeClass('fa-chevron-right') + .addClass('fa-chevron-left'); + } + app.event.trigger("Vtiger.Post.MenuToggle"); + }); + }, + + registerModuleQtips : function() { + jQuery('.module-qtip').qtip({ + position: { + my: 'left center', + at: 'center right', + adjust: { + y: 1 + } + }, + style: { + classes: 'qtip-dark qtip-shadow module-name-tooltip' + }, + show: { + delay: 500 + } + }); + }, + + registerEvents: function() { + this.registerMenuToggle(); + this.registerGlobalSearch(); + this.registerAppTriggerEvent(); + this.registerModuleQtips(); + this.registerListEssentialsToggleEvent(); + this.registerAdvanceSeachIntiator(); + this.registerQuickCreateEvent(); + this.registerQuickCreateSubMenus(); + this.registerPostQuickCreateEvent(); + this.registerEventForTaskManagement(); this.registerFileChangeEvent(); this.registerMultiUpload(); this.registerHoverEventOnAttachment(); //this.addBodyScroll(); - this.mentionerCallBack(); - this.modulesMenuScrollbar(); - Vtiger_Index_Js.registerActivityReminder(); - //reference preview event registeration - this.registerReferencePreviewEvent(); + this.mentionerCallBack(); + this.modulesMenuScrollbar(); + Vtiger_Index_Js.registerActivityReminder(); + //reference preview event registeration + this.registerReferencePreviewEvent(); }, - - addBodyScroll: function () { - app.helper.showVerticalScroll( - $("body"), - { - setHeight: $(window).height() - 92, - theme: "inset-dark", - alwaysShowScrollbar: 2, - autoExpandScrollbar: true, - live: "on", - setTop: 0, - scrollInertia: 70, - mouseWheel:{ preventDefault: true } - - } - ); - }, - registerEventForTaskManagement : function(){ - var globalNav = jQuery('.global-nav'); - globalNav.on("click",".taskManagement",function(e){ - if(jQuery("#taskManagementContainer").length > 0){ - app.helper.hidePageOverlay(); - return false; - } - - var params = { - 'module' : 'Calendar', - 'view' : 'TaskManagement', - 'mode' : 'showManagementView' - } - app.helper.showProgress(); - app.request.post({"data":params}).then(function(err,data){ - if(err === null){ - app.helper.loadPageOverlay(data,{'ignoreScroll' : true,'backdrop': 'static'}).then(function(){ - app.helper.hideProgress(); - $('#overlayPage').find('.data').css('height','100vh'); - - var taskManagementPageOffset = jQuery('.taskManagement').offset(); - $('#overlayPage').find(".arrow").css("left",taskManagementPageOffset.left+13); - $('#overlayPage').find(".arrow").addClass("show"); - - vtUtils.showSelect2ElementView($('#overlayPage .data-header').find('select[name="assigned_user_id"]'),{placeholder:"User : All"}); - vtUtils.showSelect2ElementView($('#overlayPage .data-header').find('select[name="taskstatus"]'),{placeholder:"Status : All"}); - var js = new Vtiger_TaskManagement_Js(); - js.registerEvents(); - }); - }else{ - app.helper.showErrorNotification({"message":err}); - } - }); - }); - }, - - registerPostQuickCreateEvent : function(){ - var thisInstance = this; - - app.event.on("post.QuickCreateForm.show",function(event,form){ - form.find('#goToFullForm').on('click', function(e) { + + addBodyScroll: function () { + app.helper.showVerticalScroll( + $("body"), + { + setHeight: $(window).height() - 92, + theme: "inset-dark", + alwaysShowScrollbar: 2, + autoExpandScrollbar: true, + live: "on", + setTop: 0, + scrollInertia: 70, + mouseWheel:{ preventDefault: true } + + } + ); + }, + registerEventForTaskManagement : function(){ + var globalNav = jQuery('.global-nav'); + globalNav.on("click",".taskManagement",function(e){ + if(jQuery("#taskManagementContainer").length > 0){ + app.helper.hidePageOverlay(); + return false; + } + + var params = { + 'module' : 'Calendar', + 'view' : 'TaskManagement', + 'mode' : 'showManagementView' + } + app.helper.showProgress(); + app.request.post({"data":params}).then(function(err,data){ + if(err === null){ + app.helper.loadPageOverlay(data,{'ignoreScroll' : true,'backdrop': 'static'}).then(function(){ + app.helper.hideProgress(); + $('#overlayPage').find('.data').css('height','100vh'); + + var taskManagementPageOffset = jQuery('.taskManagement').offset(); + $('#overlayPage').find(".arrow").css("left",taskManagementPageOffset.left+13); + $('#overlayPage').find(".arrow").addClass("show"); + + vtUtils.showSelect2ElementView($('#overlayPage .data-header').find('select[name="assigned_user_id"]'),{placeholder:"User : All"}); + vtUtils.showSelect2ElementView($('#overlayPage .data-header').find('select[name="taskstatus"]'),{placeholder:"Status : All"}); + var js = new Vtiger_TaskManagement_Js(); + js.registerEvents(); + }); + }else{ + app.helper.showErrorNotification({"message":err}); + } + }); + }); + }, + + registerPostQuickCreateEvent : function(){ + var thisInstance = this; + + app.event.on("post.QuickCreateForm.show",function(event,form){ + form.find('#goToFullForm').on('click', function(e) { window.onbeforeunload = true; - var form = jQuery(e.currentTarget).closest('form'); - var editViewUrl = jQuery(e.currentTarget).data('editViewUrl'); - if (typeof goToFullFormCallBack != "undefined") { - goToFullFormCallBack(form); - } - thisInstance.quickCreateGoToFullForm(form, editViewUrl); - }); - }); - }, - - /** - * Function to navigate from quickcreate to editView Fullform - * @param accepts form element as parameter - */ - quickCreateGoToFullForm: function(form, editViewUrl) { - var formData = form.serializeFormData(); - //As formData contains information about both view and action removed action and directed to view - delete formData.module; - delete formData.action; - delete formData.picklistDependency; - var formDataUrl = jQuery.param(formData); - var completeUrl = editViewUrl + "&" + formDataUrl; - window.location.href = completeUrl; - }, - - registerQuickCreateSubMenus : function() { - jQuery("#quickCreateModules").on("click",".quickCreateModuleSubmenu",function(e){ - e.preventDefault(); - e.stopImmediatePropagation(); - jQuery(e.currentTarget).closest('.dropdown').toggleClass('open'); - }); - }, - - /** - * Function to register Quick Create Event - * @returns {undefined} - */ - registerQuickCreateEvent : function (){ - var thisInstance = this; - jQuery("#quickCreateModules").on("click",".quickCreateModule",function(e,params){ - var quickCreateElem = jQuery(e.currentTarget); - var quickCreateUrl = quickCreateElem.data('url'); - var quickCreateModuleName = quickCreateElem.data('name'); - if (typeof params === 'undefined') { - params = {}; - } - if (typeof params.callbackFunction === 'undefined') { - params.callbackFunction = function(data, err) { - //fix for Refresh list view after Quick create - var parentModule=app.getModuleName(); - var viewname=app.view(); - if((quickCreateModuleName == parentModule) && (viewname=="List")){ - var listinstance = app.controller(); - listinstance.loadListViewRecords(); - } - }; - } - app.helper.showProgress(); - thisInstance.getQuickCreateForm(quickCreateUrl,quickCreateModuleName,params).then(function(data){ - app.helper.hideProgress(); + var form = jQuery(e.currentTarget).closest('form'); + var editViewUrl = jQuery(e.currentTarget).data('editViewUrl'); + if (typeof goToFullFormCallBack != "undefined") { + goToFullFormCallBack(form); + } + thisInstance.quickCreateGoToFullForm(form, editViewUrl); + }); + }); + }, + + /** + * Function to navigate from quickcreate to editView Fullform + * @param accepts form element as parameter + */ + quickCreateGoToFullForm: function(form, editViewUrl) { + var formData = form.serializeFormData(); + //As formData contains information about both view and action removed action and directed to view + delete formData.module; + delete formData.action; + delete formData.picklistDependency; + var formDataUrl = jQuery.param(formData); + var completeUrl = editViewUrl + "&" + formDataUrl; + window.location.href = completeUrl; + }, + + registerQuickCreateSubMenus : function() { + jQuery("#quickCreateModules").on("click",".quickCreateModuleSubmenu",function(e){ + e.preventDefault(); + e.stopImmediatePropagation(); + jQuery(e.currentTarget).closest('.dropdown').toggleClass('open'); + }); + }, + + /** + * Function to register Quick Create Event + * @returns {undefined} + */ + registerQuickCreateEvent : function (){ + var thisInstance = this; + jQuery("#quickCreateModules").on("click",".quickCreateModule",function(e,params){ + var quickCreateElem = jQuery(e.currentTarget); + var quickCreateUrl = quickCreateElem.data('url'); + var quickCreateModuleName = quickCreateElem.data('name'); + if (typeof params === 'undefined') { + params = {}; + } + if (typeof params.callbackFunction === 'undefined') { + params.callbackFunction = function(data, err) { + //fix for Refresh list view after Quick create + var parentModule=app.getModuleName(); + var viewname=app.view(); + if((quickCreateModuleName == parentModule) && (viewname=="List")){ + var listinstance = app.controller(); + listinstance.loadListViewRecords(); + } + }; + } + app.helper.showProgress(); + thisInstance.getQuickCreateForm(quickCreateUrl,quickCreateModuleName,params).then(function(data){ + app.helper.hideProgress(); var callbackparams = { 'cb' : function (container){ thisInstance.registerPostReferenceEvent(container); - app.event.trigger('post.QuickCreateForm.show',form); - app.helper.registerLeavePageWithoutSubmit(form); - app.helper.registerModalDismissWithoutSubmit(form); + app.event.trigger('post.QuickCreateForm.show',form); + app.helper.registerLeavePageWithoutSubmit(form); + app.helper.registerModalDismissWithoutSubmit(form); }, backdrop : 'static', keyboard : false } - - app.helper.showModal(data, callbackparams); - var form = jQuery('form[name="QuickCreate"]'); - var moduleName = form.find('[name="module"]').val(); - app.helper.showVerticalScroll(jQuery('form[name="QuickCreate"] .modal-body'), {'autoHideScrollbar': true}); - - var targetInstance = thisInstance; - var moduleInstance = Vtiger_Edit_Js.getInstanceByModuleName(moduleName); - if(typeof(moduleInstance.quickCreateSave) === 'function'){ - targetInstance = moduleInstance; - targetInstance.registerBasicEvents(form); + + app.helper.showModal(data, callbackparams); + var form = jQuery('form[name="QuickCreate"]'); + var moduleName = form.find('[name="module"]').val(); + app.helper.showVerticalScroll(jQuery('form[name="QuickCreate"] .modal-body'), {'autoHideScrollbar': true}); + + var targetInstance = thisInstance; + var moduleInstance = Vtiger_Edit_Js.getInstanceByModuleName(moduleName); + if(typeof(moduleInstance.quickCreateSave) === 'function'){ + targetInstance = moduleInstance; + targetInstance.registerBasicEvents(form); } - - vtUtils.applyFieldElementsView(form); - targetInstance.quickCreateSave(form,params); - app.helper.hideProgress(); - }); - }); - }, - - /** - * Function to register quick create tab events - */ - registerQuickcreateTabEvents : function(form) { - var thisInstance = this; - var tabElements = form.closest('.modal-content').find('.nav.nav-pills , .nav.nav-tabs').find('a'); - - //This will remove the name attributes and assign it to data-element-name . We are doing this to avoid - //Multiple element to send as in calendar - var quickCreateTabOnHide = function(tabElement) { - var container = jQuery(tabElement.attr('data-target')); - - container.find('[name]').each(function(index, element) { - element = jQuery(element); - element.attr('data-element-name', element.attr('name')).removeAttr('name'); - }); - }; - - //This will add the name attributes and get value from data-element-name . We are doing this to avoid - //Multiple element to send as in calendar - var quickCreateTabOnShow = function(tabElement) { - var container = jQuery(tabElement.attr('data-target')); - - container.find('[data-element-name]').each(function(index, element) { - element = jQuery(element); - element.attr('name', element.attr('data-element-name')).removeAttr('data-element-name'); - }); - }; - - tabElements.on('shown.bs.tab', function(e) { - var previousTab = jQuery(e.relatedTarget); - var currentTab = jQuery(e.currentTarget); - - quickCreateTabOnHide(previousTab); - quickCreateTabOnShow(currentTab); - - if(form.find('[name="module"]').val()=== 'Calendar') { - var sourceModule = currentTab.data('source-module'); - form.find('[name="calendarModule"]').val(sourceModule); - var moduleInstance = Vtiger_Edit_Js.getInstanceByModuleName('Calendar'); - moduleInstance.registerEventForPicklistDependencySetup(form); - } - + + vtUtils.applyFieldElementsView(form); + targetInstance.quickCreateSave(form,params); + app.helper.hideProgress(); + }); + }); + }, + + /** + * Function to register quick create tab events + */ + registerQuickcreateTabEvents : function(form) { + var thisInstance = this; + var tabElements = form.closest('.modal-content').find('.nav.nav-pills , .nav.nav-tabs').find('a'); + + //This will remove the name attributes and assign it to data-element-name . We are doing this to avoid + //Multiple element to send as in calendar + var quickCreateTabOnHide = function(tabElement) { + var container = jQuery(tabElement.attr('data-target')); + + container.find('[name]').each(function(index, element) { + element = jQuery(element); + element.attr('data-element-name', element.attr('name')).removeAttr('name'); + }); + }; + + //This will add the name attributes and get value from data-element-name . We are doing this to avoid + //Multiple element to send as in calendar + var quickCreateTabOnShow = function(tabElement) { + var container = jQuery(tabElement.attr('data-target')); + + container.find('[data-element-name]').each(function(index, element) { + element = jQuery(element); + element.attr('name', element.attr('data-element-name')).removeAttr('data-element-name'); + }); + }; + + tabElements.on('shown.bs.tab', function(e) { + var previousTab = jQuery(e.relatedTarget); + var currentTab = jQuery(e.currentTarget); + + quickCreateTabOnHide(previousTab); + quickCreateTabOnShow(currentTab); + + if(form.find('[name="module"]').val()=== 'Calendar') { + var sourceModule = currentTab.data('source-module'); + form.find('[name="calendarModule"]').val(sourceModule); + var moduleInstance = Vtiger_Edit_Js.getInstanceByModuleName('Calendar'); + moduleInstance.registerEventForPicklistDependencySetup(form); + } + //while switching tabs we have to show scroll bar //thisInstance.showQuickCreateScrollBar(form); - //while switching tabs we have to clear the invalid fields list - //form.data('jqv').InvalidFields = []; - }); - - //remove name attributes for inactive tab elements - quickCreateTabOnHide(tabElements.closest('li').filter(':not(.active)').find('a')); - }, - - /** - * Register Quick Create Save Event - * @param {type} form - * @returns {undefined} - */ - quickCreateSave : function(form,invokeParams){ - var params = { - submitHandler: function(form) { - // to Prevent submit if already submitted - jQuery("button[name='saveButton']").attr("disabled","disabled"); - if(this.numberOfInvalids() > 0) { - return false; - } - var formData = jQuery(form).serialize(); - app.request.post({data:formData}).then(function(err,data){ - app.event.trigger("post.QuickCreateForm.save",data,jQuery(form).serializeFormData()); - if(err === null) { - app.helper.hideModal(); - app.helper.showSuccessNotification({"message":''}); - invokeParams.callbackFunction(data, err); + //while switching tabs we have to clear the invalid fields list + //form.data('jqv').InvalidFields = []; + }); + + //remove name attributes for inactive tab elements + quickCreateTabOnHide(tabElements.closest('li').filter(':not(.active)').find('a')); + }, + + /** + * Register Quick Create Save Event + * @param {type} form + * @returns {undefined} + */ + quickCreateSave : function(form,invokeParams){ + var params = { + submitHandler: function(form) { + // to Prevent submit if already submitted + jQuery("button[name='saveButton']").attr("disabled","disabled"); + if(this.numberOfInvalids() > 0) { + return false; + } + var formData = jQuery(form).serialize(); + app.request.post({data:formData}).then(function(err,data){ + app.event.trigger("post.QuickCreateForm.save",data,jQuery(form).serializeFormData()); + if(err === null) { + app.helper.hideModal(); + app.helper.showSuccessNotification({"message":''}); + invokeParams.callbackFunction(data, err); //To unregister onbefore unload event registered for quickcreate window.onbeforeunload = null; - }else{ - app.helper.showErrorNotification({"message":err}); - } - }); - }, - validationMeta: quickcreate_uimeta - }; - form.vtValidate(params); - }, - - /** - * Function to get Quick Create Form - * @param {type} url - * @param {type} moduleName - * @returns {unresolved} - */ - getQuickCreateForm: function(url, moduleName, params) { - var aDeferred = jQuery.Deferred(); - var requestParams = app.convertUrlToDataParams(url); - jQuery.extend(requestParams, params.data); - app.request.post({data:requestParams}).then(function(err,data) { - aDeferred.resolve(data); - }); - return aDeferred.promise(); - }, - - registerMenuToggle : function(){ - jQuery("#menu-toggle").on('click', function(e) { - e.preventDefault(); - $("#modnavigator").toggleClass('hide'); - $(".content-area").toggleClass("full-width"); - var params = { - 'module' : 'Users', - 'action' : 'IndexAjax', - 'mode' : 'toggleLeftPanel', - 'showPanel' : +jQuery("#modnavigator").hasClass('hide') - } - app.request.post({data: params}); - app.event.trigger("Vtiger.Post.MenuToggle"); - }); - }, - - registerAppTriggerEvent : function() { - jQuery('.app-menu').removeClass('hide'); - var toggleAppMenu = function(type) { - var appMenu = jQuery('.app-menu'); - var appNav = jQuery('.app-nav'); - appMenu.appendTo('#page'); - appMenu.css({ - 'top' : appNav.offset().top + appNav.height(), - 'left' : 0 - }); - if(typeof type === 'undefined') { - type = appMenu.is(':hidden') ? 'show' : 'hide'; - } - if(type == 'show') { - appMenu.show(200, function() {}); - } else { - appMenu.hide(200, function() {}); - } - }; - - jQuery('.app-trigger, .app-icon, .app-navigator').on('click',function(e){ - e.stopPropagation(); - toggleAppMenu(); - }); - - jQuery('html').on('click', function() { - toggleAppMenu('hide'); - }); - - jQuery(document).keyup(function (e) { - if (e.keyCode == 27) { - if(!jQuery('.app-menu').is(':hidden')) { - toggleAppMenu('hide'); - } - } - }); - - jQuery('.app-modules-dropdown-container').hover(function(e) { - var dropdownContainer = jQuery(e.currentTarget); - jQuery('.dropdown').removeClass('open'); - if(dropdownContainer.length) { - if(dropdownContainer.hasClass('dropdown-compact')) { - dropdownContainer.find('.app-modules-dropdown').css('top', dropdownContainer.position().top - 8); - } else { - dropdownContainer.find('.app-modules-dropdown').css('top', ''); - } - dropdownContainer.addClass('open').find('.app-item').addClass('active-app-item'); - } - }, function(e) { - var dropdownContainer = jQuery(e.currentTarget); - dropdownContainer.find('.app-item').removeClass('active-app-item'); - setTimeout(function() { - if(dropdownContainer.find('.app-modules-dropdown').length && !dropdownContainer.find('.app-modules-dropdown').is(':hover') && !dropdownContainer.is(':hover')) { - dropdownContainer.removeClass('open'); - } - }, 500); - - }); - - jQuery('.app-item').on('click', function() { - var url = jQuery(this).data('defaultUrl'); - if(url) { - window.location.href = url; - } - }); - + }else{ + app.helper.showErrorNotification({"message":err}); + } + }); + }, + validationMeta: quickcreate_uimeta + }; + form.vtValidate(params); + }, + + /** + * Function to get Quick Create Form + * @param {type} url + * @param {type} moduleName + * @returns {unresolved} + */ + getQuickCreateForm: function(url, moduleName, params) { + var aDeferred = jQuery.Deferred(); + var requestParams = app.convertUrlToDataParams(url); + jQuery.extend(requestParams, params.data); + app.request.post({data:requestParams}).then(function(err,data) { + aDeferred.resolve(data); + }); + return aDeferred.promise(); + }, + + registerMenuToggle : function(){ + jQuery("#menu-toggle").on('click', function(e) { + e.preventDefault(); + $("#modnavigator").toggleClass('hide'); + $(".content-area").toggleClass("full-width"); + var params = { + 'module' : 'Users', + 'action' : 'IndexAjax', + 'mode' : 'toggleLeftPanel', + 'showPanel' : +jQuery("#modnavigator").hasClass('hide') + } + app.request.post({data: params}); + app.event.trigger("Vtiger.Post.MenuToggle"); + }); + }, + + registerAppTriggerEvent : function() { + jQuery('.app-menu').removeClass('hide'); + var toggleAppMenu = function(type) { + var appMenu = jQuery('.app-menu'); + var appNav = jQuery('.app-nav'); + appMenu.appendTo('#page'); + appMenu.css({ + 'top' : appNav.offset().top + appNav.height(), + 'left' : 0 + }); + if(typeof type === 'undefined') { + type = appMenu.is(':hidden') ? 'show' : 'hide'; + } + if(type == 'show') { + appMenu.show(200, function() {}); + } else { + appMenu.hide(200, function() {}); + } + }; + + jQuery('.app-trigger, .app-icon, .app-navigator').on('click',function(e){ + e.stopPropagation(); + toggleAppMenu(); + }); + + jQuery('html').on('click', function() { + toggleAppMenu('hide'); + }); + + jQuery(document).keyup(function (e) { + if (e.keyCode == 27) { + if(!jQuery('.app-menu').is(':hidden')) { + toggleAppMenu('hide'); + } + } + }); + + jQuery('.app-modules-dropdown-container').hover(function(e) { + var dropdownContainer = jQuery(e.currentTarget); + jQuery('.dropdown').removeClass('open'); + if(dropdownContainer.length) { + if(dropdownContainer.hasClass('dropdown-compact')) { + dropdownContainer.find('.app-modules-dropdown').css('top', dropdownContainer.position().top - 8); + } else { + dropdownContainer.find('.app-modules-dropdown').css('top', ''); + } + dropdownContainer.addClass('open').find('.app-item').addClass('active-app-item'); + } + }, function(e) { + var dropdownContainer = jQuery(e.currentTarget); + dropdownContainer.find('.app-item').removeClass('active-app-item'); + setTimeout(function() { + if(dropdownContainer.find('.app-modules-dropdown').length && !dropdownContainer.find('.app-modules-dropdown').is(':hover') && !dropdownContainer.is(':hover')) { + dropdownContainer.removeClass('open'); + } + }, 500); + + }); + + jQuery('.app-item').on('click', function() { + var url = jQuery(this).data('defaultUrl'); + if(url) { + window.location.href = url; + } + }); + jQuery(window).resize(function() { jQuery(".app-modules-dropdown").mCustomScrollbar("destroy"); - app.helper.showVerticalScroll(jQuery(".app-modules-dropdown").not('.dropdown-modules-compact'), { - setHeight: $(window).height(), - autoExpandScrollbar: true - }); - jQuery('.dropdown-modules-compact').each(function() { - var element = jQuery(this); - var heightPer = parseFloat(element.data('height')); - app.helper.showVerticalScroll(element, { - setHeight: $(window).height()*heightPer - 3, - autoExpandScrollbar: true, - scrollbarPosition: 'outside' - }); - }); + app.helper.showVerticalScroll(jQuery(".app-modules-dropdown").not('.dropdown-modules-compact'), { + setHeight: $(window).height(), + autoExpandScrollbar: true + }); + jQuery('.dropdown-modules-compact').each(function() { + var element = jQuery(this); + var heightPer = parseFloat(element.data('height')); + app.helper.showVerticalScroll(element, { + setHeight: $(window).height()*heightPer - 3, + autoExpandScrollbar: true, + scrollbarPosition: 'outside' + }); + }); + }); + app.helper.showVerticalScroll(jQuery(".app-modules-dropdown").not('.dropdown-modules-compact'), { + setHeight: $(window).height(), + autoExpandScrollbar: true, + scrollbarPosition: 'outside' }); - app.helper.showVerticalScroll(jQuery(".app-modules-dropdown").not('.dropdown-modules-compact'), { - setHeight: $(window).height(), - autoExpandScrollbar: true, - scrollbarPosition: 'outside' - }); - jQuery('.dropdown-modules-compact').each(function() { - var element = jQuery(this); - var heightPer = parseFloat(element.data('height')); - app.helper.showVerticalScroll(element, { - setHeight: $(window).height()*heightPer - 3, - autoExpandScrollbar: true, - scrollbarPosition: 'outside' - }); - }); - }, - - registerGlobalSearch : function() { - var thisInstance = this; - jQuery('.search-link .keyword-input').on('keypress',function(e){ - if(e.which == 13) { - - var element = jQuery(e.currentTarget); - var searchValue = element.val(); - var data = {}; - data['searchValue'] = searchValue; - element.trigger(thisInstance._SearchIntiatedEventName,data); - } - }); - }, - - registerAdvanceSeachIntiator : function () { - jQuery('#adv-search').on('click',function(e){ - var advanceSearchInstance = new Vtiger_AdvanceSearch_Js(); - advanceSearchInstance.advanceSearchTriggerIntiatorHandler(); -// advanceSearchInstance.initiateSearch().then(function() { -// advanceSearchInstance.selectBasicSearchValue(); -// }); - }); - }, - - /** - * 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; - container.find('input.autoComplete').autocomplete({ - 'minLength' : '3', - 'source' : function(request, response){ - //element will be array of dom elements - //here this refers to auto complete instance - var inputElement = jQuery(this.element[0]); - var searchValue = request.term; - var params = thisInstance.getReferenceSearchParams(inputElement); + jQuery('.dropdown-modules-compact').each(function() { + var element = jQuery(this); + var heightPer = parseFloat(element.data('height')); + app.helper.showVerticalScroll(element, { + setHeight: $(window).height()*heightPer - 3, + autoExpandScrollbar: true, + scrollbarPosition: 'outside' + }); + }); + }, + + registerGlobalSearch : function() { + var thisInstance = this; + jQuery('.search-link .keyword-input').on('keypress',function(e){ + if(e.which == 13) { + + var element = jQuery(e.currentTarget); + var searchValue = element.val(); + var data = {}; + data['searchValue'] = searchValue; + element.trigger(thisInstance._SearchIntiatedEventName,data); + } + }); + }, + + registerAdvanceSeachIntiator : function () { + jQuery('#adv-search').on('click',function(e){ + var advanceSearchInstance = new Vtiger_AdvanceSearch_Js(); + advanceSearchInstance.advanceSearchTriggerIntiatorHandler(); +// advanceSearchInstance.initiateSearch().then(function() { +// advanceSearchInstance.selectBasicSearchValue(); +// }); + }); + }, + + /** + * 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; + container.find('input.autoComplete').autocomplete({ + 'minLength' : '3', + 'source' : function(request, response){ + //element will be array of dom elements + //here this refers to auto complete instance + var inputElement = jQuery(this.element[0]); + var searchValue = request.term; + var params = thisInstance.getReferenceSearchParams(inputElement); params.module = app.getModuleName(); if (jQuery('#QuickCreate').length > 0) { params.module = container.find('[name="module"]').val(); } - params.search_value = searchValue; - if(params.search_module && params.search_module!= 'undefined') { - thisInstance.searchModuleNames(params).then(function(data){ - var reponseDataList = new Array(); - var serverDataFormat = data; - if(serverDataFormat.length <= 0) { - jQuery(inputElement).val(''); - serverDataFormat = new Array({ - 'label' : 'No Results Found', - 'type' : 'no results' - }); - } - for(var id in serverDataFormat){ - var responseData = serverDataFormat[id]; - reponseDataList.push(responseData); - } - response(reponseDataList); - }); - } else { - jQuery(inputElement).val(''); - serverDataFormat = new Array({ - 'label' : 'No Results Found', - 'type' : 'no results' - }); - response(serverDataFormat); - } - }, - 'select' : function(event, ui ){ - var selectedItemData = ui.item; - //To stop selection if no results is selected - if(typeof selectedItemData.type != 'undefined' && selectedItemData.type=="no results"){ - return false; - } - var element = jQuery(this); - var parent = element.closest('td'); - if(parent.length == 0){ - parent = element.closest('.fieldValue'); - } - var sourceField = parent.find('.sourceField'); - selectedItemData.record = selectedItemData.id; - selectedItemData.source_module = parent.find('input[name="popupReferenceModule"]').val(); - selectedItemData.selectedName = selectedItemData.label; - var fieldName = sourceField.attr("name"); - parent.find('input[name="'+fieldName+'"]').val(selectedItemData.id); - element.attr("value",selectedItemData.id); - parent.find('.clearReferenceSelection').removeClass('hide'); - parent.find('.referencefield-wrapper').addClass('selected'); - element.attr("disabled","disabled"); - //trigger reference field selection event - sourceField.trigger(Vtiger_Edit_Js.referenceSelectionEvent,selectedItemData); - //trigger post reference selection - sourceField.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':selectedItemData}); - } - }); - }, - - /** - * Function to register clear reference selection event - * @param <jQUery> container - */ - registerClearReferenceSelectionEvent : function(container) { - container.find('.clearReferenceSelection').on('click', function(e){ - e.preventDefault(); - var element = jQuery(e.currentTarget); - var parentTdElement = element.closest('td'); - if(parentTdElement.length == 0){ - parentTdElement = element.closest('.fieldValue'); - } - var inputElement = parentTdElement.find('.inputElement'); - var fieldName = parentTdElement.find('.sourceField').attr("name"); - - parentTdElement.find('.referencefield-wrapper').removeClass('selected'); - inputElement.removeAttr("disabled").removeAttr('readonly'); - inputElement.attr("value",""); - inputElement.val(""); - parentTdElement.find('input[name="'+fieldName+'"]').val(""); - element.addClass('hide'); - element.trigger(Vtiger_Edit_Js.referenceDeSelectionEvent); - }); - }, - - /** - * Function which will register event for create of reference record - * This will allow users to create reference record from edit view of other record - */ - registerReferenceCreate : function(container) { - var thisInstance = this; - container.on('click','.createReferenceRecord', function(e) { - var element = jQuery(e.currentTarget); - var controlElementTd = thisInstance.getParentElement(element); - thisInstance.referenceCreateHandler(controlElementTd); - }); - }, - - /** - * Funtion to register popup search event for reference field - * @param <jQuery> container - */ - referenceModulePopupRegisterEvent : function(container) { - var thisInstance = this; + params.search_value = searchValue; + if(params.search_module && params.search_module!= 'undefined') { + thisInstance.searchModuleNames(params).then(function(data){ + var reponseDataList = new Array(); + var serverDataFormat = data; + if(serverDataFormat.length <= 0) { + jQuery(inputElement).val(''); + serverDataFormat = new Array({ + 'label' : 'No Results Found', + 'type' : 'no results' + }); + } + for(var id in serverDataFormat){ + var responseData = serverDataFormat[id]; + reponseDataList.push(responseData); + } + response(reponseDataList); + }); + } else { + jQuery(inputElement).val(''); + serverDataFormat = new Array({ + 'label' : 'No Results Found', + 'type' : 'no results' + }); + response(serverDataFormat); + } + }, + 'select' : function(event, ui ){ + var selectedItemData = ui.item; + //To stop selection if no results is selected + if(typeof selectedItemData.type != 'undefined' && selectedItemData.type=="no results"){ + return false; + } + var element = jQuery(this); + var parent = element.closest('td'); + if(parent.length == 0){ + parent = element.closest('.fieldValue'); + } + var sourceField = parent.find('.sourceField'); + selectedItemData.record = selectedItemData.id; + selectedItemData.source_module = parent.find('input[name="popupReferenceModule"]').val(); + selectedItemData.selectedName = selectedItemData.label; + var fieldName = sourceField.attr("name"); + parent.find('input[name="'+fieldName+'"]').val(selectedItemData.id); + element.attr("value",selectedItemData.id); + parent.find('.clearReferenceSelection').removeClass('hide'); + parent.find('.referencefield-wrapper').addClass('selected'); + element.attr("disabled","disabled"); + //trigger reference field selection event + sourceField.trigger(Vtiger_Edit_Js.referenceSelectionEvent,selectedItemData); + //trigger post reference selection + sourceField.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':selectedItemData}); + } + }); + }, + + /** + * Function to register clear reference selection event + * @param <jQUery> container + */ + registerClearReferenceSelectionEvent : function(container) { + container.find('.clearReferenceSelection').on('click', function(e){ + e.preventDefault(); + var element = jQuery(e.currentTarget); + var parentTdElement = element.closest('td'); + if(parentTdElement.length == 0){ + parentTdElement = element.closest('.fieldValue'); + } + var inputElement = parentTdElement.find('.inputElement'); + var fieldName = parentTdElement.find('.sourceField').attr("name"); + + parentTdElement.find('.referencefield-wrapper').removeClass('selected'); + inputElement.removeAttr("disabled").removeAttr('readonly'); + inputElement.attr("value",""); + inputElement.val(""); + parentTdElement.find('input[name="'+fieldName+'"]').val(""); + element.addClass('hide'); + element.trigger(Vtiger_Edit_Js.referenceDeSelectionEvent); + }); + }, + + /** + * Function which will register event for create of reference record + * This will allow users to create reference record from edit view of other record + */ + registerReferenceCreate : function(container) { + var thisInstance = this; + container.on('click','.createReferenceRecord', function(e) { + var element = jQuery(e.currentTarget); + var controlElementTd = thisInstance.getParentElement(element); + thisInstance.referenceCreateHandler(controlElementTd); + }); + }, + + /** + * Funtion to register popup search event for reference field + * @param <jQuery> container + */ + referenceModulePopupRegisterEvent : function(container) { + var thisInstance = this; container.off('click', '.relatedPopup'); - container.on("click",'.relatedPopup',function(e) { - thisInstance.openPopUp(e); - }); - container.on('change','.referenceModulesList',function(e){ - var element = jQuery(e.currentTarget); - var closestTD = thisInstance.getParentElement(element).next(); - var popupReferenceModule = element.val(); - var referenceModuleElement = jQuery('input[name="popupReferenceModule"]', closestTD).length ? - jQuery('input[name="popupReferenceModule"]', closestTD) : jQuery('input.popupReferenceModule', closestTD); - var prevSelectedReferenceModule = referenceModuleElement.val(); - referenceModuleElement.val(popupReferenceModule); - - //If Reference module is changed then we should clear the previous value - if(prevSelectedReferenceModule != popupReferenceModule) { - closestTD.find('.clearReferenceSelection').trigger('click'); - } - }); - }, - - /** - * Function to open popup list modal - */ - openPopUp : function(e) { - var thisInstance = this; - var parentElem = thisInstance.getParentElement(jQuery(e.target)); - - var params = this.getPopUpParams(parentElem); - params.view = 'Popup'; - - var isMultiple = false; - if(params.multi_select) { - isMultiple = true; - } - - var sourceFieldElement = jQuery('input[class="sourceField"]',parentElem); - - var prePopupOpenEvent = jQuery.Event(Vtiger_Edit_Js.preReferencePopUpOpenEvent); - sourceFieldElement.trigger(prePopupOpenEvent); - - if(prePopupOpenEvent.isDefaultPrevented()) { - return ; - } - var popupInstance = Vtiger_Popup_Js.getInstance(); - - app.event.off(Vtiger_Edit_Js.popupSelectionEvent); - app.event.one(Vtiger_Edit_Js.popupSelectionEvent,function(e,data) { - var responseData = JSON.parse(data); - var dataList = new Array(); + container.on("click",'.relatedPopup',function(e) { + thisInstance.openPopUp(e); + }); + container.on('change','.referenceModulesList',function(e){ + var element = jQuery(e.currentTarget); + var closestTD = thisInstance.getParentElement(element).next(); + var popupReferenceModule = element.val(); + var referenceModuleElement = jQuery('input[name="popupReferenceModule"]', closestTD).length ? + jQuery('input[name="popupReferenceModule"]', closestTD) : jQuery('input.popupReferenceModule', closestTD); + var prevSelectedReferenceModule = referenceModuleElement.val(); + referenceModuleElement.val(popupReferenceModule); + + //If Reference module is changed then we should clear the previous value + if(prevSelectedReferenceModule != popupReferenceModule) { + closestTD.find('.clearReferenceSelection').trigger('click'); + } + }); + }, + + /** + * Function to open popup list modal + */ + openPopUp : function(e) { + var thisInstance = this; + var parentElem = thisInstance.getParentElement(jQuery(e.target)); + + var params = this.getPopUpParams(parentElem); + params.view = 'Popup'; + + var isMultiple = false; + if(params.multi_select) { + isMultiple = true; + } + + var sourceFieldElement = jQuery('input[class="sourceField"]',parentElem); + + var prePopupOpenEvent = jQuery.Event(Vtiger_Edit_Js.preReferencePopUpOpenEvent); + sourceFieldElement.trigger(prePopupOpenEvent); + + if(prePopupOpenEvent.isDefaultPrevented()) { + return ; + } + var popupInstance = Vtiger_Popup_Js.getInstance(); + + app.event.off(Vtiger_Edit_Js.popupSelectionEvent); + app.event.one(Vtiger_Edit_Js.popupSelectionEvent,function(e,data) { + var responseData = JSON.parse(data); + var dataList = new Array(); jQuery.each(responseData, function(key, value){ var counter = 0; for(var valuekey in value){ @@ -965,14 +965,14 @@ Vtiger.Class('Vtiger_Index_Js', { } }); - if(isMultiple) { - sourceFieldElement.trigger(Vtiger_Edit_Js.refrenceMultiSelectionEvent,{'data':dataList}); - } - sourceFieldElement.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':responseData}); - }); - popupInstance.showPopup(params,Vtiger_Edit_Js.popupSelectionEvent,function() {}); - }, - + if(isMultiple) { + sourceFieldElement.trigger(Vtiger_Edit_Js.refrenceMultiSelectionEvent,{'data':dataList}); + } + sourceFieldElement.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':responseData}); + }); + popupInstance.showPopup(params,Vtiger_Edit_Js.popupSelectionEvent,function() {}); + }, + /** * Functions changes the value of max upload size variable * @param {type} container @@ -1004,39 +1004,39 @@ Vtiger.Class('Vtiger_Index_Js', { */ registerFileChangeEvent: function () { var thisInstance = this; - var container = jQuery('body'); - Vtiger_Index_Js.files = ''; - container.on('change', 'input[name="filename[]"],input[name="imagename[]"]', function(e){ - if(e.target.type == "text") return false; - + var container = jQuery('body'); + Vtiger_Index_Js.files = ''; + container.on('change', 'input[name="filename[]"],input[name="imagename[]"]', function(e){ + if(e.target.type == "text") return false; + var files_uploaded=[]; var fileSize = 0; jQuery.each(e.target.files,function(key,element){ files_uploaded[key] = element; fileSize += Number(element['size']); }); - - - Vtiger_Index_Js.files = files_uploaded; - var element = container.find('input[name="filename[]"],input[name="imagename[]"]'); - //ignore all other types than file - if(element.attr('type') != 'file'){ - return ; - } - var uploadFileSizeHolder = element.closest('.fileUploadContainer').find('.uploadedFileSize'); - var maxFileSize = thisInstance.getMaxiumFileUploadingSize(container); - if(fileSize > maxFileSize) { + + + Vtiger_Index_Js.files = files_uploaded; + var element = container.find('input[name="filename[]"],input[name="imagename[]"]'); + //ignore all other types than file + if(element.attr('type') != 'file'){ + return ; + } + var uploadFileSizeHolder = element.closest('.fileUploadContainer').find('.uploadedFileSize'); + var maxFileSize = thisInstance.getMaxiumFileUploadingSize(container); + if(fileSize > maxFileSize) { alert(app.vtranslate('JS_EXCEEDS_MAX_UPLOAD_SIZE')); var removeFileLinks = jQuery('.MultiFile-remove'); jQuery(removeFileLinks[removeFileLinks.length - 1]).click(); - } else { - if(container.length > 1){ - jQuery('div.fieldsContainer').find('form#I_form').find('input[name="filename"]').css('width','80px'); - jQuery('div.fieldsContainer').find('form#W_form').find('input[name="filename"]').css('width','80px'); - } else { - container.find('input[name="filename[]"]').css('width','80px'); - } - } + } else { + if(container.length > 1){ + jQuery('div.fieldsContainer').find('form#I_form').find('input[name="filename"]').css('width','80px'); + jQuery('div.fieldsContainer').find('form#W_form').find('input[name="filename"]').css('width','80px'); + } else { + container.find('input[name="filename[]"]').css('width','80px'); + } + } }); }, @@ -1055,9 +1055,9 @@ Vtiger.Class('Vtiger_Index_Js', { setTimeout(indexInstance.registerMultiUpload, 50); //wait 50 ms, then try again } }, - + //removed toggle class for quickcreate - + /** * Function register on mouseover and mouseout events * @returns {undefined} @@ -1069,38 +1069,38 @@ Vtiger.Class('Vtiger_Index_Js', { jQuery(e.currentTarget).closest('div').find('a[name="downloadfile"] i').addClass('hide'); }); }, - /* - * Function to get reference select popup parameters - */ - getPopUpParams : function(container) { - var params = {}; - var sourceModule = app.getModuleName(); - var editTaskContainer = jQuery('[name="editTask"]'); - if(editTaskContainer.length > 0){ - sourceModule = editTaskContainer.find('#sourceModule').val(); - } - var quickCreateConatiner = jQuery('[name="QuickCreate"]'); - if(quickCreateConatiner.length!=0){ - sourceModule = quickCreateConatiner.find('input[name="module"]').val(); - } + /* + * Function to get reference select popup parameters + */ + getPopUpParams : function(container) { + var params = {}; + var sourceModule = app.getModuleName(); + var editTaskContainer = jQuery('[name="editTask"]'); + if(editTaskContainer.length > 0){ + sourceModule = editTaskContainer.find('#sourceModule').val(); + } + var quickCreateConatiner = jQuery('[name="QuickCreate"]'); + if(quickCreateConatiner.length!=0){ + sourceModule = quickCreateConatiner.find('input[name="module"]').val(); + } var searchResultContainer = jQuery('#searchResults-container'); if(searchResultContainer.length) { sourceModule = jQuery('select#searchModuleList').val(); } - var popupReferenceModuleElement = jQuery('input[name="popupReferenceModule"]',container).length ? - jQuery('input[name="popupReferenceModule"]',container) : jQuery('input.popupReferenceModule',container); - var popupReferenceModule = popupReferenceModuleElement.val(); - var sourceFieldElement = jQuery('input[class="sourceField"]',container); + var popupReferenceModuleElement = jQuery('input[name="popupReferenceModule"]',container).length ? + jQuery('input[name="popupReferenceModule"]',container) : jQuery('input.popupReferenceModule',container); + var popupReferenceModule = popupReferenceModuleElement.val(); + var sourceFieldElement = jQuery('input[class="sourceField"]',container); if(!sourceFieldElement.length) { sourceFieldElement = jQuery('input.sourceField',container); } - var sourceField = sourceFieldElement.attr('name'); - var sourceRecordElement = jQuery('input[name="record"]'); - var sourceRecordId = ''; + var sourceField = sourceFieldElement.attr('name'); + var sourceRecordElement = jQuery('input[name="record"]'); + var sourceRecordId = ''; var recordId = app.getRecordId(); - if(sourceRecordElement.length > 0) { - sourceRecordId = sourceRecordElement.val(); - } else if(recordId) { + if(sourceRecordElement.length > 0) { + sourceRecordId = sourceRecordElement.val(); + } else if(recordId) { sourceRecordId = recordId; } else if(app.view() == 'List') { var editRecordId = jQuery('#listview-table').find('tr.listViewEntries.edited').data('id'); @@ -1108,46 +1108,46 @@ Vtiger.Class('Vtiger_Index_Js', { sourceRecordId = editRecordId; } } - + if(searchResultContainer.length) { sourceRecordId = searchResultContainer.find('tr.listViewEntries.edited').data('id') } - var isMultiple = false; - if(sourceFieldElement.data('multiple') == true) { - isMultiple = true; - } - - // TODO : Need to recheck. We don't have reference field module name if that module is disabled - if(typeof popupReferenceModule == "undefined"){ - popupReferenceModule = "undefined"; - } - - var params = { - 'module' : popupReferenceModule, - 'src_module' : sourceModule, - 'src_field' : sourceField, - 'src_record' : sourceRecordId - } - - if(isMultiple) { - params.multi_select = true ; - } - return params; - }, - - /* - * Function to set reference field value - */ - setReferenceFieldValue : function(container, params) { - var sourceField = container.find('input.sourceField').attr('name'); - var fieldElement = container.find('input[name="'+sourceField+'"]'); - var sourceFieldDisplay = sourceField+"_display"; - var fieldDisplayElement = container.find('input[name="'+sourceFieldDisplay+'"]'); - var popupReferenceModuleElement = container.find('input[name="popupReferenceModule"]').length ? container.find('input[name="popupReferenceModule"]') : container.find('input.popupReferenceModule'); - var popupReferenceModule = popupReferenceModuleElement.val(); - var selectedName = params.name; - var id = params.id; + var isMultiple = false; + if(sourceFieldElement.data('multiple') == true) { + isMultiple = true; + } + + // TODO : Need to recheck. We don't have reference field module name if that module is disabled + if(typeof popupReferenceModule == "undefined"){ + popupReferenceModule = "undefined"; + } + + var params = { + 'module' : popupReferenceModule, + 'src_module' : sourceModule, + 'src_field' : sourceField, + 'src_record' : sourceRecordId + } + + if(isMultiple) { + params.multi_select = true ; + } + return params; + }, + + /* + * Function to set reference field value + */ + setReferenceFieldValue : function(container, params) { + var sourceField = container.find('input.sourceField').attr('name'); + var fieldElement = container.find('input[name="'+sourceField+'"]'); + var sourceFieldDisplay = sourceField+"_display"; + var fieldDisplayElement = container.find('input[name="'+sourceFieldDisplay+'"]'); + var popupReferenceModuleElement = container.find('input[name="popupReferenceModule"]').length ? container.find('input[name="popupReferenceModule"]') : container.find('input.popupReferenceModule'); + var popupReferenceModule = popupReferenceModuleElement.val(); + var selectedName = params.name; + var id = params.id; if (id && selectedName) { if(!fieldDisplayElement.length) { @@ -1172,64 +1172,64 @@ Vtiger.Class('Vtiger_Index_Js', { } fieldElement.trigger(Vtiger_Edit_Js.referenceSelectionEvent, {'source_module' : popupReferenceModule, 'record' : id, 'selectedName' : selectedName}); } - }, - - /* - * Function to get referenced module name - */ - getReferencedModuleName : function(parentElement) { - var referenceModuleElement = jQuery('input[name="popupReferenceModule"]',parentElement).length ? - jQuery('input[name="popupReferenceModule"]',parentElement) : jQuery('input.popupReferenceModule',parentElement); - return referenceModuleElement.val(); - }, - - /* - * Function to show quick create modal while creating from reference field - */ - referenceCreateHandler : function(container) { - var thisInstance = this; - var postQuickCreateSave = function(data) { + }, + + /* + * Function to get referenced module name + */ + getReferencedModuleName : function(parentElement) { + var referenceModuleElement = jQuery('input[name="popupReferenceModule"]',parentElement).length ? + jQuery('input[name="popupReferenceModule"]',parentElement) : jQuery('input.popupReferenceModule',parentElement); + return referenceModuleElement.val(); + }, + + /* + * Function to show quick create modal while creating from reference field + */ + referenceCreateHandler : function(container) { + var thisInstance = this; + var postQuickCreateSave = function(data) { var module = thisInstance.getReferencedModuleName(container); var params = {}; - params.name = data._recordLabel; - params.id = data._recordId; + params.name = data._recordLabel; + params.id = data._recordId; params.module = module; - thisInstance.setReferenceFieldValue(container, params); - - var tdElement = thisInstance.getParentElement(container.find('[value="'+ module +'"]')); - var sourceField = tdElement.find('input[class="sourceField"]').attr('name'); - var fieldElement = tdElement.find('input[name="'+sourceField+'"]'); + thisInstance.setReferenceFieldValue(container, params); + + var tdElement = thisInstance.getParentElement(container.find('[value="'+ module +'"]')); + var sourceField = tdElement.find('input[class="sourceField"]').attr('name'); + var fieldElement = tdElement.find('input[name="'+sourceField+'"]'); thisInstance.autoFillElement = fieldElement; thisInstance.postRefrenceSearch(params, container); - - tdElement.find('input[class="sourceField"]').trigger(Vtiger_Edit_Js.postReferenceQuickCreateSave, {'data' : data}); - } - - var referenceModuleName = this.getReferencedModuleName(container); - var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]'); - if(quickCreateNode.length <= 0) { - var notificationOptions = { - 'title' : app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED') - } - app.helper.showAlertNotification(notificationOptions); - } - quickCreateNode.trigger('click',[{'callbackFunction':postQuickCreateSave}]); - }, - - /** - * Function to get reference search params - */ - getReferenceSearchParams : function(element){ - var tdElement = this.getParentElement(element); - var params = {}; - var referenceModuleElement = jQuery('input[name="popupReferenceModule"]',tdElement).length ? - jQuery('input[name="popupReferenceModule"]',tdElement) : jQuery('input.popupReferenceModule',tdElement); - var searchModule = referenceModuleElement.val(); - params.search_module = searchModule; - return params; - }, - - searchModuleNames : function(params) { + + tdElement.find('input[class="sourceField"]').trigger(Vtiger_Edit_Js.postReferenceQuickCreateSave, {'data' : data}); + } + + var referenceModuleName = this.getReferencedModuleName(container); + var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]'); + if(quickCreateNode.length <= 0) { + var notificationOptions = { + 'title' : app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED') + } + app.helper.showAlertNotification(notificationOptions); + } + quickCreateNode.trigger('click',[{'callbackFunction':postQuickCreateSave}]); + }, + + /** + * Function to get reference search params + */ + getReferenceSearchParams : function(element){ + var tdElement = this.getParentElement(element); + var params = {}; + var referenceModuleElement = jQuery('input[name="popupReferenceModule"]',tdElement).length ? + jQuery('input[name="popupReferenceModule"]',tdElement) : jQuery('input.popupReferenceModule',tdElement); + var searchModule = referenceModuleElement.val(); + params.search_module = searchModule; + return params; + }, + + searchModuleNames : function(params) { var aDeferred = jQuery.Deferred(); if(typeof params.module == 'undefined') { @@ -1239,7 +1239,7 @@ Vtiger.Class('Vtiger_Index_Js', { if(typeof params.action == 'undefined') { params.action = 'BasicAjax'; } - + if(typeof params.base_record == 'undefined') { var record = jQuery('[name="record"]'); var recordId = app.getRecordId(); @@ -1262,340 +1262,340 @@ Vtiger.Class('Vtiger_Index_Js', { //TODO : Handle error aDeferred.reject(); } - ); + ); return aDeferred.promise(); }, - - /* - * Function to get Field parent element - */ - getParentElement : function(element) { - var parent = element.closest('td'); - // added to support from all views which may not be table format - if(parent.length === 0) { - parent = element.closest('.td').length ? - element.closest('.td') : element.closest('.fieldValue'); - } - return parent; - }, - - getUserNameForId : function(id) { - for(var key in userList) { - if(userList[key] === id) { - return key; - } - } - return null; - }, - - modulesMenuScrollbar : function(){ + + /* + * Function to get Field parent element + */ + getParentElement : function(element) { + var parent = element.closest('td'); + // added to support from all views which may not be table format + if(parent.length === 0) { + parent = element.closest('.td').length ? + element.closest('.td') : element.closest('.fieldValue'); + } + return parent; + }, + + getUserNameForId : function(id) { + for(var key in userList) { + if(userList[key] === id) { + return key; + } + } + return null; + }, + + modulesMenuScrollbar : function(){ app.helper.showVerticalScroll(jQuery("#modnavigator #modules-menu"),{autoHideScrollbar:true}); - }, - - mentionerCallBack: function() { - jQuery(document).on('textComplete:select', '.mention_listener', function(e, word, strategy) { - //First charecter is " " if user mentioned in the begining - //Removing it here - var value = $(e.currentTarget).val(); - value = app.getDecodedValue(value); - if(value.charAt(0) === ' ') value = value.substr(1); - $(e.currentTarget).val(value); - Vtiger_Index_Js.hideNC = false; - }); - }, - - registerChangeTemplateEvent: function (container, recordId) { - var sourceModule = container.find('#sourceModuleName').val(); - var thisInstance = this; - var select = container.find('#fieldList'); - select.on("change", function () { - var templateId = select.val(); - thisInstance.showQuickPreviewForId(recordId, sourceModule, app.getAppName(), templateId); - }); - }, - - registerMoreRecentUpdatesClickEvent: function (container, recordId) { - var moduleName = container.find('#sourceModuleName').val(); - container.find('.moreRecentUpdates').on('click', function () { - var recentUpdateURL = "index.php?view=Detail&mode=showRecentActivities&page=1&module=" + moduleName + "&record=" + recordId + "&tab_label=LBL_UPDATES"; - window.location.href = recentUpdateURL; - }); - }, - - registerNavigationEvents: function (container) { - this.registerNextRecordClickEvent(container); - this.registerPreviousRecordClickEvent(container); - }, - - registerNextRecordClickEvent: function(container){ - var self = this; - container.find('#quickPreviewNextRecordButton').on('click',function(e){ - var element = jQuery(e.currentTarget); - var nextRecordId = element.data('record') || element.data('id'); - var moduleName = container.find('#sourceModuleName').val(); - var appName = element.data('app'); - var templateId, fieldList = container.find('#fieldList'); - if(fieldList.length) { - templateId = fieldList.val(); - } - self.showQuickPreviewForId(nextRecordId, moduleName, appName, templateId, false, 'navigation'); - }); - }, - - registerPreviousRecordClickEvent: function(container){ - var self = this; - container.find('#quickPreviewPreviousRecordButton').on('click', function (e) { - var element = jQuery(e.currentTarget); - var prevRecordId = element.data('record') || element.data('id'); - var moduleName = container.find('#sourceModuleName').val(); - var appName = element.data('app'); - var templateId, fieldList = container.find('#fieldList'); - if(fieldList.length) { - templateId = fieldList.val(); - } - self.showQuickPreviewForId(prevRecordId, moduleName, appName, templateId, false, 'navigation'); - }); - }, - - _showInventoryQuickPreviewForId: function (recordId, moduleName, templateId, isReference, mode) { - var thisInstance = this; - var params = {}; - if(typeof moduleName === 'undefined') { - moduleName = app.module(); - } - params['module'] = moduleName; - params['record'] = recordId; - params['view'] = 'RecordQuickPreview'; - if(isReference == true){ - params['navigation'] = 'false'; - } - else{ - params['navigation'] = 'true'; - } - - if (templateId) { - params['templateid'] = templateId; - } - + }, + + mentionerCallBack: function() { + jQuery(document).on('textComplete:select', '.mention_listener', function(e, word, strategy) { + //First charecter is " " if user mentioned in the begining + //Removing it here + var value = $(e.currentTarget).val(); + value = app.getDecodedValue(value); + if(value.charAt(0) === ' ') value = value.substr(1); + $(e.currentTarget).val(value); + Vtiger_Index_Js.hideNC = false; + }); + }, + + registerChangeTemplateEvent: function (container, recordId) { + var sourceModule = container.find('#sourceModuleName').val(); + var thisInstance = this; + var select = container.find('#fieldList'); + select.on("change", function () { + var templateId = select.val(); + thisInstance.showQuickPreviewForId(recordId, sourceModule, app.getAppName(), templateId); + }); + }, + + registerMoreRecentUpdatesClickEvent: function (container, recordId) { + var moduleName = container.find('#sourceModuleName').val(); + container.find('.moreRecentUpdates').on('click', function () { + var recentUpdateURL = "index.php?view=Detail&mode=showRecentActivities&page=1&module=" + moduleName + "&record=" + recordId + "&tab_label=LBL_UPDATES"; + window.location.href = recentUpdateURL; + }); + }, + + registerNavigationEvents: function (container) { + this.registerNextRecordClickEvent(container); + this.registerPreviousRecordClickEvent(container); + }, + + registerNextRecordClickEvent: function(container){ + var self = this; + container.find('#quickPreviewNextRecordButton').on('click',function(e){ + var element = jQuery(e.currentTarget); + var nextRecordId = element.data('record') || element.data('id'); + var moduleName = container.find('#sourceModuleName').val(); + var appName = element.data('app'); + var templateId, fieldList = container.find('#fieldList'); + if(fieldList.length) { + templateId = fieldList.val(); + } + self.showQuickPreviewForId(nextRecordId, moduleName, appName, templateId, false, 'navigation'); + }); + }, + + registerPreviousRecordClickEvent: function(container){ + var self = this; + container.find('#quickPreviewPreviousRecordButton').on('click', function (e) { + var element = jQuery(e.currentTarget); + var prevRecordId = element.data('record') || element.data('id'); + var moduleName = container.find('#sourceModuleName').val(); + var appName = element.data('app'); + var templateId, fieldList = container.find('#fieldList'); + if(fieldList.length) { + templateId = fieldList.val(); + } + self.showQuickPreviewForId(prevRecordId, moduleName, appName, templateId, false, 'navigation'); + }); + }, + + _showInventoryQuickPreviewForId: function (recordId, moduleName, templateId, isReference, mode) { + var thisInstance = this; + var params = {}; + if(typeof moduleName === 'undefined') { + moduleName = app.module(); + } + params['module'] = moduleName; + params['record'] = recordId; + params['view'] = 'RecordQuickPreview'; + if(isReference == true){ + params['navigation'] = 'false'; + } + else{ + params['navigation'] = 'true'; + } + + if (templateId) { + params['templateid'] = templateId; + } + if(mode) { params['preview_mode'] = mode; } - app.helper.showProgress(); - app.request.get({data: params}).then(function (err, response) { - app.helper.hideProgress(); - if (templateId && mode != 'navigation') { - jQuery('#pdfViewer').html(response); - return; - } - var params = { - cb: function () { - thisInstance.registerChangeTemplateEvent(jQuery('#helpPageOverlay'), recordId); - thisInstance.registerNavigationEvents(jQuery('#helpPageOverlay')); - ListTemplates_Js = new PrintTemplates_ListTemplates_Js(); - ListTemplates_Js.registerEvents(); - } - }; - jQuery('#helpPageOverlay').css({"width": "870px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'}); - app.helper.loadHelpPageOverlay(response, params); - }); - }, - - _showQuickPreviewForId: function (recordId, moduleName, appName, isReference) { - var self = this; - var params = {}; - if (typeof moduleName === 'undefined') { - moduleName = app.module(); - } - params['module'] = moduleName; - params['record'] = recordId; - params['view'] = 'RecordQuickPreview'; - if(isReference === true){ - params['navigation'] = 'false'; - } - else{ - params['navigation'] = 'true'; - } - params['app'] = appName; - - app.helper.showProgress(); - app.request.get({data: params}).then(function (err, response) { - app.helper.hideProgress(); - jQuery('#helpPageOverlay').css({"width": "550px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'}); - var callBack = function(container){ - self.registerMoreRecentUpdatesClickEvent(container,recordId); - //Register Navigation Events - self.registerNavigationEvents(container); - }; - app.helper.loadHelpPageOverlay(response, { - 'cb' : callBack - }); - var params = { - setHeight: "100%", - alwaysShowScrollbar: 2, - autoExpandScrollbar: true, - setTop: 0, - scrollInertia: 70, - mouseWheel: {preventDefault: true} - }; - app.helper.showVerticalScroll(jQuery('.quickPreview .modal-body'), params); - }); - }, - - isInventoryModule : function(moduleName) { - var inventoryModules = jQuery('#inventoryModules').val(); - return inventoryModules.indexOf(moduleName) !== -1; - }, - - showQuickPreviewForId: function(recordId, moduleName, appName, templateId, isReference, mode) { - var self = this; - if(self.isInventoryModule(moduleName) && moduleName != 'Subscription') { - self._showInventoryQuickPreviewForId(recordId, moduleName, templateId, isReference, mode); - } else { - self._showQuickPreviewForId(recordId, moduleName, appName, isReference); - } - }, - - registerReferencePreviewEvent : function() { - var self = this; - var view = app.view(); - jQuery('body').on('click', '.js-reference-display-value', function(e) { - e.preventDefault(); - e.stopPropagation(); - var currentTarget = jQuery(this); - if(currentTarget.closest('#popupPageContainer').length) { - return; //no action in reference selection popup - } - var href = currentTarget.attr('href'); - if(view === 'List') { - if(currentTarget.data('timer')) { - //if list view single click has set a time, clear it - clearTimeout(currentTarget.data('timer')); - currentTarget.data('timer', null); - } - //perform show preview only after 500ms in list view to support double click edit action - if (!currentTarget.data('preview-timer') && typeof href != 'undefined') { - currentTarget.data('preview-timer', setTimeout(function () { - var data = app.convertUrlToDataParams(href); - self.showQuickPreviewForId(data.record, data.module, app.getAppName(),'',true); - currentTarget.data('preview-timer',null); - }, 500)); - } - } else { - var data = app.convertUrlToDataParams(href); - self.showQuickPreviewForId(data.record, data.module, app.getAppName(),'',true); - } - }); - - if(view === 'List') { - /* - * when reference display value is double clicked in list view, - * should initiate inline edit instead of showing preview - */ - jQuery('body').on('dblclick', '.js-reference-display-value', function(e) { - e.preventDefault(); - var currentTarget = jQuery(this); - if (currentTarget.data('preview-timer')) { - clearTimeout(currentTarget.data('preview-timer')); - currentTarget.data('preview-timer', null); - }; - }); - } - }, - + app.helper.showProgress(); + app.request.get({data: params}).then(function (err, response) { + app.helper.hideProgress(); + if (templateId && mode != 'navigation') { + jQuery('#pdfViewer').html(response); + return; + } + var params = { + cb: function () { + thisInstance.registerChangeTemplateEvent(jQuery('#helpPageOverlay'), recordId); + thisInstance.registerNavigationEvents(jQuery('#helpPageOverlay')); + ListTemplates_Js = new PrintTemplates_ListTemplates_Js(); + ListTemplates_Js.registerEvents(); + } + }; + jQuery('#helpPageOverlay').css({"width": "870px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'}); + app.helper.loadHelpPageOverlay(response, params); + }); + }, + + _showQuickPreviewForId: function (recordId, moduleName, appName, isReference) { + var self = this; + var params = {}; + if (typeof moduleName === 'undefined') { + moduleName = app.module(); + } + params['module'] = moduleName; + params['record'] = recordId; + params['view'] = 'RecordQuickPreview'; + if(isReference === true){ + params['navigation'] = 'false'; + } + else{ + params['navigation'] = 'true'; + } + params['app'] = appName; + + app.helper.showProgress(); + app.request.get({data: params}).then(function (err, response) { + app.helper.hideProgress(); + jQuery('#helpPageOverlay').css({"width": "550px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'}); + var callBack = function(container){ + self.registerMoreRecentUpdatesClickEvent(container,recordId); + //Register Navigation Events + self.registerNavigationEvents(container); + }; + app.helper.loadHelpPageOverlay(response, { + 'cb' : callBack + }); + var params = { + setHeight: "100%", + alwaysShowScrollbar: 2, + autoExpandScrollbar: true, + setTop: 0, + scrollInertia: 70, + mouseWheel: {preventDefault: true} + }; + app.helper.showVerticalScroll(jQuery('.quickPreview .modal-body'), params); + }); + }, + + isInventoryModule : function(moduleName) { + var inventoryModules = jQuery('#inventoryModules').val(); + return inventoryModules.indexOf(moduleName) !== -1; + }, + + showQuickPreviewForId: function(recordId, moduleName, appName, templateId, isReference, mode) { + var self = this; + if(self.isInventoryModule(moduleName) && moduleName != 'Subscription') { + self._showInventoryQuickPreviewForId(recordId, moduleName, templateId, isReference, mode); + } else { + self._showQuickPreviewForId(recordId, moduleName, appName, isReference); + } + }, + + registerReferencePreviewEvent : function() { + var self = this; + var view = app.view(); + jQuery('body').on('click', '.js-reference-display-value', function(e) { + e.preventDefault(); + e.stopPropagation(); + var currentTarget = jQuery(this); + if(currentTarget.closest('#popupPageContainer').length) { + return; //no action in reference selection popup + } + var href = currentTarget.attr('href'); + if(view === 'List') { + if(currentTarget.data('timer')) { + //if list view single click has set a time, clear it + clearTimeout(currentTarget.data('timer')); + currentTarget.data('timer', null); + } + //perform show preview only after 500ms in list view to support double click edit action + if (!currentTarget.data('preview-timer') && typeof href != 'undefined') { + currentTarget.data('preview-timer', setTimeout(function () { + var data = app.convertUrlToDataParams(href); + self.showQuickPreviewForId(data.record, data.module, app.getAppName(),'',true); + currentTarget.data('preview-timer',null); + }, 500)); + } + } else { + var data = app.convertUrlToDataParams(href); + self.showQuickPreviewForId(data.record, data.module, app.getAppName(),'',true); + } + }); + + if(view === 'List') { + /* + * when reference display value is double clicked in list view, + * should initiate inline edit instead of showing preview + */ + jQuery('body').on('dblclick', '.js-reference-display-value', function(e) { + e.preventDefault(); + var currentTarget = jQuery(this); + if (currentTarget.data('preview-timer')) { + clearTimeout(currentTarget.data('preview-timer')); + currentTarget.data('preview-timer', null); + }; + }); + } + }, + registerPostReferenceEvent : function(container) { - var thisInstance = this; - - container.find('.sourceField').on(Vtiger_Edit_Js.postReferenceSelectionEvent,function(e,result){ - var dataList = result.data; - var element = jQuery(e.currentTarget); - - if(typeof element.data('autofill') != 'undefined') { - thisInstance.autoFillElement = element; - if(typeof(dataList.id) == 'undefined'){ - thisInstance.postRefrenceComplete(dataList, container); - }else { - thisInstance.postRefrenceSearch(dataList, container); - } - } - }); - }, - + var thisInstance = this; + + container.find('.sourceField').on(Vtiger_Edit_Js.postReferenceSelectionEvent,function(e,result){ + var dataList = result.data; + var element = jQuery(e.currentTarget); + + if(typeof element.data('autofill') != 'undefined') { + thisInstance.autoFillElement = element; + if(typeof(dataList.id) == 'undefined'){ + thisInstance.postRefrenceComplete(dataList, container); + }else { + thisInstance.postRefrenceSearch(dataList, container); + } + } + }); + }, + postRefrenceComplete : function(data, container){ - var thisInstance = this; - if(!data) - return ; - - jQuery.each(data, function(id, value){ - thisInstance.fillReferenceFieldValue(value, container); - }); - }, - + var thisInstance = this; + if(!data) + return ; + + jQuery.each(data, function(id, value){ + thisInstance.fillReferenceFieldValue(value, container); + }); + }, + getRelatedFieldElements: function(container, autoFillData){ - var parentElems = {}; + var parentElems = {}; if (autoFillData) { var field = container.find('#'+autoFillData.fieldname+'_display').closest('td'); parentElems['parent_id'] = field; } - return parentElems; - }, - - fillReferenceFieldValue : function(data, container){ - var thisInstance = this; + return parentElems; + }, + + fillReferenceFieldValue : function(data, container){ + var thisInstance = this; var autoFillElement = this.autoFillElement; var autoFillData = autoFillElement.data('autofill'); var completedValues = []; for(var index in autoFillData){ - var value = autoFillData[index]; - var referenceContainer = thisInstance.getRelatedFieldElements(container, value); - jQuery.each(data, function(datakey, datavalue){ - for(var name in datavalue){ - if(typeof datavalue[name] == 'object'){ - var key = name; - var dataList = { - 'name': datavalue[key].name, - 'id' : datavalue[key].id - } - - if(value.module == datavalue[key].module){ - var autoFillElement = thisInstance.autoFillElement; - var autoFillData = value; - var popupReferenceModuleElement = autoFillElement.parent().parent().find('[name=popupReferenceModule]').length ? - autoFillElement.parent().parent().find('[name=popupReferenceModule]') : autoFillElement.parent().parent().find('.popupReferenceModule'); - var module = popupReferenceModuleElement.val(); - var elementName = autoFillElement.attr('name'); - var selectedName = container.find('#'+elementName+'_display').val(); - var message = app.vtranslate('JS_OVERWRITE_AUTOFILL_MSG1')+' '+app.vtranslate('SINGLE_'+autoFillData.module)+" "+app.vtranslate('JS_OVERWRITE_AUTOFILL_MSG2')+" "+app.vtranslate('SINGLE_'+module)+' ('+selectedName+') '+app.vtranslate('SINGLE_'+autoFillData.module)+" ?"; - var parentId = container.find('[name='+autoFillData.fieldname+']').val(); - - if(parentId != dataList.id && parentId) { - if(jQuery.inArray(datavalue[key].module, completedValues) === -1) { - completedValues.push(datavalue[key].module); - thisInstance.confirmAndFillDetails(referenceContainer[key], dataList, message); - } - } else { - thisInstance.setReferenceFieldValue(referenceContainer[key], dataList); - } - } - } - } - }); + var value = autoFillData[index]; + var referenceContainer = thisInstance.getRelatedFieldElements(container, value); + jQuery.each(data, function(datakey, datavalue){ + for(var name in datavalue){ + if(typeof datavalue[name] == 'object'){ + var key = name; + var dataList = { + 'name': datavalue[key].name, + 'id' : datavalue[key].id + } + + if(value.module == datavalue[key].module){ + var autoFillElement = thisInstance.autoFillElement; + var autoFillData = value; + var popupReferenceModuleElement = autoFillElement.parent().parent().find('[name=popupReferenceModule]').length ? + autoFillElement.parent().parent().find('[name=popupReferenceModule]') : autoFillElement.parent().parent().find('.popupReferenceModule'); + var module = popupReferenceModuleElement.val(); + var elementName = autoFillElement.attr('name'); + var selectedName = container.find('#'+elementName+'_display').val(); + var message = app.vtranslate('JS_OVERWRITE_AUTOFILL_MSG1')+' '+app.vtranslate('SINGLE_'+autoFillData.module)+" "+app.vtranslate('JS_OVERWRITE_AUTOFILL_MSG2')+" "+app.vtranslate('SINGLE_'+module)+' ('+selectedName+') '+app.vtranslate('SINGLE_'+autoFillData.module)+" ?"; + var parentId = container.find('[name='+autoFillData.fieldname+']').val(); + + if(parentId != dataList.id && parentId) { + if(jQuery.inArray(datavalue[key].module, completedValues) === -1) { + completedValues.push(datavalue[key].module); + thisInstance.confirmAndFillDetails(referenceContainer[key], dataList, message); + } + } else { + thisInstance.setReferenceFieldValue(referenceContainer[key], dataList); + } + } + } + } + }); } - }, - - confirmAndFillDetails : function(container, data, message) { - var thisInstance = this; - app.helper.showConfirmationBox({'message' : message}).then( - function(e) { - thisInstance.setReferenceFieldValue(container, data); - }, - function(error, err){ - } - ); - }, - + }, + + confirmAndFillDetails : function(container, data, message) { + var thisInstance = this; + app.helper.showConfirmationBox({'message' : message}).then( + function(e) { + thisInstance.setReferenceFieldValue(container, data); + }, + function(error, err){ + } + ); + }, + postRefrenceSearch: function(resultData, container){ - var thisInstance = this; + var thisInstance = this; var module; if(!resultData.module) { var autoFillElement = this.autoFillElement; @@ -1605,20 +1605,20 @@ Vtiger.Class('Vtiger_Index_Js', { }else { module = resultData.module; } - if(!resultData.id) - return; - - var params = { - module: module, - action: 'RelationAjax', - mode: 'getRelatedRecordInfo', - id: resultData.id - }; - - app.request.post({'data' : params}).then(function(err, data){ - if(err == null){ - thisInstance.postRefrenceComplete(data, container); - } - }); - } + if(!resultData.id) + return; + + var params = { + module: module, + action: 'RelationAjax', + mode: 'getRelatedRecordInfo', + id: resultData.id + }; + + app.request.post({'data' : params}).then(function(err, data){ + if(err == null){ + thisInstance.postRefrenceComplete(data, container); + } + }); + } }); diff --git a/modules/Emails/models/Record.php b/modules/Emails/models/Record.php index f3ec099bced028f0e92e4f8d0e2ffbd61b8c4a5c..a4da3a8d4c9026d1a760193c580b9bc7147637d4 100644 --- a/modules/Emails/models/Record.php +++ b/modules/Emails/models/Record.php @@ -47,7 +47,7 @@ class Emails_Record_Model extends Vtiger_Record_Model { */ public function send($addToQueue = false) { $currentUserModel = Users_Record_Model::getCurrentUserModel(); - $rootDirectory = vglobal('root_directory'); + $rootDirectory = vglobal('root_directory'); $mailer = Emails_Mailer_Model::getInstance(); $mailer->IsHTML(true); @@ -119,7 +119,7 @@ class Emails_Record_Model extends Vtiger_Record_Model { } if(!empty($generatedMessageId)){ - $mailer->MessageID = $generatedMessageId; + $mailer->MessageID = $generatedMessageId; } if (strpos($description, '$logo$')) { @@ -186,7 +186,7 @@ class Emails_Record_Model extends Vtiger_Record_Model { } if(!$status) { $status = $mailer->getError(); - //If mailer error, then update emailflag as saved + //If mailer error, then update emailflag as saved if($status){ $this->updateEmailFlag(); } @@ -340,7 +340,7 @@ class Emails_Record_Model extends Vtiger_Record_Model { */ public function deleteDocumentLink($idList = array()){ $db = PearDatabase::getInstance(); - $query = 'DELETE FROM vtiger_senotesrel where crmid=?'; + $query = 'DELETE FROM vtiger_senotesrel where crmid=?'; $params = array($this->getId()); if(count($idList) > 0) { $query .= 'AND notesid IN ('.generateQuestionMarks($idList).')'; @@ -491,8 +491,8 @@ class Emails_Record_Model extends Vtiger_Record_Model { } $db = PearDatabase::getInstance(); - $sql = 'SELECT mailid, access_count,click_count FROM vtiger_email_track WHERE crmid = ? AND mailid IN('. generateQuestionMarks($emailIds).')'; - $result = $db->pquery($sql, array($parentId, $emailIds)); + $sql = 'SELECT mailid, access_count,click_count FROM vtiger_email_track WHERE crmid = ? AND mailid IN('.generateQuestionMarks($emailIds).')'; + $result = $db->pquery($sql, array($parentId, $emailIds)); $numRows = $db->num_rows($result); if($numRows > 0) { for($i=0;$i<$numRows;$i++){ @@ -538,7 +538,7 @@ class Emails_Record_Model extends Vtiger_Record_Model { } /** - * Function stores emailid,parentmodule and generates shorturl + * Function stores emailid,parentmodule and generates shorturl * @param type $parentModule * @return type */ @@ -640,8 +640,8 @@ class Emails_Record_Model extends Vtiger_Record_Model { $trackingUrl = $this->getTrackUrlForClicks($crmid, $sourceUrl); $content = $this->replaceLinkWithShortUrl($content, $trackingUrl, $sourceUrl, $type); } - return $content; } + return $content; } public function replaceLinkWithShortUrl($content, $toReplace, $search, $type) { diff --git a/modules/Emails/views/MassSaveAjax.php b/modules/Emails/views/MassSaveAjax.php index e5b43157164e7f2b0467b1cbf7b284154e38df96..b90a5ebc4660ab0281241f01578752c1465f96e0 100644 --- a/modules/Emails/views/MassSaveAjax.php +++ b/modules/Emails/views/MassSaveAjax.php @@ -59,7 +59,6 @@ class Emails_MassSaveAjax_View extends Vtiger_Footer_View { $recordModel->set('mode', ''); } - $parentEmailId = $request->get('parent_id',null); $attachmentsWithParentEmail = array(); if(!empty($parentEmailId) && !empty ($recordId)) { @@ -117,7 +116,6 @@ class Emails_MassSaveAjax_View extends Vtiger_Footer_View { } - // This will be used for sending mails to each individual $toMailInfo = $request->get('toemailinfo'); diff --git a/modules/Migration/schema/660_to_700.php b/modules/Migration/schema/660_to_700.php index 54b4be280d66b0466a7182cbec5882a308dd9bf0..2c244d16edbfb4671c05cc910f5115cf54eff970 100644 --- a/modules/Migration/schema/660_to_700.php +++ b/modules/Migration/schema/660_to_700.php @@ -213,7 +213,7 @@ if(defined('VTIGER_UPGRADE')) { $result = $db->pquery($query, array()); $num_rows = $db->num_rows($result); $relationShipMapping = array(); - for ($i = 0; $i < $num_rows; $i++) { + for ($i=0; $i<$num_rows; $i++) { $tabId = $db->query_result($result, $i, 'tabid'); $relatedTabid = $db->query_result($result, $i, 'related_tabid'); $relationId = $db->query_result($result, $i, 'relation_id'); @@ -345,7 +345,7 @@ if(defined('VTIGER_UPGRADE')) { WHERE vtiger_crmentity.setype NOT IN ('.generateQuestionMarks($internalCommentModules).') OR vtiger_crmentity.setype IS NULL', $internalCommentModules, array()); $commentCount = $db->num_rows($commentsResult); - for ($i = 0; $i < $commentCount; $i++) { + for ($i=0; $i<$commentCount; $i++) { $commentIds[] = $db->query_result($commentsResult, $i, 'modcommentsid'); } if (count($commentIds) > 0) { @@ -388,7 +388,7 @@ if(defined('VTIGER_UPGRADE')) { $result = $db->pquery($query, array($tabid, $modcommentTabid)); $count = $db->num_rows($result); - for ($i = 0; $i < $count; $i++) { + for ($i=0; $i<$count; $i++) { $relationId = $db->query_result($result, $i, 'relation_id'); $sequence = $db->query_result($result, $i, 'sequence'); $sequence += 1; @@ -888,7 +888,7 @@ if(defined('VTIGER_UPGRADE')) { //Adding Create Event and Create Todo workflow tasks for Project module. $taskResult = $db->pquery('SELECT id, modules FROM com_vtiger_workflow_tasktypes WHERE tasktypename IN (?, ?)', array('VTCreateTodoTask', 'VTCreateEventTask')); $taskResultCount = $db->num_rows($taskResult); - for ($i = 0; $i < $taskResultCount; $i++) { + for ($i=0; $i<$taskResultCount; $i++) { $taskId = $db->query_result($taskResult, $i, 'id'); $modules = Zend_Json::decode(decode_html($db->query_result($taskResult, $i, 'modules'))); $modules['include'][] = 'Project'; @@ -1146,7 +1146,7 @@ if(defined('VTIGER_UPGRADE')) { $tagOwners = array(); $tagNamesList = array(); $visibility = Vtiger_Tag_Model::PRIVATE_TYPE; - for ($i = 0; $i < $num_rows; $i++) { + for ($i=0; $i<$num_rows; $i++) { $row = $db->query_result_rowdata($result, $i); $tagId = $row['tag_id']; $tagOwners[$tagId][] = $row['tagger_id']; @@ -1176,7 +1176,7 @@ if(defined('VTIGER_UPGRADE')) { $fieldRows = $db->num_rows($fieldResult); $ignorePickListFields = array('hdnTaxType', 'email_flag'); - for ($i = 0; $i < $fieldRows; $i++) { + for ($i=0; $i<$fieldRows; $i++) { $fieldName = $db->query_result($fieldResult, $i, 'fieldname'); if (in_array($fieldName, $ignorePickListFields) || !Vtiger_Utils::CheckTable("vtiger_$fieldName")) continue; @@ -1192,7 +1192,7 @@ if(defined('VTIGER_UPGRADE')) { $fieldResult = $db->pquery('SELECT fieldname FROM vtiger_field WHERE uitype IN (?,?,?,?) AND tabid IN (?)', array('15', '16', '33', '114', getTabid('Users'))); $fieldRows = $db->num_rows($fieldResult); - for ($i = 0; $i < $fieldRows; $i++) { + for ($i=0; $i<$fieldRows; $i++) { $fieldName = $db->query_result($fieldResult, $i, 'fieldname'); if (!Vtiger_Utils::CheckTable("vtiger_$fieldName")) continue; @@ -1241,7 +1241,8 @@ if(defined('VTIGER_UPGRADE')) { //End $result = $db->pquery('SELECT * FROM vtiger_module_dashboard_widgets', array()); - for ($i = 0; $i < $db->num_rows($result); $i++) { + $num_rows = $db->num_rows($result); + for ($i=0; $i<$num_rows; $i++) { $rowdata = $db->query_result_rowdata($result, $i); if ($rowdata['dashboardtabid'] == null) { $result1 = $db->pquery('SELECT id FROM vtiger_dashboard_tabs WHERE userid=? AND tabname=?', array($rowdata['userid'], 'My Dashboard')); @@ -1269,7 +1270,7 @@ if(defined('VTIGER_UPGRADE')) { $fieldResult = $db->pquery('SELECT fieldname FROM vtiger_field WHERE fieldname=? AND tabid NOT IN (?)', array('salutationtype', getTabid('Users'))); $fieldRows = $db->num_rows($fieldResult); - for ($i = 0; $i < $fieldRows; $i++) { + for ($i=0; $i<$fieldRows; $i++) { $fieldName = $db->query_result($fieldResult, $i, 'fieldname'); if (!Vtiger_Utils::CheckTable("vtiger_$fieldName")) { continue; @@ -1298,8 +1299,8 @@ if(defined('VTIGER_UPGRADE')) { INNER JOIN vtiger_role2picklist ON vtiger_role2picklist.picklistid = vtiger_picklist.picklistid)', array()); $rows = $db->num_rows($deletedPicklistResult); $deletablePicklists = array(); - for ($z = 0; $z < $rows; $z++) { - $deletablePicklists[] = $db->query_result($deletedPicklistResult, $z, 'picklistid'); + for ($i=0; $i<$rows; $i++) { + $deletablePicklists[] = $db->query_result($deletedPicklistResult, $i, 'picklistid'); } if (count($deletablePicklists)) { $db->pquery('DELETE FROM vtiger_role2picklist WHERE picklistid IN ('.generateQuestionMarks($deletablePicklists).')', array($deletablePicklists)); @@ -1703,6 +1704,27 @@ if(defined('VTIGER_UPGRADE')) { $db->pquery('UPDATE vtiger_emailtemplates SET module=? WHERE templatename IN (?,?,?) AND module IS NULL', array('Events', 'ToDo Reminder', 'Activity Reminder', 'Invite Users')); $db->pquery('UPDATE vtiger_emailtemplates SET module=? WHERE module IS NULL', array('Contacts')); + $columns = $db->getColumnNames('vtiger_mailmanager_mailrecord'); + if (!in_array('mfolder', $columns)) { + $db->pquery('ALTER TABLE vtiger_mailmanager_mailrecord ADD COLUMN mfolder VARCHAR(250)', array()); + $duplicateResult = $db->pquery('SELECT muid FROM vtiger_mailmanager_mailrecord GROUP BY muid HAVING COUNT(muid) > ?', array('1')); + $noOfDuplicate = $db->num_rows($duplicateResult); + if ($noOfDuplicate) { + $duplicateMuid = array(); + for ($i=0; $i<$noOfDuplicate; $i++) { + $duplicateMuid[] = $db->query_result($duplicateResult, $i, 'muid'); + } + $db->pquery('DELETE FROM vtiger_mailmanager_mailrecord WHERE muid IN ('.generateQuestionMarks($duplicateMuid).')', $duplicateMuid); + $db->pquery('DELETE FROM vtiger_mailmanager_mailattachments WHERE muid IN ('.generateQuestionMarks($duplicateMuid).')', $duplicateMuid); + } + } + + if (Vtiger_Utils::CheckTable('vtiger_mailscanner_ids')) { + $db->pquery('RENAME TABLE vtiger_mailscanner_ids TO vtiger_message_ids', array()); + $db->pquery('ALTER TABLE vtiger_message_ids ADD COLUMN refids MEDIUMTEXT', array()); + $db->pquery('ALTER TABLE vtiger_message_ids ADD INDEX messageids_crmid_idx(crmid)',array()); + } + //Update existing package modules Install_Utils_Model::installModules(); diff --git a/modules/Vtiger/actions/RelatedRecordsAjax.php b/modules/Vtiger/actions/RelatedRecordsAjax.php index da0882a384e0c9ff3198d47372332437fd2897b6..ae927a9eaa28f99a90fb0510788991524ae1447b 100644 --- a/modules/Vtiger/actions/RelatedRecordsAjax.php +++ b/modules/Vtiger/actions/RelatedRecordsAjax.php @@ -38,6 +38,7 @@ class Vtiger_RelatedRecordsAjax_Action extends Vtiger_Action_Controller { $relationModels = $parentModuleModel->getRelations(); $relatedRecordsCount = array(); foreach ($relationModels as $relation) { + $relationId = $relation->getId(); $relatedModuleName = $relation->get('relatedModuleName'); $relationListView = Vtiger_RelationListView_Model::getInstance($parentRecordModel, $relatedModuleName, $relation->get('label')); $count = $relationListView->getRelatedEntriesCount(); diff --git a/packages/vtiger/mandatory/MailManager.zip b/packages/vtiger/mandatory/MailManager.zip index 32801ef733b58185aaa3d1055b0adcd349a00893..e42cd9ea2c6f5c043ae697d86922dfdcd572d5c1 100644 Binary files a/packages/vtiger/mandatory/MailManager.zip and b/packages/vtiger/mandatory/MailManager.zip differ diff --git a/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/resources/List.js b/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/resources/List.js index 01b903202991e2957d35067506ca63fec5e891d5..b4db3b16eba124ed7dca00ed38fa385387d545eb 100644 --- a/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/resources/List.js +++ b/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/resources/List.js @@ -8,968 +8,968 @@ *************************************************************************************/ Vtiger_List_Js("MailManager_List_Js", {}, { - - getContainer : function() { - return jQuery('.main-container'); - }, - - loadFolders : function(folder) { - app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); - var self = this; - var params = { - 'module' : app.getModuleName(), - 'view' : 'Index', - '_operation' : 'folder', - '_operationarg' : 'getFoldersList' - } - app.request.post({"data" : params}).then(function(error, responseData) { - app.helper.hideProgress(); - self.getContainer().find('#folders_list').html(responseData); - self.getContainer().find('#folders_list').mCustomScrollbar({ - setHeight: 550, - autoExpandScrollbar: true, - scrollInertia: 200, - autoHideScrollbar: true, - theme : "dark-3" - }); - self.registerFolderClickEvent(); - if(folder) { - self.openFolder(folder); - } else { - self.openFolder('INBOX'); - } - self.registerAutoRefresh(); - }); - }, - - registerAutoRefresh : function() { - var self = this; - var container = self.getContainer(); - var timeout = parseInt(container.find('#refresh_timeout').val()); - var folder = container.find('.mm_folder.active').data('foldername'); - if(timeout > 0) { - setTimeout(function() { - var thisInstance = new MailManager_List_Js(); - if(folder && typeof folder != "undefined") { - thisInstance.loadFolders(folder); - } else { - thisInstance.loadFolders(); - } - }, timeout); - } - }, - - registerFolderClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('.mm_folder').click(function(e) { - var folderElement = jQuery(e.currentTarget); - var folderName = folderElement.data('foldername'); - container.find('.mm_folder').each(function(i, ele) { - jQuery(ele).removeClass('active'); - }); - folderElement.addClass('active'); - if(folderName == 'vt_drafts') { - self.openDraftFolder(); - } else { - self.openFolder(folderName); - } - }); - }, - - registerComposeEmail : function() { - var self = this; - var container = self.getContainer(); - container.find('#mail_compose').click(function() { - var params = { - step : "step1", - module : "MailManager", - view : "MassActionAjax", - mode : "showComposeEmailForm", - selected_ids : "[]", - excluded_ids : "[]" - }; - self.openComposeEmailForm(null, params); - }); - }, - - registerSettingsEdit : function() { - var self = this; - var container = this.getContainer(); - container.find('.mailbox_setting').click(function() { - app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'settings', - '_operationarg' : 'edit' - }; - var popupInstance = Vtiger_Popup_Js.getInstance(); - popupInstance.showPopup(params, '', function(data) { - app.helper.hideProgress(); - self.handleSettingsEvents(data); - self.registerDeleteMailboxEvent(data); - self.registerSaveMailboxEvent(data); - }); - }); - }, - - handleSettingsEvents : function(data) { - var settingContainer = jQuery(data); - settingContainer.find('#serverType').on('change', function(e) { - var element = jQuery(e.currentTarget); - var serverType = element.val(); - var useServer = '', useProtocol = '', useSSLType = '', useCert = ''; - if(serverType == 'gmail' || serverType == 'yahoo') { - useServer = 'imap.gmail.com'; - if(serverType == 'yahoo') { - useServer = 'imap.mail.yahoo.com'; - } - useProtocol = 'IMAP4'; - useSSLType = 'ssl'; - useCert = 'novalidate-cert'; - settingContainer.find('.settings_details').removeClass('hide'); - settingContainer.find('.additional_settings').addClass('hide'); - } else if(serverType == 'fastmail') { - useServer = 'mail.messagingengine.com'; - useProtocol = 'IMAP2'; - useSSLType = 'tls'; - useCert = 'novalidate-cert'; - settingContainer.find('.settings_details').removeClass('hide'); - settingContainer.find('.additional_settings').addClass('hide'); - } else if(serverType == 'other') { - useServer = ''; - useProtocol = 'IMAP4'; - useSSLType = 'ssl'; - useCert = 'novalidate-cert'; - settingContainer.find('.settings_details').removeClass('hide'); - settingContainer.find('.additional_settings').removeClass('hide'); - } else { - settingContainer.find('.settings_details').addClass('hide'); - } - - settingContainer.find('.refresh_settings').show(); - settingContainer.find('#_mbox_user').val(''); - settingContainer.find('#_mbox_pwd').val(''); - settingContainer.find('[name="_mbox_sent_folder"]').val(''); - settingContainer.find('.selectFolderValue').addClass('hide'); - settingContainer.find('.selectFolderDesc').removeClass('hide'); - if(useProtocol != '') { - settingContainer.find('#_mbox_server').val(useServer); - settingContainer.find('.mbox_protocol').each(function(node) { - if(jQuery(node).val() == useProtocol) { - jQuery(node).attr('checked', true); - } - }); - settingContainer.find('.mbox_ssltype').each(function(node) { - if(jQuery(node).val() == useSSLType) { - jQuery(node).attr('checked', true); - } - }); - settingContainer.find('.mbox_certvalidate').each(function(node) { - if(jQuery(node).val() == useCert) { - jQuery(node).attr('checked', true); - } - }); - } - }); - }, - - registerDeleteMailboxEvent : function(data) { - var settingContainer = jQuery(data); - settingContainer.find('#deleteMailboxBtn').click(function(e) { - e.preventDefault(); - app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'settings', - '_operationarg' : 'remove' - }; - app.request.post({"data" : params}).then(function(error, responseData) { - app.helper.hideProgress(); - if(responseData.status) { - window.location.reload(); - } - }); - }); - }, - - registerSaveMailboxEvent : function(data) { - var settingContainer = jQuery(data); - settingContainer.find('#saveMailboxBtn').click(function(e) { - e.preventDefault(); - var form = settingContainer.find('#EditView'); - var data = form.serializeFormData(); - var params = { - position: { - 'my' : 'bottom left', - 'at' : 'top left', - 'container' : jQuery('#EditView') - }}; - var errorMsg = app.vtranslate('JS_REQUIRED_FIELD'); - if(data['_mbox_server'] == "") { - vtUtils.showValidationMessage(settingContainer.find('#_mbox_server'), errorMsg, params); - return false; - } else { - vtUtils.hideValidationMessage(settingContainer.find('#_mbox_server')); - } - if(data['_mbox_user'] == "") { - vtUtils.showValidationMessage(settingContainer.find('#_mbox_user'), errorMsg, params); - return false; - } else { - vtUtils.hideValidationMessage(settingContainer.find('#_mbox_user')); - } - if(data['_mbox_pwd'] == "") { - vtUtils.showValidationMessage(settingContainer.find('#_mbox_pwd'), errorMsg, params); - return false; - } else { - vtUtils.hideValidationMessage(settingContainer.find('#_mbox_pwd')); - } - app.helper.showProgress(app.vtranslate("JSLBL_Saving_And_Verifying")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'settings', - '_operationarg' : 'save' - }; - jQuery.extend(params, data); - app.request.post({"data" : params}).then(function(error, responseData) { - app.helper.hideModal(); - app.helper.hideProgress(); - if(error) { - app.helper.showAlertNotification({'message' : error.message}); - } else if(responseData.mailbox) { - window.location.reload(); - } - }); - }); - }, - - registerInitialLayout : function() { - var self = this; - var container = self.getContainer(); - if(container.find('#isMailBoxExists').val() == "0") { - container.find('#modnavigator').addClass('hide'); - container.find('#listViewContent').addClass('paddingLeft0'); - } - }, - - openFolder : function(folderName, page, query, type) { - var self = this; - app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); - if(!page) { - page = 0; - } - var container = self.getContainer(); + + getContainer : function() { + return jQuery('.main-container'); + }, + + loadFolders : function(folder) { + app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); + var self = this; + var params = { + 'module' : app.getModuleName(), + 'view' : 'Index', + '_operation' : 'folder', + '_operationarg' : 'getFoldersList' + } + app.request.post({"data" : params}).then(function(error, responseData) { + app.helper.hideProgress(); + self.getContainer().find('#folders_list').html(responseData); + self.getContainer().find('#folders_list').mCustomScrollbar({ + setHeight: 550, + autoExpandScrollbar: true, + scrollInertia: 200, + autoHideScrollbar: true, + theme : "dark-3" + }); + self.registerFolderClickEvent(); + if(folder) { + self.openFolder(folder); + } else { + self.openFolder('INBOX'); + } + self.registerAutoRefresh(); + }); + }, + + registerAutoRefresh : function() { + var self = this; + var container = self.getContainer(); + var timeout = parseInt(container.find('#refresh_timeout').val()); + var folder = container.find('.mm_folder.active').data('foldername'); + if(timeout > 0) { + setTimeout(function() { + var thisInstance = new MailManager_List_Js(); + if(folder && typeof folder != "undefined") { + thisInstance.loadFolders(folder); + } else { + thisInstance.loadFolders(); + } + }, timeout); + } + }, + + registerFolderClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('.mm_folder').click(function(e) { + var folderElement = jQuery(e.currentTarget); + var folderName = folderElement.data('foldername'); + container.find('.mm_folder').each(function(i, ele) { + jQuery(ele).removeClass('active'); + }); + folderElement.addClass('active'); + if(folderName == 'vt_drafts') { + self.openDraftFolder(); + } else { + self.openFolder(folderName); + } + }); + }, + + registerComposeEmail : function() { + var self = this; + var container = self.getContainer(); + container.find('#mail_compose').click(function() { + var params = { + step : "step1", + module : "MailManager", + view : "MassActionAjax", + mode : "showComposeEmailForm", + selected_ids : "[]", + excluded_ids : "[]" + }; + self.openComposeEmailForm(null, params); + }); + }, + + registerSettingsEdit : function() { + var self = this; + var container = this.getContainer(); + container.find('.mailbox_setting').click(function() { + app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'settings', + '_operationarg' : 'edit' + }; + var popupInstance = Vtiger_Popup_Js.getInstance(); + popupInstance.showPopup(params, '', function(data) { + app.helper.hideProgress(); + self.handleSettingsEvents(data); + self.registerDeleteMailboxEvent(data); + self.registerSaveMailboxEvent(data); + }); + }); + }, + + handleSettingsEvents : function(data) { + var settingContainer = jQuery(data); + settingContainer.find('#serverType').on('change', function(e) { + var element = jQuery(e.currentTarget); + var serverType = element.val(); + var useServer = '', useProtocol = '', useSSLType = '', useCert = ''; + if(serverType == 'gmail' || serverType == 'yahoo') { + useServer = 'imap.gmail.com'; + if(serverType == 'yahoo') { + useServer = 'imap.mail.yahoo.com'; + } + useProtocol = 'IMAP4'; + useSSLType = 'ssl'; + useCert = 'novalidate-cert'; + settingContainer.find('.settings_details').removeClass('hide'); + settingContainer.find('.additional_settings').addClass('hide'); + } else if(serverType == 'fastmail') { + useServer = 'mail.messagingengine.com'; + useProtocol = 'IMAP2'; + useSSLType = 'tls'; + useCert = 'novalidate-cert'; + settingContainer.find('.settings_details').removeClass('hide'); + settingContainer.find('.additional_settings').addClass('hide'); + } else if(serverType == 'other') { + useServer = ''; + useProtocol = 'IMAP4'; + useSSLType = 'ssl'; + useCert = 'novalidate-cert'; + settingContainer.find('.settings_details').removeClass('hide'); + settingContainer.find('.additional_settings').removeClass('hide'); + } else { + settingContainer.find('.settings_details').addClass('hide'); + } + + settingContainer.find('.refresh_settings').show(); + settingContainer.find('#_mbox_user').val(''); + settingContainer.find('#_mbox_pwd').val(''); + settingContainer.find('[name="_mbox_sent_folder"]').val(''); + settingContainer.find('.selectFolderValue').addClass('hide'); + settingContainer.find('.selectFolderDesc').removeClass('hide'); + if(useProtocol != '') { + settingContainer.find('#_mbox_server').val(useServer); + settingContainer.find('.mbox_protocol').each(function(node) { + if(jQuery(node).val() == useProtocol) { + jQuery(node).attr('checked', true); + } + }); + settingContainer.find('.mbox_ssltype').each(function(node) { + if(jQuery(node).val() == useSSLType) { + jQuery(node).attr('checked', true); + } + }); + settingContainer.find('.mbox_certvalidate').each(function(node) { + if(jQuery(node).val() == useCert) { + jQuery(node).attr('checked', true); + } + }); + } + }); + }, + + registerDeleteMailboxEvent : function(data) { + var settingContainer = jQuery(data); + settingContainer.find('#deleteMailboxBtn').click(function(e) { + e.preventDefault(); + app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'settings', + '_operationarg' : 'remove' + }; + app.request.post({"data" : params}).then(function(error, responseData) { + app.helper.hideProgress(); + if(responseData.status) { + window.location.reload(); + } + }); + }); + }, + + registerSaveMailboxEvent : function(data) { + var settingContainer = jQuery(data); + settingContainer.find('#saveMailboxBtn').click(function(e) { + e.preventDefault(); + var form = settingContainer.find('#EditView'); + var data = form.serializeFormData(); + var params = { + position: { + 'my' : 'bottom left', + 'at' : 'top left', + 'container' : jQuery('#EditView') + }}; + var errorMsg = app.vtranslate('JS_REQUIRED_FIELD'); + if(data['_mbox_server'] == "") { + vtUtils.showValidationMessage(settingContainer.find('#_mbox_server'), errorMsg, params); + return false; + } else { + vtUtils.hideValidationMessage(settingContainer.find('#_mbox_server')); + } + if(data['_mbox_user'] == "") { + vtUtils.showValidationMessage(settingContainer.find('#_mbox_user'), errorMsg, params); + return false; + } else { + vtUtils.hideValidationMessage(settingContainer.find('#_mbox_user')); + } + if(data['_mbox_pwd'] == "") { + vtUtils.showValidationMessage(settingContainer.find('#_mbox_pwd'), errorMsg, params); + return false; + } else { + vtUtils.hideValidationMessage(settingContainer.find('#_mbox_pwd')); + } + app.helper.showProgress(app.vtranslate("JSLBL_Saving_And_Verifying")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'settings', + '_operationarg' : 'save' + }; + jQuery.extend(params, data); + app.request.post({"data" : params}).then(function(error, responseData) { + app.helper.hideModal(); + app.helper.hideProgress(); + if(error) { + app.helper.showAlertNotification({'message' : error.message}); + } else if(responseData.mailbox) { + window.location.reload(); + } + }); + }); + }, + + registerInitialLayout : function() { + var self = this; + var container = self.getContainer(); + if(container.find('#isMailBoxExists').val() == "0") { + container.find('#modnavigator').addClass('hide'); + container.find('#listViewContent').addClass('paddingLeft0'); + } + }, + + openFolder : function(folderName, page, query, type) { + var self = this; + app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); + if(!page) { + page = 0; + } + var container = self.getContainer(); vtUtils.hideValidationMessage(container.find('#mailManagerSearchbox')); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'folder', - '_operationarg' : 'open', - '_folder' : folderName, - '_page' : page - }; - if(query) { - params['q'] = query; - } - if(type) { - params['type'] = type; - } - app.request.post({"data" : params}).then(function(error, responseData) { - container.find('#mails_container').removeClass('col-lg-12'); - container.find('#mails_container').addClass('col-lg-5'); - container.find('#mailPreviewContainer').removeClass('hide'); - container.find('#mails_container').html(responseData); - app.helper.hideProgress(); - self.registerMoveMailDropdownClickEvent(); - self.registerMailCheckBoxClickEvent(); - self.registerScrollForMailList(); - self.registerMainCheckboxClickEvent(); - self.registerPrevPageClickEvent(); - self.registerNextPageClickEvent(); - self.registerSearchEvent(); - self.registerFolderMailDeleteEvent(); - self.registerMoveMailToFolder(); - self.registerMarkMessageAsUnread(); - self.registerMailClickEvent(); - self.registerMarkMessageAsRead(); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'folder', + '_operationarg' : 'open', + '_folder' : folderName, + '_page' : page + }; + if(query) { + params['q'] = query; + } + if(type) { + params['type'] = type; + } + app.request.post({"data" : params}).then(function(error, responseData) { + container.find('#mails_container').removeClass('col-lg-12'); + container.find('#mails_container').addClass('col-lg-5'); + container.find('#mailPreviewContainer').removeClass('hide'); + container.find('#mails_container').html(responseData); + app.helper.hideProgress(); + self.registerMoveMailDropdownClickEvent(); + self.registerMailCheckBoxClickEvent(); + self.registerScrollForMailList(); + self.registerMainCheckboxClickEvent(); + self.registerPrevPageClickEvent(); + self.registerNextPageClickEvent(); + self.registerSearchEvent(); + self.registerFolderMailDeleteEvent(); + self.registerMoveMailToFolder(); + self.registerMarkMessageAsUnread(); + self.registerMailClickEvent(); + self.registerMarkMessageAsRead(); self.clearPreviewContainer(); - self.loadMailContents(folderName); - container.find('#searchType').trigger('change'); - }); - }, - - /** - * Function to load the body of all mails in folder list - * @param {type} folderName - * @returns {undefined} - */ - loadMailContents : function(folderName){ - var mailids = jQuery('input[name="folderMailIds"]').val(); - mailids = mailids.split(","); - var params = { - 'module' : 'MailManager', - 'action' : 'Folder', - 'mode' : 'showMailContent', - 'mailids' : mailids, - 'folderName':folderName - }; - app.request.post({"data" : params}).then(function(error, responseData) { - for(var k in responseData){ - var messageContent = responseData[k]; - var messageEle = jQuery('#mmMailEntry_'+k); - messageEle.find('.mmMailDesc').html(messageContent); - } - }); - }, - - registerFolderMailDeleteEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmDeleteMail').click(function(e) { - var folder = jQuery(e.currentTarget).data('folder'); - var msgNos = new Array(); - container.find('.mailCheckBox').each(function(i, ele) { - var element = jQuery(ele); - if(element.is(":checked")) { - msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); - } - }); - if(msgNos.length <= 0) { - app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); - return false; - } else { - app.helper.showConfirmationBox({'message' : app.vtranslate('LBL_DELETE_CONFIRMATION')}).then(function() { - app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'delete', - '_folder' : folder, - '_msgno' : msgNos.join(',') - }; - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(data.status) { + self.loadMailContents(folderName); + container.find('#searchType').trigger('change'); + }); + }, + + /** + * Function to load the body of all mails in folder list + * @param {type} folderName + * @returns {undefined} + */ + loadMailContents : function(folderName){ + var mailids = jQuery('input[name="folderMailIds"]').val(); + mailids = mailids.split(","); + var params = { + 'module' : 'MailManager', + 'action' : 'Folder', + 'mode' : 'showMailContent', + 'mailids' : mailids, + 'folderName':folderName + }; + app.request.post({"data" : params}).then(function(error, responseData) { + for(var k in responseData){ + var messageContent = responseData[k]; + var messageEle = jQuery('#mmMailEntry_'+k); + messageEle.find('.mmMailDesc').html(messageContent); + } + }); + }, + + registerFolderMailDeleteEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmDeleteMail').click(function(e) { + var folder = jQuery(e.currentTarget).data('folder'); + var msgNos = new Array(); + container.find('.mailCheckBox').each(function(i, ele) { + var element = jQuery(ele); + if(element.is(":checked")) { + msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); + } + }); + if(msgNos.length <= 0) { + app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); + return false; + } else { + app.helper.showConfirmationBox({'message' : app.vtranslate('LBL_DELETE_CONFIRMATION')}).then(function() { + app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'delete', + '_folder' : folder, + '_msgno' : msgNos.join(',') + }; + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(data.status) { app.helper.showSuccessNotification({'message': app.vtranslate('JSLBL_MAILS_DELETED')}); - self.updateUnreadCount("-"+self.getUnreadCountByMsgNos(msgNos), folder); - self.updatePagingCount(msgNos.length); - for(var i = 0; i < msgNos.length; i++) { - container.find('#mmMailEntry_'+msgNos[i]).remove(); - } + self.updateUnreadCount("-"+self.getUnreadCountByMsgNos(msgNos), folder); + self.updatePagingCount(msgNos.length); + for(var i = 0; i < msgNos.length; i++) { + container.find('#mmMailEntry_'+msgNos[i]).remove(); + } var openedMsgNo = container.find('#mmMsgNo').val(); if(jQuery.inArray(openedMsgNo, msgNos) !== -1) { self.clearPreviewContainer(); } - } - }); - }); - } - }); - }, - - updatePagingCount : function(deletedCount) { - var pagingDataElement = jQuery('.pageInfoData'); - var pagingElement = jQuery('.pageInfo'); - if(pagingDataElement.length != 0){ - var total = pagingDataElement.data('total'); - var start = pagingDataElement.data('start'); - var end = pagingDataElement.data('end'); - var labelOf = pagingDataElement.data('label-of'); - total = total - deletedCount; - pagingDataElement.data('total', total); - pagingElement.html(start+' '+'-'+' '+end+' '+labelOf+' '+total+' '); - } - }, - - registerMoveMailToFolder : function() { - var self = this; - var container = self.getContainer(); - var moveToDropDown = container.find('#mmMoveToFolder'); - moveToDropDown.on('click','a',function(e) { - var element = jQuery(e.currentTarget); - var moveToFolder = element.closest('li').data('movefolder'); - var folder = element.closest('li').data('folder'); - var msgNos = new Array(); - container.find('.mailCheckBox').each(function(i, ele) { - var element = jQuery(ele); - if(element.is(":checked")) { - msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); - } - }); - if(msgNos.length <= 0) { + } + }); + }); + } + }); + }, + + updatePagingCount : function(deletedCount) { + var pagingDataElement = jQuery('.pageInfoData'); + var pagingElement = jQuery('.pageInfo'); + if(pagingDataElement.length != 0){ + var total = pagingDataElement.data('total'); + var start = pagingDataElement.data('start'); + var end = pagingDataElement.data('end'); + var labelOf = pagingDataElement.data('label-of'); + total = total - deletedCount; + pagingDataElement.data('total', total); + pagingElement.html(start+' '+'-'+' '+end+' '+labelOf+' '+total+' '); + } + }, + + registerMoveMailToFolder : function() { + var self = this; + var container = self.getContainer(); + var moveToDropDown = container.find('#mmMoveToFolder'); + moveToDropDown.on('click','a',function(e) { + var element = jQuery(e.currentTarget); + var moveToFolder = element.closest('li').data('movefolder'); + var folder = element.closest('li').data('folder'); + var msgNos = new Array(); + container.find('.mailCheckBox').each(function(i, ele) { + var element = jQuery(ele); + if(element.is(":checked")) { + msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); + } + }); + if(msgNos.length <= 0) { container.find('.moveToFolderDropDown').removeClass('open'); - app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); - return false; - } else { - app.helper.showProgress(app.vtranslate("JSLBL_MOVING")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'move', - '_folder' : folder, - '_moveFolder' : moveToFolder, - '_msgno' : msgNos.join(',') - }; - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(data.status) { + app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); + return false; + } else { + app.helper.showProgress(app.vtranslate("JSLBL_MOVING")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'move', + '_folder' : folder, + '_moveFolder' : moveToFolder, + '_msgno' : msgNos.join(',') + }; + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(data.status) { app.helper.showSuccessNotification({'message': app.vtranslate('JSLBL_MAIL_MOVED')}); - var unreadCount = self.getUnreadCountByMsgNos(msgNos); - self.updateUnreadCount("-"+unreadCount, folder); - self.updateUnreadCount("+"+unreadCount, moveToFolder); - for(var i = 0; i < msgNos.length; i++) { - container.find('#mmMailEntry_'+msgNos[i]).remove(); - } + var unreadCount = self.getUnreadCountByMsgNos(msgNos); + self.updateUnreadCount("-"+unreadCount, folder); + self.updateUnreadCount("+"+unreadCount, moveToFolder); + for(var i = 0; i < msgNos.length; i++) { + container.find('#mmMailEntry_'+msgNos[i]).remove(); + } container.find('.moveToFolderDropDown').removeClass('open'); - } - }); - } - }); - }, - - registerMarkMessageAsUnread : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmMarkAsUnread').click(function(e) { - var folder = jQuery(e.currentTarget).data('folder'); - var msgNos = new Array(); - container.find('.mailCheckBox').each(function(i, ele) { - var element = jQuery(ele); - if(element.is(":checked")) { - msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); - } - }); - if(msgNos.length <= 0) { - app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); - return false; - } else { - app.helper.showProgress(app.vtranslate("JSLBL_Updating")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'mark', - '_folder' : folder, - '_msgno' : msgNos.join(','), - '_markas' : 'unread' - }; - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(data.status) { + } + }); + } + }); + }, + + registerMarkMessageAsUnread : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmMarkAsUnread').click(function(e) { + var folder = jQuery(e.currentTarget).data('folder'); + var msgNos = new Array(); + container.find('.mailCheckBox').each(function(i, ele) { + var element = jQuery(ele); + if(element.is(":checked")) { + msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); + } + }); + if(msgNos.length <= 0) { + app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); + return false; + } else { + app.helper.showProgress(app.vtranslate("JSLBL_Updating")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'mark', + '_folder' : folder, + '_msgno' : msgNos.join(','), + '_markas' : 'unread' + }; + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(data.status) { app.helper.showSuccessNotification({'message': app.vtranslate('JSLBL_MAILS_MARKED_UNREAD')}); - self.markMessageUnread(msgNos); - self.updateUnreadCount("+"+self.getUnreadCountByMsgNos(msgNos), folder); - } - }); - } - }); - }, - - registerMarkMessageAsRead : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmMarkAsRead').click(function(e) { - var folder = jQuery(e.currentTarget).data('folder'); - var msgNos = new Array(); - container.find('.mailCheckBox').each(function(i, ele) { - var element = jQuery(ele); - if(element.is(":checked")) { - msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); - } - }); - if(msgNos.length <= 0) { - app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); - return false; - } else { - app.helper.showProgress(app.vtranslate("JSLBL_Updating")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'mark', - '_folder' : folder, - '_msgno' : msgNos.join(','), - '_markas' : 'read' - }; - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(data.status) { + self.markMessageUnread(msgNos); + self.updateUnreadCount("+"+self.getUnreadCountByMsgNos(msgNos), folder); + } + }); + } + }); + }, + + registerMarkMessageAsRead : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmMarkAsRead').click(function(e) { + var folder = jQuery(e.currentTarget).data('folder'); + var msgNos = new Array(); + container.find('.mailCheckBox').each(function(i, ele) { + var element = jQuery(ele); + if(element.is(":checked")) { + msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); + } + }); + if(msgNos.length <= 0) { + app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); + return false; + } else { + app.helper.showProgress(app.vtranslate("JSLBL_Updating")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'mark', + '_folder' : folder, + '_msgno' : msgNos.join(','), + '_markas' : 'read' + }; + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(data.status) { app.helper.showSuccessNotification({'message': app.vtranslate('JSLBL_MAILS_MARKED_READ')}); - self.markMessageRead(msgNos); - self.updateUnreadCount("-"+self.getUnreadCountByMsgNos(msgNos), folder); - } - }); - } - }); - }, - - registerSearchEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mm_searchButton').click(function() { - var query = container.find('#mailManagerSearchbox').val(); - if(query.trim() == '') { - vtUtils.showValidationMessage(container.find('#mailManagerSearchbox'), app.vtranslate('JSLBL_ENTER_SOME_VALUE')); - return false; - } else { - vtUtils.hideValidationMessage(container.find('#mailManagerSearchbox')); - } - var folder = container.find('#mailManagerSearchbox').data('foldername'); - var type = container.find('#searchType').val(); - self.openFolder(folder, 0, query, type); - }); - }, - - markMessageUnread : function(msgNos) { - var self = this; - var container = self.getContainer(); - if(typeof msgNos == "string") { - msgNos = new Array(msgNos); - } - if(typeof msgNos == "object") { - for(var i = 0; i < msgNos.length; i++) { - var msgNo = msgNos[i]; - var msgEle = container.find('#mmMailEntry_'+msgNo); - msgEle.removeClass('mmReadEmail'); - msgEle.data('read', "0"); - var nameSubject = "<strong>" + msgEle.find('.nameSubjectHolder').html() + "</strong>"; - msgEle.find('.nameSubjectHolder').html(nameSubject); - } - } - }, - - markMessageRead : function(msgNos) { - var self = this; - var container = self.getContainer(); - if(typeof msgNos == "string") { - msgNos = new Array(msgNos); - } - if(typeof msgNos == "object") { - for(var i = 0; i < msgNos.length; i++) { - var msgNo = msgNos[i]; - var msgEle = container.find('#mmMailEntry_'+msgNo); - msgEle.addClass('mmReadEmail'); - msgEle.data('read', "1"); - var nameSubject = msgEle.find('.nameSubjectHolder').find('strong').html(); - msgEle.find('.nameSubjectHolder').html(nameSubject); - } - } - }, - - getUnreadCountByMsgNos : function(msgNos) { - var count = 0; - var self = this; - var container = self.getContainer(); - for(var i = 0; i < msgNos.length; i++) { - var isRead = parseInt(container.find('#mmMailEntry_'+msgNos[i]).data('read')); - if(isRead == 0) { - count++; - } - } - return count; - }, - - registerMailCheckBoxClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('.mailCheckBox').click(function(e) { - var element = jQuery(e.currentTarget); - if(element.is(":checked")) { - element.closest('.mailEntry').addClass('highLightMail'); - element.closest('.mailEntry').removeClass('fontBlack'); - element.closest('.mailEntry').addClass('whiteFont'); - element.closest('.mailEntry').removeClass('mmReadEmail'); - element.closest('.mailEntry').find('.mmDateTimeValue').addClass('mmListDateDivSelected'); - } else { - var isRead = element.closest('.mailEntry').data('read'); - if(parseInt(isRead)) { - element.closest('.mailEntry').addClass('mmReadEmail'); - element.closest('.mailEntry').removeClass('highLightMail'); - } else { - element.closest('.mailEntry').removeClass('highLightMail'); - } - element.closest('.mailEntry').find('.mmDateTimeValue').removeClass('mmListDateDivSelected'); - element.closest('.mailEntry').addClass('fontBlack'); - } - }); - }, - - registerMoveMailDropdownClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('.moveToFolderDropDown').click(function(e) { - e.stopImmediatePropagation(); - var element = jQuery(e.currentTarget); - element.addClass('open'); - }); - }, - - registerScrollForMailList : function() { - var self = this; - self.getContainer().find('#emailListDiv').mCustomScrollbar({ - setHeight: 600, - autoExpandScrollbar: true, - scrollInertia: 200, - autoHideScrollbar: true, - theme : "dark-3" - }); - }, - - registerMainCheckboxClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mainCheckBox').click(function(e) { - var element = jQuery(e.currentTarget); - if(element.is(":checked")) { - container.find('.mailCheckBox').each(function(i, ele) { - jQuery(ele).prop('checked', true); - jQuery(ele).closest('.mailEntry').addClass('highLightMail'); - jQuery(ele).closest('.mailEntry').removeClass('fontBlack'); - jQuery(ele).closest('.mailEntry').addClass('whiteFont'); - jQuery(ele).closest('.mailEntry').removeClass('mmReadEmail'); - jQuery(ele).closest('.mailEntry').find('.mmDateTimeValue').addClass('mmListDateDivSelected'); - }); - } else { - container.find('.mailCheckBox').each(function(i, ele) { - jQuery(ele).prop('checked', false); - var isRead = jQuery(ele).closest('.mailEntry').data('read'); - if(parseInt(isRead)) { - jQuery(ele).closest('.mailEntry').addClass('mmReadEmail'); - jQuery(ele).closest('.mailEntry').removeClass('highLightMail'); - } else { - jQuery(ele).closest('.mailEntry').removeClass('highLightMail'); - } - jQuery(ele).closest('.mailEntry').find('.mmDateTimeValue').removeClass('mmListDateDivSelected'); - jQuery(ele).closest('.mailEntry').addClass('fontBlack'); - }); - } - }); - }, - - registerPrevPageClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#PreviousPageButton').click(function(e) { - var element = jQuery(e.currentTarget); - var folder = element.data('folder'); - var page = element.data('page'); - self.openFolder(folder, page, jQuery('#mailManagerSearchbox').val(), jQuery('#searchType').val()); - }); - }, - - registerNextPageClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#NextPageButton').click(function(e) { - var element = jQuery(e.currentTarget); - var folder = element.data('folder'); - var page = element.data('page'); - self.openFolder(folder, page, jQuery('#mailManagerSearchbox').val(), jQuery('#searchType').val()); - }); - }, - - registerMailClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('.mmfolderMails').click(function(e) { - var emailElement = jQuery(e.currentTarget); - var parentEle = emailElement.closest('.mailEntry'); - var msgNo = emailElement.find('.msgNo').val(); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'open', - '_folder' : parentEle.data('folder'), - '_msgno' : msgNo - }; - app.helper.showProgress(app.vtranslate("JSLBL_Opening")+"..."); - app.request.post({data : params}).then(function(err, data) { - app.helper.hideProgress(); - var uiContent = data.ui; - var unreadCount = self.getUnreadCountByMsgNos(new Array(msgNo)); - jQuery(parentEle).addClass('mmReadEmail'); - jQuery(parentEle).data('read', "1"); - var nameSubject = jQuery(parentEle).find('.nameSubjectHolder').find('strong').html(); - jQuery(parentEle).find('.nameSubjectHolder').html(nameSubject); - container.find('#mailPreviewContainer').html(uiContent); - self.highLightMail(msgNo); - self.registerMailDeleteEvent(); - self.registerForwardEvent(); - self.registerPrintEvent(); - self.registerReplyEvent(); - self.registerReplyAllEvent(); - self.showRelatedActions(); - self.registerMailPaginationEvent(); + self.markMessageRead(msgNos); + self.updateUnreadCount("-"+self.getUnreadCountByMsgNos(msgNos), folder); + } + }); + } + }); + }, + + registerSearchEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mm_searchButton').click(function() { + var query = container.find('#mailManagerSearchbox').val(); + if(query.trim() == '') { + vtUtils.showValidationMessage(container.find('#mailManagerSearchbox'), app.vtranslate('JSLBL_ENTER_SOME_VALUE')); + return false; + } else { + vtUtils.hideValidationMessage(container.find('#mailManagerSearchbox')); + } + var folder = container.find('#mailManagerSearchbox').data('foldername'); + var type = container.find('#searchType').val(); + self.openFolder(folder, 0, query, type); + }); + }, + + markMessageUnread : function(msgNos) { + var self = this; + var container = self.getContainer(); + if(typeof msgNos == "string") { + msgNos = new Array(msgNos); + } + if(typeof msgNos == "object") { + for(var i = 0; i < msgNos.length; i++) { + var msgNo = msgNos[i]; + var msgEle = container.find('#mmMailEntry_'+msgNo); + msgEle.removeClass('mmReadEmail'); + msgEle.data('read', "0"); + var nameSubject = "<strong>" + msgEle.find('.nameSubjectHolder').html() + "</strong>"; + msgEle.find('.nameSubjectHolder').html(nameSubject); + } + } + }, + + markMessageRead : function(msgNos) { + var self = this; + var container = self.getContainer(); + if(typeof msgNos == "string") { + msgNos = new Array(msgNos); + } + if(typeof msgNos == "object") { + for(var i = 0; i < msgNos.length; i++) { + var msgNo = msgNos[i]; + var msgEle = container.find('#mmMailEntry_'+msgNo); + msgEle.addClass('mmReadEmail'); + msgEle.data('read', "1"); + var nameSubject = msgEle.find('.nameSubjectHolder').find('strong').html(); + msgEle.find('.nameSubjectHolder').html(nameSubject); + } + } + }, + + getUnreadCountByMsgNos : function(msgNos) { + var count = 0; + var self = this; + var container = self.getContainer(); + for(var i = 0; i < msgNos.length; i++) { + var isRead = parseInt(container.find('#mmMailEntry_'+msgNos[i]).data('read')); + if(isRead == 0) { + count++; + } + } + return count; + }, + + registerMailCheckBoxClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('.mailCheckBox').click(function(e) { + var element = jQuery(e.currentTarget); + if(element.is(":checked")) { + element.closest('.mailEntry').addClass('highLightMail'); + element.closest('.mailEntry').removeClass('fontBlack'); + element.closest('.mailEntry').addClass('whiteFont'); + element.closest('.mailEntry').removeClass('mmReadEmail'); + element.closest('.mailEntry').find('.mmDateTimeValue').addClass('mmListDateDivSelected'); + } else { + var isRead = element.closest('.mailEntry').data('read'); + if(parseInt(isRead)) { + element.closest('.mailEntry').addClass('mmReadEmail'); + element.closest('.mailEntry').removeClass('highLightMail'); + } else { + element.closest('.mailEntry').removeClass('highLightMail'); + } + element.closest('.mailEntry').find('.mmDateTimeValue').removeClass('mmListDateDivSelected'); + element.closest('.mailEntry').addClass('fontBlack'); + } + }); + }, + + registerMoveMailDropdownClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('.moveToFolderDropDown').click(function(e) { + e.stopImmediatePropagation(); + var element = jQuery(e.currentTarget); + element.addClass('open'); + }); + }, + + registerScrollForMailList : function() { + var self = this; + self.getContainer().find('#emailListDiv').mCustomScrollbar({ + setHeight: 600, + autoExpandScrollbar: true, + scrollInertia: 200, + autoHideScrollbar: true, + theme : "dark-3" + }); + }, + + registerMainCheckboxClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mainCheckBox').click(function(e) { + var element = jQuery(e.currentTarget); + if(element.is(":checked")) { + container.find('.mailCheckBox').each(function(i, ele) { + jQuery(ele).prop('checked', true); + jQuery(ele).closest('.mailEntry').addClass('highLightMail'); + jQuery(ele).closest('.mailEntry').removeClass('fontBlack'); + jQuery(ele).closest('.mailEntry').addClass('whiteFont'); + jQuery(ele).closest('.mailEntry').removeClass('mmReadEmail'); + jQuery(ele).closest('.mailEntry').find('.mmDateTimeValue').addClass('mmListDateDivSelected'); + }); + } else { + container.find('.mailCheckBox').each(function(i, ele) { + jQuery(ele).prop('checked', false); + var isRead = jQuery(ele).closest('.mailEntry').data('read'); + if(parseInt(isRead)) { + jQuery(ele).closest('.mailEntry').addClass('mmReadEmail'); + jQuery(ele).closest('.mailEntry').removeClass('highLightMail'); + } else { + jQuery(ele).closest('.mailEntry').removeClass('highLightMail'); + } + jQuery(ele).closest('.mailEntry').find('.mmDateTimeValue').removeClass('mmListDateDivSelected'); + jQuery(ele).closest('.mailEntry').addClass('fontBlack'); + }); + } + }); + }, + + registerPrevPageClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#PreviousPageButton').click(function(e) { + var element = jQuery(e.currentTarget); + var folder = element.data('folder'); + var page = element.data('page'); + self.openFolder(folder, page, jQuery('#mailManagerSearchbox').val(), jQuery('#searchType').val()); + }); + }, + + registerNextPageClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#NextPageButton').click(function(e) { + var element = jQuery(e.currentTarget); + var folder = element.data('folder'); + var page = element.data('page'); + self.openFolder(folder, page, jQuery('#mailManagerSearchbox').val(), jQuery('#searchType').val()); + }); + }, + + registerMailClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('.mmfolderMails').click(function(e) { + var emailElement = jQuery(e.currentTarget); + var parentEle = emailElement.closest('.mailEntry'); + var msgNo = emailElement.find('.msgNo').val(); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'open', + '_folder' : parentEle.data('folder'), + '_msgno' : msgNo + }; + app.helper.showProgress(app.vtranslate("JSLBL_Opening")+"..."); + app.request.post({data : params}).then(function(err, data) { + app.helper.hideProgress(); + var uiContent = data.ui; + var unreadCount = self.getUnreadCountByMsgNos(new Array(msgNo)); + jQuery(parentEle).addClass('mmReadEmail'); + jQuery(parentEle).data('read', "1"); + var nameSubject = jQuery(parentEle).find('.nameSubjectHolder').find('strong').html(); + jQuery(parentEle).find('.nameSubjectHolder').html(nameSubject); + container.find('#mailPreviewContainer').html(uiContent); + self.highLightMail(msgNo); + self.registerMailDeleteEvent(); + self.registerForwardEvent(); + self.registerPrintEvent(); + self.registerReplyEvent(); + self.registerReplyAllEvent(); + self.showRelatedActions(); + self.registerMailPaginationEvent(); container.find('.emailDetails').popover({html: true}); - self.updateUnreadCount("-"+unreadCount, jQuery(parentEle).data('folder')); + self.updateUnreadCount("-"+unreadCount, jQuery(parentEle).data('folder')); self.loadContentsInIframe(container.find('#mmBody')); - }); - }); - }, - + }); + }); + }, + loadContentsInIframe : function(element) { var bodyContent = element.html(); - element.html('<iframe id="bodyFrame" style="width: 100%; border: none;"></iframe>'); - var frameElement = jQuery("#bodyFrame")[0].contentWindow.document; - frameElement.open(); - frameElement.close(); - jQuery('#bodyFrame').contents().find('html').html(bodyContent); + element.html('<iframe id="bodyFrame" style="width: 100%; border: none;"></iframe>'); + var frameElement = jQuery("#bodyFrame")[0].contentWindow.document; + frameElement.open(); + frameElement.close(); + jQuery('#bodyFrame').contents().find('html').html(bodyContent); jQuery('#bodyFrame').contents().find('html').find('a').on('click', function(e) { e.preventDefault(); var url = jQuery(e.currentTarget).attr('href'); window.open(url, '_blank'); }); }, - - highLightMail : function(msgNo) { - var self = this; - var container = self.getContainer(); - container.find('.mailEntry').each(function(i, ele) { - var element = jQuery(ele); - var isRead = element.data('read'); - if(parseInt(isRead)) { - element.addClass('mmReadEmail'); - element.removeClass('highLightMail'); - } else { - element.removeClass('highLightMail'); - } - element.find('.mmDateTimeValue').removeClass('mmListDateDivSelected'); - element.addClass('fontBlack'); - }); - var selectedMailEle = container.find('#mmMailEntry_'+msgNo); - selectedMailEle.addClass('highLightMail'); - selectedMailEle.removeClass('fontBlack'); - selectedMailEle.addClass('whiteFont'); - selectedMailEle.removeClass('mmReadEmail'); - selectedMailEle.find('.mmDateTimeValue').addClass('mmListDateDivSelected'); - }, - - registerMailPaginationEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('.mailPagination').click(function(e) { - var element = jQuery(e.currentTarget); - var msgNo = element.data('msgno'); - var folder = element.data('folder'); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'open', - '_folder' : folder, - '_msgno' : msgNo - }; - app.helper.showProgress(app.vtranslate("JSLBL_Opening")+"..."); - app.request.post({data : params}).then(function(err, data) { - app.helper.hideProgress(); - var uiContent = data.ui; - container.find('#mmMailEntry_'+msgNo).addClass('mmReadEmail'); - container.find('#mmMailEntry_'+msgNo).data('read', "1"); - var nameSubject = container.find('#mmMailEntry_'+msgNo).find('.nameSubjectHolder').find('strong').html(); - container.find('#mmMailEntry_'+msgNo).find('.nameSubjectHolder').html(nameSubject); - container.find('#mailPreviewContainer').html(uiContent); - self.registerMailDeleteEvent(); - self.registerForwardEvent(); - self.registerReplyEvent(); - self.registerReplyAllEvent(); - self.showRelatedActions(); - self.registerMailPaginationEvent(); - self.highLightMail(msgNo); + + highLightMail : function(msgNo) { + var self = this; + var container = self.getContainer(); + container.find('.mailEntry').each(function(i, ele) { + var element = jQuery(ele); + var isRead = element.data('read'); + if(parseInt(isRead)) { + element.addClass('mmReadEmail'); + element.removeClass('highLightMail'); + } else { + element.removeClass('highLightMail'); + } + element.find('.mmDateTimeValue').removeClass('mmListDateDivSelected'); + element.addClass('fontBlack'); + }); + var selectedMailEle = container.find('#mmMailEntry_'+msgNo); + selectedMailEle.addClass('highLightMail'); + selectedMailEle.removeClass('fontBlack'); + selectedMailEle.addClass('whiteFont'); + selectedMailEle.removeClass('mmReadEmail'); + selectedMailEle.find('.mmDateTimeValue').addClass('mmListDateDivSelected'); + }, + + registerMailPaginationEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('.mailPagination').click(function(e) { + var element = jQuery(e.currentTarget); + var msgNo = element.data('msgno'); + var folder = element.data('folder'); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'open', + '_folder' : folder, + '_msgno' : msgNo + }; + app.helper.showProgress(app.vtranslate("JSLBL_Opening")+"..."); + app.request.post({data : params}).then(function(err, data) { + app.helper.hideProgress(); + var uiContent = data.ui; + container.find('#mmMailEntry_'+msgNo).addClass('mmReadEmail'); + container.find('#mmMailEntry_'+msgNo).data('read', "1"); + var nameSubject = container.find('#mmMailEntry_'+msgNo).find('.nameSubjectHolder').find('strong').html(); + container.find('#mmMailEntry_'+msgNo).find('.nameSubjectHolder').html(nameSubject); + container.find('#mailPreviewContainer').html(uiContent); + self.registerMailDeleteEvent(); + self.registerForwardEvent(); + self.registerReplyEvent(); + self.registerReplyAllEvent(); + self.showRelatedActions(); + self.registerMailPaginationEvent(); + self.highLightMail(msgNo); self.loadContentsInIframe(container.find('#mmBody')); - }); - }); - }, - - registerMailDeleteEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmDelete').click(function() { - var msgNo = jQuery('#mmMsgNo').val(); - var folder = jQuery('#mmFolder').val(); - app.helper.showConfirmationBox({'message' : app.vtranslate('LBL_DELETE_CONFIRMATION')}).then(function() { - app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'delete', - '_folder' : folder, - '_msgno' : msgNo - }; - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(data.status) { - container.find('#mmMailEntry_'+msgNo).remove(); - var previewHtml = '<div class="mmListMainContainer">\n\ - <center><strong>'+app.vtranslate('JSLBL_NO_MAIL_SELECTED_DESC')+'</center></strong></div>'; - jQuery('#mailPreviewContainer').html(previewHtml); - } - }); - }); - }); - }, - - registerForwardEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmForward').click(function() { - app.helper.showProgress(app.vtranslate("JSLBL_Loading")+"..."); - var msgNo = jQuery('#mmMsgNo').val(); - var from = jQuery('#mmFrom').val(); - var to = jQuery('#mmTo').val(); - var cc = jQuery('#mmCc').val() ? jQuery('#mmCc').val() : ''; - var subject = JSON.parse(jQuery('#mmSubject').val()); - var body = jQuery('#mmBody').find('iframe#bodyFrame').contents().find('html').html(); - var date = jQuery('#mmDate').val(); - var folder = jQuery('#mmFolder').val(); - - var fwdMsgMetaInfo = app.vtranslate('JSLBL_FROM') + from + '<br/>'+ - app.vtranslate('JSLBL_DATE') + date + '<br/>'+ - app.vtranslate('JSLBL_SUBJECT') + subject; - if (to != '' && to != null) { - fwdMsgMetaInfo += '<br/>'+app.vtranslate('JSLBL_TO') + to; - } - if (cc != '' && cc != null) { - fwdMsgMetaInfo += '<br/>'+app.vtranslate('JSLBL_CC') + cc; - } - fwdMsgMetaInfo += '<br/>'; - - var fwdSubject = (subject.toUpperCase().indexOf('FWD:') == 0) ? subject : 'Fwd: ' + subject; - var fwdBody = '<p></p><p>'+app.vtranslate('JSLBL_FORWARD_MESSAGE_TEXT')+'<br/>'+fwdMsgMetaInfo+'</p>'+body; - var attchmentCount = parseInt(container.find('#mmAttchmentCount').val()); - if(attchmentCount) { - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'forward', - 'messageid' : encodeURIComponent(msgNo), - 'folder' : encodeURIComponent(folder), - 'subject' : encodeURIComponent(fwdSubject), - 'body' : encodeURIComponent(fwdBody) - }; - app.request.post({'data' : params}).then(function(err, data) { - var draftId = data.emailid; - var newParams = { - 'module' : 'Emails', - 'view' : 'ComposeEmail', - 'mode' : 'emailEdit', - 'record' : draftId - }; - app.request.post({data : newParams}).then(function(err,data) { - app.helper.hideProgress(); - if(err === null) { - var dataObj = jQuery(data); - var descriptionContent = dataObj.find('#iframeDescription').val(); - app.helper.showModal(data, {cb : function() { - var editInstance = new Emails_MassEdit_Js(); - editInstance.registerEvents(); - jQuery('#emailPreviewIframe').contents().find('html').html(descriptionContent); - jQuery("#emailPreviewIframe").height(jQuery('#emailPreviewIframe').contents().find('html').height()); - }}); - } - }); - }); - } else { - app.helper.hideProgress(); - var params = { - 'step' : "step1", - 'module' : "MailManager", - 'view' : "MassActionAjax", - 'mode' : "showComposeEmailForm", - 'selected_ids' : "[]", - 'excluded_ids' : "[]", - } - self.openComposeEmailForm("forward", params, {'subject' : fwdSubject, 'body' : fwdBody}); - } - }); - }, - - registerPrintEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmPrint').click(function() { - var subject = JSON.parse(container.find('#mmSubject').val()); - var from = container.find('#mmFrom').val(); - var to = container.find('#mmTo').val(); - var cc = container.find('#mmCc').val(); - var date = container.find('#mmDate').val(); - var body = jQuery('#mmBody').find('iframe#bodyFrame').contents().find('html').html(); - - var content = window.open(); - content.document.write("<b>"+subject+"</b><br>"); - content.document.write(app.vtranslate("JSLBL_FROM")+" "+from +"<br>"); - content.document.write(app.vtranslate("JSLBL_TO")+" "+to+"<br>"); - if(cc) { - content.document.write(app.vtranslate("JSLBL_CC")+" "+cc+"<br>"); - } - content.document.write(app.vtranslate("JSLBL_DATE")+" "+date+"<br>"); - content.document.write("<br><br>"+body); - content.print(); - }); - }, - - registerReplyEvent : function() { - var self = this; - self.getContainer().find('#mmReply').click(function() { - self.openReplyEmail(false); - }); - }, - - registerReplyAllEvent : function() { - var self = this; - self.getContainer().find('#mmReplyAll').click(function() { - self.openReplyEmail(true); - }); - }, - - openReplyEmail : function(all) { - var self = this; - if (typeof(all) == 'undefined') { - all = true; - } - var mUserName = jQuery('#mmUserName').val(); - var from = jQuery('#mmFrom').val(); - var to = all ? jQuery('#mmTo').val() : ''; - var cc = all ? jQuery('#mmCc').val() : ''; - - var mailIds = ''; - if(to != null) { - mailIds = to; - } - if(cc != null) { - mailIds = mailIds ? mailIds+','+cc : cc; - } - - mailIds = mailIds.replace(/\s+/g, ''); - - var emails = mailIds.split(','); - for(var i = 0; i < emails.length ; i++) { - if(emails[i].indexOf(mUserName) != -1){ - emails.splice(i,1); - } - } - mailIds = emails.join(','); - - mailIds = mailIds.replace(',,', ','); - if(mailIds.charAt(mailIds.length-1) == ',') { - mailIds = mailIds.slice(0, -1); - } else if(mailIds.charAt(0) == ','){ - mailIds = mailIds.slice(1); - } - - var subject = JSON.parse(jQuery('#mmSubject').val()); - var body = jQuery('#mmBody').find('iframe#bodyFrame').contents().find('html').html(); - var date = jQuery('#mmDate').val(); - - var replySubject = (subject.toUpperCase().indexOf('RE:') == 0) ? subject : 'Re: ' + subject; - var replyBody = '<p></br></br></p><p style="margin:0;padding:0;">On '+date+', '+from+' wrote :</p><blockquote style="border:0;margin:0;border-left:1px solid gray;padding:0 0 0 2px;">'+body+'</blockquote><br />'; + }); + }); + }, + + registerMailDeleteEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmDelete').click(function() { + var msgNo = jQuery('#mmMsgNo').val(); + var folder = jQuery('#mmFolder').val(); + app.helper.showConfirmationBox({'message' : app.vtranslate('LBL_DELETE_CONFIRMATION')}).then(function() { + app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'delete', + '_folder' : folder, + '_msgno' : msgNo + }; + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(data.status) { + container.find('#mmMailEntry_'+msgNo).remove(); + var previewHtml = '<div class="mmListMainContainer">\n\ + <center><strong>'+app.vtranslate('JSLBL_NO_MAIL_SELECTED_DESC')+'</center></strong></div>'; + jQuery('#mailPreviewContainer').html(previewHtml); + } + }); + }); + }); + }, + + registerForwardEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmForward').click(function() { + app.helper.showProgress(app.vtranslate("JSLBL_Loading")+"..."); + var msgNo = jQuery('#mmMsgNo').val(); + var from = jQuery('#mmFrom').val(); + var to = jQuery('#mmTo').val(); + var cc = jQuery('#mmCc').val() ? jQuery('#mmCc').val() : ''; + var subject = JSON.parse(jQuery('#mmSubject').val()); + var body = jQuery('#mmBody').find('iframe#bodyFrame').contents().find('html').html(); + var date = jQuery('#mmDate').val(); + var folder = jQuery('#mmFolder').val(); + + var fwdMsgMetaInfo = app.vtranslate('JSLBL_FROM') + from + '<br/>'+ + app.vtranslate('JSLBL_DATE') + date + '<br/>'+ + app.vtranslate('JSLBL_SUBJECT') + subject; + if (to != '' && to != null) { + fwdMsgMetaInfo += '<br/>'+app.vtranslate('JSLBL_TO') + to; + } + if (cc != '' && cc != null) { + fwdMsgMetaInfo += '<br/>'+app.vtranslate('JSLBL_CC') + cc; + } + fwdMsgMetaInfo += '<br/>'; + + var fwdSubject = (subject.toUpperCase().indexOf('FWD:') == 0) ? subject : 'Fwd: ' + subject; + var fwdBody = '<p></p><p>'+app.vtranslate('JSLBL_FORWARD_MESSAGE_TEXT')+'<br/>'+fwdMsgMetaInfo+'</p>'+body; + var attchmentCount = parseInt(container.find('#mmAttchmentCount').val()); + if(attchmentCount) { + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'forward', + 'messageid' : encodeURIComponent(msgNo), + 'folder' : encodeURIComponent(folder), + 'subject' : encodeURIComponent(fwdSubject), + 'body' : encodeURIComponent(fwdBody) + }; + app.request.post({'data' : params}).then(function(err, data) { + var draftId = data.emailid; + var newParams = { + 'module' : 'Emails', + 'view' : 'ComposeEmail', + 'mode' : 'emailEdit', + 'record' : draftId + }; + app.request.post({data : newParams}).then(function(err,data) { + app.helper.hideProgress(); + if(err === null) { + var dataObj = jQuery(data); + var descriptionContent = dataObj.find('#iframeDescription').val(); + app.helper.showModal(data, {cb : function() { + var editInstance = new Emails_MassEdit_Js(); + editInstance.registerEvents(); + jQuery('#emailPreviewIframe').contents().find('html').html(descriptionContent); + jQuery("#emailPreviewIframe").height(jQuery('#emailPreviewIframe').contents().find('html').height()); + }}); + } + }); + }); + } else { + app.helper.hideProgress(); + var params = { + 'step' : "step1", + 'module' : "MailManager", + 'view' : "MassActionAjax", + 'mode' : "showComposeEmailForm", + 'selected_ids' : "[]", + 'excluded_ids' : "[]", + } + self.openComposeEmailForm("forward", params, {'subject' : fwdSubject, 'body' : fwdBody}); + } + }); + }, + + registerPrintEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmPrint').click(function() { + var subject = JSON.parse(container.find('#mmSubject').val()); + var from = container.find('#mmFrom').val(); + var to = container.find('#mmTo').val(); + var cc = container.find('#mmCc').val(); + var date = container.find('#mmDate').val(); + var body = jQuery('#mmBody').find('iframe#bodyFrame').contents().find('html').html(); + + var content = window.open(); + content.document.write("<b>"+subject+"</b><br>"); + content.document.write(app.vtranslate("JSLBL_FROM")+" "+from +"<br>"); + content.document.write(app.vtranslate("JSLBL_TO")+" "+to+"<br>"); + if(cc) { + content.document.write(app.vtranslate("JSLBL_CC")+" "+cc+"<br>"); + } + content.document.write(app.vtranslate("JSLBL_DATE")+" "+date+"<br>"); + content.document.write("<br><br>"+body); + content.print(); + }); + }, + + registerReplyEvent : function() { + var self = this; + self.getContainer().find('#mmReply').click(function() { + self.openReplyEmail(false); + }); + }, + + registerReplyAllEvent : function() { + var self = this; + self.getContainer().find('#mmReplyAll').click(function() { + self.openReplyEmail(true); + }); + }, + + openReplyEmail : function(all) { + var self = this; + if (typeof(all) == 'undefined') { + all = true; + } + var mUserName = jQuery('#mmUserName').val(); + var from = jQuery('#mmFrom').val(); + var to = all ? jQuery('#mmTo').val() : ''; + var cc = all ? jQuery('#mmCc').val() : ''; + + var mailIds = ''; + if(to != null) { + mailIds = to; + } + if(cc != null) { + mailIds = mailIds ? mailIds+','+cc : cc; + } + + mailIds = mailIds.replace(/\s+/g, ''); + + var emails = mailIds.split(','); + for(var i = 0; i < emails.length ; i++) { + if(emails[i].indexOf(mUserName) != -1){ + emails.splice(i,1); + } + } + mailIds = emails.join(','); + + mailIds = mailIds.replace(',,', ','); + if(mailIds.charAt(mailIds.length-1) == ',') { + mailIds = mailIds.slice(0, -1); + } else if(mailIds.charAt(0) == ','){ + mailIds = mailIds.slice(1); + } + + var subject = JSON.parse(jQuery('#mmSubject').val()); + var body = jQuery('#mmBody').find('iframe#bodyFrame').contents().find('html').html(); + var date = jQuery('#mmDate').val(); + + var replySubject = (subject.toUpperCase().indexOf('RE:') == 0) ? subject : 'Re: ' + subject; + var replyBody = '<p></br></br></p><p style="margin:0;padding:0;">On '+date+', '+from+' wrote :</p><blockquote style="border:0;margin:0;border-left:1px solid gray;padding:0 0 0 2px;">'+body+'</blockquote><br />'; var parentRecord = new Array(); var linktoElement = jQuery('[name=_mlinkto]'); linktoElement.each(function(index){ @@ -978,492 +978,498 @@ Vtiger_List_Js("MailManager_List_Js", {}, { parentRecord.push(value); } }); - var params = { - 'step' : "step1", - 'module' : "MailManager", - 'view' : "MassActionAjax", - 'mode' : "showComposeEmailForm", + var params = { + 'step' : "step1", + 'module' : "MailManager", + 'view' : "MassActionAjax", + 'mode' : "showComposeEmailForm", 'linktomodule' : 'true', - 'excluded_ids' : "[]", - 'to' : '["'+from+'"]' - } + 'excluded_ids' : "[]", + 'to' : '["'+from+'"]' + } if(parentRecord.length) { params['selected_ids'] = parentRecord; } else { params['selected_ids'] = "[]"; } - if(mailIds) { - self.openComposeEmailForm("replyall", params, {'subject' : replySubject, 'body' : replyBody, 'ids' : mailIds}); - } else { - self.openComposeEmailForm("reply", params, {'subject' : replySubject, 'body' : replyBody}); - } - }, - - showRelatedActions : function() { - var self = this; - var container = self.getContainer(); - var from = container.find('#mmFrom').val(); - var to = container.find('#mmTo').val(); - var folder = container.find('#mmFolder').val(); - var msgNo = container.find('#mmMsgNo').val(); - var msgUid = container.find('#mmMsgUid').val(); - - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'relation', - '_operationarg' : 'find', - '_mfrom' : from, - '_mto' : to, - '_folder' : folder, - '_msgno' : msgNo, - '_msguid' : msgUid - }; - - app.request.post({data : params}).then(function(err, data) { - container.find('#relationBlock').html(data.ui); - self.handleRelationActions(); - app.helper.showVerticalScroll(container.find('#relationBlock .recordScroll'), {autoHideScrollbar: true}); - var iframeHeight = jQuery('#mails_container').height() - (200 + jQuery('#mailManagerActions').height()); - var contentHeight = jQuery('#bodyFrame').contents().find('html').height(); - if (contentHeight > iframeHeight) { - jQuery('#bodyFrame').css({'height': iframeHeight}); - } else { - jQuery('#bodyFrame').css({'height': contentHeight}); - } - }); - }, - - openDraftFolder : function(page, query, type) { - var self = this; - app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); - if(!page) { - page = 0; - } - var container = self.getContainer(); + if(mailIds) { + self.openComposeEmailForm("replyall", params, {'subject' : replySubject, 'body' : replyBody, 'ids' : mailIds}); + } else { + self.openComposeEmailForm("reply", params, {'subject' : replySubject, 'body' : replyBody}); + } + }, + + showRelatedActions : function() { + var self = this; + var container = self.getContainer(); + var from = container.find('#mmFrom').val(); + var to = container.find('#mmTo').val(); + var folder = container.find('#mmFolder').val(); + var msgNo = container.find('#mmMsgNo').val(); + var msgUid = container.find('#mmMsgUid').val(); + + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'relation', + '_operationarg' : 'find', + '_mfrom' : from, + '_mto' : to, + '_folder' : folder, + '_msgno' : msgNo, + '_msguid' : msgUid + }; + + app.request.post({data : params}).then(function(err, data) { + container.find('#relationBlock').html(data.ui); + self.handleRelationActions(); + app.helper.showVerticalScroll(container.find('#relationBlock .recordScroll'), {autoHideScrollbar: true}); + var iframeHeight = jQuery('#mails_container').height() - (200 + jQuery('#mailManagerActions').height()); + var contentHeight = jQuery('#bodyFrame').contents().find('html').height(); + if (contentHeight > iframeHeight) { + jQuery('#bodyFrame').css({'height': iframeHeight}); + } else { + jQuery('#bodyFrame').css({'height': contentHeight}); + } + }); + }, + + openDraftFolder : function(page, query, type) { + var self = this; + app.helper.showProgress(app.vtranslate("JSLBL_Loading_Please_Wait")+"..."); + if(!page) { + page = 0; + } + var container = self.getContainer(); vtUtils.hideValidationMessage(container.find('#mailManagerSearchbox')); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'folder', - '_operationarg' : 'drafts', - '_page' : page - }; - if(query) { - params['q'] = query; - } - if(type) { - params['type'] = type; - } - app.request.post({"data" : params}).then(function(error, responseData) { - container.find('#mails_container').removeClass('col-lg-5'); - container.find('#mails_container').addClass('col-lg-12'); - container.find('#mails_container').html(responseData); - container.find('#mailPreviewContainer').addClass('hide'); - app.helper.hideProgress(); - self.registerMoveMailDropdownClickEvent(); - self.registerMailCheckBoxClickEvent(); - self.registerScrollForMailList(); - self.registerMainCheckboxClickEvent(); - self.registerDraftPrevPageClickEvent(); - self.registerDraftNextPageClickEvent(); - self.registerDraftMailClickEvent(); - self.registerDraftSearchEvent(); - self.registerDraftDeleteEvent(); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'folder', + '_operationarg' : 'drafts', + '_page' : page + }; + if(query) { + params['q'] = query; + } + if(type) { + params['type'] = type; + } + app.request.post({"data" : params}).then(function(error, responseData) { + container.find('#mails_container').removeClass('col-lg-5'); + container.find('#mails_container').addClass('col-lg-12'); + container.find('#mails_container').html(responseData); + container.find('#mailPreviewContainer').addClass('hide'); + app.helper.hideProgress(); + self.registerMoveMailDropdownClickEvent(); + self.registerMailCheckBoxClickEvent(); + self.registerScrollForMailList(); + self.registerMainCheckboxClickEvent(); + self.registerDraftPrevPageClickEvent(); + self.registerDraftNextPageClickEvent(); + self.registerDraftMailClickEvent(); + self.registerDraftSearchEvent(); + self.registerDraftDeleteEvent(); self.clearPreviewContainer(); - }); - }, - - registerDraftPrevPageClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#PreviousPageButton').click(function(e) { - var element = jQuery(e.currentTarget); - var page = element.data('page'); - self.openDraftFolder(page); - }); - }, - - registerDraftNextPageClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#NextPageButton').click(function(e) { - var element = jQuery(e.currentTarget); - var page = element.data('page'); - self.openDraftFolder(page); - }); - }, - - registerDraftMailClickEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('.draftEmail').click(function(e) { + }); + }, + + registerDraftPrevPageClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#PreviousPageButton').click(function(e) { + var element = jQuery(e.currentTarget); + var page = element.data('page'); + self.openDraftFolder(page); + }); + }, + + registerDraftNextPageClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#NextPageButton').click(function(e) { + var element = jQuery(e.currentTarget); + var page = element.data('page'); + self.openDraftFolder(page); + }); + }, + + registerDraftMailClickEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('.draftEmail').click(function(e) { e.preventDefault(); - var element = jQuery(e.currentTarget); - var msgNo = element.find('.msgNo').val(); - var params = { - 'module' : 'Emails', - 'view' : 'ComposeEmail', - 'mode' : 'emailEdit', - 'record' : msgNo - }; - app.helper.showProgress(app.vtranslate("JSLBL_Opening")+"..."); - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(err === null) { - var dataObj = jQuery(data); - var descriptionContent = dataObj.find('#iframeDescription').val(); - app.helper.showModal(data, {cb:function() { - var editInstance = new Emails_MassEdit_Js(); - editInstance.registerEvents(); - jQuery('#emailPreviewIframe').contents().find('html').html(descriptionContent); - jQuery("#emailPreviewIframe").height(jQuery('.email-body-preview').height()); - }}); - } - }); - }); - }, - - registerDraftSearchEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mm_searchButton').click(function() { - var query = container.find('#mailManagerSearchbox').val(); - if(query.trim() == '') { - vtUtils.showValidationMessage(container.find('#mailManagerSearchbox'), app.vtranslate('JSLBL_ENTER_SOME_VALUE')); - return false; - } else { - vtUtils.hideValidationMessage(container.find('#mailManagerSearchbox')); - } - var type = container.find('#searchType').val(); - self.openDraftFolder(0, query, type); - }); - }, - - registerDraftDeleteEvent : function() { - var self = this; - var container = self.getContainer(); - container.find('#mmDeleteMail').click(function() { - var msgNos = new Array(); - container.find('.mailCheckBox').each(function(i, ele) { - var element = jQuery(ele); - if(element.is(":checked")) { - msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); - } - }); - if(msgNos.length <= 0) { - app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); - return false; - } else { - app.helper.showConfirmationBox({'message' : app.vtranslate('LBL_DELETE_CONFIRMATION')}).then(function() { - app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'mail', - '_operationarg' : 'delete', - '_folder' : '__vt_drafts', - '_msgno' : msgNos.join(',') - }; - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - if(data.status) { - self.openDraftFolder(); + var element = jQuery(e.currentTarget); + var msgNo = element.find('.msgNo').val(); + var params = { + 'module' : 'Emails', + 'view' : 'ComposeEmail', + 'mode' : 'emailEdit', + 'record' : msgNo + }; + app.helper.showProgress(app.vtranslate("JSLBL_Opening")+"..."); + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(err === null) { + var dataObj = jQuery(data); + var descriptionContent = dataObj.find('#iframeDescription').val(); + app.helper.showModal(data, {cb:function() { + var editInstance = new Emails_MassEdit_Js(); + editInstance.registerEvents(); + jQuery('#emailPreviewIframe').contents().find('html').html(descriptionContent); + jQuery("#emailPreviewIframe").height(jQuery('.email-body-preview').height()); + }}); + } + }); + }); + }, + + registerDraftSearchEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mm_searchButton').click(function() { + var query = container.find('#mailManagerSearchbox').val(); + if(query.trim() == '') { + vtUtils.showValidationMessage(container.find('#mailManagerSearchbox'), app.vtranslate('JSLBL_ENTER_SOME_VALUE')); + return false; + } else { + vtUtils.hideValidationMessage(container.find('#mailManagerSearchbox')); + } + var type = container.find('#searchType').val(); + self.openDraftFolder(0, query, type); + }); + }, + + registerDraftDeleteEvent : function() { + var self = this; + var container = self.getContainer(); + container.find('#mmDeleteMail').click(function() { + var msgNos = new Array(); + container.find('.mailCheckBox').each(function(i, ele) { + var element = jQuery(ele); + if(element.is(":checked")) { + msgNos.push(element.closest('.mailEntry').find('.msgNo').val()); + } + }); + if(msgNos.length <= 0) { + app.helper.showAlertBox({message:app.vtranslate('JSLBL_NO_EMAILS_SELECTED')}); + return false; + } else { + app.helper.showConfirmationBox({'message' : app.vtranslate('LBL_DELETE_CONFIRMATION')}).then(function() { + app.helper.showProgress(app.vtranslate("JSLBL_Deleting")+"..."); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'mail', + '_operationarg' : 'delete', + '_folder' : '__vt_drafts', + '_msgno' : msgNos.join(',') + }; + app.request.post({data : params}).then(function(err,data) { + app.helper.hideProgress(); + if(data.status) { + self.openDraftFolder(); app.helper.showSuccessNotification({'message': app.vtranslate('JSLBL_MAILS_DELETED')}); - } - }); - }); - } - }); - }, - - updateUnreadCount : function(count, folder) { - var self = this; - var container = self.getContainer(); - if(!folder) { - folder = container.find('.mm_folder.active').data('foldername'); - } - var newCount; - if(typeof count == "number") { - newCount = parseInt(count); - } else { - var oldCount = parseInt(container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').text()); - if(count.substr(0, 1) == "+") { - newCount = oldCount + (parseInt(count.substr(1, (count.length - 1)))); - } else if(count.substr(0, 1) == "-") { - newCount = oldCount - (parseInt(count.substr(1, (count.length - 1)))); - } else { - newCount = parseInt(count); - } - } - container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').text(newCount); - if(newCount > 0) { - container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').removeClass("hide"); - } else { - container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').addClass("hide"); - } - }, - - handleRelationActions : function() { - var self = this; - var container = self.getContainer(); - container.find('#_mlinktotype').on('change', function(e) { - var element = jQuery(e.currentTarget); - var actionType = element.data('action'); - var module = element.val(); - var relatedRecord = self.getRecordForRelation(); - if(relatedRecord !== false) { - if(actionType == "associate") { - if(module == 'Emails') { - self.associateEmail(relatedRecord); - } else if(module == "ModComments") { - self.associateComment(relatedRecord); - } else if(module) { - self.createRelatedRecord(module); - } - } else if(module) { - self.createRelatedRecord(module); - } - } - self.resetRelationDropdown(); - }); - }, - - associateEmail : function(relatedRecord) { - var self = this; - var container = self.getContainer(); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'relation', - '_operationarg' : 'link', - '_mlinkto' : relatedRecord, - '_mlinktotype' : 'Emails', - '_folder' : container.find('#mmFolder').val(), - '_msgno' : container.find('#mmMsgNo').val() - } - app.helper.showProgress(app.vtranslate('JSLBL_Associating')+'...'); - app.request.post({data : params}).then(function(err,data) { - app.helper.hideProgress(); - }); - }, - - associateComment : function(relatedRecord) { - var self = this; - var container = self.getContainer(); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'relation', - '_operationarg' : 'commentwidget', - '_mlinkto' : relatedRecord, - '_mlinktotype' : 'ModComments', - '_folder' : container.find('#mmFolder').val(), - '_msgno' : container.find('#mmMsgNo').val() - } - app.helper.showProgress(app.vtranslate('JSLBL_Loading')+'...'); - app.request.post({data : params}).then(function(err, data) { - app.helper.hideProgress(); - app.helper.showModal(data, {'cb' : function(data) { - jQuery('[name="saveButton"]', data).on('click',function(e){ - e.preventDefault(); - self.saveComment(data); - }); - }}); - }); - }, - - createRelatedRecord : function(module) { - var self = this; - var container = self.getContainer(); - var relatedRecord = self.getRecordForRelation(); - var msgNo = container.find('#mmMsgNo').val(); - var folder = container.find('#mmFolder').val(); - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'relation', - '_operationarg' : 'create_wizard', - '_mlinktotype' : module, - '_folder' : folder, - '_msgno' : msgNo - }; - if(relatedRecord && relatedRecord !== null) { - params['_mlinkto'] = relatedRecord; - } - app.helper.showProgress(app.vtranslate('JSLBL_Loading')+'...'); - app.request.post({data : params}).then(function(err, data) { - app.helper.hideProgress(); - app.helper.showModal(data); - var form = jQuery('form[name="QuickCreate"]'); - app.event.trigger('post.QuickCreateForm.show',form); - vtUtils.applyFieldElementsView(form); + } + }); + }); + } + }); + }, + + updateUnreadCount : function(count, folder) { + var self = this; + var container = self.getContainer(); + if(!folder) { + folder = container.find('.mm_folder.active').data('foldername'); + } + var newCount; + if(typeof count == "number") { + newCount = parseInt(count); + } else { + var oldCount = parseInt(container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').text()); + if(count.substr(0, 1) == "+") { + newCount = oldCount + (parseInt(count.substr(1, (count.length - 1)))); + } else if(count.substr(0, 1) == "-") { + newCount = oldCount - (parseInt(count.substr(1, (count.length - 1)))); + } else { + newCount = parseInt(count); + } + } + container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').text(newCount); + if(newCount > 0) { + container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').removeClass("hide"); + } else { + container.find('.mm_folder[data-foldername="'+folder+'"]').find('.mmUnreadCountBadge').addClass("hide"); + } + }, + + handleRelationActions : function() { + var self = this; + var container = self.getContainer(); + container.find('#_mlinktotype').on('change', function(e) { + var element = jQuery(e.currentTarget); + var actionType = element.data('action'); + var module = element.val(); + var relatedRecord = self.getRecordForRelation(); + if(relatedRecord !== false) { + if(actionType == "associate") { + if(module == 'Emails') { + self.associateEmail(relatedRecord); + } else if(module == "ModComments") { + self.associateComment(relatedRecord); + } else if(module) { + self.createRelatedRecord(module); + } + } else if(module) { + self.createRelatedRecord(module); + } + } + self.resetRelationDropdown(); + }); + }, + + associateEmail : function(relatedRecord) { + var self = this; + var container = self.getContainer(); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'relation', + '_operationarg' : 'link', + '_mlinkto' : relatedRecord, + '_mlinktotype' : 'Emails', + '_folder' : container.find('#mmFolder').val(), + '_msgno' : container.find('#mmMsgNo').val() + } + app.helper.showProgress(app.vtranslate('JSLBL_Associating')+'...'); + app.request.post({data : params}).then(function(err,data) { + if (err === null) { + app.helper.showSuccessNotification({'message':''}); + app.helper.hideProgress(); + } else { + app.helper.showErrorNotification({"message": err}); + } + }); + }, + + associateComment : function(relatedRecord) { + var self = this; + var container = self.getContainer(); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'relation', + '_operationarg' : 'commentwidget', + '_mlinkto' : relatedRecord, + '_mlinktotype' : 'ModComments', + '_folder' : container.find('#mmFolder').val(), + '_msgno' : container.find('#mmMsgNo').val() + } + app.helper.showProgress(app.vtranslate('JSLBL_Loading')+'...'); + app.request.post({data : params}).then(function(err, data) { + app.helper.hideProgress(); + app.helper.showModal(data, {'cb' : function(data) { + jQuery('[name="saveButton"]', data).on('click',function(e){ + e.preventDefault(); + self.saveComment(data); + }); + }}); + }); + }, + + createRelatedRecord : function(module) { + var self = this; + var container = self.getContainer(); + var relatedRecord = self.getRecordForRelation(); + var msgNo = container.find('#mmMsgNo').val(); + var folder = container.find('#mmFolder').val(); + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'relation', + '_operationarg' : 'create_wizard', + '_mlinktotype' : module, + '_folder' : folder, + '_msgno' : msgNo + }; + if(relatedRecord && relatedRecord !== null) { + params['_mlinkto'] = relatedRecord; + } + app.helper.showProgress(app.vtranslate('JSLBL_Loading')+'...'); + app.request.post({data : params}).then(function(err, data) { + app.helper.hideProgress(); + app.helper.showModal(data); + var form = jQuery('form[name="QuickCreate"]'); + app.event.trigger('post.QuickCreateForm.show',form); + vtUtils.applyFieldElementsView(form); var moduleName = form.find('[name="module"]').val(); var targetClass = app.getModuleSpecificViewClass('Edit', moduleName); var targetInstance = new window[targetClass](); targetInstance.registerBasicEvents(form); - var newParams = {}; - newParams.callbackFunction = function() { - app.helper.hideModal(); - self.showRelatedActions(); - }; - newParams.requestParams = params; - self.quickCreateSave(form, newParams); - app.helper.hideProgress(); - }); - }, - - /** - * Register Quick Create Save Event - * @param {type} form - * @returns {undefined} - */ - quickCreateSave : function(form,invokeParams){ - var container = this.getContainer(); - var params = { - submitHandler: function(form) { - // to Prevent submit if already submitted - jQuery("button[name='saveButton']").attr("disabled","disabled"); - if(this.numberOfInvalids() > 0) { - return false; - } - var formData = jQuery(form).serialize(); - var requestParams = invokeParams.requestParams; - - // replacing default parameters for custom handlings in mail manager - formData = formData.replace('module=', 'xmodule=').replace('action=', 'xaction='); - if(requestParams) { - requestParams['_operationarg'] = 'create'; - if(requestParams['_mlinktotype'] == 'Events') { - requestParams['_mlinktotype'] = 'Calendar'; - } - jQuery.each(requestParams, function(key, value){ - formData += "&"+key+"="+value; - }); - } - - app.request.post({data:formData}).then(function(err,data){ - app.event.trigger("post.QuickCreateForm.save",data,jQuery(form).serializeFormData()); - if(err === null) { - app.helper.hideModal(); - app.helper.showSuccessNotification({"message":''}); - invokeParams.callbackFunction(data, err); - }else{ - app.helper.showErrorNotification({"message":err}); - } - }); - } - }; - form.vtValidate(params); - }, - - saveComment : function(data) { - var _mlinkto = jQuery('[name="_mlinkto"]', data).val(); - var _mlinktotype = jQuery('[name="_mlinktotype"]', data).val(); - var _msgno = jQuery('[name="_msgno"]', data).val(); - var _folder = jQuery('[name="_folder"]', data).val(); - var commentcontent = jQuery('[name="commentcontent"]', data).val(); - if(commentcontent.trim() == "") { - var validationParams = { - position: { - 'my' : 'bottom left', - 'at' : 'top left', - 'container' : jQuery('#commentContainer', data) - } - }; - var errorMsg = app.vtranslate('JSLBL_CANNOT_ADD_EMPTY_COMMENT'); - vtUtils.showValidationMessage(jQuery('[name="commentcontent"]', data), errorMsg, validationParams); - return false; - } else { - vtUtils.hideValidationMessage(jQuery('[name="commentcontent"]', data)); - } - var params = { - 'module' : 'MailManager', - 'view' : 'Index', - '_operation' : 'relation', - '_operationarg' : 'create', - 'commentcontent' : commentcontent, - '_mlinkto' : _mlinkto, - '_mlinktotype' : _mlinktotype, - '_msgno' : _msgno, - '_folder' : _folder - } - app.helper.showProgress(app.vtranslate('JSLBL_Saving')+'...'); - app.request.post({'data' : params}).then(function(err, response) { - app.helper.hideProgress(); - if(response.ui) { - app.helper.hideModal(); - } else { - app.helper.showAlertBox({'message' : app.vtranslate("JSLBL_FAILED_ADDING_COMMENT")}); - } - }); - }, - - getRecordForRelation : function() { - var self = this; - var container = self.getContainer(); - var element = container.find('[name="_mlinkto"]'); - if(element.length > 0) { - if(element.length == 1) { - element.attr('checked', true); - return element.val(); - } else { - selected = false; - element.each(function(i, ele) { - if(jQuery(ele).is(":checked")) { - selected = true; - } - }); - if(selected) { - return container.find('[name="_mlinkto"]:checked').val(); - } else { - app.helper.showAlertBox({'message' : app.vtranslate("JSLBL_PLEASE_SELECT_ATLEAST_ONE_RECORD")}); - return false; - } - } - } else { - return null; - } - }, - - resetRelationDropdown : function() { - this.getContainer().find('#_mlinktotype').val(""); - }, - - openComposeEmailForm : function(type, params, data) { - Vtiger_Index_Js.showComposeEmailPopup(params, function(response) { - var descEle = jQuery(response).find('#description'); - if(type == "reply" || type == "forward") { - jQuery('#subject', response).val(data.subject); - descEle.val(data.body); - jQuery('[name="cc"]', response).val(""); - jQuery('.ccContainer', response).addClass("hide"); - jQuery('#ccLink', response).css("display", ""); - } else if(type == "replyall") { - jQuery('#subject', response).val(data.subject); - descEle.val(data.body); - var mailIds = data.ids; - if(mailIds) { - jQuery('.ccContainer', response).removeClass("hide"); - jQuery('#ccLink', response).css("display", "none"); - jQuery('[name="cc"]', response).val(mailIds); - } - } else { - jQuery('#subject', response).val(""); - descEle.val(""); - jQuery('[name="cc"]', response).val(""); - jQuery('.ccContainer', response).addClass("hide"); - jQuery('#ccLink', response).css("display", ""); - } - }); - }, - + var newParams = {}; + newParams.callbackFunction = function() { + app.helper.hideModal(); + self.showRelatedActions(); + }; + newParams.requestParams = params; + self.quickCreateSave(form, newParams); + app.helper.hideProgress(); + }); + }, + + /** + * Register Quick Create Save Event + * @param {type} form + * @returns {undefined} + */ + quickCreateSave : function(form,invokeParams){ + var container = this.getContainer(); + var params = { + submitHandler: function(form) { + // to Prevent submit if already submitted + jQuery("button[name='saveButton']").attr("disabled","disabled"); + if(this.numberOfInvalids() > 0) { + return false; + } + var formData = jQuery(form).serialize(); + var requestParams = invokeParams.requestParams; + + // replacing default parameters for custom handlings in mail manager + formData = formData.replace('module=', 'xmodule=').replace('action=', 'xaction='); + if(requestParams) { + requestParams['_operationarg'] = 'create'; + if(requestParams['_mlinktotype'] == 'Events') { + requestParams['_mlinktotype'] = 'Calendar'; + } + jQuery.each(requestParams, function(key, value){ + formData += "&"+key+"="+value; + }); + } + + app.request.post({data:formData}).then(function(err,data){ + app.event.trigger("post.QuickCreateForm.save",data,jQuery(form).serializeFormData()); + if(err === null) { + app.helper.hideModal(); + app.helper.showSuccessNotification({"message":''}); + invokeParams.callbackFunction(data, err); + }else{ + app.helper.showErrorNotification({"message":err}); + } + }); + } + }; + form.vtValidate(params); + }, + + saveComment : function(data) { + var _mlinkto = jQuery('[name="_mlinkto"]', data).val(); + var _mlinktotype = jQuery('[name="_mlinktotype"]', data).val(); + var _msgno = jQuery('[name="_msgno"]', data).val(); + var _folder = jQuery('[name="_folder"]', data).val(); + var commentcontent = jQuery('[name="commentcontent"]', data).val(); + if(commentcontent.trim() == "") { + var validationParams = { + position: { + 'my' : 'bottom left', + 'at' : 'top left', + 'container' : jQuery('#commentContainer', data) + } + }; + var errorMsg = app.vtranslate('JSLBL_CANNOT_ADD_EMPTY_COMMENT'); + vtUtils.showValidationMessage(jQuery('[name="commentcontent"]', data), errorMsg, validationParams); + return false; + } else { + vtUtils.hideValidationMessage(jQuery('[name="commentcontent"]', data)); + } + var params = { + 'module' : 'MailManager', + 'view' : 'Index', + '_operation' : 'relation', + '_operationarg' : 'create', + 'commentcontent' : commentcontent, + '_mlinkto' : _mlinkto, + '_mlinktotype' : _mlinktotype, + '_msgno' : _msgno, + '_folder' : _folder + } + app.helper.showProgress(app.vtranslate('JSLBL_Saving')+'...'); + app.request.post({'data' : params}).then(function(err, response) { + app.helper.hideProgress(); + if(response.ui) { + app.helper.showSuccessNotification({'message':''}); + app.helper.hideModal(); + } else { + app.helper.showAlertBox({'message' : app.vtranslate("JSLBL_FAILED_ADDING_COMMENT")}); + } + }); + }, + + getRecordForRelation : function() { + var self = this; + var container = self.getContainer(); + var element = container.find('[name="_mlinkto"]'); + if(element.length > 0) { + if(element.length == 1) { + element.attr('checked', true); + return element.val(); + } else { + selected = false; + element.each(function(i, ele) { + if(jQuery(ele).is(":checked")) { + selected = true; + } + }); + if(selected) { + return container.find('[name="_mlinkto"]:checked').val(); + } else { + app.helper.showAlertBox({'message' : app.vtranslate("JSLBL_PLEASE_SELECT_ATLEAST_ONE_RECORD")}); + return false; + } + } + } else { + return null; + } + }, + + resetRelationDropdown : function() { + this.getContainer().find('#_mlinktotype').val(""); + }, + + openComposeEmailForm : function(type, params, data) { + Vtiger_Index_Js.showComposeEmailPopup(params, function(response) { + var descEle = jQuery(response).find('#description'); + if(type == "reply" || type == "forward") { + jQuery('#subject', response).val(data.subject); + descEle.val(data.body); + jQuery('[name="cc"]', response).val(""); + jQuery('.ccContainer', response).addClass("hide"); + jQuery('#ccLink', response).css("display", ""); + } else if(type == "replyall") { + jQuery('#subject', response).val(data.subject); + descEle.val(data.body); + var mailIds = data.ids; + if(mailIds) { + jQuery('.ccContainer', response).removeClass("hide"); + jQuery('#ccLink', response).css("display", "none"); + jQuery('[name="cc"]', response).val(mailIds); + } + } else { + jQuery('#subject', response).val(""); + descEle.val(""); + jQuery('[name="cc"]', response).val(""); + jQuery('.ccContainer', response).addClass("hide"); + jQuery('#ccLink', response).css("display", ""); + } + }); + }, + clearPreviewContainer : function() { var previewHtml = '<div class="mmListMainContainer">\n\ <center><strong>'+app.vtranslate('JSLBL_NO_MAIL_SELECTED_DESC')+'</center></strong></div>'; this.getContainer().find('#mailPreviewContainer').html(previewHtml); }, - + registerRefreshFolder : function() { var self = this; var container = self.getContainer(); @@ -1476,31 +1482,42 @@ Vtiger_List_Js("MailManager_List_Js", {}, { } }); }, - - registerSerchTypeChangeEvent : function() { - var container = this.getContainer(); - container.on('change', '#searchType', function(e){ - var element = jQuery(e.currentTarget); - var searchBox = jQuery('#mailManagerSearchbox'); - if(element.val() == 'ON'){ - searchBox.addClass('dateField'); - searchBox.parent().append('<span class="date-addon input-group-addon"><i class="fa fa-calendar"></i></span>'); - vtUtils.registerEventForDateFields(searchBox); - } else { - searchBox.datepicker('remove'); - searchBox.removeClass('dateField'); - searchBox.parent().find('.date-addon').remove(); - } - }); - }, - - registerEvents : function() { - var self = this; - self.loadFolders(); - self.registerComposeEmail(); - self.registerSettingsEdit(); - self.registerInitialLayout(); + + registerSearchTypeChangeEvent : function() { + var container = this.getContainer(); + container.on('change', '#searchType', function(e){ + var element = jQuery(e.currentTarget); + var searchBox = jQuery('#mailManagerSearchbox'); + if(element.val() == 'ON'){ + searchBox.addClass('dateField'); + searchBox.parent().append('<span class="date-addon input-group-addon"><i class="fa fa-calendar"></i></span>'); + vtUtils.registerEventForDateFields(searchBox); + } else { + searchBox.datepicker('remove'); + searchBox.removeClass('dateField'); + searchBox.parent().find('.date-addon').remove(); + } + }); + }, + + registerPostMailSentEvent: function () { + app.event.on('post.mail.sent', function (event, data) { + var resultEle = jQuery(data); + var success = resultEle.find('.mailSentSuccessfully'); + if (success.length > 0) { + app.helper.showModal(data); + } + }); + }, + + registerEvents : function() { + var self = this; + self.loadFolders(); + self.registerComposeEmail(); + self.registerSettingsEdit(); + self.registerInitialLayout(); self.registerRefreshFolder(); - self.registerSerchTypeChangeEvent(); - } + self.registerSearchTypeChangeEvent(); + self.registerPostMailSentEvent(); + } }); \ No newline at end of file