120 lines
5.1 KiB
PHP
120 lines
5.1 KiB
PHP
<?php
|
||
/*
|
||
* LiveStreet CMS
|
||
* Copyright © 2013 OOO "ЛС-СОФТ"
|
||
*
|
||
* ------------------------------------------------------
|
||
*
|
||
* Official site: www.livestreetcms.com
|
||
* Contact e-mail: office@livestreetcms.com
|
||
*
|
||
* GNU General Public License, version 2:
|
||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||
*
|
||
* ------------------------------------------------------
|
||
*
|
||
* @link http://www.livestreetcms.com
|
||
* @copyright 2013 OOO "ЛС-СОФТ"
|
||
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
||
*
|
||
*/
|
||
|
||
|
||
/************************************************************
|
||
* Здесь выполняется основная подготовка движка к запуску
|
||
* Внимание! Инициализация ядра здесь не происходит.
|
||
* При необходимости нужно вручную выполнить Engine::getInstance()->Init();
|
||
* Подключение автозагрузчика классов происходит только при инициализации ядра.
|
||
*/
|
||
|
||
/**
|
||
* Формируем путь до фреймворка
|
||
*/
|
||
$sPathToFramework = dirname(dirname(__FILE__)) . '/framework/';
|
||
|
||
/**
|
||
* Подключаем ядро
|
||
*/
|
||
require_once($sPathToFramework . '/classes/engine/Engine.class.php');
|
||
|
||
/**
|
||
* Определяем окружение
|
||
* В зависимости от окружения будет дополнительно подгружаться необходимый конфиг.
|
||
* Например, для окружения "production" будет загружен конфиг /application/config/config.production.php
|
||
* По дефолту работает окружение "local"
|
||
*/
|
||
$sEnv = Engine::DetectEnvironment(array(
|
||
'production' => array('your-machine-name'),
|
||
));
|
||
|
||
|
||
/**
|
||
* Дополнительные подготовка фреймворка
|
||
*/
|
||
require_once($sPathToFramework . '/bootstrap/start.php');
|
||
|
||
/**
|
||
* Подключаем загрузчик конфигов
|
||
*/
|
||
require_once($sPathToFramework . '/config/loader.php');
|
||
|
||
/**
|
||
* Определяем дополнительные параметры роутинга
|
||
*/
|
||
$aRouterParams = array(
|
||
'callback_after_parse_url' => array(
|
||
function () {
|
||
/**
|
||
* Логика по ЧПУ топиков
|
||
* Если URL соответствует шаблону ЧПУ топика, перенаправляем обработку на экшен/евент /blog/_show_topic_url/
|
||
* Через свои параметры конфига передаем исходный URL
|
||
* Суть обработки _show_topic_url в том, чтобы определить ID топика и корректность его URL, если он некорректен, то произвести его корректировку через внешний редирект на правильный URL
|
||
* Если удалось определить топик и URL корректный, то происходит внутренний редирект на стандартный евент отображения топика по ID (/blog/12345.html)
|
||
*/
|
||
|
||
$sUrlRequest = '';
|
||
if (Router::GetAction()) {
|
||
$sUrlRequest .= Router::GetAction();
|
||
}
|
||
if (Router::GetActionEvent()) {
|
||
$sUrlRequest .= '/' . Router::GetActionEvent();
|
||
}
|
||
if (Router::GetParams()) {
|
||
$sUrlRequest .= '/' . join('/', Router::GetParams());
|
||
}
|
||
/**
|
||
* Функция для формирования регулярного выражения по маске URL топика
|
||
*
|
||
* @param string $sUrl
|
||
* @return string
|
||
*/
|
||
$funcMakePreg = function ($sUrl) {
|
||
$sUrl = preg_quote(trim($sUrl, '/ '));
|
||
return strtr($sUrl, Config::Get('module.topic.url_preg'));
|
||
};
|
||
$sPreg = $funcMakePreg(Config::Get('module.topic.url'));
|
||
if (preg_match('@^' . $sPreg . '$@iu', $sUrlRequest)) {
|
||
Router::SetAction(Router::getInstance()->Rewrite('blog'));
|
||
Router::SetActionEvent('_show_topic_url');
|
||
Router::SetParams(array());
|
||
/**
|
||
* Хак - через конфиг передаем нужные параметры в обработчик эвента
|
||
* Модуль кеша здесь нельзя использовать, т.к. еще не произошло инициализации ядра
|
||
*/
|
||
Config::Set('module.topic._router_topic_original_url', $sUrlRequest);
|
||
}
|
||
}
|
||
)
|
||
);
|
||
|
||
|
||
/**
|
||
* Проверяем наличие директории install
|
||
*/
|
||
if (is_dir(rtrim(Config::Get('path.application.server'),
|
||
'/') . '/install') && (!isset($_SERVER['HTTP_APP_ENV']) or $_SERVER['HTTP_APP_ENV'] != 'test')
|
||
) {
|
||
$sUrl = rtrim(str_replace('index.php', '', $_SERVER['PHP_SELF']), '/\\') . '/application/install/';
|
||
header('Location: ' . $sUrl, true, 302);
|
||
exit();
|
||
} |