<?php

/**
 * @package     JohnCMS
 * @link        http://johncms.com
 * @copyright   Copyright (C) 2008-2011 JohnCMS Community
 * @license     LICENSE.txt (see attached file)
 * @version     VERSION.txt (see attached file)
 * @author      http://johncms.com/about
 */

defined('_IN_JOHNCMS') or die('Error: restricted access');

Error_Reporting(E_ALL & ~E_NOTICE);
mb_internal_encoding('UTF-8');
@ ini_set('arg_separator.output', '&amp;');
@ ini_set('session.use_trans_sid', '0');

if (!isset ($rootpath))
    $rootpath = '../';

if (get_magic_quotes_gpc()) {
    // Удаляем слэши, если открыт magic_quotes_gpc
    $in = array(& $_GET, & $_POST, & $_COOKIE);
    while (list($k, $v) = each($in)) {
        foreach ($v as $key => $val) {
            if (!is_array($val)) {
                $in[$k][$key] = stripslashes($val);
                continue;
            }
            $in[] = & $in[$k][$key];
        }
    }
    unset ($in);
    if (!empty ($_FILES)) {
        foreach ($_FILES as $k => $v) {
            $_FILES[$k]['name'] = stripslashes((string)$v['name']);
        }
    }
}

/*
-----------------------------------------------------------------
Получаем и фильтруем основные переменные для системы
-----------------------------------------------------------------
*/
$id = isset ($_REQUEST['id']) ? abs(intval($_REQUEST['id'])) : false;
$page = isset ($_REQUEST['page']) && $_REQUEST['page'] > 0 ? intval($_REQUEST['page']) : 1;
$start = isset ($_GET['start']) ? abs(intval($_GET['start'])) : 0;
$act = isset ($_GET['act']) ? trim($_GET['act']) : '';
$mod = isset ($_GET['mod']) ? trim($_GET['mod']) : '';
$do = isset ($_GET['do']) ? trim($_GET['do']) : '';
$agn = htmlentities(substr($_SERVER['HTTP_USER_AGENT'], 0, 100), ENT_QUOTES);

/*
-----------------------------------------------------------------
Получаем IP и проверяем на HTTP Flood
-----------------------------------------------------------------
*/
require_once ($rootpath . 'incfiles/class_ipinit.php');
$ipinit = new ipinit();
$ipl = $ipinit->ip;
$ipp = long2ip($ipl);
unset ($ipinit);

/*
-----------------------------------------------------------------
Стартуем сессию
-----------------------------------------------------------------
*/
session_name("SESID");
session_start();

/*
-----------------------------------------------------------------
Подключаемся к базе данных
-----------------------------------------------------------------
*/
require_once ($rootpath . 'incfiles/db.php');
$connect = @ mysql_pconnect($db_host, $db_user, $db_pass) or die('cannot connect to server');
@ mysql_select_db($db_name) or die('cannot connect to db');
@ mysql_query("SET NAMES 'utf8'", $connect);

/*
-----------------------------------------------------------------
Проверяем адрес IP на Бан
-----------------------------------------------------------------
*/
$req = mysql_query("SELECT `ban_type`, `link` FROM `cms_ban_ip` WHERE '" . $ipl . "' BETWEEN `ip1` AND `ip2` LIMIT 1;") or die('Error: table "cms_ban_ip"');
if (mysql_num_rows($req) > 0) {
    $res = mysql_fetch_array($req);
    switch ($res['ban_type']) {
        case 2 :
            if (!empty ($res['link'])) {
                // Редирект по ссылке
                header("Location: " . $res['link']);
                exit;
            }
            else {
                header("Location: http://gazenwagen.com");
                exit;
            }
            break;
        case 3 :
            // Закрытие регистрации
            $regban = true;
            break;
        default :
            // Полный запрет доступа к сайту
            header("HTTP/1.0 404 Not Found");
            exit;
    }
}

/*
-----------------------------------------------------------------
Основные настройки системы
-----------------------------------------------------------------
*/
$user_id = false;
$user_ps = false;
// Временно оставляем старые переменные
$dostsadm = 0;
$dostadm = 0;
$dostsmod = 0;
$dostlmod = 0;
$dostdmod = 0;
$dostfmod = 0;
$dostcmod = 0;
$dostkmod = 0;
$dostmod = 0;
$rights = 0;

// Задаем настройки системы
$req = mysql_query("SELECT * FROM `cms_settings`;");
$set = array();
while ($res = mysql_fetch_row($req)) $set[$res[0]] = $res[1];
mysql_free_result($req);
$emailadmina = $set['emailadmina']; // E-mail администратора
$sdvigclock = $set['sdvigclock']; // Временной сдвиг по умолчанию для системы
$copyright = $set['copyright']; // Коприайт сайта
$home = $set['homeurl']; // Домашняя страница
$ras_pages = 'txt'; // Расширение текстовых страниц
$admp = $set['admp']; // Папка с Админкой
$flsz = $set['flsz']; // Максимальный размер файлов

// Пользовательские параметры для Гостей
$set_user = array();
$set_user['sdvig'] = 0; // Временной сдвиг
$set_user['smileys'] = 1; // Включить(1) выключить(0) смайлы
$set_user['kmess'] = 10; // Число сообщений на страницу
$set_user['quick_go'] = 1; // Быстрый переход
$set_user['avatar'] = 1; // Аватары
$set_user['skin'] = $set['skindef']; // Тема оформления
$kmess = $set_user['kmess'];

/*
-----------------------------------------------------------------
Дата и время
-----------------------------------------------------------------
*/
date_default_timezone_set('Europe/Moscow');
$realtime = time() + $sdvigclock * 3600;
$mon = date("m", $realtime);
if (substr($mon, 0, 1) == 0) {
    $mon = str_replace("0", "", $mon);
}
$day = date("d", $realtime);
if (substr($day, 0, 1) == 0) {
    $day = str_replace("0", "", $day);
}
$mesyac = array(1 => "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");

/*
-----------------------------------------------------------------
Автоочистка системы
-----------------------------------------------------------------
*/
if ($set['clean_time'] <= ($realtime - 43200)) {
    // Очищаем таблицу `cms_guests`
    mysql_query("DELETE FROM `cms_guests` WHERE `lastdate` < '" . ($realtime - 600) . "'");
    mysql_query("OPTIMIZE TABLE `cms_guests`");
    mysql_query("UPDATE `cms_settings` SET  `val`='" . $realtime . "' WHERE `key`='clean_time'");
}

/*
-----------------------------------------------------------------
Авторизация по сессии
-----------------------------------------------------------------
*/
if (isset ($_SESSION['uid']) && isset ($_SESSION['ups'])) {
    $user_id = intval($_SESSION['uid']);
    $user_ps = $_SESSION['ups'];
}

/*
-----------------------------------------------------------------
Авторизация по COOKIE
-----------------------------------------------------------------
*/
elseif (isset ($_COOKIE['cuid']) && isset ($_COOKIE['cups'])) {
    $user_id = intval(base64_decode($_COOKIE['cuid']));
    $_SESSION['uid'] = $user_id;
    $user_ps = md5($_COOKIE['cups']);
    $_SESSION['ups'] = $user_ps;
    $cookauth = true;
}

/*
-----------------------------------------------------------------
Запрос в базе данных по юзеру
-----------------------------------------------------------------
*/
if ($user_id && $user_ps) {
    $req = mysql_query("SELECT * FROM `users` WHERE `id` = '$user_id' LIMIT 1");
    if (mysql_num_rows($req)) {
        $datauser = mysql_fetch_assoc($req);
        if ($user_ps === $datauser['password']) {
            if (!empty($datauser['set_user'])) {
                // Получаем общие настройки пользователя
                $set_user = unserialize($datauser['set_user']);
            } else {
                // Задаем пользовательские настройки по-умолчанию
                $set_user = array(
                    'avatar' => 1,
                    'smileys' => 1,
                    'translit' => 1,
                    'quick_go' => 1,
                    'gzip' => 1,
                    'online' => 1,
                    'movings' => 1,
                    'digest' => 1,
                    'sdvig' => 0,
                    'kmess' => 10,
                    'skin' => 'default',
                    'field_h' => 3
                );
            }
            $kmess = (int)$set_user['kmess']; // Число сообщений на страницу
            // Получаем данные пользователя
            $login = $datauser['name']; // Логин (Ник) пользователя
            $rights = $datauser['rights'];

            /*
            -----------------------------------------------------------------
            Проверка юзера на бан
            -----------------------------------------------------------------
            */
            $req = mysql_query("SELECT * FROM `cms_ban_users` WHERE `user_id` = '$user_id' AND `ban_time` > '$realtime'") or die('Error: table "cms_ban_users"');
            if (mysql_num_rows($req)) {
                $rights = 0;
                $ban = array();
                while ($res = mysql_fetch_row($req)) $ban[$res[4]] = 1;
                mysql_free_result($req);
            }
            // Если юзера не было на сайте более 1-го часа , показываем дайджест
            if ($datauser['lastdate'] < ($realtime - 3600) && $set_user['digest'] && $headmod == 'mainpage')
                header('Location: ' . $home . '/index.php?act=digest&last=' . $datauser['lastdate']);
        }
        else {
            // Если пароль не совпадает, уничтожаем переменные сессии и чистим куки
            unset ($_SESSION['uid']);
            unset ($_SESSION['ups']);
            setcookie('cuid', '');
            setcookie('cups', '');
            $user_id = false;
            $user_ps = false;
        }
    }
    else {
        // Если юзер не найден, уничтожаем переменные сессии и чистим куки
        unset ($_SESSION['uid']);
        unset ($_SESSION['ups']);
        setcookie('cuid', '');
        setcookie('cups', '');
        $user_id = false;
        $user_ps = false;
    }
}

/*
-----------------------------------------------------------------
Защита от CSRF
-----------------------------------------------------------------
*/
function validate_referer() {
    if($_SERVER['REQUEST_METHOD']!=='POST') return;
    if(@!empty($_SERVER['HTTP_REFERER'])) {
        $ref = parse_url(@$_SERVER['HTTP_REFERER']);
        if($_SERVER['HTTP_HOST']===$ref['host']) return;
    }
    die('Invalid request');
}

if($rights){
    validate_referer();
}

/*
-----------------------------------------------------------------
Подключаем файл функций
-----------------------------------------------------------------
*/
require_once ($rootpath . 'incfiles/func.php');

/*
-----------------------------------------------------------------
Актуализация переменных
-----------------------------------------------------------------
*/
$start = isset ($_REQUEST['page']) ? $page * $kmess - $kmess : $start;

/*
-----------------------------------------------------------------
Буферизация вывода
-----------------------------------------------------------------
*/
if ($set['gzip'] && @ extension_loaded('zlib')) {
    @ ini_set('zlib.output_compression_level', 3);
    ob_start('ob_gzhandler');
}
else {
    ob_start();
}