<?php

define('_CONSTANT_', 1);

require_once '../../core/start.php';

checkAuth();

switch ($do) 
{
    default: 
    head('Форум', 'Форум');

    # Add directory;
    if (!empty($_POST['addDirectory']) && $user['access'] == 2) 
    {
        $data = $_POST;
        $data['name'] = $Filter->clearString($data['name']);

        if (empty($data['name'])) 
        {
            errorNoExit('Пустое название');
        } 
        else 
        {
            DB::$dbs->query("INSERT INTO ". FORUMS ." (`name`) VALUES (?)", [$data['name']]);
            success('Раздел успешно создан', '/modules/forum/index.php', 'Форум');
        }
    }

    # All directory list;
    $all = DB::$dbs->querySingle("SELECT COUNT(`id`) FROM ".FORUMS."");

    if (empty($all)) 
    {
        ?> 
        <div class="block">
            Разделов нет.
        </div>
        <?php
    } 
    else 
    {
        $sql = DB::$dbs->query("SELECT * FROM ".FORUMS."");
        
        while ($forum = $sql -> fetch()) 
        {
            $themes = DB::$dbs->querySingle("SELECT COUNT(`id`) FROM ". FORUM_THEME ." WHERE `forum_id` = ? ", [$forum['id']]);
            $posts = DB::$dbs->querySingle("SELECT COUNT(`id`) FROM ". FORUM_POST ." WHERE `forum_id` = ? ", [$forum['id']]);

            echo '<a href="'. HOME .'/modules/forum/index.php?do=category&amp;id='. $Filter->clearInt($forum['id']) .'" class="link-touch">'.ico('directory.png', '[dir]', '16', '16') . $Filter->output($forum['name']) .' <span class="count">'. $themes .'/'. $posts .'</span></a>';
        }
    } 

    # Add directory;
    if ($user['access'] == 2) 
    {
        ?> 
        <div class="head">Новый раздел</div>
        <form action="" method="POST">
            Название:<br/>
            <input type="text" name="name"><br/>
            <input type="submit" name="addDirectory" value="Создать">
        </form>
        <?php
    }

    break;

    case 'category': 
    head('Форум', 'Форум');

    $id = (!empty($_GET['id']) ? $Filter->clearInt($_GET['id']) : NULL);

    if (empty($id)) 
    {
        errorNoExit('Не верная категория.','/');
    } 
    else 
    {
        $forum = DB::$dbs->queryFetch("SELECT * FROM ". FORUMS ." WHERE `id` = ?", [$id]);

        if (empty($forum)) 
        {
            errorNoExit('Категория не найдена','/');
        } 
        else 
        {
            $all = DB::$dbs->querySingle("SELECT COUNT(`id`) FROM ". FORUM_THEME ." WHERE `forum_id` = ?", [$forum['id']]);
            
            if ($user['news'] == 1) 
            {
                DB::$dbs->query("UPDATE ". USERS ." SET `news` = ? WHERE `id` = ?", [0, $user['id']]);
            }

            if (empty($all)) 
            {
                ?>
                <div class="block">
                    Тем нет.
                </div>
                <?php
            } 
            else 
            {
                $n = new Navigator($all,10,'do=category&id='.$forum['id']); 
                $sql = DB::$dbs->query("SELECT * FROM ". FORUM_THEME ." WHERE `forum_id` = ? ORDER BY `id` DESC LIMIT {$n->start()}, 10", [$forum['id']]);

                while ($theme = $sql -> fetch()) 
                {
                    $posts = DB::$dbs->querySingle("SELECT COUNT(`id`) FROM ". FORUM_POST ." WHERE `theme_id` = ? ", [$theme['id']]);

                    echo '<a href="'. HOME .'/modules/forum/index.php?do=theme&amp;id='. $Filter->clearInt($theme['id']) .'" class="link-touch">'. ($theme['status'] == 1 ? ico('folder-close.png', '[fold-cls]', '16', '16') : ico('folder.png', '[fold]', '16', '16')) . $Filter->output($theme['name']) .' <span class="count">'. $posts .'</span></a>';
                }

                echo $n->navi();
            }
            echo '<a href="'. HOME .'/modules/forum/index.php?do=newTheme&amp;categoryId='. $forum['id'] .'" class="link-touch">'. ico('msg.png') .'Новая тема</a>';
            echo '<a href="'. HOME .'/modules/forum/index.php" class="link-touch">'. ico('back.png') .'Форум</a>';
        }
    } 

    break;
    
    case 'theme':
    head('Форум | Тема', 'Форум | Тема'); 

    $id = (!empty($_GET['id']) ? $Filter->clearInt($_GET['id']) : NULL);

    if (empty($id)) 
    {
        errorNoExit('Тема не найдена', '/');
    } 
    else 
    {
        $theme = DB::$dbs->queryFetch("SELECT * FROM ". FORUM_THEME ." WHERE `id` = ? ", [$id]);

        if (empty($theme)) 
        {
            errorNoExit('Тема не найдена', '/');
        } 
        else 
        {
            ?> 
            <div class="wrap">
                Тема: <?=$Filter->output($theme['name'])?><br/>
                Автор: <?=userLink($theme['user_id'])?><br/>
                Статус: <?=($theme['status'] == 1 ? '<span style="color: red;">[закрыто]</span>' : '<span style="color: green;">[открыто]</span>')?><br/>
            </div>
            <div class="wrap">
                Сообщение: <br/><br/>
                <?=outputText($theme['msg'], $theme['user_id'])?>
            </div>
            <?php

            $all = DB::$dbs->querySingle("SELECT COUNT(`id`) FROM ". FORUM_POST ." WHERE `theme_id` = ?", [$theme['id']]);

            if (empty($all)) 
            {
                ?>
                <div class="wrap">
                    Сообщений нет.
                </div>
                <?php
            } 
            else 
            {
                $n = new Navigator($all,10,'do=theme&id='. $theme['id']);
                $sql = DB::$dbs->query("SELECT * FROM ". FORUM_POST ." WHERE `theme_id` = ? LIMIT {$n->start()}, 10", [$theme['id']]);

                while ($post = $sql -> fetch()) 
                {
                    $iduser = userLink($Filter->clearInt($post['user_id']));
    	            $time   = dataTime($Filter->clearInt($post['time']));
    	            $text   = outputText($post['msg'], $post['user_id']);

                    echo '<div class="wrap">'. $iduser .'<font color="#909090">['. $time .']</font>'.($post['user_id'] != $user['id'] && $theme['status'] == 0 ? '<a href="'. HOME .'/modules/forum/index.php?do=newPost&amp;themeId='. $theme['id'] .'&amp;postId='. $post['id'] .'">[отв.]</a>' : null).'<br/> 
                        '. $text .'<br/></div>';
                }

                echo $n->navi();
            } 

            echo '<a href="'. HOME .'/modules/forum/index.php?do=newPost&amp;themeId='. $theme['id'] .'" class="link-touch">'. ico('msg.png') .'Ответить в теме</a>';
            echo '<a href="'. HOME .'/modules/forum/index.php?do=category&amp;id='. $theme['forum_id'] .'" class="link-touch">'. ico('back.png') .'Категория</a>';
            echo '<a href="'. HOME .'/modules/forum/index.php" class="link-touch">'. ico('back.png') .'Форум</a>';

            if ($user['access'] == 2) 
            {
                echo '<hr>';
                echo '<a href="'. HOME .'/modules/forum/index.php?do=theme&amp;id='. $theme['id'] .'&amp;editStatus" class="link-touch">'. ($theme['status'] == 1 ? 'Открыть' : 'Закрыть').' тему</a>';
                echo '<a href="'. HOME .'/modules/forum/index.php?do=theme&amp;id='. $theme['id'] .'&amp;delete" class="link-touch">Удалить тему</a>';
            }

            # Close or open theme;
            if (isset($_GET['editStatus']) && $user['access'] == 2) 
            {
                $status = ($theme['status'] == 1 ? 0 : 1);
                DB::$dbs->query("UPDATE ". FORUM_THEME ." SET `status` = ? WHERE `id` = ?", [$status, $theme['id']]);
                success('Операция выполнена успешно', '/modules/forum/index.php?do=theme&id='. $theme['id'], 'Перейти к теме');
            } 

            # Delete theme;
            if (isset($_GET['delete']) && $user['access'] == 2) 
            {
                ?> 

                <div class="head">Подтвердите действие</div>
                <div class="content">
                    Вы действительно хотите удалить эту тему? <br/>
                    <a href="<?=HOME?>/modules/forum/index.php?do=theme&amp;id=<?=$theme['id']?>&amp;delete&amp;true" class="link-touch">Да</a>
                    <a href="<?=HOME?>/modules/forum/index.php?do=theme&amp;id=<?=$theme['id']?>" class="link-touch">Нет</a>
                </div>
                <?php

                if (isset($_GET['true'])) 
                {
                    DB::$dbs->query("DELETE FROM ". FORUM_THEME ." WHERE `id` = ?", [$theme['id']]);
                    DB::$dbs->query("DELETE FROM ". FORUM_POST ." WHERE `theme_id` = ?", [$theme['id']]);
                    success('Вы успешно удалили тему', '/modules/forum/index.php', 'Форум');
                }
            }
        }
    }
    break;

    case 'newTheme': 
    head('Форум | Новая тема', 'Форум | Новая тема');

    $categoryId = (!empty($_GET['categoryId']) ? $Filter->clearInt($_GET['categoryId']) : NULL);

    if (empty($categoryId)) 
    {
        errorNoExit('Раздел не найден', '/');
    } 
    else 
    {
        $forum = DB::$dbs->queryFetch("SELECT * FROM ". FORUMS ." WHERE `id` = ?", [$categoryId]);

        if (empty($forum)) 
        {
            errorNoExit('Раздел не найден', '/');
        } 
        else 
        {
            if (isset($_POST['try'])) 
            {
                $data = $_POST;
                $data['name'] = $Filter->clearString($data['name']);
                $data['msg'] = $Filter->clearString($data['msg']);

                # Error;
                if (empty($data['name']) || empty($data['msg'])) 
                {
                    errorNoExit('Обнаружено пустое поле');
                } 
                else if (mb_strlen($data['name']) < 8 || mb_strlen($data['name']) > 30) 
                {
                    errorNoExit('Название темы должно быть в диапазоне [8-30].');
                } 
                else if (mb_strlen($data['msg']) < 20 || mb_strlen($data['msg']) > 1000) 
                {
                    errorNoExit('Сообщение должно быть в диапазоне [8-30].');
                } 
                else if ($user['lvl'] < 5) 
                {
                    errorNoExit('Создавать темы можно с 5 уровня.');
                } 
                else 
                {
                    DB::$dbs->query("INSERT INTO ". FORUM_THEME ." (`forum_id`, `name`, `msg`, `user_id`, `time`) VALUES (?, ?, ?, ?, ?)", [$categoryId, $data['name'], $data['msg'], $user['id'], time()]);
                    $lastId = DB::$dbs->lastInsertId();
                    success('Тема успешно создана', '/modules/forum/index.php');
                }
            } 
            ?> 

            <form action="" method="POST">
                Название[8-30]: <br/>
                <input type="text" name="name"><br/>
                Сообщение[20-1000]: <br/>
                <textarea class="text" name="msg"></textarea><br/>
                <input type="submit" name="try" value="Создать">
            </form> 
            <?php
        }
    } 
    break;

    case 'newPost': 

    head('Форум | Новое сообщение', 'Форум | Новое сообщение');

    $themeId = (!empty($_GET['themeId']) ? $Filter->clearInt($_GET['themeId']) : NULL);

    if (empty($themeId)) 
    {
        errorNoExit('Тема не найдена', '/');
    } 
    else 
    {
        $theme = DB::$dbs->queryFetch("SELECT * FROM ". FORUM_THEME ." WHERE `id` = ?", [$themeId]);

        if (empty($theme)) 
        {
            errorNoExit('Тема не найдена', '/');
        } 
        else 
        {
            if ($theme['status'] == 1) 
            {
                errorNoExit('Тема закрыта для обсуждения', '/');
            } 
            else 
            {
                $postId = (!empty($_GET['postId']) ? $Filter->clearInt($_GET['postId']) : NULL);

                if (!empty($postId)) 
                {
                    $post = DB::$dbs->queryFetch("SELECT * FROM ". FORUM_POST ." WHERE `id` = ? ", [$postId]);

                    if (empty($post)) 
                    {
                        errorNoExit('Вы пытались ответить на сообщение под номером '. $postId .' которое не найдено в базе данных. Возможно оно удалено.');
                    } 
                    else 
                    {
                        ?> 
                        <div class="head">Ответ на пост:</div>
                        <div class="content">
                            <b><?=userLink($post['user_id'])?></b> [<?=dataTime($post['time'])?>]<br/>
                            <?=SubstrMaus($Filter->output($post['msg']), 100)?>
                        </div>
                        <?php
                    }
                }

                # Add post;
                if (isset($_POST['try'])) 
                {
                    $data = $_POST;
                    $data['msg'] = $Filter->clearString($data['msg']);
                    
                    if (empty($data['msg'])) 
                    {
                        errorNoExit('Пустое сообщение');
                    } 
                    else if (mb_strlen($data['msg']) < 5 || mb_strlen($data['msg']) > 1000) 
                    {
                        errorNoExit('Сообщение должно быть в диапазоне [5-1000]');
                    } 
                    else 
                    {
                        if (!empty($post)) 
                        {
                            $ank = DB::$dbs->queryFetch("SELECT `id`, `login` FROM ".USERS." WHERE `id` = ?",array($post['user_id']));
                            $data['msg'] = '"'. $Filter->clearString($ank['login']) .'", '. $data['msg'];
                            
                            $journal = 'На ваше сообщение ответили, в теме <a href="'. HOME .'/modules/forum/index.php?do=theme&amp;id='. $theme['id'] .'">'. $Filter->output($theme['name']) .'</a>';
                            $User->addUserJournal($journal, $ank['id']);
                        } 
                        DB::$dbs->query("INSERT INTO ". FORUM_POST ." (`forum_id`, `theme_id`, `msg`, `user_id`, `time`) VALUES (?, ?, ?, ?, ?)", [$theme['forum_id'], $theme['id'], $data['msg'], $user['id'], time()]);
                        success('Сообщение отправлено', '/modules/forum/index.php?do=theme&id='. $theme['id'], 'Перейти в тему');
                    }
                }
                ?> 

                <form action="" method="POST">
                    Сообщение[5-1000]: <br/>
                    <textarea class="text" name="msg" placeholder="Введите сообщение..."></textarea><br/>
                    <input type="submit" name="try" value="Отправить">
                </form> 
                <?php
            }
        }
    }
    break;
}

require_once '../../core/foot.php';