forked from openemr/openemr
/
cron_sms_notification.php
191 lines (150 loc) · 5.97 KB
/
cron_sms_notification.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<?php
////////////////////////////////////////////////////////////////////
// Package: sms_cron_notification
// Purpose: to be run by cron every hour, look for appointments
// in the pre-notification period and send an sms reminder
//
// Created by:
// Updated by: Larry Lart on 11/03/2008
////////////////////////////////////////////////////////////////////
// larry :: hack add for command line version
$_SERVER['REQUEST_URI']=$_SERVER['PHP_SELF'];
$_SERVER['SERVER_NAME']='localhost';
$backpic = "";
// email notification
$ignoreAuth=1;
//print_r($_SERVER);
include_once("/var/www/openemr/interface/globals.php");
include_once("/var/www/openemr/modules/sms_email_reminder/cron_functions.php");
// check command line for quite option
$bTestRun = 0;
if( $argc > 1 && $argv[1] == 'test' ) $bTestRun = 1;
$TYPE = "SMS";
$CRON_TIME = 5;
$curr_date = date("Y-m-d");
$curr_time = time();
$check_date = date("Y-m-d", mktime(date("h")+$SMS_NOTIFICATION_HOUR, 0, 0, date("m"), date("d"), date("Y")));
// larry :: move this in the loop to keep it fresh - perhaps try to use it without change
// it's content - to do latter
$db_email_msg = cron_getNotificationData($TYPE);
// object for sms
global $mysms;
$sql="select * from globals where gl_name in ('TWILIO_ACCOUNT_SID','TWILIO_AUTHTOKEN','TWILIO_FROM')";
$q=mysql_query($sql);
while($r=mysql_fetch_assoc($q)){
if($r['gl_name']=='TWILIO_ACCOUNT_SID')
$AccountSid=$r['gl_value'];
if($r['gl_name']=='TWILIO_AUTHTOKEN')
$AuthToken=$r['gl_value'];
if($r['gl_name']=='TWILIO_FROM')
$from=$r['gl_value'];
}
if($AccountSid)
{
include_once("/var/www/openemr/modules/sms_email_reminder/sendnotifications.php");
}else
if( $db_email_msg['sms_gateway_type']=='CLICKATELL' )
{
include_once("/var/www/openemr/modules/sms_email_reminder/sms_clickatell.php");
}else if($db_email_msg['sms_gateway_type']=='TMB4')
{
include_once("/var/www/openemr/modules/sms_email_reminder/sms_tmb4.php");
}
function mysql2dmy($input) {
$output = false;
$input1 = $input;
$input = substr($input, 0, 10);
$d = explode('-', $input);
if (is_array($d) && count($d) >= 3) {
if (checkdate($d[1], $d[2], $d[0]) || ($d[2] == "00" && $d[1] == "00")) {
$output = "$d[2]/$d[1]/$d[0]";
}
if (substr($input1, 11))
$output.=" " . substr($input1, 11);
}
return $output;
}
// get notification settings
$vectNotificationSettings = cron_GetNotificationSettings( );
$SMS_GATEWAY_USENAME = $vectNotificationSettings['SMS_gateway_username'];
$SMS_GATEWAY_PASSWORD = $vectNotificationSettings['SMS_gateway_password'];
$SMS_GATEWAY_APIKEY = $vectNotificationSettings['SMS_gateway_apikey'];
// set cron time (time to event ?) - todo extra tests
$CRON_TIME = $vectNotificationSettings['Send_SMS_Before_Hours'];
//echo "\nDEBUG :: user=".$vectNotificationSettings['SMS_gateway_username']."\n";
// create sms object
if($AccountSid=='')
$mysms = new sms( $SMS_GATEWAY_USENAME, $SMS_GATEWAY_PASSWORD, $SMS_GATEWAY_APIKEY );
$db_patient = cron_getAlertpatientData($TYPE);
echo "\n<br>Total ".count($db_patient)." Records Found";
// for every event found
for( $p=0; $p<count($db_patient); $p++ )
{
$prow =$db_patient[$p];
//echo "\n-----\nDEBUG :cron_sms: found patient = ".$prow['fname']." ".$prow['lname']."\n";
// my_print_r($prow);
if($prow['pc_eventDate'] < $check_date)
{
$app_date = date("Y-m-d")." ".$prow['pc_startTime'];
}else{
$app_date = $prow['pc_eventDate']." ".$prow['pc_startTime'];
}
$app_date = $prow['pc_eventDate']." ".$prow['pc_startTime'];
$app_time = strtotime($app_date);
$app_time_hour = round($app_time/3600);
$curr_total_hour = round(time()/3600);
$remaining_app_hour = round($app_time_hour - $curr_total_hour);
$remain_hour = round($remaining_app_hour - $SMS_NOTIFICATION_HOUR);
// larry :: debug
//echo "\nDEBUG :: checkdate=$check_date, app_date=$app_date, apptime=$app_time remain_hour=$remain_hour -- CRON_TIME=$CRON_TIME\n";
// build log message
$strMsg = "\n========================".$TYPE." || ".date("Y-m-d H:i:s")."=========================";
$strMsg .= "\nSEND NOTIFICATION BEFORE:".$SMS_NOTIFICATION_HOUR." || CRONJOB RUN EVERY:".$CRON_TIME." || APPDATETIME:".$app_date." || REMAINING APP HOUR:".($remaining_app_hour)." || SEND ALERT AFTER:".($remain_hour);
// check in the interval
if( $remain_hour >= -($CRON_TIME) && $remain_hour <= $CRON_TIME )
{
// insert entry in notification_log table
cron_InsertNotificationLogEntry($TYPE,$prow,$db_email_msg);
//set message
$db_email_msg['message'] = "This is a reminder of your appointment with Vijay Optica on ".mysql2dmy($app_date).". Thank you.";//cron_setmessage($prow,$db_email_msg);
// send sms to patinet - if not in test mode
//echo $AccountSid;
if($AccountSid){
$people=array(
$prow['phone_cell']=>"Patient"
);
$body=$db_email_msg['message'];
sendtsms($AccountSid, $AuthToken, $from, $people, $body);
}
elseif( $bTestRun == 0 )
{
cron_SendSMS( $prow['phone_cell'], $db_email_msg['email_subject'],
$db_email_msg['message'], $db_email_msg['email_sender'] );
}
// larry :: debug
echo "\nDEBUG :: sms was sent to= ".$prow['phone_cell'].
" \nsender= ".$db_email_msg['email_sender'].
" \nsbj= ". $db_email_msg['email_subject'].
" \nmsg= ".$db_email_msg['message']."\n";
//update entry >> pc_sendalertsms='Yes'
cron_updateentry($TYPE,$prow['pid'],$prow['pc_eid']);
$strMsg .= " || ALERT SENT SUCCESSFULLY TO ".$prow['phone_cell'];
$strMsg .= "\n".$patient_info."\n".$smsgateway_info."\n".$data_info."\n".$db_email_msg['message'];
}
// write logs for every reminder sent
WriteLog($strMsg);
// larry :: update notification data again - todo :: fix change in cron_updateentry
$db_email_msg = cron_getNotificationData($TYPE);
}
unset($mysms);
sqlClose();
?>
<html>
<head>
<title>Conrjob - SMS Notification</title>
</head>
<body>
<center>
</center>
</body>
</html>