- 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.
190 lines
7.8 KiB
PHP
190 lines
7.8 KiB
PHP
<?php
|
|
/*+***********************************************************************************
|
|
* 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.
|
|
*************************************************************************************/
|
|
|
|
/**
|
|
* Events Record Model Class
|
|
*/
|
|
class Events_Record_Model extends Calendar_Record_Model {
|
|
|
|
protected $inviteesDetails;
|
|
|
|
/**
|
|
* Function to get the Edit View url for the record
|
|
* @return <String> - Record Edit View Url
|
|
*/
|
|
public function getEditViewUrl() {
|
|
$module = $this->getModule();
|
|
return 'index.php?module=Calendar&view='.$module->getEditViewName().'&record='.$this->getId();
|
|
}
|
|
|
|
/**
|
|
* Function to get the Delete Action url for the record
|
|
* @return <String> - Record Delete Action Url
|
|
*/
|
|
public function getDeleteUrl() {
|
|
$module = $this->getModule();
|
|
return 'index.php?module=Calendar&action='.$module->getDeleteActionName().'&record='.$this->getId();
|
|
}
|
|
|
|
/**
|
|
* Funtion to get Duplicate Record Url
|
|
* @return <String>
|
|
*/
|
|
public function getDuplicateRecordUrl(){
|
|
$module = $this->getModule();
|
|
return 'index.php?module=Calendar&view='.$module->getEditViewName().'&record='.$this->getId().'&isDuplicate=true';
|
|
|
|
}
|
|
|
|
public function getRelatedToContactIdList() {
|
|
$adb = PearDatabase::getInstance();
|
|
$query = 'SELECT * from vtiger_cntactivityrel where activityid=?';
|
|
$result = $adb->pquery($query, array($this->getId()));
|
|
$num_rows = $adb->num_rows($result);
|
|
|
|
$contactIdList = array();
|
|
for($i=0; $i<$num_rows; $i++) {
|
|
$row = $adb->fetchByAssoc($result, $i);
|
|
$contactIdList[$i] = $row['contactid'];
|
|
}
|
|
return $contactIdList;
|
|
}
|
|
|
|
public function getRelatedContactInfo() {
|
|
$contactIdList = $this->getRelatedToContactIdList();
|
|
$relatedContactInfo = array();
|
|
foreach($contactIdList as $contactId) {
|
|
$relatedContactInfo[] = array('name' => decode_html(Vtiger_Util_Helper::toSafeHTML(Vtiger_Util_Helper::getRecordName($contactId))) ,'id' => $contactId);
|
|
}
|
|
return $relatedContactInfo;
|
|
}
|
|
|
|
public function getRelatedContactInfoFromIds($eventIds){
|
|
$adb = PearDatabase::getInstance();
|
|
$query = 'SELECT vtiger_cntactivityrel.activityid as id, vtiger_cntactivityrel.contactid, vtiger_contactdetails.email FROM vtiger_cntactivityrel INNER JOIN vtiger_contactdetails
|
|
ON vtiger_contactdetails.contactid = vtiger_cntactivityrel.contactid WHERE activityid in ('. generateQuestionMarks($eventIds) .')';
|
|
$result = $adb->pquery($query, array($eventIds));
|
|
$num_rows = $adb->num_rows($result);
|
|
|
|
$contactInfo = array();
|
|
for($i=0; $i<$num_rows; $i++) {
|
|
$row = $adb->fetchByAssoc($result, $i);
|
|
$contactInfo[$row['id']][] = array('name' => Vtiger_Util_Helper::toSafeHTML(Vtiger_Util_Helper::getRecordName($row['contactid'])),
|
|
'email' => $row['email'], 'id' => $row['contactid']);
|
|
}
|
|
return $contactInfo;
|
|
}
|
|
|
|
/**
|
|
* Funtion to get inviteed details for the event
|
|
* @param <Int> $userId
|
|
* @return <Array> - list with invitees and status details
|
|
*/
|
|
public function getInviteesDetails($userId=FALSE) {
|
|
if(!$this->inviteesDetails || $userId) {
|
|
$adb = PearDatabase::getInstance();
|
|
$sql = "SELECT vtiger_invitees.* FROM vtiger_invitees WHERE activityid=?";
|
|
$sqlParams = array($this->getId());
|
|
if($userId !== FALSE) {
|
|
$sql .= " AND inviteeid = ?";
|
|
$sqlParams[] = $userId;
|
|
}
|
|
$result = $adb->pquery($sql,$sqlParams);
|
|
$inviteesDetails = array();
|
|
|
|
$num_rows = $adb->num_rows($result);
|
|
for($i=0; $i<$num_rows; $i++) {
|
|
$inviteesDetails[$adb->query_result($result, $i,'inviteeid')] = $adb->query_result($result, $i,'status');
|
|
}
|
|
|
|
if(!$userId) {
|
|
$this->inviteesDetails = $inviteesDetails;
|
|
}
|
|
return $inviteesDetails;
|
|
}
|
|
return $this->inviteesDetails;
|
|
}
|
|
|
|
/**
|
|
* Function to get list of invitees id's
|
|
* @return <Array> - List of invitees id's
|
|
*/
|
|
public function getInvities() {
|
|
return array_keys($this->getInviteesDetails());
|
|
}
|
|
|
|
/**
|
|
* Function to update invitation status
|
|
* @param <Int> $activityId
|
|
* @param <Int> $userId
|
|
* @param <String> $status
|
|
*/
|
|
public function updateInvitationStatus($activityId,$userId,$status) {
|
|
$adb = PearDatabase::getInstance();
|
|
$sql = 'UPDATE vtiger_invitees SET status = ? WHERE activityid = ? AND inviteeid = ?';
|
|
$adb->pquery($sql,array($status,$activityId,$userId));
|
|
$this->inviteesDetails = NULL;
|
|
}
|
|
|
|
public function getInviteUserMailData() {
|
|
$adb = PearDatabase::getInstance();
|
|
|
|
$return_id = $this->getId();
|
|
$cont_qry = "select * from vtiger_cntactivityrel where activityid=?";
|
|
$cont_res = $adb->pquery($cont_qry, array($return_id));
|
|
$noofrows = $adb->num_rows($cont_res);
|
|
$cont_id = array();
|
|
if($noofrows > 0) {
|
|
for($i=0; $i<$noofrows; $i++) {
|
|
$cont_id[] = $adb->query_result($cont_res,$i,"contactid");
|
|
}
|
|
}
|
|
$cont_name = '';
|
|
foreach($cont_id as $key=>$id) {
|
|
if($id != '') {
|
|
$contact_name = Vtiger_Util_Helper::getRecordName($id);
|
|
$cont_name .= $contact_name .', ';
|
|
}
|
|
}
|
|
|
|
$parentId = $this->get('parent_id');
|
|
$parentName = '';
|
|
if($parentId != '') {
|
|
$parentName = Vtiger_Util_Helper::getRecordName($parentId);
|
|
}
|
|
|
|
$cont_name = trim($cont_name,', ');
|
|
$mail_data = Array();
|
|
$mail_data['user_id'] = $this->get('assigned_user_id');
|
|
$mail_data['subject'] = $this->get('subject');
|
|
$moduleName = $this->getModuleName();
|
|
$mail_data['status'] = (($moduleName=='Calendar')?($this->get('taskstatus')):($this->get('eventstatus')));
|
|
$mail_data['activity_mode'] = (($moduleName=='Calendar')?('Task'):('Events'));
|
|
$mail_data['taskpriority'] = $this->get('taskpriority');
|
|
$mail_data['relatedto'] = $parentName;
|
|
$mail_data['contact_name'] = $cont_name;
|
|
$mail_data['description'] = $this->get('description');
|
|
$mail_data['assign_type'] = $this->get('assigntype');
|
|
$mail_data['group_name'] = getGroupName($this->get('assigned_user_id'));
|
|
$mail_data['mode'] = $this->get('mode');
|
|
//TODO : remove dependency on request;
|
|
$value = getaddEventPopupTime($_REQUEST['time_start'],$_REQUEST['time_end'],'24');
|
|
$start_hour = $value['starthour'].':'.$value['startmin'].''.$value['startfmt'];
|
|
if($_REQUEST['activity_mode']!='Task')
|
|
$end_hour = $value['endhour'] .':'.$value['endmin'].''.$value['endfmt'];
|
|
$startDate = new DateTimeField($_REQUEST['date_start']." ".$start_hour);
|
|
$endDate = new DateTimeField($_REQUEST['due_date']." ".$end_hour);
|
|
$mail_data['st_date_time'] = $startDate->getDBInsertDateTimeValue();
|
|
$mail_data['end_date_time'] = $endDate->getDBInsertDateTimeValue();
|
|
$mail_data['location']=$this->get('location');
|
|
return $mail_data;
|
|
}
|
|
}
|