Размер файла: 6.61Kb
<?php
/**
* Ant0ha's project
*
* @package
* @author Anton Pisarenko <[email protected]>
* @copyright Copyright (c) 2006 - 2010, Anton Pisarenko
* @license http://ant0ha.ru/license.txt
* @link http://ant0ha.ru
*/
defined('IN_SYSTEM') or die('<b>403<br />Запрет доступа!</b>');
/**
* Контроллер управления пользователями
*/
class User_Admin_Controller extends Controller {
/**
* Уровень пользовательского доступа
*/
protected $access_level = 8;
/**
* Тема
*/
protected $template_theme = 'admin';
/**
* Метод по умолчанию
*/
public function action_index() {
$this->action_list_users();
}
/**
* Удаление пользователя
*/
public function action_delete() {
main::is_demo();
# Получаем инфо о пользователе
if(!$user_delete = $this->db->get_row("SELECT * FROM #__users WHERE user_id = '". intval($_GET['user_id']) ."'"))
a_error("Пользователь не найден!");
$user_delete_access = $this->access->get_level($user_delete['status']);
if(ACCESS_LEVEL <= $user_delete_access) a_error("У вас нет прав на выполнение этой операции!");
else {
$this->db->query("DELETE FROM #__users WHERE user_id = ". intval($user_delete['user_id']));
a_notice('Пользователь удален!', a_url('user/admin'));
}
}
/**
* Бан пользователя
*/
public function action_ban() {
# Получаем инфо о пользователе
if(!$user_ban = $this->db->get_row("SELECT * FROM #__users WHERE user_id = '". intval($_GET['user_id']) ."'"))
a_error("Пользователь не найден!");
$user_ban_access = $this->access->get_level($user_ban['status']);
if(ACCESS_LEVEL <= $user_ban_access) a_error("У вас нет прав на выполнение этой операции!");
if(isset($_POST['submit'])) {
main::is_demo();
if(!is_numeric($_POST['hours'])) {
$this->error .= 'Неверный формат времени - только целые числа.<br />';
}
if(empty($_POST['description'])) {
$this->error .= 'Укажите причину бана.<br />';
}
if(!$this->error) {
$this->db->query("INSERT INTO #__users_ban SET
user_id = '". intval($_GET['user_id']) ."',
to_time = '". ($_POST['hours'] * 3600 + time()) ."',
description = '". a_safe($_POST['description']) ."'
");
a_notice('Пользователь забанен.', a_url('user/admin'));
}
}
if (isset($_POST['delete_ban'])) {
main::is_demo();
$this->db->query("DELETE FROM #__users_ban WHERE user_id = '". intval($_GET['user_id']) ."'");
a_notice('Пользователь разбанен.', a_url('user/admin'));
}
# Получаем информацию о текущем бане
$this->ban = $this->db->get_row("SELECT * FROM #__users_ban WHERE user_id = '". intval($_GET['user_id']) ."' AND status = 'enable'");
if(!isset($_POST['submit']) || $this->error) {
$this->tpl->assign(array(
'error' => $this->error,
'ban' => $this->ban,
'username_ban' => $user_ban['username']
));
$this->tpl->display('ban');
}
}
/**
* Редактирование пользователя
*/
public function action_edit() {
# Получаем инфо о пользователе
if(!$user_edit = $this->db->get_row("SELECT * FROM #__users WHERE user_id = '". intval($_GET['user_id']) ."'"))
a_error("Пользователь не найден!");
$user_edit_access = $this->access->get_level($user_edit['status']);
if(ACCESS_LEVEL <= $user_edit_access) a_error("У вас нет прав на выполнение этой операции!");
if(isset($_POST['submit'])) {
main::is_demo();
if(!main::check_input($_POST['email'], 'MAIL')) {
$this->error .= 'Неверный формат e-mail.<br />';
}
if($_POST['status'] != 'admin' && $_POST['status'] != 'moder' && $_POST['status'] != 'user') {
$this->error .= 'Укажите валидный статус!<br />';
}
if(ACCESS_LEVEL < 10 && $_POST['status'] != $user_edit['status']) {
$this->error .= 'Только администратор может менять статусы пользователей!<br />';
}
if(!$this->error) {
$this->db->query("UPDATE #__users SET
email = '". a_safe($_POST['email']) ."',
status = '". a_safe($_POST['status']) ."'
WHERE user_id = '". intval($_GET['user_id']) ."'
");
a_notice('Пользователь изменен!', a_url('user/admin'));
}
}
if(!isset($_POST['submit']) || $this->error) {
$this->tpl->assign(array(
'error' => $this->error,
'user_edit' => $user_edit
));
$this->tpl->display('edit');
}
}
/**
* Вход в панель к пользователю
*/
public function action_go_to_user_panel() {
if(!$check_user = $this->db->get_row("SELECT * FROM #__users WHERE user_id = '". intval($_GET['user_id']) ."'"))
a_error('Пользователь не найден!');
if(!a_check_rights($check_user['user_id'], $check_user['status']))
a_error('У вас нет прав на выполнение этого действия!');
$_SESSION['check_user_id'] = intval($_GET['user_id']);
header('Location: '. a_url(MAIN_MENU));
}
/**
* Листинг пользователей
*/
public function action_list_users() {
$this->per_page = 20;
# Получение данных
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM #__users
WHERE 1 = 1 AND user_id > 0 ";
if(!empty($_GET['user_id'])) $sql .= " AND user_id = ". intval($_GET['user_id']);
else {
if(!empty($_GET['login'])) $sql .= " AND username LIKE '%". a_safe($_GET['login']) ."%'";
if(!empty($_GET['status'])) $sql .= " AND status = '". a_safe($_GET['status']) ."'";
}
$sql .= " ORDER BY user_id ". ($_GET['sort'] == 'desc' ? 'DESC' : 'ASC') ." LIMIT $this->start, $this->per_page";
$users = $this->db->get_array($sql);
$total = $this->db->get_one("SELECT FOUND_ROWS()");
# Пагинация
$pg_conf['base_url'] = a_url('user/admin', 'status='. $_GET['status'] .'&login='. $_GET['username'] .'&user_id='. $_GET['user_id'] .'&sort='. $_GET['sort'] .'&start=');
$pg_conf['total_rows'] = $total;
$pg_conf['per_page'] = $this->per_page;
a_import('libraries/pagination');
$pg = new CI_Pagination($pg_conf);
$this->tpl->assign(array(
'users' => $users,
'total' => $total,
'db' => $this->db,
'pagination' => $pg->create_links()
));
$this->tpl->display('list_users');
}
}
?>