Сборка REDL: панель на PHP 8, капча-тумблер, закрытые уязвимости, установщики в один клик
- панель работает на PHP 8.4 (оригинал под PHP 7.0): elFinder utf8_encode, apache_get_modules, warnings - капча выключена и управляется из админки (флаг captcha_enable + блок настроек) - закрыты две SQL-инъекции без авторизации (createAuthLog: пароль из POST и CF-Connecting-IP) - убрано хранение паролей в открытом виде в authlog, XSS в поле ref - установщики install-panel.sh и install-node.sh (оригинальный затирал sources.list репозиториями Debian 9) - современный Dockerfile (оригинальный на debian:stretch больше не собирается) - планировщик и автозапуск работают без systemd - брендинг REDL.IO, год 2026, ссылки на redl.io - документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<?php foreach($mods as $item):?>
|
||||
<?php if($server['game_id'] == $item['game_id']): ?>
|
||||
<div class="col-xl-4">
|
||||
<div class="card card-custom gutter-b">
|
||||
<div class="card-header border-0 pt-5 text-center">
|
||||
<h3 class="card-title font-weight-bolder"><?php echo $item['mod_name']?></h3>
|
||||
</div>
|
||||
<div class="card-body d-flex flex-column">
|
||||
<div class="flex-grow-1 text-center">
|
||||
<img src="<?php echo $item['mod_img'] ?>" alt="" class="mw-100 w-200px">
|
||||
</div>
|
||||
<div class="pt-5">
|
||||
<div class="mb-5" data-scroll="true" data-height="70">
|
||||
<p class="text-center font-weight-normal font-size-lg pb-7"><?php echo $item['mod_textx']?></p>
|
||||
</div>
|
||||
<hr>
|
||||
<?php if($item['mod_price'] > 0): ?>
|
||||
<?php foreach($usermods as $mod): ?>
|
||||
<? if($mod['mod_id'] == $item['mod_id']) $item['free_mode'] = 1; ?>
|
||||
<?php endforeach; ?>
|
||||
<? if($item['free_mode'] == 1): ?>
|
||||
<button type="submit" onClick="sendAction(<?php echo $server['server_id'] ?>,'<?echo $item['mod_id']?>')" class="btn btn-light-primary btn-shadow-hover font-weight-bolder w-100 py-3" data-toggle="tooltip" data-placement="right"data-original-title="Товар куплен">Установить</button>
|
||||
<? else: ?>
|
||||
<button type="submit" onClick="sendAction(<?php echo $server['server_id'] ?>,'<?echo $item['mod_id']?>')" class="btn btn-primary btn-shadow-hover font-weight-bolder w-100 py-3">Купить за <?php echo $item['mod_price']?> RUB.</button>
|
||||
<?php endif;?>
|
||||
<?php elseif($item['mod_price'] == 0): ?>
|
||||
<button type="submit" onClick="sendAction(<?php echo $server['server_id'] ?>,'<?echo $item['mod_id']?>')" class="btn btn-primary btn-shadow-hover font-weight-bolder w-100 py-3">Установить</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($mods)): ?>
|
||||
<div class="col-xl-12 col-xxl-12">
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент список пуст.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="ki ki-close"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function sendAction(serverid, action) {
|
||||
$.ajax({
|
||||
url: '/servers/autoinstall/action/'+serverid+'/'+action,
|
||||
type: 'POST',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.info(data.success);
|
||||
$.ajax({
|
||||
url: '/servers/control/action/'+serverid+"/start",
|
||||
dataType: 'text',
|
||||
success: function(data){
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success("Сервер успешно был запущен!");
|
||||
setTimeout("location.replace('/servers/control/index/<?php echo $server['server_id'] ?>')", 1500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSend: function(arr, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
<?php foreach($mods as $item): ?>
|
||||
if(action == "<?echo $item['mod_id']?>") toastr.warning("Идет установка <?echo $item['mod_name']?>, пожалуйста, подождите...");
|
||||
<?endforeach;?>
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<form id="configEdit" method="POST">
|
||||
<textarea name="config" style="border: 6px solid #121921; border-radius:10px; color: #FFF; background-color: #121921;min-width: 100%; max-width: 100%; min-height: 400px; margin-bottom: 10px;"><?php echo $config ?></textarea>
|
||||
<button type="submit" class="btn btn-primary">Сохранить</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$('#configEdit').ajaxForm({
|
||||
url: '/servers/config/send_config/<?php echo $server['server_id'] ?>',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?echo $footer?>
|
||||
@@ -0,0 +1,298 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-3">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<div class="text-center">
|
||||
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
|
||||
<div class="symbol-label">
|
||||
<i class="fa fa-terminal icon-3x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="font-weight-bolder my-2">Консоль</h4>
|
||||
<div class="text-center font-weight-bold mb-2">
|
||||
<div class="card card-body" style="margin-bottom: 0rem;padding: 1rem;">
|
||||
<div class="form-group" style="margin-bottom: 0rem;">
|
||||
<div class="checkbox-list">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" checked id="autoscroll">
|
||||
<span></span>
|
||||
Автообновление
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
|
||||
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#colorCMD" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-clone"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Сменить дизайн</span>
|
||||
</a>
|
||||
</div>
|
||||
<?if($server['game_query'] == 'samp'):?>
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#infoCMD" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Доступные команды</span>
|
||||
</a>
|
||||
</div>
|
||||
<?endif;?>
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" onclick="clearConsole()" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="flaticon2-rubbish-bin"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Очистить консоль</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-9">
|
||||
<div class="card card-custom gutter-b">
|
||||
<div class="card-body">
|
||||
<textarea style="<?php echo $theme ?>" disabled="" class="form-control console" id="console_data">Получение данных...</textarea>
|
||||
<form class="form-inline" role="form" method='POST' id="console_form" action="" >
|
||||
<div class="input-group" style="width: 100%;">
|
||||
<input type="text" class="form-control" id="cmd" name="cmd" placeholder="Введите команду...">
|
||||
<div class="input-group-append">
|
||||
<button type="submit" class="btn btn-primary btn-icon" data-toggle="tooltip" title="" data-placement="right" data-original-title="Отправить"><i class="fa fa-terminal"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="subheader__wrapper">
|
||||
<?php if($server['game_query'] == "samp"): ?>
|
||||
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
|
||||
./server_log.txt
|
||||
</a>
|
||||
<a href="/servers/console/index/<?php echo $server['server_id'] ?>?open=screenlog" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
|
||||
./screenlog.0
|
||||
</a>
|
||||
<?php elseif($server['game_query'] == "mtasa"): ?>
|
||||
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
|
||||
./mods/deathmatch/logs/server.log
|
||||
</a>
|
||||
<?php elseif($server['game_code'] == "mcpe"): ?>
|
||||
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
|
||||
./server.log
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a href="/servers/console/index/<?php echo $server['server_id'] ?>" class="btn btn-default font-weight-bold px-1 py-1 mr-2">
|
||||
./screenlog.0
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="infoCMD" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Доступные команды</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<code>cmdlist</code> - Показать список RCON команд<br>
|
||||
<code>varlist</code> - Посмотреть список текущих настроек<br>
|
||||
<code>kick [ID]</code> - Кикнуть пользователя по его ID (Пример: kick 3)<br>
|
||||
<code>ban [ID]</code> - Забанить пользователя по его ID (Пример: ban 3)<br>
|
||||
<code>banip [IP]</code> - Забанить IP (Пример: banip 127.0.0.1)<br>
|
||||
<code>unbanip [IP]</code> - Разбанить IP (Пример: unbanip 127.0.0.1)<br>
|
||||
<code>reloadbans</code> - Перезагрузить samp.ban<br>
|
||||
<code>reloadlog</code> - Очистить лог сервера<br>
|
||||
<code>exec [имя файла]</code> - Открыть файл .cfg (Пример: exec blah.cfg)<br>
|
||||
<code>say [текст]</code> - Сказать в общий чат от лица админа (Пример: say Hello)<br>
|
||||
<code>players</code> - Показать всех игроков на сервере с их именами, ip и пингом<br>
|
||||
<code>gravity</code> - Изменить гравитацию на сервере - (Пример: gravity 0.008)<br>
|
||||
<code>weather [ID]</code> - Изменить погоду на сервере (Пример: weather 2)<br>
|
||||
<code>worldtime [время]</code> - Изменить время на сервере (Пример: worldtime 2)<br>
|
||||
<code>maxplayers</code> - Изменить макс. количество мест на сервере<br>
|
||||
<code>timestamp</code> - Установить часовой пояс<br>
|
||||
<code>plugins</code> - Посмотреть список всех установленных плагинов<br>
|
||||
<code>filterscripts</code> - Посмотреть список всех установленных фильтрскриптов<br>
|
||||
<code>loadfs [название]</code> - Загрузить фильтрскрипт<br>
|
||||
<code>unloadfs [название]</code> - Выгрузить фильтрскрипт<br>
|
||||
<code>reloadfs [название]</code> - Перезагрузить фильтрскрипт<br>
|
||||
<code>password [пароль]</code> - Установить пароль на сервере<br>
|
||||
<code>changemode [название]</code> - Изменить режим игры на сервере на заданный<br>
|
||||
<code>gmx</code> - Рестарт сервера<br>
|
||||
<code>hostname [название]</code> - Изменить название сервера<br>
|
||||
<code>gamemodetext [название]</code> - Изменить название мода<br>
|
||||
<code>mapname [название]</code> - Изменить название карты<br>
|
||||
<code>gamemode [1-15]</code> - Установить порядок гэйм-модов<br>
|
||||
<code>instagib [bool]</code> - Включить функцию убийства с одной пули (1 или 0)<br>
|
||||
<code>lanmode [bool]</code> - Установить LAN (1 или 0)<br>
|
||||
<code>version</code> - Посмотреть версию сервера<br>
|
||||
<code>weburl [url]</code> - Установить url сайта на сервере<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="colorCMD" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Смена дизайна</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row row-paddingless">
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onclick="sendAction('default')" class="d-block py-10 px-5 text-center bg-hover-light border-right border-bottom">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Default</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onclick="sendAction('Amethyst')" class="d-block py-10 px-5 text-center bg-hover-light border-bottom">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Amethyst</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onclick="sendAction('City')" class="d-block py-10 px-5 text-center bg-hover-light border-right">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема City</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onclick="sendAction('Flat')" class="d-block py-10 px-5 text-center bg-hover-light">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Flat</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onclick="sendAction('Modern')" class="d-block py-10 px-5 text-center bg-hover-light">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Modern</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onclick="sendAction('Smooth')" class="d-block py-10 px-5 text-center bg-hover-light">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Smooth</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<script>
|
||||
$('#console_form').ajaxForm({
|
||||
url: '/servers/console/sendconsole/<?php echo $server['server_id'] ?>',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
document.getElementById("cmd").value = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function clearConsole() {
|
||||
$.ajax({
|
||||
url: '/servers/console/clearcon/<?php echo $server['server_id'] ?>',
|
||||
type: 'POST',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setInterval(function() {
|
||||
var autoscroll = document.getElementById("autoscroll");
|
||||
if (autoscroll.checked == true) {
|
||||
$.get("/servers/console/getconsole/<?php echo $server['server_id'] ?>/<?php echo $fileid ?>")
|
||||
.done(function (data) {
|
||||
var console = document.getElementById("console_data");
|
||||
console.innerHTML = data;
|
||||
console.scrollTop = console.scrollHeight;
|
||||
});
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
function sendAction(action) {
|
||||
$.ajax({
|
||||
url: '/servers/console/action_theme_console/'+action,
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,178 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-3">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<div class="text-center">
|
||||
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
|
||||
<div class="symbol-label">
|
||||
<i class="fa fa-user-shield icon-3x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="font-weight-bolder my-2">Firewall</h4>
|
||||
<div class="text-center font-weight-bold mb-2">
|
||||
Блокировка ip адресов
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
|
||||
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#firewallinfo" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-exclamation-circle"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Информация</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-9">
|
||||
<div class="card card-custom mb-2">
|
||||
<div class="card-body">
|
||||
<form id="addForm" method="POST" style="padding:0px; margin:0px;">
|
||||
<div class="input-group" style="width: 100%;">
|
||||
<input type="text" class="form-control" id="address" name="address" placeholder="Введите IP адрес...">
|
||||
<div class="input-group-append">
|
||||
<button type="submit" class="btn btn-primary btn-icon" data-toggle="tooltip" title="" data-placement="right" data-original-title="Добавить"><i class="fas fa-plus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<?php foreach($Firewalls as $item): ?>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title"><?php echo $item['server_ip'] ?><small class="text-muted font-size-sm ml-2"><?php echo $item['firewall_add'] ?></small></h3>
|
||||
<div class="card-toolbar">
|
||||
<a href="javascript:;" onclick="sendAction('delete', <?php echo $item['firewall_id'] ?>)" class="btn btn-clean btn-icon">
|
||||
<i class="fa fa-times" data-toggle="tooltip" data-placement="right" title="" data-original-title="Разблокировать IP"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($Firewalls)): ?>
|
||||
<div class="col-xl-12">
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент список пуст.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="ki ki-close"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="firewallinfo" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Информация</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Firewall - это гарантированная защита Вашего сервера от нежелательных гостей. Он позволяет ограничить доступ определенным лицам по IP-адресу прямо из Панели управления. В отличие от бана в игре, такая блокировка полностью фильтрует весь трафик с данного IP-адреса.
|
||||
</p>
|
||||
<hr>
|
||||
<h6 class="alert-heading">Примеры для блокировки IP</h6>
|
||||
<p>
|
||||
1.1.1.1 - Одиночный IP адрес<br>
|
||||
1.1.1.0/24 - Сеть из 256 адресов (с 1.1.1.1 по 1.1.1.255)<br>
|
||||
1.1.1.0/255.255.255.0 - Сеть из 256 адресов (с 1.1.1.1 по 1.1.1.255)<br>
|
||||
1.1.0.0/16 - Сеть из 65536 адресов (с 1.1.1.1 по 1.1.255.255)<br>
|
||||
1.1.0.0/255.255.0.0 - Сеть из 65536 адресов (с 1.1.1.1 по 1.1.255.255)
|
||||
</p>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<script>
|
||||
$('#addForm').ajaxForm({
|
||||
url: '/servers/firewall/ajax/<?php echo $server['server_id'] ?>',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
|
||||
function sendAction(action, firewallid) {
|
||||
switch(action) {
|
||||
case "delete":
|
||||
{
|
||||
if(!confirm("Вы уверенны в том, что хотите разблокировать IP адрес?")) return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$.ajax({
|
||||
url: '/servers/firewall/action/'+action+'/<?php echo $server['server_id'] ?>/'+firewallid,
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,300 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-3">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<div class="text-center">
|
||||
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
|
||||
<div class="symbol-label">
|
||||
<i class="fa fa-server icon-5x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="font-weight-bolder my-2">FTP Online</h4>
|
||||
<div class="text-muted font-weight-bold mb-2"><?php echo $server['location_name'] ?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
|
||||
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#ftpdiz" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-clone"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Сменить дизайн</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="navi-item my-2">
|
||||
<a href="http://filezilla.ru/get/" target="_blank" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-external-link-alt"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Скачать FTP Клиент</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-9">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">Адрес для доступа по протоколу FTP<small class="text-muted font-size-sm ml-2"><?php echo $server['location_ip'] ?></small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">FTP Порт<small class="text-muted font-size-sm ml-2">21</small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">Имя пользователя<small class="text-muted font-size-sm ml-2">gs<?php echo $server['server_id'] ?></small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">Пароль пользователя<small class="text-muted font-size-sm ml-2"><?php echo $server['server_password'] ?></small></h3>
|
||||
<div class="card-toolbar">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#ftppass" class="btn btn-clean btn-icon">
|
||||
<i class="fas fa-cogs" data-toggle="tooltip" data-placement="right" title="" data-original-title="Изменить"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom gutter-b">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h3 class="card-label">Онлайн клиент</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="elfinder"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="ftppass" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Изменить пароль FTP</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<form id="editForm" method="POST" style="padding:0px; margin:0px;">
|
||||
<div class="modal-body">
|
||||
<div class="card card-body" style="margin-bottom: 1rem;padding: 1rem;">
|
||||
<div class="form-group" style="margin-bottom: 0rem;">
|
||||
<div class="checkbox-list">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" id="editpassword" name="editpassword" onchange="togglePassword()">
|
||||
<span></span>
|
||||
Сменить пароль FTP
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Пароль</label>
|
||||
<input class="form-control" id="password" name="password" placeholder="Пароль" disabled="">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Повторите пароль</label>
|
||||
<input class="form-control" id="password2" name="password2" placeholder="Повторите пароль" disabled="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer" style="padding: 0.5rem;">
|
||||
<button type="button" class="btn btn-light-primary font-weight-bold" data-dismiss="modal">Отмена</button>
|
||||
<button type="submit" class="btn btn-primary font-weight-bold">Сохранить</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="ftpdiz" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Смена дизайна</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row row-paddingless">
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onClick="sendAction_theme('default')" class="d-block py-10 px-5 text-center bg-hover-light border-right border-bottom">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Default</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onClick="sendAction_theme('material')" class="d-block py-10 px-5 text-center bg-hover-light border-right">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Material</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onClick="sendAction_theme('materialgray')" class="d-block py-10 px-5 text-center bg-hover-light">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Material gray</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<a href="javascript:;" onClick="sendAction_theme('materiallight')" class="d-block py-10 px-5 text-center bg-hover-light">
|
||||
<i class="flaticon2-drop text-primary icon-3x"></i>
|
||||
<span class="d-block text-dark-75 font-weight-bold font-size-h6 mt-2 mb-1">Тема Material light</span>
|
||||
<span class="d-block text-dark-50 font-size-lg">Применить</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
var myCommands = elFinder.prototype._options.commands;
|
||||
var disabled = ['resize', 'help', 'select'];
|
||||
$.each(disabled, function (i, cmd) {
|
||||
(idx = $.inArray(cmd, myCommands)) !== -1 && myCommands.splice(idx, 1); });
|
||||
var selectedFile = null;
|
||||
var options = {
|
||||
url: '/servers/ftp/getftp/<?php echo $server['server_id'] ?>',
|
||||
rememberLastDir: false,
|
||||
commands: myCommands,
|
||||
lang: 'ru',
|
||||
uiOptions: {
|
||||
toolbar: [ ['back', 'forward'], ['reload'], ['home', 'up'], ['mkdir', 'mkfile', 'upload'], ['open', 'download'], ['info'], ['quicklook'], ['copy', 'cut', 'paste'], ['rm'], ['duplicate', 'rename', 'edit','extract', 'archive'], ['view', 'sort'] ]
|
||||
},
|
||||
handlers: {
|
||||
select: function (event, elfinderInstance) {
|
||||
if (event.data.selected.length == 1) {
|
||||
var item = $('#' + event.data.selected[0]);
|
||||
if (!item.hasClass('directory')) {
|
||||
selectedFile = event.data.selected[0];
|
||||
$('#elfinder-selectFile').show(); return;
|
||||
}
|
||||
}
|
||||
$('#elfinder-selectFile').hide(); selectedFile = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
$('#elfinder').elfinder(options).elfinder('instance');
|
||||
$('.elfinder-toolbar:first').append('<div class="ui-widget-content ui-corner-all elfinder-buttonset" id="elfinder-selectFile" style="display:none; float:right;">'+ '<div class="ui-state-default elfinder-button" title="Select" style="width: 100px;"></div>');
|
||||
$('#elfinder-selectFile').click(function () {
|
||||
if (selectedFile != null)
|
||||
$.post('file/selectFile', {
|
||||
target: selectedFile
|
||||
},
|
||||
function (response) {
|
||||
alert(response);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<audio style="display: none;">
|
||||
<source src="/application/public/sounds/rm.wav" type="audio/wav">
|
||||
</audio>
|
||||
<script src="/application/public/js/elfinder.min.js"></script>
|
||||
<script src="/application/public/js/i18n/elfinder.ru.js"></script>
|
||||
<script src="/application/public/js/jquery-ui.min.js" type="text/javascript"></script>
|
||||
<link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/smoothness/jquery-ui.css">
|
||||
<link rel="stylesheet" type="text/css" href="/application/public/css/elfinder.full.css">
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $theme ?>">
|
||||
<script>
|
||||
function sendAction_theme(action) {
|
||||
$.ajax({
|
||||
url: '/servers/ftp/action_theme_ftp/'+action,
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 2500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
$('#editForm').ajaxForm({
|
||||
url: '/servers/ftp/ajax/<?php echo $server['server_id'] ?>',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
|
||||
function togglePassword() {
|
||||
var status = $('#editpassword').is(':checked');
|
||||
if(status) {
|
||||
$('#password').prop('disabled', false);
|
||||
$('#password2').prop('disabled', false);
|
||||
} else {
|
||||
$('#password').prop('disabled', true);
|
||||
$('#password2').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header ?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<?php foreach($servers as $item): ?>
|
||||
<div class="col-lg-6 mb-10">
|
||||
<div class="card card-custom wave mb-2 bg-light-<?php if($item['server_status'] == 0): ?>warning
|
||||
<?php elseif($item['server_status'] == 1): ?>danger
|
||||
<?php elseif($item['server_status'] == 2): ?>success
|
||||
<?php elseif($item['server_status'] == 3): ?>primary
|
||||
<?php elseif($item['server_status'] == 4 || $item['server_status'] == 5 || $item['server_status'] == 6 || $item['server_status'] == 7): ?>info
|
||||
<?php endif; ?>">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center justify-content-between p-4 flex-lg-wrap flex-xl-nowrap">
|
||||
<div class="d-flex flex-column mr-5">
|
||||
<a href="/servers/control/index/<?php echo $item['server_id'] ?>" class="h4 text-dark text-hover-primary mb-5"><?php echo $item['location_ip2'] ?>:<?php echo $item['server_port'] ?><small class="text-muted font-size-sm ml-2">ID <?php echo $item['server_id'] ?></small></a>
|
||||
<p class="text-dark-50"><?php echo $item['game_name'] ?></p>
|
||||
</div>
|
||||
<div class="ml-6 ml-lg-0 ml-xxl-6 flex-shrink-0">
|
||||
<?php if($item['server_status'] == 1): ?>
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $item['server_id'] ?>,'start')" class="btn btn-icon btn-success" data-toggle="tooltip" title="Запустить">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-light" data-toggle="tooltip" title="Сервер должен быть включен!">
|
||||
<i class="fa fa-redo"></i>
|
||||
</a>
|
||||
<?php elseif($item['server_status'] == 2): ?>
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $item['server_id'] ?>,'stop')" class="btn btn-icon btn-danger" data-toggle="tooltip" title="Остановить">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $item['server_id'] ?>,'restart')" class="btn btn-icon btn-info" data-toggle="tooltip" title="Перезапустить">
|
||||
<i class="fa fa-redo"></i>
|
||||
</a>
|
||||
<?php elseif($item['server_status'] == 0 || $item['server_status'] == 3 || $item['server_status'] == 4 || $item['server_status'] == 5 || $item['server_status'] == 6 || $item['server_status'] == 7): ?>
|
||||
<a href="javascript:;" class="btn btn-icon btn-light" data-toggle="tooltip" title="Вы не можете использовать это действие!">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-light" data-toggle="tooltip" title="Вы не можете использовать это действие!">
|
||||
<i class="fa fa-redo"></i>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<a href="/servers/control/index/<?php echo $item['server_id'] ?>" class="btn btn-icon btn-primary" data-toggle="tooltip" title="Перейти">
|
||||
<i class="fa fa-sign-in-alt"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach($serversOwners as $item): ?>
|
||||
<div class="col-lg-6 mb-10">
|
||||
<div class="card card-custom wave mb-2 bg-light-<?php if($item['server_status'] == 0): ?>warning
|
||||
<?php elseif($item['server_status'] == 1): ?>danger
|
||||
<?php elseif($item['server_status'] == 2): ?>success
|
||||
<?php elseif($item['server_status'] == 3): ?>primary
|
||||
<?php elseif($item['server_status'] == 4 || $item['server_status'] == 5 || $item['server_status'] == 6 || $item['server_status'] == 7): ?>info
|
||||
<?php endif; ?>">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-center justify-content-between p-4 flex-lg-wrap flex-xl-nowrap">
|
||||
<div class="d-flex flex-column mr-5">
|
||||
<a href="/servers/control/index/<?php echo $item['server_id'] ?>" class="h4 text-dark text-hover-primary mb-5"><?php echo $item['location_ip2'] ?>:<?php echo $item['server_port'] ?><small class="text-muted font-size-sm ml-2">ID <?php echo $item['server_id'] ?></small></a>
|
||||
<p class="text-dark-50"><?php echo $item['game_name'] ?></p>
|
||||
</div>
|
||||
<div class="ml-6 ml-lg-0 ml-xxl-6 flex-shrink-0">
|
||||
<?php if($item['server_status'] == 1): ?>
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $item['server_id'] ?>,'start')" class="btn btn-icon btn-success" data-toggle="tooltip" title="Запустить">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-light" data-toggle="tooltip" title="Сервер должен быть включен!">
|
||||
<i class="fa fa-redo"></i>
|
||||
</a>
|
||||
<?php elseif($item['server_status'] == 2): ?>
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $item['server_id'] ?>,'stop')" class="btn btn-icon btn-danger" data-toggle="tooltip" title="Остановить">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $item['server_id'] ?>,'restart')" class="btn btn-icon btn-info" data-toggle="tooltip" title="Перезапустить">
|
||||
<i class="fa fa-redo"></i>
|
||||
</a>
|
||||
<?php elseif($item['server_status'] == 0 || $item['server_status'] == 3 || $item['server_status'] == 4 || $item['server_status'] == 5 || $item['server_status'] == 6 || $item['server_status'] == 7): ?>
|
||||
<a href="javascript:;" class="btn btn-icon btn-light" data-toggle="tooltip" title="Вы не можете использовать это действие!">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-light" data-toggle="tooltip" title="Вы не можете использовать это действие!">
|
||||
<i class="fa fa-redo"></i>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<a href="/servers/control/index/<?php echo $item['server_id'] ?>" class="btn btn-icon btn-primary" data-toggle="tooltip" title="Перейти">
|
||||
<i class="fa fa-sign-in-alt"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($servers) and empty($serversOwners)): ?>
|
||||
<div class="col-xl-12 col-xxl-12">
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент у вас нет серверов.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="ki ki-close"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php echo $pagination ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function sendAction(serverid, action) {
|
||||
$.ajax({
|
||||
url: '/servers/index/action/'+serverid+'/'+action,
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSend: function(arr, options) {
|
||||
toastr.warning("Ваш запрос обрабатывается, пожалуйста, подождите...");
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-3">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<div class="text-center">
|
||||
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
|
||||
<div class="symbol-label">
|
||||
<i class="fa fa-database icon-5x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="font-weight-bolder my-2">PHPMyAdmin</h4>
|
||||
<div class="text-muted font-weight-bold mb-2"><?if($server['server_mysql'] == 1):?>
|
||||
Пользователь активен
|
||||
<?elseif($server['server_mysql'] == 0):?>
|
||||
Пользователь не создан
|
||||
<?elseif($server['server_mysql'] == 2):?>
|
||||
Пользователь неактивен
|
||||
<?endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
|
||||
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
|
||||
<?if($server['server_mysql'] == 1):?>
|
||||
<div class="navi-item my-2">
|
||||
<a href="http://<?php echo $server['location_ip'] ?>" target="_blank" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-user-circle"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Войти</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $server['server_id'] ?>,'mysqloff')" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Выключить</span>
|
||||
</a>
|
||||
</div>
|
||||
<?elseif($server['server_mysql'] == 0):?>
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $server['server_id'] ?>,'mysqlcr')" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-user-plus"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Создать</span>
|
||||
</a>
|
||||
</div>
|
||||
<?elseif($server['server_mysql'] == 2):?>
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" onClick="sendAction(<?php echo $server['server_id'] ?>,'mysqlon')" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Включить</span>
|
||||
</a>
|
||||
</div>
|
||||
<?endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-9">
|
||||
<div class="row">
|
||||
<?if($server['server_mysql'] == 1):?>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">MySQL Хост для локального подключения<small class="text-muted font-size-sm ml-2">127.0.0.1</small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">MySQL Хост для внешнего подключения<small class="text-muted font-size-sm ml-2"><?php echo $server['location_ip'] ?></small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">MySQL Порт<small class="text-muted font-size-sm ml-2">3306</small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">База данных<small class="text-muted font-size-sm ml-2">gs<?php echo $server['server_id'] ?></small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">Имя пользователя<small class="text-muted font-size-sm ml-2">gs<?php echo $server['server_id'] ?></small></h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">Пароль пользователя<small class="text-muted font-size-sm ml-2"><?php echo $server['db_pass'] ?></small></h3>
|
||||
<div class="card-toolbar">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#ftppass" class="btn btn-clean btn-icon">
|
||||
<i class="fas fa-cogs" data-toggle="tooltip" data-placement="right" title="" data-original-title="Изменить"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="col-xl-12">
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<?if($server['server_mysql'] == 0):?>
|
||||
<div class="alert-text">На данный момент база данных не создана.</div>
|
||||
<?elseif($server['server_mysql'] == 2):?>
|
||||
<div class="alert-text">На данный момент база данных не включена.</div>
|
||||
<?endif;?>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="ki ki-close"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?if($server['server_mysql'] == 1):?>
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="ftppass" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Изменить пароль MySQL</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<form id="editForm" method="POST" style="padding:0px; margin:0px;">
|
||||
<div class="modal-body">
|
||||
<div class="card card-body" style="margin-bottom: 1rem;padding: 1rem;">
|
||||
<div class="form-group" style="margin-bottom: 0rem;">
|
||||
<div class="checkbox-list">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" id="editpassword" name="editpassword" onchange="togglePassword()">
|
||||
<span></span>
|
||||
Сменить пароль MySQL
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Пароль</label>
|
||||
<input class="form-control" id="password" name="password" placeholder="Пароль" disabled="">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Повторите пароль</label>
|
||||
<input class="form-control" id="password2" name="password2" placeholder="Повторите пароль" disabled="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer" style="padding: 0.5rem;">
|
||||
<button type="button" class="btn btn-light-primary font-weight-bold" data-dismiss="modal">Отмена</button>
|
||||
<button type="submit" class="btn btn-primary font-weight-bold">Сохранить</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<?endif;?>
|
||||
<script>
|
||||
function sendAction(serverid, action) {
|
||||
$.ajax({
|
||||
url: '/servers/mysql/action/'+serverid+'/'+action,
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSend: function(arr, options) {
|
||||
if(action == "mysqloff") toastr.warning("Выключаем базу данных...");
|
||||
if(action == "mysqlon") toastr.warning("Включаем базу данных...");
|
||||
if(action == "mysqlcr") toastr.warning("Создаем базу данных...");
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?if($server['server_mysql'] == 1):?>
|
||||
<script>
|
||||
$('#editForm').ajaxForm({
|
||||
url: '/servers/mysql/ajax/<?php echo $server['server_id'] ?>',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
|
||||
function togglePassword() {
|
||||
var status = $('#editpassword').is(':checked');
|
||||
if(status) {
|
||||
$('#password').prop('disabled', false);
|
||||
$('#password2').prop('disabled', false);
|
||||
} else {
|
||||
$('#password').prop('disabled', true);
|
||||
$('#password2').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?endif;?>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,407 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header ?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<form id="orderForm" method="POST" style="padding:0px; margin:0px;">
|
||||
<div class="row">
|
||||
<div class="col-xl-8 col-xxl-8">
|
||||
<div class="card card-custom card-stretch card-shadowless bg-gray-100 gutter-b">
|
||||
<div class="card-header border-0 pt-7">
|
||||
<h3 class="card-title align-items-start flex-column">
|
||||
<span class="card-label font-weight-bold font-size-h4 text-dark-75">Параметры сервера</span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body pt-1 pb-4">
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Выберите игру</label>
|
||||
<select class="form-control" id="gameid" name="gameid" aria-required="true" aria-invalid="false" aria-describedby="delivery-error" onChange="updateForm()">
|
||||
<?php foreach($games as $item): ?>
|
||||
<option value="<?php echo $item['game_id'] ?>"><?php echo $item['game_name'] ?></option>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($games)): ?>
|
||||
<option value="0">На данный момент нет доступных игр</option>
|
||||
<?php endif; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Выберите локацию</label>
|
||||
<select class="form-control" id="locationid" name="locationid" aria-required="true" aria-invalid="false" aria-describedby="delivery-error">
|
||||
<?php foreach($locations as $item): ?>
|
||||
<option value="<?php echo $item['location_id'] ?>" class="<?php echo $item['location_games'] ?>"><?php echo $item['location_name'] ?> | Загруженность <?php echo $item['location_cpu'] ?>%</option>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($locations)): ?>
|
||||
<option value="0">На данный момент нет доступных локаций</option>
|
||||
<?php endif; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Выберите период оплаты</label>
|
||||
<select class="form-control" id="days" name="days" aria-required="true" aria-invalid="false" aria-describedby="delivery-error" onChange="updateForm()">
|
||||
<option value="15">15 дней</option>
|
||||
<option value="30">30 дней</option>
|
||||
<option value="60">60 дней</option>
|
||||
<option value="90">90 дней (-5%)</option>
|
||||
<option value="180">180 дней (-10%)</option>
|
||||
<option value="360">360 дней (-15%)</option>
|
||||
<?if($serv_test == 1):?>
|
||||
<option value="0">Тестовый период 3 дня</option>
|
||||
<?endif;?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Введите количество слотов</label>
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<button type="button" onclick="plusSlots()" class="btn btn-light-primary btn-icon"><i class="fa fa-angle-up"></i></button>
|
||||
</div>
|
||||
<input oninput="this.value = this.value.replace(/\D/g, '')" class="form-control" id="slots" name="slots" onkeyup="updateForm(true)">
|
||||
<div class="input-group-append">
|
||||
<button type="button" onclick="minusSlots()" class="btn btn-light-primary btn-icon"><i class="fa fa-angle-down"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<label>Придумайте пароль для FTP</label>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control m-input" id="password" name="password" placeholder="Пароль">
|
||||
<div class="input-group-append">
|
||||
<button type="button" onClick="genPass()" class="btn btn-light-primary btn-icon"><i class="fa fa-undo"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Повторите пароль для FTP</label>
|
||||
<input type="text" class="form-control" id="password2" name="password2" placeholder="Повторите пароль">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-4 col-xxl-4">
|
||||
<div class="card card-custom card-shadowless bg-gray-100 gutter-b">
|
||||
<div class="card-header border-0 pt-7">
|
||||
<h3 class="card-title align-items-start flex-column">
|
||||
<span class="card-label font-weight-bold font-size-h4 text-dark-75">Информация о заказе</span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body pt-1 pb-4">
|
||||
<div class="accordion accordion-toggle-arrow" id="accordionExample">
|
||||
<div class="card">
|
||||
<div class="card-header" id="heading3">
|
||||
<div class="card-title collapsed" data-toggle="collapse" role="button" data-target="#collapse3" aria-expanded="false" aria-controls="collapseThree">
|
||||
<i class="fa fa-gift"></i> Есть купон?
|
||||
</div>
|
||||
</div>
|
||||
<div id="collapse3" class="card-body-wrapper collapse" aria-labelledby="heading3" data-parent="#accordionExample" style="">
|
||||
<div class="card-body">
|
||||
<div data-repeater-item="" class="kt--margin-bottom-10">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
<i class="fa fa-gift"></i>
|
||||
</span>
|
||||
</div>
|
||||
<input id="promo" type="text" class="form-control form-control-danger" type="promo" name="promo" placeholder="Купон">
|
||||
<div class="input-group-append">
|
||||
<button type="button" onclick="promoCode()" class="btn btn-light-primary btn-icon"><i class="fa fa-check"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="text-center">
|
||||
<div class="font-size-h5 font-weight-boldest">Итого к оплате: <span id="price">0.00 руб.</span></div>
|
||||
<div class="text-muted font-weight-bold mb-3" id="server">Получение данных...</div>
|
||||
</div>
|
||||
<hr>
|
||||
<button type="submit" class="btn btn-light-primary btn-lg btn-block font-weight-bolder">Создать сервер</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="card card-custom card-shadowless bg-gray-100">
|
||||
<div class="card-header border-0 pt-7">
|
||||
<h3 class="card-title align-items-start flex-column">
|
||||
<span class="card-label font-weight-bold font-size-h4 text-dark-75">Преимущества нашего хостинга</span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body pt-0 pb-4">
|
||||
<div class="row">
|
||||
<div class="col-xl-6">
|
||||
<ul class="navi">
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Мощные процессоры Intel</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Защита от DDoS атак на оборудование.</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Полный доступ к FTP</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Бесплатная база MySQL</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<ul class="navi">
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Создание резервных копий backup</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Смена версии сервера одним кликом</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Скоростные SSD диски</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="navi-item">
|
||||
<a class="navi-link" href="javascript:;">
|
||||
<span class="navi-bullet">
|
||||
<i class="bullet"></i>
|
||||
</span>
|
||||
<span class="navi-text">Удобная панель управления</span>
|
||||
<span class="navi-label">
|
||||
<i class="fas fa-check text-primary"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
jQuery.fn.chained = function(parent_selector, options) {
|
||||
return this.each(function() {
|
||||
var self = this;
|
||||
var backup = jQuery(self).clone();
|
||||
jQuery(parent_selector).each(function() {
|
||||
jQuery(this).bind("change", function() {
|
||||
jQuery(self).html(backup.html());
|
||||
var selected = "";
|
||||
jQuery(parent_selector).each(function() {
|
||||
selected += "\\" + jQuery(":selected", this).val();
|
||||
});
|
||||
selected = selected.substr(1);
|
||||
var first = jQuery(parent_selector).first();
|
||||
var selected_first = jQuery(":selected", first).val();
|
||||
jQuery("option", self).each(function() {
|
||||
if (!jQuery(this).hasClass(selected) && !jQuery(this).hasClass(selected_first) && jQuery(this).val() !== "") {
|
||||
jQuery(this).remove();
|
||||
}
|
||||
});
|
||||
if (1 == jQuery("option", self).size() && jQuery(self).val() === "") {
|
||||
jQuery(self).attr("disabled", "disabled");
|
||||
} else {
|
||||
jQuery(self).removeAttr("disabled");
|
||||
}
|
||||
jQuery(self).trigger("change");
|
||||
});
|
||||
if ( !jQuery("option:selected", this).length ) {
|
||||
jQuery("option", this).first().attr("selected", "selected");
|
||||
}
|
||||
jQuery(this).trigger("change");
|
||||
});
|
||||
});
|
||||
};
|
||||
jQuery.fn.chainedTo = jQuery.fn.chained;
|
||||
jQuery(document).ready(function(){
|
||||
jQuery("#locationid").chained("#gameid");
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
var gameData = {
|
||||
<?php foreach($games as $item): ?>
|
||||
<?php echo $item['game_id'] ?>: {
|
||||
'minslots': <?php echo $item['game_min_slots'] ?>,
|
||||
'maxslots': <?php echo $item['game_max_slots'] ?>,
|
||||
'price': <?php echo $item['game_price'] ?>,
|
||||
'cpu': <?php echo $item['game_cores'] ?>,
|
||||
'ram': <?php echo $item['game_ram'] ?>,
|
||||
'ssd': <?php echo $item['game_ssd'] ?>
|
||||
},
|
||||
<?php endforeach; ?>
|
||||
};
|
||||
|
||||
$('#orderForm').ajaxForm({
|
||||
url: '/servers/order/ajax',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("redirect('/servers/control/index/" + data.id + "')", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
toastr.warning("Ваш запрос обрабатывается, пожалуйста, подождите...");
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
updateForm();
|
||||
});
|
||||
|
||||
function promoCode(){
|
||||
var promo = $("#promo").val();
|
||||
$.post("/servers/order/promo",{code: promo},function(data){
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
updateForm();
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
updateForm(data.skidka);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateForm(promo) {
|
||||
var gameID = $("#gameid option:selected").val();
|
||||
var slots = $("#slots").val();
|
||||
if(slots < gameData[gameID]['minslots']) {
|
||||
slots = gameData[gameID]['minslots'];
|
||||
$("#slots").val(slots);
|
||||
}
|
||||
if(slots > gameData[gameID]['maxslots']) {
|
||||
slots = gameData[gameID]['maxslots'];
|
||||
$("#slots").val(slots);
|
||||
}
|
||||
var price = gameData[gameID]['price'] * slots;
|
||||
var days = $("#days option:selected").val();
|
||||
switch(days) {
|
||||
case "0":
|
||||
price = 0;
|
||||
break;
|
||||
case "15":
|
||||
price = price / 2;
|
||||
break;
|
||||
case "30":
|
||||
break;
|
||||
case "60":
|
||||
price = price * 2;
|
||||
break;
|
||||
case "90":
|
||||
price = 3 * price * 0.95;
|
||||
break;
|
||||
case "180":
|
||||
price = 6 * price * 0.90;
|
||||
break;
|
||||
case "360":
|
||||
price = 12 * price * 0.85;
|
||||
break;
|
||||
}
|
||||
if(promo != null){price = price * promo;}
|
||||
$('#price').text(price.toFixed(2) + ' руб.');
|
||||
$('#server').text('CPU: '+gameData[gameID]['cpu']+' ядер, RAM: '+gameData[gameID]['ram']+' МБ, SSD: '+gameData[gameID]['ssd']+' МБ');
|
||||
}
|
||||
|
||||
function plusSlots() {
|
||||
value = parseInt($('#slots').val());
|
||||
$('#slots').val(value+1);
|
||||
updateForm();
|
||||
}
|
||||
|
||||
function minusSlots() {
|
||||
value = parseInt($('#slots').val());
|
||||
$('#slots').val(value-1);
|
||||
updateForm();
|
||||
}
|
||||
|
||||
function generatePwd() {
|
||||
var length = 8,
|
||||
charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
|
||||
retVal = "";
|
||||
for (var i = 0, n = charset.length; i < length; ++i) {
|
||||
retVal += charset.charAt(Math.floor(Math.random() * n));
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
function genPass() {
|
||||
document.getElementById('password').type = 'text';
|
||||
document.getElementById('password2').type = 'text';
|
||||
iString = generatePwd();
|
||||
$('#password').val(iString);
|
||||
$('#password2').val(iString);
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,170 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-3">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<div class="text-center">
|
||||
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
|
||||
<div class="symbol-label">
|
||||
<i class="fa fa-user-friends icon-3x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="font-weight-bolder my-2">Друзья</h4>
|
||||
<div class="text-center font-weight-bold mb-2">
|
||||
Совместное управление
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
|
||||
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#ownerinfo" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-exclamation-circle"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Информация</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-9">
|
||||
<div class="card card-custom mb-2">
|
||||
<div class="card-body">
|
||||
<form id="addForm" method="POST" style="padding:0px; margin:0px;">
|
||||
<div class="input-group" style="width: 100%;">
|
||||
<input type="text" class="form-control" id="ownerid" name="ownerid" placeholder="Введите ID друга...">
|
||||
<div class="input-group-append">
|
||||
<button type="submit" class="btn btn-primary btn-icon" data-toggle="tooltip" title="" data-placement="right" data-original-title="Добавить"><i class="fas fa-plus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<?php foreach($serversOwners as $item): ?>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title"><?php echo $item['user_firstname'] ?> <?php echo $item['user_lastname'] ?><small class="text-muted font-size-sm ml-2"><?php if($item['owner_status'] == 0): ?>Не подтвержден<?php elseif($item['owner_status'] == 1): ?><?php echo $item['owner_add'] ?><?php endif; ?></small></h3>
|
||||
<div class="card-toolbar">
|
||||
<a href="javascript:;" onclick="sendAction('delete', <?php echo $item['owner_id'] ?>)" class="btn btn-clean btn-icon">
|
||||
<i class="fa fa-times" data-toggle="tooltip" data-placement="right" title="" data-original-title="Удалить"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($serversOwners)): ?>
|
||||
<div class="col-xl-12">
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент список пуст.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="ki ki-close"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="ownerinfo" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Информация</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Система совладельцев серверов - это система, позволяющая добавить своего друга в совладельцы. Добавив друга, он также сможет как и вы управлять вашим сервером.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<script>
|
||||
$('#addForm').ajaxForm({
|
||||
url: '/servers/owner/create/<?php echo $server['server_id'] ?>',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
|
||||
function sendAction(action, ownerid) {
|
||||
switch(action) {
|
||||
case "delete":
|
||||
{
|
||||
if(!confirm("Вы действительно хотите удалить друга?")) return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$.ajax({
|
||||
url: '/servers/owner/delete/<?php echo $server['server_id'] ?>/'+ownerid,
|
||||
dataType: 'text',
|
||||
type: 'POST',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('#controlBtns button').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<?php foreach($repos as $item):?>
|
||||
<?php if($server['game_id'] == $item['game_id']): ?>
|
||||
<div class="col-xl-4">
|
||||
<div class="card card-custom gutter-b">
|
||||
<div class="card-header border-0 pt-5 text-center">
|
||||
<h3 class="card-title font-weight-bolder"><?php echo $item['repo_name']?></h3>
|
||||
</div>
|
||||
<div class="card-body d-flex flex-column">
|
||||
<div class="flex-grow-1 text-center">
|
||||
<img src="<?php echo $item['repo_img'] ?>" alt="" class="mw-100 w-200px">
|
||||
</div>
|
||||
<div class="pt-5">
|
||||
<div class="mb-5" data-scroll="true" data-height="70">
|
||||
<p class="text-center font-weight-normal font-size-lg pb-7"><?php echo $item['repo_textx']?></p>
|
||||
</div>
|
||||
<hr>
|
||||
<?php if($item['repo_price'] > 0): ?>
|
||||
<?php foreach($userrepos as $repo): ?>
|
||||
<? if($repo['repo_id'] == $item['repo_id']) $item['free_repo'] = 1; ?>
|
||||
<?php endforeach; ?>
|
||||
<? if($item['free_repo'] == 1): ?>
|
||||
<a href="<?echo $item['repo_url']?>" class="btn btn-light-primary btn-shadow-hover font-weight-bolder w-100 py-3" data-toggle="tooltip" data-placement="right"data-original-title="Файл куплен">Скачать файл</a>
|
||||
<? else: ?>
|
||||
<button type="submit" onClick="sendAction(<?php echo $server['server_id'] ?>,'<?echo $item['repo_id']?>')" class="btn btn-primary btn-shadow-hover font-weight-bolder w-100 py-3">Купить за <?php echo $item['repo_price']?> RUB.</button>
|
||||
<?php endif;?>
|
||||
<?php elseif($item['repo_price'] == 0): ?>
|
||||
<a href="<?echo $item['repo_url']?>" class="btn btn-primary btn-shadow-hover font-weight-bolder w-100 py-3">Скачать файл</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($repos)): ?>
|
||||
<div class="col-xl-12 col-xxl-12">
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент список пуст.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="ki ki-close"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function sendAction(serverid, action) {
|
||||
$.ajax({
|
||||
url: '/servers/repo/action/'+serverid+'/'+action,
|
||||
type: 'POST',
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
},
|
||||
beforeSend: function(arr, options) {
|
||||
$('button[type=submit]').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,302 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="d-flex align-items-center mb-3 bg-light-primary rounded p-5">
|
||||
<div class="d-flex flex-column flex-grow-1 mr-2">
|
||||
<a href="javascript:;" class="font-weight-bold text-dark-75 text-hover-primary font-size-lg mb-1">CPU</a>
|
||||
</div>
|
||||
<span class="font-weight-bolder text-primary py-1 font-size-lg" id="cpu">
|
||||
<div class="spinner spinner-primary mr-5"></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="d-flex align-items-center mb-3 bg-light-primary rounded p-5">
|
||||
<div class="d-flex flex-column flex-grow-1 mr-2">
|
||||
<a href="javascript:;" class="font-weight-bold text-dark-75 text-hover-primary font-size-lg mb-1">RAM</a>
|
||||
</div>
|
||||
<span class="font-weight-bolder text-primary py-1 font-size-lg" id="ram">
|
||||
<div class="spinner spinner-primary mr-5"></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="d-flex align-items-center mb-3 bg-light-primary rounded p-5">
|
||||
<div class="d-flex flex-column flex-grow-1 mr-2">
|
||||
<a href="javascript:;" class="font-weight-bold text-dark-75 text-hover-primary font-size-lg mb-1">SSD</a>
|
||||
</div>
|
||||
<span class="font-weight-bolder text-primary py-1 font-size-lg" id="ssd">
|
||||
<div class="spinner spinner-primary mr-5"></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<div class="d-flex align-items-center mb-3 bg-light-primary rounded p-5">
|
||||
<div class="d-flex flex-column flex-grow-1 mr-2">
|
||||
<a href="javascript:;" class="font-weight-bold text-dark-75 text-hover-primary font-size-lg mb-1">Players</a>
|
||||
</div>
|
||||
<span class="font-weight-bolder text-primary py-1 font-size-lg" id="players">
|
||||
<div class="spinner spinner-primary mr-5"></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h3 class="card-label">История количевства игроков</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="padding: 0.5rem 0.5rem;">
|
||||
<div id="statsGraph"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h3 class="card-label">История нагрузки сервера</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="padding: 0.5rem 0.5rem;">
|
||||
<div id="loads"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h3 class="card-label">История операций с сервером</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="scroll scroll-pull" data-scroll="true" style="height: 200px; overflow: auto;" data-mobile-height="200">
|
||||
<div class="timeline timeline-2">
|
||||
<div class="timeline-bar"></div>
|
||||
<?$nofire = false;?>
|
||||
<?php foreach($logs as $item): ?>
|
||||
<? if($server['server_id'] == $item['server_id']): ?>
|
||||
<?$nofire = true;?>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-badge <?if($item['status'] == 1):?>bg-success<?elseif($item['status'] == 2):?>bg-warning<?elseif($item['status'] == 3):?>bg-danger<?endif;?>"></div>
|
||||
<div class="timeline-content d-flex align-items-center justify-content-between">
|
||||
<span class="mr-3">
|
||||
<?=$item['reason']?>
|
||||
</span>
|
||||
<span class="text-muted text-right"><?=$item['date']?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?endif;?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php if(empty($logs) || $nofire == false): ?>
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент история чиста.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="ki ki-close"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
||||
<script>
|
||||
function updateData() {
|
||||
$.ajax({
|
||||
url: '/servers/statistics/getData/<?=$server['server_id']?>',
|
||||
dataType: 'text',
|
||||
success: function (data) {
|
||||
data = $.parseJSON(data);
|
||||
$("#cpu").text(data.cpu+"%");
|
||||
$("#ram").text(data.ram+"%");
|
||||
$("#ssd").text(data.ssd+"%");
|
||||
$("#players").text(data.players);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
updateData();
|
||||
});
|
||||
|
||||
var online = [
|
||||
<?php foreach($stats as $item): ?>
|
||||
[<?php echo strtotime($item['server_stats_date']) * 1000 ?>, <?php echo $item['server_stats_players'] ?>],
|
||||
<?php endforeach; ?>
|
||||
];
|
||||
|
||||
var loads1 = [
|
||||
<?php foreach($stats as $item): ?>
|
||||
[<?php echo strtotime($item['server_stats_date']) * 1000 ?>, <?php echo $item['server_stats_cpu'] ?>],
|
||||
<?php endforeach; ?>
|
||||
];
|
||||
|
||||
var loads2 = [
|
||||
<?php foreach($stats as $item): ?>
|
||||
[<?php echo strtotime($item['server_stats_date']) * 1000 ?>, <?php echo $item['server_stats_hdd'] ?>],
|
||||
<?php endforeach; ?>
|
||||
];
|
||||
|
||||
var loads3 = [
|
||||
<?php foreach($stats as $item): ?>
|
||||
[<?php echo strtotime($item['server_stats_date']) * 1000 ?>, <?php echo $item['server_stats_ram'] ?>],
|
||||
<?php endforeach; ?>
|
||||
];
|
||||
|
||||
const primary = '#6993FF';
|
||||
const success = '#1BC5BD';
|
||||
const info = '#8950FC';
|
||||
const warning = '#FFA800';
|
||||
const danger = '#F64E60';
|
||||
|
||||
var ApexChartsStats = function () {
|
||||
var players_chart = function () {
|
||||
const apexChart = "#statsGraph";
|
||||
var options = {
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'area',
|
||||
defaultLocale: 'en',
|
||||
locales: [{
|
||||
name: 'en',
|
||||
options: {
|
||||
months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
|
||||
shortMonths: ['Янв.', 'Фев.', 'Март.', 'Апр.', 'Май.', 'Июнь.', 'Июль.', 'Авг.', 'Сент.', 'Окт.', 'Ноя.', 'Дек.'],
|
||||
days: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
|
||||
shortDays: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
|
||||
toolbar: {
|
||||
exportToPNG: 'Скачать PNG',
|
||||
exportToCSV: 'Скачать CSV',
|
||||
exportToSVG: 'Скачать SVG',
|
||||
selection: 'Выбор',
|
||||
selectionZoom: 'Выбор Zoom',
|
||||
zoomIn: 'Увеличить',
|
||||
zoomOut: 'Уменьшить',
|
||||
pan: 'Панорамирование',
|
||||
reset: 'Сброс Масштаба',
|
||||
}
|
||||
}
|
||||
}]
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false
|
||||
},
|
||||
series: [{
|
||||
name: 'Количевство игроков',
|
||||
data: online
|
||||
}],
|
||||
xaxis: {
|
||||
type: 'datetime'
|
||||
},
|
||||
tooltip: {
|
||||
x: {
|
||||
format: 'dd.MM.yy в HH:mm'
|
||||
},
|
||||
},
|
||||
colors: [primary]
|
||||
};
|
||||
|
||||
var chart = new ApexCharts(document.querySelector(apexChart), options);
|
||||
chart.render();
|
||||
}
|
||||
|
||||
var loads_chart = function () {
|
||||
const apexChart = "#loads";
|
||||
var options = {
|
||||
series: [{
|
||||
name: 'CPU (%)',
|
||||
data: loads1
|
||||
}, {
|
||||
name: 'RAM (%)',
|
||||
data: loads3
|
||||
}, {
|
||||
name: 'SSD (%)',
|
||||
data: loads2
|
||||
}],
|
||||
chart: {
|
||||
height: 350,
|
||||
type: 'area',
|
||||
defaultLocale: 'en',
|
||||
locales: [{
|
||||
name: 'en',
|
||||
options: {
|
||||
months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
|
||||
shortMonths: ['Янв.', 'Фев.', 'Март.', 'Апр.', 'Май.', 'Июнь.', 'Июль.', 'Авг.', 'Сент.', 'Окт.', 'Ноя.', 'Дек.'],
|
||||
days: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
|
||||
shortDays: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
|
||||
toolbar: {
|
||||
exportToPNG: 'Скачать PNG',
|
||||
exportToCSV: 'Скачать CSV',
|
||||
exportToSVG: 'Скачать SVG',
|
||||
selection: 'Выбор',
|
||||
selectionZoom: 'Выбор Zoom',
|
||||
zoomIn: 'Увеличить',
|
||||
zoomOut: 'Уменьшить',
|
||||
pan: 'Панорамирование',
|
||||
reset: 'Сброс Масштаба',
|
||||
}
|
||||
}
|
||||
}]
|
||||
},
|
||||
dataLabels: {
|
||||
enabled: false
|
||||
},
|
||||
stroke: {
|
||||
curve: 'smooth'
|
||||
},
|
||||
xaxis: {
|
||||
type: 'datetime'
|
||||
},
|
||||
tooltip: {
|
||||
x: {
|
||||
format: 'dd.MM.yy в HH:mm'
|
||||
},
|
||||
},
|
||||
colors: [primary, success, danger]
|
||||
};
|
||||
|
||||
var chart = new ApexCharts(document.querySelector(apexChart), options);
|
||||
chart.render();
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
init: function () {
|
||||
players_chart();
|
||||
loads_chart();
|
||||
}
|
||||
};
|
||||
}();
|
||||
|
||||
jQuery(document).ready(function () {
|
||||
ApexChartsStats.init();
|
||||
});
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
@@ -0,0 +1,219 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
?>
|
||||
<?php echo $header?>
|
||||
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
|
||||
<div class="d-flex flex-column-fluid">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<?php include 'application/views/common/menuserver.php';?>
|
||||
</div>
|
||||
<div class="col-xl-3">
|
||||
<div class="card card-custom mb-3 pt-5">
|
||||
<div class="card-body">
|
||||
<div class="text-center">
|
||||
<div class="symbol symbol-60 symbol-circle symbol-xl-90">
|
||||
<div class="symbol-label">
|
||||
<i class="fas fa-clock icon-5x text-primary"></i>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="font-weight-bolder my-2">Планировщик задач</h4>
|
||||
<div class="text-muted font-weight-bold mb-2">Выполнение команд по расписанию</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-custom mb-3">
|
||||
<div class="card-body px-1" style="padding: 0.3rem 2.25rem;">
|
||||
<div class="navi navi-hover navi-active navi-link-rounded navi-bold navi-icon-center navi-light-icon">
|
||||
<div class="navi-item my-2">
|
||||
<a href="javascript:;" data-toggle="modal" data-target="#tasksinfo" class="navi-link">
|
||||
<span class="navi-icon mr-3">
|
||||
<span class="svg-icon svg-icon-lg">
|
||||
<i class="fa fa-exclamation-circle"></i>
|
||||
</span>
|
||||
</span>
|
||||
<span class="navi-text font-weight-bolder font-size-lg">Информация</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-9">
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom gutter-b">
|
||||
<div class="card-body">
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Задача</label>
|
||||
<select class="form-control" id="task" name="task" onChange="editNewTask()">
|
||||
<option value="enable" <?php if($server['server_status'] != 1): ?>disabled <?php endif; ?>>Включение</option>
|
||||
<option value="disable" <?php if($server['server_status'] != 2): ?>disabled <?php endif; ?>>Выключение</option>
|
||||
<option value="restart" <?php if($server['server_status'] != 2): ?>disabled <?php endif; ?>>Перезагрузка</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Тип задачи</label>
|
||||
<select class="form-control" id="type" name="type">
|
||||
<option value="single">Одноразовая</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group form-md-line-input">
|
||||
<label>Время выполнения</label>
|
||||
<select class="form-control" id="time" name="time">
|
||||
<option value="15min">15 Минут</option>
|
||||
<option value="30min">30 Минут</option>
|
||||
<option value="1hour">1 Час</option>
|
||||
<option value="12hours">12 Часов</option>
|
||||
<option value="24hours">24 Часа</option>
|
||||
</select>
|
||||
</div>
|
||||
<button id="createTask" class="btn btn-primary">Создать задачу</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-custom gutter-b">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h3 class="card-label">Список задач</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<?php foreach($tasks as $item): ?>
|
||||
<div class="card card-custom bg-gray-100 mb-4" id="task-<?php echo $item['task_id'] ?>">
|
||||
<div class="card-header border-0" style="min-height: 0;padding-top: 0.5rem;padding-bottom: 0.5rem;">
|
||||
<h3 class="card-title"><span class="card-icon">
|
||||
<a href="javascript:;" class="btn btn-icon btn-light-primary btn-sm" data-toggle="tooltip" data-placement="right" title="" data-original-title="Тип задачи: <?php echo str_replace("single", "Одноразовая", str_replace("repeating", "Повторяющаяся", $item['task_type'])) ?>">
|
||||
<i class="fa fa-info-circle"></i>
|
||||
</a></span><?php echo str_replace("restart", "Перезагрузка", str_replace("enable", "Включение", str_replace("disable", "Выключение", $item['task_name']))) ?><small class="text-muted font-size-sm ml-2"><?php echo str_replace("15min", "15 минут", str_replace("30min", "30 минут", str_replace("1hour", "1 час", str_replace("12hours", "12 часов", str_replace("24hours", "24 часа", $item['task_time']))))) ?></small>
|
||||
</h3>
|
||||
<div class="card-toolbar">
|
||||
<span class="badge badge-primary" data-toggle="tooltip" data-placement="right" title="" data-original-title="Будет выполнена в" style="margin-right: .25rem"><?php echo date("d.m.Y в H:i", strtotime($item['task_lead_time'])) ?></span>
|
||||
<a href="javascript:;" onClick="sendAction('deleteTask',<?php echo $item['task_id'] ?>)" class="btn btn-icon btn-light-danger btn-xs" data-toggle="tooltip" data-placement="right" title="" data-original-title="Удалить задачу">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if(empty($tasks)): ?>
|
||||
<div class="alert alert-custom alert-light-primary fade show mb-4" role="alert">
|
||||
<div class="alert-icon">
|
||||
<i class="flaticon-exclamation"></i>
|
||||
</div>
|
||||
<div class="alert-text">На данный момент нет задач.</div>
|
||||
<div class="alert-close">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="ki ki-close"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--begin::Modal-->
|
||||
<div class="modal fade" id="tasksinfo" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Информация</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<i aria-hidden="true" class="ki ki-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
Система планировщик задач - это система, позволяет автоматически выполнять определенные действия на сервере (запуск, рестарт, выключение и т.д.), с заданным временем или периодичностью.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end::Modal-->
|
||||
<script>
|
||||
function editNewTask() {
|
||||
setTimeout(function() {
|
||||
var task = $('#task option:selected').val();
|
||||
if (task == 'enable' || task == 'disable') {
|
||||
$("#type option[value='repeating']").remove();
|
||||
} else {
|
||||
$("#type").append('<option value="repeating">Повторяющаяся</option>');
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
editNewTask();
|
||||
});
|
||||
|
||||
$('#createTask').on('click', function() {
|
||||
$.ajax({
|
||||
url: '/servers/tasks/createTask/<?php echo $server['server_id'] ?>',
|
||||
type: 'POST',
|
||||
data: {
|
||||
'task': $("#task option:selected").val(),
|
||||
'type': $("#type option:selected").val(),
|
||||
'time': $("#time option:selected").val()
|
||||
},
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
$('button[type=submit]').prop('disabled', false);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
$('#createTask').removeClass('loading');
|
||||
},
|
||||
beforeSubmit: function(arr, $form, options) {
|
||||
$('#createTask').addClass('loading');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function sendAction(action, task_id) {
|
||||
switch(action) {
|
||||
case "deleteTask":
|
||||
{
|
||||
if(!confirm("Вы действительно хотите удалить задачу ID-"+task_id+"?")) return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$.ajax({
|
||||
url: '/servers/tasks/deleteTask/<?php echo $server['server_id'] ?>',
|
||||
type: "POST",
|
||||
data: {task_id: task_id},
|
||||
dataType: 'text',
|
||||
success: function(data) {
|
||||
data = $.parseJSON(data);
|
||||
switch(data.status) {
|
||||
case 'error':
|
||||
toastr.error(data.error);
|
||||
break;
|
||||
case 'success':
|
||||
toastr.success(data.success);
|
||||
setTimeout("reload()", 1500);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php echo $footer ?>
|
||||
Reference in New Issue
Block a user