diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Tool/Framework/Client/Config.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Tool/Framework/Client/Config.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,244 @@ +setOptions($options); + } + } + + /** + * @param array $options + */ + public function setOptions(Array $options) + { + foreach ($options as $optionName => $optionValue) { + $setMethodName = 'set' . $optionName; + if (method_exists($this, $setMethodName)) { + $this->{$setMethodName}($optionValue); + } + } + } + + /** + * @param string $configFilepath + * @return Zend_Tool_Framework_Client_Config + */ + public function setConfigFilepath($configFilepath) + { + if (!file_exists($configFilepath)) { + require_once 'Zend/Tool/Framework/Client/Exception.php'; + throw new Zend_Tool_Framework_Client_Exception('Provided path to config ' . $configFilepath . ' does not exist'); + } + + $this->_configFilepath = $configFilepath; + $this->loadConfig($configFilepath); + + return $this; + } + + /** + * Load the configuration from the given path. + * + * @param string $configFilepath + */ + protected function loadConfig($configFilepath) + { + $suffix = substr($configFilepath, -4); + + switch ($suffix) { + case '.ini': + require_once 'Zend/Config/Ini.php'; + $this->_config = new Zend_Config_Ini($configFilepath, null, array('allowModifications' => true)); + break; + case '.xml': + require_once 'Zend/Config/Xml.php'; + $this->_config = new Zend_Config_Xml($configFilepath, null, array('allowModifications' => true)); + break; + case '.php': + require_once 'Zend/Config.php'; + $this->_config = new Zend_Config(include $configFilepath, true); + break; + default: + require_once 'Zend/Tool/Framework/Client/Exception.php'; + throw new Zend_Tool_Framework_Client_Exception('Unknown config file type ' + . $suffix . ' at location ' . $configFilepath + ); + } + } + + /** + * Return the filepath of the configuration. + * + * @return string + */ + public function getConfigFilepath() + { + return $this->_configFilepath; + } + + /** + * Get a configuration value. + * + * @param string $name + * @param string $defaultValue + * @return mixed + */ + public function get($name, $defaultValue=null) + { + return $this->getConfigInstance()->get($name, $defaultValue); + } + + /** + * Get a configuration value + * + * @param string $name + * @return mixed + */ + public function __get($name) + { + return $this->getConfigInstance()->{$name}; + } + + /** + * Check if a configuration value isset. + * + * @param string $name + * @return boolean + */ + public function __isset($name) + { + if($this->exists() == false) { + return false; + } + return isset($this->getConfigInstance()->{$name}); + } + + /** + * @param string $name + */ + public function __unset($name) + { + unset($this->getConfigInstance()->$name); + } + + /** + * @param string $name + * @param mixed $value + */ + public function __set($name, $value) + { + return $this->getConfigInstance()->$name = $value; + } + + /** + * Check if the User profile has a configuration. + * + * @return bool + */ + public function exists() + { + return ($this->_config!==null); + } + + /** + * @throws Zend_Tool_Framework_Client_Exception + * @return Zend_Config + */ + public function getConfigInstance() + { + if(!$this->exists()) { + require_once "Zend/Tool/Framework/Client/Exception.php"; + throw new Zend_Tool_Framework_Client_Exception("Client has no persistent configuration."); + } + + return $this->_config; + } + + /** + * Save changes to the configuration into persistence. + * + * @return bool + */ + public function save() + { + if($this->exists()) { + $writer = $this->getConfigWriter(); + $writer->write($this->getConfigFilepath(), $this->getConfigInstance(), true); + $this->loadConfig($this->getConfigFilepath()); + + return true; + } + return false; + } + + /** + * Get the config writer that corresponds to the current config file type. + * + * @return Zend_Config_Writer_FileAbstract + */ + protected function getConfigWriter() + { + $suffix = substr($this->getConfigFilepath(), -4); + switch($suffix) { + case '.ini': + require_once "Zend/Config/Writer/Ini.php"; + $writer = new Zend_Config_Writer_Ini(); + $writer->setRenderWithoutSections(); + break; + case '.xml': + require_once "Zend/Config/Writer/Xml.php"; + $writer = new Zend_Config_Writer_Xml(); + break; + case '.php': + require_once "Zend/Config/Writer/Array.php"; + $writer = new Zend_Config_Writer_Array(); + break; + default: + require_once 'Zend/Tool/Framework/Client/Exception.php'; + throw new Zend_Tool_Framework_Client_Exception('Unknown config file type ' + . $suffix . ' at location ' . $this->getConfigFilepath() + ); + } + return $writer; + } +} \ No newline at end of file