Files
crm.clientright.ru/layouts/vlayout/modules/Documents/resources/List.js
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- 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.
2025-10-16 11:17:21 +03:00

320 lines
10 KiB
JavaScript

/*+***********************************************************************************
* 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_List_Js("Documents_List_Js", {
triggerAddFolder : function(url) {
var params = url;
var progressIndicatorElement = jQuery.progressIndicator();
AppConnector.request(params).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
var callBackFunction = function(data){
jQuery('#addDocumentsFolder').validationEngine({
// to prevent the page reload after the validation has completed
'onValidationComplete' : function(form,valid){
return valid;
}
});
Vtiger_List_Js.getInstance().folderSubmit().then(function(data){
app.hideModalWindow();
if(data.success){
var result = data.result;
if(result.success){
var info = result.info;
Vtiger_List_Js.getInstance().updateCustomFilter(info);
var params = {
title : app.vtranslate('JS_NEW_FOLDER'),
text : result.message,
delay: '2000',
type: 'success'
}
Vtiger_Helper_Js.showPnotify(params);
} else {
var result = result.message;
var folderNameElement = jQuery('#documentsFolderName');
folderNameElement.validationEngine('showPrompt', result , 'error','topLeft',true);
}
} else {
var params = {
title : app.vtranslate('JS_ERROR'),
text : data.error.message,
type: 'error'
}
Vtiger_Helper_Js.showPnotify(params);
}
});
};
app.showModalWindow(data,function(data){
if(typeof callBackFunction == 'function'){
callBackFunction(data);
}
});
}
)
},
massMove : function(url){
var listInstance = Vtiger_List_Js.getInstance();
var validationResult = listInstance.checkListRecordSelected();
if(validationResult != true){
var selectedIds = listInstance.readSelectedIds(true);
var excludedIds = listInstance.readExcludedIds(true);
var cvId = listInstance.getCurrentCvId();
var postData = {
"selected_ids":selectedIds,
"excluded_ids" : excludedIds,
"viewname" : cvId
};
var searchValue = listInstance.getAlphabetSearchValue();
if(searchValue.length > 0) {
postData['search_key'] = listInstance.getAlphabetSearchField();
postData['search_value'] = searchValue;
postData['operator'] = "s";
}
var params = {
"url":url,
"data" : postData
};
var progressIndicatorElement = jQuery.progressIndicator();
AppConnector.request(params).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
var callBackFunction = function(data){
listInstance.moveDocuments().then(function(data){
if(data){
var result = data.result;
if(result.success){
app.hideModalWindow();
var params = {
title : app.vtranslate('JS_MOVE_DOCUMENTS'),
text : result.message,
delay: '2000',
type: 'success'
}
Vtiger_Helper_Js.showPnotify(params);
var urlParams = listInstance.getDefaultParams();
listInstance.getListViewRecords(urlParams);
} else {
var params = {
title : app.vtranslate('JS_OPERATION_DENIED'),
text : result.message,
delay: '2000',
type: 'error'
}
Vtiger_Helper_Js.showPnotify(params);
}
}
});
}
app.showModalWindow(data,callBackFunction);
}
)
} else{
listInstance.noRecordSelectedAlert();
}
}
} ,{
folderSubmit : function() {
var aDeferred = jQuery.Deferred();
jQuery('#addDocumentsFolder').on('submit',function(e){
var validationResult = jQuery(e.currentTarget).validationEngine('validate');
if(validationResult == true){
var formData = jQuery(e.currentTarget).serializeFormData();
var foldername = jQuery.trim(formData.foldername);
formData.foldername = foldername;
AppConnector.request(formData).then(
function(data){
aDeferred.resolve(data);
}
);
}
e.preventDefault();
});
return aDeferred.promise();
},
updateCustomFilter : function (info){
var folderId = info.folderId;
var customFilter = jQuery("#customFilter");
var constructedOption = this.constructOptionElement(info);
var optionId = 'filterOptionId_'+folderId;
var optionElement = jQuery('#'+optionId);
if(optionElement.length > 0){
optionElement.replaceWith(constructedOption);
customFilter.trigger("liszt:updated");
} else {
customFilter.find('#foldersBlock').append(constructedOption).trigger("liszt:updated");
}
},
constructOptionElement : function(info){
var cvId = this.getCurrentCvId();
return '<option data-deletable="1" data-folderid="'+info.folderid+'" data-foldername="'+info.folderName+'" class="filterOptionId_folder'+info.folderid+' folderOption" id="filterOptionId_folder'+info.folderid+'" data-id="'+cvId+'" >'+info.folderName+'</option>';
},
moveDocuments : function(){
var aDeferred = jQuery.Deferred();
jQuery('#moveDocuments').on('submit',function(e){
var formData = jQuery(e.currentTarget).serializeFormData();
AppConnector.request(formData).then(
function(data){
aDeferred.resolve(data);
}
);
e.preventDefault();
});
return aDeferred.promise();
},
getDefaultParams : function() {
var search_value = jQuery('#customFilter').find('option:selected').data('foldername');
var customParams = {
'folder_id' : 'folderid',
'folder_value' : search_value
}
var params = this._super();
jQuery.extend(params,customParams);
return params;
},
registerDeleteFilterClickEvent: function(){
var thisInstance = this;
var listViewFilterBlock = this.getFilterBlock();
if(listViewFilterBlock != false){
//used mouseup event to stop the propagation of customfilter select change event.
listViewFilterBlock.on('mouseup','li i.deleteFilter',function(event){
//to close the dropdown
thisInstance.getFilterSelectElement().data('select2').close();
var liElement = jQuery(event.currentTarget).closest('.select2-result-selectable');
var message = app.vtranslate('JS_LBL_ARE_YOU_SURE_YOU_WANT_TO_DELETE');
if(liElement.hasClass('folderOption')){
if(liElement.find('.deleteFilter').hasClass('dull')){
Vtiger_Helper_Js.showPnotify(app.vtranslate('JS_FOLDER_IS_NOT_EMPTY'));
return;
} else {
Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
function(e) {
var currentOptionElement = thisInstance.getSelectOptionFromChosenOption(liElement);
var folderId = currentOptionElement.data('folderid');
var params = {
module : app.getModuleName(),
mode : 'delete',
action : 'Folder',
folderid : folderId
}
AppConnector.request(params).then(function(data) {
if(data.success) {
currentOptionElement.remove();
thisInstance.getFilterSelectElement().trigger('change');
}
})
},
function(error, err){
}
);
}
} else {
Vtiger_Helper_Js.showConfirmationBox({'message' : message}).then(
function(e) {
var currentOptionElement = thisInstance.getSelectOptionFromChosenOption(liElement);
var deleteUrl = currentOptionElement.data('deleteurl');
var newEle = '<form action='+deleteUrl+' method="POST"><input type="hidden" name="'+csrfMagicName+'" value="'+csrfMagicToken+'"/></form>';
var form = new jQuery(newEle);
form.appendTo('body').submit();
},
function(error, err){
}
);
}
});
}
},
performFilterImageActions : function(liElement) {
jQuery('.filterActionImages').clone(true,true).removeClass('filterActionImages').addClass('filterActionImgs').appendTo(liElement.find('.select2-result-label')).show();
var currentOptionElement = this.getSelectOptionFromChosenOption(liElement);
var deletable = currentOptionElement.data('deletable');
if(deletable != '1'){
if(liElement.hasClass('folderOption')){
liElement.find('.deleteFilter').addClass('dull');
}else{
liElement.find('.deleteFilter').remove();
}
}
if(liElement.hasClass('defaultFolder')) {
liElement.find('.deleteFilter').remove();
}
var editable = currentOptionElement.data('editable');
if(editable != '1'){
liElement.find('.editFilter').remove();
}
var pending = currentOptionElement.data('pending');
if(pending != '1'){
liElement.find('.approveFilter').remove();
}
var approve = currentOptionElement.data('public');
if(approve != '1'){
liElement.find('.denyFilter').remove();
}
}
});
Vtiger_Base_Validator_Js("Vtiger_FolderName_Validator_Js",{
/**
*Function which invokes field validation
*@param accepts field element as parameter
* @return error if validation fails true on success
*/
invokeValidation: function(field, rules, i, options){
var instance = new Vtiger_FieldLabel_Validator_Js();
instance.setElement(field);
var response = instance.validate();
if(response != true){
return instance.getError();
}
}
},{
/**
* Function to validate the field label
* @return true if validation is successfull
* @return false if validation error occurs
*/
validate: function(){
var fieldValue = this.getFieldValue();
return this.validateValue(fieldValue);
},
validateValue : function(fieldValue){
var specialChars = /[&\<\>\:\'\"\,\_]/ ;
if (specialChars.test(fieldValue)) {
var errorInfo = app.vtranslate('JS_SPECIAL_CHARACTERS')+" & < > ' \" : , _ "+app.vtranslate('JS_NOT_ALLOWED');
this.setError(errorInfo);
return false;
}
return true;
}
});