Seite 1 von 1

Daten fürs Board 3 Portal aus ACP in Teamspeak Mod übernehme

Verfasst: 15.08.2009 08:57
von Ypselon
ich habe da mal 2 spezielle Probleme.

Ich möchte gerne einen Teamspeak Mod fürs Board3 einbauen, allerdings gestatten es mir alle Mods die ich gefunden habe nur die Box ein/auszublenden. Ich möchte nun aber direkt im ACP die Konfiguration der Server vornehmen. Also IP, Serverport, etc.

Der Einbau ins ACP fürs Portal habe ich bereits geschafft, dieses sieht nun so aus :

Includes/acp/acp_portal.php

Code: Alles auswählen

// <-- START TeamSpeakViewer MOD (1) -->
case 'teamspeak1':
$display_vars = array(
'title'	=> 'ACP_PORTAL_TEAMSPEAK1_SETTINGS',
'vars'	=> array(
'legend1'							=> 'ACP_PORTAL_TEAMSPEAK1_SETTINGS',
'portal_teamspeak1_enabled'			=> array('lang' => 'PORTAL_TEAMSPEAK1'					,	'validate' => 'bool',	 	'type' => 'radio:yes_no',	'explain' => true),
'portal_teamspeak1_height'			=> array('lang' => 'PORTAL_TEAMSPEAK1_HEIGHT'	,	'validate' => 'int'	, 'type' => 'text:3:3',		 'explain' => true),
'legend2'							=> 'ACP_PORTAL_TEAMSPEAK1_SETTINGSDATA',
'portal_teamspeak1_ip1'				=> array('lang' => 'PORTAL_TEAMSPEAK1_IP1'	,	'validate' => 'string', 'type' => 'text:15:15',	 'explain' => true),
'portal_teamspeak1_ip2'				=> array('lang' => 'PORTAL_TEAMSPEAK1_IP2'			,	'validate' => 'string', 'type' => 'text:15:15',	 'explain' => true),				
'portal_teamspeak1_queryport'		        => array('lang' => 'PORTAL_TEAMSPEAK1_QUERYPORT'			,	'validate' => 'string', 'type' => 'text:5:6',	 'explain' => true),	
'portal_teamspeak1_udpport'			=> array('lang' => 'PORTAL_TEAMSPEAK1_UDPPORT'			,	'validate' => 'string', 'type' => 'text:5:6',	 'explain' => true),	
'portal_teamspeak1_dorefresh'		        => array('lang' => 'PORTAL_TEAMSPEAK1_DOREFRESH'					 ,	'validate' => 'bool',	 'type' => 'radio:yes_no',	'explain' => true),
'portal_teamspeak1_refreshtime'		=> array('lang' => 'PORTAL_TEAMSPEAK1_REFRESHTIME'			,	'validate' => 'string', 'type' => 'text:3:3',	 'explain' => true),	
			)
				);
			break;
			// <-- END TeamSpeakViewer MOD -->
Das klappt einwandfrei, nun möchte ich gerne diese Variabeln übertragen. Dazu habe ich mir einen Teamspeak Viewer runtergeladen : http://www.kitnetwork.de/wbb/contents/d ... ak-viewer/ und ihn mit einer modifizierten PHPBB version kombiniert. Diese stammt von phpbbmagic und erlaubt es die CSS für das aussehen aus dem Styleordner zu laden. Dazu komme ich später.

Der Teamspeak Mod hat nun eine Config, diese sieht so aus :

Code: Alles auswählen

<?php
/*
 * Name      = TeamSpeak Viewer
 * Version   = 2.0
 * Datum     = 01.02.2006
 * Datei     = TSV_Config.php
 * * * * * * * * * * * * * * * * * * */

class tss2info {
var $TS_Version = "2.0";
//////////////////////////////////////////////////////////
////// TeamSpeak Einstellungen ///////////////////////////
//

var $sitetitle			= "TeamSpeak"; // SeitenTitle und Scriptversion
var $serverAddress   = "XXXXXX"; // Hier die TeamSpeak IP Adresse eintragen !!wichtig!! (Beispiel: 192.168.7.1)
var $serverQueryPort = "51241"; // TeamSpeak QueryPort.. Schau in die server.ini von TeamSpeak (Standard 51234)
var $serverUDPPort   = "10064"; // UDP Port für Teamspeak der auch hinter der IP Adresse genutzt wird (Standard 8767)
var $serverPasswort  = ""; // Serverpasswort das bei Serversettings eingestellt wird (wenn kein Passwort erteilt, dann leer lassen)
// (Passwort wird meistens bei Clanservern gebraucht)
//
//
//////////////////////////////////////////////////////////
////// Erweiterte Einstellungen //////////////////////////
//
var $tabellenbreite    = "150"; // Mindestbreite der Teamspeaktabelle (die einbindung mit einem IFRAME sollte 20px mehr betragen)
var $alternativer_nick = "GastNick"; // Alternativer Gastname
//
//
////// Aktivieren & Deaktivieren /////////////////////////
//
// 1 = aktiviert
// 0 = deaktiviert
//
//var $TS_subchannel_ausgabe     = 0;   // Sollen die Subchannels angezeigt werden? FUNKTION NOCH NICHT INTEGRIERT!!!
var $TS_channelflags_ausgabe   = 1;   // Sollen die Channelrechte angezeigt werden? (R,M,S,P etc.)
var $TS_userstatus_ausgabe     = 1;   // Soll der Status des Players angezeigt werden? (U,R,SA etc.)
var $TS_channel_anzeigen       = 1;   // Sollen die Channel angezeigt werden? (0 = nur Playerausgabe)
var $TS_leerchannel_anzeigen   = 1;   // Sollen die leeren Channel angezeigt werden?
var $TS_title_anzeigen         = 1;   // Soll der Title über den Channels sichtbar sein?
var $TS_overlib_mouseover      = 0;   // Soll der Mouseover Effekt vorhanden sein?
var $TS_refresh                = 1;   // Refreshen generell erlauben (inkl. Refreshlink)
var $TS_autorefresh            = 0;   // Autorefresh erlauben oder nicht
var $TS_autorefresh_zeit       = 10;  // Zeit in Sekunden angeben (Funktioniert nur, wenn autorefresh aktiviert wurde)
var $TS_blendtrans             = 1;   // Überblendeffekt an oder aus?
//
// Debugmodus
// (u.a. kann damit die Channelid angezeigt werden sollte sie gebraucht werden bei dem verstecken einzelner Channels)
var $TS_debug_modus            = 0;   // Debugmodus zur Fehlersuche an oder aus? (es werden sämtliche Variablen ausgegeben)
//
var $TS_hide_channels          = array(); // Welche Channels sollen versteckt werden?
//
// Beispiel: array(CHANNELID,CHANNELID,CHANNELID,CHANNELID)
//
//
//////////////////////////////////////////////////////////
////// PHPKIT Einstellungen //////////////////////////////
//
var $phpkit_config     = "../admin/config/config.php"; // Ort ab dem TeamSpeak Viewer Ordner wo die config.php des PHPKIT's liegt.
var $phpkit_gast_nick  = "PHPKIT_GastNick"; // Name des Gastes der durch das PHPKIT connectet
var $include_phpkit    = 0; // 1 = aktiv ; 0 = inaktiv
//
//////////////////////////////////////////////////////////









/*******************************************************/
/* Ab hier darf >>> KEIN <<< Text mehr geändert werden */
/*******************************************************/

//internal
var $socket;

// external
var $serverStatus = "offline";
var $playerList = array();
var $channelList = array();

// opens a connection to the teamspeak server
function getSocket($host, $port, $errno, $errstr, $timeout) {
  unset($socket);
  $attempts = 1;
  while($attempts <= 1 and !$socket) {
	$attempts++;
    $socket = @fsockopen($host, $port, $errno, $errstr, $timeout);
    $this->errno = $errno;
    $this->errstr = $errstr;
    if($socket and fread($socket, 4) == "[TS]") {
      fgets($socket, 128);
      return $socket;
	}
  }// end while
  return false;
}// end function getSocket(...)

// sends a query to the teamspeak server
function sendQuery($socket, $query) {
  fputs($socket, $query."\n");
}// end function sendQuery(...)

// answer OK?
function getOK($socket) {
  $result = fread($socket, 2);
  fgets($socket, 128);
  return($result == "OK");
}// end function getOK(...)

// closes the connection to the teamspeak server
function closeSocket($socket) {
  fputs($socket, "quit");
  fclose($socket);
}// end function closeSocket(...)

// retrieves the next argument in a tabulator-separated string (PHP scanf function bug workaround)
function getNext($evalString) {
  $pos = strpos($evalString, "\t");
  if(is_integer($pos)) {
    return substr($evalString, 0, $pos);
  } else {
    return $evalString;
  }// end if
}// end function getNext($evalString);

// removes the first argument in a tabulator-separated string (PHP scanf function bug workaround)
function chopNext($evalString) {
  $pos = strpos($evalString, "\t");
  if(is_integer($pos)) {
    return substr($evalString, $pos + 1);
  } else {
    return "";
  }// end if
}// end function chopNext($evalString)

// strips the quotes around a string
function stripQuotes($evalString) {
  if(strpos($evalString, '"') == 0) $evalString = substr($evalString, 1, strlen($evalString) - 1);
  if(strrpos($evalString, '"') == strlen($evalString) - 1) $evalString = substr($evalString, 0, strlen($evalString) - 1);

  return htmlentities($evalString);
}// end function stripQuotes($evalString)

// returns the codec name
function getVerboseCodec($codec) {
  if($codec == 0) {
    $codec = "CELP 5.1 Kbit";
  } elseif($codec == 1) {
    $codec = "CELP 6.3 Kbit";
  } elseif($codec == 2) {
    $codec = "GSM 14.8 Kbit";
  } elseif($codec == 3) {
    $codec = "GSM 16.4 Kbit";
  } elseif($codec == 4) {
    $codec = "CELP Windows 5.2 Kbit";
  } elseif($codec == 5) {
    $codec = "Speex 3.4 Kbit";
  } elseif($codec == 6) {
    $codec = "Speex 5.2 Kbit";
  } elseif($codec == 7) {
    $codec = "Speex 7.2 Kbit";
  } elseif($codec == 8) {
    $codec = "Speex 9.3 Kbit";
  } elseif($codec == 9) {
    $codec = "Speex 12.3 Kbit";
  } elseif($codec == 10) {
    $codec = "Speex 16.3 Kbit";
  } elseif($codec == 11) {
    $codec = "Speex 19.5 Kbit";
  } elseif($codec == 12) {
    $codec = "Speex 25.9 Kbit";
  } else {
    $codec = "unknown (".$codec.")";
  }// end if
  return $codec;
}// end function getVerboseCodec($codec);

function getInfo() {
// ---=== main program ===---

// establish connection to teamspeak server
$this->socket = $this->getSocket($this->serverAddress, $this->serverQueryPort, $errno, $errstr, 0.3);
if($this->socket == false) {
  if($this->TS_debug_modus == 1) {
    echo "Es wird kein Server gefunden.<br><b>Scriptabbruch:</b> Der folgende Query Port ist falsch oder gesperrt: ".$this->serverQueryPort.""; // No Server
    DIE;
  } else {
    return;
  }
} else {
  $this->serverStatus = "online";

  // select the one and only running server on port 8767
  $this->sendQuery($this->socket, "sel ".$this->serverUDPPort);

  // retrieve answer "OK"
  if(!$this->getOK($this->socket)) {
    if($this->TS_debug_modus == 1) {
      echo "Der Server antwortete nach der letzten Anfrage nicht mit OK.<br><b>Scriptabbruch:</b> Der folgende UPD Port ist falsch oder gesperrt: ".$this->serverUDPPort.""; // Server didn't answer \"OK\" after last command. Aborting.
      DIE;
    } else {
      return;
    }
  }// end if
############################################################################################

  // retrieve player list
  $this->sendQuery($this->socket,"pl");

  // read player info
  $this->playerList = array();
  do {
    $playerinfo = fscanf($this->socket, "%s %d %d %d %d %d %d %d %d %d %d %d %d %s %[^\t]");
    list($playerid, $channelid, $receivedpackets, $receivedbytes, $sentpackets, $sentbytes, $paketlost, $pingtime, $totaltime, $idletime, $privileg, $userstatus, $attribute, $s, $playername) = $playerinfo;
    if($playerid != "OK") {
      $this->playerList[$playerid] = array(
      "playerid" => $playerid,
      "channelid" => $channelid,
      "receivedpackets" => $receivedpackets,
      "receivedbytes" => $receivedbytes,
      "sentpackets" => $sentpackets,
      "sentbytes" => $sentbytes,
      "paketlost" => $paketlost / 100,
      "pingtime" => $pingtime,
      "totaltime" => $totaltime,
      "idletime" => $idletime,
      "privileg" => $privileg,
      "userstatus" => $userstatus,
      "attribute" => $attribute,
      "s" => $this->stripQuotes($s),
      "playername" => $this->stripQuotes($playername));
    }// end if
  } while($playerid != "OK");


  // retrieve channel list
  $this->sendQuery($this->socket,"cl");

  // read channel info
  $this->channelList = array();
  do {
    $channelinfo = "";
    do {
      $input = fread($this->socket, 1);
      if($input != "\n" && $input != "\r") $channelinfo .= $input;
    } while($input != "\n");
    $channelid         = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelcodec      = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelparent     = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelorder      = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelmaxplayers = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelname       = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelflags      = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channelpasswort   = $this->getNext($channelinfo); $channelinfo = $this->chopNext($channelinfo);
    $channeltopic      = $this->getNext($channelinfo);

    if($channelid != "OK") {
      
	  // determine number of players in channel
      $playercount = 0;
      foreach($this->playerList as $playerInfo) {
        if($playerInfo['channelid'] == $channelid) $playercount++;
      }// end foreach

      $this->channelList[$channelid] = array(
      "channelid"             => $channelid,
      "channelcodec"          => $this->getVerboseCodec($channelcodec),
      "channelparent"         => $channelparent,
      "channelorder"          => $channelorder,
      "channelmaxplayers"     => $channelmaxplayers,
      "channelname"           => $this->stripQuotes($channelname),
      "channelflags"          => $channelflags,
      "channelpasswort"       => $channelpasswort,
      "channeltopic"          => $this->stripQuotes($channeltopic),
      "channelcurrentplayers" => $playercount);
    }// end if
  } while($channelid != "OK");

  // close connection to teamspeak server
  $this->closeSocket($this->socket);

  }// end getInfo()
}// class tss2info
}
$tss2info = new tss2info;
?>
Nur wie kann ich hier nun die Variabeln aus dem ACP nehmen ? Ich möchte gerne $serverAddress mit dem Inhalt aus 'portal_teamspeak1_ip1' füllen. Leider führten alle Versuche zu Fehlermeldungen :(
Als Alternative müsste man die Variabeln ja auch hier definieren können, dieses ist die Hauptdatei des TS

TS_Viewer.php

Code: Alles auswählen

<?php
/*
 * Name      = TeamSpeak Viewer
 * Version   = 2.0
 * Datum     = 01.02.2006
 * Datei     = TS_Viewer.php
 * 
 * Copyright = Dooki
 * Homepage  = http://www.php-gfx.net
 * E-Mail    = dooki@php-gfx.net
 * * * * * * * * * * * * * * * * * * */

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../../';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('');

require("TSV_Config.php");
$tss2info->getInfo();
include("TSV_Functions.php");


if($tss2info->include_phpkit == 1) {
  if(!@include($tss2info->phpkit_config)) $phpkiterror = "Die Konfigurationsdatei (".$tss2info->phpkit_config.") des PHPKIT 1.6.03 konnte nicht gefunden werden!<br>Ändern sie den Pfad \"\$phpkit_config\" oder deaktivieren sie \"\$include_phpkit\" in den Einstellungen!";
  else unset($phpkiterror);
  if(intval($USER['id']) > 0) {
    $tsv_username = htmlentities($USER['nick']);
  } else {
    $tsv_username = $tss2info->phpkit_gast_nick;
  }
} else {
  $tsv_username = $tss2info->alternativer_nick;
}


$tsv_array_1 = array(" ","-","(",")","[","]","{","}","&"); // Das wird gesucht..
$tsv_array_2 = array("_","_","","","","","","",""); // ..und ersetzt mit diesem
$tsv_count = count($tsv_array_1);
for($x=0;$x<$tsv_count;$x++){
  $tsv_username = trim(str_replace($tsv_array_1[$x],$tsv_array_2[$x],$tsv_username));
}
$tsv_username = trim($tsv_username);

$counter = 0;
$channelcounter = count($tss2info->channelList) - 1;

//---> Channel Sortierung <---\\ Anfang
unset($s1);
unset($s2);
unset($v);
$s1 = array();
$s2 = array();
foreach($tss2info->channelList as $v) $s1[] = $v['channelorder'];    // Sortierung nach Order
foreach($tss2info->channelList as $v) $s2[] = $v['channelname'];    // Wenn Order gleich Sortierung nach Name
array_multisort($s1, SORT_ASC, $s2, SORT_ASC, $tss2info->channelList); // ASC = auf-, DESC = absteigend
//---> Channel Sortierung <---\\ Ende

//---> Subchannel nach Player durchsuchen <---\\ Anfang
$tss2info_channellist = $tss2info->channelList;
for($i=0;$i<count($tss2info_channellist);$i++) {
  if(intval($tss2info_channellist[$i]['channelparent']) > 0 AND intval($tss2info_channellist[$i]['channelcurrentplayers']) > 0) {
    $subchannels[$tss2info_channellist[$i]['channelparent']] = 1;
  }
}
//---> Subchannel nach Player durchsuchen <---\\ Ende

//---> ChannelList <---\\ Anfang
foreach($tss2info->channelList as $channelInfo) {

  if($channelInfo['channelid'] != "id" AND !in_array($channelInfo['channelid'],$tss2info->TS_hide_channels)) {

    if($channelInfo['channelparent'] < "0") {

      //---> Channelanzeigen <---\\ Anfang
      if($tss2info->TS_channel_anzeigen == 1 AND ($tss2info->TS_leerchannel_anzeigen == 1 OR ($tss2info->TS_leerchannel_anzeigen == 0 AND (trim($channelInfo['channelcurrentplayers']) > 0 OR (intval($subchannels[$channelInfo['channelid']]) == 1))))) {

        //---> Mouseover <---\\ Anfang
        $channel_mouseover1 = "Join als: ".$tsv_username." | Channelname: ".$channelInfo['channelname']." | Topic: ".$channelInfo['channeltopic']." | Maximale User: ".$channelInfo['channelmaxplayers']." | Derzeitige User: ".$channelInfo['channelcurrentplayers']." | Codec: ".$channelInfo['channelcodec']."";
        $channel_mouseover2 = "Kein Joinen möglich | Channelname: ".$channelInfo['channelname']." | Topic: ".$channelInfo['channeltopic']." | Maximale User: ".$channelInfo['channelmaxplayers']." | Derzeitige User: ".$channelInfo['channelcurrentplayers']." | Codec: ".$channelInfo['channelcodec']."";
        $channel_mouseover3 = "<b>Join als:</b> ".$tsv_username."<br><br><b>Channelname:</b><br>".$channelInfo['channelname']."<br><br><b>Topic:</b><br>".$channelInfo['channeltopic']."<br><br><b>Maximale User:</b> ".$channelInfo['channelmaxplayers']."<br><b>Derzeitige User:</b> ".$channelInfo['channelcurrentplayers']."<br><br><b>Codec:</b><br>".$channelInfo['channelcodec']."";
        $channel_mouseover4 = "<b>Kein Joinen möglich</b><br><br><b>Channelname:</b><br>".$channelInfo['channelname']."<br><br><b>Topic:</b><br>".$channelInfo['channeltopic']."<br><br><b>Maximale User:</b> ".$channelInfo['channelmaxplayers']."<br><b>Derzeitige User:</b> ".$channelInfo['channelcurrentplayers']."<br><br><b>Codec:</b><br>".$channelInfo['channelcodec']."";
        //---> Mouseover <---\\ Ende
  
        //---> Passwortabfrage <---\\ Anfang
        if($channelInfo['channelpasswort'] == "0") {
          if($tss2info->TS_overlib_mouseover == 1) $channel_mouseover3 = "onmouseover=\"return overlib('".str_replace("'","\'",$channel_mouseover3)."', WIDTH, 200);\"  onmouseout=\"return nd();\"";
          else $channel_mouseover3 = "title=\"".$channel_mouseover1."\"";
          $channellink = "<a class=\"channellink\" href=\"teamspeak://".$tss2info->serverAddress.":".$tss2info->serverUDPPort."/?channel=".rawurlencode($channelInfo['channelname'])."?password=".$tss2info->serverPasswort."?nickname=".rawurlencode($tsv_username)."\" ".$channel_mouseover3.">".$channelInfo['channelname']."</a>";
        } else {
          if($tss2info->TS_overlib_mouseover == 1) $channel_mouseover4 = "style=\"cursor: help;\" onmouseover=\"return overlib('".str_replace("'","\'",$channel_mouseover4)."', WIDTH, 200);\"  onmouseout=\"return nd();\"";
          else $channel_mouseover4 = "title=\"".$channel_mouseover2."\"";
          $channellink = "<span ".$channel_mouseover4.">".$channelInfo['channelname']."</span>";
        }
        //---> Passwortabfrage <---\\ Ende
  
        //---> Channelflags <---\\ Anfang
        if($tss2info->TS_channelflags_ausgabe == 1) $channellink .= ' ('.TS_channelflags($channelInfo['channelflags']).')';
        //---> Channelflags <---\\ Ende

        //---> Channel <---\\ Anfang
        $ts_viewer_ausgabe .= '
        <tr>
          <td valign="top">
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td class="channel" width="25" valign="top" nowrap><img width="5" height="13" src="images/blank.gif" border="0" alt=""><img src="images/channel.gif" width="20" height="13" border="0" alt=""></td>
                <td class="channel" width="100%" valign="top" nowrap>&nbsp;'.$channellink.'</td>';

        //---> Debug Modus <---\\ Anfang
        if($tss2info->TS_debug_modus == 1) {
          $ts_viewer_ausgabe .= "\n                <td class=\"player\" width=\"1500\" valign=\"top\" nowrap>&nbsp;&nbsp;<b>channelid:</b> ".$channelInfo['channelid']."&nbsp;&nbsp;<b>channelcodec:</b> ".$channelInfo['channelcodec']."&nbsp;&nbsp;<b>channelparent:</b> ".$channelInfo['channelparent']."&nbsp;&nbsp;<b>channelorder:</b> ".$channelInfo['channelorder']."&nbsp;&nbsp;<b>channelmaxplayers:</b> ".$channelInfo['channelmaxplayers']."&nbsp;&nbsp;<b>channelname:</b> ".$channelInfo['channelname']."&nbsp;&nbsp;<b>channelflags:</b> ".$channelInfo['channelflags']."&nbsp;&nbsp;<b>channelpasswort:</b> ".$channelInfo['channelpasswort']."&nbsp;&nbsp;<b>channeltopic:</b> ".$channelInfo['channeltopic']."&nbsp;&nbsp;<b>channelcurrentplayers:</b> ".$channelInfo['channelcurrentplayers']."</td>";
        }
        //---> Debug Modus <---\\ Ende

        $ts_viewer_ausgabe .= '
              </tr>
            </table>
          </td>
        </tr>';
        //---> Channel <---\\ Ende
      }
      //---> Channelanzeigen <---\\ Ende

      $counter_player = 0; // Playercounter beginnen

      //---> Player Sortierung <---\\ Anfang
      unset($s1);
      unset($s2);
      unset($v);
      $s1 = array();
      $s2 = array();
      foreach($tss2info->playerList as $v) $s1[] = $v['userstatus'];    // Sortierung nach Order
      foreach($tss2info->playerList as $v) $s2[] = $v['playername'];    // Wenn Order gleich Sortierung nach Name
      array_multisort($s1, SORT_DESC, $s2, SORT_ASC, $tss2info->playerList); // ASC = auf-, DESC = absteigend
      //---> Player Sortierung <---\\ Ende

      //---> PlayerList <---\\ Anfang
      foreach($tss2info->playerList as $playerInfo) {
        if($playerInfo['channelid'] == $channelInfo['channelid']) {
          $playercounter1 = $counter_player+1;
          $playercounter2 = $channelInfo['channelcurrentplayers'];
          $player_mouse_over1 = "".$playerInfo['playername']." | Online seit: ".TS_totaltime($playerInfo['totaltime'])." | Idle seit: ".TS_idletime($playerInfo['idletime'])." | Ping: ".$playerInfo['pingtime']." ms";
          $player_mouse_over2 = "<b>".$playerInfo['playername']."</b><br><br><b>Online seit:</b><br>".TS_totaltime($playerInfo['totaltime'])."<br><br><b>Idle seit:</b><br>".TS_idletime($playerInfo['idletime'])."<br><br><b>Ping:</b> ".$playerInfo['pingtime']." ms";
          if($tss2info->TS_overlib_mouseover == 1) $player_mouse_over = "style=\"cursor: help;\" onmouseover=\"return overlib('".str_replace("'","\'",$player_mouse_over2)."', WIDTH, 150);\" onmouseout=\"return nd();\"";
          else $player_mouse_over = "title=\"".$player_mouse_over1."\"";

          //---> Player <---\\ Anfang
          $ts_viewer_ausgabe .= '
        <tr>
          <td>
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>';
              unset($userstatus);
              if($tss2info->TS_userstatus_ausgabe == 1) $userstatus = ' ('.TS_userstatus($playerInfo['userstatus']).TS_privileg($playerInfo['privileg'],$playerInfo['attribute']).')';
              if($tss2info->TS_channel_anzeigen == 1) {
              $ts_viewer_ausgabe .= '
                <td width="0" nowrap><img width="5" height="16" src="images/blank.gif" border="0" alt=""></td>';
              } else {
              $player_without_channel[] = $playerInfo;
              }
              $ts_viewer_ausgabe .= '
                <td class="player" width="100%">&nbsp;<span '.$player_mouse_over.'>'.$playerInfo['playername'].$userstatus.'</span></td>
              </tr>
            </table>
          </td>
        </tr>';
          //---> Player <---\\ Ende

          $counter_player++; // Playercounter hochzählen

        }
      }
      //---> PlayerList <---\\ Ende

      //---> Subchannel Sortierung <---\\ Anfang
      unset($s1);
      unset($s2);
      $s1 = array();
      $s2 = array();
      foreach($tss2info->channelList as $v) $s1[] = $v['channelorder'];    // Sortierung nach Order
      foreach($tss2info->channelList as $v) $s2[] = $v['channelname'];    // Wenn Order gleich Sortierung nach Name
      array_multisort($s1, SORT_ASC, $s2, SORT_ASC, $tss2info->channelList); // ASC = auf-, DESC = absteigend
      unset($v);
      //---> Subchannel Sortierung <---\\ Ende

      //---> SubchannelList <---\\ Anfang
      foreach($tss2info->channelList as $subchannelInfo) {
        if($subchannelInfo['channelparent'] == $channelInfo['channelid'] AND !in_array($subchannelInfo['channelid'],$tss2info->TS_hide_channels) AND ($tss2info->TS_leerchannel_anzeigen == 1 OR ($tss2info->TS_leerchannel_anzeigen == 0 AND trim($subchannelInfo['channelcurrentplayers']) > 0))) {
          if($tss2info->TS_channel_anzeigen == 1) {
            $subchannel_mouseover1 = "Join als: ".$tsv_username." | Channelname: ".$subchannelInfo['channelname']." | Subchannel von: ".$channelInfo['channelname']." | Topic: ".$subchannelInfo['channeltopic']." | Maximale User: ".$subchannelInfo['channelmaxplayers']." | Derzeitige User: ".$subchannelInfo['channelcurrentplayers']." | Codec: ".$subchannelInfo['channelcodec']."";
            $subchannel_mouseover2 = "Kein Joinen möglich | Channelname: ".$subchannelInfo['channelname']." | Subchannel von: ".$channelInfo['channelname']." | Topic: ".$subchannelInfo['channeltopic']." | Maximale User: ".$subchannelInfo['channelmaxplayers']." | Derzeitige User: ".$subchannelInfo['channelcurrentplayers']." | Codec: ".$subchannelInfo['channelcodec']."";
            $subchannel_mouseover3 = "<b>Join als:</b> ".$tsv_username."<br><br><b>Channelname:</b><br>".$subchannelInfo['channelname']."<br><b>Subchannel von:</b><br>".$channelInfo['channelname']."<br><br><b>Topic:</b><br>".$subchannelInfo['channeltopic']."<br><br><b>Maximale User:</b> ".$subchannelInfo['channelmaxplayers']."<br><b>Derzeitige User:</b> ".$subchannelInfo['channelcurrentplayers']."<br><br><b>Codec:</b><br>".$subchannelInfo['channelcodec']."";
            $subchannel_mouseover4 = "<b>Kein Joinen möglich</b><br><br><b>Channelname:</b><br>".$subchannelInfo['channelname']."<br><b>Subchannel von:</b><br>".$channelInfo['channelname']."<br><br><b>Topic:</b><br>".$subchannelInfo['channeltopic']."<br><br><b>Maximale User:</b> ".$subchannelInfo['channelmaxplayers']."<br><b>Derzeitige User:</b> ".$subchannelInfo['channelcurrentplayers']."<br><br><b>Codec:</b><br>".$subchannelInfo['channelcodec']."";
            if($channelInfo['channelpasswort'] == "0") {
              if($tss2info->TS_overlib_mouseover == 1) $subchannel_mouseover3 = "onmouseover=\"return overlib('".str_replace("'","\'",$subchannel_mouseover3)."', WIDTH, 200);\"  onmouseout=\"return nd();\"";
              else $subchannel_mouseover3 = "title=\"".$channel_mouseover1."\"";
              $subchannellink = "<a class=\"channellink\" href=\"teamspeak://".$tss2info->serverAddress.":".$tss2info->serverUDPPort."/?channel=".rawurlencode($subchannelInfo['channelname'])."?password=".$tss2info->serverPasswort."?nickname=".rawurlencode($tsv_username)."\" ".$subchannel_mouseover3.">".$subchannelInfo['channelname']."</a>";
            } else {
              if($tss2info->TS_overlib_mouseover == 1) $subchannel_mouseover4 = "style=\"cursor: help;\" onmouseover=\"return overlib('".str_replace("'","\'",$subchannel_mouseover4)."', WIDTH, 200);\"  onmouseout=\"return nd();\"";
              else $subchannel_mouseover4 = "title=\"".$channel_mouseover2."\"";
              $subchannellink = "<span ".$subchannel_mouseover4.">".$subchannelInfo['channelname']."</span>";
            }
            //---> Channel <---\\ Anfang
            $ts_viewer_ausgabe .= '
        <tr>
          <td valign="top">
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td class="channel" width="40" valign="top" nowrap><img width="5" height="13" src="images/blank.gif" border="0" alt=""><img width="15" height="13" src="images/blank.gif" border="0" alt=""><img src="images/channel.gif" width="20" height="13" border="0" alt=""></td>
                <td class="channel" width="100%" valign="top" nowrap>&nbsp;'.$subchannellink.'</td>';
            //---> Debug Modus <---\\ Anfang
            if($tss2info->TS_debug_modus == 1) {
              $ts_viewer_ausgabe .= "\n                <td class=\"player\" width=\"1500\" valign=\"top\" nowrap>&nbsp;&nbsp;<b>channelid:</b> ".$subchannelInfo['channelid']."&nbsp;&nbsp;<b>channelcodec:</b> ".$subchannelInfo['channelcodec']."&nbsp;&nbsp;<b>channelparent:</b> ".$subchannelInfo['channelparent']."&nbsp;&nbsp;<b>channelorder:</b> ".$subchannelInfo['channelorder']."&nbsp;&nbsp;<b>channelmaxplayers:</b> ".$subchannelInfo['channelmaxplayers']."&nbsp;&nbsp;<b>channelname:</b> ".$subchannelInfo['channelname']."&nbsp;&nbsp;<b>channelflags:</b> ".$subchannelInfo['channelflags']."&nbsp;&nbsp;<b>channelpasswort:</b> ".$subchannelInfo['channelpasswort']."&nbsp;&nbsp;<b>channeltopic:</b> ".$subchannelInfo['channeltopic']."&nbsp;&nbsp;<b>channelcurrentplayers:</b> ".$subchannelInfo['channelcurrentplayers']."</td>";
            }
            //---> Debug Modus <---\\ Ende
            $ts_viewer_ausgabe .= '
              </tr>
            </table>
          </td>
        </tr>';
            //---> Channel <---\\ Ende
          }
          $counter_player = 0;

          //---> Sortierung <---\\ Anfang
          unset($s1);
          unset($s2);
          unset($v);
          $s1 = array();
          $s2 = array();
          foreach($tss2info->playerList as $v) $s1[] = $v['userstatus'];    // Sortierung nach Order
          foreach($tss2info->playerList as $v) $s2[] = $v['playername'];    // Wenn Order gleich Sortierung nach Name
          array_multisort($s1, SORT_DESC, $s2, SORT_ASC, $tss2info->playerList); // ASC = auf-, DESC = absteigend
          //---> Sortierung <---\\ Ende

          //---> SubPlayerList <---\\ Anfang
          foreach($tss2info->playerList as $playerInfo) {
            if($playerInfo['channelid'] == $subchannelInfo['channelid'] && $subchannelInfo['channelparent'] == $channelInfo['channelid']) {
              $playercounter1 = $counter_player+1;
              $playercounter2 = $subchannelInfo['channelcurrentplayers'];
              $player_mouse_over1 = "".$playerInfo['playername']." | Online seit: ".TS_totaltime($playerInfo['totaltime'])." | Idle seit: ".TS_idletime($playerInfo['idletime'])." | Ping: ".$playerInfo['pingtime']." ms";
              $player_mouse_over2 = "<b>".$playerInfo['playername']."</b><br><br><b>Online seit:</b><br>".TS_totaltime($playerInfo['totaltime'])."<br><br><b>Idle seit:</b><br>".TS_idletime($playerInfo['idletime'])."<br><br><b>Ping:</b> ".$playerInfo['pingtime']." ms";
              if($tss2info->TS_overlib_mouseover == 1) $player_mouse_over = "style=\"cursor: help;\" onmouseover=\"return overlib('".str_replace("'","\'",$player_mouse_over2)."', WIDTH, 150);\" onmouseout=\"return nd();\"";
              else $player_mouse_over = "title=\"".$player_mouse_over1."\"";
              //---> SubPlayer <---\\ Anfang
              $ts_viewer_ausgabe .= '
        <tr>
          <td>
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>';
              unset($subuserstatus);
              if($tss2info->TS_userstatus_ausgabe == 1) $subuserstatus = ' ('.TS_userstatus($playerInfo['userstatus']).TS_privileg($playerInfo['privileg'],$playerInfo['attribute']).')';
              if($tss2info->TS_channel_anzeigen == 1) {
              $ts_viewer_ausgabe .= '
                <td class="player" width="0" nowrap><img width="5" height="16" src="images/blank.gif" border="0" alt=""><img src="images/blank.gif" width="15" height="16" border="0" alt=""></td>';
              } else {
              $player_without_channel[] = $playerInfo;
              }
              $ts_viewer_ausgabe .= '
                <td class="player" width="100%">&nbsp;<span '.$player_mouse_over.'>'.$playerInfo['playername'].$subuserstatus.'</span></td>
              </tr>
            </table>
          </td>
        </tr>';
              //---> SubPlayer <---\\ Ende
              $counter_player++; // Playercounter hochzählen
            }
          }
          //---> SubPlayerList <---\\ Ende

        }
      }
      //---> SubchannelList <---\\ Ende

      $counter++; // Channelcounter hochzählen

    }
  }
  $counter++; // Channelcounter hochzählen
}
//---> ChannelList <---\\ Ende

//---> OFFLINE <---\\ Anfang
if($counter == 0) {
  $ts_viewer_ausgabe .= '
        <tr>
          <td>
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td class="offline" width="110" align="center"><font class="heads"><b>Offline</b></font></td>
              </tr>
            </table>
          </td>
        </tr>';
}
//---> OFFLINE <---\\ Ende

if(is_array($player_without_channel)) {
  unset($ts_viewer_ausgabe);

  //---> Sortierung <---\\ Anfang
  unset($s1);
  unset($s2);
  unset($v);
  $s1 = array();
  $s2 = array();
  foreach($player_without_channel as $v) $s1[] = $v['userstatus'];    // Sortierung nach Order
  foreach($player_without_channel as $v) $s2[] = $v['playername'];    // Wenn Order gleich Sortierung nach Name
  array_multisort($s1, SORT_DESC, $s2, SORT_ASC, $player_without_channel); // ASC = auf-, DESC = absteigend
  //---> Sortierung <---\\ Ende

  //---> PlayerList <---\\ Anfang
  foreach($player_without_channel as $playerInfo) {
    $player_mouse_over1 = "".$playerInfo['playername']." | Online seit: ".TS_totaltime($playerInfo['totaltime'])." | Idle seit: ".TS_idletime($playerInfo['idletime'])." | Ping: ".$playerInfo['pingtime']." ms";
    $player_mouse_over2 = "<b>".$playerInfo['playername']."</b><br><br><b>Online seit:</b><br>".TS_totaltime($playerInfo['totaltime'])."<br><br><b>Idle seit:</b><br>".TS_idletime($playerInfo['idletime'])."<br><br><b>Ping:</b> ".$playerInfo['pingtime']." ms";
    if($tss2info->TS_overlib_mouseover == 1) $player_mouse_over = "style=\"cursor: help;\" onmouseover=\"return overlib('".str_replace("'","\'",$player_mouse_over2)."', WIDTH, 150);\" onmouseout=\"return nd();\"";
    else $player_mouse_over = "title=\"".$player_mouse_over1."\"";
    unset($userstatus);
    if($tss2info->TS_userstatus_ausgabe == 1) $userstatus = ' ('.TS_userstatus($playerInfo['userstatus']).TS_privileg($playerInfo['privileg'],$playerInfo['attribute']).')';
    $ts_viewer_ausgabe .= '
        <tr>
          <td>
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td class="player" width="20" nowrap><img src="images/'.TS_attribute($playerInfo['attribute']).'" width="20" height="16" border="0" alt=""></td>
                <td class="player" width="100%">&nbsp;<span '.$player_mouse_over.'>'.$playerInfo['playername'].$userstatus.'</span></td>
              </tr>
            </table>
          </td>
        </tr>';
  }
  //---> PlayerList <---\\ Anfang
}


//---> Start <---\\ Anfang
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>'.$tss2info->sitetitle.'</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta http-equiv="content-language" content="de">';
if($tss2info->TS_blendtrans == "1") {
  echo '
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5)">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=0.5)">';
}
if($tss2info->TS_refresh == 1 AND $tss2info->TS_autorefresh == 1 AND strtolower($_GET['refresh']) == "auto") {
  echo '
<meta http-equiv="refresh" content="'.$tss2info->TS_autorefresh_zeit.'; URL=TS_Viewer.php?refresh=auto">';
}
echo '
    <link rel="stylesheet" type="text/css" href="' . "{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme' . '/tsviewer.css">';
if($tss2info->TS_overlib_mouseover == 1) {
  echo '
<!-- overLIB (c) Erik Bosrup -->
<script type="text/javascript" src="overlib.js"></script>
<!-- overLIB (c) Erik Bosrup -->';
}
echo '
</head>
<body>
'.$phpkiterror.'';
if($tss2info->TS_overlib_mouseover == 1) {
  echo '
<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>';
}
echo '
<table border="0" width="100%" cellpadding="1" cellspacing="4">
  <tr>
    <td class="odd" align="left" valign="top" width="'.$tss2info->tabellenbreite.'" nowrap>
      <table border="0" width="100%" cellpadding="0" cellspacing="2">';
if($tss2info->TS_refresh == 1) {
  echo '
        <tr>
          <td>
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>';
  if((strtolower($_GET['refresh']) != "auto") OR ($tss2info->TS_autorefresh != 1 AND strtolower($_GET['refresh']) == "auto")) {
    echo '
                <td class="refresh" width="50%" nowrap><a class="refresh" href="TS_Viewer.php?refresh=">refresh</a></td>';
  }
  if($tss2info->TS_autorefresh == 1) {
    if(strtolower($_GET['refresh']) == "auto") {
      echo '
                <td class="refresh" align="right" nowrap><a class="refresh" href="TS_Viewer.php?refresh=">autorefresh deaktivieren</a></td>';
    } else {
      echo '
                <td class="refresh" align="right" width="50%" nowrap><a class="refresh" href="TS_Viewer.php?refresh=auto">autorefresh</a></td>';
    }
  }
  echo '
              </tr>
            </table>
          </td>
        </tr>';
}
if($tss2info->TS_title_anzeigen == 1) {
  echo '
        <tr>
          <td>
            <table border="0" width="100%" cellpadding="0" cellspacing="0">
              <tr>
                <td class="teamspeak" width="33" nowrap><img src="images/teamspeak.gif" width="33"height="18" border="0" alt=""></td><td class="teamspeak" width="100%">'.$tss2info->sitetitle.'</td>
              </tr>
            </table>
          </td>
        </tr>';
}
echo ''.$ts_viewer_ausgabe.'
      </table>
    </td>
  </tr>
  <tr>
    <td class="created"><br>TS-V '.$tss2info->TS_Version.' by <a class="created" href="http://www.php-gfx.net" target="_blank">php-gfx.net</a></td>
  </tr>
</table>
</body>
</html>';
//---> Stop <---\\ Ende
?>
Hier wurden legentlich zum Original ein paar Dinge aus dem PHPBB Forum eingtragen. Ansonsten sind die Dateien fast gleich.

Weiss jemand wie ich nun die ACP Daten übernehmen könnte ?

Nun zu meinem 2.ten Problem

In der TS_Viewer.php wird die CSS folgendermassen aufgerufen :

Code: Alles auswählen

echo '
    <link rel="stylesheet" type="text/css" href="' . "{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme' . '/tsviewer.css">';
Das klappt auch , aber ich habe die Styleswitcherbox aktiviert. Gibt es eine Möglichkeit , das der Styleswitch der ja temporär erfolgt, mit einbezogen wird ? Also Lösung müsste man den Stylesheet Pfad in der html Datei definieren und dann per Variable oder so in die TS_Viewer.php eintragen, nur wie ?

Re: Daten fürs Board 3 Portal aus ACP in Teamspeak Mod übernehme

Verfasst: 15.08.2009 10:22
von marc1706
Vielleicht hilft dir das ganze weiter:

Code: Alles auswählen

/*
 * Name      = TeamSpeak Viewer
 * Version   = 2.0
 * Datum     = 01.02.2006
 * Datei     = TSV_Config.php
 * * * * * * * * * * * * * * * * * * */
define('IN_PHPBB', true);
define('IN_PORTAL', true);

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../../../../../../';

$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'portal/includes/functions.'.$phpEx);

error_reporting(0);

$portal_config = obtain_portal_config();
 
class tss2info {
var $TS_Version = "2.0";
//////////////////////////////////////////////////////////
////// TeamSpeak Einstellungen ///////////////////////////
//
var $sitetitle       = "Title"; // SeitenTitle und Scriptversion
var $serverAddress   = ""; // Hier die TeamSpeak IP Adresse eintragen !!wichtig!! (Beispiel: 192.168.7.1)
var $serverQueryPort = ""; // TeamSpeak QueryPort.. Schau in die server.ini von TeamSpeak (Standard 51234)
var $serverUDPPort   = ""; // UDP Port für Teamspeak der auch hinter der IP Adresse genutzt wird (Standard 8767)
var $serverPasswort  = ""; // Serverpasswort das bei Serversettings eingestellt wird (wenn kein Passwort erteilt, dann leer lassen)

function get_config()
{
    $portal_config = obtain_portal_config();
    
    $this->serverAddress   = $portal_config['portal_teamspeak_address']; // Hier die TeamSpeak IP Adresse eintragen !!wichtig!! (Beispiel: 192.168.7.1)
    $this->serverQueryPort = $portal_config['portal_teamspeak_query']; // TeamSpeak QueryPort.. Schau in die server.ini von TeamSpeak (Standard 51234)
    $this->serverUDPPort   = $portal_config['portal_teamspeak_udp']; // UDP Port für Teamspeak der auch hinter der IP Adresse genutzt wird (Standard 8767)    
    
} 
So sah das ganze kurz bevor ich den den Teamspeak Block aufgegeben habe aus.

Dazu muss man unten dann noch folgendes einfügen:
Finde:

Code: Alles auswählen

$this->socket = $this->getSocket($this->serverAddress, $this->serverQueryPort, $errno, $errstr, 0.3); 
Davor einfügen:

Code: Alles auswählen

$this->get_config(); 
Irgendwie kommt es dabei allerdings zu Fehlermeldungen, obwohl das ganze funktioniert. Deswegen habe ich die Fehlerausgabe einfach mit folgendem Befehl ausgestellt:

Code: Alles auswählen

error_reporting(0); 

Vielleicht hilft dir das ganze ja weiter.

Re: Daten fürs Board 3 Portal aus ACP in Teamspeak Mod übernehme

Verfasst: 15.08.2009 22:10
von Ypselon
Weitergeholfen hat es mir nicht wirklich, den ich habe es nicht zum funktionieren bekommen auf diese Weise.

Allerdings habe ich es geschafft eine andere Variante zu nehmen, indem ich einfach die Klasse TS2INFO komplett ausbaue und die Variablen direkt ausgebe. Komischerweise funktioniert das einwandfrei. Das bedeutet zwar eine komplette Umschreibung des Teamspeak Viewers aber dafür wird es dann wohl bald einen frei Konfigurieren TS Viewer fürs Board3 Portal geben.

Deine idee diente als Denkanstoss ... nu kommt die Arbeit :)