1515a89e |
1 | <?PHP // $Id$ |
2 | |
3 | /// Library of functions and constants for module chat |
4 | |
5 | |
6 | define("CHAT_REFRESH_ROOM", 10); |
7 | define("CHAT_REFRESH_USERLIST", 10); |
8 | define("CHAT_OLD_PING", 30); |
9 | |
10 | define("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 | |
29 | function 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 | |
43 | function 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 | |
57 | function 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 | |
77 | function 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 | |
87 | function 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 | |
94 | function 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 | |
105 | function 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 | |
117 | function 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 | |
131 | function 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 | |
144 | function 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 | |
156 | function 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 |
173 | function 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 | |
194 | function 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 | |
311 | function 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 |
372 | function 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 | ?> |