Hi
I implemented a chat system using Codeigniter where users can send and receive chat messages but the problem I'm having is that everyone can see everyone's chat.
How can I make the chat messages only accessible to the sender and receiver/recipient and vice versa?
Controller - Chat.php
[b]Model - Chat_model.php[/b]
[b][b]js - chat.js[/b][/b]
I implemented a chat system using Codeigniter where users can send and receive chat messages but the problem I'm having is that everyone can see everyone's chat.
How can I make the chat messages only accessible to the sender and receiver/recipient and vice versa?
Controller - Chat.php
Code:
public function ajax_get_chat_messages(){
$chat_id = $this->input->post('chat_id');
$recipient = $this->input->post('recipient');
if (!$recipient){
echo $this->_get_chat_messages($chat_id);
}
}
function _get_chat_messages($chat_id){
$last_chat_message_id = (int)$this->session->userdata('last_chat_message_id_' . $chat_id);
$chat_messages = $this->Chat_model->get_chat_messages($chat_id, $last_chat_message_id);
if ($chat_messages->num_rows() > 0)
{
//store last chat message id
$last_chat_message_id = $chat_messages->row($chat_messages->num_rows() - 1)->chat_message_id;
$this->session->set_userdata('last_chat_message_id_' . $chat_id, $last_chat_message_id);
$chat_messages_html = '<ul>';
foreach($chat_messages->result() as $chat_message)
{
$li_class = ($this->session->userdata('user_id') == $chat_message->user_id) ? 'class="by_current_user"' : '';
$chat_messages_html .='<li ' . $li_class. '>' . '<span class="chat_message_header">' . $chat_message->chat_message_timestamp . ' by ' . $chat_message->username . '</span><p class="message_content">' .$chat_message->chat_message_content . '</p></li>';
}
$chat_messages_html .='</ul>';
$result = array('status' =>'ok', 'content'=>$chat_messages_html);
return json_encode($result);
}
else
{
$result = array('status' =>'ok', 'content'=>'');
//print_r($result);
return json_encode($result);
exit();
}
}[b]Model - Chat_model.php[/b]
Code:
public function get_chat_messages($chat_id, $last_chat_message_id = 0){
$query_str = "SELECT cm.chat_message_id, cm.user_id, cm.chat_message_content, DATE_FORMAT(cm.date_created, '%D of %M %Y at %H:%i:%s') AS chat_message_timestamp, u.username FROM chat_messages cm JOIN users u ON cm.user_id = u.user_id WHERE cm.chat_id = ? and cm.chat_message_id > ? ORDER BY cm.chat_message_id ASC";
$result = $this->db->query($query_str, array($chat_id, $last_chat_message_id));
return $result;
}[b][b]js - chat.js[/b][/b]
Code:
function get_chat_messages()
{
$.post(base_url +"user/chat/ajax_get_chat_messages", { chat_id : chat_id}, function(data) {
if (data.status == 'ok')
{
var current_content = $("div#chat_viewport").html();
$("div#chat_viewport").html(current_content + data.content);
}
else
{
//there was an error do something
}
}, "json");
}
get_chat_messages();