minor adjustment (#5898)
[openemr.git] / portal / lib / portal_mail.inc
blob3e5808fd22f38a6d9f7aa7226a3188e84c008961
1 <?php
3 /**
4  * This file contains functions for handling on-site portal mail.
5  *
6  * @package   OpenEMR
7  * @link      https://www.open-emr.org
8  * @author    Jerry Padgett <sjpadgett@gmail.com>
9  * @copyright Copyright (c) 2016-2017 Jerry Padgett <sjpadgett@gmail.com>
10  * @license   https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
11  */
13 use OpenEMR\Common\Logging\EventAuditLogger;
15 function addPortalMailboxMail(
16     $owner,
17     $newtext,
18     $authorized = '0',
19     $activity = '1',
20     $title = 'Unassigned',
21     $assigned_to = '',
22     $datetime = '',
23     $message_status = "New",
24     $master_note = '0',
25     $sid = '',
26     $sn = '',
27     $rid = '',
28     $rn = '',
29     $replyid = 0
30 ) {
32     if (empty($datetime)) {
33         $datetime = date('Y-m-d H:i:s');
34     }
36     $user = $_SESSION['portal_username'] ? $_SESSION['portal_username'] : $_SESSION['authUser'];
37     // make inactive if set as Done
38     if ($message_status == "Done") {
39         $activity = 0;
40     }
42     $body = $newtext;
43     if ($master_note == '0') {
44         $n = sqlQueryNoLog("SELECT MAX(id) as newid from onsite_mail");
45         $master_note = $n['newid'] + 1;
46     }
48     if ($replyid) {
49         if ($owner != $sid) {
50             $hold = $master_note;
51             $master_note = $replyid;
52             $replyid = $hold;
53         } else {
54             $replyid = $master_note;
55         }
56     } elseif ($owner != $sid) {
57         $replyid = $master_note - 1;
58     } else {
59         $replyid = $master_note;
60     }
62     return sqlInsert(
63         "INSERT INTO onsite_mail (date, body, owner, user, groupname, " .
64             "authorized, activity, title, assigned_to, message_status, mail_chain, sender_id, sender_name, recipient_id, recipient_name, reply_mail_chain) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)",
65         array($datetime, $body, $owner, $user, 'Default', $authorized, $activity, $title, $assigned_to, $message_status,$master_note,$sid,$sn,$rid,$rn,$replyid)
66     );
69 function getPortalPatientDeleted($owner = '', $limit = '', $offset = 0, $search = '')
71     if ($limit) {
72         $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
73     }
75     $sql = "
76         SELECT
77         p.id,
78         p.date,
79         p.owner,
80         p.user,
81         p.title,
82         p.body AS body,
83         p.message_status,
84         'Message' as `type`,
85         p.sender_id,
86         p.sender_name,
87         p.recipient_id,
88         p.recipient_name,
89         p.mail_chain,
90         p.reply_mail_chain
91         FROM
92         onsite_mail AS p
93         WHERE p.deleted != 0 AND p.owner = ? AND p.recipient_id = ?
94         $search
95         ORDER BY `date` desc
96         $limit
97         ";
98     $all = $row = array();
99     $data = array($owner,$owner);
100     if ($search) {
101         $data = array($owner,$owner,$owner);
102     }
104     $res = sqlStatement($sql, $data);
105     for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
106         $all[$iter] = $row;
107     }
109     return $all;
112 function getPortalPatientNotes($owner = '', $limit = '', $offset = 0, $search = '')
114     if ($limit) {
115         $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
116     }
118     $sql = "
119         SELECT
120         p.id,
121         p.date,
122         p.owner,
123         p.user,
124         p.title,
125         p.body AS body,
126         p.message_status,
127         'Message' as `type`,
128         p.sender_id,
129         p.sender_name,
130         p.recipient_id,
131         p.recipient_name,
132         p.mail_chain,
133         p.reply_mail_chain
134         FROM
135         onsite_mail AS p
136         WHERE p.deleted != 1 AND p.owner = ? AND p.recipient_id = ?
137         $search
138         ORDER BY `date` desc
139         $limit
140         ";
141     $all = $row = array();
142     $data = array($owner,$owner);
143     if ($search) {
144         $data = array($owner,$owner,$owner);
145     }
147     $res = sqlStatement($sql, $data);
148     for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
149         $all[$iter] = $row;
150     }
152     return $all;
155 function getPortalPatientNotifications($owner = '', $limit = '', $offset = 0, $search = '')
157     if ($limit) {
158         $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
159     }
161     $sql = "
162         SELECT
163         pr.id,
164         date_created AS `date`,
165         'Patient Reminders' AS `user`,
166         due_status AS title,
167         CONCAT(lo.title, ':', lo2.title) AS body,
168         '' as message_status,
169         'Notification' as `type`
170         FROM
171         patient_reminders AS pr
172         LEFT JOIN list_options AS lo
173         ON lo.option_id = pr.category
174         AND lo.list_id = 'rule_action_category'
175         LEFT JOIN list_options AS lo2
176         ON lo2.option_id = pr.item
177         AND lo2.list_id = 'rule_action'
178         WHERE pid = ?
179         AND active = 1
180         AND date_created > DATE_SUB(NOW(), INTERVAL 1 MONTH)
181         $search
182         ORDER BY `date` desc
183         $limit
184         ";
185     $all = $row = array();
186     $res = sqlStatement($sql, array($owner));
187     for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
188         $all[$iter] = $row;
189     }
191     return $all;
194 function getPortalPatientSentNotes($owner = '', $limit = '', $offset = 0, $search = '')
196     if ($limit) {
197         $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
198     }
200     $sql = "
201         SELECT
202         p.id,
203         p.date,
204         p.assigned_to,
205         p.title,
206         p.body,
207         p.activity,
208         p.message_status,
209         'Message' as `type`,
210         p.mail_chain,
211         p.reply_mail_chain,
212         p.owner,
213         p.sender_id,
214         p.sender_name,
215         p.recipient_id,
216         p.recipient_name
217         FROM
218         onsite_mail AS p
219         WHERE p.sender_id = ?
220         AND p.deleted != 1
221         AND p.owner = ?
222         AND p.message_status != 'Done'
223         $search
224         ORDER BY `date` desc
225         $limit
226         ";
227     $all = $row = array();
228     $res = sqlStatement($sql, array($owner,$owner));
229     for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
230         $all[$iter] = $row;
231     }
233     return $all;
236 function updatePortalMailMessageStatus($id, $message_status, $owner)
238     if ($message_status == "Done") {
239         sqlStatement("update onsite_mail set message_status = ?, activity = '0' where id = ? and `owner` = ?", array($message_status, $id, $owner));
240     } elseif ($message_status == "Delete") {
241         sqlStatement("update onsite_mail set message_status = ?, activity = '1', deleted = '1',delete_date = ? where (mail_chain = ? OR id = ?) and `owner` = ?", array($message_status, date('Y-m-d H:i:s'), $id, $id, $owner));
242     } else {
243         sqlStatement("update onsite_mail set message_status = ?, activity = '1' where id = ? and `owner` = ?", array($message_status, $id, $owner));
244     }
246     if ($message_status == "Delete") {
247         $stats = sqlQuery("Select * From onsite_mail Where id = ? AND `owner` = ?", array($id, $owner));
248         $by = $_SESSION['authUser'] ? $_SESSION['authUser'] : $_SESSION['ptName'];
249         $loguser = $_SESSION['authUser'] ? $_SESSION['authUser'] : $_SESSION['portal_username'];
250         $evt = "secure message soft delete by " . $by . " msg id: $id from " . $stats['sender_name'] . " to recipient: " . $stats['recipient_name'];
251         $log_from = '';
252         $puser = '';
253         if ($_SESSION['patient_portal_onsite_two']) {
254             $log_from = 'patient-portal';
255             $puser = $_SESSION['pid'];
256         }
257         EventAuditLogger::instance()->newEvent("delete", $loguser, 'Portal', 1, $evt, $puser, $log_from, '');
258     }
261 function getMails($owner, $dotype, $nsrch, $nfsrch)
263     if ($owner) {
264         if ($dotype == "inbox") {
265             if ($nsrch && $nfsrch) {
266                 $result_notes = getPortalPatientNotes($owner, '', '0', $nsrch);
267                 $result_notifications = getPortalPatientNotifications($owner, '', '0', $nfsrch);
268                 $result = array_merge((array)$result_notes, (array)$result_notifications);
269             } else {
270                 $result_notes = getPortalPatientNotes($owner);
271                 $result_notifications = getPortalPatientNotifications($owner);
272                 $result = array_merge((array)$result_notes, (array)$result_notifications);
273                 //$result = $result_notes;
274             }
276             return $result;
277         } elseif ($dotype == "sent") {
278             if ($nsrch) {
279                 $result_sent_notes = getPortalPatientSentNotes($owner, '', '0', $nsrch);
280             } else {
281                 $result_sent_notes = getPortalPatientSentNotes($owner);
282             }
284             return $result_sent_notes;
285         } elseif ($dotype == "all") {
286             $result = array();
287             $result_notes = getPortalPatientNotes($owner, '', '0', "OR (p.deleted != 1 AND (p.owner = ?)) ");
288             $result_notifications = getPortalPatientNotifications($owner);
289             $result = array_merge((array)$result_notes, (array)$result_notifications);
290             return $result;
291         } elseif ($dotype == "deleted") {
292             $result = array();
293             $result = getPortalPatientDeleted($owner, '', '0', "OR (p.deleted = 1 AND (p.owner = ?)) ");
294             return $result;
295         }
296     } else {
297         return 'failed';
298     }
301 function sendMail($owner, $note, string $title = null, $to, $noteid, $sid, $sn, $rid, $rn, $status = 'New', $replyid = '')
303     if (!$title) {
304         $title = 'Unassigned';
305     }
306     if ($owner) {
307         addPortalMailboxMail($owner, $note, '1', '1', $title, $to, '', $status, $noteid, $sid, $sn, $rid, $rn, $replyid);
308         return 1;
309     } else {
310         return 'failed';
311     }