<?
class User
extends Public_Model
{
var $is_login = FALSE;
var $info = array();
var $last_error = FALSE;
function User
() {
parent
::Public_Model();
$id = $this -> session -> userdata('user_id');
if ($id > 0) {
$this -> is_login = TRUE;
$this -> info = $this -> session -> get_array('user_', TRUE);
}
}
function isset_email
($email) {
$query = $this -> db -> query('SELECT id FROM tbl_users WHERE email = ? LIMIT 1', $email);
$array = $query -> result_array();
return isset($array[0]['id']);
}
function get_password_hash
($password) {
return md5($password . 'key');
}
function get_user_info
($id = array(), $fields = array()) {
if (!is_array($id)) {
$id = array('id' => $id);
}
$keys = $vals = array();
foreach ($id as $k => $v) {
$keys[] = "$k = ?";
$vals[] = $v;
}
if (!count($fields)) {
$fields = array('*');
}
$query = $this -> db -> query('SELECT ' . join(', ', $fields). ' FROM tbl_users WHERE ' . join(' AND ', $keys) . ' LIMIT 1', $vals);
$user = $query -> result_array();
return isset($user[0]) ?
$user[0] : FALSE;
}
function login
($id = FALSE, $email = FALSE, $password = FALSE) {
$user = array();
if ($login && $password) {
$user = $this -> get_user_info(array('email' => $email), array('id', 'email', 'pass', 'status', 'active'));
if (!$user) {
$this -> last_error = 'Пользователь с таким логином в системе не значится';
return FALSE;
}
if ($user['password'] != $this -> get_password_hash($password)) {
$this -> last_error = 'Не правильный пароль';
return FALSE;
}
} elseif ($id) {
$user = $this -> get_user_info($id, array('id', 'email', 'pass', 'status', 'active'));
if (!$user) {
$this -> last_error = 'Такого пользователя в системе нет';
return FALSE;
}
} else {
$this -> last_error = 'Не введен логин или пароль';
return FALSE;
}
// Если пользователь не активен
if ($user['active'] != '1') {
$this -> last_error = 'Пользователь с таким логином неактивен';
return FALSE;
}
$this->update_user_sess(array(
'id' => $user['id'],
'email' => $user['email'],
'pass' => $user['pass'],
'status' => $user['status']
));
return TRUE;
}
function logout
() {
if ($this -> is_login) {
$this -> session -> unset_userdata('user_id');
unset($this -> session -> userdata);
$this -> session -> sess_destroy();
}
return TRUE;
}
function activate
($id) {
$act = $this -> db -> query('UPDATE tbl_users SET active = \'1\' WHERE id = ?', $id);
if ($act) {
return TRUE;
} else {
return FALSE;
}
}
function create_user
($data, $from_userform = TRUE) {
$errors = array();
$data = array_map('trim', $data);
if (!isset($data['password']) || !strlen($data['password'])) {
$errors['password'] = 'Пароль не указан';
} elseif (strlen($data['password']) < 6) {
$errors['password'] = 'Пароль должен содержать 6 и более символов';
}
if (!isset($data['email']) || !strlen($data['email'])) {
$errors['email'] = 'Email не указан';
} elseif (!$this->test_email($data['email'])) {
$errors['email'] = 'Email имеет неверный формат';
} elseif (strlen($data['email']) > 40) {
$errors['email'] = 'У вас нереально длинный Email :-)';
} elseif ($this -> isset_email($data['email'])) {
$errors['email'] = 'Пользователь с таким адресом уже зарегистрирован в системе';
}
if ($from_userform) {
if (!isset($data['password_conf']) || !strlen($data['password_conf'])) {
$errors['password_conf'] = 'Вы не подтвердили пароль';
} elseif ($data['password'] != $data['password_conf']) {
$errors['password_conf'] = 'Повторение не соответствует паролю';
}
// if (!isset($data['captcha']) || !strlen($data['captcha'])) {
// $errors['captcha'] = 'Не введены символы';
// } elseif (!$this->test_captcha($data['captcha'])) {
// $errors['captcha'] = 'Неверно введены символы';
// }
}
$this -> fields_errors += $errors;
if (!count($errors)) {
$this -> db -> trans_start();
$this -> db -> query(
'INSERT INTO tbl_users (email, password) VALUES (?, ?)',
array($data['email'], $this -> get_password_hash($data['password']))
);
$id = $this -> db -> insert_id();
$this -> db -> trans_complete();
if ($this -> db -> trans_status()) {
return TRUE;
}
}
return FALSE;
}
}