Files
teamspeak-teaspeak/TeaSpeak/addons/teamspeak/teamspeak.php
Kevin Feiler ceee8d9663 Update high
2025-10-16 01:15:48 +02:00

701 lines
44 KiB
PHP

<?php
if (!defined("WHMCS")) {
die("This file cannot be accessed directly");
}
use Illuminate\Database\Capsule\Manager as Capsule;
include $_SERVER['DOCUMENT_ROOT'].'/modules/servers/teamspeak/lib/TeamSpeak.php';
include '/lib/functions.php';
function teamspeak_config()
{
$configarray = array(
"name" => "TeaSpeak Provisioning",
"description" => "TeaSpeak provisioning Module for TeaSpeak servers",
"version" => "2.1.4",
"author" => "planetteaspeak.de",
"language" => "english",
"fields" => array(
"key" => array ("FriendlyName" => "Licensekey", "Type" => "text", "Size" => "25", "Description" => "Enter your paid Licensekey", "Default" => "Lease-"),
));
return $configarray;
}
function teamspeak_check_license($licensekey, $localkey='') {
// -----------------------------------
// -- Configuration Values --
// -----------------------------------
// Enter the url to your WHMCS installation here
$whmcsurl = 'https://planetteaspeak.de';
// Must match what is specified in the MD5 Hash Verification field
// of the licensing product that will be used with this check.
$licensing_secret_key = 'ab4a3ffa672b4a25dbb6c48571b94655';
// The number of days to wait between performing remote license checks
$localkeydays = 15;
// The number of days to allow failover for after local key expiry
$allowcheckfaildays = 5;
// -----------------------------------
// -- Do not edit below this line --
// -----------------------------------
$check_token = time() . md5(mt_rand(1000000000, 9999999999) . $licensekey);
$checkdate = date("Ymd");
$domain = $_SERVER['SERVER_NAME'];
$usersip = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR'];
$dirpath = dirname(__FILE__);
$verifyfilepath = 'modules/servers/licensing/verify.php';
$localkeyvalid = false;
if ($localkey) {
$localkey = str_replace("\n", '', $localkey); # Remove the line breaks
$localdata = substr($localkey, 0, strlen($localkey) - 32); # Extract License Data
$md5hash = substr($localkey, strlen($localkey) - 32); # Extract MD5 Hash
if ($md5hash == md5($localdata . $licensing_secret_key)) {
$localdata = strrev($localdata); # Reverse the string
$md5hash = substr($localdata, 0, 32); # Extract MD5 Hash
$localdata = substr($localdata, 32); # Extract License Data
$localdata = base64_decode($localdata);
$localkeyresults = unserialize($localdata);
$originalcheckdate = $localkeyresults['checkdate'];
if ($md5hash == md5($originalcheckdate . $licensing_secret_key)) {
$localexpiry = date("Ymd", mktime(0, 0, 0, date("m"), date("d") - $localkeydays, date("Y")));
if ($originalcheckdate > $localexpiry) {
$localkeyvalid = true;
$results = $localkeyresults;
$validdomains = explode(',', $results['validdomain']);
if (!in_array($_SERVER['SERVER_NAME'], $validdomains)) {
$localkeyvalid = false;
$localkeyresults['status'] = "Invalid";
$results = array();
}
$validips = explode(',', $results['validip']);
if (!in_array($usersip, $validips)) {
$localkeyvalid = false;
$localkeyresults['status'] = "Invalid";
$results = array();
}
$validdirs = explode(',', $results['validdirectory']);
if (!in_array($dirpath, $validdirs)) {
$localkeyvalid = false;
$localkeyresults['status'] = "Invalid";
$results = array();
}
}
}
}
}
if (!$localkeyvalid) {
$responseCode = 0;
$postfields = array(
'licensekey' => $licensekey,
'domain' => $domain,
'ip' => $usersip,
'dir' => $dirpath,
);
if ($check_token) $postfields['check_token'] = $check_token;
$query_string = '';
foreach ($postfields AS $k=>$v) {
$query_string .= $k.'='.urlencode($v).'&';
}
if (function_exists('curl_exec')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $whmcsurl . $verifyfilepath);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
} else {
$responseCodePattern = '/^HTTP\/\d+\.\d+\s+(\d+)/';
$fp = @fsockopen($whmcsurl, 80, $errno, $errstr, 5);
if ($fp) {
$newlinefeed = "\r\n";
$header = "POST ".$whmcsurl . $verifyfilepath . " HTTP/1.0" . $newlinefeed;
$header .= "Host: ".$whmcsurl . $newlinefeed;
$header .= "Content-type: application/x-www-form-urlencoded" . $newlinefeed;
$header .= "Content-length: ".@strlen($query_string) . $newlinefeed;
$header .= "Connection: close" . $newlinefeed . $newlinefeed;
$header .= $query_string;
$data = $line = '';
@stream_set_timeout($fp, 20);
@fputs($fp, $header);
$status = @socket_get_status($fp);
while (!@feof($fp)&&$status) {
$line = @fgets($fp, 1024);
$patternMatches = array();
if (!$responseCode
&& preg_match($responseCodePattern, trim($line), $patternMatches)
) {
$responseCode = (empty($patternMatches[1])) ? 0 : $patternMatches[1];
}
$data .= $line;
$status = @socket_get_status($fp);
}
@fclose ($fp);
}
}
if ($responseCode != 200) {
$localexpiry = date("Ymd", mktime(0, 0, 0, date("m"), date("d") - ($localkeydays + $allowcheckfaildays), date("Y")));
if ($originalcheckdate > $localexpiry) {
$results = $localkeyresults;
} else {
$results = array();
$results['status'] = "Invalid";
$results['description'] = "Remote Check Failed";
return $results;
}
} else {
preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $matches);
$results = array();
foreach ($matches[1] AS $k=>$v) {
$results[$v] = $matches[2][$k];
}
}
if (!is_array($results)) {
die("Invalid License Server Response");
}
if ($results['md5hash']) {
if ($results['md5hash'] != md5($licensing_secret_key . $check_token)) {
$results['status'] = "Invalid";
$results['description'] = "MD5 Checksum Verification Failed";
return $results;
}
}
if ($results['status'] == "Active") {
$results['checkdate'] = $checkdate;
$data_encoded = serialize($results);
$data_encoded = base64_encode($data_encoded);
$data_encoded = md5($checkdate . $licensing_secret_key) . $data_encoded;
$data_encoded = strrev($data_encoded);
$data_encoded = $data_encoded . md5($data_encoded . $licensing_secret_key);
$data_encoded = wordwrap($data_encoded, 80, "\n", true);
$results['localkey'] = $data_encoded;
}
$results['remotecheck'] = true;
}
unset($postfields,$data,$matches,$whmcsurl,$licensing_secret_key,$checkdate,$usersip,$localkeydays,$allowcheckfaildays,$md5hash);
return $results;
}
function teamspeak_activate()
{
try {
if (!Capsule::schema()->hasTable('modwhmcs_teamspeak_backups')) {
Capsule::schema()->create('modwhmcs_teamspeak_backups', function ($table) {
$table->increments('id');
$table->integer('sid')->nullable();
$table->integer('port');
$table->mediumText('data')->nullable();
$table->timestamp('date')->nullable();
});
}
if (!Capsule::schema()->hasTable('modwhmcs_teamspeak_settings')) {
Capsule::schema()->create('modwhmcs_teamspeak_settings', function ($table) {
$table->increments('id');
$table->mediumInteger('minport');
$table->mediumInteger('maxport');
$table->mediumText('servername')->nullable();
$table->longText('servermsgwelcome')->nullable();
$table->longText('servermsg')->nullable();
$table->integer('servermsgmode');
$table->longText('bannerlinkurl')->nullable();
$table->longText('bannerimgurl')->nullable();
$table->integer('bannermode');
$table->longText('buttonlinkurl')->nullable();
$table->longText('buttonimgurl')->nullable();
$table->longText('buttonmsgtooltip')->nullable();
$table->bigInteger('uploadquota');
$table->bigInteger('downloadquota');
$table->bigInteger('uploadbandwidth');
$table->bigInteger('downloadbandwidth');
$table->integer('enabletsdns');
$table->longText('domaintsdns')->nullable();
$table->longText('urlapi')->nullable();
$table->longText('keyapi')->nullable();
});
Capsule::table('modwhmcs_teamspeak_settings')->insert(array('minport' => 9987, 'maxport' => 999999, 'servername' => 'TeaSpeak Server by Voice4You.org', 'servermsgwelcome' => 'Welcome to Tea(m)Speak, check [URL]teaspeak.de[/URL] for latest information', 'servermsgmode' => 0, 'bannermode' => 0, 'uploadquota' => -1, 'downloadquota' => -1, 'uploadbandwidth' => -1, 'downloadbandwidth' => -1, 'enabletsdns' => 0));
}
} catch (Exception $e) {
return array('status' => 'error', 'description' => 'It was not possible to create the table. Check your database');
}
return array('status' => 'success');
}
function teamspeak_deactivate()
{
try {
Capsule::schema()->dropIfExists('modwhmcs_teamspeak_settings');
} catch (Exception $e) {
return array('status' => 'error', 'description' => 'The table could not be deleted. Check your database');
}
return array('status' => 'success');
}
function teamspeak_output($vars)
{
$license = Capsule::table('tbladdonmodules')->where('module', 'teamspeak')->where('setting', 'license')->value('value');
$listServers = Capsule::table('tblservers')->where('type', 'teamspeak')->get();
$servers = array();
foreach ($listServers as $key => $server) {
$servers[$key] = new stdClass();
$servers[$key]->name = $server->name;
$servers[$key]->ipaddress = $server->ipaddress;
$servers[$key]->port = ($server->port ? $server->port : 10101);
$servers[$key]->username = $server->username;
$servers[$key]->password = $server->password;
}
$alert = array();
$names = array();
foreach ($servers as $server) {
$names[$server->name] = md5($server->name);
}
$licensekey = $vars['key'];
$localkey = '';
// Validate the license key information
$results = teamspeak_check_license($licensekey, $localkey);
// Raw output of results for debugging purpose
//echo '<textarea cols="100" rows="20">' . print_r($results, true) . '</textarea>';
// Interpret response
switch ($results['status']) {
case "Active":
// get new local key and save it somewhere
$localkeydata = $results['localkey'];
break;
case "Invalid":
# die("License key is Invalid");
#break;
case "Expired":
#die("License key is Expired");
#break;
case "Suspended":
# die("License key is Suspended");
#break;
default:
#die("Invalid Response");
#break;
}
$output = '';
if (!isset($_GET['display'])) {
$output .= "<script src='../modules/addons/teamspeak/js/script.js'></script><script type=\"text/javascript\">
$(document).ready(function () {
var servers = " . json_encode($names) . ";
var server, hash;
for (var key in servers) {
server = key;
hash = servers[key];
test(server, hash);
(function loop(server, hash) {
setTimeout(function () {
test(server, hash);
loop(server, hash);
}, 10000);
})(server, hash);
}
});
</script>";
}
if (isset($_POST['action']) && $_POST['action'] == 'savesettings') {
try {
if (!Capsule::table('modwhmcs_teamspeak_settings')->where('id', 1)->update(array('minport' => $_POST['minport'], 'maxport' => $_POST['maxport'], 'servername' => $_POST['servername'], 'servermsgwelcome' => $_POST['servermsgwelcome'], 'servermsg' => $_POST['servermsg'], 'servermsgmode' => $_POST['servermsgmode'], 'bannerlinkurl' => $_POST['bannerlinkurl'], 'bannerimgurl' => $_POST['bannerimgurl'], 'bannermode' => $_POST['bannermode'], 'buttonlinkurl' => $_POST['buttonlinkurl'], 'buttonimgurl' => $_POST['buttonimgurl'], 'buttonmsgtooltip' => $_POST['buttonmsgtooltip'], 'uploadquota' => $_POST['uploadquota'], 'downloadquota' => $_POST['downloadquota'], 'uploadbandwidth' => $_POST['uploadbandwidth'], 'downloadbandwidth' => $_POST['downloadbandwidth'], 'enabletsdns' => $_POST['enabletsdns'], 'domaintsdns' => $_POST['domaintsdns'], 'urlapi' => $_POST['urlapi'], 'keyapi' => $_POST['keyapi']))) {
throw new Exception('Settings cannot be saved');
}
} catch (Exception $e) {
$alert['status'] = 'error';
$alert['alert'] = $e->getMessage();
}
$alert['status'] = 'success';
$alert['alert'] = 'The settings have been saved';
}
$update = file_get_contents('https://voice4you.org/updater/teaspeak_version.txt');
if($update != $vars['version']){
$output .= "<link href='../modules/addons/teamspeak/css/style.css' rel='stylesheet'/><div class='panel panel-default teamspeak'><div class='panel-heading'><span class='pull-right verify-status' style='display: none'><i class='fa fa-spinner fa-spin'></i>&nbsp;&nbsp;".$vars['_lang']['checking_servers']."</span></div><div class='panel-body'><div class='row'><div class='col-sm-6'><div class='head'><div class='icon'><i class='fa fa-cogs'></i></div><div class='head-name'>TeaSpeak Provisioning&nbsp;&nbsp;</div></div></div><div class='col-sm-12'><div class='row version-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['installed_version']."</div><div class='panel-body text-center'><strong class='text-info'>{$vars['version']}</strong></div></div></div><div class='row update-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['new_version']."</div><div class='panel-body text-center'>".$vars['_lang']['new_version_aviable']."</div></div></div>";
}else{
$output .= "<link href='../modules/addons/teamspeak/css/style.css' rel='stylesheet'/><div class='panel panel-default teamspeak'><div class='panel-heading'><span class='pull-right verify-status' style='display: none'><i class='fa fa-spinner fa-spin'></i>&nbsp;&nbsp;".$vars['_lang']['checking_servers']."</span></div><div class='panel-body'><div class='row'><div class='col-sm-6'><div class='head'><div class='icon'><i class='fa fa-cogs'></i></div><div class='head-name'>TeaSpeak Provisioning&nbsp;&nbsp;</div></div></div><div class='col-sm-12'><div class='row version-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['installed_version']."</div><div class='panel-body text-center'><strong class='text-info'>{$vars['version']}</strong></div></div></div><div class='row update-status'><div class='col-sm-4'><div class='panel panel-info'><div class='panel-heading text-center'>".$vars['_lang']['new_version']."</div><div class='panel-body text-center'>".$vars['_lang']['no_new_version_aviable']."</div></div></div>";
}
if (!isset($_GET['display'])) {
$output .= "";
$output .= "<div class='row'><div class='col-sm-12'><ul class=\"nav nav-tabs\" role=\"tablist\"><li role=\"presentation\" " . ($_POST['action'] == 'savesettings' ? '' : 'class="active"') . "><a href=\"#servers\" aria-controls=\"servers\" role=\"tab\" data-toggle=\"tab\">".$vars['_lang']['servers']."</a></li><li role=\"presentation\" " . (!$_POST['action'] == 'savesettings' ? '' : 'class="active"') . "><a href=\"#settings\" aria-controls=\"settings\" role=\"tab\" data-toggle=\"tab\">".$vars['_lang']['settings']."</a></li></ul><div class=\"tab-content\"><div role=\"tabpanel\" class=\"tab-pane" . ($_POST['action'] == 'savesettings' ? '' : ' active') . "\" id=\"servers\"><div class=\"table-responsive\"><table class='table table-condensed'><thead><tr><th class='text-center'>#</th><th>".$vars['_lang']['servers_name']."</th><th>".$vars['_lang']['ip_address']."</th><th>ServerQuery Port</th><th><i class='fa fa-cogs'></i>&nbsp; ".$vars['_lang']['manage']." </th></tr></thead><tbody>";
$i = 1;
foreach ($servers as $server) {
$output .= "<tr id='" . md5($server->name) . "'><td class='text-center'>{$i}</td>";
$output .= "<td>{$server->name}</td>";
$output .= "<td>{$server->ipaddress}</td>";
$output .= "<td>{$server->port}</td>";
$output .= "<td><span class='manager show invisible'><a href='addonmodules.php?module=teamspeak&amp;display=virtualservers&amp;serverip={$server->ipaddress}' class='btn btn-primary btn-xs'><i class='fa fa-server'></i>&nbsp; TeaSpeak</a>&nbsp;<a href='addonmodules.php?module=teamspeak&amp;display=tsdns&amp;serverip={$server->ipaddress}' class='btn btn-danger btn-xs'><i class='fa fa-link'></i>&nbsp; TSDNS</a></span></td></tr>";
$i++;
}
$output .= "</tbody></table></div></div><div role=\"tabpanel\" class=\"tab-pane" . (!$_POST['action'] == 'savesettings' ? '' : ' active') . "\" id=\"settings\"><div class='alert alert-info'>".$vars['_lang']['setting_info']."<i class='fa fa-info fa-2x pull-left' style='padding:5px'></i></div>";
$settings = Capsule::table('modwhmcs_teamspeak_settings')->first();
switch ($settings->servermsgmode) {
case 1:
$selectm1 = 'selected';
break;
case 2:
$selectm2 = 'selected';
break;
case 3:
$selectm3 = 'selected';
break;
default:
$selectm0 = 'selected';
break;
}
switch ($settings->bannermode) {
case 1:
$selectb1 = 'selected';
break;
case 2:
$selectb2 = 'selected';
break;
default:
$selectb0 = 'selected';
break;
}
if ($settings->enabletsdns) {
$check1 = 'checked';
} else {
$check0 = 'checked';
}
if (!empty($alert)) {
$output .= "<div class='row'><div class='col-md-6 col-md-offset-3'>";
if ($alert['status'] == 'error') {
$output .= "<div class='alert alert-danger'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button><p><strong><i class='fa fa-frown-o fa-4x pull-left'></i>".$vars['_lang']['alert_ops_something_happened']."</strong></p>{$alert['alert']}</div>";
} else {
$output .= "<div class='alert alert-success'><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button><p><strong><i class='fa fa-smile-o fa-4x pull-left'></i>".$vars['_lang']['alert_congratulations_everything_worked']."</strong></p>{$alert['alert']}</div>";
}
$output .= "</div></div>";
}
$output .= "<form class=\"form-horizontal\" method='post' action='addonmodules.php?module=teamspeak'>
<input type='hidden' name='module' value='teamspeak'>
<input type='hidden' name='action' value='savesettings'>
<div class='row'>
<div class='col-md-8 col-md-offset-2'>
<fieldset>
<legend class='text-center'>".$vars['_lang']['globaly_instance_settings']."</legend>
<div class=\"form-group\">
<label for=\"minport\" class=\"col-sm-3 control-label\">".$vars['_lang']['min_port']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='minport' id=\"minport\" value='{$settings->minport}'>
</div>
</div>
<div class=\"form-group\">
<label for=\"maxport\" class=\"col-sm-3 control-label\">".$vars['_lang']['max_port']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='maxport' id=\"maxport\" value='{$settings->maxport}'>
</div>
</div>
<div class=\"form-group\">
<label for=\"servername\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_name']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='servername' id=\"servername\" value='{$settings->servername}'>
<span class=\"help-block\">".$vars['_lang']['servers_name_info']."</span>
</div>
</div>
<div class=\"form-group\">
<label for=\"servermsgwelcome\" class=\"col-sm-3 control-label\">".$vars['_lang']['welcome_message']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='servermsgwelcome' id=\"servermsgwelcome\" value='{$settings->servermsgwelcome}'>
<span class='help-block'>".$vars['_lang']['welcome_message_info']."</span>
</div>
</div>
<div class=\"form-group\">
<label for=\"servermsg\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_message']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='servermsg' id=\"servermsg\" value='{$settings->servermsg}'>
<span class='help-block'>".$vars['_lang']['servers_message_info']."</span>
</div>
</div>
<div class=\"form-group\">
<label for=\"servermsgmode\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_message_display_mode']."</label>
<div class=\"col-sm-9\">
<select name='servermsgmode' id=\"servermsgmode\" class=\"form-control\"><option value='0' {$selectm0}>".$vars['_lang']['servers_message_display_mode_not_shown']."</option><option value='1' {$selectm1}>".$vars['_lang']['servers_message_display_mode_in_chat']."</option><option value='2' {$selectm2}>".$vars['_lang']['servers_message_display_in_modal']."</option><option value='3' [$selectm3]>".$vars['_lang']['servers_message_display_in_modal_and_leave']."</option></select>
</div>
</div>
</fieldset>
<fieldset>
<legend class='text-center'>".$vars['_lang']['servers_banner']."</legend>
<div class=\"form-group\">
<label for=\"bannerlinkurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_link_url']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='bannerlinkurl' id=\"bannerlinkurl\" value=\"{$settings->bannerlinkurl}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"bannerimgurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_image_url']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='bannerimgurl' id=\"bannerimgurl\" value=\"{$settings->bannerimgurl}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"bannermode\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_display_mode']."</label>
<div class=\"col-sm-9\">
<select name='bannermode' id=\"bannermode\" class=\"form-control\"><option value='0' {$selectb0}>".$vars['_lang']['servers_banner_display_mode_not_resize']."</option><option value='1' {$selectb1}>".$vars['_lang']['servers_banner_display_mode_ignoring_aspect']."</option><option value='2' {$selectb2}>".$vars['_lang']['servers_banner_display_mode_maintaining_appearance']."</option></select>
</div>
</div>
</fieldset>
<fieldset>
<legend class='text-center'>".$vars['_lang']['servers_button']."</legend>
<div class=\"form-group\">
<label for=\"buttonlinkurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_link_url']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='buttonlinkurl' id=\"buttonlinkurl\" value=\"{$settings->buttonlinkurl}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"buttonimgurl\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_button_image_url']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='buttonimgurl' id=\"buttonimgurl\" value=\"{$settings->buttonimgurl}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"buttonmsgtootlip\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_banner_message_tooltip']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='buttonmsgtooltip' id=\"buttonmsgtooltip\" value=\"{$settings->buttonmsgtooltip}\">
</div>
</div>
</fieldset>
<fieldset>
<legend class='text-center'>".$vars['_lang']['servers_file_transfer']."</legend>
<div class=\"form-group\">
<label for=\"uploadquota\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_upload_quota']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='uploadquota' id=\"uploadquota\" value=\"{$settings->uploadquota}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"downloadquota\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_download_quota']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='downloadquota' id=\"downloadquota\" value=\"{$settings->downloadquota}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"uploadbandwidth\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_max_upload_speed']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='uploadbandwidth' id=\"uploadbandwidth\" value=\"{$settings->uploadbandwidth}\">
</div>
</div>
<div class=\"form-group\">
<label for=\"downloadbandwidth\" class=\"col-sm-3 control-label\">".$vars['_lang']['servers_file_transfer_max_download_speed']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='downloadbandwidth' id=\"downloadbandwidth\" value=\"{$settings->downloadbandwidth}\">
</div>
</div>
</fieldset>
<fieldset>
<legend class='text-center'>".$vars['_lang']['teamspeak_dns']."</legend>
<div class=\"form-group\">
<label class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_enable']."</label>
<div class=\"col-sm-9\">
<label class=\"radio-inline\">
<input type=\"radio\" name=\"enabletsdns\" id=\"1\" value=\"1\" {$check1}> ".$vars['_lang']['yes']."
</label>
<label class=\"radio-inline\">
<input type=\"radio\" name=\"enabletsdns\" id=\"0\" value=\"0\" {$check0}> ".$vars['_lang']['no']."
</label>
</div>
</div>
<div class=\"form-group\">
<label for=\"domaintsdns\" class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_domain']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='domaintsdns' id=\"domaintsdns\" value=\"{$settings->domaintsdns}\">
<span class=\"help-block\">".$vars['_lang']['teamspeak_dns_domain_info']."</span>
</div>
</div>
<div class=\"form-group\">
<label for=\"urlapi\" class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_adress']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='urlapi' id=\"urlapi\" value=\"{$settings->urlapi}\">
<span class=\"help-block\">".$vars['_lang']['teamspeak_dns_adress_info']."</span>
</div>
</div>
<div class=\"form-group\">
<label for=\"keyapi\" class=\"col-sm-3 control-label\">".$vars['_lang']['teamspeak_dns_api_key']."</label>
<div class=\"col-sm-9\">
<input type=\"text\" class=\"form-control\" name='keyapi' id=\"keyapi\" value=\"{$settings->keyapi}\">
</div>
</div>
</fieldset>
<hr>
<div class=\"form-group\">
<div class=\"col-sm-offset-2 col-sm-8\">
<button type=\"submit\" class=\"btn btn-default center-block\"><i class='fa fa-floppy-o'></i>&nbsp;&nbsp;Save</button>
</div>
</div>
</div>
</div>
</form></div></div></div></div>";
} elseif (isset($_GET['display'])) {
switch ($_GET['display']) {
case 'virtualservers':
$serververif = '';
foreach ($servers as $server) {
if ($server->ipaddress == $_GET['serverip']) {
$command = "decryptpassword";
$values["password2"] = $server->password;
$results1 = localAPI($command, $values);
$server->password = $results1['password'];
$serververif = $server;
}
}
$tsAdmin = new TeamSpeak($serververif->ipaddress, $serververif->port);
$tsAdmin->connect();
$tsAdmin->login($serververif->username, $serververif->password);
if (isset($_GET['action'], $_GET['sid'])) {
switch ($_GET['action']) {
case 'start':
if (!$tsAdmin->getElement('success', $status = $tsAdmin->serverStart($_GET['sid']))) {
$alert['status'] = "".$vars['_lang']['error']."";
$alert['alert'] = "".$vars['_lang']['error_server_cant_start']."";
} else {
$alert['status'] = "".$vars['_lang']['success']."";
$alert['alert'] = "".$vars['_lang']['success_start']."";
}
break;
case 'stop':
if (!$tsAdmin->getElement('success', $status = $tsAdmin->serverStop($_GET['sid']))) {
$alert['status'] = "".$vars['_lang']['error']."";
$alert['alert'] = "".$vars['_lang']['error_server_cant_stop']."";
} else {
$alert['status'] = "".$vars['_lang']['success']."";
$alert['alert'] = "".$vars['_lang']['success_stop']."";
}
break;
case 'delete':
if (!$tsAdmin->getElement('success', $status = $tsAdmin->serverDelete($_GET['sid']))) {
$alert['status'] = "".$vars['_lang']['error']."";
$alert['alert'] = "".$vars['_lang']['error_server_cant_deleted']."";
} else {
$alert['status'] = "".$vars['_lang']['success']."";
$alert['alert'] = "".$vars['_lang']['success_deleted']."";
}
break;
break;
default :
break;
}
if (!empty($alert)) {
$output .= "<div class='row'><div class='col-md-6 col-md-offset-3'>";
if ($alert['status'] == 'error') {
$output .= "<div class='alert alert-danger'><a href='addonmodules.php?module=teamspeak&amp;display=virtualservers&amp;serverip={$_GET['serverip']}' class='btn btn-danger pull-right'><i class='fa fa-arrow-left'></i>&nbsp;&nbsp;".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-frown-o fa-4x pull-left'></i>".$vars['_lang']['alert_ops_something_happened']."</strong></p>{$alert['alert']}</div>";
} else {
$output .= "<div class='alert alert-success'><a href='addonmodules.php?module=teamspeak&amp;display=virtualservers&amp;serverip={$_GET['serverip']}' class='btn btn-success pull-right'><i class='fa fa-arrow-left'></i>&nbsp;&nbsp;".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-smile-o fa-4x pull-left'></i>".$vars['_lang']['alert_congratulations_everything_worked']."</strong></p>{$alert['alert']}</div>";
}
$output .= "</div></div>";
}
} else {
$serverlist = $tsAdmin->serverList();
$output .= "<a href='addonmodules.php?module=teamspeak' class='btn btn-info pull-right'><i class='fa fa-arrow-left'></i>&nbsp;&nbsp;".$vars['_lang']['back_home']."</a><div class='clearfix'></div><br><div class='table-responsive'><table class='table'><thead><tr><th>#</th><th><i class='fa fa-server'></i>&nbsp;&nbsp;".$vars['_lang']['servers_name']."</th><th><i class='fa fa-plug'></i>&nbsp;&nbsp;".$vars['_lang']['port']."</th><th><i class='fa fa-users'></i>&nbsp;&nbsp;".$vars['_lang']['slot']."</th><th><i class='fa fa-bar-chart'></i>&nbsp;&nbsp;".$vars['_lang']['status']."</th><th><i class='fa fa-clock-o'></i>&nbsp;&nbsp;".$vars['_lang']['uptime']."</th><th><i class='fa fa-cogs'></i>&nbsp;&nbsp;".$vars['_lang']['manage']."</th></tr></thead><tbody>";
if ($serverlist['data']) {
foreach ($serverlist['data'] as $server) {
$output .= "<tr><td>{$server['virtualserver_id']}</td><td>{$server['virtualserver_name']}</td><td>{$server['virtualserver_port']}</td><td>{$server['virtualserver_maxclients']}</td><td>" . ucfirst($server['virtualserver_status']) . "</td><td>" . $server['virtualserver_uptime'] . "</td><td>";
if ($server['virtualserver_status'] != 'online') {
$output .= "<a href='addonmodules.php?module=teamspeak&amp;display=virtualservers&amp;serverip={$serververif->ipaddress}&amp;action=start&amp;sid={$server['virtualserver_id']}' class='btn btn-success btn-xs'><i class='fa fa-play'></i>&nbsp;&nbsp;".$vars['_lang']['start']."</a>";
} else {
$output .= "<a href='addonmodules.php?module=teamspeak&amp;display=virtualservers&amp;serverip={$serververif->ipaddress}&amp;action=stop&amp;sid={$server['virtualserver_id']}' class='btn btn-warning btn-xs'><i class='fa fa-stop'></i>&nbsp;&nbsp;".$vars['_lang']['stop']."</a>";
}
$output .= "&nbsp;<a href='addonmodules.php?module=teamspeak&amp;display=virtualservers&amp;serverip={$serververif->ipaddress}&amp;action=delete&amp;sid={$server['virtualserver_id']}' class='btn btn-danger btn-xs'><i class='fa fa-times'></i>&nbsp;&nbsp;".$vars['_lang']['delete']."</a>";
$output .= "</td></tr>";
}
} else {
$output .= "<tr><td colspan='4' class='text-center'>".$vars['_lang']['error_no_servers']."</td></tr>";
}
$output .= "</table></div>";
}
break;
case 'tsdns':
$settings = Capsule::table('modwhmcs_teamspeak_settings')->select('urlapi', 'keyapi')->first();
try {
$tsdnsClient = new TSDNS($settings->urlapi, $settings->keyapi);
$request = $tsdnsClient->getZones();
$serverstsdns = json_decode($request->body);
$serverscurrent = array();
foreach ($serverstsdns->message as $server) {
$serverip = explode(':', $server->target);
if ($serverip[0] == $_GET['serverip']) {
$serverscurrent[] = $server;
}
}
if (isset($_GET['action'], $_GET['zone'])) {
switch ($_GET['action']) {
case 'editzone' :
foreach ($serverscurrent as $server) {
if ($server->zone == $_GET['zone']) {
throw new Exception('There is informed zone already exists.');
}
}
$tsdnsClient->deleteZone($_GET['oldzone']);
$result = $tsdnsClient->addZone($_GET['zone'], $_GET['target']);
if (!$result->success) {
throw new Exception('The zone could not be edited.');
} else {
$alert['status'] = 'success';
$alert['alert'] = 'Zone has been edited.';
}
break;
case 'delzone' :
$result = $tsdnsClient->deleteZone($_GET['zone']);
if (!$result->success) {
throw new Exception('The zone could not be deleted.');
} else {
$alert['status'] = 'success';
$alert['alert'] = 'Zone has been deleted.';
}
break;
default:
break;
}
} else {
$output .= "<a href='addonmodules.php?module=teamspeak' class='btn btn-info pull-right'><i class='fa fa-arrow-left'></i>&nbsp;&nbsp;".$vars['_lang']['back_home']."</a><div class='clearfix'></div><br><div class='table-responsive'><table class='table table-condensed'><thead><tr><th>#</th><th><i class='fa fa-globe'></i>&nbsp;".$vars['_lang']['zone']."</th><th><i class='fa fa-dot-circle-o'></i>&nbsp;".$vars['_lang']['destination']."</th><th><i class='fa fa-cogs'></i>&nbsp;".$vars['_lang']['manage']."</th></tr></thead><tbody>";
if ($serverscurrent) {
foreach ($serverscurrent as $server) {
$output .= "<tr><td>{$server->id}</td><td>{$server->zone}</td><td>{$server->target}</td><td><a class=\"btn btn-primary btn-xs\" role=\"button\" data-toggle=\"modal\" data-target=\"#" . md5($server->zone) . "\" aria-expanded=\"false\" aria-controls=\"" . md5($server->zone) . "\"><i class='fa fa-pencil-square-o'></i>&nbsp;".$vars['_lang']['edit']."</a>&nbsp;<a href='' class='btn btn-danger btn-xs' role=\"button\" data-toggle=\"modal\" data-target=\"#del" . md5($server->zone) . "\" aria-expanded=\"false\" aria-controls=\"del" . md5($server->zone) . "\"><i class='fa fa-times'></i>&nbsp;".$vars['_lang']['delete']."</a></td></tr>";
}
} else {
$output .= "<tr><td colspan='4' class='text-center'>".$vars['_lang']['error_no_zones']."</td></tr>";
}
$output .= "</tbody></table></div>";
foreach ($serverscurrent as $server) {
$output .= "<div class='modal fade' id='" . md5($server->zone) . "' tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"" . md5($server->zone) . "Label\"><div class=\"modal-dialog\" role=\"document\"><div class=\"modal-content\"><div class=\"modal-header\"><button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button><h4 class=\"modal-title\" id=\"" . md5($server->zone) . "Label\">".$vars['_lang']['edit_zone']."</h4></div><form method='get' action='addonmodules.php' class='form-horizontal'><input type='hidden' name='module' value='teamspeak'/><input type='hidden' name='display' value='tsdns'/><input type='hidden' name='serverip' value='{$_GET['serverip']}'/><input type='hidden' name='action' value='editzone'/><input type='hidden' name='oldzone' value='{$server->zone}'/><div class=\"modal-body\"><div class='form-group'><label for='zone' class='col-sm-2 control-label'>".$vars['_lang']['zone']."</label><div class='col-sm-5'><input type='text' class='form-control' name='zone' id='zone' value='{$server->zone}'/></div></div><div class='form-group'><label for='target' class='col-sm-2 control-label'>".$vars['_lang']['destination']."</label><div class='col-sm-5'><input type='text' class='form-control' name='target' id='target' value='{$server->target}'/></div></div></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class='fa fa-times'></i>&nbsp;".$vars['_lang']['close']."</button><button type='submit' class='btn btn-success'><i class='fa fa-floppy-o'></i>&nbsp;".$vars['_lang']['to_save']."</button></div></form></div></div></div>";
}
foreach ($serverscurrent as $server) {
$output .= "<div class='modal fade' id='del" . md5($server->zone) . "' tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"del" . md5($server->zone) . "Label\"><div class=\"modal-dialog\" role=\"document\"><div class=\"modal-content\"><div class=\"modal-header\"><button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button><h4 class=\"modal-title\" id=\"del" . md5($server->zone) . "Label\">".$vars['_lang']['zone_exclusion_confirm']."</h4></div><form method='get' action='addonmodules.php' class='form-horizontal'><input type='hidden' name='module' value='teamspeak'/><input type='hidden' name='display' value='tsdns'/><input type='hidden' name='serverip' value='{$_GET['serverip']}'/><input type='hidden' name='action' value='delzone'/><input type='hidden' name='zone' value='{$server->zone}'/><div class=\"modal-body\"><h2>".$vars['_lang']['zone_delete_info']." \"<strong><u>{$server->zone}</u></strong>\" click \"Delete \"".$vars['_lang']['zone_delete_info_1']."</h2></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class='fa fa-times'></i>&nbsp;".$vars['_lang']['close']."</button><button type='submit' class='btn btn-danger'><i class='fa fa-trash'></i>&nbsp;".$vars['_lang']['delete']."</button></div></form></div></div></div>";
}
}
} catch (Exception $e) {
$alert['status'] = 'error';
$alert['alert'] .= $e->getMessage();
}
if (!empty($alert)) {
$output .= "<div class='row'><div class='col-md-6 col-md-offset-3'>";
if ($alert['status'] == 'error') {
$output .= "<div class='alert alert-danger'><a href='addonmodules.php?module=teamspeak' class='btn btn-danger pull-right'><i class='fa fa-arrow-left'></i>&nbsp;&nbsp;".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-frown-o fa-4x pull-left'></i>".$vars['_lang']['alert_ops_something_happened']."</strong></p>{$alert['alert']}</div>";
} else {
$output .= "<div class='alert alert-success'><a href='addonmodules.php?module=teamspeak&amp;display=tsdns&amp;serverip={$_GET['serverip']}' class='btn btn-success pull-right'><i class='fa fa-arrow-left'></i>&nbsp;&nbsp;".$vars['_lang']['back_home']."</a><p><strong><i class='fa fa-smile-o fa-4x pull-left'></i>".$vars['_lang']['alert_congratulations_everything_worked']."</strong></p>{$alert['alert']}</div>";
}
$output .= "</div></div>";
}
break;
}
}
$output .= " </div ></div ></div > ";
echo $output;
}