parent
eb98e539c6
commit
74e84a6207
@ -0,0 +1,211 @@
|
||||
<?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>
|
Loading…
Reference in new issue