Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class User extends Model
- {
- private static $info = array('logged' => false);
- public static function login()
- {
- $userdata = array();
- $fields = 'phpbb_users.user_id phpbb_users.username phpbb_users.user_email phpbb_users.user_password site_ranks.staff site_ranks.code -> rank site_ranks.name -> rank_name site_users.first_login';
- $join1 = 'site_users ON (site_users.phpbb_uid = phpbb_users.user_id)';
- $join2 = 'site_ranks ON (site_ranks.code = site_users.rank)';
- if (!empty($_SESSION['cd_user']) || !empty($_SESSION['cd_pass']))
- {
- $user = isset($_SESSION['cd_user']) ? $_SESSION['cd_user'] : '';
- $pass = isset($_SESSION['cd_pass']) ? $_SESSION['cd_pass'] : '';
- $userdata = User::find($fields . ' phpbb_banlist.ban_ip phpbb_banlist.ban_end phpbb_banlist.ban_give_reason phpbb_banlist.ban_userid', 'user', USERS_TABLE)->where('(username = ? OR username_clean = ?) AND user_password = ?', $user, strtolower($user), $pass)->join($join1)->join($join2)->join('phpbb_banlist ON (phpbb_banlist.ban_userid = phpbb_users.user_id)')->limit(1)->exec()->fetch();
- if ($userdata)
- {
- if ($userdata->ban_userid == $userdata->user_id && ($userdata->ban_end == 0 || time() < $userdata->ban_end))
- {
- View::Set('login_error', 'Você foi banido ' . ($userdata->ban_end != 0 ? ('até ' . date('d/m/Y H:i', $userdata->ban_end)) : 'permanentemente') . ' pelo motivo: <b>' . $userdata->ban_give_reason . '</b>');
- unset($_SESSION['cd_user'], $_SESSION['cd_pass']);
- self::$info['logged'] = false;
- return;
- }
- $_SESSION['cd_user'] = $user;
- $_SESSION['cd_pass'] = $pass;
- self::$info['logged'] = true;
- }
- else
- {
- unset($_SESSION['cd_user'], $_SESSION['cd_pass']);
- }
- }
- elseif (param('login'))
- {
- $user = param('user_login');
- $pass = param('pass_login');
- $val = new Validate;
- $val->loadAntiflood('login', 5, 15);
- if ($val->error())
- {
- $wait = $val->antifloodWait();
- View::Set('login_error', 'Bloqueio de segurança ativado. Aguarde ' . $wait . ' minuto' . ($wait > 1 ? 's' : '') . ' para tentar logar novamente.');
- return;
- }
- $userdata = User::find($fields, 'user', USERS_TABLE)->where('username = ? OR username_clean = ?', $user, strtolower($user))->join($join1)->join($join2)->limit(1)->exec()->fetch();
- if ($userdata && phpbb_check_hash($pass, $userdata->user_password))
- {
- $_SESSION['cd_user'] = $user;
- $_SESSION['cd_pass'] = $userdata->user_password;
- self::$info['logged'] = true;
- unset($userdata->user_password);
- }
- else
- {
- View::Set('login_error', 'O usuário e senha informados não existem ou não coincidem.');
- $val->setAntiflood();
- unset($_SESSION['cd_user'], $_SESSION['cd_pass']);
- }
- }
- if ($userdata)
- {
- // Primeiro login no site? Cria registro dele na tabela.
- if (!$userdata->first_login)
- {
- $data = new stdClass;
- $data->phpbb_uid = $userdata->user_id;
- $data->rank = 'usr';
- $data->first_login = time();
- User::insert($data, 'user')->exec();
- // Redireciona para a mesma página para carregar as infos.
- redirect($_SERVER['REQUEST_URI']);
- }
- foreach ($userdata as $key => $val)
- {
- /*if (strpos($key, 'password') !== false)
- {
- unset($userdata->$key);
- continue;
- }*/
- $key = preg_replace('/user\_?/', '', $key);
- self::$info[$key] = $val;
- # View::Set('user_' . $key, $val);
- }
- }
- User::onlines();
- }
- public static function info($name)
- {
- return isset(self::$info[$name]) ? self::$info[$name] : false;
- }
- public static function logged()
- {
- return self::$info['logged'];
- }
- public static function onlines()
- {
- $count = User::count('*', 'onlines')->where('ip = ?', $_SERVER['REMOTE_ADDR'])->exec()->fetchColumn();
- if($count)
- {
- $data = new stdClass;
- $data->timestamp = time();
- $data->page = $_SERVER['REQUEST_URI'];
- User::update($data, 'onlines')->where('ip = ?', $_SERVER['REMOTE_ADDR'])->exec();
- }
- else
- {
- $data = new stdClass;
- $data->timestamp = time();
- $data->ip = $_SERVER['REMOTE_ADDR'];
- $data->user_id = User::info('id');
- $data->page = $_SERVER['REQUEST_URI'];
- User::insert($data, 'onlines')->exec();
- }
- User::delete('onlines')->where('timestamp > ?', strtotime('2 minutes'))->exec();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement