You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
383 lines
14 KiB
383 lines
14 KiB
<?php |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// CRON FUNCTIONS - to use with cron_sms and cron_email backend |
|
// scripts to notify events |
|
//////////////////////////////////////////////////////////////////// |
|
|
|
// larry :: somne global to be defined here |
|
global $smsgateway_info; |
|
global $patient_info; |
|
global $data_info; |
|
|
|
global $SMS_NOTIFICATION_HOUR; |
|
global $EMAIL_NOTIFICATION_HOUR; |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_SendMail |
|
// Purpose: send mail |
|
// Input: to, subject, email body and from |
|
// Output: status - if sent or not |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_SendMail($to, $subject, $vBody, $from) |
|
{ |
|
// check if smtp globals set |
|
if ($GLOBALS['smtp_host_name'] == '') { |
|
// larry :: debug |
|
//echo "\nDEBUG :: use mail method\n"; |
|
|
|
// larry :: add cc/bcc - bot used ? |
|
$cc = ""; |
|
$bcc = ""; |
|
$format = ""; // mdsupport - replaces 0 which causes gmail formatting / display problems. |
|
|
|
//echo "function called";exit; |
|
if (strlen($format) == 0) { |
|
$format = "text/html"; |
|
} |
|
|
|
$headers = "MIME-Version: 1.0\r\n"; |
|
$headers .= "Content-type: " . $format . "; charset=iso-8859-1\r\n"; |
|
|
|
// additional headers |
|
$headers .= "From: $from\r\n"; |
|
if (strlen($cc) > 5) { |
|
$headers .= "Cc: $cc\r\n"; |
|
} |
|
|
|
if (strlen($bcc) > 5) { |
|
$headers .= "Bcc: $bcc\r\n"; |
|
} |
|
|
|
$cnt = ""; |
|
$cnt .= "\nHeaders : " . $headers; |
|
$cnt .= "\nDate Time :" . date("d M, Y h:i:s"); |
|
$cnt .= "\nTo : " . $to; |
|
$cnt .= "\nSubject : " . $subject; |
|
$cnt .= "\nBody : \n" . $vBody . "\n"; |
|
|
|
if (1) { |
|
//WriteLog($cnt); |
|
} |
|
|
|
$mstatus = true; |
|
$mstatus = @mail($to, $subject, $vBody, $headers); |
|
// larry :: debug |
|
//echo "\nDEBUG :email: send email from=".$from." to=".$to." sbj=".$subject." body=".$vBody." head=".$headers."\n"; |
|
//echo "\nDEBUG :email: send status=".$mstatus."\n"; |
|
} else { |
|
// larry :: debug |
|
//echo "\nDEBUG :: use smtp method\n"; |
|
|
|
if (!class_exists("smtp_class")) { |
|
include("../../library/classes/smtp/smtp.php"); |
|
include("../../library/classes/smtp/sasl.php"); |
|
} |
|
|
|
$strFrom = $from; |
|
$sender_line = __LINE__; |
|
$strTo = $to; |
|
$recipient_line = __LINE__; |
|
if (strlen($strFrom) == 0) { |
|
return( false ); |
|
} |
|
|
|
if (strlen($strTo) == 0) { |
|
return( false ); |
|
} |
|
|
|
//if( !$smtp ) |
|
$smtp = new smtp_class(); |
|
|
|
$smtp->host_name = $GLOBALS['smtp_host_name']; |
|
$smtp->host_port = $GLOBALS['smtp_host_port']; |
|
$smtp->ssl = $GLOBALS['smtp_use_ssl']; |
|
$smtp->localhost = $GLOBALS['smtp_localhost']; |
|
$smtp->direct_delivery = 0; |
|
$smtp->timeout = 10; |
|
$smtp->data_timeout = 0; |
|
|
|
$smtp->debug = 1; |
|
$smtp->html_debug = 0; |
|
$smtp->pop3_auth_host = ""; |
|
|
|
$smtp->user = $GLOBALS['smtp_auth_user']; |
|
$smtp->password = $GLOBALS['smtp_auth_pass']; |
|
|
|
$smtp->realm = ""; |
|
// Workstation name for NTLM authentication |
|
$smtp->workstation = ""; |
|
// Specify a SASL authentication method like LOGIN, PLAIN, CRAM-MD5, NTLM, etc.. |
|
// Leave it empty to make the class negotiate if necessary |
|
$smtp->authentication_mechanism = ""; |
|
|
|
// If you need to use the direct delivery mode and this is running under |
|
// Windows or any other platform |
|
if ($smtp->direct_delivery) { |
|
if (!function_exists("GetMXRR")) { |
|
$_NAMESERVERS = array(); |
|
include("getmxrr.php"); |
|
} |
|
} |
|
|
|
if ( |
|
$smtp->SendMessage( |
|
$strFrom, |
|
array( $strTo ), |
|
array( |
|
"From: $strFrom", |
|
"To: $strTo", |
|
"Subject: $subject", |
|
"Date Time :" . date("d M, Y h:i:s") |
|
), |
|
$vBody |
|
) |
|
) { |
|
echo "Message sent to " . text($to) . " OK.\n"; |
|
$mstatus = true; |
|
} else { |
|
echo "Cound not send the message to " . text($to) . ".\nError: " . text($smtp->error) . "\n"; |
|
$mstatus = false; |
|
} |
|
|
|
unset($smtp); |
|
} |
|
|
|
return $mstatus; |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: WriteLog |
|
// Purpose: written log into file |
|
//////////////////////////////////////////////////////////////////// |
|
function WriteLog($data) |
|
{ |
|
global $log_folder_path; |
|
|
|
$filename = $log_folder_path . "/cronlog_" . date("Ymd") . ".html"; |
|
//echo $filename;exit; |
|
if (!$fp = fopen($filename, 'a')) { |
|
print "Cannot open file (" . text($filename) . ")"; |
|
exit; |
|
} |
|
|
|
$sdata = "\n====================================================================\n"; |
|
|
|
if (!fwrite($fp, $sdata . $data . $sdata)) { |
|
print "Cannot write to file (" . text($filename) . ")"; |
|
exit; |
|
} |
|
|
|
fclose($fp); |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// define my_print_r - used for debuging - if not defined |
|
//////////////////////////////////////////////////////////////////// |
|
if (!function_exists('my_print_r')) { |
|
function my_print_r($data) |
|
{ |
|
echo "<pre>"; |
|
echo(text(print_r($data, true))); |
|
echo "</pre>"; |
|
} |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_SendSMS |
|
// Purpose: send sms |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_SendSMS($to, $subject, $vBody, $from) |
|
{ |
|
global $mysms; |
|
$cnt = ""; |
|
$cnt .= "\nDate Time :" . date("d M, Y h:i:s"); |
|
$cnt .= "\nTo : " . $to; |
|
$cnt .= "\From : " . $from; |
|
$cnt .= "\nSubject : " . $subject; |
|
$cnt .= "\nBody : \n" . $vBody . "\n"; |
|
if (1) { |
|
//WriteLog($cnt); |
|
} |
|
|
|
$mstatus = true; |
|
// larry :: todo - find out about the billing inclusion ? |
|
// $mysms->getbalance(); |
|
// $mysms->token_pay("1234567890123456"); //spend voucher with SMS credits |
|
$mysms->send($to, $from, $vBody); |
|
return $mstatus; |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_updateentry |
|
// Purpose: update status yes if alert send to patient |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_updateentry($type, $pid, $pc_eid) |
|
{ |
|
// larry :: this was commented - i remove comment - what it means * in this field ? |
|
//$set = " pc_apptstatus='*',"; - in this prev version there was a comma - somthing to follow ? |
|
//$set = " pc_apptstatus='*' "; |
|
|
|
//$query="update openemr_postcalendar_events set $set "; |
|
$query = "update openemr_postcalendar_events set "; |
|
|
|
// larry :: and here again same story - this time for sms pc_sendalertsms - no such field in the table |
|
if ($type == 'SMS') { |
|
$query .= " pc_sendalertsms='YES' "; |
|
} else { |
|
$query .= " pc_sendalertemail='YES' "; |
|
} |
|
|
|
$query .= " where pc_pid=? and pc_eid=? "; |
|
//echo "<br />".$query; |
|
$db_sql = (sqlStatement($query, [$pid, $pc_eid])); |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_getAlertpatientData |
|
// Purpose: get patient data for send to alert |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_getAlertpatientData($type) |
|
{ |
|
// larry :: move this at the top - not in the function body |
|
global $SMS_NOTIFICATION_HOUR,$EMAIL_NOTIFICATION_HOUR; |
|
// larry :: end commment |
|
|
|
|
|
//$ssql .= " and ((ope.pc_eventDate='$check_date') OR ('$check_date' BETWEEN ope.pc_eventDate AND ope.pc_endDate)) "; |
|
if ($type == 'SMS') { |
|
// larry :: remove ope.pc_sendalertemail='No' - nothing like it in the calendar |
|
$ssql = " and pd.hipaa_allowsms='YES' and pd.phone_cell<>'' and ope.pc_sendalertsms='NO' "; |
|
// $ssql = " and pd.hipaa_allowsms='YES' and pd.phone_cell<>'' "; |
|
|
|
$check_date = date("Y-m-d", mktime(date("h") + $SMS_NOTIFICATION_HOUR, 0, 0, date("m"), date("d"), date("Y"))); |
|
} else { |
|
// larry :: remove ope.pc_sendalertemail='No' - nothing like it in the calendar |
|
$ssql = " and pd.hipaa_allowemail='YES' and pd.email<>'' and ope.pc_sendalertemail='NO' "; |
|
//$ssql = " and pd.hipaa_allowemail='YES' and pd.email<>'' "; |
|
|
|
$check_date = date("Y-m-d", mktime(date("h") + $EMAIL_NOTIFICATION_HOUR, 0, 0, date("m"), date("d"), date("Y"))); |
|
} |
|
|
|
$patient_field = "pd.pid,pd.title,pd.fname,pd.lname,pd.mname,pd.phone_cell,pd.email,pd.hipaa_allowsms,pd.hipaa_allowemail,"; |
|
$ssql .= " and (ope.pc_eventDate='" . add_escape_custom($check_date) . "')"; |
|
// larry :: add condition if remnder was already sent |
|
// $ssql .= " and (ope.pc_apptstatus != '*' ) "; |
|
|
|
$query = "select $patient_field pd.pid,ope.pc_eid,ope.pc_pid,ope.pc_title, |
|
ope.pc_hometext,ope.pc_eventDate,ope.pc_endDate, |
|
ope.pc_duration,ope.pc_alldayevent,ope.pc_startTime,ope.pc_endTime |
|
from |
|
openemr_postcalendar_events as ope ,patient_data as pd |
|
where |
|
ope.pc_pid=pd.pid $ssql |
|
order by |
|
ope.pc_eventDate,ope.pc_endDate,pd.pid"; |
|
|
|
//echo "<br />".$query; |
|
|
|
$db_patient = (sqlStatement($query)); |
|
$patient_array = array(); |
|
$cnt = 0; |
|
while ($prow = sqlFetchArray($db_patient)) { |
|
$patient_array[$cnt] = $prow; |
|
$cnt++; |
|
} |
|
|
|
return $patient_array; |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_getNotificationData |
|
// Purpose: get alert notification data |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_getNotificationData($type) |
|
{ |
|
// larry :: pre populate array fields |
|
//$db_email_msg['notification_id'] = ''; |
|
//$db_email_msg['sms_gateway_type'] = ''; |
|
|
|
$query = "select * from automatic_notification where type=? "; |
|
//echo "<br />".$query; |
|
$db_email_msg = sqlFetchArray(sqlStatement($query, [$type])); |
|
return $db_email_msg; |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_InsertNotificationLogEntry |
|
// Purpose: insert log entry in table |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_InsertNotificationLogEntry($type, $prow, $db_email_msg) |
|
{ |
|
global $SMS_GATEWAY_USENAME,$SMS_GATEWAY_PASSWORD,$SMS_GATEWAY_APIKEY; |
|
if ($type == 'SMS') { |
|
$smsgateway_info = $db_email_msg['sms_gateway_type'] . "|||" . $SMS_GATEWAY_USENAME . "|||" . $SMS_GATEWAY_PASSWORD . "|||" . $SMS_GATEWAY_APIKEY; |
|
} else { |
|
$smsgateway_info = $db_email_msg['email_sender'] . "|||" . $db_email_msg['email_subject']; |
|
} |
|
|
|
$patient_info = $prow['title'] . " " . $prow['fname'] . " " . $prow['mname'] . " " . $prow['lname'] . "|||" . $prow['phone_cell'] . "|||" . $prow['email']; |
|
$data_info = $prow['pc_eventDate'] . "|||" . $prow['pc_endDate'] . "|||" . $prow['pc_startTime'] . "|||" . $prow['pc_endTime']; |
|
|
|
$sql_loginsert = "INSERT INTO `notification_log` ( `iLogId` , `pid` , `pc_eid` , `sms_gateway_type` , `message` , `email_sender` , `email_subject` , `type` , `patient_info` , `smsgateway_info` , `pc_eventDate` , `pc_endDate` , `pc_startTime` , `pc_endTime` , `dSentDateTime` ) VALUES "; |
|
$sql_loginsert .= "(NULL , ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
|
$db_loginsert = ( |
|
sqlStatement( |
|
$sql_loginsert, |
|
[ |
|
$prow['pid'], |
|
$prow['pc_eid'], |
|
$db_email_msg['sms_gateway_type'], |
|
$db_email_msg['message'], |
|
$db_email_msg['email_sender'], |
|
$db_email_msg['email_subject'], |
|
$db_email_msg['type'], |
|
$patient_info, |
|
$smsgateway_info, |
|
$prow['pc_eventDate'], |
|
$prow['pc_endDate'], |
|
$prow['pc_startTime'], |
|
$prow['pc_endTime'], |
|
date("Y-m-d H:i:s") |
|
] |
|
) |
|
); |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_setmessage |
|
// Purpose: set the message |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_setmessage($prow, $db_email_msg) |
|
{ |
|
// larry :: debug |
|
//echo "\nDEBUG :cron_setmessage: set message ".$prow['title']." ".$prow['fname']." ".$prow['mname']." ".$prow['lname']."\n"; |
|
|
|
$NAME = $prow['title'] . " " . $prow['fname'] . " " . $prow['mname'] . " " . $prow['lname']; |
|
//echo "DEBUG :1: name=".$NAME."\n"; |
|
|
|
$PROVIDER = $db_email_msg['provider_name']; |
|
$dtWrk = strtotime($prow['pc_eventDate'] . ' ' . $prow['pc_startTime']); |
|
$DATE = date('l F j, Y', $dtWrk); |
|
$STARTTIME = date('g:i A', $dtWrk); |
|
$ENDTIME = $prow['pc_endTime']; |
|
$find_array = array("***NAME***","***PROVIDER***","***DATE***","***STARTTIME***","***ENDTIME***"); |
|
$replare_array = array($NAME,$PROVIDER,$DATE,$STARTTIME,$ENDTIME); |
|
$message = str_replace($find_array, $replare_array, $db_email_msg['message']); |
|
// larry :: debug |
|
//echo "DEBUG :2: msg=".$message."\n"; |
|
|
|
return $message; |
|
} |
|
|
|
//////////////////////////////////////////////////////////////////// |
|
// Function: cron_GetNotificationSettings |
|
// Purpose: get notification settings |
|
//////////////////////////////////////////////////////////////////// |
|
function cron_GetNotificationSettings() |
|
{ |
|
$strQuery = "select * from notification_settings where type='SMS/Email Settings'"; |
|
$vectNotificationSettings = sqlFetchArray(sqlStatement($strQuery)); |
|
|
|
return( $vectNotificationSettings ); |
|
}
|
|
|