<?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);
    }
}
?>