4 * This file contains functions for handling on-site portal mail.
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
13 use OpenEMR\Common\Logging\EventAuditLogger;
15 function addPortalMailboxMail(
20 $title = 'Unassigned',
23 $message_status = "New",
32 if (empty($datetime)) {
33 $datetime = date('Y-m-d H:i:s');
36 $user = $_SESSION['portal_username'] ? $_SESSION['portal_username'] : $_SESSION['authUser'];
37 // make inactive if set as Done
38 if ($message_status == "Done") {
43 if ($master_note == '0') {
44 $n = sqlQueryNoLog("SELECT MAX(id) as newid from onsite_mail");
45 $master_note = $n['newid'] + 1;
51 $master_note = $replyid;
54 $replyid = $master_note;
56 } elseif ($owner != $sid) {
57 $replyid = $master_note - 1;
59 $replyid = $master_note;
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)
69 function getPortalPatientDeleted($owner = '', $limit = '', $offset = 0, $search = '')
72 $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
93 WHERE p.deleted != 0 AND p.owner = ? AND p.recipient_id = ?
98 $all = $row = array();
99 $data = array($owner,$owner);
101 $data = array($owner,$owner,$owner);
104 $res = sqlStatement($sql, $data);
105 for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
112 function getPortalPatientNotes($owner = '', $limit = '', $offset = 0, $search = '')
115 $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
136 WHERE p.deleted != 1 AND p.owner = ? AND p.recipient_id = ?
141 $all = $row = array();
142 $data = array($owner,$owner);
144 $data = array($owner,$owner,$owner);
147 $res = sqlStatement($sql, $data);
148 for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
155 function getPortalPatientNotifications($owner = '', $limit = '', $offset = 0, $search = '')
158 $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
164 date_created AS `date`,
165 'Patient Reminders' AS `user`,
167 CONCAT(lo.title, ':', lo2.title) AS body,
168 '' as message_status,
169 'Notification' as `type`
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'
180 AND date_created > DATE_SUB(NOW(), INTERVAL 1 MONTH)
185 $all = $row = array();
186 $res = sqlStatement($sql, array($owner));
187 for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
194 function getPortalPatientSentNotes($owner = '', $limit = '', $offset = 0, $search = '')
197 $limit = "LIMIT " . escape_limit($offset) . ", " . escape_limit($limit);
219 WHERE p.sender_id = ?
222 AND p.message_status != 'Done'
227 $all = $row = array();
228 $res = sqlStatement($sql, array($owner,$owner));
229 for ($iter = 0; $row = sqlFetchArray($res); $iter++) {
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));
243 sqlStatement("update onsite_mail set message_status = ?, activity = '1' where id = ? and `owner` = ?", array($message_status, $id, $owner));
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'];
253 if ($_SESSION['patient_portal_onsite_two']) {
254 $log_from = 'patient-portal';
255 $puser = $_SESSION['pid'];
257 EventAuditLogger::instance()->newEvent("delete", $loguser, 'Portal', 1, $evt, $puser, $log_from, '');
261 function getMails($owner, $dotype, $nsrch, $nfsrch)
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);
270 $result_notes = getPortalPatientNotes($owner);
271 $result_notifications = getPortalPatientNotifications($owner);
272 $result = array_merge((array)$result_notes, (array)$result_notifications);
273 //$result = $result_notes;
277 } elseif ($dotype == "sent") {
279 $result_sent_notes = getPortalPatientSentNotes($owner, '', '0', $nsrch);
281 $result_sent_notes = getPortalPatientSentNotes($owner);
284 return $result_sent_notes;
285 } elseif ($dotype == "all") {
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);
291 } elseif ($dotype == "deleted") {
293 $result = getPortalPatientDeleted($owner, '', '0', "OR (p.deleted = 1 AND (p.owner = ?)) ");
301 function sendMail($owner, $note, string $title = null, $to, $noteid, $sid, $sn, $rid, $rn, $status = 'New', $replyid = '')
304 $title = 'Unassigned';
307 addPortalMailboxMail($owner, $note, '1', '1', $title, $to, '', $status, $noteid, $sid, $sn, $rid, $rn, $replyid);