<?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/www-root/data/www/files.vineti.ru/'); //Путь к файловому серверу
$_QUERY = array();
/* Показ ошибок. */
error_reporting(E_ALL);
ini_set("display_errors", 1);
/* Данные для подключения */
define('pdoOST', 'localhost');
define('DBPORT', '3306');
define('DBNAME', '');
define('DBUSER', '');
define('DBPASS', '');
// 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'];
$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);
}