chat.lib.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 {
  10. function __construct() {
  11. }
  12. function heartbeat() {
  13. $to_user_id = api_get_user_id();
  14. $sql = "select * from chat where (chat.to = '".intval($to_user_id)."' AND recd = 0) order by id ASC";
  15. $result = Database::query($sql);
  16. $items = '';
  17. $chatBoxes = array();
  18. $items = array();
  19. while ($chat = Database::fetch_array($result,'ASSOC')) {
  20. if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) {
  21. $items = $_SESSION['chatHistory'][$chat['from']];
  22. }
  23. $chat['message'] = sanitize($chat['message']);
  24. $item = array('s' => '0', 'f' => $chat['from'], 'm' => $chat['message'] );
  25. $items[] = $item;
  26. if (!isset($_SESSION['chatHistory'][$chat['from']])) {
  27. $_SESSION['chatHistory'][$chat['from']] = '';
  28. }
  29. $_SESSION['chatHistory'][$chat['from']] .= json_encode($item);
  30. unset($_SESSION['tsChatBoxes'][$chat['from']]);
  31. $_SESSION['openChatBoxes'][$chat['from']] = $chat['sent'];
  32. }
  33. if (!empty($_SESSION['openChatBoxes'])) {
  34. foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) {
  35. if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
  36. $now = time()-strtotime($time);
  37. $time = date('g:iA M dS', strtotime($time));
  38. $message = "Sent at $time";
  39. if ($now > 180) {
  40. $item = array('s' => '2', 'f' => $chatbox, 'm' => $message);
  41. $items[] = $item;
  42. if (!isset($_SESSION['chatHistory'][$chatbox])) {
  43. $_SESSION['chatHistory'][$chatbox] = '';
  44. }
  45. $_SESSION['chatHistory'][$chatbox] .= json_encode($item);
  46. $_SESSION['tsChatBoxes'][$chatbox] = 1;
  47. }
  48. }
  49. }
  50. }
  51. $sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($to_user_id)."' and recd = 0";
  52. $query = Database::query($sql);
  53. if ($items != '') {
  54. //$items = substr($items, 0, -1);
  55. }
  56. echo json_encode(array('items' => $items));
  57. }
  58. function chatBoxSession($chatbox) {
  59. $items = '';
  60. if (isset($_SESSION['chatHistory'][$chatbox])) {
  61. $items = $_SESSION['chatHistory'][$chatbox];
  62. }
  63. return $items;
  64. }
  65. function start_session() {
  66. $items = '';
  67. if (!empty($_SESSION['openChatBoxes'])) {
  68. foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
  69. $items .= chatBoxSession($chatbox);
  70. }
  71. }
  72. if ($items != '') {
  73. $items = substr($items, 0, -1);
  74. }
  75. $return = array('username' => api_get_user_id(), 'items' => $items);
  76. echo json_encode($return);
  77. exit;
  78. }
  79. function send($from_user_id, $to_user_id, $message) {
  80. $from = $_SESSION['username'];
  81. $to = $_POST['to'];
  82. $message = $_POST['message'];
  83. $_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time());
  84. $messagesan = sanitize($message);
  85. if (!isset($_SESSION['chatHistory'][$_POST['to']])) {
  86. $_SESSION['chatHistory'][$_POST['to']] = '';
  87. }
  88. $_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
  89. {
  90. "s": "1",
  91. "f": "{$to}",
  92. "m": "{$messagesan}"
  93. },
  94. EOD;
  95. unset($_SESSION['tsChatBoxes'][$_POST['to']]);
  96. $sql = "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())";
  97. $query = mysql_query($sql);
  98. echo "1";
  99. exit;
  100. }
  101. function close() {
  102. unset($_SESSION['openChatBoxes'][$_POST['chatbox']]);
  103. echo "1";
  104. exit;
  105. }
  106. function sanitize($text) {
  107. $text = htmlspecialchars($text, ENT_QUOTES);
  108. $text = str_replace("\n\r","\n",$text);
  109. $text = str_replace("\r\n","\n",$text);
  110. $text = str_replace("\n","<br>",$text);
  111. return $text;
  112. }
  113. }