Files
ave-cms-alt/index.php
T

220 lines
6.1 KiB
PHP

<?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();