|
|
<?php /** * Класс для работы с пользователями * * @copyright * @link * @package Majestic * @subpackage Decorator * @since * @version SVN: $Id$ * @filesource $URL$ */ class User { static private $user = false;
static function login($login, $password) { if (empty($login) || empty($password)) { return false; }
if(!preg_match(UserData::REGEXP_LOGIN, $login)) { return false; }
self::setInfo(self::getByLogin($login)); if (!self::getInfo() || self::$user->isBanned()) { return false; }
if(self::$user->pass != $password){ return false; }
self::setSession(); $model = new UserDataModel(); $model->loginUpdate($login);
return true; }
static function logout() { Env::setCookie(session_name(), '', 0); Env::setCookie('login', '', 0); Env::setCookie('login_hash', '', 0); Env::setCookie('login_ipbhash', '', 0); if (session_id()) { session_destroy(); } }
static function process() { if (Env::getCookie(session_name())) { //есть сессия
@session_start(); self::setInfo(Env::Session('user')); } elseif (Env::getCookie('login') && Env::getCookie('login_hash')) { self::remember(); } }
static function setSession() { $hash = self::getHash(); Env::setCookie('login', self::$user->login, TIME_NOW + LOGIN_COOKIE_TTL); Env::setCookie('login_hash', $hash, TIME_NOW + LOGIN_COOKIE_TTL); Env::setCookie('login_ipbhash', self::getIPBHash($hash), TIME_NOW + LOGIN_COOKIE_TTL);
@session_start();
$_SESSION['user'] = self::$user; }
static function remember() { self::setInfo(self::getByLogin(Env::getCookie('login')));
if (!self::getInfo()) { self::logout(); }
if (Env::getCookie('login_hash') == self::getHash()) { self::setSession(); } else { self::logout(); } }
static function getHash() { return md5(self::$user->id.'hckrz'.self::$user->login.'mst'.self::$user->pass.'dai'); } /** * Создает хеш для проверки хеша в в IPB * */ static public function getIPBHash($hash) { return md5($hash . strtolower(self::$user->login) . 'brainfuck'); }
static function getInfo() { return Env::Session('user', self::$user); }
static function setInfo($data) { self::$user = $data; }
static function isGuest() { return ! (bool) Env::Session('user'); }
static function getByLogin($login) { $model = new UserDataModel(); return $model->getByLogin($login); }
static function getById($id) { $model = new UserDataModel(); return $model->getById($id); }
/** * отправляет письмо для активации * * @param string $mail * @param string $login * */ static function sendActivateMail($mail, $login) { $settings = Env::getParam('site_settings'); $model = new UserActivateModel(); $link = 'http://' . $settings['host_name'] . '/activate/?key=' . $model->generateKey($login, $mail);
$text = new SettingsTextModel(); $message = $text->getText('mail_activate');
$replaces = array( 'link' => $link, 'host' => $settings['site_url'], 'email' => $mail, ); if (!$message) { return false; } foreach ($replaces as $key => $val) { $message->text = str_replace('%' . $key . '%', $val, $message->text); } $mailer = new Mailer(); return $mailer->sendMessage($mail, 'Подтверждение E-mail ' . $settings['host_name'], $message->text); } } ?>
|