<?php /* СС0 */


$cms['cms_dir']   = __DIR__;
$cms['site_dir']  = dirname( $cms['cms_dir'] );
$cms['referer']   = @$_SERVER['HTTP_REFERER'];
$cms['request']   = $_SERVER['REQUEST_URI'];
if ( empty( $_SERVER['HTTPS'] ) ) {
    $cms['protocol'] = 'http';
} else {
    $cms['protocol'] = 'https';
}
$cms['parse_url'] = parse_url($cms['protocol'].'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
$cms['url']       = $cms['parse_url']['path'];
$cms['status']    = '404';
$cms['tr']        = array(); // transliteration array
# В конфигурационном файле виртуального сервера может быть указарана переменная
# DocumentRoot заканчивающаяся на слеш. Это нужно исправить.
$_SERVER['DOCUMENT_ROOT'] = rtrim( $_SERVER['DOCUMENT_ROOT'], '/' );
# Определяем папку относительно корня сайта, в которую установлена CMS
$cms['base_url'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $cms['site_dir']).'/';
# фикс для windows
if ( DIRECTORY_SEPARATOR === '\\' ) {
    $cms['cms_dir'] = str_replace( '\\', '/', $cms['cms_dir'] );
}
$esc  = str_replace( '/', '\\/', $cms['base_url'] );
$cms['cms_file'] = $cms['cms_dir'].'/'.preg_replace( "/^{$esc}/", '', $cms['url'] );


// Load config.php
$cms['config_file'] = $cms['cms_dir'] . "/config.php";
if ( file_exists( $cms['config_file'] ) ) {
    include( $cms['config_file'] );
}

// Set locale
if ( !empty( $cms['config']['locale'] ) ) {
    setlocale( LC_ALL, $cms['config']['locale'] );
}
// Set timezone
if ( !empty( $cms['config']['timezone'] ) ) {
    date_default_timezone_set ( $cms['config']['timezone'] );
}
    
# Инициализация этапов выполнения
$cms['stage']  = 'query'; /* Этап по умолчанию */
$cms['stages'] = array(
    'query'    => array( 'disabled' => false, 'next' => 'template'),
    'template' => array( 'disabled' => false, 'next' => 'echo'    ),
    'echo'     => array( 'disabled' => false, 'next' => 'write'   ),
    'write'    => array( 'disabled' => false, 'next' => ''        ),
    'ajax'     => array( 'disabled' => false, 'next' => ''        ),
    'cron'     => array( 'disabled' => false, 'next' => ''        ),
    'admin'    => array( 'disabled' => false, 'next' => 'template'),
    // Другие этапы, не входящие в главную последовательность
    // 'create_tables' => array( 'disabled' => false, 'next' => ''),
    // срабатывает при изменении настроек базы данных и позволяет модулям создать свои таблицы
);

# Установка стандартных URL для перехвата
$cms['urls'] = array();
$cms['urls']['/ajax'] = 'ajax';
$cms['urls']['/cron'] = 'cron';

# Загрузка файлов с функциями
foreach( glob( '*.fn.php' ) as $fn_file ) {
    include_once( $fn_file );
}

# Загрузка модулей
foreach( glob( 'mod/*.mod.php' ) as $module ) {
    include_once( $module );
}

# Сортировка URLов и включение нужного этапа если совпал URL
krsort( $cms['urls'] );
# Перебираем все выставленные URLы и проверяем на совпадение с запрошенным
foreach( $cms['urls'] as $url => $stage ) {
    # Экранируем | для регулярного выражения
    $url = preg_replace( "/\//", "\\/", $url );
    # Результаты сравнения записываем в $cms['url_matches']
    if ( preg_match( "/{$url}/", $cms['url'], $cms['url_matches'] ) ) {
        $cms['stage'] = $stage;
        break;
    }
}

# Запуск CMS в работу
while ( !empty( $cms['stage'] ) ) {
    cms_do_stage( $cms['stage'] );
    $cms['stage'] = $cms['stages'][$cms['stage']]['next'];
}
