/*+*********************************************************************************** * The contents of this file are subject to the vtiger CRM Public License Version 1.0 * ("License"); You may not use this file except in compliance with the License * The Original Code is: vtiger CRM Open Source * The Initial Developer of the Original Code is vtiger. * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. *************************************************************************************/ jQuery.Class('Settings_Sharing_Access_Js', {}, { contentTable : false, contentsContainer : false, init : function() { this.setContentTable('.sharingAccessDetails').setContentContainer('#sharingAccessContainer'); }, setContentTable : function(element) { if(element instanceof jQuery){ this.contentTable = element; return this; } this.contentTable = jQuery(element); return this; }, setContentContainer : function(element) { if(element instanceof jQuery){ this.contentsContainer = element; return this; } this.contentsContainer = jQuery(element); return this; }, getContentTable : function() { return this.contentTable; }, getContentContainer : function() { return this.contentsContainer; }, getCustomRuleContainerClassName : function(parentModuleName) { return parentModuleName+'CustomRuleList'; }, showCustomRulesNextToElement : function(parentElement, rulesListElement) { var moduleName = parentElement.data('moduleName') var trElementForRuleList = jQuery(''); jQuery('td',trElementForRuleList).append(rulesListElement); jQuery('.ruleListContainer', trElementForRuleList).css('display', 'none'); parentElement.after(trElementForRuleList).addClass('collapseRow'); jQuery('.ruleListContainer', trElementForRuleList).slideDown('slow'); }, /* * function to get custom rules data based on the module * @params: forModule. */ getCustomRules : function(forModule) { var aDeferred = jQuery.Deferred(); var params = {} params['for_module'] = forModule; params['module'] = app.getModuleName(); params['parent'] = app.getParentModuleName(); params['view'] = 'IndexAjax'; params['mode'] = 'showRules'; AppConnector.request(params).then( function(data) { aDeferred.resolve(data); }, function(error) { //TODO : Handle error aDeferred.reject(error); } ); return aDeferred.promise(); }, save : function(data) { var aDeferred = jQuery.Deferred(); var progressIndicatorElement = jQuery.progressIndicator({ 'position' : 'html', 'blockInfo' : { 'enabled' : true } }); if(typeof data == 'undefined') { data = {}; } AppConnector.request(data).then( function(data){ progressIndicatorElement.progressIndicator({'mode' : 'hide'}); aDeferred.resolve(data); }, function(error, errorThrown){ progressIndicatorElement.progressIndicator({'mode' : 'hide'}); aDeferred.reject(error); } ) return aDeferred.promise(); }, /* * function to Save the Custom Rule */ saveCustomRule : function(form, e) { var thisInstance = this; var data = form.serializeFormData(); if(typeof data == 'undefined' ) { data = {}; } var progressIndicatorElement = jQuery.progressIndicator({ 'position' : 'html', 'blockInfo' : { 'enabled' : true } }); data.module = app.getModuleName(); data.parent = app.getParentModuleName(); data.action = 'IndexAjax'; data.mode = 'saveRule'; AppConnector.request(data).then( function(data) { progressIndicatorElement.progressIndicator({'mode':'hide'}); app.hideModalWindow(); thisInstance.displaySaveCustomRuleResponse(data); var moduleName = jQuery('[name="for_module"]', form).val(); thisInstance.loadCustomRulesList(moduleName); } ); }, /* * function to load the CustomRules List for the module after save the custom rule */ loadCustomRulesList : function(moduleName) { var thisInstance = this; var contentTable = this.getContentTable(); thisInstance.getCustomRules(moduleName).then( function(data){ var customRuleListContainer = jQuery('.'+thisInstance.getCustomRuleContainerClassName(moduleName),contentTable); customRuleListContainer.find('td.customRuleContainer').html(data); }, function(error){ //TODO: Handle Error } ); }, /* * Function to display the SaveCustomRule response message */ displaySaveCustomRuleResponse : function(data) { var thisInstance = this; var success = data['success']; var params = {}; if(success) { params = { text: app.vtranslate('JS_CUSTOM_RULE_SAVED_SUCCESSFULLY'), type: 'success' } } else { params = { text: app.vtranslate('JS_CUSTOM_RULE_SAVING_FAILED'), type: 'error' } } thisInstance.showNotify(params); }, //This will show the notification message of SaveCustomRule using pnotify showNotify : function(customParams) { var params = { text: customParams.text, type: customParams.type, width: '30%', delay: '3000' }; Vtiger_Helper_Js.showPnotify(params); }, editCustomRule : function(url) { var thisInstance = this; var progressIndicatorElement = jQuery.progressIndicator({ 'position' : 'html', 'blockInfo' : { 'enabled' : true } }); app.showModalWindow(null, url, function(modalContainer){ var form = jQuery('#editCustomRule'); form.on('submit', function(e) { //To stop the submit of form e.preventDefault(); var formElement = jQuery(e.currentTarget); thisInstance.saveCustomRule(formElement, e); }) }); }, /* * function to delete Custom Rule from the list * @params: deleteElement. */ deleteCustomRule : function(deleteElement) { var deleteUrl = deleteElement.data('url'); var currentRow = deleteElement.closest('tr.customRuleEntries'); var message = app.vtranslate('LBL_DELETE_CONFIRMATION'); Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(function(data) { AppConnector.request(deleteUrl).then( function(data){ if(data.success == true){ currentRow.fadeOut('slow'); var customRuleTable = currentRow.closest('table .customRuleTable'); //after delete the custom rule, update the sequence number of existing rules var nextRows = currentRow.nextAll('tr.customRuleEntries'); if(nextRows.length > 0){ jQuery.each(nextRows,function(i,element) { var currentSequenceElement = jQuery(element).find('.sequenceNumber'); var updatedNumber = parseInt(currentSequenceElement.text())-1; currentSequenceElement.text(updatedNumber); }); } currentRow.remove(); var customRuleEntries = customRuleTable.find('.customRuleEntries'); //if there are no custom rule entries, we have to hide headers also and show the empty message div if(customRuleEntries.length < 1) { customRuleTable.find('.customRuleHeaders').fadeOut('slow').remove(); customRuleTable.parent().find('.recordDetails').removeClass('hide'); customRuleTable.addClass('hide'); } }else{ Vtiger_Helper_Js.showPnotify(data.error.message); } }); }, function(error, err){ } ); }, /* * function to register click event for radio buttons */ registerSharingAccessEdit : function() { var contentContainer = this.getContentContainer(); contentContainer.one('click','input:radio', function(e){ contentContainer.find('button:submit').removeClass('hide'); }); }, /* * Function to register change event for dependent modules privileges */ registerDependentModulesPrivilegesChange : function() { var thisInstance = this; var container = thisInstance.getContentContainer(); var contentTable = this.getContentTable(); var modulesList = JSON.parse(container.find('.dependentModules').val()); jQuery.each(modulesList, function(moduleName, dependentList) { var dependentPrivilege = contentTable.find('[data-module-name="'+moduleName+'"]').find('[data-action-state="Private"]'); dependentPrivilege.change(function(e) { var currentTarget = jQuery(e.currentTarget); if(currentTarget.is(':checked')) { var message = app.vtranslate('JS_DEPENDENT_PRIVILEGES_SHOULD_CHANGE'); bootbox.alert(message); jQuery.each(dependentList, function(index, module) { contentTable.find('[data-module-name="'+module+'"]').find('[data-action-state="Private"]').attr('checked', 'checked'); }) } }) }) }, registerEvents : function() { var thisInstance = this; var contentTable = this.getContentTable(); var contentContainer = this.getContentContainer(); thisInstance.registerSharingAccessEdit(); thisInstance.registerDependentModulesPrivilegesChange(); contentTable.on('click', 'td.triggerCustomSharingAccess', function(e){ var element = jQuery(e.currentTarget); var trElement = element.closest('tr'); var moduleName = trElement.data('moduleName'); var customRuleListContainer = jQuery('.'+thisInstance.getCustomRuleContainerClassName(moduleName),contentTable); if(customRuleListContainer.length > 0) { if(app.isHidden(customRuleListContainer)) { customRuleListContainer.show(); jQuery('.ruleListContainer', customRuleListContainer).slideDown('slow'); trElement.addClass('collapseRow'); element.find('button.arrowDown').addClass('hide'); element.find('button.arrowUp').removeClass('hide').addClass('show'); }else{ jQuery('.ruleListContainer', customRuleListContainer).slideUp('slow', function(e) { customRuleListContainer.css('display', 'none'); }); element.find('button.arrowUp').addClass('hide'); element.find('button.arrowDown').removeClass('hide').addClass('show'); trElement.removeClass('collapseRow'); } return; } var progressIndicatorElement = jQuery.progressIndicator({ 'position' : 'html', 'blockInfo' : { 'enabled' : true } }); thisInstance.getCustomRules(moduleName).then( function(data){ progressIndicatorElement.progressIndicator({'mode':'hide'}); thisInstance.showCustomRulesNextToElement(trElement, data); element.find('button.arrowDown').addClass('hide'); element.find('button.arrowUp').removeClass('hide').addClass('show'); }, function(error){ //TODO: Handle Error } ); }); contentTable.on('click', 'button.addCustomRule' , function(e) { var button = jQuery(e.currentTarget); thisInstance.editCustomRule(button.data('url')); }) contentTable.on('click', '.edit', function(e){ var editElement = jQuery(e.currentTarget); var editUrl = editElement.data('url'); thisInstance.editCustomRule(editUrl); }); contentTable.on('click', '.delete', function(e){ var deleteElement = jQuery(e.currentTarget); thisInstance.deleteCustomRule(deleteElement); }); contentContainer.on('submit', '#EditSharingAccess', function(e){ e.preventDefault(); var form = jQuery(e.currentTarget); var data = form.serializeFormData(); thisInstance.save(data).then( function(data) { contentContainer.find('button:submit').addClass('hide'); thisInstance.registerSharingAccessEdit(); var params = { text: app.vtranslate('JS_NEW_SHARING_RULES_APPLIED_SUCCESSFULLY'), type: 'success' }; thisInstance.showNotify(params); }, function(error,err){ } ); }); } }); jQuery(document).ready(function(){ var settingSharingAcessInstance = new Settings_Sharing_Access_Js(); settingSharingAcessInstance.registerEvents(); })