Add TS3 icon sync to the installer

This commit is contained in:
Wruczek 2020-10-06 23:58:29 +02:00
parent d93bff9634
commit c317ac3614
2 changed files with 146 additions and 94 deletions

View File

@ -36,9 +36,10 @@ $pageContent = ob_get_clean();
<title>Step <?= $stepNumber ?> | TS-website 2.0 Installer</title> <title>Step <?= $stepNumber ?> | TS-website 2.0 Installer</title>
<!-- Bootswatch Lumen 4.1.3 --> <!-- Bootswatch Lumen 4.5.2 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.1.3/lumen/bootstrap.min.css" <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.5.2/lumen/bootstrap.min.css"
integrity="sha256-S3sZnj5Uxoan2Z6rfF8V+lCFpdDl06yG+3aem63aLmE=" crossorigin="anonymous"> integrity="sha512-dp4Bf44EU9Q91+7N3SgcqZXhScQ+4T1vHwE1Uz5nPsr7Kl63wDa84/mN3LjwKthmK8GAw6rcJjeLq1Sp8dM3cg=="
crossorigin="anonymous">
<!-- Bootstrap nav wizard --> <!-- Bootstrap nav wizard -->
<link rel="stylesheet" <link rel="stylesheet"
@ -57,13 +58,10 @@ $pageContent = ob_get_clean();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script> integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<!-- Popper UMD 1.13.0 JS --> <!-- Bootstrap 4.5.2 JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.13.0/umd/popper.min.js" <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/js/bootstrap.bundle.js"
integrity="sha256-pS96pU17yq+gVu4KBQJi38VpSuKN7otMrDQprzf/DWY=" crossorigin="anonymous"></script> integrity="sha512-VgXiNYfIwR3cDfXZNpuFfYfFGQG5x2kbcxemIWrNcRo/Z4zv1H1O+vBWuaG2cGLH9L66SRz7a/aHnwlpIlvUuQ=="
crossorigin="anonymous"></script>
<!-- Bootstrap 4.1.3 JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"
integrity="sha256-VsEqElsCHSGmnmHXGQzvoWjWwoznFSZc6hs7ARLRacQ=" crossorigin="anonymous"></script>
</head> </head>
<body> <body>

View File

@ -2,6 +2,8 @@
if(!defined("__TSWEBSITE_VERSION")) die("Direct access not allowed"); if(!defined("__TSWEBSITE_VERSION")) die("Direct access not allowed");
use Wruczek\TSWebsite\Config; use Wruczek\TSWebsite\Config;
use Wruczek\TSWebsite\ServerIconCache;
use Wruczek\TSWebsite\Utils\ApiUtils;
if (!empty($_POST)) { if (!empty($_POST)) {
$queryhostname = trim($_POST["queryhostname"]); $queryhostname = trim($_POST["queryhostname"]);
@ -35,12 +37,14 @@ if (!empty($_POST)) {
]; ];
foreach ($configdata as $key => $value) { foreach ($configdata as $key => $value) {
if(!$utils->setValue($key, $value)) { try {
die("Error while inserting query data to database, at " . htmlspecialchars($key) . " => " . htmlspecialchars($value)); $utils->setValue($key, $value);
} catch (\Exception $e) {
die("Error while updating config in database, at " . htmlspecialchars($key) . " => " . htmlspecialchars($value));
} }
} }
header("Location: ?step=" . ($stepNumber + 1)); $cacheIcons = true;
} else { } else {
$errormessage .= '<br>Cannot retrieve server information'; $errormessage .= '<br>Cannot retrieve server information';
} }
@ -58,6 +62,21 @@ if (!empty($_POST)) {
} }
} }
} }
if (isset($_GET["syncicons"])) {
require_once __PRIVATE_DIR . "/vendor/autoload.php";
set_time_limit(0); // this might take a while
try {
ServerIconCache::syncIcons();
ApiUtils::jsonSuccess();
} catch (\Exception $e) {
ApiUtils::jsonError($e->getMessage(), $e->getCode());
}
exit;
}
?> ?>
<!-- Modal --> <!-- Modal -->
@ -95,96 +114,131 @@ if (!empty($_POST)) {
</div> </div>
<?php } ?> <?php } ?>
<div class="card"> <?php if(isset($cacheIcons)) { ?>
<div class="card-body"> <div class="text-center">
<h4 class="card-title text-center">Query details</h4> <div class="alert alert-primary" style="display: inline-block">
<div class="d-flex align-items-center">
<div class="row justify-content-md-center"> <div class="spinner-border spinner-border-sm mr-2" role="status">
<form id="tsform" class="col-md-4" method="post" action="<?= "?step=$stepNumber" ?>"> <span class="sr-only">Loading...</span>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-link fa-fw"></i></span>
</div>
<input class="form-control" name="queryhostname" placeholder="Hostname" required autofocus autocomplete="off">
<div class="input-group-append">
<span class="input-group-text" data-toggle="tooltip" title="Your TeamSpeak IP address (without port).<br>Use '127.0.0.1' for localhost">
<i class="fa fa-question-circle fa-fw"></i>
</span>
</div>
</div> </div>
Caching icons from the TS3 server, please wait...
<div class="row"> </div>
<div class="col input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-signal fa-fw"></i></span>
</div>
<input type="number" class="form-control" name="queryport" placeholder="Query port" required autocomplete="off">
</div>
<div class="col input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-signal fa-fw"></i></span>
</div>
<input type="number" class="form-control" name="queryserverport" placeholder="Server port" required autocomplete="off">
</div>
</div>
<p class="text-muted text-center" style="font-size: 100%">
Default query port: 10011, default server port: 9987.
</p>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-user fa-fw"></i></span>
</div>
<input class="form-control" name="queryusername" placeholder="Query username" required autocomplete="off">
<div class="input-group-append">
<span class="input-group-text" data-toggle="tooltip" title="Its recommended to create special user account instead of serveradmin">
<i class="fa fa-exclamation-triangle color-danger fa-fw"></i>
</span>
</div>
</div>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-lock fa-fw"></i></span>
</div>
<input type="password" class="form-control" name="querypassword" placeholder="Query password" required autocomplete="off">
</div>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-font fa-fw"></i></span>
</div>
<input class="form-control" name="querydisplayip" placeholder="Displayed address" required autocomplete="off">
<div class="input-group-append">
<span class="input-group-text" data-toggle="tooltip"
title="Friendly server address displayed to end users.<br>For example 'myserver.com' or 'ts.myclan.net'">
<i class="fa fa-question-circle fa-fw"></i>
</span>
</div>
</div>
<a href="#" data-toggle="modal" data-target="#queryperms" class="text-center">
<p>Query permissions required by TS-website</p>
</a>
<button id="submitform" type="submit" style="display: none"></button>
</form>
</div> </div>
</div> </div>
<div class="card-footer text-right"> <?php } else { ?>
<a href="#" id="submitformalt" class="btn btn-primary float-right"> <div class="card">
Submit <i class="fas fa-chevron-right"></i>
</a> <div class="card-body">
<h4 class="card-title text-center">Query details</h4>
<div class="row justify-content-md-center">
<form id="tsform" class="col-md-4" method="post" action="<?= "?step=$stepNumber" ?>">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-link fa-fw"></i></span>
</div>
<input class="form-control" name="queryhostname" placeholder="Hostname" required autofocus autocomplete="off">
<div class="input-group-append">
<span class="input-group-text" data-toggle="tooltip" title="Your TeamSpeak IP address (without port).<br>Use '127.0.0.1' for localhost">
<i class="fa fa-question-circle fa-fw"></i>
</span>
</div>
</div>
<div class="row">
<div class="col input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-signal fa-fw"></i></span>
</div>
<input type="number" class="form-control" name="queryport" placeholder="Query port" required autocomplete="off">
</div>
<div class="col input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-signal fa-fw"></i></span>
</div>
<input type="number" class="form-control" name="queryserverport" placeholder="Server port" required autocomplete="off">
</div>
</div>
<p class="text-muted text-center" style="font-size: 100%">
Default query port: 10011, default server port: 9987.
</p>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-user fa-fw"></i></span>
</div>
<input class="form-control" name="queryusername" placeholder="Query username" required autocomplete="off">
<div class="input-group-append">
<span class="input-group-text" data-toggle="tooltip" title="Its recommended to create special user account instead of serveradmin">
<i class="fa fa-exclamation-triangle color-danger fa-fw"></i>
</span>
</div>
</div>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-lock fa-fw"></i></span>
</div>
<input type="password" class="form-control" name="querypassword" placeholder="Query password" required autocomplete="off">
</div>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-font fa-fw"></i></span>
</div>
<input class="form-control" name="querydisplayip" placeholder="Displayed address" required autocomplete="off">
<div class="input-group-append">
<span class="input-group-text" data-toggle="tooltip"
title="Friendly server address displayed to end users.<br>For example 'myserver.com' or 'ts.myclan.net'">
<i class="fa fa-question-circle fa-fw"></i>
</span>
</div>
</div>
<a href="#" data-toggle="modal" data-target="#queryperms" class="text-center">
<p>Query permissions required by TS-website</p>
</a>
<button id="submitform" type="submit" style="display: none"></button>
</form>
</div>
</div>
<div class="card-footer text-right">
<a href="#" id="submitformalt" class="btn btn-primary float-right">
Submit <i class="fas fa-chevron-right"></i>
</a>
</div>
</div> </div>
</div>
<?php } ?>
<script> <script>
$("#submitformalt").click(function () { $("#submitformalt").click(function () {
$("#submitform").click(); $("#submitform").click();
}); });
</script> </script>
<?php if(isset($cacheIcons)) { ?>
<script>
$.ajax({
data: { syncicons: 1 },
success: function (res) {
if (!res.success) {
alert("An error occurred while trying to sync TS3 icons: " + JSON.stringify(res))
}
location = "?step=5"
},
error: function () {
alert("An error occurred while trying to sync TS3 icons")
location = "?step=5"
}
})
</script>
<?php } ?>