<?php

class AdminUsersModel extends Base {

    function index() {
        $count = DB::run("SELECT COUNT(*) FROM `users`")->fetchColumn();
        if ($count > 0) {
            $req = DB::run("SELECT `users`.*, (SELECT COUNT(1) FROM `gallery` WHERE `gallery`.`id_user`=`users`.`id`) AS `gallery` 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(Cms::setup('adminpanel') . '/users?', $this->page, $count, Cms::setup('message'))
        ));
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/index.tpl');
    }

    function edit($id) {
        $row = DB::run("SELECT * FROM `users` WHERE `id`='" . $id . "'")->fetch(PDO::FETCH_ASSOC);

        if ($_POST['ok']) {

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

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

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

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

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

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

            if (mb_strlen(Cms::Input($_POST['city'])) > 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 `id`!='" . $row['id'] . "' AND `email`='" . Cms::Input($_POST['email']) . "'")->fetchColumn() > 0) {
                $error .= 'Пользователь с этим e-mail уже зарегистрирован!<br/>';
            }

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

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

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

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

            if (!isset($error)) {
                DB::run("UPDATE `users` SET 
                    `login`='" . Cms::Input($_POST['login']) . "', 
                        `firstname`='" . Cms::Input($_POST['firstname']) . "', 
                            `lastname`='" . Cms::Input($_POST['lastname']) . "', 
                                `email`='" . Cms::Input($_POST['email']) . "', 
                                    `phone` = '" . Cms::Input($_POST['phone']) . "', 
                                       `skype`='" . Cms::Input($_POST['skype']) . "', 
                                           `icq`='" . Cms::Input($_POST['icq']) . "',
                                               `city`='" . Cms::Input($_POST['city']) . "',
                                                    `about`='" . Cms::Input($_POST['about']) . "',
                                                        `balls`='" . Cms::Input($_POST['balls']) . "',
                                                            `level`='" . Cms::Input($_POST['level']) . "' WHERE `id`='" . $row['id'] . "'");

                if (Cms::setup('adminlogs') == 1) {
                    Cms::adminlogs('Пользователи', 'Редактирование пользователя ' . Cms::Input($_POST['login']));
                } //пишем лог админа, если включено
                Functions::redirect(Cms::setup('adminpanel') . '/users');
            }
        }

        SmartySingleton::instance()->assign(array(
            'row' => $row,
            'error' => $error
        ));
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/edit.tpl');
    }

    function del($id) {
        $row = DB::run("SELECT * FROM `users` WHERE `id`='" . $id . "'")->fetch(PDO::FETCH_ASSOC);

        if ($_POST['ok']) {

            if ($row['level'] == 100) {
                $error = 'Вы не можете удалить главного администратора!';
            }

            if (!isset($error)) {
                //удаляем комментарии к новостям
                DB::run("DELETE FROM `news_comments` WHERE `id_user` = '" . $row['id'] . "'");
                //сообщения с гостевой
                DB::run("DELETE FROM `guest` WHERE `id_user` = '" . $row['id'] . "'");
                //сообщения
                DB::run("DELETE FROM `mail` WHERE `id_user` = '" . $row['id'] . "' OR `user_id` = '" . $row['id'] . "'");
                //контакты
                DB::run("DELETE FROM `contacts` WHERE `id_user` = '" . $row['id'] . "' OR `user_id` = '" . $row['id'] . "'");
                //файлы сообщений
                DB::run("DELETE FROM `mail_files` WHERE `id_user` = '" . $row['id'] . "'");
                //черный список
                DB::run("DELETE FROM `blacklist` WHERE `id_user` = '" . $row['id'] . "' OR `user_id` = '" . $row['id'] . "'");
                //друзья
                DB::run("DELETE FROM `friends` WHERE `id_user` = '" . $row['id'] . "' OR `user_id` = '" . $row['id'] . "'");
                //блог
                DB::run("DELETE FROM `blog` WHERE `id_user` = '" . $row['id'] . "'");
                //комментарии к блогам
                DB::run("DELETE FROM `blog_comments` WHERE `id_user` = '" . $row['id'] . "'");
                //файлы в ЗЦ и комментарии
                $file = DB::run("SELECT * FROM `files` WHERE `id_user` = '" . $row['id'] . "'");
                while ($file2 = $file->fetch(PDO::FETCH_ASSOC)) {
                    //удаляем скриншот
                    Cms::DelFile($file2['path'] . "" . $file2['screen']);
                    //удалем картинки
                    if ($file2['type'] == 'jpg' || $file2['type'] == 'png' || $file2['type'] == 'jpeg' || $file2['type'] == 'gif') {
                        Cms::DelFile($file2['path'] . "small_" . $file2['file']);
                        Cms::DelFile($file2['path'] . "view_" . $file2['file']);
                        Cms::DelFile($file2['path'] . "240x320_" . $file2['file']);
                        Cms::DelFile($file2['path'] . "360x640_" . $file2['file']);
                        Cms::DelFile($file2['path'] . "480x800_" . $file2['file']);
                        Cms::DelFile($file2['path'] . "480x854_" . $file2['file']);
                        Cms::DelFile($file2['path'] . "540x960_" . $file2['file']);
                    }
                    //удаляем скрины к видео
                    if ($file2['type'] == 'mp4' || $file2['type'] == 'avi' || $file2['type'] == '3gp' || $file2['type'] == 'wmv') {
                        Cms::DelFile($file2['path'] . "small_" . $file2['file'] . ".GIF");
                        Cms::DelFile($file2['path'] . "" . $file2['file'] . ".GIF");
                    }
                    //темам
                    if ($file2['type'] == 'nth' || $file2['type'] == 'thm') {
                        Cms::DelFile($file2['path'] . "" . $file2['file'] . ".GIF");
                    }
                    //и сам основной файл
                    Cms::DelFile($file2['path'] . "" . $file2['file']);
                    DB::run("DELETE FROM `files` WHERE `id` = '" . $file2['id'] . "'");
                    DB::run("DELETE FROM `files_comments` WHERE `id_file` = '" . $file2['id'] . "'");
                }
                //темы, посты, файлы к постам, голосования, результаты голосований
                $t = DB::run("SELECT * FROM `tema` WHERE `id_user` = '" . $row['id'] . "'");
                while ($tema = $t->fetch(PDO::FETCH_ASSOC)) {
                    DB::run("DELETE FROM `tema` WHERE `id` = '" . $tema['id'] . "'");
                    DB::run("DELETE FROM `post` WHERE `id_tema` = '" . $tema['id'] . "'");
                    DB::run("DELETE FROM `tema_vote` WHERE `id_tema` = '" . $tema['id'] . "'");
                    DB::run("DELETE FROM `tema_vote_us` WHERE `id_tema` = '" . $tema['id'] . "'");
                    DB::run("DELETE FROM `post_files` WHERE `id_tema` = '" . $tema['id'] . "'");
                }
                //закладки
                DB::run("DELETE FROM `bookmark` WHERE `id_user` = '" . $row['id'] . "'");
                //альбомы
                DB::run("DELETE FROM `gallery` WHERE `id_user` = '" . $row['id'] . "'");
                //фотографии в альбомах
                DB::run("DELETE FROM `gallery_photo` WHERE `id_user` = '" . $row['id'] . "'");
                //рекламу и статистику переходов
                $a = DB::run("SELECT * FROM `ads` WHERE `id_user` = '" . $row['id'] . "'");
                while ($ads = $a->fetch(PDO::FETCH_ASSOC)) {
                    DB::run("DELETE FROM `ads` WHERE `id` = '" . $ads['id'] . "'");
                    DB::run("DELETE FROM `ads_stat` WHERE `id_link` = '" . $ads['id'] . "'");
                }
                //логи с админки, если был в админ.составе
                DB::run("DELETE FROM `adminlogs` WHERE `id_user` = '" . $row['id'] . "'");
                //уведомления
                DB::run("DELETE FROM `notice` WHERE `id_user` = '" . $row['id'] . "'");
                //логи пользователей или лента - ФУНКЦИОНАЛ ЕЩЕ НЕ ГОТОВ
                DB::run("DELETE FROM `userlogs` WHERE `id_user` = '" . $row['id'] . "'");
                //история авторизаций
                DB::run("DELETE FROM `history` WHERE `id_user` = '" . $row['id'] . "'");
                //онлайн
                DB::run("DELETE FROM `online` WHERE `id_user` = '" . $row['id'] . "'");
                //папку с файлами пользователя
                Cms::DelDir('files/user/' . $row['id']);
                //и самого пользователя
                DB::run("DELETE FROM `users` WHERE `id` = '" . $row['id'] . "'");

                //оптимизируем если нужно
                if ($_POST['optimize'] == 1) {
                    DB::run("OPTIMIZE TABLE `news_comments`");
                    DB::run("OPTIMIZE TABLE `guest`");
                    DB::run("OPTIMIZE TABLE `mail`");
                    DB::run("OPTIMIZE TABLE `contacts`");
                    DB::run("OPTIMIZE TABLE `mail_files`");
                    DB::run("OPTIMIZE TABLE `blacklist`");
                    DB::run("OPTIMIZE TABLE `friends`");
                    DB::run("OPTIMIZE TABLE `blog`");
                    DB::run("OPTIMIZE TABLE `blog_comments`");
                    DB::run("OPTIMIZE TABLE `files`");
                    DB::run("OPTIMIZE TABLE `files_comments`");
                    DB::run("OPTIMIZE TABLE `tema`");
                    DB::run("OPTIMIZE TABLE `post`");
                    DB::run("OPTIMIZE TABLE `tema_vote`");
                    DB::run("OPTIMIZE TABLE `tema_vote_us`");
                    DB::run("OPTIMIZE TABLE `post_files`");
                    DB::run("OPTIMIZE TABLE `bookmark`");
                    DB::run("OPTIMIZE TABLE `gallery`");
                    DB::run("OPTIMIZE TABLE `gallery_photo`");
                    DB::run("OPTIMIZE TABLE `ads`");
                    DB::run("OPTIMIZE TABLE `ads_stat`");
                    DB::run("OPTIMIZE TABLE `adminlogs`");
                    DB::run("OPTIMIZE TABLE `notice`");
                    DB::run("OPTIMIZE TABLE `userlogs`");
                    DB::run("OPTIMIZE TABLE `history`");
                    DB::run("OPTIMIZE TABLE `online`");
                }

                if (Cms::setup('adminlogs') == 1) {
                    Cms::adminlogs('Пользователи', 'Удаление пользователя ' . Cms::Input($_POST['login']));
                } //пишем лог админа, если включено
                Functions::redirect(Cms::setup('adminpanel') . '/users');
            }
        }

        if ($_POST['close']) {
            Functions::redirect(Cms::setup('adminpanel') . '/users');
        }

        SmartySingleton::instance()->assign(array(
            'row' => $row,
            'error' => $error
        ));
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/del.tpl');
    }

    function balls() {
        if (isset($_POST['ok'])) {
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['balls_add_theme']) . "' WHERE `name`='balls_add_theme'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['balls_add_post']) . "' WHERE `name`='balls_add_post'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['balls_add_blog']) . "' WHERE `name`='balls_add_blog'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['balls_add_library']) . "' WHERE `name`='balls_add_library'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['balls_add_download']) . "' WHERE `name`='balls_add_download'");
            if (Cms::setup('adminlogs') == 1) {
                Cms::adminlogs('Настройки сайта', 'Изменены параметры начисления баллов');
            } //пишем лог админа, если включено
            Functions::redirect(Cms::setup('adminpanel') . '/users/balls');
        }
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/balls.tpl');
    }

    function signup() {
        if (isset($_POST['ok'])) {
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['registration']) . "' WHERE `name`='registration'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['activation']) . "' WHERE `name`='activation'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['login_edit']) . "' WHERE `name`='login_edit'");
            DB::run("UPDATE `setting` SET `value` = '" . Cms::Input($_POST['captcha_signup']) . "' WHERE `name`='captcha_signup'");
            if (Cms::setup('adminlogs') == 1) {
                Cms::adminlogs('Настройки сайта', 'Отредактированы настройки регистрации');
            } //пишем лог админа, если включено
            Functions::redirect(Cms::setup('adminpanel') . '/users/signup');
        }
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/signup.tpl');
    }

    function ban($id) {
        $row = DB::run("SELECT * FROM `users` WHERE `id`='" . $id . "'")->fetch(PDO::FETCH_ASSOC);

        if ($_POST['ok'] && $row['level'] < 100) {

            if (empty($_POST['count'])) {
                $error = 'Вы не указали срок бана!';
            }

            if (!isset($error)) {
                DB::run("UPDATE `users` SET `ban`='1',
                            `banprichina`='" . Cms::Input($_POST['text']) . "',
                                `bantime`='" . Cms::Input(Cms::realtime() + $_POST['count'] * $_POST['time'] * 86400) . "' WHERE `id`='" . $row['id'] . "'");

                SmartySingleton::instance()->assign('row', $row);
                SmartySingleton::instance()->assign('banprichina', Cms::bbcode($_POST['text']));
                // инициализируем класс
                $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/ban.tpl');
                // Добавляем адрес в список получателей
                $mailer->AddAddress($row['email'], $row['login']);
                $mailer->Send();

                if (Cms::setup('adminlogs') == 1) {
                    Cms::adminlogs('Пользователи', 'Бан пользователя ' . $row['login']);
                } //пишем лог админа, если включено
                Functions::redirect(Cms::setup('adminpanel') . '/users');
            }
        }

        SmartySingleton::instance()->assign(array(
            'row' => $row,
            'error' => $error
        ));
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/ban.tpl');
    }

    function unban($id) {
        $row = DB::run("SELECT * FROM `users` WHERE `id`='" . $id . "'")->fetch(PDO::FETCH_ASSOC);

        if ($_POST['ok']) {

            if (!isset($error)) {
                DB::run("UPDATE `users` SET `ban`='0',
                            `banprichina`='',
                                `bantime`='0' WHERE `id`='" . $row['id'] . "'");

                SmartySingleton::instance()->assign('row', $row);
                SmartySingleton::instance()->assign('banprichina', Cms::bbcode($_POST['text']));
                // инициализируем класс
                $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/unban.tpl');
                // Добавляем адрес в список получателей
                $mailer->AddAddress($row['email'], $row['login']);
                $mailer->Send();

                if (Cms::setup('adminlogs') == 1) {
                    Cms::adminlogs('Пользователи', 'Разбан пользователя ' . $row['login']);
                } //пишем лог админа, если включено
                Functions::redirect(Cms::setup('adminpanel') . '/users');
            }
        }

        if ($_POST['close']) {
            Functions::redirect(Cms::setup('adminpanel') . '/users');
        }

        SmartySingleton::instance()->assign(array(
            'row' => $row,
            'error' => $error
        ));
        SmartySingleton::instance()->display(SMARTY_TEMPLATE_LOAD . '/templates/admin/users/unban.tpl');
    }

}
