diff options
Diffstat (limited to 'libs/Utils/Config.php')
| -rw-r--r-- | libs/Utils/Config.php | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/libs/Utils/Config.php b/libs/Utils/Config.php new file mode 100644 index 0000000..212a227 --- /dev/null +++ b/libs/Utils/Config.php @@ -0,0 +1,138 @@ +<?php + +class Config +{ + public $file = null; + public $config = null; + + public function __construct() + { + $this->_checkPHPVersion(5.3); + + $this->file = __DIR__.'/../../conf/esm.config.json'; + + if (!file_exists($this->file)) + throw new \Exception('Config file '.basename($this->file).' not found'); + + $this->_readFile(); + } + + private function _readFile() + { + $content = file_get_contents($this->file); + $this->config = json_decode(utf8_encode($content), true); + + if ($this->config == null && json_last_error() != JSON_ERROR_NONE) + { + throw new \LogicException(sprintf("Failed to parse config file '%s'. Error: '%s'", basename($this->file) , json_last_error_msg())); + } + } + + + /** + * Returns a specific config variable + * Ex : get('ping:hosts') + */ + public function get($var) + { + $tab = $this->config; + + $explode = explode(':', $var); + + foreach ($explode as $vartmp) + { + if (isset($tab[$vartmp])) + { + $tab = $tab[$vartmp]; + } + } + + // return $tab == $this->config ? null : $tab; + return $tab; + } + + + /** + * Returns all config variables + */ + public function getAll() + { + return $this->config; + } + + + /** + * Checks the PHP version compared to the required version + */ + private function _checkPHPVersion($min) + { + if (!version_compare(phpversion(), $min, '>=')) + throw new \Exception('Your PHP version is too old ! PHP '.$min.' is required.'); + + return true; + } + + + /** + * Checks if there is an eSM`Web update available + */ + public function checkUpdate() + { + if ($this->get('esm:check_updates') === false) + return null; + + $response = null; + $this_version = $this->get('esm:version'); + $update_url = $this->get('esm:website').'/esm-web/update/'.$this_version; + + if (!function_exists('curl_version')) + { + $tmp = @file_get_contents($update_url); + $response = json_decode($tmp, true); + } + else + { + $curl = curl_init(); + + curl_setopt_array($curl, array( + CURLOPT_CONNECTTIMEOUT => 10, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_TIMEOUT => 60, + CURLOPT_USERAGENT => 'eZ Server Monitor `Web', + CURLOPT_URL => $update_url, + )); + + $response = json_decode(curl_exec($curl), true); + + curl_close($curl); + } + + if (!is_null($response) && !empty($response)) + { + if (is_null($response['error'])) + { + return $response['datas']; + } + } + } +} + + +// PHP 5.5.0 +if (!function_exists('json_last_error_msg')) +{ + function json_last_error_msg() + { + static $errors = array( + JSON_ERROR_NONE => null, + JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', + JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', + JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', + JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON', + JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded' + ); + $error = json_last_error(); + return array_key_exists($error, $errors) ? $errors[$error] : "Unknown error ({$error})"; + } +}
\ No newline at end of file |
