<?php
namespace Fury\Kernel;
/**
* Class: Bootstrap
* @author Eugene Sukhodolskiy <e.sikhodolskiy@outlook.com>
* Date: 05.01.2020
* Update At: 09.02.2020
* @version 0.1
*/
class Bootstrap{
/**
* Name of current project folder
*
* @var String
*/
public $project_folder;
/**
* DB class instance
*
* @var DB
*/
public $db;
/**
* CallControl instance
*
* @var CallControl
*/
protected $call_control;
/**
* Init class instance
*
* @var Init
*/
protected $init;
/**
* Constructor with params
*
* @method __construct
*
* @param String $project_folder Name of current project folder
*/
public function __construct(String $project_folder){
$this -> project_folder = $project_folder;
AppContainer::set_bootstrap($this);
$this -> init = new Init($this);
$this -> init -> init();
}
/**
* Initialization global application config
*
* @method init_config
*
* @return void
*/
public function init_config(){
// init project config
if(!file_exists("{$this -> project_folder}/config.php")){
die("Config file not found!");
}
define("FCONF", include_once("{$this -> project_folder}/config.php"));
}
/**
* Initialization global application constants
*
* @method init_consts
*
* @return void
*/
public function init_consts(){
define("APP_NAME", FCONF['app_name']);
define("PROJECT_FOLDER", $this -> project_folder);
}
/**
* Initialization of default DB connection, but only if exists connect parameters to database
*
* @method init_db
*
* @return void
*/
public function init_db(){
if(isset(FCONF['db']) and FCONF['default_db_wrap']){
$this -> db = new DB(FCONF['db']);
}
}
/**
* Initialization of application started files
*
* @method init_app_file
*
* @return void
*/
public function init_app_file(){
if(isset(FCONF['app_file'])){
$path_to_app_file = "{$this -> project_folder}/" . FCONF['app_file'];
if(file_exists($path_to_app_file)){
include_once($path_to_app_file);
}
}
}
/**
* Initialization of events system
*
* @method init_events
*
* @return void
*/
public function init_events(){
$events = new Events();
AppContainer::set_events($events);
}
/**
* Initialization of call controller
*
* @method init_call_control
*
* @return void
*/
public function init_call_control(){
$this -> call_control = CallControl::ins($this);
}
/**
* Initialization of logging system
*
* @method init_logging
*
* @return void
*/
public function init_logging(){
$logging = new Logging();
AppContainer::set_logging($logging);
}
/**
* Initialization of base model
*
* @method init_model
*
* @return void
*/
public function init_model(){
Model::ins($this -> db);
}
/**
* Adding call of event about application on ready
*
* @method ready_app_event
*
* @return void
*/
public function ready_app_event(){
events() -> kernel_call('Bootstrap.ready_app', ['bootstrap' => $this]);
}
/**
* Adding call of event about application started
*
* @method app_starting_event
*
* @return void
*/
public function app_starting_event(){
events() -> kernel_call('Bootstrap.app_starting', ['bootstrap' => $this]);
}
/**
* Adding call of event about application finished
*
* @method app_finished_event
*
* @return void
*/
public function app_finished_event(){
events() -> kernel_call('Bootstrap.app_finished', ['bootstrap' => $this]);
}
}