Benjamin Renard
f2edf4910a
App initialization is now handle by App::init() method and all configuration information is now retreive using Config::get() method.
103 lines
3.4 KiB
PHP
103 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace EesyPHP;
|
|
|
|
class App {
|
|
|
|
/**
|
|
* Options
|
|
* @var array
|
|
*/
|
|
protected static $options = array();
|
|
|
|
/**
|
|
* Root directory path
|
|
* @var string|null
|
|
*/
|
|
protected static $root_directory_path = null;
|
|
|
|
/**
|
|
* Initialization
|
|
* @param string|null $config_file Application configuration file path
|
|
* @param array|null $options Application options (default: null)
|
|
* @param string|null $root_directory_path Application root directory path (default: null)
|
|
* @return void
|
|
*/
|
|
public static function init($config_file, $options=null, $root_directory_path=null) {
|
|
if (is_array($options)) self :: $options = $options;
|
|
|
|
if (is_null($root_directory_path)) {
|
|
$traces = debug_backtrace();
|
|
$root_directory_path = realpath(dirname($traces[0]['file']).'/../');
|
|
}
|
|
self :: $root_directory_path = $root_directory_path;
|
|
Config::register_extra_variable('root_directory_path', $root_directory_path);
|
|
|
|
$config_file = Config::replace_variables($config_file);
|
|
if (!Config::load($config_file)) {
|
|
Log::fatal('Fail to load configuration file (%s)', $config_file);
|
|
exit(1);
|
|
}
|
|
|
|
// Load overwrite configuration file
|
|
foreach (self :: get_option('overwrite_config_files', array(), 'array') as $file) {
|
|
$file = Config::replace_variables($file);
|
|
if (is_file($file)) Config::load($file, true);
|
|
}
|
|
|
|
if (self :: get_option('sentry.enabled', true, 'bool'))
|
|
SentryIntegration :: init();
|
|
$sentry_transaction = new SentryTransaction();
|
|
$sentry_span = new SentrySpan('app.init', 'Application initialization');
|
|
|
|
// Define upload_tmp_dir
|
|
if (is_string(Config::get('upload_tmp_directory')))
|
|
ini_set('upload_tmp_dir', Config::get('upload_tmp_directory'));
|
|
|
|
if (self :: get_option('log.enabled', true, 'bool'))
|
|
Log::init();
|
|
if (self :: get_option('session.enabled', true, 'bool'))
|
|
Session::init();
|
|
if (self :: get_option('template.enabled', true, 'bool'))
|
|
Tpl :: init();
|
|
if (self :: get_option('url.enabled', true, 'bool'))
|
|
Url::init();
|
|
if (self :: get_option('mail.enabled', true, 'bool'))
|
|
Email :: init();
|
|
if (self :: get_option('i18n.enabled', true, 'bool'))
|
|
I18n::init();
|
|
$sentry_span->finish();
|
|
}
|
|
|
|
/**
|
|
* Get a specific option value
|
|
*
|
|
* @param string $key The configuration variable key
|
|
* @param mixed $default The default value to return if configuration variable
|
|
* is not set (Default : null)
|
|
* @param string $cast The type of expected value. The configuration variable
|
|
* value will be cast as this type. Could be : bool, int,
|
|
* float or string. (Optional, default : raw value)
|
|
* @param bool $split If true, $cast is 'array' and value retreived from configuration
|
|
* is a string, split the value by comma (optional, default: true)
|
|
* @return mixed The configuration variable value
|
|
**/
|
|
public static function get_option($key, $default=null, $cast=null, $split=true) {
|
|
return Config::get(
|
|
$key,
|
|
Config::loaded()?Config::get($key, $default, $cast, $split):$default,
|
|
$cast,
|
|
$split,
|
|
self :: $options
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retreive application root directory path
|
|
* @return string|null
|
|
*/
|
|
public static function root_directory_path() {
|
|
return self :: $root_directory_path?self :: $root_directory_path:'.';
|
|
}
|
|
|
|
}
|