PATH:
home
/
letacommog
/
crmleta
/
layouts
/
v7
/
modules
/
Settings
/
CustomerPortal
/
resources
/*+*********************************************************************************** * The contents of this file are subject to the vtiger CRM Public License Version 1.0 * ("License"); You may not use this file except in compliance with the License * The Original Code is: vtiger CRM Open Source * The Initial Developer of the Original Code is vtiger. * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. *************************************************************************************/ Vtiger.Class('Settings_Customer_Portal_Js', {}, { //This will store the CustomerPortal Form customerPortalForm: false, //store the class name for customer portal module row rowClass: 'portalModuleRow', init: function () { this.addComponents(); }, addComponents: function () { this.addModuleSpecificComponent('Index', 'Vtiger', app.getParentModuleName()); }, /** * Function to get the customerPortal form */ getForm: function () { if (this.customerPortalForm == false) { this.customerPortalForm = jQuery('#customerPortalForm'); } return this.customerPortalForm; }, /** * Function to regiser the event to make the portal modules list sortable */ makeModulesListSortable: function () { var thisInstance = this; var modulesTable = jQuery('#portalModulesTable'); modulesTable.sortable({ 'containment': modulesTable, 'items': 'li:not(".unsortable")', 'revert': true, 'tolerance': 'pointer', 'dealy': '3000', 'helper': function (e, ui) { //while dragging helper elements td element will take width as contents width //so we are explicity saying that it has to be same width so that element will not //look like distrubed jQuery('#savePortalInfo').trigger('change'); ui.children().each(function (index, element) { element = jQuery(element); element.width(element.width()); }) return ui; }, }); }, /** * Function which will update sequence numbers of portal modules list by order */ updatePortalModulesListByOrder: function () { var form = this.getForm(); jQuery('li.portalModuleRow', form).each(function (index, domElement) { var portalModuleRow = jQuery(domElement); var tabId = portalModuleRow.data('id'); var sequenceEle = portalModuleRow.find('[name="portalModulesInfo['+tabId+'][sequence]"]'); var expectedRowSequence = (index+1); var actualRowSequence = sequenceEle.val(); if (expectedRowSequence != actualRowSequence) { return sequenceEle.val(expectedRowSequence); } }); }, /* * function to save the customer portal settings * @params: form - customer portal form. */ saveCustomerPortal: function (form) { var aDeferred = jQuery.Deferred(); app.helper.showProgress(); var params = this.sanitizeFormData(form); params['module'] = app.getModuleName(); params['parent'] = app.getParentModuleName(); params['action'] = 'Save'; app.request.post({data: params}).then(function (error, data) { app.helper.hideProgress(); if (data) { aDeferred.resolve(data); } else { aDeferred.reject(error); } } ); return aDeferred.promise(); }, sanitizeFormData: function (form) { var formData = form.serializeFormData(); var modules = jQuery('input.enabledModules'); var enabledModules = {}; jQuery.each(modules, function (i, module) { if (jQuery(module).is(":checked")) { enabledModules[jQuery(module).attr('name')] = 1; } else { enabledModules[jQuery(module).attr('name')] = 0; } }); formData['enableModules'] = JSON.stringify(enabledModules); var portalModules = jQuery('ul#portalModulesTable li.portalModuleRow'); var selectedFields = {}; var relatedModuleInfo = {}; var recordsVisible = {}; var recordPermissionsInfo = {}; var isAllMandatoryFieldsSelected = function (mandatoryFields, selectedFields) { var containsAllMandatory = true; jQuery.each(mandatoryFields, function (i, field) { if (!selectedFields.hasOwnProperty(field)) { containsAllMandatory = false; } }); return containsAllMandatory; } var returnFormData = true; var message = ''; jQuery.each(portalModules, function (index, element) { var mandatoryFields = []; var list = element.attributes; var moduleName = list['data-module'].value; if (moduleName != 'Dashboard') { var moduleFields = jQuery('input[name="availableFields_'+moduleName+'"]').val(); if (typeof moduleFields != 'undefined') { var allFields = JSON.parse(moduleFields); jQuery.each(allFields, function (i, fields) { if (fields.mandatory) mandatoryFields.push(fields.fieldname); }); var fieldInfo = jQuery('input[name="selectedFields_'+moduleName+'"]').val(); if (fieldInfo != 'null' && isAllMandatoryFieldsSelected(mandatoryFields, JSON.parse(fieldInfo))) { selectedFields[moduleName] = fieldInfo; } else { returnFormData = false; message = app.vtranslate('JS_MANDATORY_FIELDS_MISSING'); } var relModuleInfo = jQuery('input[name="relatedModules_'+moduleName+'"]').val(); if (typeof relModuleInfo != 'undefined') { relatedModuleInfo[moduleName] = relModuleInfo; } var recordVisible = jQuery('.portal-record-privilege').find('input[name="recordvisible_'+moduleName+'"]').serialize(); if (typeof recordVisible != 'undefined') { recordsVisible[moduleName] = recordVisible.split('=')[1]; } var recordPermissions = jQuery('input[name="recordPermissions_'+moduleName+'"]').val(); if (typeof recordPermissions !== 'undefined') { recordPermissionsInfo[moduleName] = JSON.parse(recordPermissions); } } } }); if (!returnFormData) { app.helper.showErrorNotification({"message": message}); return false } var activeWidgets = {}; var defaultWidgets = JSON.parse(jQuery('input[name="defaultWidgets"]').val()); var defaultWidgetModules = ['HelpDesk', 'Faq', 'Documents']; var widgetsInfo = jQuery("input.widgetsInfo"); jQuery.each(widgetsInfo, function (index, widget) { var element = jQuery(widget); if (element.is(":checked")) { activeWidgets[element.attr('id')] = 1; } else { activeWidgets[element.attr('id')] = 0; } }); defaultWidgetModules.forEach(function (module) { if (activeWidgets[module] === undefined) activeWidgets[module] = parseInt(defaultWidgets.widgets[module]); }); if (widgetsInfo.length === 0) { activeWidgets = defaultWidgets.widgets; } formData['moduleFieldsInfo'] = selectedFields; formData['relatedModuleList'] = relatedModuleInfo; formData['recordsVisible'] = recordsVisible; formData['activeWidgets'] = JSON.stringify(activeWidgets); formData['recordPermissions'] = recordPermissionsInfo; return formData; }, activateNavPills: function () { var thisInstance = this; jQuery('#portalModulesTable li').on('click', function (e) { var previousTab = jQuery("li[class='portalModuleRow cp-tabs ui-sortable-handle active']").data('module'); var currentTarget = jQuery(e.currentTarget); var targetModule = jQuery(currentTarget).data('module'); if (typeof previousTab == 'undefined') { previousTab = 'Dashboard'; jQuery('.portalModuleRow[data-module="'+previousTab+'"]').addClass('bgColor') } if (previousTab != targetModule) { jQuery('.portalModuleRow[data-module="'+previousTab+'"]').addClass('bgColor'); jQuery('.portalModuleRow').removeClass('active'); jQuery(currentTarget).removeClass('bgColor'); jQuery(currentTarget).addClass('active'); var params = { "parent": "Settings", "module": "CustomerPortal", "targetModule": targetModule, "view": "EditAjax" }; if (jQuery('#moduleData_'+targetModule).length > 0) { if (targetModule != 'Dashboard') { jQuery('#fieldContent_'+targetModule).removeClass('hide'); jQuery('#fieldContent_'+targetModule).addClass('show'); if (previousTab == 'Dashboard') { jQuery('#dashboardContent').removeClass('show'); jQuery('#dashboardContent').addClass('hide'); } else { jQuery('#fieldContent_'+previousTab).removeClass('show'); jQuery('#fieldContent_'+previousTab).addClass('hide'); thisInstance.registerRecordPermissionsEvent(); thisInstance.registerDisableAddFieldsEvent(thisInstance.getForm(), targetModule); thisInstance.registerEnableAddFieldsEvent(thisInstance.getForm(), targetModule); } } else { jQuery('#dashboardContent').removeClass('hide'); jQuery('#dashboardContent').addClass('show'); jQuery('#fieldContent_'+previousTab).removeClass('show'); jQuery('#fieldContent_'+previousTab).addClass('hide'); } } else { app.request.post({data: params}).then(function (error, data) { if (targetModule != 'Dashboard') { jQuery('#fieldContent_'+targetModule).removeClass('hide'); jQuery('#fieldContent_'+targetModule).addClass('show'); if (previousTab == 'Dashboard') { jQuery('#dashboardContent').removeClass('show'); jQuery('#dashboardContent').addClass('hide'); } else { jQuery('#fieldContent_'+previousTab).removeClass('show'); jQuery('#fieldContent_'+previousTab).addClass('hide'); } jQuery('#fieldContent_'+targetModule).html(data); } else { jQuery('#dashboardContent').removeClass('hide'); jQuery('#dashboardContent').addClass('show'); jQuery('#fieldContent_'+previousTab).removeClass('show'); jQuery('#fieldContent_'+previousTab).addClass('hide'); } vtUtils.showSelect2ElementView(jQuery('#addField_'+targetModule), { _maximumSelectionSize: 7, dropdownCss: { 'z-index': 0 } }); thisInstance.updateFieldInfo(targetModule); thisInstance.registerAddFieldAction(); thisInstance.registerDeleteField(targetModule); thisInstance.registerRelatedModuleInfoEvent(targetModule); thisInstance.registerRecordPermissionsEvent(); thisInstance.registerDisableAddFieldsEvent(thisInstance.getForm(), targetModule); thisInstance.registerEnableAddFieldsEvent(thisInstance.getForm(), targetModule); }); } } }); thisInstance.registerFieldsToggler(); }, updateFieldInfo: function (targetModule) { var thisInstance = this; var allowedModules = ['HelpDesk', 'Assets']; if (targetModule != 'Dashboard') { var defaultFields = JSON.parse(jQuery('input[name="availableFields_'+targetModule+'"]').val()); var selectedFieldss = JSON.parse(jQuery('input[name="selectedFields_'+targetModule+'"]').val()); var selectedFields = []; if (selectedFieldss) { for (var x in selectedFieldss) { selectedFields.push(x); } var alreadySelectedFields = {}; jQuery.each(selectedFieldss, function (i, field) { alreadySelectedFields[i] = selectedFieldss[i]; }); } jQuery.each(defaultFields, function (index, value) { var fieldStatusValue = 0; if (jQuery.inArray(value['fieldname'], selectedFields) === -1) { if (value['mandatory'] && value['iseditable']) jQuery('select#addField_'+targetModule).append('<option value="'+value['fieldname']+'##'+value['fieldlabel']+'">'+value['fieldlabel']+'*</option>'); else jQuery('select#addField_'+targetModule).append('<option value="'+value['fieldname']+'##'+value['fieldlabel']+'">'+value['fieldlabel']+'</option>'); } else { fieldStatusValue = parseInt(alreadySelectedFields[value['fieldname']]); var divElement = ''; if (value['mandatory']) { if (allowedModules.indexOf(targetModule) >= 0) { if (value['iseditable']) { if (fieldStatusValue > 0) { divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper"><div class="portal-fields-switch portal-fields-switchOn" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'"></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'<span class="redColor">*</span></div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button type="button" class="btn btn-sm portal-deletefield" disabled="disabled"><i class="fa fa-times disabled"></i></button></span></div></div></div>'; } else { divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper"><div class="portal-fields-switch portal-fields" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'"></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'<span class="redColor">*</span></div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button type="button" class="btn btn-sm portal-deletefield" disabled="disabled"><i class="fa fa-times disabled"></i></button></span></div></div></div>'; } } else { divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper switch-disabled"><div class="portal-fields-switch portal-fields" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'" disabled></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'<span class="redColor">*</span></div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button type="button" class="btn btn-sm portal-deletefield" disabled="disabled"><i class="fa fa-times disabled"></i></button></span></div></div></div>'; } } else { fieldStatusValue = 0; divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper switch-disabled"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'" disabled></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'<span class="redColor">*</span></div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield" disabled="disabled"><i class="fa fa-times"></i></button></span></div></div></div>'; } } else { if (value['iseditable'] && allowedModules.indexOf(targetModule) >= 0) { if (fieldStatusValue) { divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper"><div class="portal-fields-switch portal-fields-switchOn" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'"></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'</div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield"><i class="fa fa-times"></i></button></span></div></div></div>'; } else { divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'"></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'</div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield"><i class="fa fa-times"></i></button></span></div></div></div>'; } } else { fieldStatusValue = 0; divElement = '<div id="'+targetModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper switch-disabled"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+value['fieldname']+'_'+targetModule+'" disabled></div></div><div class="col-sm-8 portal-fieldName-wrapper"><input type="hidden" name="'+targetModule+'_fieldStatus" value="'+fieldStatusValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'</div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield"><i class="fa fa-times"></i></button></span></div></div></div>'; } } jQuery('#fieldRows_'+targetModule).append(divElement); } }); } }, registerAddFieldAction: function () { var thisInstance = this; var allowedModules = ['HelpDesk', 'Assets']; var currentModule = jQuery("li.portalModuleRow.active").data('module'); jQuery('#addField_'+currentModule).select2({ placeholder: app.vtranslate("JS_ADD_FIELD") }); jQuery('#addFieldButton_'+currentModule).on('click', function (e) { e.preventDefault(); var publishFields = jQuery('#addField_'+currentModule).val(); var defaultFields = JSON.parse(jQuery('input[name="availableFields_'+currentModule+'"]').val()); if (publishFields != undefined) { var publishedFields = {}; for (var i = 0; i < publishFields.length; i++) { var fieldInfo = publishFields[i].split('##'); jQuery.each(defaultFields, function (index, value) { var sliderValue = 0; if (value['fieldname'] == fieldInfo[0]) { if (value['mandatory']) { sliderValue = value['iseditable']; if (allowedModules.indexOf(currentModule) >= 0) { if (value['iseditable']) { var divElement = '<div id="'+currentModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper"><div class="portal-fields-switch portal-fields-switchOn" name="'+value['fieldname']+'" id="'+currentModule+'_'+value['fieldname']+'"></div></div><div class="col-sm-8" style="padding-top: 5px; padding-left: 15px; padding-right: 0px;"><input type="hidden" name="'+currentModule+'_fieldStatus" value="'+sliderValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'<span class="redColor">*</span></div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield" disabled><i class="fa fa-times"></i></button></span></div></div></div>'; } else { sliderValue = 0; var divElement = '<div id="'+currentModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper" style=""><div class="col-sm-2 portal-fieldInfo-sliderWrapper switch-disabled"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+currentModule+'_'+value['fieldname']+'" disabled></div></div><div class="col-sm-8" style="padding-top: 5px; padding-left: 15px; padding-right: 0px;"><input type="hidden" name="'+currentModule+'_fieldStatus" value="'+sliderValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'<span class="redColor">*</span></div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield" disabled><i class="fa fa-times"></i></button></span></div></div></div>'; } } else { sliderValue = 0; var divElement = '<div id="'+currentModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper switch-disabled"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+currentModule+'_'+value['fieldname']+'" disabled></div></div><div class="col-sm-8" style="padding-top: 5px; padding-left: 15px; padding-right: 0px;"><input type="hidden" name="'+currentModule+'_fieldStatus" value="'+sliderValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'</div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield" disabled><i class="fa fa-times"></i></button></span></div></div></div>'; } } else { if (value['iseditable'] && allowedModules.indexOf(currentModule) >= 0) { sliderValue = 0; var divElement = '<div id="'+currentModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+currentModule+'_'+value['fieldname']+'" ></div></div><div class="col-sm-8" style="padding-top: 5px; padding-left: 15px; padding-right: 0px;"><input type="hidden" name="'+currentModule+'_fieldStatus" value="'+sliderValue+'" id='+value['fieldname']+'>'+value['fieldlabel']+'</div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield"><i class="fa fa-times"></i></button></span></div></div></div>'; } else { sliderValue = 0; var divElement = '<div id="'+currentModule+'_'+value['fieldname']+'" class="col-sm-12 portal-fieldInfo-wrapper"><div class="col-sm-2 portal-fieldInfo-sliderWrapper switch-disabled"><div class="portal-fields-switch" name="'+value['fieldname']+'" id="'+currentModule+'_'+value['fieldname']+'" disabled></div></div><div class="col-sm-8" style="padding-top: 5px; padding-left: 15px; padding-right: 0px;"><input type="hidden" name="'+currentModule+'_fieldStatus" value="'+sliderValue+'" id='+value['fieldname']+'_'+currentModule+'>'+value['fieldlabel']+'</div><div class="col-sm-2 "><span class="pull-right deleteField" data-label="'+value['fieldlabel']+'" data-name="'+value['fieldname']+'"><button class="btn btn-sm portal-deletefield"><i class="fa fa-times"></i></button></span></div></div></div>'; } } jQuery('#fieldRows_'+currentModule).append(divElement); publishedFields[value['fieldname']] = sliderValue; } }); } jQuery("#addField_"+currentModule).select2("val", ""); jQuery("#addFieldButton_"+currentModule).attr("disabled", "disabled"); thisInstance.registerUpdateSelectionEvent(publishedFields, currentModule); } }); }, registerUpdateSelectionEvent: function (latestselectedFields, currentModule) { var defaultFields = JSON.parse(jQuery('input[name="availableFields_'+currentModule+'"]').val()); var fields = JSON.parse(jQuery('input[name="selectedFields_'+currentModule+'"]').val()); var selectedFields = $.extend({}, fields, latestselectedFields); jQuery('select#addField_'+currentModule+' option').remove(); var finalSelectedFields = []; for (var x in selectedFields) { finalSelectedFields.push(x); } jQuery.each(defaultFields, function (index, value) { if (jQuery.inArray(value['fieldname'], finalSelectedFields) === -1) { if (value['mandatory'] && value['iseditable']) jQuery('select#addField_'+currentModule).append('<option value="'+value['fieldname']+'##'+value['fieldlabel']+'">'+value['fieldlabel']+'*</option>'); else jQuery('select#addField_'+currentModule).append('<option value="'+value['fieldname']+'##'+value['fieldlabel']+'">'+value['fieldlabel']+'</option>'); } }); jQuery('input[name="selectedFields_'+currentModule+'"]').val(JSON.stringify(selectedFields)); }, registerDeleteField: function (module) { jQuery('#fieldRows_'+module).on('click', '.deleteField', function (e) { e.preventDefault(); jQuery('#savePortalInfo').trigger('change'); var currentTarget = jQuery(e.currentTarget); var currentName = currentTarget.attr('data-name'); var element = jQuery(currentTarget).parents('div#'+module+'_'+currentName); var deletedColumn = currentName; var deletedColumnLabel = currentTarget.attr('data-label'); var availableFields = JSON.parse(jQuery('input[name="availableFields_'+module+'"]').val()); var mandatoryFields = []; jQuery.each(availableFields, function (index, fields) { if (fields.mandatory) { mandatoryFields.push(fields.fieldname); } }); if (mandatoryFields.indexOf(currentName) >= 0) { return false; } else { jQuery(element).remove(); } var selectedFields = JSON.parse(jQuery('input[name="selectedFields_'+module+'"]').val()); var fields = {}; for (var x in selectedFields) { if (x != currentName) { fields[x] = selectedFields[x]; } } jQuery('select#addField_'+module).append('<option value="'+deletedColumn+'">'+deletedColumnLabel+'</option>'); jQuery('input[name="selectedFields_'+module+'"]').val(JSON.stringify(fields)); }); }, registerSaveFunction: function () { var thisInstance = this; jQuery('#savePortalInfo').on('click', function (e) { e.preventDefault(); var form = thisInstance.getForm(); var renewalPeriod = form.find('[name=renewalPeriod]').val(); //update the sequence of customer portal modules thisInstance.updatePortalModulesListByOrder(); //save the customer portal settings if (form.valid()) { thisInstance.saveCustomerPortal(form).then( function (data) { if (data['success']) { var saveElement = jQuery("#savePortalInfo"); saveElement.attr('disabled', 'disabled'); app.helper.showSuccessNotification({"message": app.vtranslate('JS_PORTAL_INFO_SAVED')}); } }, function (error) { //TODO: Handle Error } ); } else { jQuery('html, body').animate({ scrollTop: form.closest("#listViewContent").offset().top }, 1000); } }); }, registerRelatedModuleInfoEvent: function (module) { jQuery("input.relmoduleinfo_"+module).change('checkbox', function (e) { var checkBox = jQuery(e.currentTarget); if (checkBox.is(":checked") == true) { checkBox.attr('value', 1); } else { checkBox.attr('value', 0); } var x = jQuery('input.relmoduleinfo_'+module); var list = []; jQuery.each(x, function (i, cb) { var o = {}; if (checkBox.data('relmodule') == cb.name && checkBox.is(":checked") == true) { cb.value = 1; } else if (checkBox.data('relmodule') == x && checkBox.is(":checked") == false) { cb.value = 0; } o.name = cb.name; o.value = cb.value; list.push(o); }); jQuery('input[name="relatedModules_'+module+'"]').val(JSON.stringify(list)) }); }, registerEventForAddCustomModule: function () { var thisInstance = this; jQuery("#addToPortalMenu").on('click', function () { var moduleValues = jQuery("select[name='custommodules']").val(); var customRelModules = JSON.parse(jQuery('#customRelModules').val()); var customModule = moduleValues.split('::'); jQuery("select[name='custommodules'] option").remove(); var tempModules = {} for (var tabid in customRelModules) { if (tabid != customModule[0]) { tempModules[tabid] = customRelModules[tabid]; jQuery("select[name='custommodules']").append('<option value="'+tabid+'::'+customRelModules[tabid]+'::16">'+customRelModules[tabid]+'</option>'); } } var li = "<li class='portalModuleRow bgColor' style='border-color: #ddd; border-image: none; border-style: solid; border-width: 0 0 1px 1px;' data-id='"+customModule[0]+"' data-sequence='"+customModule[2]+"' data-module='"+customModule[1]+"'><input type='hidden' name='portalModulesInfo["+customModule[0]+"][sequence]' value='"+customModule[2]+"' /><a href='javascript:void(0);' class='cp-modules'><img class='drag-portal-module' src='layouts/v7/resources/Images/drag.png' border='0' title='Drag And Drop To Reorder Portal Menu In Customer Portal'/> <input class='enabledModules portal-module-name' name="+customModule[0]+" type='checkbox' value='0'/> "+customModule[1]+"</a></li>"; jQuery('ul#portalModulesTable').append(li); jQuery('#customRelModules').val(JSON.stringify(tempModules)); jQuery("div.portal-dashboard").append("<div id='fieldContent_"+customModule[1]+"' class='hide'>"+customModule[1]+"</div>"); thisInstance.activateNavPills(); if (jQuery("select[name='custommodules'] option").length > 0) { jQuery("select[name='custommodules']").select2().trigger('change'); } else { jQuery("div#customModules").addClass('hide'); } }) }, registerFieldsToggler: function () { jQuery('.portal-dashboard').on('click', '.portal-fields-switch', function (e) { jQuery('#savePortalInfo').trigger('change'); var currentModule = jQuery("li.portalModuleRow.active").data('module'); var allowedModules = ['HelpDesk', 'Assets']; var moduleStatus = allowedModules.indexOf(currentModule) !== -1; var selectedFields = JSON.parse(jQuery('input[name="selectedFields_'+currentModule+'"]').val()); var element = jQuery(e.currentTarget); var fieldName = element.attr('name'); var editableStatus = jQuery(element).attr('disabled') == 'disabled' ? false : true; //check for if field is editable and compute condition along with moduleStatus var switchable = editableStatus && moduleStatus; if (switchable) { jQuery(element).toggleClass('portal-fields-switchOn'); selectedFields[fieldName] = selectedFields[fieldName] == 0 ? 1 : 0; jQuery('input[name="selectedFields_'+currentModule+'"]').val(JSON.stringify(selectedFields)); jQuery('input[name="'+currentModule+'_fieldStatus"][id="'+fieldName+'"]').val(selectedFields[fieldName]); } var lengthOfWritableFields = jQuery('input[name="'+currentModule+'_fieldStatus"][value="1"]').length; if (!lengthOfWritableFields) { changeRecordPermissionsEvent(true, currentModule); } else { changeRecordPermissionsEvent(false, currentModule); } }); changeRecordPermissionsEvent = function (disableAll, currentTab) { if (disableAll) { jQuery('#recordPrivilege_'+currentTab).find('input[type="checkbox"]').attr("disabled", "disabled").val(0).removeAttr('checked'); var permissionsArray = []; var createPermission = {create: "0"}; var editPermission = {edit: "0"}; permissionsArray.push(createPermission); permissionsArray.push(editPermission); jQuery('input[name="recordPermissions_'+currentTab+'"]').val(JSON.stringify(permissionsArray)); } else { var lengthOfDisabledPermissions = jQuery('#recordPrivilege_'+currentTab+' .recordpermissions').attr('disabled'); if (lengthOfDisabledPermissions !== undefined && lengthOfDisabledPermissions.length > 0) { jQuery('#recordPrivilege_'+currentTab).find('input[type="checkbox"]').removeAttr('disabled').val(1).prop('checked', 'checked'); var permissionsArray = []; var createPermission = {create: "1"}; var editPermission = {edit: "1"}; permissionsArray.push(createPermission); permissionsArray.push(editPermission); jQuery('input[name="recordPermissions_'+currentTab+'"]').val(JSON.stringify(permissionsArray)); } } } }, registerRecordPermissionsEvent: function () { jQuery("input.recordpermissions").change('checkbox', function (e) { var currentTab = jQuery("li.portalModuleRow.active").data('module'); var checkBox = jQuery(e.currentTarget); if (checkBox.is(":checked")) { checkBox.attr('value', 1); } else { checkBox.attr('value', 0); } var list = []; var x = jQuery("input.recordpermissions"); jQuery.each(x, function (i, cb) { var o = {}; o[cb.name] = cb.value; list.push(o); }); jQuery('input[name="recordPermissions_'+currentTab+'"]').val(JSON.stringify(list)); }); var permissionsElements = jQuery("input.recordpermissions"); var alreadySavedPermissions = []; var currentTab = jQuery("li.portalModuleRow.active").data('module'); jQuery.each(permissionsElements, function (i, element) { var o = {}; var name = jQuery(element).attr("name"); var value = jQuery(element).attr("value"); o[name] = value; alreadySavedPermissions.push(o); if (!parseInt(value) && jQuery('input[name="'+currentTab+'_fieldStatus"][value="1"]').length < 1) { jQuery('.recordpermissions[name="'+name+'"]').attr("disabled", "disabled"); } }); jQuery('input[name="recordPermissions_'+currentTab+'"]').val(JSON.stringify(alreadySavedPermissions)); }, registerFormChangeEvent: function (form) { jQuery(form).change(function (e) { var saveElement = jQuery("#savePortalInfo"); if (saveElement.attr('disabled')) { jQuery(saveElement).removeAttr('disabled'); } else { return false; } }); }, registerEnableAddFieldsEvent: function (form, targetModule) { var thisInstance = this; if (form === undefined) { form = thisInstance.getForm(); } jQuery(form).find('#moduleData_'+targetModule).on('change', function (e) { if (typeof e.val !== 'undefined') { if (e.val.length > 0) { jQuery("#addFieldButton_"+targetModule).removeAttr("disabled"); } else { jQuery("#addFieldButton_"+targetModule).attr("disabled", "disabled"); } } }); }, registerDisableAddFieldsEvent: function (form, targetModule) { var thisInstance = this; if (form === undefined) { form = thisInstance.getForm(); } jQuery("#addFieldButton_"+targetModule).attr("disabled", "disabled"); }, registerEvents: function (e) { jQuery("[rel='tooltip']").tooltip({placement: 'right', 'container': 'body'}); var thisInstance = this; thisInstance.activateNavPills(); thisInstance.registerSaveFunction(); var form = thisInstance.getForm(); thisInstance.registerFormChangeEvent(form); form.vtValidate(); //register all select2 Elements vtUtils.showSelect2ElementView(form.find('select.select2'), { maximumSelectionSize: 7, dropdownCss: { 'z-index': 100000 } }); jQuery('#portalAnnouncement[name="announcement"]').bind('keyup', function () { jQuery('#savePortalInfo').trigger('change'); }); jQuery('#portalAnnouncement[name="announcement"]').bind('input propertychange', function () { jQuery('#savePortalInfo').trigger('change'); }); jQuery('input[type="text"][name="renewalPeriod"]').bind('input propertychange', function () { jQuery('#savePortalInfo').trigger('change'); }); thisInstance.registerEventForAddCustomModule(); //To make customer portal modules list sortable thisInstance.makeModulesListSortable(); vtUtils.showSelect2ElementView(jQuery('#shortcuts'), { placeholder: app.vtranslate("JS_SELECT_SHORTCUT"), _maximumSelectionSize: 7, dropdownCss: { 'z-index': 0 } }); } }); Settings_Customer_Portal_Js('Settings_CustomerPortal_Index_Js', {}, {});
[+]
..
[-] CustomerPortal.js
[edit]