You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
7.6 KiB
212 lines
7.6 KiB
<?php
|
|
require_once __DIR__ . "/include/header.php";
|
|
require_once __DIR__ . "/include/tsutils.php";
|
|
require_once __DIR__ . "/include/cacheutils.class.php";
|
|
require_once __DIR__ . "/config/assignerconfig.php";
|
|
|
|
$clientgroups = [];
|
|
|
|
try {
|
|
$tsAdmin = getTeamspeakConnection("#no_query_clients");
|
|
|
|
$userip = $_SERVER["HTTP_CF_CONNECTING_IP"]; // $_SERVER["REMOTE_ADDR"];
|
|
|
|
echo "<!-- IP: {$_SERVER["REMOTE_ADDR"]}, CFIP: {$_SERVER["HTTP_CF_CONNECTING_IP"]} -->";
|
|
|
|
$clients = $tsAdmin->clientList(["connection_client_ip" => $userip]);
|
|
$servergroups = $tsAdmin->serverGroupList();
|
|
|
|
if(!empty($clients)) {
|
|
$client = array_values($clients)[0];
|
|
$clientgroups = explode(",", $client["client_servergroups"]);
|
|
}
|
|
|
|
if(isset($client)) {
|
|
$cacheutils = new CacheUtils('logincodes-' . $client["client_database_id"]);
|
|
|
|
if(empty($_SESSION["loggedin"])) {
|
|
if($cacheutils->isExpired()) {
|
|
$logincode = mt_rand(100000, 999999);
|
|
$client->poke(translate($lang["groupassigner"]["codepoke"], [$logincode]));
|
|
$cacheutils->setValue($logincode, 120);
|
|
} else {
|
|
$logincode = $cacheutils->getValue();
|
|
}
|
|
|
|
if(!empty($_POST["logincode"])) {
|
|
if($logincode === (int)$_POST["logincode"]) {
|
|
$cacheutils->remove();
|
|
$_SESSION["loggedin"] = true;
|
|
} else {
|
|
$failedlogin = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($_POST["submitted"]) && !empty($_SESSION["loggedin"])) {
|
|
$allgroups = [];
|
|
|
|
foreach ($assignerconfig as $item) {
|
|
foreach ($item["sgids"] as $sgid) {
|
|
if(!in_array($sgid, $allgroups))
|
|
$allgroups[] = (int)$sgid;
|
|
}
|
|
}
|
|
|
|
$submittedgroups = [];
|
|
|
|
if(!empty($_POST["sgs"]) && is_array($_POST["sgs"])) {
|
|
foreach ($_POST["sgs"] as $sg) {
|
|
$submittedgroups[] = (int)$sg;
|
|
}
|
|
}
|
|
|
|
$groupsremove = array_diff($allgroups, $submittedgroups);
|
|
|
|
foreach ($groupsremove as $grid) {
|
|
try {
|
|
$client->remServerGroup((int)$grid);
|
|
} catch (Exception $e) {}
|
|
}
|
|
|
|
foreach ($submittedgroups as $gaid) {
|
|
try {
|
|
if(in_array($gaid, $allgroups)) {
|
|
$client->addServerGroup((int)$gaid);
|
|
}
|
|
} catch (Exception $e) {}
|
|
}
|
|
|
|
$client = $tsAdmin->clientGetByDbid($client["client_database_id"]); // refresh
|
|
$clientgroups = explode(",", $client["client_servergroups"]);
|
|
|
|
$success = true;
|
|
}
|
|
}
|
|
} catch (Exception $e) {
|
|
echo "Connection failed! $e";
|
|
}
|
|
?>
|
|
|
|
<style>
|
|
.bootstrap-select.btn-group .dropdown-menu .notify {
|
|
color: #ebebeb;
|
|
text-align: center;
|
|
background-color: #d9534f;
|
|
border: none;
|
|
}
|
|
|
|
.bootstrap-select.btn-group .dropdown-menu li a {
|
|
/*margin: 3px 0;*/
|
|
font-size: 16px;
|
|
}
|
|
|
|
.ga-icon {
|
|
max-height: 16px;
|
|
max-width: 16px;
|
|
margin-right: 3px;
|
|
}
|
|
|
|
.bootstrap-select > .btn {
|
|
background-color: #39444e;
|
|
}
|
|
|
|
.group-label {
|
|
font-size: 24px;
|
|
}
|
|
|
|
.group-label .label {
|
|
font-size: 14px;
|
|
margin-top: 7px;
|
|
}
|
|
|
|
.ga-group {
|
|
margin-bottom: 15px;
|
|
}
|
|
</style>
|
|
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">
|
|
<h3 class="panel-title"><i class="fa fa-picture-o" aria-hidden="true"></i> <?php tl($lang["groupassigner"]["title"]); ?></h3>
|
|
</div>
|
|
<div class="panel-body">
|
|
<?php if(isset($success)) { ?>
|
|
<div class="alert alert-success">
|
|
<?php tl($lang["groupassigner"]["success"]) ?>
|
|
</div>
|
|
<?php } ?>
|
|
|
|
<?php if (!isset($client)) { ?>
|
|
<script>
|
|
setTimeout(function () {
|
|
location.reload()
|
|
}, 5000);
|
|
</script>
|
|
<div class="text-center">
|
|
<h3><?php tl($lang["groupassigner"]["connectbeforeusing"]) ?></h3>
|
|
<a class="btn btn-info" href="<?php echo "ts3server://" . $config['teamspeak']['displayip'] ?>"><i class="fa fa-sign-in"></i> <?php tl($lang["groupassigner"]["joints"]) ?></a>
|
|
</div>
|
|
<?php } else if (empty($_SESSION["loggedin"])) { ?>
|
|
<div class="text-center">
|
|
<h3><?php tl($lang["groupassigner"]["entercode"]) ?></h3>
|
|
<form method="post">
|
|
<div class="row">
|
|
<div class="col-md-6 col-md-offset-3">
|
|
<div class="input-group">
|
|
<input name="logincode" type="number" class="form-control" placeholder="<?php tl($lang["groupassigner"]["logincode"]) ?>" required autofocus autocomplete="off">
|
|
<span class="input-group-btn">
|
|
<button class="btn btn-info">
|
|
<i class="fa fa-arrow-right" style="margin: 0" aria-hidden="true"></i>
|
|
</button>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<?php if(isset($failedlogin)) { ?>
|
|
<div class="alert alert-danger" style="display: inline-block; margin-top: 15px">
|
|
<?php tl($lang["groupassigner"]["failedlogin"]) ?>
|
|
</div>
|
|
<?php } ?>
|
|
</div>
|
|
<?php } else { ?>
|
|
<form method="post">
|
|
<?php foreach ($assignerconfig as $item) { ?>
|
|
<div class="ga-group">
|
|
<p class="group-label">
|
|
<?php echo $item["name"] ?><span class="label label-info pull-right"><?php tl($lang["groupassigner"]["limit"], [$item["limit"]]) ?></span>
|
|
</p>
|
|
|
|
<select name="sgs[]" class="selectpicker" multiple data-live-search="true" data-max-options="<?php echo $item["limit"] ?>" data-width="100%">
|
|
<?php
|
|
foreach ($item["sgids"] as $sgid) {
|
|
if (!isset($servergroups[$sgid])) continue;
|
|
|
|
$sg = $servergroups[$sgid];
|
|
$name = (string)$sg["name"];
|
|
$icon = $tsAdmin->serverGroupGetById($sgid)->iconDownload();
|
|
$iconhtml = '';
|
|
|
|
if ($icon)
|
|
$iconhtml = 'data:' . TeamSpeak3_Helper_Convert::imageMimeType($icon) . ';base64,' . base64_encode($icon);
|
|
?>
|
|
<option value="<?php echo $sgid ?>" data-content="<img class='ga-icon' src='<?php echo $iconhtml ?>'></img> <?php echo $name ?>"></option>
|
|
<?php } ?>
|
|
</select>
|
|
</div>
|
|
<?php } ?>
|
|
<input name="submitted" value="true" hidden>
|
|
<button class="btn btn-primary btn-block" style="margin-top: 3rem"><i class="fa fa-floppy-o" aria-hidden="true"></i> <?php tl($lang["groupassigner"]["save"]) ?></button>
|
|
</form>
|
|
<?php } ?>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
require_once __DIR__ . "/include/footer.php";
|
|
?>
|
|
|
|
<script>
|
|
$('.selectpicker').selectpicker('val', <?php echo json_encode($clientgroups) ?>);
|
|
</script>
|