This code (below) sends an email notification to a User, when he’s received a web site chat/message. However, sending an email with each chat/message will probably be too many emails received. I’d like help to modify it, so that when a chat/message is received, and an email is sent, to that User, no more email notifications get sent until the User visits the site again. Any help/guidance will be appreciated.
<?php
if (IS_LOGGED == false) {
$data = array(
'status' => 400,
'error' => 'Not logged in'
);
echo json_encode($data);
exit();
}
$username = '';
function sendNotif($a)
{
try
{
$db = new PDO('mysql:host=localhost;dbname=realm1', 'real1', 'pass');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$query=$db->prepare("SELECT * FROM users WHERE id = :val1 ");
$query->bindValue(':val1', $a, PDO::PARAM_STR);
$query->execute();
$data = $query->fetch(PDO::FETCH_ASSOC);
return $data['email'];
}
function sendNotifuser($a)
{
try
{
$db = new PDO('mysql:host=localhost;dbname=realml1', 'real1', 'pass');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$query=$db->prepare("SELECT * FROM users WHERE id = :val1 ");
$query->bindValue(':val1', $a, PDO::PARAM_STR);
$query->execute();
$data = $query->fetch(PDO::FETCH_ASSOC);
return $data['username'];
}
if ($first == 'new') {
if (!empty($_POST['id']) && !empty($_POST['new-message'])) {
$link_regex = '/(http\:\/\/|https\:\/\/|www\.)([^\ ]+)/i';
$i = 0;
preg_match_all($link_regex, PT_Secure($_POST['new-message']), $matches);
foreach ($matches[0] as $match) {
$match_url = strip_tags($match);
$syntax = '[a]' . urlencode($match_url) . '[/a]';
$_POST['new-message'] = str_replace($match, $syntax, $_POST['new-message']);
}
$new_message = PT_Secure($_POST['new-message']);
$id = PT_Secure($_POST['id']);
if ($id != $pt->user->id) {
$chat_exits = $db->where("user_one", $pt->user->id)->where("user_two", $id)->getValue(T_CHATS, 'count(*)');
if (!empty($chat_exits)) {
$db->where("user_two", $pt->user->id)->where("user_one", $id)->update(T_CHATS, array('time' => time()));
$db->where("user_one", $pt->user->id)->where("user_two", $id)->update(T_CHATS, array('time' => time()));
if ($db->where("user_two", $pt->user->id)->where("user_one", $id)->getValue(T_CHATS, 'count(*)') == 0) {
$db->insert(T_CHATS, array('user_two' => $pt->user->id, 'user_one' => $id,'time' => time()));
}
} else {
$db->insert(T_CHATS, array('user_one' => $pt->user->id, 'user_two' => $id,'time' => time()));
if (empty($db->where("user_two", $pt->user->id)->where("user_one", $id)->getValue(T_CHATS, 'count(*)'))) {
$db->insert(T_CHATS, array('user_two' => $pt->user->id, 'user_one' => $id,'time' => time()));
}
}
$insert_message = array(
'from_id' => $pt->user->id,
'to_id' => $id,
'text' => $new_message,
'time' => time()
);
$insert = $db->insert(T_MESSAGES, $insert_message);
if ($insert) {
$pt->message = PT_GetMessageData($insert);
$data = array(
'status' => 200,
'message_id' => $_POST['message_id'],
'message' => PT_LoadPage('messages/ajax/outgoing', array(
'ID' => $pt->message->id,
'TEXT' => $pt->message->text
))
);
$link = $email_code . '/' . $email;
$send_email_data = array(
'from_email' => $pt->config->email,
'from_name' => $pt->config->name,
'to_email' => sendNotif($id),
'to_name' => sendNotifuser($id),
'subject' => 'Message Waiting',
'charSet' => 'UTF-8',
'message_body' => PT_LoadPage('emails/message-alert', array(
'USERNAME' => sendNotifuser($id)
)),
'is_html' => true
);
$send_message = PT_SendMessage($send_email_data);
}
}
}
}
if ($first == 'fetch') {
if (empty($_POST['last_id'])) {
$_POST['last_id'] = 0;
}
if (empty($_POST['id'])) {
$_POST['id'] = 0;
}
if (empty($_POST['first_id'])) {
$_POST['first_id'] = 0;
}
$messages_html = PT_GetMessages($_POST['id'], array('last_id' => $_POST['last_id'], 'first_id' => $_POST['first_id'], 'return_method' => 'html'));
if (!empty($messages_html)) {
$html = PT_LoadPage("messages/{$pt->config->server}/messages", array('MESSAGES' => $messages_html));
} else {
$html = PT_LoadPage("messages/ajax/no-messages");
}
$users_html = PT_GetMessagesUserList(array('return_method' => 'html'));
if (!empty($messages_html) || !empty($users_html)) {
$data = array('status' => 200, 'message' => $messages_html, 'users' => $users_html);
}
}
if ($first == 'search') {
$keyword = '';
$users_html = '<p class="text-center">' . $lang->no_match_found . '</p>';
if (isset($_POST['keyword'])) {
$users_html = PT_GetMessagesUserList(array('return_method' => 'html', 'keyword' => $_POST['keyword']));
}
$data = array('status' => 200, 'users' => $users_html);
}
if ($first == 'delete_chat') {
if (!empty($_POST['id'])) {
$id = PT_Secure($_POST['id']);
$messages = $db->where("(from_id = {$pt->user->id} AND to_id = {$id}) OR (from_id = {$id} AND to_id = {$pt->user->id})")->get(T_MESSAGES);
$update1 = array();
$update2 = array();
$erase = array();
foreach ($messages as $key => $message) {
if ($message->from_deleted == 1 || $message->to_deleted == 1) {
$erase[] = $message->id;
} else {
if ($message->to_id == $pt->user->id) {
$update2[] = $message->id;
} else {
$update1[] = $message->id;
}
}
}
if (!empty($erase)) {
$erase = implode(',', $erase);
$final_query = "DELETE FROM " . T_MESSAGES . " WHERE id IN ($erase)";
$db->rawQuery($final_query);
}
if (!empty($update1)) {
$update1 = implode(',', $update1);
$final_query = "UPDATE " . T_MESSAGES . " set `from_deleted` = '1' WHERE `id` IN({$update1}) ";
$db->rawQuery($final_query);
}
if (!empty($update2)) {
$update2 = implode(',', $update2);
$final_query = "UPDATE " . T_MESSAGES . " set `to_deleted` = '1' WHERE `id` IN({$update2}) ";
$db->rawQuery($final_query);
}
$delete_chats = $db->rawQuery("DELETE FROM " . T_CHATS . " WHERE user_one = {$pt->user->id} AND user_two = $id");
}
}
?>