<?php
/* Буферизация. */
ob_start();

/* Старт сессии. */
!isset($_SESSION) AND @session_start();

/* IP адрес. */
@$ip = @preg_replace('|[^0-9\.]|', '', (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? @$_SERVER['HTTP_X_FORWARDED_FOR'] : @$_SERVER['REMOTE_ADDR']));

/* Фичи. */
define('ROOT', $_SERVER['DOCUMENT_ROOT'] . "/");        // Корневой каталог.
define('CORE', ROOT . "system/");        // Каталог ядра.
define('CACHE', ROOT . "template/ajaxappcache/"); // Кеш 
define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) and strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); // Какой переход выполнен.
define('MODULE', ROOT . "_modules/"); // Папка файлов 
define('CONFIG_FILE', CORE . "config.ini"); // Конфиги с админки
define('FILES_SERVER', 'https://files.vineti.ru/'); // Файловый сервер
define('FILES_PATH', '/var/www/client447/data/www/files.vineti.ru/'); //Путь к файловому серверу


$_QUERY = array();

/* Показ ошибок. */
error_reporting(E_ALL);
ini_set("display_errors", 0);

/* Данные для подключения */
define('pdoOST', 'localhost');
define('DBPORT', '3306');
define('DBNAME', 'client447_kalitinua1997');
define('DBUSER', 'client447_kalitinua1997');
define('DBPASS', '0E3k1S1o');

// PDO классы для работы c DB .
class PDO_ extends PDO
{
    function __construct($dsn, $username, $password)
    {
        parent:: __construct($dsn, $username, $password);
        $this->setAttribute(PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
        $this->setAttribute(PDO :: ATTR_DEFAULT_FETCH_MODE, PDO :: FETCH_ASSOC);
    }

    function prepare($sql, $a = array())
    {
        $stmt = parent:: prepare($sql, array(
            PDO :: ATTR_STATEMENT_CLASS => array('PDOStatement_')
        ));
        return $stmt;
    }

    function query($sql, $params = array())
    {
        global $_QUERY;
        $stmt = $this->prepare($sql);
        $_QUERY[] = $sql;
        $stmt->execute($params);
        return $stmt;
    }

    function querySingle($sql, $params = array())
    {
        $stmt = $this->query($sql, $params);
        $stmt->execute($params);
        return $stmt->fetchColumn(0);
    }

    function queryFetch($sql, $params = array())
    {
        $stmt = $this->query($sql, $params);
        $stmt->execute($params);
        return $stmt->fetch();
    }
}

// Классы для работы PDOStatement .
class PDOStatement_ extends PDOStatement
{
    function execute($params = array())
    {
        if (func_num_args() == 1) {
            $params = func_get_arg(0);
        } else {
            $params = func_get_args();
        }

        if (!is_array($params)) {
            $params = array($params);
        }
        parent:: execute($params);
        return $this;
    }

    function fetchSingle()
    {
        return $this->fetchColumn(0);
    }

    function fetchAssoc()
    {
        $this->setFetchMode(PDO :: FETCH_NUM);
        $data = array();
        while ($row = $this->fetch()) {
            $data[$row[0]] = $row[1];
        }
        return $data;
    }
}

// Классы для работы DB .	
class DB
{
    static $pdo;
    static $dbh;

    public function __construct()
    {
        try {
            self:: $pdo = new PDO_('mysql:host=' . pdoOST . ';port=' . DBPORT . ';dbname=' . DBNAME, DBUSER, DBPASS);
            self:: $pdo->exec('SET CHARACTER SET utf8');
            self:: $pdo->exec('SET NAMES utf8');

            self:: $dbh = self:: $pdo;
        } catch (PDOException $e) {
            die('Временные технические работы. Приносим свои извинения. Сайт перезжает на новый сервер ,скоро заработает все )');
        }
    }

    final public function __destruct()
    {
        self:: $pdo = null;
        self:: $dbh = null;
    }
}

$database = new DB();

// Функция автозагрузки классов для работы с движком
function autoload($class)
{
    @require(CORE . 'classes/' . strtolower($class) . '.php');
}

@spl_autoload_register('autoload');
function shutdownHeaderLocation() // Ajax переходы
{
    $_SESSION['X-AJAX-REQUEST-URL'] = null;
    foreach (headers_list() as $item) {
        if (stripos($item, 'Location:') !== false && stripos($item, '/audio/file/') === false) {
            $_SESSION['X-AJAX-REQUEST-URL'] = 'X-AJAX-REQUEST-URL: ' . trim(substr($item, 9));
            break;
        }
    }
}

if (!empty($_SESSION['X-AJAX-REQUEST-URL']))
    header($_SESSION['X-AJAX-REQUEST-URL']);
register_shutdown_function('shutdownHeaderLocation');
if (isset($_COOKIE['xsid']) && $_COOKIE['xsid'] != NULL) {

    $sid = system:: check($_COOKIE['xsid']);
    $user = DB:: $pdo->queryFetch("SELECT * FROM `users` WHERE `sid` = ? LIMIT 1;", array($sid));
    if (isset($user['sid'])) {
        define('ACCESS', $user['access']);
        $userLevel = admin:: getLevel($user); //Уровень доступа
        $user_online = time() - $user['last_time']; //Время онлайн
        $q = DB::$pdo->query("SELECT last_time,rait_us,rait,id FROM `users` WHERE last_time < '".(time() - (3600 * 24 * 5))."' "); #Запрос рейтинга

        while ($post = $q ->fetch())
        {
            if($post['rait'] != '0' ){
            if($post['rait'] >= '0.05'){
                    DB::$pdo->query("UPDATE `users` SET `rait_us` ='".($post['rait'] - 0.05)."' WHERE `id` = '".$post['id']."' LIMIT 1"); //Если не был в онлайне
                }

                elseif($post['rait'] < '0.05') {
                    DB::$pdo->query("UPDATE `users` SET `rait` ='0.00' WHERE `id` = '".$post['id']."' LIMIT 1"); //Если есть рейтинг ,то снимаем 
                }

            }

        }
        
         if($user_online < 120)
        {
            ///// Если уже лимит
            if($user['rait'] < 100) {

                $time_raiting  = $user['time_us'] + $user_online;

                DB::$pdo->query("UPDATE `users` SET `time_us` ='$time_raiting' WHERE `id` = '$user[id]' LIMIT 1");

                for ($i=1; $i < 24; $i++) {
                    if( floor($user['time_us'] / 3600) == $i && $user['time_award'] <= time())
                    {
                        DB::$pdo->query("UPDATE `users` SET `rait_us` ='".($user['rait_us'] + 0.01)."' WHERE `id` = '$user[id]' LIMIT 1");
                        DB::$pdo->query("UPDATE `users` SET `time_award` ='".(time() + 3600)."' WHERE `id` = '$user[id]' LIMIT 1");
                        echo'<div class="note-success">За время проведенное на сайте Вам начислено 0.01 рейтинга!</div>';
                    
                    }
                }
            }

        }
        DB::$pdo->query("UPDATE `users` SET `us_browser_new` = '".system:: check($_SERVER['HTTP_USER_AGENT'])."' WHERE `id` = '{$user['id']}' LIMIT 1"); #Определения браузера и записывания в таблицу
        $online_time = ($user_online < 60) ? $user['online_time'] + $user_online : $user['online_time'];
        if ($user['set_online_hide'] == 0) {
            DB:: $pdo->query("UPDATE `users` SET `last_time` = ?, `online_time` = ?, `adm_ip` = ?, `adm_ua` = ? WHERE `id` = ? LIMIT 1;", array(time(), $online_time, $ip, system:: check($_SERVER['HTTP_USER_AGENT']), $user['id']));
        } else {
            DB:: $pdo->query("UPDATE `users` SET `adm_ip` = ?, `adm_ua` = ? WHERE `id` = ? LIMIT 1;", array($ip, system:: check($_SERVER['HTTP_USER_AGENT']), $user['id']));
        }
    } else {
        setcookie('xsid', '', time());
        system:: redirect('Ошибка авторизации.', '/');
    }
}

$config = (array)(json_decode(file_get_contents(CONFIG_FILE)));


$config['LEVELS'] = array(
    'a' => array(
        1 => 'Разработчик',
        'Технический администратор',
        'Системный администратор'
    ),
    'h' => 'Техническая поддержка',
    'm_file' => 'Модератор фото',
    'm_chat' => 'Модератор чата',
    'm_note' => 'Модератор записей'
);
$config['CAUSE_BLOCK'] = array('Предупреждение', 'Рассылка СПАМа', ' Оскорбительное поведение', 'Размещение запрещенного контента', 'Использование скриптов', 'Иное');


$startTime = microtime(true);


if (isset($user['id']) && $user['block_unlock'] == 0) {
    require(MODULE . "profile/includes/profile.block.php");
}

// Вызываем метод с дешифрованием все поступающий POST данных
emoji::dataDecode();


//Языковый пакет 
if (isset($user['id']) && $user['language'] != NULL && is_dir(CORE.'languages/'.$user['language']) && $user['language'] != '.' && $user['language'] != '..')
{
    $language = $user['language'];
}
else if (isset($_SESSION['language']) && stripcslashes(htmlspecialchars($_SESSION['language'])) != NULL && is_dir(CORE.'languages/'.stripcslashes(htmlspecialchars($_SESSION['language']))) && stripcslashes(htmlspecialchars($_SESSION['language'])) != '.' && stripcslashes(htmlspecialchars($_SESSION['language'])) != '..')
{
    $language = stripcslashes(htmlspecialchars($_SESSION['language']));
} else {
    $language = 'ru';
}
if(defined('ACCESS') === false) {
    define('ACCESS', -1);
}



//Ф-ция стикеров вывода кнопки стикеров//
function genStickersButton() {
    return '<i class="SmileButton" id="StickersButton"></i>';
}



// Ф-ция определения браузера //
function _getbrowser_mini($agent = null,$type = 1) {
if ($agent == null AND isset($_SERVER['HTTP_USER_AGENT']))
$agent = $_SERVER['HTTP_USER_AGENT'];
elseif ($agent == null) return false;

$browsers = array(
	//bots
	'bingbot' => 'bot',
	'Yahoo' => 'bot',
	'Googlebot' => 'bot',
	'MSNBot' => 'bot',
	'Teoma' => 'bot',
	'Scooter' => 'bot',
	'ia_archiver' => 'bot',
	'Lycos' => 'bot',
	'Yandex' => 'bot',
	'StackRambler' => 'bot',
	'Mail.Ru' => 'bot',
	'Aport' => 'bot',
	'WebAlta ' => 'bot',
	'Googlebot-Mobile' => 'bot',
	'Googlebot-Image' => 'bot',
	'Mediapartners-Google' => 'bot',
	'Adsbot-Google' => 'bot',
	'MSNBot-NewsBlogs' => 'bot',
	'MSNBot-Products' => 'bot',
	'MSNBot-Media' => 'bot',
	//bots end
	'YaBrowser' => 'Yandex.Browser',
	'iPhone' => 'iPhone',
	'iPod' => 'iPod',
	'iPad' => 'iPad',
	'Mac OS' => 'ios',
	'Firefox' => 'Firefox',
	'Opera' => 'Opera',
	'Opera Mini' => 'Opera.Mini',
	'MSIE' => 'Internet.Explorer',
	'TizenBrowser' => 'Tizen.Browser',
	'SymbianOS' => 'SymbianOS',
	'Windows Phone' => 'WindowsPhone',
	'Edge' => 'Edge',
	'Android' => 'Android',
	'Ucweb' => 'Ucweb',
	'Chrome' => 'Chrome',
	'BlackBerry' => 'BlackBerry',
	'safari' => 'safari',
	'Windows NT' => 'Internet.Explorer',
	'Netscape' => 'Netscape',
	'Mozilla' => 'Mozilla',
);
	$value = 'not-found';
    foreach ($browsers as $item => $value) 
	{ 
        if (preg_match("/".$item."/", $agent, $match)) 
		{  
			$outName = $value;
			if ($value == 'bot') $outName = $item;
			if ($type == 1) 
				$out = $value;
			if ($type == 2)
				$out = "<img height='16' width='16' title='{$outName}' alt='{$outName}' src='/template/icons/browser/{$value}.png' style='margin: 0 4px -2.4px 0;'>";
			if ($type == 3)
				$out = "<img height='16' width='16' style='margin-bottom:-2px' class='imgBrowser' title='{$outName}' alt='{$outName}' src='/template/icons/browser/{$value}.png'  style='margin: 0 4px -2.4px 0;'>".' '.$outName;
			
			return $out;
        }	
    }
}













// Ф-ция определения браузера //
function _getbrowser_($agent = null,$type = 1) {
if ($agent == null AND isset($_SERVER['HTTP_USER_AGENT']))
$agent = $_SERVER['HTTP_USER_AGENT'];
elseif ($agent == null) return false;

$browsers = array(
	//bots
	'bingbot' => 'bot',
	'Yahoo' => 'bot',
	'Googlebot' => 'bot',
	'MSNBot' => 'bot',
	'Teoma' => 'bot',
	'Scooter' => 'bot',
	'ia_archiver' => 'bot',
	'Lycos' => 'bot',
	'Yandex' => 'bot',
	'StackRambler' => 'bot',
	'Mail.Ru' => 'bot',
	'Aport' => 'bot',
	'WebAlta ' => 'bot',
	'Googlebot-Mobile' => 'bot',
	'Googlebot-Image' => 'bot',
	'Mediapartners-Google' => 'bot',
	'Adsbot-Google' => 'bot',
	'MSNBot-NewsBlogs' => 'bot',
	'MSNBot-Products' => 'bot',
	'MSNBot-Media' => 'bot',
	//bots end
	'YaBrowser' => 'Yandex.Browser',
	'iPhone' => 'iPhone',
	'iPod' => 'iPod',
	'iPad' => 'iPad',
	'Mac OS' => 'ios',
	'Firefox' => 'Firefox',
	'Opera' => 'Opera',
	'Opera Mini' => 'Opera.Mini',
	'MSIE' => 'Internet.Explorer',
	'TizenBrowser' => 'Tizen.Browser',
	'SymbianOS' => 'SymbianOS',
	'Windows Phone' => 'WindowsPhone',
	'Edge' => 'Edge',
	'Android' => 'Android',
	'Ucweb' => 'Ucweb',
	'Chrome' => 'Chrome',
	'BlackBerry' => 'BlackBerry',
	'safari' => 'safari',
	'Windows NT' => 'Internet.Explorer',
	'Netscape' => 'Netscape',
	'Mozilla' => 'Mozilla',
);
	$value = 'not-found';
    foreach ($browsers as $item => $value) 
	{ 
        if (preg_match("/".$item."/", $agent, $match)) 
		{  
			$outName = $value;
			if ($value == 'bot') $outName = $item;
			if ($type == 1) 
				$out = $value;
			if ($type == 2)
				$out = "<img height='16' width='16' title='{$outName}' alt='{$outName}' src='/template/icons/browser/{$value}.png'>";
			if ($type == 3)
				$out = "<img height='16' width='16' style='margin-bottom:-2px' class='imgBrowser' title='{$outName}' alt='{$outName}' src='/template/icons/browser/{$value}.png'>".' '.$outName;
			
			return $out;
        }	
    }
}