晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/public_html/crm/pkg/vtiger/modules/Import/templates/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.
************************************************************************************/
if (typeof(ImportJs) == 'undefined') {
/*
* Namespaced javascript class for Import
*/
ImportJs = {
toogleMergeConfiguration: function() {
var mergeChecked = jQuery('#auto_merge').is(':checked');
var duplicateMergeConfiguration = jQuery('#duplicates_merge_configuration');
if(mergeChecked) {
duplicateMergeConfiguration.show();
} else {
duplicateMergeConfiguration.hide();
}
},
checkFileType: function() {
var filePath = jQuery('#import_file').val();
if(filePath != '') {
var fileExtension = filePath.split('.').pop();
jQuery('#type').val(fileExtension);
ImportJs.handleFileTypeChange();
}
},
handleFileTypeChange: function() {
var fileType = jQuery('#type').val();
var delimiterContainer = jQuery('#delimiter_container');
var hasHeaderContainer = jQuery('#has_header_container');
if(fileType != 'csv') {
delimiterContainer.hide();
hasHeaderContainer.hide();
} else {
delimiterContainer.show();
hasHeaderContainer.show();
}
},
uploadAndParse: function() {
if(!ImportJs.validateFilePath()) return false;
if(!ImportJs.validateMergeCriteria()) return false;
return true;
},
registerImportClickEvent : function(){
jQuery('#importButton').on('click',function(e){
var result = ImportJs.sanitizeAndSubmit()
return result;
});
},
validateFilePath: function() {
var importFile = jQuery('#import_file');
var filePath = importFile.val();
if(jQuery.trim(filePath) == '') {
var errorMessage = app.vtranslate('JS_IMPORT_FILE_CAN_NOT_BE_EMPTY');
var params = {
text: errorMessage,
type: 'error'
};
Vtiger_Helper_Js.showMessage(params);
importFile.focus();
return false;
}
if(!ImportJs.uploadFilter("import_file", "csv|vcf")) {
return false;
}
if(!ImportJs.uploadFileSize("import_file")) {
return false;
}
return true;
},
uploadFilter: function(elementId, allowedExtensions) {
var obj = jQuery('#'+elementId);
if(obj) {
var filePath = obj.val();
var fileParts = filePath.toLowerCase().split('.');
var fileType = fileParts[fileParts.length-1];
var validExtensions = allowedExtensions.toLowerCase().split('|');
if(validExtensions.indexOf(fileType) < 0) {
var errorMessage = app.vtranslate('JS_SELECT_FILE_EXTENSION')+'\n' +validExtensions;
var params = {
text: errorMessage,
type: 'error'
};
Vtiger_Helper_Js.showMessage(params);
obj.focus();
return false;
}
}
return true;
},
uploadFileSize : function(elementId) {
var element = jQuery('#'+elementId);
var importMaxUploadSize = element.closest('td').data('importUploadSize');
var importMaxUploadSizeInMb = element.closest('td').data('importUploadSizeMb');
var uploadedFileSize = element.get(0).files[0].size;
if(uploadedFileSize > importMaxUploadSize){
var errorMessage = app.vtranslate('JS_UPLOADED_FILE_SIZE_EXCEEDS')+" "+importMaxUploadSizeInMb+ " MB." + app.vtranslate('JS_PLEASE_SPLIT_FILE_AND_IMPORT_AGAIN');
var params = {
text: errorMessage,
type: 'error'
};
Vtiger_Helper_Js.showMessage(params);
return false;
}
return true;
},
validateMergeCriteria: function() {
$mergeChecked = jQuery('#auto_merge').is(':checked');
if($mergeChecked) {
var selectedOptions = jQuery('#selected_merge_fields option');
if(selectedOptions.length == 0) {
var errorMessage = app.vtranslate('JS_PLEASE_SELECT_ONE_FIELD_FOR_MERGE');
var params = {
text: errorMessage,
'type': 'error'
};
Vtiger_Helper_Js.showMessage(params);
return false;
}
}
ImportJs.convertOptionsToJSONArray('#selected_merge_fields', '#merge_fields');
return true;
},
//TODO move to a common file
convertOptionsToJSONArray : function(objName, targetObjName) {
var obj = jQuery(objName);
var arr = [];
if(typeof(obj) != 'undefined' && obj[0] != '') {
for (i=0; i<obj[0].length; ++i) {
arr.push(obj[0].options[i].value);
}
}
if(targetObjName != 'undefined') {
var targetObj = $(targetObjName);
if(typeof(targetObj) != 'undefined') targetObj.val(JSON.stringify(arr));
}
return arr;
},
//TODO: move to a common file
copySelectedOptions : function(source, destination) {
var srcObj = jQuery(source);
var destObj = jQuery(destination);
if(typeof(srcObj) == 'undefined' || typeof(destObj) == 'undefined') return;
for (i=0;i<srcObj[0].length;i++) {
if (srcObj[0].options[i].selected == true) {
var rowFound = false;
var existingObj = null;
for (j=0;j<destObj[0].length;j++) {
if (destObj[0].options[j].value == srcObj[0].options[i].value) {
rowFound = true;
existingObj = destObj[0].options[j];
break;
}
}
if (rowFound != true) {
var opt = $('<option selected>');
opt.attr('value', srcObj[0].options[i].value);
opt.text(srcObj[0].options[i].text);
jQuery(destObj[0]).append(opt);
srcObj[0].options[i].selected = false;
rowFound = false;
} else {
if(existingObj != null) existingObj.selected = true;
}
}
}
},
//TODO move to a common file
removeSelectedOptions : function (objName) {
var obj = jQuery(objName);
if(obj == null || typeof(obj) == 'undefined') return;
for (i=obj[0].options.length-1;i>=0;i--) {
if (obj[0].options[i].selected == true) {
obj[0].options[i] = null;
}
}
},
sanitizeAndSubmit: function() {
if(!ImportJs.sanitizeFieldMapping()) return false;
if(!ImportJs.validateCustomMap()) return false;
return true;
},
sanitizeFieldMapping: function() {
var fieldsList = jQuery('.fieldIdentifier');
var mappedFields = {};
var errorMessage;
var params = {};
var mappedDefaultValues = {};
for(var i=0; i<fieldsList.length; ++i) {
var fieldElement = jQuery(fieldsList.get(i));
var rowId = jQuery('[name=row_counter]', fieldElement).get(0).value;
var selectedFieldElement = jQuery('select option:selected', fieldElement);
var selectedFieldName = selectedFieldElement.val();
var selectedFieldDefaultValueElement = jQuery('#'+selectedFieldName+'_defaultvalue', fieldElement);
var defaultValue = '';
if(selectedFieldDefaultValueElement.attr('type') == 'checkbox') {
defaultValue = selectedFieldDefaultValueElement.is(':checked');
} else {
defaultValue = selectedFieldDefaultValueElement.val();
}
if(selectedFieldName != '') {
if(selectedFieldName in mappedFields) {
errorMessage = app.vtranslate('JS_FIELD_MAPPED_MORE_THAN_ONCE')+" " + selectedFieldElement.data('label');
params = {
text: errorMessage,
'type': 'error'
};
Vtiger_Helper_Js.showMessage(params);
return false;
}
mappedFields[selectedFieldName] = rowId-1;
if(defaultValue != '') {
mappedDefaultValues[selectedFieldName] = defaultValue;
}
}
}
var mandatoryFields = JSON.parse(jQuery('#mandatory_fields').val());
var moduleName = app.getModuleName();
if(moduleName == 'PurchaseOrder' || moduleName == 'Invoice' || moduleName == 'Quotes' || moduleName == 'SalesOrder') {
mandatoryFields.hdnTaxType = app.vtranslate('Tax Type');
}
var missingMandatoryFields = [];
for(var mandatoryFieldName in mandatoryFields) {
if(mandatoryFieldName in mappedFields) {
continue;
} else {
missingMandatoryFields.push('"'+mandatoryFields[mandatoryFieldName]+'"');
}
}
if(missingMandatoryFields.length > 0) {
errorMessage = app.vtranslate('JS_MAP_MANDATORY_FIELDS')+ missingMandatoryFields.join(',');
params = {
text: errorMessage,
'type': 'error'
};
Vtiger_Helper_Js.showMessage(params);
return false;
}
jQuery('#field_mapping').val(JSON.stringify(mappedFields));
jQuery('#default_values').val(JSON.stringify(mappedDefaultValues));
return true;
},
validateCustomMap: function() {
var errorMessage;
var params = {};
var saveMap = jQuery('#save_map').is(':checked');
if(saveMap) {
var mapName = jQuery('#save_map_as').val();
if(jQuery.trim(mapName) == '') {
errorMessage = app.vtranslate('JS_MAP_NAME_CAN_NOT_BE_EMPTY');
params = {
text: errorMessage,
'type': 'error'
};
Vtiger_Helper_Js.showMessage(params);
return false;
}
var mapOptions = jQuery('#saved_maps option');
for(var i=0; i<mapOptions.length; ++i) {
var mapOption = jQuery(mapOptions.get(i));
if(mapOption.html() == mapName) {
errorMessage = app.vtranslate('JS_MAP_NAME_ALREADY_EXISTS');
params = {
text: errorMessage,
'type': 'error'
};
Vtiger_Helper_Js.showMessage(params);
return false;
}
}
}
return true;
},
loadSavedMap: function() {
var selectedMapElement = jQuery('#saved_maps option:selected');
var mapId = selectedMapElement.attr('id');
var fieldsList = jQuery('.fieldIdentifier');
var deleteMapContainer = jQuery('#delete_map_container');
fieldsList.each(function(i, element) {
var fieldElement = jQuery(element);
jQuery('[name=mapped_fields]', fieldElement).val('');
});
if(mapId == -1) {
deleteMapContainer.hide();
return;
}
deleteMapContainer.show();
var mappingString = selectedMapElement.val()
if(mappingString == '') return;
var mappingPairs = mappingString.split('&');
var mapping = {};
for(var i=0; i<mappingPairs.length; ++i) {
var mappingPair = mappingPairs[i].split('=');
var header = mappingPair[0];
header = header.replace(/\/eq\//g, '=');
header = header.replace(/\/amp\//g, '&');
mapping["'"+header+"'"] = mappingPair[1];
}
fieldsList.each(function(i, element) {
var fieldElement = jQuery(element);
var mappedFields = jQuery('[name=mapped_fields]', fieldElement);
var rowId = jQuery('[name=row_counter]', fieldElement).get(0).value;
var headerNameElement = jQuery('[name=header_name]', fieldElement).get(0);
var headerName = jQuery(headerNameElement).html();
if("'"+headerName+"'" in mapping) {
mappedFields.val(mapping["'"+headerName+"'"]);
} else if(rowId in mapping) {
mappedFields.val($rowId);
}
mappedFields.trigger('liszt:updated');
ImportJs.loadDefaultValueWidget(fieldElement.attr('id'));
});
},
deleteMap : function(module) {
if(confirm(app.vtranslate('LBL_DELETE_CONFIRMATION'))) {
var selectedMapElement = jQuery('#saved_maps option:selected');
var mapId = selectedMapElement.attr('id');
var status = jQuery('#status');
status.show();
var postData = {
"module": module,
"view": 'Import',
"mode": 'deleteMap',
"mapid": mapId
}
AppConnector.request(postData).then(
function(data){
jQuery('#savedMapsContainer').html(data);
status.hide();
var parent = jQuery("#saved_maps");
app.changeSelectElementView(parent);
},
function(error,err){
}
);
}
},
loadDefaultValueWidget: function(rowIdentifierId) {
var affectedRow = jQuery('#'+rowIdentifierId);
if(typeof affectedRow == 'undefined' || affectedRow == null) return;
var selectedFieldElement = jQuery('[name=mapped_fields]', affectedRow).get(0);
var selectedFieldName = jQuery(selectedFieldElement).val();
var defaultValueContainer = jQuery(jQuery('[name=default_value_container]', affectedRow).get(0));
var allDefaultValuesContainer = jQuery('#defaultValuesElementsContainer');
if(defaultValueContainer.children.length > 0) {
var copyOfDefaultValueWidget = jQuery(':first', defaultValueContainer).detach();
copyOfDefaultValueWidget.appendTo(allDefaultValuesContainer);
}
var selectedFieldDefValueContainer = jQuery('#'+selectedFieldName+'_defaultvalue_container', allDefaultValuesContainer);
var defaultValueWidget = selectedFieldDefValueContainer.detach();
defaultValueWidget.appendTo(defaultValueContainer);
},
loadDefaultValueWidgetForMappedFields: function() {
var fieldsList = jQuery('.fieldIdentifier');
fieldsList.each(function(i, element) {
var fieldElement = jQuery(element);
var mappedFieldName = jQuery('[name=mapped_fields]', fieldElement).val();
if(mappedFieldName != '') {
ImportJs.loadDefaultValueWidget(fieldElement.attr('id'));
}
});
}
}
jQuery(document).ready(function() {
ImportJs.toogleMergeConfiguration();
ImportJs.loadDefaultValueWidgetForMappedFields();
ImportJs.registerImportClickEvent();
});
}