chat.lib.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This is the array library for Chamilo.
  5. * Include/require it in your code to use its functionality.
  6. *
  7. * @package chamilo.library
  8. */
  9. class Chat extends Model {
  10. var $table;
  11. var $columns = array('id', 'from_user','to_user','message','sent','recd');
  12. var $window_list = array();
  13. public function __construct() {
  14. $this->table = Database::get_main_table(TABLE_MAIN_CHAT);
  15. $this->window_list = $_SESSION['window_list'] = isset($_SESSION['window_list']) ? $_SESSION['window_list'] : array();
  16. }
  17. function get_user_status() {
  18. $status = UserManager::get_extra_user_data_by_field(api_get_user_id(), 'user_chat_status', false, true);
  19. return $status['user_chat_status'];
  20. }
  21. function set_user_status($status) {
  22. UserManager::update_extra_field_value(api_get_user_id(), 'user_chat_status', $status);
  23. }
  24. public function start_session() {
  25. $items = array();
  26. if (isset($_SESSION['chatHistory'])) {
  27. $items = $_SESSION['chatHistory'];
  28. }
  29. $return = array('user_status' => $this->get_user_status(), 'me' => get_lang('Me'), 'items' => $items);
  30. echo json_encode($return);
  31. exit;
  32. }
  33. public function heartbeat() {
  34. $to_user_id = api_get_user_id();
  35. $minutes = 60;
  36. $now = time() - $minutes*60;
  37. $now = api_get_utc_datetime($now);
  38. //OR sent > '$now'
  39. $sql = "SELECT * FROM ".$this->table."
  40. WHERE to_user = '".intval($to_user_id)."' AND ( recd = 0 ) ORDER BY id ASC";
  41. $result = Database::query($sql);
  42. $chat_list = array();
  43. while ($chat = Database::fetch_array($result,'ASSOC')) {
  44. $chat_list[$chat['from_user']]['items'][] = $chat;
  45. }
  46. $items = array();
  47. if (isset($_SESSION['chatHistory'])) {
  48. foreach($_SESSION['chatHistory'] as $user_id => $data) {
  49. if (!empty($data)) {
  50. //$items[$user_id] = $data;
  51. }
  52. }
  53. }
  54. foreach ($chat_list as $from_user_id => $rows) {
  55. $rows = $rows['items'];
  56. $user_info = api_get_user_info($from_user_id, true);
  57. //Cleaning tsChatBoxes
  58. unset($_SESSION['tsChatBoxes'][$from_user_id]);
  59. foreach ($rows as $chat) {
  60. $chat['message'] = Security::remove_XSS($chat['message']);
  61. $item = array( 's' => '0',
  62. 'f' => $from_user_id,
  63. 'm' => $chat['message'],
  64. 'online' => $user_info['user_is_online'],
  65. 'username' => $user_info['complete_name'],
  66. 'id' => $chat['id']
  67. );
  68. $items[$from_user_id][] = $item;
  69. $_SESSION['openChatBoxes'][$from_user_id] = api_strtotime($chat['sent'],'UTC');
  70. }
  71. $_SESSION['chatHistory'][$from_user_id][] = $item;
  72. }
  73. if (!empty($_SESSION['openChatBoxes'])) {
  74. foreach ($_SESSION['openChatBoxes'] as $user_id => $time) {
  75. if (!isset($_SESSION['tsChatBoxes'][$user_id])) {
  76. $now = time() - $time;
  77. $time = api_convert_and_format_date($time, DATE_TIME_FORMAT_SHORT_TIME_FIRST);
  78. $message = sprintf(get_lang('SentAtX'), $time);
  79. if ($now > 180) {
  80. $item = array('s' => '2', 'f' => $user_id, 'm' => $message);
  81. if (isset($_SESSION['chatHistory'][$user_id])) {
  82. $_SESSION['chatHistory'][$user_id][] = $item;
  83. }
  84. //$_SESSION['chatHistory'][$user_id][] = $item;
  85. $_SESSION['tsChatBoxes'][$user_id] = 1;
  86. }
  87. }
  88. }
  89. }
  90. /*
  91. var_dump($_SESSION['openChatBoxes']);
  92. var_dump($_SESSION['tsChatBoxes']);
  93. var_dump($_SESSION['chatHistory']);
  94. var_dump($items);
  95. */
  96. //print_r($_SESSION['chatHistory']);
  97. $sql = "UPDATE ".$this->table." SET recd = 1 WHERE to_user = '".$to_user_id."' AND recd = 0";
  98. $query = Database::query($sql);
  99. if ($items != '') {
  100. //$items = substr($items, 0, -1);
  101. }
  102. echo json_encode(array('items' => $items));
  103. }
  104. /*
  105. * chatBoxSession
  106. */
  107. function box_session($user_id) {
  108. $items = array();
  109. if (isset($_SESSION['chatHistory'][$user_id])) {
  110. $items = $_SESSION['chatHistory'][$user_id];
  111. }
  112. return $items;
  113. }
  114. function save_window($user_id){
  115. $this->window_list[$user_id] = true;
  116. $_SESSION['window_list'] = $this->window_list;
  117. }
  118. function send($from_user_id, $to_user_id, $message) {
  119. $this->save_window($to_user_id);
  120. $_SESSION['openChatBoxes'][$to_user_id] = api_get_utc_datetime();
  121. $messagesan = self::sanitize($message);
  122. if (!isset($_SESSION['chatHistory'][$to_user_id])) {
  123. $_SESSION['chatHistory'][$to_user_id] = array();
  124. }
  125. /*
  126. $user_info = api_get_user_info($to_user_id);
  127. $complete_name = $user_info['complete_name'];
  128. */
  129. $item = array ( "s" => "1",
  130. "f" => $from_user_id,
  131. "m" => $messagesan,
  132. "username" => get_lang('Me')
  133. );
  134. $_SESSION['chatHistory'][$to_user_id][] = $item;
  135. unset($_SESSION['tsChatBoxes'][$to_user_id]);
  136. $params = array();
  137. $params['from_user'] = intval($from_user_id);
  138. $params['to_user'] = intval($to_user_id);
  139. $params['message'] = $message;
  140. $params['sent'] = api_get_utc_datetime();
  141. if (!empty($from_user_id) && !empty($to_user_id)) {
  142. $this->save($params);
  143. }
  144. echo "1";
  145. exit;
  146. }
  147. function close() {
  148. unset($_SESSION['openChatBoxes'][$_POST['chatbox']]);
  149. unset($_SESSION['chatHistory'][$_POST['chatbox']]);
  150. echo "1";
  151. exit;
  152. }
  153. function sanitize($text) {
  154. $text = htmlspecialchars($text, ENT_QUOTES);
  155. $text = str_replace("\n\r","\n",$text);
  156. $text = str_replace("\r\n","\n",$text);
  157. $text = str_replace("\n","<br>",$text);
  158. return $text;
  159. }
  160. }