Файл: core/admin/ban.php
Строк: 413
<?php
if (!defined('CMS')) { die('Access Denied!'); }
if (is_admin(array(101, 102, 103))) {
$ban_times = array('min' => 'Минут', 'chas' => 'Часов', 'sut' => 'Суток');
if (!empty($_GET['razban'])) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$user = $db->selectRow("SELECT * FROM ?_users WHERE `users_login` = ? LIMIT 1;", check($_GET['razban']));
if (!empty($user)) {
if ($user['users_ban'] == 1) {
if ($user['users_totalban'] > 0 && $user['users_timeban'] > SITE_TIME + 43200) {
$bancount = 1;
} else {
$bancount = 0;
}
$db->query("UPDATE ?_users SET `users_ban` = ?, `users_timeban` = ?, `users_totalban` = (`users_totalban` - ?), `users_explainban` = ? WHERE `users_login` = ? LIMIT 1;", '0', '0', $bancount, '0', $user['users_login']);
$db->query("INSERT INTO ?_users_ban_history (`ban_user`, `ban_send`, `ban_time`) VALUES (?, ?, ?);", $user['users_login'], $log, SITE_TIME);
$inSes->addMessage('Аккаунт успешно разблокирован!', 'ok');
redirect('?m=ban&' . RND);
}
else $inSes->addMessage('Ошибка! Данный аккаунт уже разблокирован!');
}
else $inSes->addMessage('Ошибка! Пользователя с данным логином не существует!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
switch ($mod):
default:
show_header('Список забаненых');
$onpage = !empty($config['user_list']) ? num($config['user_list']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT `u`.*, `v`.`visit_nowtime`
FROM ?_users `u`
LEFT JOIN ?_users_visit `v`
ON `u`.`users_login` = `v`.`visit_user`
WHERE `u`.`users_ban` = '1' AND `u`.`users_timeban` > ?
ORDER BY `u`.`users_timelastban` DESC
LIMIT ?d, ?d", SITE_TIME, $from, $onpage);
if (!empty($rows) && $total > 0) {
$i = $from + 1;
foreach($rows as $row) {
echo '<div class="bl">' . $i++ . '. ' . user_visit_icon($row['users_login'], $row['users_gender'], $row['visit_nowtime']);
echo ' <b>' . users_anketa($row['users_login']) . '</b> ';
echo '(Забанен: ' . get_date($row['users_timelastban']) . ')<br />';
echo 'До окончания бана осталось ' . formattime($row['users_timeban'] - SITE_TIME) . '<br />';
echo 'Забанил: <b>' . users_anketa($row['users_loginsendban']) . '</b><br />';
echo 'Причина: ' . bb_code($row['users_reasonban']) . '<br />';
echo '<a href="?m=edit_ban&uz=' . $row['users_login'] . '&' . RND . '">Редактировать</a> | ';
echo '<a href="?m=ban&razban=' . $row['users_login'] . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Разбанить</a>';
echo '</div>';
}
echo show_pages('?m=ban');
echo '<div class="bl">Всего забанено: <b>' . num($total) . '</b><br /></div>';
}
else {
show_error('Пользователей еще нет!');
}
$form = new cmsForm('?m=ban_user', 'post');
$form->addText('Логин пользователя:', 'uz');
echo $form->Submit('Редактировать');
unset($form);
show_error('Введите логин пользователя который необходимо отредактировать');
break;
case 'ban_user':
$user = $db->selectRow("SELECT `u`.*, `v`.`visit_nowtime`
FROM ?_users `u`
LEFT JOIN ?_users_visit `v`
ON `u`.`users_login` = `v`.`visit_user`
WHERE `u`.`users_login` = ? LIMIT 1;", request('uz'));
if (!empty($user)) {
if (!empty($_POST['submit'])) {
$bantime = !empty($_POST['bantime']) ? abs(round($_POST['bantime'], 1)) : '';
$bantype = !empty($_POST['bantype']) ? check($_POST['bantype']) : '';
$reasonban = !empty($_POST['reasonban']) ? check($_POST['reasonban']) : '';
$note = !empty($_POST['note']) ? check($_POST['note']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (empty($user['users_ban']) || $user['users_timeban'] < SITE_TIME) {
if ($user['users_level'] < 101 || $user['users_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['max_ban_time']) {
if (cms_strlen($reasonban) >= 5 && cms_strlen($reasonban) <= 1000) {
if (cms_strlen($note) < 1000) {
$bancount = ($bantotaltime > 720) ? 1 : 0;
$db->query("UPDATE ?_users SET `users_ban` = ?, `users_timeban` = ?, `users_timelastban` = ?, `users_reasonban` = ?, `users_loginsendban` = ?, `users_totalban` = (`users_totalban` + ?), `users_explainban` = ? WHERE `users_login` = ? LIMIT 1;", 1, SITE_TIME + ($bantotaltime * 60), SITE_TIME, $reasonban, $log, $bancount, 1, $user['users_login']);
$db->query("INSERT INTO ?_users_ban_history (`ban_user`, `ban_send`, `ban_type`, `ban_reason`, `ban_term`, `ban_time`) VALUES (?, ?, ?, ?, ?, ?);", $user['users_login'], $log, 1, $reasonban, $bantotaltime * 60, SITE_TIME);
$inSes->addMessage('Аккаунт успешно заблокирован!', 'ok');
redirect('?m=ban&' . RND);
}
else $inSes->addMessage('Ошибка! Слишком большая заметка, не более 1000 символов!');
}
else $inSes->addMessage('Ошибка! Слишком длинная или короткая причина бана!');
}
else $inSes->addMessage('Ошибка! Максимальное время бана ' . round($config['max_ban_time'] / 1440).' суток!');
}
else $inSes->addMessage('Ошибка! Вы не указали время бана!');
}
else $inSes->addMessage('Ошибка! Запрещено банить админов и модеров сайта!');
}
else $inSes->addMessage('Ошибка! Данный аккаунт уже заблокирован!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Бан - Разбан');
echo '<div class="bl">';
echo user_visit_icon($user['users_login'], $user['users_gender'], $user['visit_nowtime']);
echo ' <b>Профиль ' . users_anketa($user['users_id'], $user['users_login']) . '</b> ';
echo user_visit($user['users_login']) . '<br /></div>';
if (!empty($user['users_timelastban']) && !empty($user['users_reasonban'])) {
echo '<div class="bl">';
echo 'Последний бан: ' . get_date($user['users_timelastban'], 'j F Y / H:i') . '<br />';
echo 'Последняя причина: ' . bb_code($user['users_reasonban']) . '<br />';
echo 'Забанил: ' . users_anketa($user['users_loginsendban']) . '<br /></div>';
}
$total = (int) $db->selectCell("SELECT COUNT(*) FROM ?_users_ban_history WHERE `ban_user` = ?;", $user['users_login']);
echo '<div class="bl">';
echo '- Строгих нарушений: <b>' . $user['users_totalban'] . '</b><br />';
echo '- <a href="?m=ban_history&uz=' . $user['users_login'] . '&' . RND . '">История банов</a> (' . $total . ')<br /></div>';
if ($user['users_level'] < 101 || $user['users_level'] > 105) {
if (empty($user['users_ban']) || $user['users_timeban'] < SITE_TIME) {
if ($user['users_totalban'] < 5) {
$note = $db->selectRow("SELECT * FROM ?_users_note WHERE `note_user` = ? LIMIT 1;", $user['users_login']);
$note['note_text'] = !empty($note['note_text']) ? $note['note_text'] : '';
$form = new cmsForm('?m=ban_user&rnd=' . $_SESSION['token'], 'post');
$form->addText('Время бана:', 'bantime', request('bantime'));
$form->addSelect('', 'bantype', request('bantype'), $ban_times);
$form->addTextarea('Причина бана:', 'reasonban', request('reasonban'));
$form->addHidden('uz',$user['users_login']);
echo $form->Submit('Забанить', 'submit');
unset($form);
echo '<div class="bl">';
echo 'Подсчет нарушений производится при бане более чем на 12 часов<br />';
echo 'При общем числе нарушений более пяти, профиль пользователя удаляется<br />';
echo 'Максимальное время бана ' . round($config['max_ban_time'] / 1440) . ' суток<br />';
echo 'Внимание! Постарайтесь как можно подробнее описать причину бана<br /></div>';
}
else {
echo '<div class="bl">';
echo '<b><span style="color:#ff0000">Внимание! Пользователь превысил лимит банов</span></b><br />';
echo 'Вы можете удалить этот профиль!<br /></div>';
echo '<div class="link"><a href="?m=users_del&uz=' . $user['users_login'] . '&' . RND . '">Удалить профиль</a></div>';
}
}
else {
echo '<div class="bl">';
echo '<b><span style="color:#ff0000">Внимание, данный аккаунт заблокирован!</span></b><br />';
echo 'До окончания бана: '.formattime($user['users_timeban'] - SITE_TIME).'<br /><br />';
echo '<img src="../images/img/edit.gif" alt="" /> ';
echo '<a href="?m=edit_ban&uz=' . $user['users_login'] . '&' . RND . '">Изменить</a><br />';
echo '<img src="../images/img/reload.gif" alt="" /> ';
echo '<a href="?m=ban&razban=' . $user['users_login'] . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Разбанить</a>';
echo '</div>';
}
}
else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
echo '<div class="link"><a href="?m=ban&' . RND . '">Вернуться</a></div>';
}
else {
$inSes->addMessage('Ошибка! Пользователя с данным логином не существует!');
redirect('?m=ban&' . RND);
}
break;
case 'edit_ban':
$user = $db->selectRow("SELECT `u`.*, `v`.`visit_nowtime`
FROM ?_users `u`
LEFT JOIN ?_users_visit `v`
ON `u`.`users_login` = `v`.`visit_user`
WHERE `u`.`users_login` = ? LIMIT 1;", request('uz'));
if (!empty($user)) {
if (!empty($_POST['submit'])) {
$bantime = !empty($_POST['bantime']) ? abs(round($_POST['bantime'], 1)) : '';
$bantype = !empty($_POST['bantype']) ? check($_POST['bantype']) : '';
$reasonban = !empty($_POST['reasonban']) ? check($_POST['reasonban']) : '';
$note = !empty($_POST['note']) ? check($_POST['note']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!empty($user['users_ban']) && $user['users_timeban'] > SITE_TIME) {
if ($user['users_level'] < 101 || $user['users_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['max_ban_time']) {
if (cms_strlen($reasonban) >= 5 && cms_strlen($reasonban) <= 1000) {
if (cms_strlen($note) <= 1000) {
$db->query("UPDATE ?_users SET `users_ban` = ?, `users_timeban` = ?, `users_reasonban` = ?, `users_loginsendban` = ? WHERE `users_login` = ? LIMIT 1;", 1, SITE_TIME + ($bantotaltime * 60), $reasonban, $log, $user['users_login']);
$db->query("INSERT INTO ?_users_ban_history (`ban_user`, `ban_send`, `ban_type`, `ban_reason`, `ban_term`, `ban_time`) VALUES (?, ?, ?, ?, ?, ?);", $user['users_login'], $log, 2, $reasonban, $bantotaltime * 60, SITE_TIME);
$inSes->addMessage('Данные успешно изменены!', 'ok');
}
else $inSes->addMessage('Ошибка! Слишком большая заметка, не более 1000 символов!');
}
else $inSes->addMessage('Ошибка! Слишком длинная или короткая причина бана!');
}
else $inSes->addMessage('Ошибка! Максимальное время бана ' . round($config['max_ban_time'] / 1440) . ' суток!');
}
else $inSes->addMessage('Ошибка! Вы не указали время бана!');
}
else $inSes->addMessage('Ошибка! Запрещено банить админов и модеров сайта!');
}
else $inSes->addMessage('Ошибка! Данный пользователь не забанен!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Бан - Разбан');
echo '<div class="bl">';
echo user_visit_icon($user['users_login'], $user['users_gender'], $user['visit_nowtime']);
echo ' <b>Профиль ' . users_anketa($user['users_id'], $user['users_login']) . '</b> ';
echo user_visit($user['users_login']) . '<br /></div>';
echo '<div class="bl">';
if ($user['users_level'] < 101 || $user['users_level'] > 105) {
if (!empty($user['users_ban']) && $user['users_timeban'] > SITE_TIME) {
if (!empty($user['users_timelastban'])) {
echo 'Последний бан: ' . get_date($user['users_timelastban'], 'j F Y / H:i') . '<br />';
echo 'Забанил: ' . users_anketa($user['users_loginsendban']) . '<br />';
}
echo 'Строгих нарушений: <b>' . $user['users_totalban'] . '</b><br />';
echo 'До окончания бана: ' . formattime($user['users_timeban'] - SITE_TIME) . '<br /></div>';
if ($user['users_timeban'] - SITE_TIME >= 86400) {
$type = 'sut';
$file_time = round(((($user['users_timeban'] - SITE_TIME) / 60) / 60) / 24, 1);
}
else if ($user['users_timeban'] - SITE_TIME >= 3600) {
$type = 'chas';
$file_time = round((($user['users_timeban'] - SITE_TIME) / 60) / 60, 1);
}
else {
$type = 'min';
$file_time = round(($user['users_timeban'] - SITE_TIME) / 60);
}
$form = new cmsForm('?m=edit_ban&rnd=' . $_SESSION['token'], 'post');
$form->addText('Время бана:', 'bantime', $file_time);
$form->addSelect('', 'bantype', $type, $ban_times);
$form->addTextarea('Причина бана:', 'reasonban', $user['users_reasonban']);
$form->addHidden('uz',$user['users_login']);
echo $form->Submit('Изменить', 'submit');
unset($form);
}
else {
show_error('Ошибка! Данный пользователь не забанен!');
}
}
else {
show_error('Ошибка! Запрещено банить админов и модеров сайта!');
}
echo '<div class="link"><a href="?m=ban&' . RND . '">Вернуться</a></div>';
}
else {
$inSes->addMessage('Ошибка! Пользователя с данным логином не существует!');
redirect('?m=ban&' . RND);
}
break;
case 'ban_history':
$uz = !empty($_GET['uz']) ? check($_GET['uz']) : '';
show_header('История банов ' . $uz);
$onpage = !empty($config['user_list']) ? num($config['user_list']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT `h`.*, `v`.`visit_nowtime`, `u`.`users_gender`
FROM ?_users_ban_history `h`
LEFT JOIN ?_users `u`
ON `h`.`ban_user` = `u`.`users_login`
LEFT JOIN ?_users_visit `v`
ON `h`.`ban_user` = `v`.`visit_user`
WHERE `h`.`ban_user` = ?
ORDER BY `h`.`ban_time` DESC
LIMIT ?d, ?d", $uz, $from, $onpage);
if (!empty($rows) && $total > 0) {
$i = $from + 1;
foreach($rows as $row) {
echo '<div class="bl">';
echo '<div class="right">(Забанен: ' . get_date($row['ban_time']) . ')</div>';
echo $i++ . '. ' . user_visit_icon($row['ban_user'], $row['users_gender'], $row['visit_nowtime']);
echo ' <b>' . users_anketa($row['ban_user']) . '</b><br />';
echo 'Забанен на: ' . formattime($row['ban_term']) . '<br />';
echo 'Забанил: <b>' . users_anketa($row['ban_send']) . '</b><br />';
echo 'Причина: ' . bb_code($row['ban_reason']) . '<br />';
echo '</div>';
}
echo show_pages('?m=ban_history&uz=' . $uz);
echo '<div class="bl">Всего банов: <b>' . num($total) . '</b><br /></div>';
}
else {
show_error('История банов не найдена!');
}
$form = new cmsForm('?m=ban_user', 'post');
$form->addText('Логин пользователя:', 'uz', request('uz'));
echo $form->Submit('Редактировать');
unset($form);
echo '<div class="bl">Введите логин пользователя который необходимо отредактировать.</div>';
echo '<div class="link"><a href="?m=ban&' . RND . '">Вернуться</a></div>';
break;
endswitch;
echo '<div class="link"><a href="?' . RND . '">В админку</a></div>';
show_footer();
}
else {
redirect('/?' . RND);
}
?>