Adds datatype support to the Config class
The config class now supports a type column in the database which specifies how the value should be interpreted. The class defines a number of scalar types, which are returned without transformation. A string list type is also defined, which splits the value into an array based on newlines. Also added phpdoc comments to all class constants, members and methods.
This commit is contained in:
@@ -1,23 +1,86 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
class RippingCluster_Config {
|
class RippingCluster_Config {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean value type
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
const TYPE_BOOL = 'bool';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer value type
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
const TYPE_INT = 'int';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Float value type
|
||||||
|
* @var float
|
||||||
|
*/
|
||||||
|
const TYPE_FLOAT = 'float';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String value type
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const TYPE_STRING = 'string';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String List value type; list of newline separated strings
|
||||||
|
* @var array(string)
|
||||||
|
*/
|
||||||
|
const TYPE_STRING_LIST = 'array(string)';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contents of the dbconfig file
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
private $dbconfig;
|
private $dbconfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database object created for the lifetime of this script
|
||||||
|
* @var RippingCluster_Database
|
||||||
|
*/
|
||||||
private $database;
|
private $database;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Associative array of connection parameters for the database configuration
|
||||||
|
* @var array(string=>string)
|
||||||
|
*/
|
||||||
private $databaseConfig = array();
|
private $databaseConfig = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Associative array of settings loaded from the database
|
||||||
|
* @var array(string=>array(string=>string))
|
||||||
|
*/
|
||||||
private $settings = array();
|
private $settings = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new instance of the Config class
|
||||||
|
*
|
||||||
|
* @param string $dbconfig Database configuration file contents
|
||||||
|
* @return RippingCluster_Config
|
||||||
|
*/
|
||||||
public function __construct($dbconfig) {
|
public function __construct($dbconfig) {
|
||||||
$this->dbconfig = $dbconfig;
|
$this->dbconfig = $dbconfig;
|
||||||
|
|
||||||
$this->parseDatabaseConfig();
|
$this->parseDatabaseConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the contents of the database configuration file so that individual settings can be retrieved.
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function parseDatabaseConfig() {
|
public function parseDatabaseConfig() {
|
||||||
$this->databaseConfig = parse_ini_file($this->dbconfig);
|
$this->databaseConfig = parse_ini_file($this->dbconfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of the named item from the database configuration file
|
||||||
|
*
|
||||||
|
* @param string $key Name of the setting to retrieve
|
||||||
|
*/
|
||||||
public function getDatabase($key) {
|
public function getDatabase($key) {
|
||||||
if (!isset($this->databaseConfig[$key])) {
|
if (!isset($this->databaseConfig[$key])) {
|
||||||
throw new RippingCluster_Exception_DatabaseConfigMissing($key);
|
throw new RippingCluster_Exception_DatabaseConfigMissing($key);
|
||||||
@@ -26,29 +89,55 @@ class RippingCluster_Config {
|
|||||||
return $this->databaseConfig[$key];
|
return $this->databaseConfig[$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the database instance used by this object
|
||||||
|
*
|
||||||
|
* @param RippingCluster_Database $database Database instance
|
||||||
|
*/
|
||||||
public function setDatabase(RippingCluster_Database $database) {
|
public function setDatabase(RippingCluster_Database $database) {
|
||||||
$this->database = $database;
|
$this->database = $database;
|
||||||
$this->preload();
|
$this->preload();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function preload() {
|
/**
|
||||||
|
* Loads the entire list of settings from the database
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function preload() {
|
||||||
if (!$this->database) {
|
if (!$this->database) {
|
||||||
throw new RippingCluster_Exception_NoDatabaseConnection();
|
throw new RippingCluster_Exception_NoDatabaseConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->settings = $this->database->selectAssoc('SELECT name,value FROM settings', 'name', 'value');
|
$this->settings = $this->database->selectAssoc('SELECT name,type,value FROM settings', 'name', array('name', 'value', 'type'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifies whether the named setting exists
|
||||||
|
*
|
||||||
|
* @param string $key Name of the setting
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
public function exists($key) {
|
public function exists($key) {
|
||||||
return isset($this->settings[$key]);
|
return isset($this->settings[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the value of the named setting
|
||||||
|
*
|
||||||
|
* @param string $key Name of the setting
|
||||||
|
*/
|
||||||
public function get($key) {
|
public function get($key) {
|
||||||
if (!isset($this->settings[$key])) {
|
if (!isset($this->settings[$key])) {
|
||||||
throw new RippingCluster_Exception_UnknownSetting($key);
|
throw new RippingCluster_Exception_UnknownSetting($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->settings[$key];
|
switch ($this->settings[$key]['type']) {
|
||||||
|
case TYPE_STRING_LIST:
|
||||||
|
return explode("\n", $this->settings[$key]['value']);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return $this->settings[$key]['value'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user