Also in meiner block_ts3_ansicht.php (die links im menü angezeigt wird da ich es mit blöcken hab )
hab ich stehn
PHP-Code:
<?
////////////////////////////////////////
// Blocks vom Linken Menü //
//////////////////////////////////////
// TS 3 Ansicht //
////////////////////////////////////
?>
<html>
<head>
<title>TSStatus</title>
<link rel="stylesheet" type="text/css" href="/tsstatus/tsstatus.css" />
<script type="text/javascript" src="/tsstatus/tsstatus.js"></script>
</head>
<body>
<?php
require_once("/dt/trackerv2/xyz/tsstatus/tsstatus.php");
$tsstatus = new TSStatus("URLBZW.IP", 10011, 1);
$tsstatus->imagePath = "/tsstatus/img/";
$tsstatus->showNicknameBox = true;
$tsstatus->decodeUTF8 = true;
$tsstatus->timeout = 2;
echo $tsstatus->render();
?>
</body>
</html>
und die tsstatus.php
PHP-Code:
<?php
class TSStatus
{
private $_host;
private $_qport;
private $_sid;
private $_socket;
private $_updated;
private $_serverDatas;
private $_channelDatas;
private $_userDatas;
private $_serverGroupFlags;
private $_channelGroupFlags;
public $imagePath;
public $decodeUTF8;
public $showNicknameBox;
public $timeout;
public function TSStatus($host, $queryPort, $serverId)
{
$this->_host = $host;
$this->_qport = $queryPort;
$this->_sid = $serverId;
$this->_socket = null;
$this->_updated = false;
$this->_serverDatas = array();
$this->_channelDatas = array();
$this->_userDatas = array();
$this->_serverGroupFlags = array();
$this->_channelGroupFlags = array();
$this->imagePath = "img/";
$this->decodeUTF8 = false;
$this->showNicknameBox = true;
$this->timeout = 2;
$this->setServerGroupFlag(6, 'servergroup_300.png');
$this->setChannelGroupFlag(5, 'changroup_100.png');
$this->setChannelGroupFlag(6, 'changroup_200.png');
}
private function unescape($str)
{
$find = array('\\\\', "\/", "\s", "\p", "\a", "\b", "\f", "\n", "\r", "\t", "\v");
$rplc = array(chr(92), chr(47), chr(32), chr(124), chr(7), chr(8), chr(12), chr(10), chr(3), chr(9), chr(11));
return str_replace($find, $rplc, $str);
}
private function parseLine($rawLine)
{
$datas = array();
$rawItems = explode("|", $rawLine);
foreach ($rawItems as $rawItem)
{
$rawDatas = explode(" ", $rawItem);
$tempDatas = array();
foreach($rawDatas as $rawData)
{
$ar = explode("=", $rawData, 2);
$tempDatas[$ar[0]] = isset($ar[1]) ? $this->unescape($ar[1]) : "";
}
$datas[] = $tempDatas;
}
return $datas;
}
private function sendCommand($cmd)
{
fputs($this->_socket, "$cmd\n");
$response = "";
do
{
$response .= fread($this->_socket, 8096);
}while(strpos($response, 'error id=') === false);
if(strpos($response, "error id=0") === false)
{
throw new Exception("TS3 Server returned the following error: " . $this->unescape(trim($response)));
}
return $response;
}
private function queryServer()
{
$this->_socket = @fsockopen($this->_host, $this->_qport, $errno, $errstr, $this->timeout);
if($this->_socket)
{
@socket_set_timeout($this->_socket, $this->timeout);
$isTs3 = trim(fgets($this->_socket)) == "TS3";
if(!$isTs3) throw new Exception("Not a Teamspeak 3 server/bad query port");
$response = "";
$response .= $this->sendCommand("use sid=" . $this->_sid);
$response .= $this->sendCommand("serverinfo");
$response .= $this->sendCommand("channellist -topic -flags -voice -limits");
$response .= $this->sendCommand("clientlist -uid -away -voice -groups");
$this->disconnect();
if($this->decodeUTF8) $response = utf8_decode($response);
return $response;
}
else throw new Exception("Socket error: $errstr [$errno]");
}
private function disconnect()
{
@fputs($this->_socket, "quit\n");
@fclose($this->_socket);
}
private function sortUsers($a, $b)
{
return strcasecmp($a["client_nickname"], $b["client_nickname"]);
}
private function update()
{
$response = $this->queryServer();
$lines = explode("error id=0 msg=ok\n\r", $response);
if(count($lines) == 5)
{
$this->_serverDatas = $this->parseLine($lines[1]);
$this->_serverDatas = $this->_serverDatas[0];
$this->_channelDatas = $this->parseLine($lines[2]);
$this->_userDatas = $this->parseLine($lines[3]);
usort($this->_userDatas, array($this, "sortUsers"));
$this->_updated = true;
}
else $this->error = "Invalid server response";
}
private function renderFlags($flags)
{
$out = "";
foreach ($flags as $flag) $out .= '<img src="' . $this->imagePath . $flag . '" />';
return $out;
}
private function renderUsers($parentId)
{
$out = "";
foreach($this->_userDatas as $user)
{
if($user["client_type"] == 0 && $user["cid"] == $parentId)
{
$icon = "16x16_player_off.png";
if($user["client_away"] == 1) $icon = "16x16_away.png";
else if($user["client_flag_talking"] == 1) $icon = "16x16_player_on.png";
else if($user["client_output_hardware"] == 0) $icon = "16x16_hardware_output_muted.png";
else if($user["client_output_muted"] == 1) $icon = "16x16_output_muted.png";
else if($user["client_input_hardware"] == 0) $icon = "16x16_hardware_input_muted.png";
else if($user["client_input_muted"] == 1) $icon = "16x16_input_muted.png";
$flags = array();
if(isset($this->_channelGroupFlags[$user["client_channel_group_id"]])) $flags[] = $this->_channelGroupFlags[$user["client_channel_group_id"]];
$serverGroups = explode(",", $user["client_servergroups"]);
foreach ($serverGroups as $serverGroup) if(isset($this->_serverGroupFlags[$serverGroup])) $flags[] = $this->_serverGroupFlags[$serverGroup];
$out .= '
<div class="tsstatusItem">
<div class="tsstatusLabel">
<img src="' . $this->imagePath . $icon . '" />' . $user["client_nickname"] . '
</div>
<div class="tsstatusFlags">
' . $this->renderFlags($flags) . '
</div>
</div>';
}
}
return $out;
}
private function renderChannels($parentId)
{
$out = "";
foreach ($this->_channelDatas as $channel)
{
if($channel["pid"] == $parentId)
{
$icon = "16x16_channel_green.png";
if( $channel["channel_maxclients"] > -1 && ($channel["total_clients"] >= $channel["channel_maxclients"])) $icon = "16x16_channel_red.png";
else if( $channel["channel_maxfamilyclients"] > -1 && ($channel["total_clients_family"] >= $channel["channel_maxfamilyclients"])) $icon = "16x16_channel_red.png";
else if($channel["channel_flag_password"] == 1) $icon = "16x16_channel_yellow.png";
$flags = array();
if($channel["channel_flag_default"] == 1) $flags[] = '16x16_default.png';
if($channel["channel_needed_talk_power"] > 0) $flags[] = '16x16_moderated.png';
if($channel["channel_flag_password"] == 1) $flags[] = '16x16_register.png';
$link = "javascript:tsstatusconnect('" . $this->_host . "','" . $this->_serverDatas["virtualserver_port"] . "','" . htmlentities($channel["channel_name"]) . "')";
$out .= '
<div class="tsstatusItem">
<div class="tsstatusLabel">
<a href="' . $link . '">
<img src="' . $this->imagePath . $icon . '" />' . $channel["channel_name"] . '
</a>
</div>
<div class="tsstatusFlags">
' . $this->renderFlags($flags) . '
</div>
' . (count($this->_userDatas) > 0 ? $this->renderUsers($channel["cid"]) : '') . $this->renderChannels($channel["cid"]) . '
</div>';
}
}
return $out;
}
private function renderNickNameBox()
{
$cookieName = "tsstatus_" . str_replace(".", "_", $this->_host);
$nickname = isset($_COOKIE[$cookieName]) ? $_COOKIE[$cookieName] : "";
$out = '<div class="tsstatusNickname">Nickname: <input type="text" id="tsstatusNick" value="' . $nickname . '" /></div>';
return $out;
}
public function clearServerGroupFlags()
{
$this->_serverGroupFlags = array();
}
public function setServerGroupFlag($serverGroupId, $image)
{
$this->_serverGroupFlags[$serverGroupId] = $image;
}
public function clearChannelGroupFlags()
{
$this->_channelGroupFlags = array();
}
public function setChannelGroupFlag($channelGroupId, $image)
{
$this->_channelGroupFlags[$channelGroupId] = $image;
}
public function render()
{
try
{
$out = '<div class="tsstatus">' . "\n";
$this->update();
if ($this->showNicknameBox) $out .= $this->renderNickNameBox();
$out .= '<div class="tsstatusServerName"><a href="javascript:tsstatusconnect(\'' . $this->_host . "','" . $this->_serverDatas["virtualserver_port"] . '\')"><img src="' . $this->imagePath . '16x16_server_green.png" />' . $this->_serverDatas["virtualserver_name"] . "</a></div>\n";
if(count($this->_channelDatas) > 0) $out .= $this->renderChannels(0);
$out .= "</div>\n";
}
catch (Exception $ex)
{
$this->disconnect();
$out = '<div class="tsstatuserror">' . $ex->getMessage() . '</div>';
}
return $out;
}
}
?>