values[$name] = parse_shorthand_int($value); $this->save($name); } public function set_string(/*string*/ $name, $value) { $this->values[$name] = $value; $this->save($name); } public function set_bool(/*string*/ $name, $value) { $this->values[$name] = (($value == 'on' || $value === true) ? 'Y' : 'N'); $this->save($name); } public function set_array(/*string*/ $name, $value) { assert(is_array($value)); $this->values[$name] = implode(",", $value); $this->save($name); } public function set_default_int(/*string*/ $name, $value) { if(is_null($this->get($name))) { $this->values[$name] = parse_shorthand_int($value); } } public function set_default_string(/*string*/ $name, $value) { if(is_null($this->get($name))) { $this->values[$name] = $value; } } public function set_default_bool(/*string*/ $name, $value) { if(is_null($this->get($name))) { $this->values[$name] = (($value == 'on' || $value === true) ? 'Y' : 'N'); } } public function set_default_array(/*string*/ $name, $value) { assert(is_array($value)); if(is_null($this->get($name))) { $this->values[$name] = implode(",", $value); } } public function get_int(/*string*/ $name, $default=null) { return (int)($this->get($name, $default)); } public function get_string(/*string*/ $name, $default=null) { return $this->get($name, $default); } public function get_bool(/*string*/ $name, $default=null) { return bool_escape($this->get($name, $default)); } public function get_array(/*string*/ $name, $default=array()) { return explode(",", $this->get($name, "")); } private function get(/*string*/ $name, $default=null) { if(isset($this->values[$name])) { return $this->values[$name]; } else { return $default; } } } /** * Loads the config list from a PHP file; the file should be in the format: * * */ class StaticConfig extends BaseConfig { public function __construct($filename) { if(file_exists($filename)) { require_once $filename; if(isset($config)) { $this->values = $config; } else { throw new Exception("Config file '$filename' doesn't contain any config"); } } else { throw new Exception("Config file '$filename' missing"); } } public function save(/*string*/ $name=null) { // static config is static } } /** * Loads the config list from a table in a given database, the table should * be called config and have the schema: * * \code * CREATE TABLE config( * name VARCHAR(255) NOT NULL, * value TEXT * ); * \endcode */ class DatabaseConfig extends BaseConfig { var $database = null; /* * Load the config table from a database */ public function DatabaseConfig(Database $database) { $this->database = $database; $cached = $this->database->cache->get("config"); if($cached) { $this->values = $cached; } else { $this->values = array(); foreach($this->database->get_all("SELECT name, value FROM config") as $row) { $this->values[$row["name"]] = $row["value"]; } $this->database->cache->set("config", $this->values); } } /* * Save the current values as the new config table */ public function save(/*string*/ $name=null) { if(is_null($name)) { reset($this->values); // rewind the array to the first element foreach($this->values as $name => $value) { $this->save(/*string*/ $name); } } else { $this->database->Execute("DELETE FROM config WHERE name = :name", array("name"=>$name)); $this->database->Execute("INSERT INTO config VALUES (:name, :value)", array("name"=>$name, "value"=>$this->values[$name])); } $this->database->cache->delete("config"); } } ?>