From 31843ad2a031a2ea1d864a75e64f196edb5e9763 Mon Sep 17 00:00:00 2001 From: mdtrooper Date: Mon, 23 Apr 2012 12:36:53 +0000 Subject: [PATCH] 2012-04-23 Miguel de Dios * include/functions_users.php, operation/users/webchat.php: added list users in chat. MERGED FROM 4.0.2 git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6097 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- pandora_console/ChangeLog | 7 ++ pandora_console/include/functions_users.php | 117 ++++++++++++++++++++ pandora_console/operation/users/webchat.php | 36 +++++- 3 files changed, 156 insertions(+), 4 deletions(-) diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 7beabcb0fa..09dbffa4bc 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,10 @@ +2012-04-23 Miguel de Dios + + * include/functions_users.php, operation/users/webchat.php: added + list users in chat. + + MERGED FROM 4.0.2 + 2012-04-23 Dario Rodriguez * godmode/reporting/visual_console_builder.wizard.php: Unsorted diff --git a/pandora_console/include/functions_users.php b/pandora_console/include/functions_users.php index 4000b294f5..d6b79188cf 100644 --- a/pandora_console/include/functions_users.php +++ b/pandora_console/include/functions_users.php @@ -295,23 +295,99 @@ function users_get_last_messages($last_time = false) { function users_save_login() { global $config; + $file_global_user_list = sys_get_temp_dir() . '/pandora_chat.user_list.json.txt'; + $user = db_get_row_filter('tusuario', array('id_user' => $config['id_user'])); $message = sprintf(__('User %s login at %s'), $user['fullname'], date($config['date_format'])); users_save_text_message($message, 'notification'); + + //First lock the file + $fp_user_list = @fopen($file_global_user_list, "a+"); + if ($fp_user_list === false) { + return; + } + //Try to look $max_times times + $tries = 0; + while (!flock($fp_user_list, LOCK_EX)) { + $tries++; + if ($tries >= $max_times) { + return; + } + + sleep(1); + } + @fscanf($fp_user_list, "%s", $user_list_json); + + $user_list = json_decode($user_list_json, true); + if (empty($user_list)) + $user_list = array(); + $user_list[$config['id_user']] = $user['fullname']; + + //Clean the file + ftruncate($fp_user_list, 0); + + $status = fwrite($fp_user_list, json_encode($user_list)); + + if ($status === false) { + fclose($fp_user_list); + + return; + } + + fclose($fp_user_list); } function users_save_logout() { global $config; + $return = array('correct' => false, 'users' => array()); + + $file_global_user_list = sys_get_temp_dir() . '/pandora_chat.user_list.json.txt'; + $user = db_get_row_filter('tusuario', array('id_user' => $config['id_user'])); $message = sprintf(__('User %s logout at %s'), $user['fullname'], date($config['date_format'])); users_save_text_message($message, 'notification'); + + //First lock the file + $fp_user_list = @fopen($file_global_user_list, "a+"); + if ($fp_user_list === false) { + return; + } + //Try to look $max_times times + $tries = 0; + while (!flock($fp_user_list, LOCK_EX)) { + $tries++; + if ($tries >= $max_times) { + return; + } + + sleep(1); + } + @fscanf($fp_user_list, "%s", $user_list_json); + + $user_list = json_decode($user_list_json, true); + if (empty($user_list)) + $user_list = array(); + unset($user_list[$config['id_user']]); + + //Clean the file + ftruncate($fp_user_list, 0); + + $status = fwrite($fp_user_list, json_encode($user_list)); + + if ($status === false) { + fclose($fp_user_list); + + return; + } + + fclose($fp_user_list); } function users_save_text_message($message = false, $type = 'message') { @@ -562,4 +638,45 @@ function users_is_last_system_message() { else return false; } + +function users_check_users() { + global $config; + + $return = array('correct' => false, 'users' => ''); + + $file_global_user_list = sys_get_temp_dir() . '/pandora_chat.user_list.json.txt'; + + //First lock the file + $fp_user_list = @fopen($file_global_user_list, "a+"); + if ($fp_user_list === false) { + echo json_encode($return); + + return; + } + //Try to look $max_times times + $tries = 0; + while (!flock($fp_user_list, LOCK_EX)) { + $tries++; + if ($tries >= $max_times) { + echo json_encode($return); + + return; + } + + sleep(1); + } + @fscanf($fp_user_list, "%s", $user_list_json); + + $user_list = json_decode($user_list_json, true); + if (empty($user_list)) + $user_list = array(); + + fclose($fp_user_list); + + $return['correct'] = true; + $return['users'] = implode('
', $user_list); + echo json_encode($return); + + return; +} ?> diff --git a/pandora_console/operation/users/webchat.php b/pandora_console/operation/users/webchat.php index 74b8d37179..1c8f4afc40 100644 --- a/pandora_console/operation/users/webchat.php +++ b/pandora_console/operation/users/webchat.php @@ -28,6 +28,7 @@ if (is_ajax ()) { $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); @@ -50,6 +51,10 @@ if (is_ajax ()) { if ($get_last_global_counter) { users_get_last_global_counter(); } + + if ($check_users) { + users_check_users(); + } } else { echo json_encode(array('correct' => false)); @@ -67,12 +72,15 @@ ui_print_page_header (__('Webchat'), "images/group.png", false, "", false, ""); $table = null; $table->width = '95%'; +$table->style[0][1] = 'text-align: right; vertical-align: top;'; -$table->colspan[0][0] = 2; - -$table->data[0][0] = '
'; +$table->data[0][1] = '

' . __('Users Online') . '

' . + '
'; $table->data[1][0] = html_print_input_text('message_box', '', '', 100, 150, true); $table->data[1][1] = html_print_button('send', 'send', false, 'send_message()', @@ -104,6 +112,25 @@ html_print_table($table); 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() { @@ -119,6 +146,8 @@ html_print_table($table); dataType: "json", success: function(data) { if (data['correct'] == 1) { + check_users(); + if (first_time) { print_messages({ 0: {'type' : 'notification', @@ -217,7 +246,6 @@ html_print_table($table); } } }); - } function exit_webchat() {