<?php
App::view($config['themes'].'/index');
if (isset($_GET['act'])) {
$act = check($_GET['act']);
} else {
$act = 'index';
}
if (isset($_POST['uz'])) {
$uz = check($_POST['uz']);
} elseif (isset($_GET['uz'])) {
$uz = check($_GET['uz']);
} else {
$uz = '';
}
if (is_admin([101, 102, 103])) {
show_title('Бан/Разбан');
switch ($act):
############################################################################################
## Главная страница ##
############################################################################################
case 'index':
echo '<div class="form">';
echo 'Логин или ник пользователя:<br />';
echo '<form method="post" action="/admin/ban?act=edit">';
echo '<input type="text" name="uz" maxlength="20" />';
echo '<input value="Редактировать" type="submit" /></form></div><br />';
echo 'Введите логин пользователя который необходимо отредактировать<br /><br />';
break;
############################################################################################
## Редактирование ##
############################################################################################
case 'edit':
$user = DB::run() -> queryFetch("SELECT * FROM `users` WHERE LOWER(`login`)=? OR LOWER(`nickname`)=? LIMIT 1;", [strtolower($uz), utf_lower($uz)]);
if (!empty($user)) {
$uz = $user['login'];
echo user_gender($user['login']).' <b>Профиль '.profile($user['login']).'</b> '.user_visit($user['login']).'<br /><br />';
if (!empty($user['timelastban']) && !empty($user['reasonban'])) {
echo '<div class="form">';
echo 'Последний бан: '.date_fixed($user['timelastban'], 'j F Y / H:i').'<br />';
echo 'Последняя причина: '.App::bbCode($user['reasonban']).'<br />';
echo 'Забанил: '.profile($user['loginsendban']).'</div><br />';
}
$total = DB::run() -> querySingle("SELECT COUNT(*) FROM `banhist` WHERE `user`=?;", [$uz]);
echo 'Строгих нарушений: <b>'.$user['totalban'].'</b><br />';
echo '<i class="fa fa-history"></i> <b><a href="/admin/banhist?act=view&uz='.$uz.'">История банов</a></b> ('.$total.')<br /><br />';
if ($user['level'] < 101 || $user['level'] > 105) {
if (empty($user['ban']) || $user['timeban'] < SITETIME) {
if ($user['totalban'] < 5) {
echo '<div class="form">';
echo '<form method="post" action="/admin/ban?act=zaban&uz='.$uz.'&uid='.$_SESSION['token'].'">';
echo '<b>Время бана:</b><br /><input name="bantime" /><br />';
echo '<input name="bantype" type="radio" value="min" checked="checked" /> Минут<br />';
echo '<input name="bantype" type="radio" value="chas" /> Часов<br />';
echo '<input name="bantype" type="radio" value="sut" /> Суток<br />';
echo '<b>Причина бана:</b><br />';
echo '<textarea name="reasonban" cols="25" rows="5"></textarea><br />';
$usernote = DB::run() -> queryFetch("SELECT * FROM `note` WHERE `user`=? LIMIT 1;", [$uz]);
echo '<b>Заметка:</b><br />';
echo '<textarea cols="25" rows="5" name="note">'.$usernote['text'].'</textarea><br />';
echo '<input value="Забанить" type="submit" /></form></div><br />';
echo 'Подсчет нарушений производится при бане более чем на 12 часов<br />';
echo 'При общем числе нарушений более пяти, профиль пользователя удаляется<br />';
echo 'Максимальное время бана '.round($config['maxbantime'] / 1440).' суток<br />';
echo 'Внимание! Постарайтесь как можно подробнее описать причину бана<br /><br />';
} else {
echo '<b><span style="color:#ff0000">Внимание! Пользователь превысил лимит банов</span></b><br />';
echo 'Вы можете удалить этот профиль!<br /><br />';
echo '<i class="fa fa-times"></i> <b><a href="/admin/ban?act=deluser&uz='.$uz.'&uid='.$_SESSION['token'].'">Удалить профиль</a></b><br /><br />';
}
} else {
echo '<b><span style="color:#ff0000">Внимание, данный аккаунт заблокирован!</span></b><br />';
echo 'До окончания бана: '.formattime($user['timeban'] - SITETIME).'<br /><br />';
echo '<i class="fa fa-pencil"></i> <a href="/admin/ban?act=editban&uz='.$uz.'">Изменить</a><br />';
echo '<i class="fa fa-arrow-circle-up"></i> <a href="/admin/ban?act=razban&uz='.$uz.'&uid='.$_SESSION['token'].'">Разбанить</a><hr />';
}
} else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
} else {
show_error('Ошибка! Пользователя с данным логином не существует!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/ban">Вернуться</a><br />';
break;
############################################################################################
## Редактирование бана ##
############################################################################################
case 'editban':
$user = DB::run() -> queryFetch("SELECT * FROM `users` WHERE `login`=? LIMIT 1;", [$uz]);
if (!empty($user)) {
echo user_gender($user['login']).' <b>Профиль '.profile($user['login']).'</b> '.user_visit($user['login']).'<br /><br />';
if ($user['level'] < 101 || $user['level'] > 105) {
if (!empty($user['ban']) && $user['timeban'] > SITETIME) {
if (!empty($user['timelastban'])) {
echo 'Последний бан: '.date_fixed($user['timelastban'], 'j F Y / H:i').'<br />';
echo 'Забанил: '.profile($user['loginsendban']).'<br />';
}
echo 'Строгих нарушений: <b>'.$user['totalban'].'</b><br />';
echo 'До окончания бана: '.formattime($user['timeban'] - SITETIME).'<br /><br />';
if ($user['timeban'] - SITETIME >= 86400) {
$type = 'sut';
$file_time = round(((($user['timeban'] - SITETIME) / 60) / 60) / 24, 1);
} elseif (
$user['timeban'] - SITETIME >= 3600) {
$type = 'chas';
$file_time = round((($user['timeban'] - SITETIME) / 60) / 60, 1);
} else {
$type = 'min';
$file_time = round(($user['timeban'] - SITETIME) / 60);
}
echo '<div class="form">';
echo '<form method="post" action="/admin/ban?act=changeban&uz='.$uz.'&uid='.$_SESSION['token'].'">';
echo 'Время бана:<br /><input name="bantime" value="'.$file_time.'" /><br />';
$checked = ($type == 'min') ? ' checked="checked"' : '';
echo '<input name="bantype" type="radio" value="min"'.$checked.' /> Минут<br />';
$checked = ($type == 'chas') ? ' checked="checked"' : '';
echo '<input name="bantype" type="radio" value="chas"'.$checked.' /> Часов<br />';
$checked = ($type == 'sut') ? ' checked="checked"' : '';
echo '<input name="bantype" type="radio" value="sut"'.$checked.' /> Суток<br />';
echo 'Причина бана:<br />';
echo '<textarea name="reasonban" cols="25" rows="5">'.$user['reasonban'].'</textarea><br />';
echo '<input value="Изменить" type="submit" /></form></div><br />';
} else {
show_error('Ошибка! Данный пользователь не забанен!');
}
} else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
} else {
show_error('Ошибка! Пользователя с данным логином не существует!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/ban?act=edit&uz='.$uz.'">Вернуться</a><br />';
break;
############################################################################################
## Изменение бана ##
############################################################################################
case 'changeban':
$uid = check($_GET['uid']);
$bantime = abs(round($_POST['bantime'], 1));
$bantype = check($_POST['bantype']);
$reasonban = check($_POST['reasonban']);
$note = check($_POST['note']);
if ($uid == $_SESSION['token']) {
$user = DB::run() -> queryFetch("SELECT * FROM `users` WHERE `login`=? LIMIT 1;", [$uz]);
if (!empty($user)) {
if (!empty($user['ban']) && $user['timeban'] > SITETIME) {
if ($user['level'] < 101 || $user['level'] > 105) {
if ($bantype == 'min') {
$bantotaltime = $bantime;
}
if ($bantype == 'chas') {
$bantotaltime = round($bantime * 60);
}
if ($bantype == 'sut') {
$bantotaltime = round($bantime * 1440);
}
if ($bantotaltime > 0) {
if ($bantotaltime <= $config['maxbantime']) {
if (utf_strlen($reasonban) >= 5 && utf_strlen($reasonban) <= 1000) {
if (utf_strlen($note) <= 1000) {
DB::run() -> query("UPDATE `users` SET `ban`=?, `timeban`=?, `reasonban`=?, `loginsendban`=? WHERE `login`=? LIMIT 1;", [1, SITETIME + ($bantotaltime * 60), $reasonban, $log, $uz]);
DB::run() -> query("INSERT INTO `banhist` (`user`, `send`, `type`, `reason`, `term`, `time`) VALUES (?, ?, ?, ?, ?, ?);", [$uz, $log, 2, $reasonban, $bantotaltime * 60, SITETIME]);
notice('Данные успешно изменены!');
redirect("/admin/ban?act=edit&uz=$uz");
} else {
show_error('Ошибка! Слишком большая заметка, не более 1000 символов!');
}
} else {
show_error('Ошибка! Слишком длинная или короткая причина бана!');
}
} else {
show_error('Ошибка! Максимальное время бана '.round($config['maxbantime'] / 1440).' суток!');
}
} else {
show_error('Ошибка! Вы не указали время бана!');
}
} else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
} else {
show_error('Ошибка! Данный пользователь не забанен!');
}
} else {
show_error('Ошибка! Пользователя с данным логином не существует!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/ban?act=editban&uz='.$uz.'">Вернуться</a><br />';
break;
############################################################################################
## Бан пользователя ##
############################################################################################
case 'zaban':
$uid = check($_GET['uid']);
$bantime = abs(round($_POST['bantime'], 1));
$bantype = check($_POST['bantype']);
$reasonban = check($_POST['reasonban']);
$note = check($_POST['note']);
if ($uid == $_SESSION['token']) {
$user = DB::run() -> queryFetch("SELECT * FROM `users` WHERE `login`=? LIMIT 1;", [$uz]);
if (!empty($user)) {
if (empty($user['ban']) || $user['timeban'] < SITETIME) {
if ($user['level'] < 101 || $user['level'] > 105) {
if ($bantype == 'min') {
$bantotaltime = $bantime;
}
if ($bantype == 'chas') {
$bantotaltime = round($bantime * 60);
}
if ($bantype == 'sut') {
$bantotaltime = round($bantime * 1440);
}
if ($bantotaltime > 0) {
if ($bantotaltime <= $config['maxbantime']) {
if (utf_strlen($reasonban) >= 5 && utf_strlen($reasonban) <= 1000) {
if (utf_strlen($note) <= 1000) {
if ($bantotaltime > 720) {
$bancount = 1;
} else {
$bancount = 0;
}
DB::run() -> query("UPDATE `users` SET `ban`=?, `timeban`=?, `timelastban`=?, `reasonban`=?, `loginsendban`=?, `totalban`=`totalban`+?, `explainban`=? WHERE `login`=? LIMIT 1;", [1, SITETIME + ($bantotaltime * 60), SITETIME, $reasonban, $log, $bancount, 1, $uz]);
DB::run() -> query("INSERT INTO `banhist` (`user`, `send`, `type`, `reason`, `term`, `time`) VALUES (?, ?, ?, ?, ?, ?);", [$uz, $log, 1, $reasonban, $bantotaltime * 60, SITETIME]);
DB::run() -> query("INSERT INTO `note` (`user`, `text`, `edit`, `time`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE `text`=?, `edit`=?, `time`=?;", [$uz, $note, $log, SITETIME, $note, $log, SITETIME]);
notice('Аккаунт успешно заблокирован!');
redirect("/admin/ban?act=edit&uz=$uz");
} else {
show_error('Ошибка! Слишком большая заметка, не более 1000 символов!');
}
} else {
show_error('Ошибка! Слишком длинная или короткая причина бана!');
}
} else {
show_error('Ошибка! Максимальное время бана '.round($config['maxbantime'] / 1440).' суток!');
}
} else {
show_error('Ошибка! Вы не указали время бана!');
}
} else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
} else {
show_error('Ошибка! Данный аккаунт уже заблокирован!');
}
} else {
show_error('Ошибка! Пользователя с данным логином не существует!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/ban?act=edit&uz='.$uz.'">Вернуться</a><br />';
break;
############################################################################################
## Разбан пользователя ##
############################################################################################
case 'razban':
$uid = check($_GET['uid']);
if ($uid == $_SESSION['token']) {
$user = DB::run() -> queryFetch("SELECT * FROM `users` WHERE `login`=? LIMIT 1;", [$uz]);
if (!empty($user)) {
if ($user['ban'] == 1) {
if ($user['totalban'] > 0 && $user['timeban'] > SITETIME + 43200) {
$bancount = 1;
} else {
$bancount = 0;
}
DB::run() -> query("UPDATE `users` SET `ban`=?, `timeban`=?, `totalban`=`totalban`-?, `explainban`=? WHERE `login`=? LIMIT 1;", [0, 0, $bancount, 0, $uz]);
DB::run() -> query("INSERT INTO `banhist` (`user`, `send`, `time`) VALUES (?, ?, ?);", [$uz, $log, SITETIME]);
notice('Аккаунт успешно разблокирован!');
redirect("/admin/ban?act=edit&uz=$uz");
} else {
show_error('Ошибка! Данный аккаунт уже разблокирован!');
}
} else {
show_error('Ошибка! Пользователя с данным логином не существует!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<i class="fa fa-arrow-circle-left"></i> <a href="/admin/ban?act=edit&uz='.$uz.'">Вернуться</a><br />';
break;
############################################################################################
## Удаление пользователя ##
############################################################################################
case 'deluser':
$uid = check($_GET['uid']);
if ($uid == $_SESSION['token']) {
$user = DB::run() -> queryFetch("SELECT * FROM `users` WHERE `login`=? LIMIT 1;", [$uz]);
if (!empty($user)) {
if ($user['totalban'] >= 5) {
if ($user['level'] < 101 || $user['level'] > 105) {
$blackmail = DB::run() -> querySingle("SELECT `id` FROM `blacklist` WHERE `type`=? AND `value`=? LIMIT 1;", [1, $user['email']]);
if (empty($blackmail) && !empty($user['email'])) {
DB::run() -> query("INSERT INTO `blacklist` (`type`, `value`, `user`, `time`) VALUES (?, ?, ?, ?);", [1, $user['email'], $log, SITETIME]);
}
$blacklogin = DB::run() -> querySingle("SELECT `id` FROM `blacklist` WHERE `type`=? AND `value`=? LIMIT 1;", [2, strtolower($user['login'])]);
if (empty($blacklogin)) {
DB::run() -> query("INSERT INTO `blacklist` (`type`, `value`, `user`, `time`) VALUES (?, ?, ?, ?);", [2, $user['login'], $log, SITETIME]);
}
delete_album($uz);
delete_users($uz);
echo 'Данные занесены в черный список!<br />';
echo '<i class="fa fa-check"></i> <b>Профиль пользователя успешно удален!</b><br /><br />';
} else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
} else {
show_error('Ошибка! У пользователя менее 5 нарушений, удаление невозможно!');
}
} else {
show_error('Ошибка! Пользователя с данным логином не существует!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo'<i class="fa fa-arrow-circle-left"></i> <a href="/admin/ban">Вернуться</a><br />';
break;
endswitch;
echo '<i class="fa fa-wrench"></i> <a href="/admin">В админку</a><br />';
} else {
redirect("/");
}
App::view($config['themes'].'/foot');