<?php
/**
 * Created by PhpStorm.
 * User: Severtain
 * Date: 06.12.2016
 * Time: 19:48
 *
 * v1.0.1 - исправлен приоритет вызова лога и конфига (чтобы отлавливать ошибки при инициализации)
 */

//$GLOBALS["start"] = microtime(true);
header('Content-Type: text/html; charset=utf-8');
header('X-Powered-By: Severtain WebSiteFramework');

/*error_reporting(-1);*/
/*ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);*/

const INT_VAL = "int";
const BOOLEAN_VAL = "boolean";
const STRING_VAL = "string";

//Apache show all
/*ini_set('error_reporting', E_ALL);*/
/*ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);*/

class Engine {
    //Является ли раздел экшеном
    protected $action = false;
    //Является ли раздел плагином
    protected $plugin = false;

    function __construct () {
        $directory = pathinfo(__FILE__)['dirname'];
        //Защита от несуществубщих поддоменов
        if (basename($directory)!=basename($_SERVER["DOCUMENT_ROOT"])) {
            include_once($_SERVER['DOCUMENT_ROOT'] . "/404.html");
            die();
        }

        session_start(); //включаем сессии

        $this->IncludeAllPhpFiles($_SERVER['DOCUMENT_ROOT'] . "/config");

        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/bd.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Request.php");
        SQL::InitQuery(Bd::$coon);
        require_once($_SERVER['DOCUMENT_ROOT'] . "/site/RightsSite.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Rights.php"); //1.09.8+

        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Log/Log.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Config.php");
        new Config();
		 Config::$dev_tools = false;

        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Router.php");
        Router::$lang = configurator::$defaultLanguage; //set default lang
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Compile.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/SuperAction.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Action.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Log/PaymentLog.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/CCF.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Model.php");
        $this->IncludeAllPhpFiles($_SERVER['DOCUMENT_ROOT'] . "/models");

        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/DAO.php");
        \CCF\CCF::_init();

        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/FormElements/FormElements.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Form.php");
        Form::_init();
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Func.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Module.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Handler.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/User.php");
        require_once($_SERVER['DOCUMENT_ROOT'] . "/core/Lang.php");

        UserAgent::__init();

        Router::initSection(); //инициализируем секции

        $actionType = Router::initActions(); //инициализируем экшен

        if ($actionType == 'action') //выбираем активный экшен, если он есть
            $this->action = true;
        else if ($actionType == 'plugin') //если нету, то это плагин и запускаем чисто модуль
            $this->plugin = true;
        else
            Router::notFound();

        if ($this->action) //подключаем файлы для экшена
            require_once (Router::$action_fn);

        if ($this->plugin || $this->action) //подключаем файлы для плагина
            require_once (Router::$plugin_fn);

        if (file_exists(Router::$sql_fn)) //подключаем файл для sql
            require_once (Router::$sql_fn);


        /*if ($_SERVER["SERVER_NAME"]==configurator::$local) //Переключем режим разработчика
            Config::$dev_tools = true;
        else
            Config::$dev_tools = false;*/
		
        if (file_exists(Router::$config_fn)) { //подключаем конфигурационный файл, если такое имеется
            Config::AddConfig(Router::$config_fn);
        }

        //подключаем файл с языком
        if (file_exists(Router::$lang_fn) && Router::$section['section']!="index") {
            Lang::initConf(Router::$lang_fn);
        }

        //index lang load default
        if (file_exists($_SERVER['DOCUMENT_ROOT']."/actions/index/lang/".Router::$lang.".php")) {
            Lang::initConf($_SERVER['DOCUMENT_ROOT']."/actions/index/lang/".Router::$lang.".php");
        }

        //подключаем права
        SuperAction::addRights ();
        //название запускаемого экшена или модуля
        $ClassName = $this->action ? "action".ucfirst(Router::$section['section']) : "module".ucfirst(Router::$section['section']);
        $App = new $ClassName(); //активируем один из активных модулей

        if (!Router::$found) //если нет завершенного события, запускаем nofFound
            Router::notFound ();

        Bd::$coon->close();
    }
    /*
     * Загрузить список всех файлов из директории
     */
    protected function IncludeAllPhpFiles($dir) {
        $dh  = opendir($dir);
        while ($filename = readdir($dh)) {
            $filename = $dir."/".$filename;

            if(stristr($filename, '.php') !== FALSE) {
                include_once($filename);
            }
        }
        closedir($dh);
    }
}

$Engine = new Engine();
