chat.lib.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. public function __construct() {
  13. $this->table = Database::get_main_table(TABLE_MAIN_CHAT);
  14. }
  15. function heartbeat() {
  16. $to_user_id = api_get_user_id();
  17. $my_user_info = api_get_user_info();
  18. $minutes = 60;
  19. $now = time() - $minutes*60;
  20. $now = api_get_utc_datetime($now);
  21. //OR sent > '$now'
  22. $sql = "SELECT from_user, recd, sent, message FROM ".$this->table."
  23. WHERE to_user = '".intval($to_user_id)."' AND (recd = 0 ) ORDER BY id ASC";
  24. $result = Database::query($sql);
  25. $chatBoxes = array();
  26. $items = array();
  27. $_SESSION['chatHistory'] = null;
  28. while ($chat = Database::fetch_array($result,'ASSOC')) {
  29. if (!isset($_SESSION['openChatBoxes'][$chat['from_user']]) && isset($_SESSION['chatHistory'][$chat['from_user']])) {
  30. $items = $_SESSION['chatHistory'][$chat['from_user']];
  31. }
  32. $user_info = api_get_user_info($chat['from_user'], true);
  33. //$chat['message'] = self::sanitize($chat['message']);
  34. $chat['message'] = Security::remove_XSS($chat['message']);
  35. $item = array('s' => '0', 'f' => $chat['from_user'], 'm' => $chat['message'], 'online' => $user_info['user_is_online'], 'username' => $user_info['complete_name']);
  36. $items []= $item;
  37. if (!isset($_SESSION['chatHistory'][$chat['from_user']])) {
  38. $_SESSION['chatHistory'][$chat['from_user']] = array();
  39. }
  40. $_SESSION['chatHistory'][$chat['from_user']][] = $item;
  41. unset($_SESSION['tsChatBoxes'][$chat['from_user']]);
  42. $_SESSION['openChatBoxes'][$chat['from_user']] = $chat['sent'];
  43. }
  44. if (!empty($_SESSION['openChatBoxes'])) {
  45. foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) {
  46. if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
  47. $now = time() - strtotime($time);
  48. $time = api_convert_and_format_date($time, DATE_TIME_FORMAT_SHORT_TIME_FIRST);
  49. $message = sprintf(get_lang('SentAtX'), $time);
  50. if ($now > 180) {
  51. $user_info = api_get_user_info($chatbox, true);
  52. $item = array('s' => '2', 'f' => $chatbox, 'm' => $message, 'online' => $user_info['user_is_online'], 'username' => $user_info['complete_name']);
  53. $items [] = ($item);
  54. if (!isset($_SESSION['chatHistory'][$chatbox])) {
  55. $_SESSION['chatHistory'][$chatbox] = '';
  56. }
  57. $_SESSION['chatHistory'][$chatbox][] = ($item);
  58. $_SESSION['tsChatBoxes'][$chatbox] = 1;
  59. }
  60. }
  61. }
  62. }
  63. $sql = "UPDATE ".$this->table." SET recd = 1 WHERE to_user = '".$to_user_id."' AND recd = 0";
  64. $query = Database::query($sql);
  65. if ($items != '') {
  66. //$items = substr($items, 0, -1);
  67. }
  68. echo json_encode(array('items' => $items));
  69. }
  70. /*
  71. * chatBoxSession
  72. */
  73. function box_session($chatbox) {
  74. $items = array();
  75. if (isset($_SESSION['chatHistory'][$chatbox])) {
  76. $items = $_SESSION['chatHistory'][$chatbox];
  77. }
  78. return $items;
  79. }
  80. function start_session() {
  81. $items = '';
  82. if (!empty($_SESSION['openChatBoxes'])) {
  83. foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
  84. $items = self::box_session($chatbox);
  85. }
  86. }
  87. if ($items != '') {
  88. //$items = substr($items, 0, -1);
  89. }
  90. $return = array('username' => get_lang('Me'), 'user_id' => api_get_user_id(), 'items' => $items);
  91. echo json_encode($return);
  92. exit;
  93. }
  94. function send($from_user_id, $to_user_id, $message) {
  95. $_SESSION['openChatBoxes'][$to_user_id] = api_get_utc_datetime();
  96. $messagesan = self::sanitize($message);
  97. if (!isset($_SESSION['chatHistory'][$to_user_id])) {
  98. $_SESSION['chatHistory'][$to_user_id] = array();
  99. }
  100. $user_info = api_get_user_info($to);
  101. $complete_name = $user_info['complete_name'];
  102. $_SESSION['chatHistory'][$to_user_id][] = (
  103. array( "s" => "1",
  104. "f" => $to,
  105. "m" => $messagesan,
  106. "username" => $complete_name
  107. )
  108. );
  109. unset($_SESSION['tsChatBoxes'][$to_user_id]);
  110. $params = array();
  111. $params['from_user'] = $from_user_id;
  112. $params['to_user'] = $to_user_id;
  113. $params['message'] = $message;
  114. $params['sent'] = api_get_utc_datetime();
  115. if (!empty($from_user_id) && !empty($to_user_id)) {
  116. $this->save($params);
  117. }
  118. echo "1";
  119. exit;
  120. }
  121. function close() {
  122. unset($_SESSION['openChatBoxes'][$_POST['chatbox']]);
  123. echo "1";
  124. exit;
  125. }
  126. function sanitize($text) {
  127. $text = htmlspecialchars($text, ENT_QUOTES);
  128. $text = str_replace("\n\r","\n",$text);
  129. $text = str_replace("\r\n","\n",$text);
  130. $text = str_replace("\n","<br>",$text);
  131. return $text;
  132. }
  133. }