New "stamp" field on quiz questions with a unique identifier, as well as
[moodle.git] / mod / chat / lib.php
CommitLineData
1515a89e 1<?PHP // $Id$
2
3/// Library of functions and constants for module chat
4
5
6define("CHAT_REFRESH_ROOM", 10);
7define("CHAT_REFRESH_USERLIST", 10);
8define("CHAT_OLD_PING", 30);
9
10define("CHAT_DRAWBOARD", false); // Look into this later
11
12
13// The HTML head for the message window to start with (<!-- nix --> is used to get some browsers starting with output
14$CHAT_HTMLHEAD = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head></head>\n<body bgcolor=\"#FFFFFF\">\n\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n";
15
16// The HTML head for the message window to start with (with js scrolling)
17$CHAT_HTMLHEAD_JS = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head><script language=\"JavaScript\">\n<!--\nfunction move()\n{\nif (scroll_active) window.scroll(1,400000);\nwindow.setTimeout(\"move()\",100);\n}\nscroll_active = true;\nmove();\n//-->\n</script>\n</head>\n<body bgcolor=\"#FFFFFF\" onBlur=\"scroll_active = true\" onFocus=\"scroll_active = false\">\n\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n<!-- nix -->\n";
18
19// The HTML code for standard empty pages (e.g. if a user was kicked out)
20$CHAT_HTMLHEAD_OUT = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head><title>You are out!</title></head><body bgcolor=\"$THEME->body\"></body></html>";
21
22// The HTML head for the message input page
23$CHAT_HTMLHEAD_MSGINPUT = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head><title>Message Input</title></head><body bgcolor=\"$THEME->body\">";
24
25// The HTML code for the message input page, with JavaScript
26$CHAT_HTMLHEAD_MSGINPUT_JS = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head><title>Message Input</title>\n<script language=\"Javascript\">\n<!--\nscroll_active = true;\nfunction empty_field_and_submit()\n{\ndocument.fdummy.arsc_message.value=document.f.arsc_message.value;\ndocument.fdummy.submit();\ndocument.f.arsc_message.focus();\ndocument.f.arsc_message.select();\nreturn false;\n}\n// -->\n</script>\n</head><body bgcolor=\"$THEME->body\" OnLoad=\"document.f.arsc_message.focus();document.f.arsc_message.select();\">";
27
28
29function chat_add_instance($chat) {
30/// Given an object containing all the necessary data,
31/// (defined by the form in mod.html) this function
32/// will create a new instance and return the id number
33/// of the new instance.
34
35 $chat->timemodified = time();
36
fcd3a1ee 37 $chat->chattime = make_timestamp($chat->chatyear, $chat->chatmonth, $chat->chatday,
38 $chat->chathour, $chat->chatminute);
1515a89e 39
40 return insert_record("chat", $chat);
41}
42
43
44function chat_update_instance($chat) {
45/// Given an object containing all the necessary data,
46/// (defined by the form in mod.html) this function
47/// will update an existing instance with new data.
48
49 $chat->timemodified = time();
50 $chat->id = $chat->instance;
51
fcd3a1ee 52 $chat->chattime = make_timestamp($chat->chatyear, $chat->chatmonth, $chat->chatday,
53 $chat->chathour, $chat->chatminute);
1515a89e 54
55 return update_record("chat", $chat);
56}
57
58
59function chat_delete_instance($id) {
60/// Given an ID of an instance of this module,
61/// this function will permanently delete the instance
62/// and any data that depends on it.
63
64 if (! $chat = get_record("chat", "id", "$id")) {
65 return false;
66 }
67
68 $result = true;
69
70 # Delete any dependent records here #
71
72 if (! delete_records("chat", "id", "$chat->id")) {
73 $result = false;
74 }
75
76 return $result;
77}
78
79function chat_user_outline($course, $user, $mod, $chat) {
80/// Return a small object with summary information about what a
81/// user has done with a given particular instance of this module
82/// Used for user activity reports.
83/// $return->time = the time they did it
84/// $return->info = a short text description
85
86 return $return;
87}
88
89function chat_user_complete($course, $user, $mod, $chat) {
90/// Print a detailed representation of what a user has done with
91/// a given particular instance of this module, for user activity reports.
92
93 return true;
94}
95
b7602a11 96function chat_print_recent_activity($course, $isteacher, $timestart) {
97/// Given a course and a date, prints a summary of all chat rooms
98/// that currently have people in them.
1515a89e 99/// This function is called from course/lib.php: print_recent_activity()
100
b7602a11 101 global $CFG;
102
132911c8 103 if (!$chatusers = get_records_sql("SELECT u.id, cu.chatid, u.firstname, u.lastname
b7602a11 104 FROM {$CFG->prefix}chat_users as cu,
cea57965 105 {$CFG->prefix}chat as ch,
b7602a11 106 {$CFG->prefix}user as u
107 WHERE cu.userid = u.id
cea57965 108 AND cu.chatid = ch.id
109 AND ch.course = '$course->id'
b7602a11 110 ORDER BY cu.chatid ASC") ) {
111 return false;
112 }
1515a89e 113
b7602a11 114 print_headline(get_string("currentchats", "chat").":");
115
116 $current = 0;
117 foreach ($chatusers as $chatuser) {
118 if ($current != $chatuser->chatid) {
119 if ($current) {
120 echo "</p>";
121 }
122 if ($chat = get_record("chat", "id", $chatuser->chatid)) {
123 echo "<p><font size=1><a href=\"$CFG->wwwroot/mod/chat/view.php?c=$chat->id\">$chat->name</a></font><br />";
124 }
125 $current = $chatuser->chatid;
126 }
127 echo "&nbsp;&nbsp;&nbsp;<font size=1>- $chatuser->firstname $chatuser->lastname</font><br />";
128 }
48548144 129 echo "<br />";
b7602a11 130
131 return true;
1515a89e 132}
133
134function chat_cron () {
135/// Function to be run periodically according to the moodle cron
136/// This function searches for things that need to be done, such
137/// as sending out mail, toggling flags etc ...
138
139 global $CFG;
140
fcd3a1ee 141 chat_update_chat_times();
142
7d792369 143 chat_delete_old_users();
144
22a4491a 145 /// Delete old messages
146 if ($chats = get_records("chat")) {
147 foreach ($chats as $chat) {
148 if ($chat->keepdays) {
149 $timeold = time() - ($chat->keepdays * 24 * 3600);
150 delete_records_select("chat_messages", "chatid = '$chat->id' AND timestamp < '$timeold'");
151 }
152 }
153 }
154
1515a89e 155 return true;
156}
157
1515a89e 158
159
160//////////////////////////////////////////////////////////////////////
161/// Functions that require some SQL
162
163function chat_get_users($chatid) {
164
165 global $CFG;
166
f7e648da 167 return get_records_sql("SELECT u.id, u.firstname, u.lastname, u.picture, c.lastmessageping
1515a89e 168 FROM {$CFG->prefix}chat_users c,
169 {$CFG->prefix}user u
170 WHERE c.chatid = '$chatid'
171 AND u.id = c.userid
172 GROUP BY u.id
173 ORDER BY c.firstping ASC");
174}
175
176function chat_get_latest_message($chatid) {
5a8625e4 177/// Efficient way to extract just the latest message
178/// Uses ADOdb directly instead of get_record_sql()
179/// because the LIMIT command causes problems with
180/// the developer debugging in there.
1515a89e 181
5a8625e4 182 global $db, $CFG;
1515a89e 183
5a8625e4 184 if (!$rs = $db->Execute("SELECT *
185 FROM {$CFG->prefix}chat_messages
186 WHERE chatid = '$chatid'
187 ORDER BY timestamp DESC LIMIT 1")) {
188 return false;
189 }
190 if ($rs->RecordCount() == 1) {
191 return (object)$rs->fields;
192 } else {
193 return false; // Found no records
194 }
1515a89e 195}
196
5a8625e4 197
1515a89e 198//////////////////////////////////////////////////////////////////////
199
200function chat_login_user($chatid, $version="header_js") {
201 global $USER;
202
203 $chatuser->chatid = $chatid;
204 $chatuser->userid = $USER->id;
205 $chatuser->version = $version;
206 $chatuser->ip = $USER->lastIP;
f7e648da 207 $chatuser->lastping = $chatuser->firstping = $chatuser->lastmessageping = time();
1515a89e 208 $chatuser->sid = random_string(32);
209
210 if (!insert_record("chat_users", $chatuser)) {
211 return false;
212 }
213
214 return $chatuser->sid;
215}
216
7d792369 217function chat_delete_old_users() {
218// Delete the old and in the way
219
220 $timeold = time() - CHAT_OLD_PING;
221
222 if ($oldusers = get_records_select("chat_users", "lastping < '$timeold'") ) {
223 delete_records_select("chat_users", "lastping < '$timeold'");
224 foreach ($oldusers as $olduser) {
225 $message->chatid = $olduser->chatid;
226 $message->userid = $olduser->userid;
227 $message->message = "exit";
228 $message->system = 1;
229 $message->timestamp = time();
230
231 if (!insert_record("chat_messages", $message)) {
232 error("Could not insert a chat message!");
233 }
234 }
235 }
236}
1515a89e 237
22a4491a 238
fcd3a1ee 239function chat_update_chat_times($chatid=0) {
240/// Updates chat records so that the next chat time is correct
241
242 $timenow = time();
243 if ($chatid) {
244 if (!$chats[] = get_record_select("chat", "id = '$chatid' AND chattime <= '$timenow' AND schedule > '0'")) {
245 return;
246 }
247 } else {
248 if (!$chats = get_records_select("chat", "chattime <= '$timenow' AND schedule > '0'")) {
249 return;
250 }
251 }
252
253 foreach ($chats as $chat) {
254 switch ($chat->schedule) {
255 case 1: // Single event - turn off schedule and disable
256 $chat->chattime = 0;
257 $chat->schedule = 0;
258 break;
259 case 2: // Repeat daily
260 $chat->chattime += 24 * 3600;
261 break;
262 case 3: // Repeat weekly
263 $chat->chattime += 7 * 24 * 3600;
264 break;
265 }
266 update_record("chat", $chat);
267 }
268}
269
270
1515a89e 271function chat_browser_detect($HTTP_USER_AGENT) {
272
273 if(eregi("(opera) ([0-9]{1,2}.[0-9]{1,3}){0,1}", $HTTP_USER_AGENT, $match)
274 || eregi("(opera/)([0-9]{1,2}.[0-9]{1,3}){0,1}", $HTTP_USER_AGENT, $match))
275 {
276 $BName = "Opera"; $BVersion=$match[2];
277 }
278 elseif( eregi("(konqueror)/([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
279 {
280 $BName = "Konqueror"; $BVersion=$match[2];
281 }
282 elseif( eregi("(lynx)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})", $HTTP_USER_AGENT, $match) )
283 {
284 $BName = "Lynx"; $BVersion=$match[2];
285 }
286 elseif( eregi("(links) \(([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
287 {
288 $BName = "Links"; $BVersion=$match[2];
289 }
290 elseif( eregi("(msie) ([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
291 {
292 $BName = "MSIE"; $BVersion=$match[2];
293 }
294 elseif( eregi("(netscape6)/(6.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
295 {
296 $BName = "Netscape"; $BVersion=$match[2];
297 }
298 elseif( eregi("mozilla/5", $HTTP_USER_AGENT) )
299 {
300 $BName = "Netscape"; $BVersion="Unknown";
301 }
302 elseif( eregi("(mozilla)/([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
303 {
304 $BName = "Netscape"; $BVersion=$match[2];
305 }
306 elseif( eregi("w3m", $HTTP_USER_AGENT) )
307 {
308 $BName = "w3m"; $BVersion="Unknown";
309 }
310 else
311 {
312 $BName = "Unknown"; $BVersion="Unknown";
313 }
314
315 if(eregi("linux", $HTTP_USER_AGENT))
316 {
317 $BPlatform = "Linux";
318 }
319 elseif( eregi("win32", $HTTP_USER_AGENT) )
320 {
321 $BPlatform = "Windows";
322 }
323 elseif( (eregi("(win)([0-9]{2})", $HTTP_USER_AGENT, $match) )
324 || (eregi("(windows) ([0-9]{2})", $HTTP_USER_AGENT, $match) ))
325 {
326 $BPlatform = "Windows $match[2]";
327 }
328 elseif( eregi("(winnt)([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
329 {
330 $BPlatform = "Windows NT $match[2]";
331 }
332 elseif( eregi("(windows nt)( ){0,1}([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
333 {
334 $BPlatform = "Windows NT $match[3]";
335 }
336 elseif( eregi("mac", $HTTP_USER_AGENT) )
337 {
338 $BPlatform = "Macintosh";
339 }
340 elseif( eregi("(sunos) ([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
341 {
342 $BPlatform = "SunOS $match[2]";
343 }
344 elseif( eregi("(beos) r([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
345 {
346 $BPlatform = "BeOS $match[2]";
347 }
348 elseif( eregi("freebsd", $HTTP_USER_AGENT) )
349 {
350 $BPlatform = "FreeBSD";
351 }
352 elseif( eregi("openbsd", $HTTP_USER_AGENT) )
353 {
354 $BPlatform = "OpenBSD";
355 }
356 elseif( eregi("irix", $HTTP_USER_AGENT) )
357 {
358 $BPlatform = "IRIX";
359 }
360 elseif( eregi("os/2", $HTTP_USER_AGENT) )
361 {
362 $BPlatform = "OS/2";
363 }
364 elseif( eregi("plan9", $HTTP_USER_AGENT) )
365 {
366 $BPlatform = "Plan9";
367 }
368 elseif( eregi("unix", $HTTP_USER_AGENT)
369 || eregi("hp-ux", $HTTP_USER_AGENT) )
370 {
371 $BPlatform = "Unix";
372 }
373 elseif( eregi("osf", $HTTP_USER_AGENT) )
374 {
375 $BPlatform = "OSF";
376 }
377 else
378 {
379 $BPlatform = "Unknown";
380 }
381
382 $return["name"] = $BName;
383 $return["version"] = $BVersion;
384 $return["platform"] = $BPlatform;
385 return $return;
386}
387
388function chat_display_version($version, $browser)
389{
390 GLOBAL $CFG;
391
392 $checked = "";
393 if (($version == "sockets") OR ($version == "push_js"))
394 {
395 $checked = "checked";
396 }
397 if (($version == "sockets" OR $version == "push_js")
398 AND
399 ($browser["name"] == "Lynx"
400 OR
401 $browser["name"] == "Links"
402 OR
403 $browser["name"] == "w3m"
404 OR
405 $browser["name"] == "Konqueror"
406 OR
407 ($browser["name"] == "Netscape" AND substr($browser["version"], 0, 1) == "2")))
408 {
409 $checked = "";
410 }
411 if (($version == "text")
412 AND
413 ($browser["name"] == "Lynx"
414 OR
415 $browser["name"] == "Links"
416 OR
417 $browser["name"] == "w3m"))
418 {
419 $checked = "checked";
420 }
421 if (($version == "header")
422 AND
423 ($browser["name"] == "Konqueror"))
424 {
425 $checked = "checked";
426 }
427 if (($version == "header_js")
428 AND
429 ($browser["name"] == "Netscape" AND substr($browser["version"], 0, 1) == "2"))
430 {
431 $checked = "checked";
432 }
433 ?>
434 <tr>
435 <td valign="top">
436 <input type="radio" name="chat_chatversion" value="<?php echo $version; ?>"<?php echo $checked; ?>>
437 </td>
438 <td valign="top" align="left">
439 <font face="Arial" size="2">
440 <?php echo $chat_lang["gui_".$version]; ?>
441 </font>
442 </td>
443 </tr>
444 <?php
445
446}
447
448
582de679 449function chat_format_message($message, $courseid=0) {
7d792369 450/// Given a message object full of information, this function
451/// formats it appropriately into text and html, then
452/// returns the formatted data.
1515a89e 453
454 global $CFG, $USER;
455
7d792369 456 $output = new object;
457
458 if (!$user = get_record("user", "id", $message->userid)) {
459 return "Error finding user id = $message->userid";
1515a89e 460 }
461
462 $picture = print_user_picture($user->id, 0, $user->picture, false, true, false);
582de679 463 if ($courseid) {
464 $picture = "<a target=\"_new\" href=\"$CFG->wwwroot/user/view.php?id=$user->id&course=$courseid\">$picture</a>";
465 }
1515a89e 466
7d792369 467 $strtime = userdate($message->timestamp, get_string("strftimemessage", "chat"));
468
469 $output->beep = false; // by default
1515a89e 470
7d792369 471 $text = $message->message;
472
473 if (!empty($message->system)) { /// It's a system message
474 $output->text = get_string("message$text", "chat",
475 "$user->firstname $user->lastname");
476 $output->text = "$strtime: $output->text";
477 $output->html = "<table><tr><td valign=top>$picture</td><td>";
478 $output->html .= "<font size=2 color=\"#CCAAAA\">$output->text</font>";
479 $output->html .= "</td></tr></table>";
1515a89e 480 return $output;
481 }
482
7d792369 483 convert_urls_into_links($text);
484 replace_smilies($text);
485
486 if (substr($text, 0, 5) == "beep ") { /// It's a beep!
487 $beepwho = trim(substr($text, 5));
9f85bed4 488
7d792369 489 if ($beepwho == "all") { // everyone
490 $outinfo = "$strtime: ". get_string("messagebeepseveryone", "chat",
491 "$user->firstname $user->lastname");
492 $outmain = "";
493 $output->beep = true; // (eventually this should be set to
494 // to a filename uploaded by the user)
495
496 } else if ($beepwho == $USER->id) { // current user
497 $outinfo = "$strtime: ". get_string("messagebeepsyou", "chat",
498 "$user->firstname $user->lastname");
499 $outmain = "";
500 $output->beep = true;
501
502 } else {
503 return false;
504 }
505
506 } else if (substr($text, 0, 1) == ":") { /// It's an MOO emote
9f85bed4 507 $outinfo = $strtime;
7d792369 508 $outmain = "$user->firstname ".substr($text, 1);
9f85bed4 509
7d792369 510 } else if (substr($text, 0, 1) == "/") { /// It's a user command
1515a89e 511
7d792369 512 if (substr($text, 0, 4) == "/me ") {
9f85bed4 513 $outinfo = $strtime;
7d792369 514 $outmain = "$user->firstname ".substr($text, 4);
9f85bed4 515 } else {
516 $outinfo = $strtime;
7d792369 517 $outmain = $text;
1515a89e 518 }
9f85bed4 519
520 } else { /// It's a normal message
521 $outinfo = "$strtime $user->firstname";
7d792369 522 $outmain = $text;
1515a89e 523 }
524
9f85bed4 525 /// Format the message as a small table
1515a89e 526
7d792369 527 $output->text = strip_tags("$outinfo: $outmain");
528
529 $output->html = "<table><tr><td valign=top>$picture</td><td><font size=2>";
530 $output->html .= "<font color=\"#888888\">$outinfo</font>";
531 if ($outmain) {
532 $output->html .= ": $outmain";
533 }
534 $output->html .= "</font></td></tr></table>";
1515a89e 535
7d792369 536 return $output;
1515a89e 537
538}
539
1515a89e 540?>