New translationd added.
[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
37 # May have to add extra stuff in here #
38
39 return insert_record("chat", $chat);
40}
41
42
43function chat_update_instance($chat) {
44/// Given an object containing all the necessary data,
45/// (defined by the form in mod.html) this function
46/// will update an existing instance with new data.
47
48 $chat->timemodified = time();
49 $chat->id = $chat->instance;
50
51 # May have to add extra stuff in here #
52
53 return update_record("chat", $chat);
54}
55
56
57function chat_delete_instance($id) {
58/// Given an ID of an instance of this module,
59/// this function will permanently delete the instance
60/// and any data that depends on it.
61
62 if (! $chat = get_record("chat", "id", "$id")) {
63 return false;
64 }
65
66 $result = true;
67
68 # Delete any dependent records here #
69
70 if (! delete_records("chat", "id", "$chat->id")) {
71 $result = false;
72 }
73
74 return $result;
75}
76
77function chat_user_outline($course, $user, $mod, $chat) {
78/// Return a small object with summary information about what a
79/// user has done with a given particular instance of this module
80/// Used for user activity reports.
81/// $return->time = the time they did it
82/// $return->info = a short text description
83
84 return $return;
85}
86
87function chat_user_complete($course, $user, $mod, $chat) {
88/// Print a detailed representation of what a user has done with
89/// a given particular instance of this module, for user activity reports.
90
91 return true;
92}
93
94function chat_print_recent_activity(&$logs, $isteacher=false) {
95/// Given a list of logs, assumed to be those since the last login
96/// this function prints a short list of changes related to this module
97/// If isteacher is true then perhaps additional information is printed.
98/// This function is called from course/lib.php: print_recent_activity()
99
100 global $CFG, $COURSE_TEACHER_COLOR;
101
102 return $content; // True if anything was printed, otherwise false
103}
104
105function chat_cron () {
106/// Function to be run periodically according to the moodle cron
107/// This function searches for things that need to be done, such
108/// as sending out mail, toggling flags etc ...
109
110 global $CFG;
111
7d792369 112 chat_delete_old_users();
113
1515a89e 114 return true;
115}
116
117function chat_grades($chatid) {
118/// Must return an array of grades for a given instance of this module,
119/// indexed by user. It also returns a maximum allowed grade.
120
121 $return->grades = NULL;
122 $return->maxgrade = NULL;
123
124 return $return;
125}
126
127
128//////////////////////////////////////////////////////////////////////
129/// Functions that require some SQL
130
131function chat_get_users($chatid) {
132
133 global $CFG;
134
f7e648da 135 return get_records_sql("SELECT u.id, u.firstname, u.lastname, u.picture, c.lastmessageping
1515a89e 136 FROM {$CFG->prefix}chat_users c,
137 {$CFG->prefix}user u
138 WHERE c.chatid = '$chatid'
139 AND u.id = c.userid
140 GROUP BY u.id
141 ORDER BY c.firstping ASC");
142}
143
144function chat_get_latest_message($chatid) {
145
146 global $CFG;
147
148 return get_record_sql("SELECT *
149 FROM {$CFG->prefix}chat_messages
150 WHERE chatid = '$chatid'
151 ORDER BY timestamp DESC");
152}
153
154//////////////////////////////////////////////////////////////////////
155
156function chat_login_user($chatid, $version="header_js") {
157 global $USER;
158
159 $chatuser->chatid = $chatid;
160 $chatuser->userid = $USER->id;
161 $chatuser->version = $version;
162 $chatuser->ip = $USER->lastIP;
f7e648da 163 $chatuser->lastping = $chatuser->firstping = $chatuser->lastmessageping = time();
1515a89e 164 $chatuser->sid = random_string(32);
165
166 if (!insert_record("chat_users", $chatuser)) {
167 return false;
168 }
169
170 return $chatuser->sid;
171}
172
7d792369 173function chat_delete_old_users() {
174// Delete the old and in the way
175
176 $timeold = time() - CHAT_OLD_PING;
177
178 if ($oldusers = get_records_select("chat_users", "lastping < '$timeold'") ) {
179 delete_records_select("chat_users", "lastping < '$timeold'");
180 foreach ($oldusers as $olduser) {
181 $message->chatid = $olduser->chatid;
182 $message->userid = $olduser->userid;
183 $message->message = "exit";
184 $message->system = 1;
185 $message->timestamp = time();
186
187 if (!insert_record("chat_messages", $message)) {
188 error("Could not insert a chat message!");
189 }
190 }
191 }
192}
1515a89e 193
194function chat_browser_detect($HTTP_USER_AGENT) {
195
196 if(eregi("(opera) ([0-9]{1,2}.[0-9]{1,3}){0,1}", $HTTP_USER_AGENT, $match)
197 || eregi("(opera/)([0-9]{1,2}.[0-9]{1,3}){0,1}", $HTTP_USER_AGENT, $match))
198 {
199 $BName = "Opera"; $BVersion=$match[2];
200 }
201 elseif( eregi("(konqueror)/([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
202 {
203 $BName = "Konqueror"; $BVersion=$match[2];
204 }
205 elseif( eregi("(lynx)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})", $HTTP_USER_AGENT, $match) )
206 {
207 $BName = "Lynx"; $BVersion=$match[2];
208 }
209 elseif( eregi("(links) \(([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
210 {
211 $BName = "Links"; $BVersion=$match[2];
212 }
213 elseif( eregi("(msie) ([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
214 {
215 $BName = "MSIE"; $BVersion=$match[2];
216 }
217 elseif( eregi("(netscape6)/(6.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
218 {
219 $BName = "Netscape"; $BVersion=$match[2];
220 }
221 elseif( eregi("mozilla/5", $HTTP_USER_AGENT) )
222 {
223 $BName = "Netscape"; $BVersion="Unknown";
224 }
225 elseif( eregi("(mozilla)/([0-9]{1,2}.[0-9]{1,3})", $HTTP_USER_AGENT, $match) )
226 {
227 $BName = "Netscape"; $BVersion=$match[2];
228 }
229 elseif( eregi("w3m", $HTTP_USER_AGENT) )
230 {
231 $BName = "w3m"; $BVersion="Unknown";
232 }
233 else
234 {
235 $BName = "Unknown"; $BVersion="Unknown";
236 }
237
238 if(eregi("linux", $HTTP_USER_AGENT))
239 {
240 $BPlatform = "Linux";
241 }
242 elseif( eregi("win32", $HTTP_USER_AGENT) )
243 {
244 $BPlatform = "Windows";
245 }
246 elseif( (eregi("(win)([0-9]{2})", $HTTP_USER_AGENT, $match) )
247 || (eregi("(windows) ([0-9]{2})", $HTTP_USER_AGENT, $match) ))
248 {
249 $BPlatform = "Windows $match[2]";
250 }
251 elseif( eregi("(winnt)([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
252 {
253 $BPlatform = "Windows NT $match[2]";
254 }
255 elseif( eregi("(windows nt)( ){0,1}([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
256 {
257 $BPlatform = "Windows NT $match[3]";
258 }
259 elseif( eregi("mac", $HTTP_USER_AGENT) )
260 {
261 $BPlatform = "Macintosh";
262 }
263 elseif( eregi("(sunos) ([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
264 {
265 $BPlatform = "SunOS $match[2]";
266 }
267 elseif( eregi("(beos) r([0-9]{1,2}.[0-9]{1,2}){0,1}", $HTTP_USER_AGENT, $match) )
268 {
269 $BPlatform = "BeOS $match[2]";
270 }
271 elseif( eregi("freebsd", $HTTP_USER_AGENT) )
272 {
273 $BPlatform = "FreeBSD";
274 }
275 elseif( eregi("openbsd", $HTTP_USER_AGENT) )
276 {
277 $BPlatform = "OpenBSD";
278 }
279 elseif( eregi("irix", $HTTP_USER_AGENT) )
280 {
281 $BPlatform = "IRIX";
282 }
283 elseif( eregi("os/2", $HTTP_USER_AGENT) )
284 {
285 $BPlatform = "OS/2";
286 }
287 elseif( eregi("plan9", $HTTP_USER_AGENT) )
288 {
289 $BPlatform = "Plan9";
290 }
291 elseif( eregi("unix", $HTTP_USER_AGENT)
292 || eregi("hp-ux", $HTTP_USER_AGENT) )
293 {
294 $BPlatform = "Unix";
295 }
296 elseif( eregi("osf", $HTTP_USER_AGENT) )
297 {
298 $BPlatform = "OSF";
299 }
300 else
301 {
302 $BPlatform = "Unknown";
303 }
304
305 $return["name"] = $BName;
306 $return["version"] = $BVersion;
307 $return["platform"] = $BPlatform;
308 return $return;
309}
310
311function chat_display_version($version, $browser)
312{
313 GLOBAL $CFG;
314
315 $checked = "";
316 if (($version == "sockets") OR ($version == "push_js"))
317 {
318 $checked = "checked";
319 }
320 if (($version == "sockets" OR $version == "push_js")
321 AND
322 ($browser["name"] == "Lynx"
323 OR
324 $browser["name"] == "Links"
325 OR
326 $browser["name"] == "w3m"
327 OR
328 $browser["name"] == "Konqueror"
329 OR
330 ($browser["name"] == "Netscape" AND substr($browser["version"], 0, 1) == "2")))
331 {
332 $checked = "";
333 }
334 if (($version == "text")
335 AND
336 ($browser["name"] == "Lynx"
337 OR
338 $browser["name"] == "Links"
339 OR
340 $browser["name"] == "w3m"))
341 {
342 $checked = "checked";
343 }
344 if (($version == "header")
345 AND
346 ($browser["name"] == "Konqueror"))
347 {
348 $checked = "checked";
349 }
350 if (($version == "header_js")
351 AND
352 ($browser["name"] == "Netscape" AND substr($browser["version"], 0, 1) == "2"))
353 {
354 $checked = "checked";
355 }
356 ?>
357 <tr>
358 <td valign="top">
359 <input type="radio" name="chat_chatversion" value="<?php echo $version; ?>"<?php echo $checked; ?>>
360 </td>
361 <td valign="top" align="left">
362 <font face="Arial" size="2">
363 <?php echo $chat_lang["gui_".$version]; ?>
364 </font>
365 </td>
366 </tr>
367 <?php
368
369}
370
371
7d792369 372function chat_format_message($message) {
373/// Given a message object full of information, this function
374/// formats it appropriately into text and html, then
375/// returns the formatted data.
1515a89e 376
377 global $CFG, $USER;
378
7d792369 379 $output = new object;
380
381 if (!$user = get_record("user", "id", $message->userid)) {
382 return "Error finding user id = $message->userid";
1515a89e 383 }
384
385 $picture = print_user_picture($user->id, 0, $user->picture, false, true, false);
386
7d792369 387 $strtime = userdate($message->timestamp, get_string("strftimemessage", "chat"));
388
389 $output->beep = false; // by default
1515a89e 390
7d792369 391 $text = $message->message;
392
393 if (!empty($message->system)) { /// It's a system message
394 $output->text = get_string("message$text", "chat",
395 "$user->firstname $user->lastname");
396 $output->text = "$strtime: $output->text";
397 $output->html = "<table><tr><td valign=top>$picture</td><td>";
398 $output->html .= "<font size=2 color=\"#CCAAAA\">$output->text</font>";
399 $output->html .= "</td></tr></table>";
1515a89e 400 return $output;
401 }
402
7d792369 403 convert_urls_into_links($text);
404 replace_smilies($text);
405
406 if (substr($text, 0, 5) == "beep ") { /// It's a beep!
407 $beepwho = trim(substr($text, 5));
9f85bed4 408
7d792369 409 if ($beepwho == "all") { // everyone
410 $outinfo = "$strtime: ". get_string("messagebeepseveryone", "chat",
411 "$user->firstname $user->lastname");
412 $outmain = "";
413 $output->beep = true; // (eventually this should be set to
414 // to a filename uploaded by the user)
415
416 } else if ($beepwho == $USER->id) { // current user
417 $outinfo = "$strtime: ". get_string("messagebeepsyou", "chat",
418 "$user->firstname $user->lastname");
419 $outmain = "";
420 $output->beep = true;
421
422 } else {
423 return false;
424 }
425
426 } else if (substr($text, 0, 1) == ":") { /// It's an MOO emote
9f85bed4 427 $outinfo = $strtime;
7d792369 428 $outmain = "$user->firstname ".substr($text, 1);
9f85bed4 429
7d792369 430 } else if (substr($text, 0, 1) == "/") { /// It's a user command
1515a89e 431
7d792369 432 if (substr($text, 0, 4) == "/me ") {
9f85bed4 433 $outinfo = $strtime;
7d792369 434 $outmain = "$user->firstname ".substr($text, 4);
9f85bed4 435 } else {
436 $outinfo = $strtime;
7d792369 437 $outmain = $text;
1515a89e 438 }
9f85bed4 439
440 } else { /// It's a normal message
441 $outinfo = "$strtime $user->firstname";
7d792369 442 $outmain = $text;
1515a89e 443 }
444
9f85bed4 445 /// Format the message as a small table
1515a89e 446
7d792369 447 $output->text = strip_tags("$outinfo: $outmain");
448
449 $output->html = "<table><tr><td valign=top>$picture</td><td><font size=2>";
450 $output->html .= "<font color=\"#888888\">$outinfo</font>";
451 if ($outmain) {
452 $output->html .= ": $outmain";
453 }
454 $output->html .= "</font></td></tr></table>";
1515a89e 455
7d792369 456 return $output;
1515a89e 457
458}
459
1515a89e 460?>