- 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.
357 lines
12 KiB
JavaScript
357 lines
12 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.
|
|
*************************************************************************************/
|
|
|
|
|
|
Calendar_CalendarView_Js("SharedCalendar_SharedCalendarView_Js",{
|
|
|
|
currentInstance : false,
|
|
|
|
initiateCalendarFeeds : function() {
|
|
Calendar_CalendarView_Js.currentInstance.performCalendarFeedIntiate();
|
|
}
|
|
},{
|
|
|
|
multipleEvents : {},
|
|
|
|
getAllUserColors : function() {
|
|
var result = {};
|
|
var calendarfeeds = jQuery('[data-calendar-feed]');
|
|
|
|
calendarfeeds.each(function(index,element){
|
|
var feedcheckbox = jQuery(element);
|
|
var disabledOnes = app.cacheGet('calendar.feeds.disabled',[]);
|
|
if (disabledOnes.indexOf(feedcheckbox.data('calendar-sourcekey')) == -1) {
|
|
feedcheckbox.attr('checked',true);
|
|
var id = feedcheckbox.data('calendar-userid');
|
|
result[id] = feedcheckbox.data('calendar-feed-color')+','+feedcheckbox.data('calendar-feed-textcolor');
|
|
}
|
|
});
|
|
|
|
return result;
|
|
},
|
|
|
|
fetchAllCalendarFeeds : function() {
|
|
var thisInstance = this;
|
|
var calendarfeeds = jQuery('[data-calendar-feed]');
|
|
|
|
calendarfeeds.each(function(index,element){
|
|
var feedcheckbox = jQuery(element);
|
|
thisInstance.fetchCalendarFeed(feedcheckbox);
|
|
});
|
|
|
|
this.multipleEvents = false;
|
|
},
|
|
|
|
toDateString : function(date) {
|
|
var d = date.getDate();
|
|
var m = date.getMonth() +1;
|
|
var y = date.getFullYear();
|
|
|
|
d = (d <= 9)? ("0"+d) : d;
|
|
m = (m <= 9)? ("0"+m) : m;
|
|
return y + "-" + m + "-" + d;
|
|
},
|
|
fetchCalendarFeed : function(feedcheckbox) {
|
|
var thisInstance = this;
|
|
|
|
//var type = feedcheckbox.data('calendar-sourcekey');
|
|
this.calendarfeedDS[feedcheckbox.data('calendar-sourcekey')] = function(start, end, callback) {
|
|
if(typeof thisInstance.multipleEvents != 'undefined' && thisInstance.multipleEvents != false){
|
|
var events = thisInstance.multipleEvents[feedcheckbox.data('calendar-userid')];
|
|
if(events !== false) {
|
|
callback(events);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(feedcheckbox.not(':checked').length > 0) {
|
|
callback([]);
|
|
return;
|
|
}
|
|
feedcheckbox.attr('disabled', true);
|
|
|
|
var params = {
|
|
module: 'Calendar',
|
|
action: 'Feed',
|
|
start: thisInstance.toDateString(start),
|
|
end: thisInstance.toDateString(end),
|
|
type: feedcheckbox.data('calendar-feed'),
|
|
userid : feedcheckbox.data('calendar-userid'),
|
|
color : feedcheckbox.data('calendar-feed-color'),
|
|
textColor : feedcheckbox.data('calendar-feed-textcolor')
|
|
}
|
|
|
|
AppConnector.request(params).then(function(events){
|
|
callback(events);
|
|
feedcheckbox.attr('disabled', false).attr('checked', true);
|
|
},
|
|
function(error){
|
|
//To send empty events if error occurs
|
|
callback([]);
|
|
});
|
|
}
|
|
this.getCalendarView().fullCalendar('addEventSource', this.calendarfeedDS[feedcheckbox.data('calendar-sourcekey')]);
|
|
|
|
},
|
|
|
|
allocateColorsForAllUsers : function() {
|
|
var calendarfeeds = jQuery('[data-calendar-feed]');
|
|
calendarfeeds.each(function(index,element){
|
|
var feedUserElement = jQuery(element);
|
|
var feedUserLabel = feedUserElement.closest('.addedCalendars').find('.label');
|
|
var sourcekey = feedUserElement.data('calendar-sourcekey');
|
|
var color = feedUserElement.data('calendar-feed-color');
|
|
if(color == '' || typeof color == 'undefined') {
|
|
color = app.cacheGet(sourcekey);
|
|
if(color != null){
|
|
} else {
|
|
color = '#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6);
|
|
app.cacheSet(sourcekey, color);
|
|
}
|
|
feedUserElement.data('calendar-feed-color',color);
|
|
feedUserLabel.css({'background-color':color});
|
|
}
|
|
var colorContrast = app.getColorContrast(color.slice(1));
|
|
if(colorContrast == 'light') {
|
|
var textColor = 'black'
|
|
} else {
|
|
textColor = 'white'
|
|
}
|
|
feedUserElement.data('calendar-feed-textcolor',textColor);
|
|
feedUserLabel.css({'color':textColor});
|
|
});
|
|
|
|
},
|
|
|
|
fetchAllEvents : function() {
|
|
var thisInstance = this;
|
|
var result = this.getAllUserColors();
|
|
var params = {
|
|
module: 'Calendar',
|
|
action: 'Feed',
|
|
start: thisInstance.toDateString(thisInstance.getCalendarView().fullCalendar('getView').visStart),
|
|
end: thisInstance.toDateString(thisInstance.getCalendarView().fullCalendar('getView').visEnd),
|
|
type: 'MultipleEvents',
|
|
mapping : result
|
|
}
|
|
|
|
AppConnector.request(params).then(function(multipleEvents){
|
|
thisInstance.multipleEvents = multipleEvents;
|
|
thisInstance.fetchAllCalendarFeeds();
|
|
},
|
|
function(error){
|
|
|
|
});
|
|
|
|
|
|
},
|
|
isAllowedToAddCalendarEvent : function(calendarDetails){
|
|
var assignedUserId = calendarDetails.assigned_user_id.value;
|
|
if(jQuery('[data-calendar-userid='+assignedUserId+']').is(':checked')) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
},
|
|
addCalendarEvent : function(calendarDetails) {
|
|
if(calendarDetails.activitytype.value == 'Task'){
|
|
var msg = app.vtranslate('JS_TASK_IS_SUCCESSFULLY_ADDED_TO_YOUR_CALENDAR');
|
|
var customParams = {
|
|
text : msg,
|
|
type: 'info'
|
|
}
|
|
Vtiger_Helper_Js.showPnotify(customParams);
|
|
return;
|
|
} else {
|
|
this._super(calendarDetails);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Function used to delete user calendar
|
|
*/
|
|
deleteCalendarView : function(feedcheckbox) {
|
|
var aDeferred = jQuery.Deferred();
|
|
var thisInstance = this;
|
|
var params = {
|
|
module: 'Calendar',
|
|
action: 'CalendarUserActions',
|
|
mode : 'deleteUserCalendar',
|
|
userid : feedcheckbox.data('calendar-userid')
|
|
}
|
|
|
|
AppConnector.request(params).then(function(response) {
|
|
var result = response['result'];
|
|
|
|
feedcheckbox.closest('.addedCalendars').remove();
|
|
//After delete user reset accodion height to auto
|
|
thisInstance.resetAccordionHeight();
|
|
//Remove the events of deleted user in shared calendar feed
|
|
thisInstance.getCalendarView().fullCalendar('removeEventSource', thisInstance.calendarfeedDS[feedcheckbox.data('calendar-sourcekey')]);
|
|
|
|
//Update the adding and editing users list in hidden modal
|
|
var userSelectElement = jQuery('#calendarview-feeds').find('[name="usersCalendarList"]');
|
|
userSelectElement.append('<option value="'+result['sharedid']+'">'+result['username']+'</option>');
|
|
var editUserSelectElement = jQuery('#calendarview-feeds').find('[name="editingUsersList"]');
|
|
editUserSelectElement.find('option[value="'+result['sharedid']+'"]').remove();
|
|
jQuery('#calendarview-feeds').find('.invisibleCalendarViews').val('true');
|
|
|
|
aDeferred.resolve();
|
|
},
|
|
function(error){
|
|
aDeferred.reject();
|
|
});
|
|
|
|
return aDeferred.promise();
|
|
},
|
|
|
|
/**
|
|
* Function to register event for edit user calendar color
|
|
*/
|
|
registerEventForEditUserCalendar : function() {
|
|
var thisInstance = this;
|
|
var parentElement = jQuery('#calendarview-feeds');
|
|
parentElement.on('click', '.editCalendarColor', function(e) {
|
|
e.preventDefault();
|
|
var currentTarget = jQuery(e.currentTarget);
|
|
var addedCalendarEle = currentTarget.closest('.addedCalendars');
|
|
var feedUserEle = addedCalendarEle.find('[data-calendar-feed]');
|
|
var editCalendarViewsList = jQuery('#calendarview-feeds').find('.editCalendarViewsList');
|
|
var selectElement = editCalendarViewsList.find('[name="editingUsersList"]');
|
|
selectElement.find('option:selected').removeAttr('selected');
|
|
selectElement.find('option[value="'+feedUserEle.data('calendar-userid')+'"]').attr('selected', true);
|
|
thisInstance.showAddUserCalendarModal(currentTarget);
|
|
})
|
|
},
|
|
|
|
/**
|
|
* Function to register change event for users list select element in edit user calendar modal
|
|
*/
|
|
registerViewsListChangeEvent : function(data) {
|
|
var parentElement = jQuery('#calendarview-feeds');
|
|
var selectElement = data.find('[name="editingUsersList"]');
|
|
var selectedUserColor = data.find('.selectedUserColor');
|
|
//on change of edit user, update color picker with the selected user color
|
|
selectElement.on('change', function() {
|
|
var userid = selectElement.find('option:selected').val();
|
|
var userColor = jQuery('[data-calendar-userid="'+userid+'"]', parentElement).data('calendar-feed-color');
|
|
selectedUserColor.val(userColor);
|
|
data.find('.calendarColorPicker').ColorPickerSetColor(userColor)
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Function to save added user calendar
|
|
*/
|
|
saveUserCalendar : function(data, currentEle) {
|
|
var thisInstance = this;
|
|
var userColor = data.find('.selectedUserColor').val();
|
|
var userId = data.find('.selectedUser').val();
|
|
var userName = data.find('.selectedUser').data('username');
|
|
var params = {
|
|
module: 'Calendar',
|
|
action: 'CalendarUserActions',
|
|
mode : 'addUserCalendar',
|
|
selectedUser : userId,
|
|
selectedColor : userColor
|
|
};
|
|
|
|
AppConnector.request(params).then(function() {
|
|
app.hideModalWindow();
|
|
|
|
var parentElement = jQuery('#calendarview-feeds');
|
|
var colorContrast = app.getColorContrast(userColor.slice(1));
|
|
if(colorContrast == 'light') {
|
|
var textColor = 'black'
|
|
} else {
|
|
textColor = 'white'
|
|
}
|
|
if(data.find('.userCalendarMode').val() == 'edit') {
|
|
var feedUserEle = jQuery('[data-calendar-userid="'+userId+'"]', parentElement);
|
|
feedUserEle.data('calendar-feed-color',userColor).data('calendar-feed-textcolor',textColor);
|
|
feedUserEle.closest('.addedCalendars').find('.label').css({'background-color':userColor,'color':textColor});
|
|
|
|
thisInstance.getCalendarView().fullCalendar('removeEventSource', thisInstance.calendarfeedDS[feedUserEle.data('calendar-sourcekey')]);
|
|
thisInstance.fetchCalendarFeed(feedUserEle);
|
|
|
|
//notification message
|
|
var message = app.vtranslate('JS_CALENDAR_VIEW_COLOR_UPDATED_SUCCESSFULLY');
|
|
} else {
|
|
var labelModal = jQuery('.labelModal', parentElement);
|
|
var clonedContainer = labelModal.clone(true, true);
|
|
var labelView = clonedContainer.find('label');
|
|
feedUserEle = labelView.find('[type="checkbox"]');
|
|
feedUserEle.attr('checked', 'checked');
|
|
feedUserEle.attr('data-calendar-feed-color',userColor).attr('data-calendar-feed', 'Events').attr('data-calendar-userid', userId)
|
|
.attr('data-calendar-sourcekey', 'Events33_'+userId).attr('data-calendar-feed-textcolor',textColor);
|
|
feedUserEle.closest('.addedCalendars').find('.label').css({'background-color':userColor,'color':textColor}).text(userName);
|
|
parentElement.append(labelView);
|
|
|
|
//After add user reset accodion height to auto
|
|
thisInstance.resetAccordionHeight();
|
|
|
|
thisInstance.fetchCalendarFeed(feedUserEle);
|
|
|
|
//Update the adding and editing users list in hidden modal
|
|
var userSelectElement = jQuery('#calendarview-feeds').find('[name="usersCalendarList"]');
|
|
userSelectElement.find('option[value="'+userId+'"]').remove();
|
|
|
|
if(userSelectElement.find('option').length <= 0) {
|
|
jQuery('#calendarview-feeds').find('.invisibleCalendarViews').val('false');
|
|
}
|
|
|
|
var editUserSelectElement = jQuery('#calendarview-feeds').find('[name="editingUsersList"]');
|
|
editUserSelectElement.append('<option value="'+userId+'">'+userName+'</option>');
|
|
|
|
//notification message
|
|
var message = app.vtranslate('JS_CALENDAR_VIEW_ADDED_SUCCESSFULLY');
|
|
}
|
|
|
|
//show notification after add or edit user
|
|
var params = {
|
|
text: message,
|
|
type: 'info'
|
|
};
|
|
Vtiger_Helper_Js.showPnotify(params);
|
|
},
|
|
function(error){
|
|
|
|
});
|
|
|
|
},
|
|
|
|
performCalendarFeedIntiate : function() {
|
|
this.allocateColorsForAllUsers();
|
|
this.fetchAllEvents();
|
|
this.registerCalendarFeedChange();
|
|
this.registerEventForDeleteUserCalendar();
|
|
this.registerEventForEditUserCalendar();
|
|
this.resetAccordionHeight();
|
|
},
|
|
|
|
restoreAddCalendarWidgetState : function() {
|
|
var key = 'Calendar_sideBar_LBL_ADDED_CALENDARS';
|
|
var value = app.cacheGet(key);
|
|
var widgetContainer = jQuery("#Calendar_sideBar_LBL_ADDED_CALENDARS");
|
|
if(value == 0){
|
|
Vtiger_Index_Js.loadWidgets(widgetContainer,false);
|
|
}
|
|
else{
|
|
Vtiger_Index_Js.loadWidgets(widgetContainer);
|
|
}
|
|
},
|
|
|
|
registerEvents : function() {
|
|
this._super();
|
|
this.restoreAddCalendarWidgetState();
|
|
return this;
|
|
}
|
|
});
|