Files
ave-cms-alt/index.php

220 lines
6.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2020 AVE.cms, https://ave-cms.ru
*
* @license GPL v.2
*/
define ('START_MICROTIME', microtime());
define ('START_MEMORY', memory_get_usage());
define ('BASE_DIR', str_replace("\\", "/", dirname(__FILE__)));
//-- Проверяем уставлена ли CMS
if (! @filesize(BASE_DIR . '/config/db.config.php'))
{
header ('Location:install/index.php');
exit;
}
//-- Если в запросе пришел вызов thumbnail
//-- подключаем файл обработки thumbnail
if (! empty($_REQUEST['thumb']))
{
require (BASE_DIR . '/inc/thumb.php');
exit;
}
ob_start();
//-- Подключаем файл определения мобильных устройств
//-- далее пользуемся $MobileDetect
require_once (BASE_DIR . '/lib/mobile_detect/Mobile_Detect.php');
$MDetect = new Mobile_Detect;
$init_start = microtime();
//-- Подключаем файл инициализации
require (BASE_DIR . '/inc/init.php');
$GLOBALS['block_generate']['INIT']['END'] = number_format(microtime_diff($init_start, microtime()), 3, ',', ' ') . ' sec';
Debug::startTime('CODEEND');
//-- Проверяем нет ли в запросе папки UPLOADS_DIR
//-- подключаем файл для работы thumbsnail
if (strpos ($_SERVER['REQUEST_URI'], ABS_PATH . UPLOAD_DIR . '/') === 0)
{
require (BASE_DIR . '/inc/thumb.php');
exit;
}
//-- Папка с шаблонами для Smarty
$AVE_Template = new AVE_Template(BASE_DIR . '/templates/');
//-- Подключаем ядро системы
require (BASE_DIR . '/class/class.core.php');
$AVE_Core = new AVE_Core;
//-- Проверям на вызов внешних модулей и системных блоков
if (
empty ($_REQUEST['module'])
||
empty ($_REQUEST['sysblock'])
||
empty ($_REQUEST['request'])
)
$AVE_Core->coreUrlParse($_SERVER['REQUEST_URI']);
$GLOBALS['page_id'] = [(isset($_REQUEST['id'])
? $_REQUEST['id']
: '')
=> ['page' => floatval(0)]];
//-- Если пришел вызов на показ ревизии документа
if (! empty($_REQUEST['revission']))
{
$sql = "
SELECT
doc_data
FROM
" . PREFIX . "_document_rev
WHERE
doc_id = '" . (int)$_REQUEST['id'] . "'
AND
doc_revision = '" . (int)$_REQUEST['revission'] . "'
LIMIT 1
";
$res = $AVE_DB->Query($sql)->GetCell();
$res = @unserialize($res);
$flds = get_document_fields((int)$_REQUEST['id'], $res);
}
//-- Собираем страницу
$AVE_Core->coreSiteFetch(get_current_document_id());
Debug::startTime('CONTENT');
$content = ob_get_clean();
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && (defined('GZIP_COMPRESSION') && GZIP_COMPRESSION))
ob_start('ob_gzhandler');
else
ob_start();
Debug::$_document_content = $content;
Debug::startTime('EVALCONTENT');
eval (' '.'?>' . $content . '<?'.'php ');
$GLOBALS['block_generate']['DOCUMENT']['EVALCONTENT'] = Debug::endTime('EVALCONTENT');
$render = ob_get_clean();
unset ($content);
Registry::clean();
//-- Ловим 404 ошибку
if (isset($_REQUEST['id']) AND ($_REQUEST['id']) == PAGE_NOT_FOUND_ID)
{
report404();
header ($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true);
}
//-- Постраничка
if (
empty($_REQUEST['module']) &&
(
(
isset($_REQUEST['page'])
&& is_numeric($_REQUEST['page'])
&& ($_REQUEST['page'] < 2 OR ($_REQUEST['page'] > @$GLOBALS['page_id'][$_REQUEST['id']]['page']))
)
OR
(
isset($_REQUEST['apage'])
&& is_numeric($_REQUEST['apage'])
&& ($_REQUEST['apage'] < 2 OR ($_REQUEST['apage'] > @$GLOBALS['page_id'][$_REQUEST['id']]['apage']))
)
OR
(
isset($_REQUEST['artpage'])
&& is_numeric($_REQUEST['artpage'])
&& ($_REQUEST['artpage'] < 2 OR ($_REQUEST['artpage'] > @$GLOBALS['page_id'][$_REQUEST['id']]['artpage']))
)
)
)
{
if ($_REQUEST['id'] == 1)
header ('Location:' . ABS_PATH);
else
header ('Location:' . ABS_PATH . $AVE_Core->curentdoc->document_alias . URL_SUFF);
exit;
}
$GLOBALS['block_generate']['DOCUMENT']['CONTENT'] = Debug::endTime('CONTENT');
$GLOBALS['block_generate']['INIT']['CODEEND'] = Debug::endTime('CODEEND');
// --- ИНЖЕКТОР АССЕТОВ ---
$process_assets = function($asset_array) {
if (empty($asset_array) || !is_array($asset_array)) return '';
$clean_assets = [];
foreach (array_unique($asset_array) as $item) {
$item = trim($item);
// Разрешаем только заголовочные теги
if (!preg_match('/^<(script|link|style|meta|!--|title|base)/i', $item)) continue;
// Удаляем любые on* атрибуты (onload, onerror и т.д.)
if (preg_match('/on[a-z]+\s*=/i', $item)) continue;
// DATA: Блокируем всё, кроме безопасных изображений
if (stripos($item, 'data:') !== false && stripos($item, 'image/') === false) continue;
$clean_assets[] = $item;
}
return implode("\n", $clean_assets);
};
// Собираем данные из PHP-кода модулей
$module_header = $process_assets($GLOBALS['user_header'] ?? []);
$module_footer = $process_assets($GLOBALS['user_footer'] ?? []);
// Вставка в HEADER
if (!empty($module_header)) {
if (strpos($render, '[tag:rubheader]') !== false) {
$render = str_replace('[tag:rubheader]', $module_header . "\n[tag:rubheader]", $render);
} else {
$render = str_replace('</head>', $module_header . "\n</head>", $render);
}
}
// Вставка в FOOTER
if (!empty($module_footer)) {
if (strpos($render, '[tag:rubfooter]') !== false) {
$render = str_replace('[tag:rubfooter]', $module_footer . "\n[tag:rubfooter]", $render);
} else {
$render = str_replace('</body>', $module_footer . "\n</body>", $render);
}
}
unset($module_header, $module_footer, $process_assets);
// --- КОНЕЦ БЛОКА ИНЖЕКТОРА ---
//-- Вывод конечного результата
output_compress($render);
$AVE_DB->Close();