晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/www/crm/layouts/v7/modules/Settings/SharingAccess/resources/ |
Upload File : |
/*+***********************************************************************************
* 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_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('<tr class="'+this.getCustomRuleContainerClassName(moduleName)+'"><td class="customRuleContainer row-fluid" colspan="6"></td></tr>');
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';
app.request.get({'data' : params}).then(
function(err, data) {
if(err === null) {
aDeferred.resolve(data);
}else {
//TODO : Handle error
aDeferred.reject(error);
}
});
return aDeferred.promise();
},
save : function(data) {
var aDeferred = jQuery.Deferred();
app.helper.showProgress();
if(typeof data == 'undefined') {
data = {};
}
app.request.post({'data' : data}).then(
function(err, data){
app.helper.hideProgress();
if(err == null) {
aDeferred.resolve(data);
}else {
aDeferred.reject();
}
});
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 = {};
}
app.helper.showProgress();
data.module = app.getModuleName();
data.parent = app.getParentModuleName();
data.action = 'IndexAjax';
data.mode = 'saveRule';
app.request.post({'data' : data}).then(
function(err, data) {
app.helper.hideProgress();
if(err === null) {
app.helper.hideModal();
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 success = data['success'];
var params;
if(success) {
params = app.vtranslate('JS_CUSTOM_RULE_SAVED_SUCCESSFULLY');
} else {
params = app.vtranslate('JS_CUSTOM_RULE_SAVING_FAILED');
}
app.helper.showSuccessNotification({'message' : params})
},
editCustomRule : function(url) {
var thisInstance = this;
app.helper.showProgress();
app.request.get({'url' : url}).then(function(err, data){
app.helper.hideProgress();
if(err === null) {
var params = {
cb : 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);
})
}
};
app.helper.showModal(data, params);
}
});
},
/*
* 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');
app.helper.showConfirmationBox({'message' : message}).then(function(data) {
app.request.post({'url' : deleteUrl}).then(
function(err, data){
if(err === null){
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{
app.helper.showSuccessNotification({'message' : err.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('.saveSharingAccess').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');
app.helper.showAlertBox({'message': message});
jQuery.each(dependentList, function(index, module) {
contentTable.find('[data-module-name="'+module+'"]').find('[data-action-state="Private"]').prop('checked', true);
})
}
})
})
},
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(customRuleListContainer.css('display') === 'none') {
customRuleListContainer.show();
jQuery('.ruleListContainer', customRuleListContainer).slideDown('slow');
trElement.addClass('collapseRow');
element.find('button i').removeClass('fa-chevron-down').addClass('fa-chevron-up');
}else{
jQuery('.ruleListContainer', customRuleListContainer).slideUp('slow', function(e) {
customRuleListContainer.css('display', 'none');
});
element.find('button i').removeClass('fa-chevron-up').addClass('fa-chevron-down');
trElement.removeClass('collapseRow');
}
return;
}
app.helper.showProgress();
thisInstance.getCustomRules(moduleName).then(
function(data){
app.helper.hideProgress();
thisInstance.showCustomRulesNextToElement(trElement, data);
element.find('button i').removeClass('fa-chevron-down').addClass('fa-chevron-up');
});
});
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('.saveSharingAccess').addClass('hide');
thisInstance.registerSharingAccessEdit();
app.helper.showSuccessNotification({'message' : app.vtranslate('JS_NEW_SHARING_RULES_APPLIED_SUCCESSFULLY')});
},
function(error,err){
}
);
});
//scrollbar is not needed for shaing access
}
});
Settings_Sharing_Access_Js('Settings_SharingAccess_Index_Js',{},{
init : function() {
this._super();
this.addComponents();
},
addComponents : function() {
this.addModuleSpecificComponent('Index','Vtiger',app.getParentModuleName());
},
});