Файл: CMS/core/admin/users.php
Строк: 330
<?php
if (!defined('CMS')) { die('Access Denied!'); }
$config['usersearch'] = 30;
if (!empty($_POST['uz']) || !empty($_GET['uz'])) {
$uz = !empty($_GET['uz']) ? check($_GET['uz']) : check($_POST['uz']);
}
else $uz = '';
$countries = get_vars('country');
if (!$countries || !is_array($countries)) {
$countries = array();
$rows = $db->select("SELECT `tld`,`name` FROM ?_country ORDER BY `name` ASC;");
foreach($rows as $row) $countries[$row['tld']] = $row['name'];
set_vars('country', $countries);
}
if (is_admin(array(101, 102))) {
switch ($mod):
default:
$q = !empty($_REQUEST['q']) ? check(strtolower($_REQUEST['q'])) : '';
show_header('Управление пользователями');
echo '<div class="b">';
echo '<div class="form">';
echo '<form method="post" action="?m=users_edit&' . RND . '">';
echo 'Введите логин юзера:<br />';
echo '<input type="text" name="uz" maxlength="20" />';
echo '<input type="submit" class="btns" value="Редактировать" /></form></div>';
$arr = array();
$arr[] = '<a title="0-9" href="?m=users&q=1&' . RND . '">0-9</a>';
foreach(range('a', 'z') as $val) {
$arr[] = '<a href="?m=users&q=' . $val . '">' . strtoupper($val) . '</a>';
}
echo implode(' / ', $arr) . '<br />';
$arr = array();
echo 'Неактивные: ';
foreach(array(30,45,60, 90) as $val) $arr[] = '<a href="?m=users&day=' . $val . '">' . $val . '</a>';
echo implode(', ', $arr) . ' дней.<br />';
echo '</div>';
$onpage = !empty($config['usersearch']) ? num($config['usersearch']) : 30;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
if (!empty($q)) {
if ($q == 1) {
$search = "RLIKE '^[-0-9]'";
} else {
$search = "LIKE '$q%'";
}
$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 LOWER(`u`.`users_login`) " . $search . "
ORDER BY `u`.`users_point` DESC
LIMIT ?d, ?d", $from, $onpage);
}
else if (!empty($_REQUEST['day'])) {
$time = time() - (86400 * num($_REQUEST['day']));
$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_timelastlogin` < " . $time . "
ORDER BY `u`.`users_point` DESC
LIMIT ?d, ?d", $from, $onpage);
}
else {
$rows = $db->selectPage($total, "SELECT `u`.*, `v`.`visit_nowtime`
FROM ?_users `u`
LEFT JOIN ?_users_visit `v`
ON `u`.`users_login` = `v`.`visit_user`
ORDER BY `u`.`users_point` DESC
LIMIT ?d, ?d", $from, $onpage);
}
if (!empty($rows) && $total > 0) {
$i = $from + 1;
foreach($rows as $row) {
echo '<div class="b">';
echo '<div class="right">' . get_date($row['users_timelastlogin']) . '</div>';
echo $i++ . '. ' . user_visit_icon($row['users_login'], $row['users_gender'], $row['visit_nowtime']);
echo ' <a href="?m=users_edit&uz=' . $row['users_login'] . '&' . RND . '"><b>' . $row['users_login'] . '</b></a> (';
if (!empty($row['users_nickname'])) echo 'Ник: ' . $row['users_nickname'] . ' / ';
echo num2name($row['users_point'], $config['score_name']) . ')<br />';
if (!empty($_REQUEST['day'])) echo 'Не был на сайте: <b>' . makestime(time()-$row['users_timelastlogin']) . '</b><br />';
echo '- <a href="?m=users_files&uz=' . $row['users_login'] . '">Файлы</a><br />';
echo '</div>';
}
if (!empty($_REQUEST['day'])) {
echo show_pages('?m=users&day=' . num($_REQUEST['day']) . '&' . RND);
}
else {
echo show_pages('?m=users&q=' . $q . '&' . RND);
}
echo '<div class="b">- Найдено совпадений: ' . $total . '<br /></div>';
}
else show_error('Пользователей не найдено!');
break;
case 'users_edit':
$arr_access = array(101 => 'Суперадмин', 102 => 'Админ', 103 => 'Старший модер', 105 => 'Модератор', 106 => 'Журналист', 107 => 'Пользователь');
$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;", $uz);
if (!empty($user)) {
if ($log == $config['nickname'] || $log == $user['users_login'] || ($user['users_level'] < 101 || $user['users_level'] > 105)) {
if (!empty($_POST['save_user'])) {
$level = !empty($_POST['level']) ? num($_POST['level']) : '';
$pass = !empty($_POST['pass']) ? check($_POST['pass']) : '';
$email = !empty($_POST['email']) ? check($_POST['email']) : '';
$joined = !empty($_POST['joined']) ? check($_POST['joined']) : '';
$fname = !empty($_POST['fname']) ? check($_POST['fname']) : '';
$lname = !empty($_POST['lname']) ? check($_POST['lname']) : '';
$nickname = !empty($_POST['nickname']) ? check($_POST['nickname']) : '';
$country = !empty($_POST['country']) ? check($_POST['country']) : '';
$city = !empty($_POST['city']) ? check($_POST['city']) : '';
$info = !empty($_POST['info']) ? check($_POST['info']) : '';
$site = !empty($_POST['site']) ? check($_POST['site']) : '';
$icq = !empty($_POST['icq']) ? num($_POST['icq']) : '';
$jabber = !empty($_POST['jabber']) ? check($_POST['jabber']) : '';
$gender = !empty($_POST['gender']) ? num($_POST['gender']) : '';
$year = !empty($_POST['year']) ? num($_POST['year']) : '0000';
$month = !empty($_POST['month']) ? num($_POST['month']) : '00';
$month = (strlen($month) == 1) ? '0' . $month : $month;
$day = !empty($_POST['day']) ? num($_POST['day']) : '00';
$day = (strlen($day) == 1) ? '0' . $day : $day;
$birthday = $year . '-' . $month . '-' . $day;
$themes = !empty($_POST['themes']) ? check($_POST['themes']) : '';
$point = !empty($_POST['point']) ? num($_POST['point']) : '';
$money = !empty($_POST['money']) ? num($_POST['money']) : '';
$status = !empty($_POST['status']) ? check($_POST['status']) : '';
$avatar = !empty($_POST['avatar']) ? check($_POST['avatar']) : '';
$posrating = !empty($_POST['posrating']) ? num($_POST['posrating']) : '';
$negrating = !empty($_POST['negrating']) ? num($_POST['negrating']) : '';
$uploads = !empty($_POST['uploads']) ? num($_POST['uploads']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (empty($pass) || preg_match('|^[a-z0-9-]+$|i', $pass)) {
if (preg_match('#^([a-z0-9_-.])+@([a-z0-9_-.])+(.([a-z0-9])+)+$#', $email) || empty($email)) {
if (preg_match('#^([a-z0-9_-.])+@([a-z0-9_-.])+(.([a-z0-9])+)+$#', $jabber) || empty($jabber)) {
if (preg_match('#^http://([а-яa-z0-9_-.])+(.([а-яa-z0-9/])+)+$#u', $site) || empty($site)) {
if (preg_match('#^[0-9]{2}+.[0-9]{2}+.[0-9]{4}$#', $joined)) {
if (preg_match('#^[0-9]{4}+-[0-9]{2}+-[0-9]{2}$#', $birthday) || empty($birthday)) {
if ($gender == 1 || $gender == 2) {
if (cms_strlen($info) <= 1000) {
if ($log == $config['nickname']) {
$access = $level;
}
else {
$access = $user['users_level'];
}
if (!empty($pass)) {
$warning = '<b><span style="color:#ff0000">Внимание! Вы изменили пароль пользователя!</span></b><br />';
$warning .= 'Не забудьте ему напомнить его новый пароль: <b>' . $pass . '</b>';
$mdpass = md5(md5($pass));
}
else {
$mdpass = $user['users_pass'];
$warning = '';
}
list($uday, $umonth, $uyear) = explode('.', $joined);
$joined = mktime('0', '0', '0', $umonth, $uday, $uyear);
$rating = $posrating - $negrating;
$db->query("UPDATE ?_users SET `users_pass` = ?, `users_email` = ?, `users_joined` = ?, `users_level` = ?, `users_first_name` = ?, `users_last_name` = ?, `users_nickname` = ?, `users_country` = ?, `users_city` = ?, `users_info` = ?, `users_site` = ?, `users_icq` = ?, `users_jabber` = ?, `users_gender` = ?, `users_birthday` = ?, `users_themes` = ?, `users_point` = ?, `users_money` = ?, `users_status` = ?, `users_avatar` = ?, `users_rating` = ?, `users_posrating` = ?, `users_negrating` = ?, `users_uploads` = ? WHERE `users_login` = ? LIMIT 1;", $mdpass, $email, $joined, $access, $fname, $lname, $nickname, $country, $city, $info, $site, $icq, $jabber, $gender, $birthday, $themes, $point, $money, $status, $avatar, $rating, $posrating, $negrating, $uploads, $uz);
$inSes->addMessage('Данные юзера успешно изменены!' . $warning, 'ok');
redirect('?m=users&' . RND);
}
else $error = 'Ошибка! Слишком большая информация в графе о себе, не более 1000 символов!';
}
else $error = 'Ошибка! Вы не указали пол пользователя!';
}
else $error = 'Ошибка! Недопустимая дата дня рождения, необходим формат (дд.мм.гггг)!';
}
else $error = 'Ошибка! Недопустимая дата регистрации, необходим формат (дд.мм.гггг)!';
}
else $error = 'Ошибка! Недопустимый адрес сайта, необходим формат http://' . $_SERVER['HTTP_HOST'];
}
else $error = 'Ошибка! Недопустимый формат Jabber, необходим формат name@site.domen!';
}
else $error = 'Ошибка! Вы ввели неверный адрес e-mail, необходим формат name@site.domen!';
}
else $error = 'Ошибка! Недопустимые символы в пароле. Разрешены знаки латинского алфавита, цифры и дефис!';
}
else $error = 'Ошибка! Неверный идентификатор сессии, повторите действие!';
if (!empty($error)) $inSes->addMessage($error, 'error');
}
show_header('Управление пользователями - ' . $user['users_login']);
echo '<div class="b">' . user_visit_icon($user['users_login'], $user['users_gender'], $user['visit_nowtime']);
echo ' <b>Профиль ' . users_anketa($user['users_login']) . '</b> ';
echo user_visit($user['users_login']) . '<br /></div>';
$form = new cmsForm('?m=users_edit&uz=' . $user['users_login'] . '&rnd=' . $_SESSION['token']);
if ($user['users_login'] == $log) {
echo '<div class="message_warning"><b><span style="color:#ff0000">Внимание! Вы редактируете cобственный аккаунт!</span></b></div>';
}
if ($log == $config['nickname']) {
$form->addSelect('Уровень доступа:', 'level', $user['users_level'], $arr_access);
}
$form->addText('Имя юзера:', 'fname', $user['users_first_name']);
$form->addText('Фамилия:', 'lname', $user['users_last_name']);
$nick = !empty($user['users_nickname']) ? $user['users_nickname'] . ' - после ред., цвет будет утерян': '';
$form->addText('Ник юзера: ' . $nick, 'nickname', strip_tags($user['users_nickname']));
$form->addText('Город:', 'city', $user['users_city']);
$form->addSelect('Страна:', 'country', !empty($user['users_country']) ? $user['users_country'] : 'RU', $countries);
$form->addSelect('Пол:', 'gender', $user['users_gender'], array(1 => 'Мужской', 2 => 'Женский'));
$form->addText('Зарегистрирован:', 'joined', get_date($user['users_joined'], 'd.m.Y'));
if (!empty($user['users_birthday'])) {
list($year, $month, $day) = explode('-', $user['users_birthday']);
}
else {
$day = date('d');
$month = date('m');
$year = date('Y');
}
$form->addDate('- Дата рождения:', 'day', 'd', $day);
$form->addDate('', 'month', 'm', $month);
$form->addDate('', 'year', 'y', $year);
$form->addText('ICQ:','icq', $user['users_icq']);
$form->addText('E-mail:', 'email', $user['users_email']);
$form->addText('Jabber:', 'jabber', $user['users_jabber']);
$form->addText('Сайт:', 'site', $user['users_site']);
$form->addText('Актив:', 'point', $user['users_point']);
$form->addText('Деньги:', 'money', $user['users_money']);
$form->addText('Особый статус:', 'status', $user['users_status']);
$form->addText('Аватар:', 'avatar', $user['users_avatar']);
$form->addText('Авторитет (плюсы):', 'posrating', $user['users_posrating']);
$form->addText('Авторитет (минусы):', 'negrating', $user['users_negrating']);
$form->addText('Кол-во файлов в з.ц:', 'uploads', $user['users_uploads']);
$form->addText('Скин:', 'themes', $user['users_themes']);
$form->addTextarea('О себе:', 'info', str_replace('<br />', "rn", $user['users_info']));
//$form->addTextarea('Заметка:', 'note', str_replace('<br />', "rn", $user['users_note']));
$form->addText('Новый пароль: (Oставьте пустым если не надо менять)', 'pass');
echo $form->Submit('Изменить', 'save_user');
unset($form);
echo '<div class="b"><b>Дополнительная информация</b><br />';
if ($user['users_confirmreg'] == 1) {
echo '<span style="color:#ff0000"><b>Аккаунт не активирован</b></span><br />';
}
$visit = $db->selectRow("SELECT `visit_ip`, `visit_nowtime` FROM ?_users_visit WHERE `visit_user` = ? LIMIT 1;", $uz);
if (!empty($visit)) {
echo '<b>Последний визит:</b> ' . get_date($visit['visit_nowtime'], 'j F Y / H:i') . '<br />';
echo '<b>С IP-адреса:</b> ' . $visit['visit_ip'] . '<br />';
}
if ($user['users_ban'] == 1 && $user['users_timeban'] > SITE_TIME) {
echo '<span style="color:#ff0000"><b>Юзер забанен</b></span><br />';
}
if (!empty($user['users_timelastban']) && !empty($user['users_reasonban'])) {
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 />';
}
echo 'Строгих банов: <b>' . num($user['users_totalban']) . '</b><br /></div>';
if ($user['users_level'] < 101 || $user['users_level'] > 105) {
echo '<div class="b">' . icon('error.gif', 'icons');
echo ' <a href="?m=users_del&uz=' . $uz . '"><b>Удалить профиль</b></a><br /></div>';
}
echo '<div class="b">' . icon('return.png') . ' <a href="?m=users&' . RND . '">Вернуться</a><br /></div>';
}
else {
$inSes->addMessage('Ошибка! У вас недостаточно прав для редактирования этого профиля!');
redirect('?m=users&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Пользователя с данным логином не существует!');
redirect('?m=users&' . RND);
}
break;
case 'users_del':
$uz = !empty($_REQUEST['uz']) ? check($_REQUEST['uz']) : '';
include_once( dirname(__FILE__) . '/del.inc.php' );
$user = $db->selectRow("SELECT * FROM ?_users WHERE `users_login` = ? LIMIT 1;", $uz);
if (!empty($user)) {
if (!empty($_POST['del_users'])) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if ($user['users_level'] < 101 || $user['users_level'] > 105) {
if (!empty($_POST['black'])) {
$is_black = (int) $db->selectCell("SELECT `id` FROM ?_users_black_list
WHERE (LOWER(`login`) = ? OR LOWER(`email`) = ?)
LIMIT 1;", strtolower($user['users_login']), strtolower($user['users_email']));
if ($is_black < 1) {
$db->query("INSERT INTO ?_users_black_list (`id`, `login`, `email`, `site`, `time`) VALUES (?, ?, ?, ?, ?);", $user['users_id'], $user['users_login'], $user['users_email'], $user['users_site'], SITE_TIME);
}
}
/* Удаление фотографий в галерее */
delete_album($user['users_login']);
/* Удаление файлов пользователя */
delete_files($user['users_login']);
/* Удаления сообществ пользователя */
$coms = $db->select("SELECT `comm_id`, `comm_image` FROM ?_comm_comm WHERE `comm_user` = ?", $user['users_login']);
if (!empty($coms) && @count($coms) > 0) {
foreach($coms as $com) {
delete_soo($com['comm_id'], $com['comm_image']);
}
}
/* Удаление тем в форуме */
$topics = $db->selectCol("SELECT `topics_id` FROM ?_forums_topics WHERE `topics_author` = ?;", $user['users_login']);
if (!empty($topics)) {
$strtopics = implode(',', $topics);
$db->query("DELETE FROM ?_forums_posts WHERE `posts_topics_id` IN (" . $strtopics . ");");
$db->query("DELETE FROM ?_forums_topics WHERE `topics_id` IN (" . $strtopics . ");");
}
$db->query("DELETE FROM ?_forums_posts WHERE `posts_user` = ?;", $user['users_login']);
/* Удаление коментарий */
$db->query("DELETE FROM ?_comments WHERE `comm_author` = ?;", $user['users_login']);
/* Удаление профиля */
delete_users($user['users_login']);
$inSes->addMessage('Профиль пользователя успешно удален!', 'ok');
redirect('?m=users&' . RND);
}
else $inSes->addMessage('Ошибка! У вас недостаточно прав для удаления этого профиля!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Удаление пользователя ' . $user['users_login']);
echo '<div class="b">' . icon('error.gif', 'icons');
echo ' Вы подтверждаете, что хотите полностью удалить аккаунт пользователя ';
echo '<b>' . users_anketa($user['users_login']) . '</b>?<br /></div>';
$form = new cmsForm('?m=users_del&rnd=' . $_SESSION['token']);
$form->addcheckBox(array('', ' Добавить в черный список'), 'black');
$form->addHidden('uz',$user['users_login']);
echo $form->Submit('Удалить профиль', 'del_users');
unset($form);
echo '<div class="b">' . icon('return.png') . ' <a href="?m=users_edit&uz=' . $uz . '">Вернуться</a>';
echo ' | <a href="?m=users&' . RND . '">Выбор юзера</a><br /></div>';
}
else {
$inSes->addMessage('Ошибка! Пользователя с данным логином не существует!');
redirect('?m=users&' . RND);
}
break;
endswitch;
echo '<div class="b">' . icon('return.png') . ' <a href="index.php">В админку</a><br /></div>';
}
else {
redirect('./?' . RND);
}
?>