- 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.
143 lines
4.2 KiB
JavaScript
143 lines
4.2 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.
|
|
*************************************************************************************/
|
|
|
|
var AppConnector = {
|
|
|
|
/**
|
|
* Sends a pjax request (push state +ajax)
|
|
* The function is deferred. it will be resolved on success and error on failure
|
|
* Success - if request is success it will send you data that it recieved
|
|
* error - it will send two parameters first gives string regarding error
|
|
* Second gives you error object if exists
|
|
*
|
|
* @return - deferred promise
|
|
*/
|
|
requestPjax : function(params) {
|
|
return AppConnector._request(params, true);
|
|
},
|
|
|
|
/**
|
|
* Sends ajax request to the specified url.
|
|
* The function is deferred. it will be resolved on success and error on failure
|
|
* Success - if request is success it will send you data that it recieved
|
|
* error - it will send two parameters first gives string regarding error
|
|
* Second gives you error object if exists
|
|
*
|
|
* @return - deferred promise
|
|
*/
|
|
request : function(params) {
|
|
return AppConnector._request(params, false);
|
|
},
|
|
|
|
|
|
_request : function(params, pjaxMode) {
|
|
var aDeferred = jQuery.Deferred();
|
|
|
|
if(typeof pjaxMode == 'undefined') {
|
|
pjaxMode = false;
|
|
}
|
|
|
|
if(typeof params == 'undefined') params = {};
|
|
|
|
//caller has send only data
|
|
if(typeof params.data == 'undefined') {
|
|
if(typeof params == 'string') {
|
|
var callerParams = params;
|
|
var index = callerParams.indexOf('?');
|
|
if (index !== -1) {
|
|
var subStr = callerParams.substr(0, index+1);//need to replace only "index.php?" or "?"
|
|
callerParams = callerParams.replace(subStr,'');
|
|
}
|
|
}else{
|
|
callerParams = jQuery.extend({}, params);
|
|
}
|
|
params = {};
|
|
params.data = callerParams;
|
|
}
|
|
//Make the request as post by default
|
|
if(typeof params.type == 'undefined') params.type = 'POST';
|
|
|
|
//By default we expect json from the server
|
|
if(typeof params.dataType == 'undefined'){
|
|
var data = params.data;
|
|
//view will return html
|
|
params.dataType='json';
|
|
if(data.hasOwnProperty('view')){
|
|
params.dataType='html';
|
|
}
|
|
else if (typeof data == 'string' && data.indexOf('&view=') !== -1) {
|
|
params.dataType='html';
|
|
}
|
|
|
|
if(typeof params.url != 'undefined' && params.url.indexOf('&view=')!== -1) {
|
|
params.dataType='html';
|
|
}
|
|
}
|
|
|
|
//If url contains params then seperate them and make them as data
|
|
if(typeof params.url != 'undefined' && params.url.indexOf('?')!== -1) {
|
|
var urlSplit = params.url.split('?');
|
|
var queryString = urlSplit[1];
|
|
params.url = urlSplit[0];
|
|
var queryParameters = queryString.split('&');
|
|
for(var index=0; index<queryParameters.length; index++) {
|
|
var queryParam = queryParameters[index];
|
|
var queryParamComponents = queryParam.split('=');
|
|
params.data[queryParamComponents[0]] = queryParamComponents[1];
|
|
}
|
|
}
|
|
|
|
if(typeof params.url == 'undefined' || params.url.length <= 0){
|
|
params.url = 'index.php';
|
|
}
|
|
|
|
|
|
var success = function(data,status,jqXHR) {
|
|
aDeferred.resolve(data);
|
|
}
|
|
|
|
var error = function(jqXHR, textStatus, errorThrown){
|
|
aDeferred.reject(textStatus, errorThrown);
|
|
}
|
|
|
|
if(pjaxMode) {
|
|
if(typeof params.container == 'undefined') params.container = '#pjaxContainer';
|
|
|
|
params.type = 'GET';
|
|
|
|
var pjaxContainer = jQuery('#pjaxContainer');
|
|
//Clear contents existing before
|
|
if(params.container == '#pjaxContainer') {
|
|
pjaxContainer.html('');
|
|
}
|
|
|
|
jQuery(document).on('pjax:success', function(event, data,status,jqXHR){
|
|
pjaxContainer.html('');
|
|
success(data,status,jqXHR);
|
|
})
|
|
|
|
jQuery(document).on('pjax:error', function(event, jqXHR, textStatus, errorThrown){
|
|
pjaxContainer.html('');
|
|
error(jqXHR, textStatus, errorThrown);
|
|
})
|
|
jQuery.pjax(params);
|
|
|
|
}else{
|
|
params.success = success;
|
|
|
|
params.error = error;
|
|
jQuery.ajax(params);
|
|
}
|
|
|
|
return aDeferred.promise();
|
|
}
|
|
|
|
}
|
|
|