Вход Регистрация
Файл: app/models/UserModel.php
Строк: 371
<?php

class UserModel extends Base {

    function 
index($id) {
        
$row = DB::run("SELECT `users`.*, (SELECT COUNT(*) FROM `guest` WHERE `guest`.`id_user`=`users`.`id`) AS `guest`,
                        (SELECT COUNT(*) FROM `files` WHERE `files`.`id_user`=`users`.`id` AND `id_file`='0'  AND `user`='0') AS `download`,
                        (SELECT COUNT(*) FROM `blog` WHERE `blog`.`id_user`=`users`.`id`) AS `blog`,
                        (SELECT COUNT(*) FROM `news_comments` WHERE `news_comments`.`id_user`=`users`.`id`) AS `news_comments`,
                        (SELECT COUNT(*) FROM `files_comments` WHERE `files_comments`.`id_user`=`users`.`id`) AS `files_comments`,
                        (SELECT COUNT(*) FROM `blog_comments` WHERE `blog_comments`.`id_user`=`users`.`id`) AS `blog_comments`,
                        (SELECT COUNT(*) FROM `gallery_photo` WHERE `gallery_photo`.`id_user`=`users`.`id`) AS `gallery_photo`,
                        (SELECT COUNT(*) FROM `library` WHERE `library`.`id_user`=`users`.`id`) AS `library`,
                        (SELECT COUNT(*) FROM `library_comments` WHERE `library_comments`.`id_user`=`users`.`id`) AS `library_comments` FROM `users` WHERE `id`='" 
. $id . "'")->fetch(PDO::FETCH_ASSOC);

        
SmartySingleton::instance()->assign(array(
            
'row' => $row,
            
'friends' => DB::run("SELECT COUNT(*) FROM `friends` WHERE `id_user`='" . $this->user['id'] . "' AND `user_id`='" . $row['id'] . "' OR `id_user`='" . $row['id'] . "' AND `user_id`='" . $this->user['id'] . "'")->fetchColumn(),
            
'blacklist' => DB::run("SELECT COUNT(*) FROM `blacklist` WHERE `id_user`='" . $this->user['id'] . "' AND `user_id`='" . $row['id'] . "'")->fetchColumn()
        ));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/index.tpl');
    }

    function 
users($id) {
        
$count = DB::run("SELECT COUNT(*) FROM `users`")->fetchColumn();
        if (
$count > 0) {
            
$req = DB::run("SELECT * FROM `users` ORDER BY `id` DESC LIMIT " . $this->page . ", " . $this->message);
            while (
$row = $req->fetch(PDO::FETCH_ASSOC)) {
                
$arrayrow[] = $row;
            }
        }

        
SmartySingleton::instance()->assign(array(
            
'count' => $count,
            
'arrayrow' => $arrayrow,
            
'pagenav' => Functions::pagination('/users?', $this->page, $count, $this->message)
        ));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/users.tpl');
    }
    
    function 
users_admin($id) {
        
$count = DB::run("SELECT COUNT(*) FROM `users` WHERE `level`>'1'")->fetchColumn();
        if (
$count > 0) {
            
$req = DB::run("SELECT * FROM `users` WHERE `level`>'1' ORDER BY `level` DESC LIMIT " . $this->page . ", " . $this->message);
            while (
$row = $req->fetch(PDO::FETCH_ASSOC)) {
                
$arrayrow[] = $row;
            }
        }

        
SmartySingleton::instance()->assign(array(
            
'count' => $count,
            
'arrayrow' => $arrayrow,
            
'pagenav' => Functions::pagination('/users/admin?', $this->page, $count, $this->message)
        ));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/users_admin.tpl');
    }

    function 
login() {
        if (
$this->user['id']) {
            
Functions::redirect(Cms::setup('home'));
        }

        if (
$_POST['ok']) {
            
$user = DB::run("SELECT * FROM `users` WHERE `login` = '" . Cms::Input($_POST['login']) . "' AND `pass` = '" . crypt(Cms::Input($_POST['password']), '$6$rounds=5000$usesomesillystringforsalt$') . "'")->fetch(PDO::FETCH_ASSOC);
            if (
$user == 0) {
                
$error = 'Неправильный логин или пароль!';
            }

            if (
$user['activation'] != null) {
                
$error = 'Вы ещё не активировали свой аккаунт! Авторизация возможна только после активации аккаунта!';
            }

            if (!isset(
$error)) {
                
$user = DB::run("SELECT * FROM `users` WHERE `login` = '" . Cms::Input($_POST['login']) . "' AND `pass` = '" . crypt(Cms::Input($_POST['password']), '$6$rounds=5000$usesomesillystringforsalt$') . "'")->fetch(PDO::FETCH_ASSOC);
                
DB::run("UPDATE `users` SET `hashcode` = '" . crypt(Cms::Input($_POST['password']) . '' . $user['date_reg'], '$6$rounds=5000$usesomesillystringforsalt$') . "' WHERE `id`=" . $user['id']);
                
setcookie('id_user', $user['id'], Cms::realtime() + 60 * 60 * 24 * 3, '/');
                
setcookie('hashcode', crypt(Cms::Input($_POST['password']) . '' . $user['date_reg'], '$6$rounds=5000$usesomesillystringforsalt$'), Cms::realtime() + 60 * 60 * 24 * 3, '/');

                
Cms::history($user['id']); /* история авторизаций */

                
Functions::redirect(Cms::setup('home') . '/profile');
            }
        }

        
SmartySingleton::instance()->assign(array(
            
'error' => $error
        
));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/login.tpl');
    }

    function 
signup() {
        if (
$this->user['id']) {
            
Functions::redirect(Cms::setup('home'));
        }

        if (
$_POST['ok']) {

            if (
mb_strlen(Cms::Input($_POST['login'])) < 3 || mb_strlen(Cms::Input($_POST['login'])) > 32) {
                
$error .= 'Недопустимая длина логина!<br/>';
            }

            if (
Cms::Input($_POST['login']) && !preg_match("#^([A-zА-я0-9-_ ])+$#ui", Cms::Input($_POST['login']))) {
                
$error .= 'Специальные символы в логине запрещены!<br/>';
            }

            if (
Cms::Input($_POST['login']) && !preg_match("#^[a-z0-9]+$#i", Cms::Input($_POST['login']))) {
                
$error .= 'В логине разрешены только символы a-z и цифры!<br/>';
            }

            if (
mb_strlen(Cms::Input($_POST['password'])) < 6 || mb_strlen(Cms::Input($_POST['password'])) > 32) {
                
$error .= 'Недопустимая длина пароля!<br/>';
            }

            if (
mb_strlen(Cms::Input($_POST['email'])) < 5 || mb_strlen(Cms::Input($_POST['email'])) > 32) {
                
$error .= 'Недопустимая длина e-mail!<br/>';
            }

            if (!
filter_var(Cms::Input($_POST['email']), FILTER_VALIDATE_EMAIL)) {
                
$error .= 'Недопустимые символы в e-mail<br/>';
            }

            if (
DB::run("SELECT COUNT(*) FROM `users` WHERE `login`='" . Cms::Input($_POST['login']) . "'")->fetchColumn() > 0) {
                
$error .= 'Пользователь с этим логином уже зарегистрирован!<br/>';
            }

            if (
DB::run("SELECT COUNT(*) FROM `users` WHERE `email`='" . Cms::Input($_POST['email']) . "'")->fetchColumn() > 0) {
                
$error .= 'Пользователь с этим e-mail уже зарегистрирован!<br/>';
            }

            if (
Cms::setup('captcha_signup') == 1 && $_POST['captcha'] != $_COOKIE['code']) {
                
$error .= 'Проверочное число с картинки введено не верно!<br/>';
            }

            if (!isset(
$error)) {
                if (
Cms::setup('activation') == 1) {
                    
$activation = md5(Functions::passgen());
                } else {
                    
$activation = null;
                }

                
DB::run("INSERT INTO `users` SET 
                    `login` = '" 
. Cms::Input($_POST['login']) . "', 
                        `email` = '" 
. Cms::Input($_POST['email']) . "', 
                            `pass` = '" 
. crypt(Cms::Input($_POST['password']), '$6$rounds=5000$usesomesillystringforsalt$') . "', 
                                `hashcode` = '" 
. crypt(Cms::Input($_POST['password']) . '' . Cms::realtime(), '$6$rounds=5000$usesomesillystringforsalt$') . "', 
                                    `date_reg` =  '" 
. Cms::realtime() . "', 
                                        `date_last` =  '" 
. Cms::realtime() . "', 
                                            `activation` =  '" 
. $activation . "'");

                
$fid = DB::lastInsertId();
                ;

                
//создаём нужные папки
                
mkdir(HOME . '/files/user/' . $fid);
                
mkdir(HOME . '/files/user/' . $fid . '/files');
                
mkdir(HOME . '/files/user/' . $fid . '/forum');
                
mkdir(HOME . '/files/user/' . $fid . '/gallery');

                
/* письмо на ящик */
                
SmartySingleton::instance()->assign('email', Cms::Input($_POST['email']));
                
SmartySingleton::instance()->assign('login', Cms::Input($_POST['login']));
                
SmartySingleton::instance()->assign('pass', Cms::Input($_POST['password']));
                
SmartySingleton::instance()->assign('fid', $fid);
                
SmartySingleton::instance()->assign('activation', $activation);

                
// инициализируем класс
                
$mailer = new phpmailer();
                
//настройки
                
$mailer->Mailer = Cms::setup('sendmail');
                
$mailer->Host = Cms::setup('smtphost');
                
$mailer->Port = Cms::setup('smtpport');
                
$mailer->Username = Cms::setup('smtpusername');
                
$mailer->Password = Cms::setup('smtppassword');
                
// Устанавливаем тему письма
                
$mailer->Subject = "Регистрация на ресурсе " . Cms::setup('home');
                
//задаем e-mail админа
                
$mailer->From = Cms::setup('emailadmin');
                
$mailer->ContentType = 'text/html';
                
// Задаем тело письма
                
$mailer->Body = SmartySingleton::instance()->fetch(SMARTY_TEMPLATE_LOAD . '/templates/mail/signup.tpl');
                
// Добавляем адрес в список получателей
                
$mailer->AddAddress(Cms::Input($_POST['email']), Cms::Input($_POST['login']));
                
$mailer->Send();

                if (
Cms::setup('activation') != 1) {
                    
setcookie('id_user', $fid, Cms::realtime() + 60 * 60 * 24 * 3, '/');
                    
setcookie('hashcode', crypt(Cms::Input($_POST['password']) . '' . Cms::realtime(), '$6$rounds=5000$usesomesillystringforsalt$'), Cms::realtime() + 60 * 60 * 24 * 3, '/');
                }

                
Functions::redirect(Cms::setup('home'));
            }
        }

        
SmartySingleton::instance()->assign(array(
            
'error' => $error
        
));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/signup.tpl');
    }

    function 
lostpass($id, $code) {
        if (
$this->user['id']) {
            
Functions::redirect(Cms::setup('home'));
        }

        if (
$id) {
            
$req = DB::run("SELECT * FROM `users` WHERE `id` = '" . intval($id) . "' AND `rest_code` = '" . $code . "' LIMIT 1")->fetch(PDO::FETCH_ASSOC);
            if (
$req) {
                
$res = $req;
                if (empty(
$res['rest_code']) || empty($res['rest_time'])) {
                    
$error = 'Восстановление пароля невозможно!';
                }
                if (!
$error && $res['rest_time'] < Cms::realtime() - 3600) {
                    
$error = 'Время, отведенное на восстановления пароля прошло!';
                    
DB::run("UPDATE `users` SET `rest_code` = '', `rest_time` = '' WHERE `id` = '" . intval($id) . "'");
                }
            } else {
                
$error = 'Восстановление пароля невозможно!';
            }

            if (!
$error) {
                
// Высылаем пароль на E-mail
                
$pass = Functions::passgen(16);
                
// инициализируем класс
                
SmartySingleton::instance()->assign('row', $res);
                
SmartySingleton::instance()->assign('pass', $pass);

                
$mailer = new phpmailer();
                
//настройки
                
$mailer->Mailer = Cms::setup('sendmail');
                
$mailer->Host = Cms::setup('smtphost');
                
$mailer->Port = Cms::setup('smtpport');
                
$mailer->Username = Cms::setup('smtpusername');
                
$mailer->Password = Cms::setup('smtppassword');
                
// Устанавливаем тему письма
                
$mailer->Subject = "Ваш новый пароль";
                
//задаем e-mail админа
                
$mailer->From = Cms::setup('emailadmin');
                
$mailer->ContentType = 'text/html';
                
// Задаем тело письма
                
$mailer->Body = SmartySingleton::instance()->fetch(SMARTY_TEMPLATE_LOAD . '/templates/mail/lostpassnew.tpl');
                
// Добавляем адрес в список получателей
                
$mailer->AddAddress($res['email'], $res['login']);
                if (
$mailer->Send()) {
                    
DB::run("UPDATE `users` SET 
                    `rest_code` = '', `rest_time` = '0', 
                        `pass` = '" 
. crypt($pass, '$6$rounds=5000$usesomesillystringforsalt$') . "' 
                            WHERE `id` = '" 
. intval($id) . "'");
                    
$ok = 'Пароль успешно изменен. Новый пароль выслан на ваш e-mail.';
                } else {
                    
$error = 'Ошибка отправки E-mail!';
                }
            }
        } else {
            if (
$_POST['ok']) {

                
// Проверяем данные по базе
                
$req = DB::run("SELECT * FROM `users` WHERE `email` = '" . Cms::Input($_POST['email']) . "' LIMIT 1")->fetch(PDO::FETCH_ASSOC);
                if (
$req) {
                    
$res = $req;
                    if (empty(
$res['email']) || $res['email'] != Cms::Input($_POST['email'])) {
                        
$error = 'E-mail адрес указан неверно!';
                    }
                    if (
$res['rest_time'] > Cms::realtime() - 300) {
                        
$error = 'Пароль можно восстанавливать не чаще 1 раза в 5 минут!';
                    }
                } else {
                    
$error = 'Пользователь с таким e-mail не зарегистрирован!';
                }

                if (!isset(
$error)) {
                    
// Высылаем инструкции на E-mail
                    
SmartySingleton::instance()->assign('row', $res);

                    
$mailer = new phpmailer();
                    
//настройки
                    
$mailer->Mailer = Cms::setup('sendmail');
                    
$mailer->Host = Cms::setup('smtphost');
                    
$mailer->Port = Cms::setup('smtpport');
                    
$mailer->Username = Cms::setup('smtpusername');
                    
$mailer->Password = Cms::setup('smtppassword');
                    
// Устанавливаем тему письма
                    
$mailer->Subject = "Восстановление пароля";
                    
//задаем e-mail админа
                    
$mailer->From = Cms::setup('emailadmin');
                    
$mailer->ContentType = 'text/html';
                    
// Задаем тело письма
                    
$mailer->Body = SmartySingleton::instance()->fetch(SMARTY_TEMPLATE_LOAD . '/templates/mail/lostpass.tpl');

                    
// Добавляем адрес в список получателей
                    
$mailer->AddAddress($res['email'], $res['login']);
                    if (
$mailer->Send()) {
                        
DB::run("UPDATE `users` SET 
                        `rest_code` = '" 
. md5(Cms::realtime()) . "', 
                            `rest_time` = '" 
. Cms::realtime() . "' WHERE `id` = '" . $res['id'] . "'");
                    }
                }
            }
        }

        
SmartySingleton::instance()->assign(array(
            
'ok' => $ok,
            
'error' => $error
        
));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/lostpass.tpl');
    }

    function 
activation($id, $code) {
        if (
$this->user['id']) {
            
Functions::redirect(Cms::setup('home'));
        }

        if (isset(
$id) && isset($id) && $code != NULL) {
            
$count = DB::run("SELECT COUNT(*) FROM `users` WHERE `id` = '" . intval($id) . "' AND `activation` = '" . Cms::Input($code) . "'")->fetch(PDO::FETCH_NUM);
            if (
$count[0] > 0) {
                
DB::run("UPDATE `users` SET `activation` = null WHERE `id` = '" . intval($id) . "' LIMIT 1");
            } else {
                
$error = 'Во время активации аккаунта возникла непредвиденная ошибка или аккаунт уже был активирован!';
            }
        } else {
            
$error = 'Во время активации аккаунта возникла непредвиденная ошибка! Попробуйте ещё раз.';
        }

        
SmartySingleton::instance()->assign(array(
            
'error' => $error
        
));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/activation.tpl');
    }

    function 
logout() {
        if (
$this->user['id'] == null) {
            
Functions::redirect(Cms::setup('home'));
        }

        
setcookie('id_user', '', 0, '/');
        
setcookie('hashcode', '', 0, '/');
        
session_destroy();
        
Functions::redirect(Recipe::getReferer());
    }

    function 
ban() {
        
SmartySingleton::instance()->assign('banprichina', Cms::bbcode($this->user['banprichina']));
        
SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/modules/user/ban.tpl');
    }

}
Онлайн: 2
Реклама