php UserRank Гость Не активированный пользователь Активированный польз

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
/*
* UserRank:
* 0 - Гость
* 1 - Не активированный пользователь
* 2 - Активированный пользователь
* 255 - God
*/
class CUser {
# Указатель на объект
static private $_instance = null;
# Имена переменных в сессии
const SESS_ID = 'user.id';
# Сведения о пользователе
public $id = null;
/*
Специальный метод для класса-одиночки.
Инициализация
*/
public static function _init() {
if (self::$_instance === null) self::$_instance = new self();
return self::$_instance;
}
/*
Специальный метод для класса-одиночки
Передача объекта
*/
public static function getInstance() {
return self::$_instance;
}
/*
Инициализация данных
*/
private function init_date() {
if(Session::is(self::SESS_ID)) {
$this -> id = (int) Session::get(self::SESS_ID);
$this -> getData();
$this -> updateInfo();
}
else {
$this -> login = 'Гость';
$this -> id = -1;
$this -> rank = 0;
}
}
/*
Конструктор
*/
private function __construct() {
$this -> init_date();
}
/*
Получение данных о пользователе
*/
public function getData() {
$time = time();
if((Session::get('system.last_select_userinfo') < ($time - 50)) or !Session::is('system.last_select_userinfo')) {
$result = DB::getInstance() -> query("
SELECT * FROM `users` WHERE `id` = {$this -> id} LIMIT 1
");
$data = $result -> fetch_assoc();
$result -> close();
foreach($data as $name => $value) $this -> $name = $value;
Session::set('user.data', $data);
Session::set('system.last_select_userinfo', $time);
}
else {
foreach(Session::get('user.data') as $name => $value) $this -> $name = $value;
}
}
public function updateInfo() {
$time = time();
if((Session::get('system.last_update_userinfo') < ($time - 100)) or !Session::is('system.last_update_userinfo')) {
$active = time() - $this -> visittime;
$query = 'UPDATE `users` SET ';
if($active < 300) { // 5 минут
$active_time = $this -> onlinetime + $active;
$query .= " `onlinetime` = $active_time, ";
}
$query .= "`visittime` = " . time() . " WHERE `id` = {$this -> id} LIMIT 1";
DB::getInstance() -> query($query);
Session::set('system.last_update_userinfo', $time);
}
}
/*
Авторизация
*/
public function auth($id) {
Session::set(self::SESS_ID, $id);
$this -> init_date();
return true;
}
}
?>