<?php /* Created on: 24.06.2006 */
/*
* @package LabCMS
* @copyright (c) 2006 Alexander Levin aka Loki (loki_angel@mail.ru)
* @support http://labcms.ru
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/

$time_start = microtime(true);
if (!session_id()) @session_start();
//отправляем заголовки подавляющие кэширование
Header("Expires: Thu, 19 Feb 1998 13:24:18 GMT");
Header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
Header("Cache-Control: no-cache, must-revalidate");
Header("Cache-Control: post-check=0,pre-check=0");
Header("Cache-Control: max-age=0");
Header("Pragma: no-cache");

include_once dirname(__FILE__).'/../functions/init_func.php';

//убираем все слеши от магических кавычек
clean_magic_quotes();

include_once dirname(__FILE__)."/config.php";
include_once LAB_PATH_KERNEL.'/classes/LabVars.php';

spl_autoload_register('autoLoader');

//если сайт находится в демо режиме, то запрещаем отладку. Если пользователь суперадмин - разрешаем.
if (DEMO_MODE) {
	LabVars::$allow_debug=false;
} else {
	LabVars::$allow_debug=(isset($_SESSION['allow_debug']) && $_SESSION['allow_debug']);
}


if (!file_exists(LAB_PATH_DATA.'/install.lock')) {
	//если движок не проинсталлирован, то вызываем инсталлятор
	include LAB_PATH_KERNEL.'/install/index.php';
	exit();
}
include_once dirname(__FILE__).'/../functions/functions.php';
include_once LAB_PATH_KERNEL.'/classes/config.php';
include_once LAB_PATH_KERNEL.'/classes/Tpl.php';
include_once LAB_PATH_KERNEL.'/classes/User.php';
include_once LAB_PATH_KERNEL.'/classes/LabCMS.php';

//инициализация конфига
config::init();
//закидываем в шаблонизатор настройки сайта, но без параметров БД и секретного кода
config::asignToTpl();

if (file_exists(LAB_PATH_KERNEL.'/custom_files/index.php')) {
	include_once LAB_PATH_KERNEL.'/custom_files/index.php';
}

Factory::set('LabCMS', 'LabCMS');

//проверка доступных обновлений
LabCMS::checkForUpdates();

//Парсинг URL
Url::parse();

filterNullInSuperglobals();
//первоначальная инициализация
LabCMS::init();
//инициализируем  языковую поддержку
Lang_Generic::init(LabCMS::i()->lang['key']);
//инициализируем пользователя
//User::i();

if (LabCMS::i()->isAjax()) LabVars::$template='blank.tpl';

Tpl::i()->assign('_user', User::i());

if (LabCMS::i()->isAjax()) Debug_HackerConsole_Main::disable();

if ($_SERVER['REQUEST_METHOD']=='POST') {
	if (!User::checkToken($_POST['token'], false)) {
		LabVars::$break=true;
		if (LabCMS::i()->isAjax()) {
			echo real_json_encode(array('error'=>LabCMS::i()->errors[0]));
			exit;
		}
	}
}

$subscriber=Factory::create('Subscriber');
$subscriber->send();

Hook::call('modules_before');

foreach (LabCMS::i()->modules as LabVars::$current_module) {
	$mod_template="";
	config::setCurrentModuleConfig();
	LabCMS::i()->setModuleTemplate('');
	Tpl::i()->caching = false;
	if (!LabVars::$break) {
		if (LabCMS::i()->disableForDemo()) {
			if (LabCMS::i()->isAjax()) {
				echo real_json_encode(array('error'=>LabCMS::i()->errors[0]));
				exit;
			}
			continue;
		}
		include LAB_PATH_MODULES.'/'.LabCMS::i()->getModuleName()."/index.php";

		if ($mod_template) LabCMS::i()->assignModule($mod_template);
		elseif(LabCMS::i()->getModuleTemplate())
			LabCMS::i()->assignModule(LabCMS::i()->getModuleTemplate());
	}
}
LabVars::$current_module=null;

Hook::call('modules_after');

Tpl::i()->assign('css', (count(LabVars::$css)?LabVars::$css:LabCMS::i()->getSkinCSS()));
Tpl::i()->assign('js', (count(LabVars::$js)?LabVars::$js:LabCMS::i()->getSkinJS()));

$time_end = microtime(true);
$sql=array('time'=>0, 'count'=>0);
if (Db::$connected) $sql = Db::i()->getStatistics();
if (!isset($sql['cached'])) $sql['cached']=0;
$total = ($time_end - $time_start);
$php = $total-$sql["time"];
Tpl::i()->assign(
	"stat", "Время генерации: ".sprintf("%01.3f сек.", $total)
	.", PHP: ".sprintf("%01.3f сек.", $php).", SQL: "
	.sprintf("%01.3f сек.", $sql["time"])." при "
	.($sql["count"]-$sql["cached"])." (".$sql["count"].") запросах"
);

if (!LabVars::$forceDisplay) LabCMS::i()->display();

//сохранение кэша
LabCMS::i()->setCache();
