This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/_sakura/components/Configuration.php
flashwave 26572dbd71 r20150913 and r20150915
Signed-off-by: Flashwave <me@flash.moe>
2015-09-14 22:51:23 +02:00

118 lines
3.4 KiB
PHP

<?php
/*
* Configuration Management
*/
namespace Sakura;
class Configuration
{
// Configuration data
private static $local = [];
private static $database = [];
// Initialise configuration, does not contain database initialisation because explained below
public static function init($local)
{
// Check if the configuration file exists
if (!file_exists($local)) {
trigger_error('Local configuration file does not exist', E_USER_ERROR);
}
// Attempt to load the configuration file
$local = parse_ini_file($local, true);
// Check if $local is an array and then store it in $local
if (is_array($local)) {
self::$local = $local;
} else {
// Otherwise trigger an error
trigger_error('Failed to load local configuration file, check the structure of the file to see if you made mistake somewhere', E_USER_ERROR);
}
}
/*
* Initialise Database configuration values.
* Different from init as that is called before the database connection is initially
* established.
*/
public static function initDB()
{
// Get config table from the database
$_DATA = Database::fetch('config', true);
// Create variable to temporarily store values in
$_DBCN = array();
// Properly sort the values
foreach ($_DATA as $_CONF) {
$_DBCN[$_CONF['config_name']] = $_CONF['config_value'];
}
// Assign the temporary array to the static one
self::$database = $_DBCN;
}
// Get values from the configuration on the file system
public static function getLocalConfig($key, $subkey = null)
{
// Check if the key that we're looking for exists
if (array_key_exists($key, self::$local)) {
if ($subkey) {
// If we also have a subkey return the proper data
return self::$local[$key][$subkey];
}
// else we just return the default value
return self::$local[$key];
}
// If it doesn't exist trigger an error to avoid explosions
trigger_error('Unable to get local configuration value "' . $key . '"', E_USER_ERROR);
}
// Dynamically set local configuration values, does not update the configuration file
public static function setLocalConfig($key, $subkey, $value)
{
// Check if we also do a subkey
if ($subkey) {
// If we do we make sure that the parent key is an array
if (!isset(self::$local[$key])) {
self::$local[$key] = array();
}
// And then assign the value
self::$local[$key][$subkey] = $value;
}
// Otherwise we just straight up assign it
self::$local[$key] = $value;
}
// Get values from the configuration in the database
public static function getConfig($key, $returnNull = false)
{
// Check if the key that we're looking for exists
if (array_key_exists($key, self::$database)) {
// Then return the value
return self::$database[$key];
} elseif ($returnNull) {
// Avoid the error trigger if requested
return null;
}
// Then return the value
trigger_error('Unable to get configuration value "' . $key . '"', E_USER_ERROR);
}
}