query('SELECT `time`, `overdue` FROM `servers` WHERE `id`="'.$id.'" LIMIT 1');
$server = $sql->get();
if($server['time'] > $start_point AND $server['overdue'])
$sql->query('UPDATE `servers` set `overdue`="0" WHERE `id`="'.$id.'" LIMIT 1');
$sql->query('SELECT * FROM `servers` WHERE `id`="'.$id.'" LIMIT 1');
$server = $sql->get();
$sql->query('SELECT `address` FROM `units` WHERE `id`="'.$server['unit'].'" LIMIT 1');
$unit = $sql->get();
$sql->query('SELECT `name`, `slots_min`, `slots_max`, `packs` FROM `tarifs` WHERE `id`="'.$server['tarif'].'" LIMIT 1');
$tarif = $sql->get();
if($go)
{
if(isset($url['type']) AND in_array($url['type'], array('overdue', 'block', 'tarif')))
{
if($url['type'] != 'tarif')
{
$time = isset($_POST['time']) ? trim($_POST['time']) : sys::outjs(array('e' => 'Необходимо указать дату.'));
$date = sys::checkdate($time);
}
switch($url['type'])
{
case 'overdue':
if($server['time'] > $start_point)
sys::outjs(array('e' => 'Игровой сервер должен быть просрочен.'));
$sql->query('UPDATE `servers` set `overdue`="'.$date.'" WHERE `id`="'.$id.'" LIMIT 1');
break;
case 'block':
if($server['status'] != ('off' || 'overdue'))
sys::outjs(array('e' => 'Игровой сервер должен быть выключен.'));
if($date < $start_point)
$sql->query('UPDATE `servers` set `status`="off", `block`="0" WHERE `id`="'.$id.'" LIMIT 1');
else
$sql->query('UPDATE `servers` set `status`="blocked", `block`="'.$date.'" WHERE `id`="'.$id.'" LIMIT 1');
break;
case 'tarif':
$tid = isset($url['tarif']) ? sys::int($url['tarif']) : sys::outjs(array('e' => 'Необходимо указать тариф.'));
if($tid == $server['tarif'])
sys::outjs(array('s' => 'ok'));
$sql->query('SELECT `id`, `slots_min`, `slots_max`, `packs`, `fps`, `tickrate`, `ram` FROM `tarifs` WHERE `id`="'.$tid.'" AND `unit`="'.$server['unit'].'" AND `game`="'.$server['game'].'" LIMIT 1');
if(!$sql->num())
sys::outjs(array('e' => 'Укажите тариф из списка.'));
$tarif = $sql->get();
if($server['slots'] < $tarif['slots_min'] || $server['slots'] > $tarif['slots_max'])
sys::outjs(array('e' => 'Данный тариф не совместим по слотам.'));
if($server['fps'])
{
if(!in_array($server['fps'], explode(':', $tarif['fps'])))
sys::outjs(array('e' => 'Данный тариф не совместим по FPS.'));
}
if($server['tickrate'])
{
if(!in_array($server['tickrate'], explode(':', $tarif['tickrate'])))
sys::outjs(array('e' => 'Данный тариф не совместим по TickRate.'));
}
if($server['game'] == 'mc')
{
$ram = $server['ram']/$server['slots'];
if(!in_array($ram, explode(':', $tarif['ram'])))
sys::outjs(array('e' => 'Данный тариф не совместим по RAM.'));
}
if(!array_key_exists($server['pack'], sys::b64djs($tarif['packs'])))
sys::outjs(array('e' => 'На данном тарифном плане нет сборки игрового сервера.'));
$sql->query('UPDATE `servers` set `tarif`="'.$tid.'" WHERE `id`="'.$id.'" LIMIT 1');
break;
}
sys::outjs(array('s' => 'ok'));
}
$aData = array();
$aData['user'] = isset($_POST['user']) ? sys::int($_POST['user']) : $server['user'];
$aData['address'] = isset($_POST['address']) ? trim($_POST['address']) : $server['address'];
$aData['port'] = isset($_POST['port']) ? sys::int($_POST['port']) : $server['port'];
$aData['hdd'] = isset($_POST['hdd']) ? sys::int($_POST['hdd']) : $server['hdd'];
$aData['slots'] = isset($_POST['slots']) ? trim($_POST['slots']) : $server['slots'];
$aData['pack'] = isset($_POST['pack']) ? trim($_POST['pack']) : $server['pack'];
$aData['fps'] = isset($_POST['fps']) ? sys::int($_POST['fps']) : $server['fps'];
$aData['tickrate'] = isset($_POST['tickrate']) ? sys::int($_POST['tickrate']) : $server['tickrate'];
$aData['ram'] = isset($_POST['ram']) ? sys::int($_POST['ram']) : $server['ram'];
$aData['core_fix_one'] = isset($_POST['core_fix_one']) ? sys::int($_POST['core_fix_one']) : $server['core_fix_one'];
$aData['core_fix'] = isset($_POST['core_fix']) ? sys::int($_POST['core_fix']) : $server['core_fix'];
$aData['cpu_use_max'] = isset($_POST['cpu_use_max']) ? sys::int($_POST['cpu_use_max']) : $server['cpu_use_max'];
$aData['pingboost'] = isset($_POST['pingboost']) ? sys::int($_POST['pingboost']) : $server['pingboost'];
$aData['time'] = isset($_POST['time']) ? trim($_POST['time']) : $server['time'];
$aData['ftp_use'] = isset($_POST['ftp_use']) ? $_POST['ftp_use'] : $server['ftp_use'];
$aData['ftp_root'] = isset($_POST['ftp_root']) ? sys::int($_POST['ftp_root']) : $server['ftp_root'];
$aData['plugins_use'] = isset($_POST['plugins_use']) ? $_POST['plugins_use'] : $server['plugins_use'];
$aData['console_use'] = isset($_POST['console_use']) ? $_POST['console_use'] : $server['console_use'];
$aData['stats_use'] = isset($_POST['stats_use']) ? $_POST['stats_use'] : $server['stats_use'];
$aData['copy_use'] = isset($_POST['copy_use']) ? $_POST['copy_use'] : $server['copy_use'];
$aData['web_use'] = isset($_POST['web_use']) ? $_POST['web_use'] : $server['web_use'];
if($server['user'] != $aData['user'])
{
$sql->query('SELECT `id` FROM `users` WHERE `id`="'.$aData['user'].'" LIMIT 1');
if(!$sql->num())
sys::outjs(array('e' => 'Пользователь не найден.'));
else{
$sql->query('SELECT `id` FROM `web` WHERE `user`!="'.$aData['user'].'" AND `server`="'.$id.'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => 'Невозможно установить пользователя владельцем данного сервера
Из-за возможной несовместимости с бесплатными услугами.
Удалите у данного сервера бесплатные услуги.'));
}
}
if(sys::valid($aData['address'], 'other', $aValid['address']))
$aData['address'] = $server['address'];
$sql->query('SELECT `id` FROM `servers` WHERE `id`!="'.$id.'" AND `address`="'.$aData['address'].'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => 'Данный адрес занят другим сервером.'));
$sql->query('SELECT `id` FROM `servers` WHERE `id`!="'.$id.'" AND `address` LIKE \'%'.sys::first(explode(':', $unit['address'])).'\' AND `port`="'.$aData['port'].'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => 'Данный порт занят другим сервером.'));
$slots = explode(':', $aData['slots']);
if(!isset($slots[0]) AND !isset($slots[1]))
sys::outjs(array('e' => 'Слоты указаны не правильно.'));
if($slots[0] < 2 || $slots[1] < 2)
sys::outjs(array('e' => 'Слоты указаны не правильно.'));
if($slots[0] > $tarif['slots_max'] || $slots[0] < $tarif['slots_min'])
sys::outjs(array('e' => 'Слоты указаны не правильно.'));
$slots[1] = $slots[1] > $slots[0] ? $slots[0] : $slots[1];
$aPacks = sys::b64djs($tarif['packs']);
if(!array_key_exists($aData['pack'], $aPacks))
sys::outjs(array('e' => 'Указанная сборка не найдена.'));
if($aData['core_fix_one'])
{
if($aData['core_fix'])
{
$sql->query('SELECT `id` FROM `servers` WHERE `id`!="'.$id.'" AND `unit`="'.$server['unit'].'" AND `core_fix`="'.$aData['core_fix'].'" AND `core_fix_one`="1"');
if($sql->num())
sys::outjs(array('e' => 'Указанное ядро занято другим сервером.'));
}else
$aData['core_fix_one'] = 0;
}
if(!in_array($aData['pingboost'], array(1,2,3)))
$aData['pingboost'] = 0;
$aData['time'] = sys::checkdate($aData['time']);
foreach(array('ftp_use', 'plugins_use', 'console_use', 'stats_use', 'copy_use', 'web_use') as $section)
$aData[$section] = (string) $aData[$section] == 'on' ? '1' : '0';
$sql->query('UPDATE `servers` set '
.'`user`="'.$aData['user'].'",'
.'`address`="'.$aData['address'].'",'
.'`port`="'.$aData['port'].'",'
.'`slots`="'.$slots[0].'",'
.'`slots_start`="'.$slots[1].'",'
.'`fps`="'.$aData['fps'].'",'
.'`tickrate`="'.$aData['tickrate'].'",'
.'`ram`="'.$aData['ram'].'",'
.'`core_fix`="'.$aData['core_fix'].'",'
.'`core_fix_one`="'.$aData['core_fix_one'].'",'
.'`cpu_use_max`="'.$aData['cpu_use_max'].'",'
.'`pingboost`="'.$aData['pingboost'].'",'
.'`time`="'.$aData['time'].'",'
.'`ftp_use`="'.$aData['ftp_use'].'",'
.'`ftp_root`="'.$aData['ftp_root'].'",'
.'`plugins_use`="'.$aData['plugins_use'].'",'
.'`console_use`="'.$aData['console_use'].'",'
.'`stats_use`="'.$aData['stats_use'].'",'
.'`copy_use`="'.$aData['copy_use'].'",'
.'`web_use`="'.$aData['web_use'].'",'
.'`pack`="'.$aData['pack'].'",'
.'`hdd`="'.$aData['hdd'].'" WHERE `id`="'.$id.'" LIMIT 1');
$sql->query('UPDATE `web` set `user`="'.$aData['user'].'" WHERE `server`="'.$id.'"');
$mcache->delete('server_index_'.$id);
$mcache->delete('server_resources_'.$id);
$mcache->delete('server_status_'.$id);
sys::outjs(array('s' => 'ok'));
}
$sql->query('SELECT `name` FROM `units` WHERE `id`="'.$server['unit'].'" LIMIT 1');
$unit = $sql->get();
$packs = '';
$aPacks = sys::b64djs($tarif['packs']);
foreach($aPacks as $name => $fullname)
$packs .= '';
$packs = str_replace('"'.$server['pack'].'"', '"'.$server['pack'].'" selected', $packs);
$cfo = $server['core_fix_one'] ? '' : '';
$pingboost = str_replace('="'.$server['pingboost'].'"', '="'.$server['pingboost'].'" selected', '');
$ftp_root = $server['ftp_root'] ? '' : '';
$tarifs = '';
$sql->query('SELECT `id`, `name` FROM `tarifs` WHERE `unit`="'.$server['unit'].'" AND `game`="'.$server['game'].'" AND `id`!="'.$server['tarif'].'"');
while($tarif_list = $sql->get())
$tarifs .= '';
$copys = $sql->query('SELECT `id`, `user` FROM `copy` WHERE `server`="'.$id.'" LIMIT 10');
while($copy = $sql->get($copys))
{
$aCP = explode('_', $copy['user']);
if($aCP[0] != $aData['user'])
$sql->query('UPDATE `copy` set `user`="'.$aData['user'].'_'.$aCP[1].'" WHERE `id`="'.$copy['id'].' LIMIT 1');
}
$html->get('server', 'sections/servers');
$html->set('id', $id);
$html->set('name', $server['name']);
$html->set('address', $server['address']);
$html->set('port', $server['port']);
$html->set('slots', $server['slots']);
$html->set('slots_start', $server['slots_start']);
$html->set('user', $server['user']);
$html->set('game', $server['game']);
$html->set('unit', $unit['name']);
$html->set('tarif', '#'.$server['tarif'].' '.$tarif['name']);
$html->set('hdd', $server['hdd']);
$html->set('fps', $server['fps']);
$html->set('tickrate', $server['tickrate']);
$html->set('ram', $server['ram']);
$html->set('ftp_on', $server['ftp_on'] ? 'Использовался' : 'Не использовался');
$html->set('tarifs', $tarifs);
$html->set('pingboost', $pingboost);
$html->set('ftp_root', $ftp_root);
$html->set('core_fix', $server['core_fix']);
$html->set('cpu_use_max', $server['cpu_use_max']);
$html->set('cpu_limi', $cfg['cpu_use_max'][$server['game']]);
$html->set('core_fix_one', $cfo);
$html->set('packs', $packs);
$html->set('time', date('d/m/Y H:i', $server['time']));
$html->set('date', date('d.m.Y - H:i:s', $server['date']));
$html->set('overdue', $server['overdue'] == 0 ? 'Установить' : date('d/m/Y H:i', $server['overdue']));
$html->set('block', $server['block'] == 0 ? 'Заблокировать' : date('d/m/Y H:i', $server['block']));
foreach(array('ftp_use', 'plugins_use', 'console_use', 'stats_use', 'copy_use', 'web_use') as $section)
{
if($server[$section])
$html->unit($section, 1);
else
$html->unit($section);
}
$html->pack('main');
?>