string) */ private $databaseConfig = array(); /** * Associative array of settings loaded from the database * @var array(string=>array(string=>string)) */ 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) { $this->dbconfig = $dbconfig; $this->parseDatabaseConfig(); } /** * Parses the contents of the database configuration file so that individual settings can be retrieved. * */ public function parseDatabaseConfig() { $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) { if (!isset($this->databaseConfig[$key])) { throw new RippingCluster_Exception_DatabaseConfigMissing($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) { $this->database = $database; $this->preload(); } /** * Loads the entire list of settings from the database * */ private function preload() { if (!$this->database) { throw new RippingCluster_Exception_NoDatabaseConnection(); } $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) { return isset($this->settings[$key]); } /** * Fetches the value of the named setting * * @param string $key Name of the setting */ public function get($key) { if (!isset($this->settings[$key])) { throw new RippingCluster_Exception_UnknownSetting($key); } switch ($this->settings[$key]['type']) { case self::TYPE_STRING_LIST: return array_map('trim', explode("\n", $this->settings[$key]['value'])); default: return $this->settings[$key]['value']; } } }; ?>