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.
TS-Website/assigner.php

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>