<?php // Pandora FMS - http://pandorafms.com // ================================================== // Copyright (c) 2005-2011 Artica Soluciones Tecnologicas // Please see http://pandorafms.org for full contribution list // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; version 2 // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. if (is_ajax()) { global $config; include_once 'include/functions_users.php'; $status = check_login(false); if ($status) { $get_last_messages = (bool) get_parameter('get_last_messages', 0); $send_message = (bool) get_parameter('send_message', 0); $send_login = (bool) get_parameter('send_login', 0); $send_logout = (bool) get_parameter('send_logout', 0); $long_polling_check_messages = (bool) get_parameter('long_polling_check_messages', 0); $get_last_global_counter = (bool) get_parameter('get_last_global_counter', 0); $check_users = (bool) get_parameter('check_users', 0); if ($get_last_messages) { $time = (int) get_parameter('time', (24 * 60 * 60)); users_get_last_messages($time); } if ($send_message) { $message = get_parameter('message', false); if (!empty($message)) { users_save_text_message($message); } } if ($send_login) { users_save_login(); } if ($send_logout) { users_save_logout(); } if ($long_polling_check_messages) { $global_counter = (int) get_parameter('global_counter', 0); users_long_polling_check_messages($global_counter); } if ($get_last_global_counter) { users_get_last_global_counter(); } if ($check_users) { users_check_users(); } } else { echo json_encode(['correct' => false]); } return; } global $config; check_login(); ui_print_page_header(__('Webchat'), 'images/comments.png', false, '', false, ''); $table = new stdClass(); $table->width = '100%'; $table->class = 'databox filters'; $table->style[0][1] = 'text-align: right; vertical-align: top;'; $table->data[0][0] = '<div id="chat_box" style="width: 95%; height: 300px; background: #ffffff; border: 1px inset black; overflow: auto; padding: 10px;"></div>'; $table->data[0][1] = '<h4>'.__('Users Online').'</h4>'.'<div id="userlist_box" style="width: 90% !important; height: 200px !important; height: 300px; background: #ffffff; border: 1px inset black; overflow: auto; padding-right: 10px;"></div>'; $table->data[1][0] = '<b>'.__('Message').'</b> '.html_print_input_text( 'message_box', '', '', 100, 150, true ); html_print_table($table); echo "<div style='width:100%'>".html_print_button( __('Send message'), 'send', false, 'send_message()', 'class="sub next" style="float:right"', true ).'</div>'; ?> <script type="text/javascript"> var global_counter_chat = 0; var chat_log = ''; var user_move_scroll = false; var first_time = true; $(document).ready(function() { $("input[name=\"message_box\"]").keydown(function(e) { //Enter key. if (e.keyCode == 13) { send_message(); } }); init_webchat(); }); $(window).on("beforeunload",function () { exit_webchat(); }); function init_webchat() { send_login_message(); long_polling_check_messages(); check_users(); } function check_users() { var parameters = {}; parameters['page'] = "operation/users/webchat"; parameters['check_users'] = 1; $.ajax({ type: 'POST', url: 'ajax.php', data: parameters, dataType: "json", success: function(data) { if (data['correct'] == 1) { $("#userlist_box").html(data['users']); } } }); } function long_polling_check_messages() { var parameters = {}; parameters['page'] = "operation/users/webchat"; parameters['long_polling_check_messages'] = 1; parameters['global_counter'] = global_counter_chat; $.ajax({ type: 'POST', url: 'ajax.php', data: parameters, dataType: "json", success: function(data) { if (data['correct'] == 1) { check_users(); if (first_time) { print_messages({ 0: {'type' : 'notification', 'text': '<?php echo __('Connection established...get last 24h messages...'); ?>'} }, true); first_time = false; } global_counter_chat = data['global_counter']; print_messages(data['log']); } else { if (data['error']) { print_messages({ 0: {'type' : 'error', 'text': '<?php echo __('Error in connection.'); ?>'} }, false); } } long_polling_check_messages(); }, error: function(request, status, err) { long_polling_check_messages(); } }); } function print_messages(messages, clear_chat_box) { //event_add_text = true; if (typeof(clear_chat_box) == 'undefined') { clear_chat_box = false; } var html = ''; $.each(messages, function(key, message) { html = html + '<div '; if (message['type'] == 'error') { html = html + "style='color: red; font-style: italic;'"; } else if (message['type'] == 'notification') { html = html + "style='color: grey; font-style: italic;'"; } else if (message['type'] == 'message') { html = html + "style='color: black; font-style: normal;'"; } html = html + '>'; if (message['type'] != 'message') { html = html + message['text']; } else { html = html + '<span style="color: grey; font-style: italic;">' + message['human_time'] + '</span>'; html = html + ' ' + '<span style="color: black; font-weight: bolder;">' + message['user_name'] + ':> </span>'; html = html + ' ' + message['text']; } html = html + '</div>'; }); if (clear_chat_box) { $("#chat_box").html(html); } else { $("#chat_box").append(html); } $("#chat_box").scrollTop($("#chat_box").attr('scrollHeight')); } function send_message() { var parameters = {}; parameters['page'] = "operation/users/webchat"; parameters['send_message'] = 1; parameters['message'] = $("input[name=\"message_box\"]").val(); $.ajax({ type: 'POST', url: 'ajax.php', data: parameters, dataType: "json", success: function(data) { if (data['correct'] == 1) { $("input[name=\"message_box\"]").val(''); } else { print_messages({ 0: {'type' : 'error', 'text': '<?php echo __('Error sendding message.'); ?>'} }, false); } } }); } function exit_webchat() { send_logout_message(); get_last_global_counter(); } function send_login_message() { var parameters = {}; parameters['page'] = "operation/users/webchat"; parameters['send_login'] = 1; $.ajax({ type: 'POST', url: 'ajax.php', data: parameters, dataType: "json", success: function(data) { if (data['correct'] == 1) { } else { print_messages({ 0: {'type' : 'error', 'text': '<?php echo __('Error login.'); ?>'} }, false); } } }); } function send_logout_message() { var parameters = {}; parameters['page'] = "operation/users/webchat"; parameters['send_logout'] = 1; $.ajax({ type: 'POST', url: 'ajax.php', data: parameters, dataType: "json", success: function(data) { } }); } </script>