Файл: system/core/config.php
Строк: 142
<?php
/**
* Класс для работы с конфигурациями
*/
class cmsConfig {
/**
* Путь директории с конфигурациями
* можно изменить на хранение вне корня сайта,
* изменив путь, используя две точки (..) для
* указания на родительские каталоги
*/
const CONFIG_DIR = '/system/config/';
private static $instance = null;
private static $mapping = null;
private $ready = false;
private $data = array();
private $dynamic = array();
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
public static function get($key){
return self::getInstance()->$key;
}
public static function getControllersMapping(){
if (self::$mapping !== null) { return self::$mapping; }
self::$mapping = array();
$map_file = 'system/config/remap.php';
$map_function = 'remap_controllers';
if (!cmsCore::includeFile($map_file)) { return self::$mapping; }
if (!function_exists($map_function)){ return self::$mapping; }
self::$mapping = call_user_func($map_function);
if (!is_array(self::$mapping)){ return array(); }
return self::$mapping;
}
//============================================================================//
//============================================================================//
public function __construct($cfg_file = 'config.php'){
if($this->setData($cfg_file)){
$this->ready = true;
}
}
//============================================================================//
//============================================================================//
public function isReady(){
return $this->ready;
}
public function set($key, $value){
if(!isset($this->data[$key])){
$this->dynamic[] = $key;
}
$this->data[$key] = $value;
return $this;
}
public function getAll(){
return $this->data;
}
public function __get($name) {
if (!isset($this->data[$name])){ return false; }
return $this->data[$name];
}
public function __isset($name) {
return isset($this->data[$name]);
}
//============================================================================//
//============================================================================//
public function setData($cfg_file = 'config.php') {
$this->data = $this->load($cfg_file);
if(!$this->data){ return false; }
// таймзона может быть изменена в процессе работы
$this->set('cfg_time_zone', $this->data['time_zone']);
if(empty($this->data['detect_ip_key']) || !isset($_SERVER[$this->data['detect_ip_key']])){
$this->data['detect_ip_key'] = 'REMOTE_ADDR';
}
if(empty($this->data['session_save_path'])){
$this->data['session_save_path'] = session_save_path();
if(empty($this->data['session_save_path'])){
$this->data['session_save_path'] = rtrim(sys_get_temp_dir(), '/');
}
if(!is_writable($this->data['session_save_path'])){
$this->data['session_save_path'] = '';
}
}
// Переходное для 2.14.0
if(!array_key_exists('allow_users_time_zone', $this->data)){
$this->data['allow_users_time_zone'] = 1;
}
if(empty($this->data['native_yaml']) || !function_exists('yaml_emit')){
$this->data['native_yaml'] = 0;
}
$this->upload_host_abs = $this->upload_host;
if (mb_strpos($this->upload_host, $this->host) === 0){
$url_parts = parse_url(trim($this->host, '/'));
$host = empty($url_parts['path']) ? $this->host : $url_parts['scheme'] . '://' . $url_parts['host'];
$this->upload_host = str_replace($host, '', $this->upload_host); $replace_upload_host_protocol = true;
}
$this->set('document_root', rtrim(PATH, $this->root));
$this->set('root_path', PATH . DIRECTORY_SEPARATOR);
$this->set('system_path', $this->root_path . 'system/');
$this->set('upload_path', $this->document_root . $this->upload_root);
$this->set('cache_path', $this->document_root . $this->cache_root);
$protocol = 'http://';
if(
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
(!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) ||
(!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
){
$protocol = 'https://';
$this->host = str_replace('http://', $protocol, $this->host);
if(!empty($replace_upload_host_protocol)){
$this->upload_host_abs = str_replace('http://', $protocol, $this->upload_host_abs);
}
}
$this->set('protocol', $protocol);
if(!empty($_SERVER['HTTP_HOST'])){
$this->set('current_domain', $_SERVER['HTTP_HOST']);
}
return true;
}
public static function isSecureProtocol() {
return self::get('protocol') === 'https://';
}
//============================================================================//
//============================================================================//
public function load($cfg_file = 'config.php'){
$cfg_file = PATH . self::CONFIG_DIR . $cfg_file;
if(!is_readable($cfg_file)){
return false;
}
return include $cfg_file;
}
public function save($values, $cfg_file = 'config.php'){
$dump = "<?phpn" .
"return array(nn";
foreach($values as $key=>$value){
if (in_array($key, $this->dynamic)){ continue; }
$value = var_export($value, true);
$tabs = 10 - ceil((mb_strlen($key)+3)/4);
$dump .= "t'{$key}'";
$dump .= str_repeat("t", $tabs > 0 ? $tabs : 0);
$dump .= "=> $value,n";
}
$dump .= "n);n";
$file = PATH . self::CONFIG_DIR . $cfg_file;
$success = false;
if(is_writable($file)){
if (function_exists('opcache_reset')) { opcache_reset(); }
$success = file_put_contents($file, $dump);
}
return $success;
}
public function update($key, $value, $cfg_file = 'config.php'){
$data = $this->load($cfg_file);
$data[$key] = $value;
return $this->save($data, $cfg_file);
}
}