<?php
define('_IN_JOHNCMS', 1);
$headmod = 'users';
require('../incfiles/core.php');

/*
-----------------------------------------------------------------
Закрываем от неавторизованных и незабаненных
-----------------------------------------------------------------
*/
if ($rights < 9 && !$ban) {
    require('../incfiles/head.php');
    echo functions::display_error($lng['access_forbidden']);
    require('../incfiles/end.php');
    exit;
}

/*
-----------------------------------------------------------------
Класс чата - BanChat
-----------------------------------------------------------------
*/
class BanChat {

    /*
    -----------------------------------------------------------------
    Конструктор класса
    $action - примаем "акты" если есть
    $id - принимаем ай-ди сообщения если есть
    -----------------------------------------------------------------
    */
    function BanChat($action, $id) {

        // Глобальные переменные для постранички
        global $start, $kmess;

        // Проверка "актов"; По умолчанию выводим сообщения
        if ($action == NULL) {

           // Кол-во сообщений
           $total = mysql_result(mysql_query("SELECT COUNT(*) FROM `ban_chat` "), 0);

           echo '<div class="phdr"><b>Бан чат</b></div>';

           // Проверка на наличие сообщений
           if ($total != 0) {
              // Запрос для вывода сообщений
              $req = mysql_query("SELECT * FROM `ban_chat` ORDER BY `time` DESC LIMIT " . $start . "," . $kmess);

              // Цикл вывода сообщений
              for ($i = 0; $res = mysql_fetch_assoc($req); ++$i) {
              echo $i % 2 ? '<div class="menu">' : '<div class="menu">';

              // Вызываем метод вывода сообщений и инфы о юзере
              $this->getMsg($res['id'], $res['uid'], $res['time'], $res['msg']);

              echo '</div>';
              }

              // Выводим постраничку
              if ($total > $kmess)
                 echo '<div class="topmenu">' . functions::display_pagination('ban.php?', $start, $total, $kmess) . '</div>';

           } else {
              echo '<div class="menu">Сообщений нет!</div>';
           }

           // Выводим форму для добавления сообщения
           $this->msgForm();

        } elseif ($action == 'say') {
           // Добавляем сообщение в базу
           $this->msgAdd();
        } elseif ($action == 'del' && $id != NULL) {
           // Удаляем сообщение
           $this->msgDel($id);
        } elseif ($action == 'clean') {
           // Очищаем чат
           $this->msgClean();
        }

    }

    /*
    -----------------------------------------------------------------
    Метод выводящий ин-цию о юзере и сообщения
    $id - ай-ди сообщения
    $uid - ай-ди пользователя
    $time - время добавления сообщения
    $msg - текст сообщения
    -----------------------------------------------------------------
    */
    function getMsg($id, $uid, $time, $msg) {
       // Запрос информации о пользователе
       $usr = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `id` = ".$uid." "));

       // Проверка забанен ли юзер
       $req = mysql_query("SELECT * FROM `cms_ban_users` WHERE `user_id` = '" . $uid . "' AND `ban_time` > '" . time() . "'");
       if (mysql_num_rows($req)) {
           $ban = $uid;
       }

       // Вывод иконки пола юзера
       if ($usr['sex']) {
           echo functions::image(($usr['sex'] == 'm' ? 'm' : 'w') . ($usr['datereg'] > time() - 86400 ? '_new' : '') . '.png', array('class' => 'icon-inline'));
       } else {
           echo functions::image('del.png');
       }

       // Ник юзера и ссылка на его анкету
       echo '<a href="profile.php?user=' . $uid . '"><b>' . $usr['name'] . '</b></a> ';

       // Метка Онлайн / Офлайн
       echo(time() > $usr['lastdate'] + 300 ? '<span class="red"> <img src="../images/off.gif" alt="[Off]"/></span> ' : '<span class="green"> <img src="../images/on.gif" alt="[On]"/></span> ');

       // Дата сообщения
       echo ' <span class="gray">(' . functions::display_date($time) . ')</span>';

       // Выводим ссылку ответа на сообщение
       if (core::$user_id != $uid) {
           echo '<script type="text/javascript"> function o(){ document.getElementById("msg").innerHTML += "'.$usr['name'].', "; }</script>';
           echo ' <a href="#" onclick="o();">[о]</a><br/>';
       } else {
           echo '<br/>';
       }

       // Проверка текста сообщения
       $msg = functions::checkout($msg, 1, 1);
       if (core::$user_set['smileys'])
           $msg = functions::smileys($msg, $usr['rights'] >= 1 ? 1 : 0);

       // Вывод текста сообщения
       echo $msg;

       // Вывод информации под сообщением
       echo '<div class="sub">';

       if ($ban) {

          // Переменные для вывода инфы о бане
          $uban = mysql_fetch_assoc(mysql_query("SELECT * FROM `cms_ban_users` WHERE `user_id` = ".$uid." ORDER BY `id` DESC"));
          $lng_ban = core::load_lng('ban');
          $remain = $uban['ban_time'] - time();
          $period = $uban['ban_time'] - $uban['ban_while'];

          // Выводим инфу о бане
          echo '<span class="gray">Тип бана:</span> <b>' . $lng_ban['ban_' . $uban['ban_type']] . '</b><br/>';
          echo '<span class="gray">Забанен на:</span> ' . ($period < 86400000 ? functions::timecount($period) : $lng_ban['ban_time_before_cancel']);
          echo '(осталось '.functions::timecount($remain).')';

       } elseif ($usr['rights'] > 8) {
          // Выводим инфу что юзер СВ
          echo 'СуперВайзер(SV!)';
       } else {
          // Выводим инфу что у юзера закончился БАН
          echo 'БАН закончился!';
       }

       // Ссылка на удаление сообщения(для СВ)
       if (core::$user_rights > 8) {
           echo '<br/><a href="?act=del&amp;id='.$id.'">Удалить сообщение</a>';
       }

       echo '</div>';
    }

    /*
    -----------------------------------------------------------------
    Метод добавляющий сообщение
    -----------------------------------------------------------------
    */
    function msgAdd() {
       // Получаем текст сообщения
       $msg = isset($_POST['msg']) ? functions::checkin(mb_substr(trim($_POST['msg']), 0, 1000)) : '';

       $error = array();
       $flood = FALSE;

       // Проверка на пустое сообщение
       if (empty($msg))
            $error[] = core::$lng['error_empty_message'];

       // Проверка на добавление сообщения только СВ или забененным юзером
       if (core::$user_rights < 9 && !core::$user_ban)
            $error[] = core::$lng['access_forbidden'];

       // Антифлуд для пользователей
       $flood = functions::antiflood();

       // Проверка на флуд
       if ($flood) {
            $error[] = core::$lng['error_flood'] . ' ' . $flood . '&#160;' . core::$lng['seconds'];
          }

       if (!$error) {
            // Проверка на одинаковые сообщения
            $req = mysql_query("SELECT * FROM `ban_chat` WHERE `uid` = '".core::$user_id."' ORDER BY `time` DESC");
            $res = mysql_fetch_array($req);
            if ($res['msg'] == $msg) {
                $error[] = core::$lng['error_message_exists'];
            }
        }

        if (!$error) {
            // Вставляем сообщение в базу
            mysql_query("INSERT INTO `ban_chat` SET
                `uid` = '".core::$user_id."',
                `name` = '".core::$user_data['name']."',
                `time` = '" . time() . "',
                `msg` = '" . mysql_real_escape_string($msg) . "'
            ");

            // Фиксируем время последнего поста (антиспам)
            mysql_query("UPDATE `users` SET `lastpost` = '" . time() . "' WHERE `id` = '".core::$user_id."'");
            header('location: ban.php');
         } else {
            // Выводим ошибки(если есть)
            echo functions::display_error($error, '<a href="ban.php">' . core::$lng['back'] . '</a>');
         }
    }

    /*
    -----------------------------------------------------------------
    Метод очищающий весь чат
    -----------------------------------------------------------------
    */
    function msgClean() {
       // Проверка на очитску чата только для СВ
       if (core::$user_rights > 8) {
       mysql_query("TRUNCATE TABLE `ban_chat` ");
       }
       header('location: ban.php');
    }

    /*
    -----------------------------------------------------------------
    Метод удаляющий отдельное сообщение
    $id - ай-ди сообщения
    -----------------------------------------------------------------
    */
    function msgDel($id) {
       // Провекра на удаление сообщения только для СВ
       if (core::$user_rights > 8) {
       mysql_query("DELETE FROM `ban_chat` WHERE `id` = '" . $id . "' LIMIT 1");
       }
       header('location: ban.php');
    }

    /*
    -----------------------------------------------------------------
    Метод выводящий форму для добавления нового сообщения
    -----------------------------------------------------------------
    */
    function msgForm() {
       echo '<div class="menu"><b>' . core::$lng['message'] . ':</b><form name="form" action="ban.php?act=say" method="post">';
       echo bbcode::auto_bb('form', 'msg');
       echo '<textarea rows="' . $set_user['field_h'] . '" maxlength="1000" name="msg" id="msg">'.$msg.'</textarea><br/>';
       echo '<input type="submit" name="submit" value="' . core::$lng['sent'] . '"/></form></div>';
    }
}

require('../incfiles/head.php');

$ban = new BanChat($act, $id);

if ($rights > 8) {
echo '<div class="rmenu"><a href="?act=clean">Очистить чат</a></div>';
echo '<div class="list1"><a href="/panel">Админ панель</a></div>';
}

require_once('../incfiles/end.php');