<?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>