- 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.
344 lines
14 KiB
Desktop File
344 lines
14 KiB
Desktop File
<?php
|
|
////////////////////////////////////////////////////
|
|
// PHPMailer - PHP email class
|
|
//
|
|
// Class for sending email using either
|
|
// sendmail, PHP mail(), or SMTP. Methods are
|
|
// based upon the standard AspEmail(tm) classes.
|
|
//
|
|
// Copyright (C) 2001 - 2003 Brent R. Matzelle
|
|
//
|
|
// License: LGPL, see LICENSE
|
|
////////////////////////////////////////////////////
|
|
|
|
/**
|
|
* PHPMailer - PHP email transport class
|
|
* @package PHPMailer
|
|
* @author Brent R. Matzelle
|
|
* @copyright 2001 - 2003 Brent R. Matzelle
|
|
*/
|
|
|
|
|
|
//file modified by richie
|
|
|
|
require_once('include/utils/utils.php');
|
|
require_once("modules/Emails/class.smtp.php");
|
|
require_once("modules/Emails/class.phpmailer.php");
|
|
require_once("modules/Emails/mail.php");
|
|
require_once('include/logging.php');
|
|
require_once("config.php");
|
|
|
|
// SalesPlatform.ru begin current_user global var fix
|
|
global $current_user;
|
|
global $current_language;
|
|
global $default_language;
|
|
// SalesPlatform.ru end
|
|
$current_user = Users::getActiveAdminUser();
|
|
// Set the default sender email id
|
|
global $HELPDESK_SUPPORT_EMAIL_ID;
|
|
$from = $HELPDESK_SUPPORT_EMAIL_ID;
|
|
if(empty($from)) {
|
|
// default configuration is empty?
|
|
$from = "reminders@localserver.com";
|
|
}
|
|
|
|
//SalesPlatform.ru begin
|
|
global $HELPDESK_SUPPORT_NAME;
|
|
//SalesPlatform.ru end
|
|
|
|
// Get the list of activity for which reminder needs to be sent
|
|
|
|
global $adb;
|
|
global $log;
|
|
global $site_URL;
|
|
$log =& LoggerManager::getLogger('SendReminder');
|
|
$log->debug(" invoked SendReminder ");
|
|
|
|
// retrieve the translated strings.
|
|
if(empty($current_language))
|
|
// SalesPlatform.ru begin current_language global var fix
|
|
$current_language = $default_language;
|
|
//$current_language = 'en_us';
|
|
// SalesPlatform.ru end
|
|
$app_strings = return_application_language($current_language);
|
|
|
|
//modified query for recurring events -Jag
|
|
$query="SELECT vtiger_crmentity.crmid, vtiger_crmentity.description, vtiger_crmentity.smownerid, vtiger_seactivityrel.crmid AS setype,vtiger_activity.*,vtiger_activity_reminder.reminder_time,
|
|
vtiger_activity_reminder.reminder_sent,vtiger_activity_reminder.recurringid FROM vtiger_activity
|
|
INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_activity.activityid
|
|
INNER JOIN vtiger_activity_reminder ON vtiger_activity.activityid=vtiger_activity_reminder.activity_id
|
|
LEFT OUTER JOIN vtiger_seactivityrel ON vtiger_seactivityrel.activityid = vtiger_activity.activityid
|
|
WHERE DATE_FORMAT(vtiger_activity.date_start,'%Y-%m-%d, %H:%i:%s') >= '".date('Y-m-d')."' AND vtiger_crmentity.crmid != 0 AND
|
|
(vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus NOT IN ('Held','Cancelled'))
|
|
AND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred', 'Cancelled'))
|
|
AND vtiger_activity_reminder.reminder_sent = 0 AND vtiger_activity_reminder.reminder_time != 0
|
|
GROUP BY vtiger_activity.activityid";
|
|
$result = $adb->pquery($query, array());
|
|
|
|
if($adb->num_rows($result) >= 1)
|
|
{
|
|
//To fetch reminder frequency from cron tasks
|
|
$reminderFrequencyQuery = 'SELECT frequency FROM vtiger_cron_task WHERE name = "SendReminder" AND handler_file = "cron/SendReminder.service"';
|
|
$reminderResult = $adb->pquery($reminderFrequencyQuery, array());
|
|
$reminderFrequency = $adb->query_result($reminderResult,0,'frequency');
|
|
|
|
// Retriving the reminder email content from emailtemplates table
|
|
$templateQuery='SELECT body FROM vtiger_emailtemplates WHERE subject=? AND systemtemplate=?';
|
|
$templateResult = $adb->pquery($templateQuery, array('Reminder', '1'));
|
|
$eventReminderBody=decode_html($adb->query_result($templateResult,0,'body'));
|
|
|
|
// Retriving the reminder email content from emailtemplates table
|
|
$templateQuery='SELECT body FROM vtiger_emailtemplates WHERE subject=? AND systemtemplate=?';
|
|
$templateResult = $adb->pquery($templateQuery, array('Activity Reminder', '1'));
|
|
$todoReminderBody=decode_html($adb->query_result($templateResult,0,'body'));
|
|
|
|
while($result_set = $adb->fetch_array($result))
|
|
{
|
|
$date_start = $result_set['date_start'];
|
|
$time_start = $result_set['time_start'];
|
|
$reminder_time = $result_set['reminder_time']*60;
|
|
$date = new DateTimeField( null );
|
|
$userFormatedString = $date->getDisplayDate();
|
|
$timeFormatedString = $date->getDisplayTime();
|
|
$dBFomatedDate = DateTimeField::convertToDBFormat($userFormatedString);
|
|
$curr_time = strtotime($dBFomatedDate." ". $timeFormatedString);
|
|
$activity_id = $result_set['activityid'];
|
|
$activitymode = ($result_set['activitytype'] == "Task")?"Task":"Events";
|
|
$parent_type = $result_set['setype'];
|
|
$activity_sub = $result_set['subject'];
|
|
$to_addr='';
|
|
|
|
if($parent_type!='')
|
|
$parent_content = getParentInfo($parent_type)."\n";
|
|
else
|
|
$parent_content = "";
|
|
//code included for recurring events by jaguar starts
|
|
$recur_id = $result_set['recurringid'];
|
|
$current_date=date('Y-m-d');
|
|
if($recur_id == 0)
|
|
{
|
|
$date_start = $result_set['date_start'];
|
|
}
|
|
else
|
|
{
|
|
$date_start = $result_set['recurringdate'];
|
|
}
|
|
//code included for recurring events by jaguar ends
|
|
$date = new DateTimeField("$date_start $time_start");
|
|
$userFormatedString = $date->getDisplayDate();
|
|
$timeFormatedString = $date->getDisplayTime();
|
|
$dBFomatedDate = DateTimeField::convertToDBFormat($userFormatedString);
|
|
$activity_time = strtotime($dBFomatedDate.' '.$timeFormatedString);
|
|
$differenceOfActivityTimeAndCurrentTime = ($activity_time - $curr_time);
|
|
if (($differenceOfActivityTimeAndCurrentTime > 0) && (($differenceOfActivityTimeAndCurrentTime <= $reminder_time) || ($differenceOfActivityTimeAndCurrentTime <= $reminderFrequency)))
|
|
{
|
|
$log->debug(" InSide REMINDER");
|
|
$query_user="SELECT vtiger_users.email1,vtiger_salesmanactivityrel.smid FROM vtiger_salesmanactivityrel inner join vtiger_users on vtiger_users.id=vtiger_salesmanactivityrel.smid WHERE vtiger_salesmanactivityrel.activityid =? AND vtiger_users.deleted=? AND vtiger_users.status=?";
|
|
$user_result = $adb->pquery($query_user, array($activity_id, 0, 'Active'));
|
|
$invitedUsersList = array();
|
|
if($adb->num_rows($user_result)>=1)
|
|
{
|
|
while($user_result_row = $adb->fetch_array($user_result))
|
|
{
|
|
if($user_result_row['email1']!='' || $user_result_row['email1'] !=NULL)
|
|
{
|
|
$to_addr[$user_result_row['smid']] = $user_result_row['email1'];
|
|
}
|
|
$invitedUsersList[] = $user_result_row['smid'];
|
|
}
|
|
}
|
|
|
|
$ownerId = $result_set['smownerid'];
|
|
if (!in_array($ownerId, $invitedUsersList)) {
|
|
$ownerId = $invitedUsersList[0];
|
|
}
|
|
$ownerFocus = CRMEntity::getInstance('Users');
|
|
$ownerFocus->retrieve_entity_info($ownerId, 'Users');
|
|
$ownerTimeZone = getTranslatedString($ownerFocus->column_fields['time_zone'], 'Users');
|
|
|
|
$dateTime = new DateTimeField($result_set['date_start'] .' '. $result_set['time_start']);
|
|
$dateTimeInOwnerFormat = $dateTime->getDisplayDateTimeValue($ownerFocus);
|
|
|
|
$enddateTime = new DateTimeField($result_set['due_date'] .' '. $result_set['time_end']);
|
|
$enddateTimeInOwnerFormat = $enddateTime->getDisplayDateTimeValue($ownerFocus);
|
|
|
|
//get related contact names
|
|
$cont_qry = "SELECT * FROM vtiger_cntactivityrel WHERE activityid=?";
|
|
$cont_res = $adb->pquery($cont_qry, array($activity_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 .', ';
|
|
}
|
|
}
|
|
$cont_name = trim($cont_name,', ');
|
|
$result_set['subject'] = decode_html($result_set['subject']);
|
|
if($result_set['activitytype'] == "Task") {
|
|
$enddateInOwnerFormat = $enddateTime->getDisplayDate($ownerFocus);
|
|
$list = $todoReminderBody;
|
|
$list = str_replace('$calendar-subject$',$result_set['subject'],$list);
|
|
$list = str_replace('$calendar-description$',$result_set['description'],$list);
|
|
$list = str_replace('$calendar-date_start$', $dateTimeInOwnerFormat.' '.$ownerTimeZone, $list);
|
|
$list = str_replace('$calendar-due_date$', $enddateInOwnerFormat.' '.$ownerTimeZone, $list);
|
|
|
|
$contents = getMergedDescription($list, $activity_id, 'Calendar',true);
|
|
$subject = vtranslate('Activity Reminder', 'Calendar').': '.$result_set['subject'] . " @ $dateTimeInOwnerFormat";
|
|
} else {
|
|
$list = $eventReminderBody;
|
|
$list = str_replace('$events-subject$',decode_html($result_set['subject']),$list);
|
|
$list = str_replace('$events-description$',decode_html($result_set['description']),$list);
|
|
$list = str_replace('$events-date_start$', $dateTimeInOwnerFormat.' '.$ownerTimeZone, $list);
|
|
$list = str_replace('$events-due_date$', $enddateTimeInOwnerFormat.' '.$ownerTimeZone, $list);
|
|
$list = str_replace('$events-contactid$', $cont_name, $list);
|
|
|
|
$contents = getMergedDescription($list, $activity_id, 'Events',true);
|
|
$subject = vtranslate('Reminder', 'Calendar').': '.$result_set['subject'] . " @ $dateTimeInOwnerFormat";
|
|
}
|
|
|
|
$recordModel = Vtiger_Record_Model::getInstanceById($activity_id, 'Calendar');
|
|
$recordDetailViewLink = $recordModel->getDetailViewUrl();
|
|
$contents = $contents."<br/> ".vtranslate('LBL_CLICK_HERE_TO_VIEW', 'Calendar')." <a href=$site_URL/$recordDetailViewLink>".vtranslate('LBL_RECORD', 'Calendar')."</a>";
|
|
if(count($to_addr) >=1)
|
|
{
|
|
//SalesPlatform.ru begin
|
|
$status = send_email($to_addr,$from,$subject,$contents,$mail_server,$mail_server_username,$mail_server_password);
|
|
//send_email($to_addr,$from,$subject,$contents,$mail_server,$mail_server_username,$mail_server_password);
|
|
if($status == 1) {
|
|
//SalesPlatform.ru end
|
|
$upd_query = "UPDATE vtiger_activity_reminder SET reminder_sent = ?";
|
|
$upd_params = array(1);
|
|
|
|
if($recur_id!=0)
|
|
{
|
|
$upd_query.=" and recurringid =?";
|
|
array_push($upd_params, $recur_id);
|
|
}
|
|
|
|
$adb->pquery($upd_query, $upd_params);
|
|
//SalesPlatform.ru begin
|
|
}
|
|
//SalesPlatform.ru end
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
This function is used to assign parameters to the mail object and send it.
|
|
It takes the following as parameters.
|
|
$to as string - to address
|
|
$from as string - from address
|
|
$subject as string - subject if the mail
|
|
$contents as text - content of the mail
|
|
$mail_server as string - sendmail server name
|
|
$mail_server_username as string - sendmail server username
|
|
$mail_server_password as string - sendmail server password
|
|
|
|
*/
|
|
function send_email($to,$from,$subject,$contents,$mail_server,$mail_server_username,$mail_server_password)
|
|
{
|
|
global $adb;
|
|
global $log;
|
|
$log->info("This is send_mail function in SendReminder.php(vtiger home).");
|
|
global $root_directory;
|
|
|
|
$mail = new PHPMailer();
|
|
|
|
|
|
$mail->Subject = $subject;
|
|
$mail->Body = nl2br($contents);//"This is the HTML message body <b>in bold!</b>";
|
|
|
|
$mail->IsSMTP();// set mailer to use SMTP
|
|
$mailserverresult=$adb->pquery("select * from vtiger_systems where server_type='email'", array());
|
|
$mail_server = $adb->query_result($mailserverresult,0,'server');
|
|
$mail_server_username = $adb->query_result($mailserverresult,0,'server_username');
|
|
$mail_server_password = $adb->query_result($mailserverresult,0,'server_password');
|
|
$smtp_auth = $adb->query_result($mailserverresult,0,'smtp_auth');
|
|
|
|
$_REQUEST['server']=$mail_server;
|
|
$log->info("Mail Server Details => '".$mail_server."','".$mail_server_username."','".$mail_server_password."'");
|
|
|
|
$mail->Host = $mail_server; // specify main and backup server
|
|
if($smtp_auth == 'true' || $smtp_auth == '1')
|
|
$mail->SMTPAuth = true;
|
|
else
|
|
$mail->SMTPAuth = false;
|
|
$mail->Username = $mail_server_username ; // SMTP username
|
|
$mail->Password = Vtiger_Functions::fromProtectedText($mail_server_password) ; // SMTP password
|
|
$mail->From = $from;
|
|
$mail->FromName = $initialfrom;
|
|
$log->info("Mail sending process : From Name & email id => '".$initialfrom."','".$from."'");
|
|
foreach($to as $pos=>$addr)
|
|
{
|
|
$mail->AddAddress($addr);// name is optional
|
|
$log->info("Mail sending process : To Email id = '".$addr."' (set in the mail object)");
|
|
|
|
}
|
|
$mail->WordWrap = 50;// set word wrap to 50 characters
|
|
|
|
$mail->IsHTML(true);// set email format to HTML
|
|
|
|
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
|
|
|
|
// To Support TLS
|
|
$serverinfo = explode("://", $mail_server);
|
|
$smtpsecure = $serverinfo[0];
|
|
if($smtpsecure == 'tls'){
|
|
$mail->SMTPSecure = $smtpsecure;
|
|
$mail->Host = $serverinfo[1];
|
|
}
|
|
// End
|
|
|
|
$flag = MailSend($mail);
|
|
$log->info("After executing the mail->Send() function.");
|
|
|
|
//SalesPlatform.ru begin
|
|
return $flag;
|
|
//SalesPlatform.ru end
|
|
}
|
|
|
|
/**
|
|
This function is used to get the Parent type and its Name
|
|
It takes the input integer - crmid and returns the parent type and its name as string.
|
|
*/
|
|
function getParentInfo($value)
|
|
{
|
|
global $adb;
|
|
$parent_module = getSalesEntityType($value);
|
|
if($parent_module == "Leads")
|
|
{
|
|
$sql = "select * from vtiger_leaddetails where leadid=?";
|
|
$result = $adb->pquery($sql, array($value));
|
|
$first_name = $adb->query_result($result,0,"firstname");
|
|
$last_name = $adb->query_result($result,0,"lastname");
|
|
|
|
$parent_name = $last_name.' '.$first_name;
|
|
}
|
|
elseif($parent_module == "Accounts")
|
|
{
|
|
$sql = "select * from vtiger_account where accountid=?";
|
|
$result = $adb->pquery($sql, array($value));
|
|
$account_name = $adb->query_result($result,0,"accountname");
|
|
|
|
$parent_name =$account_name;
|
|
}
|
|
elseif($parent_module == "Potentials")
|
|
{
|
|
$sql = "select * from vtiger_potential where potentialid=?";
|
|
$result = $adb->pquery($sql, array($value));
|
|
$potentialname = $adb->query_result($result,0,"potentialname");
|
|
|
|
$parent_name =$potentialname;
|
|
}
|
|
return $parent_module ." : ".$parent_name;
|
|
}
|
|
?>
|