- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
355 lines
16 KiB
JavaScript
355 lines
16 KiB
JavaScript
/*********************************************************************************
|
|
* The content of this file is subject to the PDF Maker license.
|
|
* ("License"); You may not use this file except in compliance with the License
|
|
* The Initial Developer of the Original Code is IT-Solutions4You s.r.o.
|
|
* Portions created by IT-Solutions4You s.r.o. are Copyright(C) IT-Solutions4You s.r.o.
|
|
* All Rights Reserved.
|
|
********************************************************************************/
|
|
|
|
if (typeof(PDFMaker_RelatedBlockJs) == 'undefined') {
|
|
PDFMaker_RelatedBlockJs = {
|
|
formElement : false,
|
|
container : false,
|
|
relatedblockColumnsList: false,
|
|
stepContainer : false,
|
|
advanceFilterInstance : false,
|
|
selectedFields : false,
|
|
|
|
changeSteps: function(){
|
|
var actual_step = document.getElementById('step').value * 1;
|
|
var next_step = actual_step + 1;
|
|
|
|
if (next_step == "2") {
|
|
PDFMaker_RelatedBlockJs.changeSecOptions();
|
|
} else if (next_step == "6") {
|
|
var editViewForm = this.getForm();
|
|
|
|
var blocknameElement = jQuery('input[name="blockname"]');
|
|
var control = blocknameElement.val();
|
|
|
|
if(control == ""){
|
|
vtUtils.showValidationMessage(blocknameElement, app.vtranslate('JS_REQUIRED_FIELD'));
|
|
return false;
|
|
} else {
|
|
vtUtils.hideValidationMessage(blocknameElement);
|
|
}
|
|
editViewForm.submit();
|
|
} else {
|
|
if (next_step == "3"){
|
|
if(!this.isFormValidate()) return false;
|
|
|
|
var selectedFields = this.getSelectedColumns();
|
|
this.getSelectedFields().val(JSON.stringify(selectedFields));
|
|
this.createRelatedBlockTable();
|
|
}
|
|
|
|
jQuery("#steplabel"+ actual_step).removeClass('active');
|
|
jQuery("#steplabel"+ next_step).addClass('active');
|
|
jQuery("#step"+ actual_step).addClass('hide');
|
|
jQuery("#step"+ next_step).removeClass('hide');
|
|
}
|
|
|
|
document.getElementById('back_rep').disabled = false;
|
|
document.getElementById('step').value = next_step;
|
|
},
|
|
changeStepsback: function(mode){
|
|
actual_step = document.getElementById('step').value * 1;
|
|
last_step = actual_step - 1;
|
|
|
|
jQuery("#steplabel"+ actual_step).removeClass('active');
|
|
jQuery("#steplabel"+ last_step).addClass('active');
|
|
|
|
jQuery("#step"+ actual_step).addClass('hide');
|
|
jQuery("#step"+ last_step).removeClass('hide');
|
|
|
|
if ((last_step == 1 && mode == "create") || (last_step == 3 && mode == "edit"))
|
|
document.getElementById('back_rep').disabled = true;
|
|
|
|
document.getElementById('step').value = last_step;
|
|
},
|
|
changeSecOptions: function(){
|
|
var primodule = document.NewBlock.primarymodule.value;
|
|
var secmodule = PDFMaker_RelatedBlockJs.getCheckedValue(document.NewBlock.secondarymodule);
|
|
var saved_secmodule = jQuery("#saved_secmodule").val();
|
|
|
|
if (saved_secmodule != secmodule){
|
|
jQuery("#saved_secmodule").val(secmodule);
|
|
var thisElement = this;
|
|
var params = {
|
|
'module' : 'PDFMaker',
|
|
'action' : 'IndexAjax',
|
|
'mode' : 'GetRelatedBlockColumns',
|
|
'type' : 'columns',
|
|
'secmodule' : secmodule,
|
|
'primodule':primodule
|
|
};
|
|
|
|
app.helper.showProgress();
|
|
var ModuleFieldsElements = jQuery('.relatedblockColumns');
|
|
|
|
app.request.get({'data' : params}).then(
|
|
function(err,response) {
|
|
app.helper.hideProgress();
|
|
|
|
ModuleFieldsElements.each(function(index,domElement){
|
|
ModuleFieldsElement = jQuery(domElement);
|
|
jQuery.each(response['fields'], function (i, fields) {
|
|
|
|
var optgroup = jQuery('<optgroup/>');
|
|
optgroup.attr('label',i);
|
|
jQuery.each(fields, function (key, field) {
|
|
optgroup.append(jQuery('<option>', {
|
|
value: key,
|
|
text : field
|
|
}));
|
|
});
|
|
|
|
ModuleFieldsElement.append(optgroup);
|
|
});
|
|
});
|
|
|
|
var relatedblockColumnsListElement = jQuery('#relatedblockColumnsList');
|
|
relatedblockColumnsListElement.select2("destroy");
|
|
relatedblockColumnsListElement.select2();
|
|
|
|
thisElement.initialize();
|
|
jQuery("#steplabel1").removeClass('active');
|
|
jQuery("#steplabel2").addClass('active');
|
|
|
|
jQuery("#step1").addClass('hide');
|
|
jQuery("#step2").removeClass('hide');
|
|
}
|
|
);
|
|
|
|
var params2 = {
|
|
'module' : 'PDFMaker',
|
|
'view' : 'GetRelatedBlockFilters',
|
|
'secmodule' : secmodule,
|
|
'primodule' : primodule
|
|
};
|
|
|
|
app.request.get({'data' : params2}).then(
|
|
function(err,response) {
|
|
jQuery('#step3').html(response);
|
|
PDFMaker_RelatedBlockJs.registerEvents2();
|
|
}
|
|
);
|
|
} else {
|
|
this.initialize();
|
|
jQuery("#steplabel1").removeClass('active');
|
|
jQuery("#steplabel2").addClass('active');
|
|
jQuery("#step1").addClass('hide');
|
|
jQuery("#step2").removeClass('hide');
|
|
}
|
|
},
|
|
getCheckedValue: function (radioObj){
|
|
if (!radioObj)
|
|
return "";
|
|
var radioLength = radioObj.length;
|
|
if (radioLength == undefined)
|
|
if (radioObj.checked)
|
|
return radioObj.value;
|
|
else
|
|
return "";
|
|
for (var i = 0; i < radioLength; i++) {
|
|
if (radioObj[i].checked) {
|
|
return radioObj[i].value;
|
|
}
|
|
}
|
|
return "";
|
|
},
|
|
registerSelect2ElementForRelatedBlockColumns : function(){
|
|
var selectElement = this.getRelatedBlockColumnsList();
|
|
selectElement.select2();
|
|
},
|
|
getRelatedBlockColumnsList : function(){
|
|
if(this.relatedblockColumnsList == false){
|
|
this.relatedblockColumnsList = jQuery('#relatedblockColumnsList');
|
|
}
|
|
return this.relatedblockColumnsList;
|
|
},
|
|
getSelectedFields : function(){
|
|
if(this.selectedFields == false){
|
|
this.selectedFields = jQuery('#seleted_fields');
|
|
}
|
|
return this.selectedFields;
|
|
},
|
|
arrangeSelectChoicesInOrder : function(){
|
|
var selectElement = this.getRelatedBlockColumnsList();
|
|
var chosenElement = app.getSelect2ElementFromSelect(selectElement);
|
|
var choicesContainer = chosenElement.find('ul.select2-choices');
|
|
var choicesList = choicesContainer.find('li.select2-search-choice');
|
|
|
|
var selectedOptions = selectElement.find('option:selected');
|
|
var selectedOrder = JSON.parse(this.getSelectedFields().val());
|
|
var selectedOrderKeys = [];
|
|
for(var key in selectedOrder){
|
|
if(selectedOrder.hasOwnProperty(key)){
|
|
selectedOrderKeys.push(key);
|
|
}
|
|
}
|
|
for(var index=selectedOrderKeys.length ; index > 0 ; index--){
|
|
var selectedValue = selectedOrder[selectedOrderKeys[index-1]];
|
|
var option = selectedOptions.filter('[value="'+selectedValue+'"]');
|
|
choicesList.each(function(choiceListIndex,element){
|
|
var liElement = jQuery(element);
|
|
if(liElement.find('div').html() == option.html()){
|
|
choicesContainer.prepend(liElement);
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
},
|
|
makeColumnListSortable : function(){
|
|
var thisInstance = this;
|
|
var selectElement = thisInstance.getRelatedBlockColumnsList();
|
|
var select2Element = app.getSelect2ElementFromSelect(selectElement);
|
|
var chozenChoiceElement = select2Element.find('ul.select2-choices');
|
|
chozenChoiceElement.sortable({
|
|
containment: 'parent',
|
|
start: function() {thisInstance.getSelectedFields().select2("onSortStart");},
|
|
update: function() {thisInstance.getSelectedFields().select2("onSortEnd");}
|
|
});
|
|
},
|
|
isFormValidate : function(){
|
|
var fieldElement = this.getRelatedBlockColumnsList();
|
|
var fieldElementValue = fieldElement.find('option:selected').length;
|
|
var select2Element = fieldElement.parent().find('.select2-container');
|
|
if(fieldElementValue == 0) {
|
|
vtUtils.showValidationMessage(select2Element, app.vtranslate('JS_REQUIRED_FIELD'));
|
|
return false;
|
|
} else {
|
|
vtUtils.hideValidationMessage(select2Element);
|
|
return true;
|
|
}
|
|
},
|
|
initialize : function(){
|
|
this.relatedblockColumnsList = false;
|
|
this.selectedFields = false;
|
|
var sort_selectbox1 = jQuery('#selectScolrow_1');
|
|
var sort_selectbox2 = jQuery('#selectScolrow_2');
|
|
var sort_selectbox3 = jQuery('#selectScolrow_3');
|
|
sort_selectbox1.select2();
|
|
sort_selectbox2.select2();
|
|
sort_selectbox3.select2();
|
|
},
|
|
getForm : function(){
|
|
if(this.formElement == false){
|
|
this.setForm(jQuery('#NewBlock'));
|
|
}
|
|
return this.formElement;
|
|
},
|
|
setForm : function(element){
|
|
this.formElement = element;
|
|
return this;
|
|
},
|
|
calculateValues : function(){
|
|
var advfilterlist = this.advanceFilterInstance.getValues();
|
|
jQuery('#advanced_filter').val(JSON.stringify(advfilterlist));
|
|
|
|
var selectedSortOrderFields = [];
|
|
var selectedSortFieldsRows = jQuery('.sortFieldRow');
|
|
jQuery.each(selectedSortFieldsRows,function(index,element){
|
|
var currentElement = jQuery(element);
|
|
var field = currentElement.find('select.selectedSortFields').val();
|
|
var order = currentElement.find('.sortOrder').filter(':checked').val();
|
|
var type = currentElement.find('.sortType').val();
|
|
selectedSortOrderFields.push([field,order,type]);
|
|
});
|
|
jQuery('#selected_sort_fields').val(JSON.stringify(selectedSortOrderFields));
|
|
},
|
|
registerSubmitEvent : function(){
|
|
var editViewForm = this.getForm();
|
|
var thisInstance = this;
|
|
editViewForm.submit(function(){
|
|
thisInstance.calculateValues();
|
|
});
|
|
},
|
|
registerEvents : function(){
|
|
this.relatedblockColumnsList = false;
|
|
this.selectedFields = false;
|
|
this.arrangeSelectChoicesInOrder();
|
|
this.makeColumnListSortable();
|
|
this.registerSubmitEvent();
|
|
},
|
|
registerEvents2 : function(){
|
|
this.advanceFilterInstance = Vtiger_AdvanceFilter_Js.getInstance(jQuery('.filterContainer'));
|
|
CKEDITOR.replace('relatedblock', {height:'280px'});
|
|
},
|
|
registerEditEvents : function(){
|
|
this.initialize();
|
|
this.registerEvents2();
|
|
this.registerSubmitEvent();
|
|
},
|
|
createRelatedBlockTable: function (){
|
|
|
|
var selectedColumns = JSON.parse(this.getSelectedFields().val());
|
|
var oEditor = CKEDITOR.instances.relatedblock;
|
|
|
|
var table = "<table border='1' cellpadding='3' cellspacing='0' style='border-collapse: collapse;'>";
|
|
//header
|
|
table += "<tr>";
|
|
|
|
for(var key in selectedColumns) {
|
|
tmpArr = selectedColumns[key].split(":");
|
|
tmpLbl = tmpArr[2];
|
|
var idx = tmpLbl.indexOf("_");
|
|
var module = tmpLbl.slice(0, idx).toUpperCase();
|
|
var label = tmpLbl.slice(idx + 1).replace(/_/g, " ");
|
|
label = label.replace(/@~@/g, "_");
|
|
label = "%R_" + module + "_" + label + "%";
|
|
table += "<td>";
|
|
table += label;
|
|
table += "</td>";
|
|
}
|
|
|
|
table += "</tr>";
|
|
|
|
//separator Start
|
|
table += "<tr>";
|
|
table += "<td colspan='50'>#RELBLOCK_START#</td>";
|
|
table += "</tr>";
|
|
|
|
table += "<tr>";
|
|
for(var key in selectedColumns) {
|
|
var coldata = selectedColumns[key].split(":");
|
|
table += "<td>";
|
|
table += "$" + coldata[3] + "$";
|
|
table += "</td>";
|
|
}
|
|
|
|
table += "</tr>";
|
|
|
|
//separator End
|
|
table += "<tr>";
|
|
table += "<td colspan='50'>#RELBLOCK_END#</td>";
|
|
table += "</tr>";
|
|
|
|
table += "</table>";
|
|
|
|
oEditor.setData(table);
|
|
},
|
|
getSelectedColumns : function(){
|
|
var columnListSelectElement = this.getRelatedBlockColumnsList();
|
|
var select2Element = app.getSelect2ElementFromSelect(columnListSelectElement);
|
|
|
|
var selectedValuesByOrder = new Array();
|
|
var selectedOptions = columnListSelectElement.find('option:selected');
|
|
|
|
var orderedSelect2Options = select2Element.find('li.select2-search-choice').find('div');
|
|
orderedSelect2Options.each(function(index,element){
|
|
var chosenOption = jQuery(element);
|
|
var choiceElement = chosenOption.closest('.select2-search-choice');
|
|
var choiceValue = choiceElement.data('select2Data').id;
|
|
selectedOptions.each(function(optionIndex, domOption){
|
|
var option = jQuery(domOption);
|
|
if(option.val() == choiceValue) {
|
|
selectedValuesByOrder.push(option.val());
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
return selectedValuesByOrder;
|
|
}
|
|
}
|
|
} |