source: trunk/inc/teamspeakdisplay/teamspeakdisplay.php

Last change on this file was 690, checked in by george, 15 years ago
  • Přidáno: Zavedení systému pěkných URL. Přejmenováno mnoho stránek.
  • Přidáno: Skript pro generování SERVERALERT aktualit pro klienta.
File size: 27.1 KB
Line 
1<?php
2// Teamspeak Display Preview Release 3
3// Copyright (C) 2005 Guido van Biemen (aka MrGuide@NL)
4//
5// This program is free software; you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation; either version 2 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program; if not, write to the Free Software
17// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19class teamspeakDisplayClass {
20
21 // Removes subsequent end of line charachter from the right part of a string
22 function _stripEOL($evalString) {
23 $newLen = strlen($evalString);
24 while (((substr($evalString, $newLen - 1, 1) == "\r")) || ((substr($evalString, $newLen - 1, 1) == "\n"))) {
25 $newLen--;
26 }
27 return substr($evalString, 0, $newLen);
28 }
29
30 // Opens a connection to the teamspeak server
31 function _openConnection(&$socket, $host, $port, $timeout) {
32 @$socket = fsockopen($host, $port, $errno, $errstr, $timeout);
33 if ($socket and ($this->_stripEOL(fgets($socket, 4096)) == "[TS]")) {
34 return true;
35 } else {
36 return false;
37 }
38 }
39
40 // Closes the connection to the Teamspeak server
41 function _closeConnection($socket) {
42 fputs($socket, "quit\n");
43 fclose($socket);
44 }
45 // odstrannie diakritiky
46 function Kodovani ($string)
47 {
48 $st_new = ToUTF8($string);
49// $st_new = strtr($string, "\xe1\xe4\xe8\xef\xe9\xec\xed\xbe\xe5\xf2\xf3\xf6\xf5\xf4\xf8\xe0\x9a\x9d\xfa\xf9\xfc\xfb\xfd\x9e\xc1\xc4\xc8\xcf\xc9\xcc\xcd\xbc\xc5\xd2\xd3\xd6\xd5\xd4\xd8\xc0\x8a\x8d\xda\xd9\xdc\xdb\xdd\x8e","aacdeeillnoooorrstuuuuyzAACDEEILLNOOOORRSTUUUUYZ" );
50 $st_new = htmlspecialchars($st_new);
51 return $st_new;
52 }
53
54 // Returns the part of evalString until a tab (or the end of a string) and deletes the
55 // returned part from evalString (including the possible tab that follows)
56 function _stripPartFromString(&$evalString) {
57 $pos = strpos($evalString, "\t");
58 if(is_integer($pos)) {
59 $result = substr($evalString, 0, $pos);
60 $evalString = substr($evalString, $pos + 1);
61 } else {
62 $result = $evalString;
63 $evalString = "";
64 }
65 return $result;
66 }
67
68 // Removes the surrounding quotes from evalString and returns the result
69 function _stripQuotes($evalString) {
70 if(strpos($evalString, '"') == 0) $evalString = substr($evalString, 1, strlen($evalString) - 1);
71 if(strrpos($evalString, '"') == strlen($evalString) - 1) $evalString = substr($evalString, 0, strlen($evalString) - 1);
72 return $evalString;
73 }
74
75 // Request, read and parse the server info:
76 function _getServerInfo($socket) {
77 fputs($socket, "si\n");
78 $result = array();
79 do {
80 $buffer = $this->_stripEOL(fgets($socket, 4096));
81 if (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR")) {
82 $pos = strpos($buffer, '=');
83 if ($pos !== False) {
84 $result[substr($buffer, 0, $pos)] = substr($buffer, $pos + 1);
85 }
86 }
87 } while (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR") && (!feof($socket)));
88 return $result;
89 }
90
91 function _setPlayerDisplayImage(&$playerInfo) {
92 // Determine the right userpicture:
93 if (($playerInfo["attribute"] & 8) == 8) { $playerImage = "away"; }
94 else if (($playerInfo["attribute"] & 32) == 32) { $playerImage = "mutespeakers"; }
95 else if (($playerInfo["attribute"] & 16) == 16) { $playerImage = "mutemicrophone"; }
96 else if (($playerInfo["attribute"] & 1) == 1) { $playerImage = "channelcommander"; }
97 else { $playerImage = "normal"; }
98 $playerInfo["displayimage"] = $playerImage;
99 }
100
101 function _setPlayerDisplayName(&$playerInfo) {
102 // Determine the player status (U = Unregistered, R = Registered, SA = Server Admin,
103 // CA = Channel Admin, AO = Auto-Operator, AV = Auto-Voice, O = Operator, V = Voice)
104 if (($playerInfo["userstatus"] & 4) == 4) { $playerstatus = "R"; } else { $playerstatus = 'U'; }
105 if (($playerInfo["userstatus"] & 1) == 1) { $playerstatus .= " SA"; }
106 if (($playerInfo["privileg"] & 1) == 1) { $playerstatus .= " CA"; }
107 if (($playerInfo["privileg"] & 8) == 8) { $playerstatus .= " AO"; }
108 if (($playerInfo["privileg"] & 16) == 16) { $playerstatus .= " AV"; }
109 if (($playerInfo["privileg"] & 2) == 2) { $playerstatus .= " O"; }
110 if (($playerInfo["privileg"] & 4) == 4) { $playerstatus .= " V"; }
111 if (($playerInfo["attribute"] & 64) == 64) { $playerstatus .= " Rec"; }
112
113 // Determine the player attributes to be listed behind the player status (WV = Want Voice)
114 if (($playerInfo["attribute"] & 2) == 2) { $playerattributes = ' WV'; } else { $playerattributes = ''; }
115
116 $playerInfo["displayname"] = $playerInfo["playername"] . " (" . $playerstatus . ")" . $playerattributes;
117 }
118
119 function _getPlayerList($socket) {
120 // Request, read and parse the player list
121 fputs($socket, "pl\n");
122 $buffer = $this->_stripEOL(fgets($socket, 4096));
123 $result = array();
124 if (strtoupper(substr($buffer, 0, 5)) == "ERROR") { return $result; }
125 do {
126 $buffer = $this->_stripEOL(fgets($socket, 4096));
127 if (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR")) {
128 $playerid = $this->_stripPartFromString($buffer);
129 $result[$playerid] = array(
130 "playerid" => $playerid,
131 "channelid" => $this->_stripPartFromString($buffer),
132 "receivedpackets" => $this->_stripPartFromString($buffer),
133 "receivedbytes" => $this->_stripPartFromString($buffer),
134 "sentpackets" => $this->_stripPartFromString($buffer),
135 "sentbytes" => $this->_stripPartFromString($buffer),
136 "paketlost" => $this->_stripPartFromString($buffer) / 100,
137 "pingtime" => $this->_stripPartFromString($buffer),
138 "totaltime" => $this->_stripPartFromString($buffer),
139 "idletime" => $this->_stripPartFromString($buffer),
140 "privileg" => $this->_stripPartFromString($buffer),
141 "userstatus" => $this->_stripPartFromString($buffer),
142 "attribute" => $this->_stripPartFromString($buffer),
143 "ip" => $this->_stripPartFromString($buffer),
144 "playername" => $this->_stripQuotes($this->_stripPartFromString($buffer)),
145 "loginname" => $this->_stripQuotes($this->_stripPartFromString($buffer))
146 );
147 $this->_setPlayerDisplayImage($result[$playerid]);
148 $this->_setPlayerDisplayName($result[$playerid]);
149 }
150 } while (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR") && (!feof($socket)));
151 return $result;
152 }
153
154 function _getLimitedPlayerList($socket, $channelList) {
155 $playerList = $this->_getPlayerList($socket);
156 $result = array();
157 foreach($playerList as $playerInfo) {
158 foreach($channelList as $channelInfo) {
159 if ($playerInfo["channelid"] == $channelInfo["channelid"]) {
160 $result[$playerInfo["playerid"]] = $playerInfo;
161 }
162 }
163 }
164 return $result;
165 }
166
167 function _setChannelDisplayName(&$channelInfo) {
168 if ($channelInfo["parent"] != -1) {
169 $channelInfo["displayname"] = $channelInfo["channelname"];
170 } else {
171 // Determine the channel status (U = Unregisterd, R = Registered, M = Moderated,
172 // P = Passworded, S = Sub-channels, D = Default).
173 if (($channelInfo["flags"] & 1) == 1) { $channelstatus = 'U'; } else { $channelstatus = 'R'; }
174 if (($channelInfo["flags"] & 2) == 2) { $channelstatus .= 'M'; }
175 if (($channelInfo["flags"] & 4) == 4) { $channelstatus .= 'P'; }
176 if (($channelInfo["flags"] & 8) == 8) { $channelstatus .= 'S'; }
177 if (($channelInfo["flags"] & 16) == 16) { $channelstatus .= 'D'; }
178 $channelInfo["displayname"] = $channelInfo["channelname"] . " (" . $channelstatus . ")";
179 }
180 }
181
182 function _getChannelList($socket) {
183 // Request, read and parse the channel list
184 fputs($socket, "cl\n");
185 $buffer = $this->_stripEOL(fgets($socket, 4096));
186 $result = array();
187 if (strtoupper(substr($buffer, 0, 5)) == "ERROR") { return $result; }
188 do {
189 $buffer = $this->_stripEOL(fgets($socket, 4096));
190 if (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR")) {
191 $channelid = $this->_stripPartFromString($buffer);
192 $result[$channelid] = array(
193 "channelid" => $channelid,
194 "codec" => $this->_stripPartFromString($buffer),
195 "parent" => $this->_stripPartFromString($buffer),
196 "order" => $this->_stripPartFromString($buffer),
197 "maxplayers" => $this->_stripPartFromString($buffer),
198 "channelname" => $this->_stripQuotes($this->_stripPartFromString($buffer)),
199 "flags" => $this->_stripPartFromString($buffer),
200 "password" => $this->_stripPartFromString($buffer),
201 "topic" => $this->_stripQuotes($this->_stripPartFromString($buffer))
202 );
203 $this->_setChannelDisplayName($result[$channelid]);
204 }
205 } while (($buffer != "OK") && (strtoupper(substr($buffer, 0, 5)) != "ERROR") && (!feof($socket)));
206 return $result;
207 }
208
209 function _getLimitedChannelList($socket, $limitChannel) {
210 $channelList = $this->_getChannelList($socket);
211 $result = array();
212 foreach($channelList as $channelInfo) {
213 if ($channelInfo["parent"] == -1) {
214 if ($channelInfo["channelname"] == $limitChannel) {
215 $result[$channelInfo["channelid"]] = $channelInfo;
216 foreach($channelList as $subChannelInfo) {
217 if ($subChannelInfo["parent"] == $channelInfo["channelid"]) {
218 $result[$subChannelInfo["channelid"]] = $subChannelInfo;
219 }
220 }
221 }
222 }
223 }
224 return $result;
225 }
226
227 function _selectServer($socket, $port) {
228 // Request the server to select the server which is hosted on the port set in serverUDPPort
229 fputs($socket, "sel ".$port . "\n");
230
231 // Read server response on request to select a server
232 return ($this->_stripEOL(fgets($socket, 4096)) == "OK");
233 }
234
235 // Queries the Teamspeak server
236 function queryTeamspeakServerEx($settings) {
237 $result = array();
238
239 // Try to establish a connection to the teamspeak server
240 if (! $this->_openConnection($socket, $settings["serveraddress"], $settings["serverqueryport"], 0.3)) {
241 $result["queryerror"] = 1;
242 } else if (! $this->_selectServer($socket, $settings["serverudpport"])) {
243 $result["queryerror"] = 2;
244 $this->_closeConnection($socket);
245 } else {
246 $result["queryerror"] = 0;
247 $result["serverinfo"] = $this->_getServerInfo($socket);
248 $result["channellist"] = ($settings["limitchannel"] == "") ? $this->_getChannelList($socket) : $this->_getLimitedChannelList($socket, $settings["limitchannel"]);
249 $result["playerlist"] = ($settings["limitchannel"] == "") ? $this->_getPlayerList($socket) : $this->_getLimitedPlayerList($socket, $result["channellist"]);
250 $this->_closeConnection($socket);
251 }
252 return $result;
253 }
254
255 function queryTeamspeakServer($serverAddress, $serverUDPPort, $serverQueryPort) {
256 $settings = $this->getDefaultSettings();
257 $settings["serveraddress"] = $serverAddress;
258 $settings["serverudpport"] = $serverUDPPort;
259 $settings["serverqueryport"] = $serverQueryPort;
260 return $this->queryTeamspeakServerEx($settings);
261 }
262
263 function _orderAlphaGetString($string) {
264 $lowerstring = strtolower($string);
265 $result = "";
266 for ($i = 0; $i < strlen($lowerstring); $i++) {
267 if (strpos("0123456789abcdefghijklmnopqrstuvwxyz", substr($lowerstring, $i, 1)) !== false) {
268 $result .= substr($lowerstring, $i, 1);
269 }
270 }
271 return $result;
272 }
273
274 function _orderAlpha($str1, $str2) {
275 return strcmp($this->_orderAlphaGetString($str1), $this->_orderAlphaGetString($str2));
276 }
277
278 function _compareChannel($a, $b) {
279 if ($a["order"] != $b["order"]) { return ($a["order"] < $b["order"]) ? -1 : 1; }
280 else { return $this->_orderAlpha($a["displayname"], $b["displayname"]); }
281 }
282
283 function _comparePlayer($a, $b) {
284 // Determine userlevel (0 = Not server admin, 1 = Server admin)
285 $userlevela = $a["userstatus"] & 1;
286 $userlevelb = $b["userstatus"] & 1;
287 if ($userlevela != $userlevelb) { return ($userlevela < $userlevelb) ? 1 : -1; }
288 else { return $this->_orderAlpha($a["displayname"], $b["displayname"]); }
289 }
290
291 function sortServerInfo(&$serverInfo) {
292 usort($serverInfo["channellist"], array($this, "_compareChannel"));
293 usort($serverInfo["playerlist"], array($this, "_comparePlayer"));
294 }
295
296 function _formatTime($totaltime) {
297 $hours = floor($totaltime / 3600);
298 $minutes = floor(($totaltime % 3600) / 60);
299 return (($hours < 10) ? "0" : "") . $hours . ":" . (($minutes < 10) ? "0" : "") . $minutes;
300 }
301
302 // Returns the codec name
303 function _getCodecName($codec) {
304 if ($codec == 0) { return "CELP 5.1 Kbit"; }
305 else if ($codec == 1) { return "CELP 6.3 Kbit"; }
306 else if ($codec == 2) { return "GSM 14.8 Kbit"; }
307 else if ($codec == 3) { return "GSM 16.4 Kbit"; }
308 else if ($codec == 4) { return "CELP Windows 5.2 Kbit"; }
309 else if ($codec == 5) { return "Speex 3.4 Kbit"; }
310 else if ($codec == 6) { return "Speex 5.2 Kbit"; }
311 else if ($codec == 7) { return "Speex 7.2 Kbit"; }
312 else if ($codec == 8) { return "Speex 9.3 Kbit"; }
313 else if ($codec == 9) { return "Speex 12.3 Kbit"; }
314 else if ($codec == 10) { return "Speex 16.3 Kbit"; }
315 else if ($codec == 11) { return "Speex 19.5 Kbit"; }
316 else if ($codec == 12) { return "Speex 25.9 Kbit"; }
317 else { return "Unknown (" . $codec . ")"; }
318 }
319
320 function getDefaultSettings() {
321 $result = array();
322 $result["serveraddress"] = "";
323 $result["serverudpport"] = 8767;
324 $result["serverqueryport"] = 51234;
325 $result["limitchannel"] = "";
326 $result["forbiddennicknamechars"] = "()[]{}";
327 return $result;
328 }
329
330 // Main function (queries, sorts and displays the teamspeak serverinfo). Its code is not
331 // very readable... well what shall I say about it... it was hard to write so it should
332 // be hard to read >:)
333 function displayTeamspeakEx($settings) {
334 global $html;
335
336 $serverInfo = $this->queryTeamspeakServerEx($settings);
337
338 echo("<div id=\"teamspeakdisplay\">\n");
339 if ($serverInfo["queryerror"] != 0) {
340 $popupInfo = "Server address: " . $settings["serveraddress"] . (($settings["serverudpport"] != 8767) ? (":" . $settings["serverudpport"]): "");
341 if ($serverInfo["queryerror"] == 1) {
342 $popupInfo .= ", Error: could not connect to query port";
343 } else {
344 $popupInfo .= ", Error: no server running on port " . $settings["serverudpport"];
345 }
346 echo("<table><tr><td>");
347 echo("<img src=\"".$html->Link('/inc/teamspeakdisplay/teamspeak_offline.png')."\" alt=\"\" title=\"" . $popupInfo . "\">");
348 echo("</td><td class=\"teamspeakserver\" title=\"" . $popupInfo . "\">");
349 echo("Server offline");
350 echo("</td></tr></table>\n");
351 } else {
352 $this->sortServerInfo($serverInfo);
353
354 // Generate javascript for teamspeak hyperlinks
355 $jsTeamspeakId = md5($settings["serveraddress"] . ":" . $settings["serverudpport"]);
356 echo("<script type=\"text/javascript\"><!--\n");
357 echo("function stringOk_" . $jsTeamspeakId . "(string, forbiddenChars) {\n");
358 echo(" for(var i = 0; i < string.length; i++) {\n");
359 echo(" if (forbiddenChars.indexOf(string.charAt(i)) > -1) {\n");
360 echo(" return false;\n");
361 echo(" }\n");
362 echo(" }\n");
363 echo(" return true;\n");
364 echo("}\n");
365 echo("function enterServer_" . $jsTeamspeakId . "() {\n");
366 echo(" enterSubChannel_" . $jsTeamspeakId . "(null, false, null);\n");
367 echo("}\n");
368 echo("function enterChannel_" . $jsTeamspeakId . "(channelName, channelPassworded) {\n");
369 echo(" enterSubChannel_" . $jsTeamspeakId . "(channelName, channelPassworded, null);\n");
370 echo("}\n");
371 echo("function enterSubChannel_" . $jsTeamspeakId . "(channelName, channelPassworded, subChannelName) {\n");
372 echo(" var serveraddress = 'teamspeak://" . $settings["serveraddress"] . ":" . $settings["serverudpport"] . "';\n");
373 echo(" var nickname=window.prompt('Enter your nickname', '');\n");
374 echo(" if (nickname == null) {\n");
375 echo(" return;\n");
376 echo(" } else if (! stringOk_" . $jsTeamspeakId . "(nickname, '" . str_replace("'", "\\'", $settings["forbiddennicknamechars"]) . "')) {\n");
377 echo(" window.alert('Could not enter the teamspeak server because the nickname you entered contains one or more of these forbidden characters: " . str_replace("'", "\\'", $settings["forbiddennicknamechars"]) . "');\n");
378 echo(" return;\n");
379 echo(" } else if (nickname == \"\") {\n");
380 echo(" window.alert('Could not enter the teamspeak server because you did not enter your nickname');\n");
381 echo(" return;\n");
382 echo(" }\n");
383 echo(" serveraddress = serveraddress + \"/nickname=\" + escape(nickname);\n");
384 if ($serverInfo["serverinfo"]["server_password"] == "1") {
385 echo(" var password=window.prompt('Enter the teamspeak server password for " . $serverInfo["serverinfo"]["server_name"] . "', '');\n");
386 echo(" if (password == null) {\n");
387 echo(" return;\n");
388 echo(" } else if (password == \"\") {\n");
389 echo(" window.alert('Could not enter the teamspeak server because you did not enter a server password');\n");
390 echo(" return;\n");
391 echo(" }\n");
392 echo(" serveraddress = serveraddress + \"?password=\" + escape(password);\n");
393 }
394 echo(" if (channelName != null) { serveraddress = serveraddress + \"?channel=\" + escape(channelName); }\n");
395 echo(" if (channelPassworded) {\n");
396 echo(" var channelpassword=window.prompt('Enter the channel password for channel ' + channelName, '');\n");
397 echo(" if (channelpassword == null) {\n");
398 echo(" return;\n");
399 echo(" } else if (channelpassword == \"\") {\n");
400 echo(" window.alert('Could not enter the teamspeak server because you did not enter a channel password');\n");
401 echo(" return;\n");
402 echo(" }\n");
403 echo(" serveraddress = serveraddress + \"?channelpassword=\" + escape(channelpassword);\n");
404 echo(" }\n");
405 echo(" if (subChannelName != null) { serveraddress = serveraddress + \"?subchannel=\" + escape(subChannelName); }\n");
406 echo(" window.location=serveraddress;\n");
407 echo("}\n");
408 echo("//--></script>\n");
409
410 $popupInfo = "Server address: " . $settings["serveraddress"] . (($settings["serverudpport"] != 8767) ? (":" . $settings["serverudpport"]): "") . ", Max players: " . $serverInfo["serverinfo"]["server_maxusers"] . ", Uptime: " . $this->_formatTime($serverInfo["serverinfo"]["server_uptime"]);
411
412 // Print the topmost element of the teamspeak tree
413 echo("<table><tr><td>");
414 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/teamspeak_online.png")."\" alt=\"\" title=\"" . $popupInfo . "\">");
415 echo("</td><td class=\"teamspeakserver\" title=\"" . $popupInfo . "\">");
416 echo("<a class=\"teamspeakserver\" href=\"javascript:enterServer_" . $jsTeamspeakId . "();\">");
417 echo(str_replace(" ", "&nbsp;", $this -> Kodovani($serverInfo["serverinfo"]["server_name"])));
418 echo("</a>");
419 echo("</td></tr></table>\n");
420
421 // Count the number of channels to be listed:
422 $currentchannels = 0;
423 foreach($serverInfo["channellist"] as $channelInfo) {
424 if ($channelInfo["parent"] == -1) {
425 $currentchannels++;
426 }
427 }
428
429 // Initialize the channelcounter to zero
430 $counter = 0;
431
432 // Loop through all channels:
433 foreach($serverInfo["channellist"] as $channelInfo) { if ($channelInfo["parent"] == -1) {
434
435 // determine number of players in channel
436 $currentplayers = 0;
437 foreach($serverInfo["playerlist"] as $playerInfo) {
438 if($playerInfo["channelid"] == $channelInfo["channelid"]) $currentplayers++;
439 }
440
441 // Count the number of channels to be listed:
442 $currentplayersandsubchannels = $currentplayers;
443 foreach($serverInfo["channellist"] as $subchannelInfo) {
444 if ($subchannelInfo["parent"] == $channelInfo["channelid"]) {
445 $currentplayersandsubchannels++;
446 }
447 }
448
449 $popupInfo = "Max players: " . $channelInfo["maxplayers"] . ", Codec: " . $this->_getCodecName($channelInfo["codec"]);
450 if ($channelInfo["topic"] != "") { $popupInfo = $popupInfo . ", Topic: " . $channelInfo["topic"]; }
451
452 // Display channel:
453 echo("<table><tr><td>");
454 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter + 1) == $currentchannels) ? "3" : "2") . ".png")."\" alt=\"\">");
455 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/channel.png")."\" alt=\"\" title=\"" . $popupInfo . "\">");
456 echo("</td><td class=\"teamspeakchannel\" title=\"" . $popupInfo . "\">");
457 echo("<a class=\"teamspeakchannel\" href=\"javascript:enterChannel_" . $jsTeamspeakId . "('" . str_replace("'", "\'", $channelInfo["channelname"]) . "', " . (($channelInfo["password"]) == "1" ? "true" : "false") . ");\">");
458 echo(str_replace(" ", "&nbsp;", $this -> Kodovani($channelInfo["displayname"])));
459 echo("</a>");
460 echo("</td></tr></table>\n");
461
462 // Initialize the playercounter for this channel to zero
463 $counter_playerandsubchannels = 0;
464
465 // Loop through all players in the current channel:
466 foreach($serverInfo["playerlist"] as $playerInfo) {
467
468 // Is the current player in the current channel?
469 if ($playerInfo["channelid"] == $channelInfo["channelid"]) {
470
471 $popupInfo = "Time online: " . $this->_formatTime($playerInfo["totaltime"]) . ", Time idle: " . $this->_formatTime($playerInfo["idletime"]) . ", Ping: " . $playerInfo["pingtime"] . "ms";
472
473 // Display player:
474 echo("<table><tr><td>");
475 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter + 1) == $currentchannels) ? "4" : "1") . ".png")."\" alt=\"\">");
476 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter_playerandsubchannels + 1) == $currentplayersandsubchannels) ? "3" : "2") . ".png")."\" alt=\"\">");
477 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/player_" . $playerInfo["displayimage"] . ".png")."\" alt=\"" . $playerInfo["displayimage"] . "\" title=\"" . $popupInfo . "\">");
478 echo("</td><td class=\"teamspeakplayer\" title=\"" . $popupInfo . "\">");
479 echo(str_replace(" ", "&nbsp;", $this -> Kodovani($playerInfo["displayname"])));
480 echo("</td></tr></table>\n");
481
482 // Increase the player counter:
483 $counter_playerandsubchannels++;
484 }
485 }
486
487 // Loop through all channels:
488 foreach($serverInfo["channellist"] as $subchannelInfo) { if ($subchannelInfo["parent"] == $channelInfo["channelid"]) {
489 // determine number of players in channel
490 $currentplayers = 0;
491 foreach($serverInfo["playerlist"] as $playerInfo) {
492 if($playerInfo["channelid"] == $subchannelInfo["channelid"]) $currentplayers++;
493 }
494
495 $popupInfo = "Max players: " . $subchannelInfo["maxplayers"] . ", Codec: " . $this->_getCodecName($subchannelInfo["codec"]);
496 if ($subchannelInfo["topic"] != "") { $popupInfo = $popupInfo . ", Topic: " . $subchannelInfo["topic"]; }
497
498 // Display channel:
499 echo("<table><tr><td>");
500 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter + 1) == $currentchannels) ? "4" : "1") . ".png")."\" alt=\"\">");
501 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter_playerandsubchannels + 1) == $currentplayersandsubchannels) ? "3" : "2") . ".png")."\" alt=\"\">");
502 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/channel.png")."\" alt=\"\" title=\"" . $popupInfo . "\">");
503 echo("</td><td class=\"teamspeaksubchannel\" title=\"" . $popupInfo . "\">");
504 echo("<a class=\"teamspeaksubchannel\" href=\"javascript:enterSubChannel_" . $jsTeamspeakId . "('" . str_replace("'", "\'", $channelInfo["channelname"]) . "', " . (($channelInfo["password"]) == "1" ? "true" : "false") . ", '" . str_replace("'", "\'", $subchannelInfo["channelname"]) . "');\">");
505 echo(str_replace(" ", "&nbsp;", $this -> Kodovani($subchannelInfo["displayname"])));
506 echo("</a>");
507 echo("</td></tr></table>\n");
508
509 // Initialize the playercounter for this channel to zero
510 $counter_player = 0;
511
512 // Loop through all players in the current channel:
513 foreach($serverInfo["playerlist"] as $playerInfo) {
514
515 // Is the current player in the current channel?
516 if ($playerInfo["channelid"] == $subchannelInfo["channelid"]) {
517
518 $popupInfo = "Time online: " . $this->_formatTime($playerInfo["totaltime"]) . ", Time idle: " . $this->_formatTime($playerInfo["idletime"]) . ", Ping: " . $playerInfo["pingtime"] . "ms";
519
520 // Display player:
521 echo("<table><tr><td>");
522 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter + 1) == $currentchannels) ? "4" : "1") . ".png")."\" alt=\"\">");
523 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter_playerandsubchannels + 1) == $currentplayersandsubchannels) ? "4" : "1") . ".png")."\" alt=\"\">");
524 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/treeimage" . ((($counter_player + 1) == $currentplayers) ? "3" : "2") . ".png")."\" alt=\"\">");
525 echo("<img src=\"".$html->Link("/inc/teamspeakdisplay/player_" . $playerInfo["displayimage"] . ".png")."\" alt=\"" . $playerInfo["displayimage"] . "\" title=\"" . $popupInfo . "\">");
526 echo("</td><td class=\"teamspeakplayer\" title=\"" . $popupInfo . "\">");
527 echo(str_replace(" ", "&nbsp;", $this -> Kodovani($playerInfo["displayname"])));
528 echo("</td></tr></table>\n");
529
530 // Increase the player counter:
531 $counter_player++;
532 }
533 }
534
535 // Increase the channelcounter
536 $counter_playerandsubchannels++;
537 } }
538
539 // Increase the channelcounter
540 $counter++;
541 } }
542 }
543 echo("</div>\n");
544 }
545
546 function displayTeamspeak($serverAddress, $serverUDPPort=8767, $serverQueryPort=51234) {
547 $settings = $this->getDefaultSettings();
548 $settings["serveraddress"] = $serverAddress;
549 $settings["serverudpport"] = $serverUDPPort;
550 $settings["serverqueryport"] = $serverQueryPort;
551 $this->displayTeamspeakEx($settings);
552 }
553
554}
555
556// Create an instance of the Teamspeak Display Class
557$teamspeakDisplay = new teamspeakDisplayClass;
558
559?>
Note: See TracBrowser for help on using the repository browser.