See Release Notes
Long Term Support Release
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 define('AJAX_SCRIPT', true); 18 19 require(__DIR__.'/../../config.php'); 20 require_once (__DIR__ . '/lib.php'); 21 22 $action = optional_param('action', '', PARAM_ALPHANUM); 23 $beepid = optional_param('beep', '', PARAM_RAW); 24 $chatsid = required_param('chat_sid', PARAM_ALPHANUM); 25 $theme = required_param('chat_theme', PARAM_ALPHANUMEXT); 26 $chatmessage = optional_param('chat_message', '', PARAM_RAW); 27 $chatlasttime = optional_param('chat_lasttime', 0, PARAM_INT); 28 $chatlastrow = optional_param('chat_lastrow', 1, PARAM_INT); 29 30 if (!confirm_sesskey()) { 31 throw new moodle_exception('invalidsesskey', 'error'); 32 } 33 34 if (!$chatuser = $DB->get_record('chat_users', array('sid' => $chatsid))) { 35 throw new moodle_exception('notlogged', 'chat'); 36 } 37 if (!$chat = $DB->get_record('chat', array('id' => $chatuser->chatid))) { 38 throw new moodle_exception('invaliduserid', 'error'); 39 } 40 if (!$course = $DB->get_record('course', array('id' => $chat->course))) { 41 throw new moodle_exception('invalidcourseid', 'error'); 42 } 43 if (!$cm = get_coursemodule_from_instance('chat', $chat->id, $course->id)) { 44 throw new moodle_exception('invalidcoursemodule', 'error'); 45 } 46 47 if (!isloggedin()) { 48 throw new moodle_exception('notlogged', 'chat'); 49 } 50 51 // Set up $PAGE so that format_text will work properly. 52 $PAGE->set_cm($cm, $course, $chat); 53 $PAGE->set_url('/mod/chat/chat_ajax.php', array('chat_sid' => $chatsid)); 54 55 require_login($course, false, $cm); 56 57 $context = context_module::instance($cm->id); 58 require_capability('mod/chat:chat', $context); 59 60 ob_start(); 61 header('Expires: Sun, 28 Dec 1997 09:32:45 GMT'); 62 header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 63 header('Cache-Control: no-cache, must-revalidate'); 64 header('Pragma: no-cache'); 65 header('Content-Type: text/html; charset=utf-8'); 66 67 switch ($action) { 68 case 'init': 69 $users = chat_get_users($chatuser->chatid, $chatuser->groupid, $cm->groupingid); 70 $users = chat_format_userlist($users, $course); 71 $response['users'] = $users; 72 echo json_encode($response); 73 break; 74 75 case 'chat': 76 \core\session\manager::write_close(); 77 chat_delete_old_users(); 78 $chatmessage = clean_text($chatmessage, FORMAT_MOODLE); 79 80 if (!empty($beepid)) { 81 $chatmessage = 'beep '.$beepid; 82 } 83 84 if (!empty($chatmessage)) { 85 86 chat_send_chatmessage($chatuser, $chatmessage, 0, $cm); 87 88 $chatuser->lastmessageping = time() - 2; 89 $DB->update_record('chat_users', $chatuser); 90 91 // Response OK message. 92 echo json_encode(true); 93 ob_end_flush(); 94 } 95 break; 96 97 case 'update': 98 if ((time() - $chatlasttime) > $CFG->chat_old_ping) { 99 chat_delete_old_users(); 100 } 101 102 if ($latestmessage = chat_get_latest_message($chatuser->chatid, $chatuser->groupid)) { 103 $chatnewlasttime = $latestmessage->timestamp; 104 } else { 105 $chatnewlasttime = 0; 106 } 107 108 if ($chatlasttime == 0) { 109 $chatlasttime = time() - $CFG->chat_old_ping; 110 } 111 112 $messages = chat_get_latest_messages($chatuser, $chatlasttime); 113 114 if (!empty($messages)) { 115 $num = count($messages); 116 } else { 117 $num = 0; 118 } 119 $chatnewrow = ($chatlastrow + $num) % 2; 120 $senduserlist = false; 121 if ($messages && ($chatlasttime != $chatnewlasttime)) { 122 foreach ($messages as $n => &$message) { 123 $tmp = new stdClass(); 124 // When somebody enter room, user list will be updated. 125 if (!empty($message->issystem)) { 126 $senduserlist = true; 127 } 128 if ($html = chat_format_message_theme($message, $chatuser, $USER, $cm->groupingid, $theme)) { 129 $message->mymessage = ($USER->id == $message->userid); 130 $message->message = $html->html; 131 if (!empty($html->type)) { 132 $message->type = $html->type; 133 } 134 } else { 135 unset($messages[$n]); 136 } 137 } 138 } 139 140 if ($senduserlist) { 141 // Return users when system message arrives. 142 $users = chat_format_userlist(chat_get_users($chatuser->chatid, $chatuser->groupid, $cm->groupingid), $course); 143 $response['users'] = $users; 144 } 145 146 $DB->set_field('chat_users', 'lastping', time(), array('id' => $chatuser->id)); 147 148 $response['lasttime'] = $chatnewlasttime; 149 $response['lastrow'] = $chatnewrow; 150 if ($messages) { 151 $response['msgs'] = $messages; 152 } 153 154 echo json_encode($response); 155 header('Content-Length: ' . ob_get_length()); 156 157 ob_end_flush(); 158 break; 159 160 default: 161 break; 162 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body