diff -r 000000000000 -r 4eba9c11703f web/Zend/Tool/Framework/System/Provider/Config.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/Zend/Tool/Framework/System/Provider/Config.php Mon Dec 13 18:29:26 2010 +0100 @@ -0,0 +1,323 @@ +_registry->getConfig(); + + $resp = $this->_registry->getResponse(); + if ($userConfig->exists()) { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception( + "A configuration already exists, cannot create a new one."); + } + + $homeDirectory = $this->_detectHomeDirectory(); + + $writer = new Zend_Config_Writer_Ini(); + $writer->setRenderWithoutSections(); + $filename = $homeDirectory."/.zf.ini"; + + $config = array( + 'php' => array( + 'include_path' => get_include_path(), + ), + ); + $writer->write($filename, new Zend_Config($config)); + + $resp = $this->_registry->getResponse(); + $resp->appendContent("Successfully written Zend Tool config."); + $resp->appendContent("It is located at: ".$filename); + } + + /** + * @return string + */ + protected function _detectHomeDirectory() + { + $envVars = array("ZF_HOME", "HOME", "HOMEPATH"); + foreach($envVars AS $env) { + $homeDirectory = getenv($env); + if ($homeDirectory != false && file_exists($homeDirectory)) { + return $homeDirectory; + } + } + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception("Cannot detect user home directory, set ZF_HOME enviroment variable."); + } + + /** + * Show Zend Tool User Configuration + * + * @return void + */ + public function show() + { + $userConfig = $this->_loadUserConfigIfExists(); + $configArray = $userConfig->getConfigInstance()->toArray(); + + $resp = $this->_registry->getResponse(); + + $i = 0; + $tree = ""; + foreach($configArray AS $k => $v) { + $i++; + $tree .= $this->_printTree($k, $v, 1, count($configArray)==$i); + } + $resp->appendContent("User Configuration: ".$userConfig->getConfigFilepath(), array("color" => "green")); + $resp->appendContent($tree, array("indention" => 2)); + } + + /** + * + * @param string $key + * @param string $value + * @param int $level + * @return string + */ + protected function _printTree($key, $value, $level=1, $isLast=false) + { + $this->_levelCompleted[$level] = false; + + $prefix = ""; + for ($i = 1; $i < $level; $i++) { + if ($this->_levelCompleted[$i] == true) { + $prefix .= " "; + } else { + $prefix .= "| "; + } + } + if ($isLast) { + $pointer = "`-- "; + } else { + $pointer = "|-- "; + } + + $tree = ""; + if (is_array($value)) { + $tree .= $prefix.$pointer.$key.PHP_EOL; + + if ($isLast == true) { + $this->_levelCompleted[$level] = true; + } + + $i = 0; + foreach ($value as $k => $v) { + $i++; + $tree .= $this->_printTree($k, $v, $level+1, (count($value)==$i)); + } + } else { + $tree .= $prefix.$pointer.$key.": ".trim($value).PHP_EOL; + } + + return $tree; + } + + public function enable() + { + $resp = $this->_registry->getResponse(); + $resp->appendContent('Use either "zf enable config.provider" or "zf enable config.manifest".'); + } + + public function disable() + { + $resp = $this->_registry->getResponse(); + $resp->appendContent('Use either "zf disable config.provider" or "zf disable config.manifest".'); + } + + /** + * @param string $className + */ + public function enableProvider($className) + { + Zend_Loader::loadClass($className); + $reflClass = new ReflectionClass($className); + if (!in_array("Zend_Tool_Framework_Provider_Interface", $reflClass->getInterfaceNames())) { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception("Given class is not a provider"); + } + $this->_doEnable($className); + } + + protected function _doEnable($className) + { + + $userConfig = $this->_loadUserConfigIfExists(); + + if (!isset($userConfig->basicloader)) { + $userConfig->basicloader = array(); + } + if (!isset($userConfig->basicloader->classes)) { + $userConfig->basicloader->classes = array(); + } + + $providerClasses = $userConfig->basicloader->classes->toArray(); + if (!in_array($className, $providerClasses)) { + if (count($providerClasses)) { + $pos = max(array_keys($providerClasses))+1; + } else { + $pos = 0; + } + $userConfig->basicloader->classes->$pos = $className; + + if ($userConfig->save()) { + $this->_registry->getResponse()->appendContent( + "Provider/Manifest '".$className."' was enabled for usage with Zend Tool.", + array("color" => "green", "aligncenter" => true) + ); + } else { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception( + "Could not write user configuration to persistence." + ); + } + } else { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception( + "Provider/Manifest '".$className."' is already enabled." + ); + } + } + + /** + * @param string $className + */ + public function enableManifest($className) + { + Zend_Loader::loadClass($className); + $reflClass = new ReflectionClass($className); + if (!in_array("Zend_Tool_Framework_Manifest_Interface", $reflClass->getInterfaceNames())) { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception("Given class is not a manifest."); + } + $this->_doEnable($className); + } + + /** + * @param string $className + */ + public function disableManifest($className) + { + $this->disableProvider($className); + } + + /** + * @param string $className + */ + public function disableProvider($className) + { + $userConfig = $this->_loadUserConfigIfExists(); + + if (!isset($userConfig->basicloader)) { + $userConfig->basicloader = array(); + } + if (!isset($userConfig->basicloader->classes)) { + $userConfig->basicloader->classes = array(); + } + + $providerClasses = $userConfig->basicloader->classes->toArray(); + if (($key = array_search($className, $providerClasses)) !== false) { + unset($userConfig->basicloader->classes->$key); + + if ($userConfig->save()) { + $this->_registry->getResponse()->appendContent( + "Provider/Manifest '".$className."' was disabled.", + array("color" => "green", "aligncenter" => true) + ); + } else { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception( + "Could not write user configuration to persistence." + ); + } + } else { + require_once "Zend/Tool/Framework/Exception.php"; + throw new Zend_Tool_Framework_Exception( + "Provider/Manifest '".$className."' is not enabled." + ); + } + } + + /** + * @return Zend_Tool_Framework_Client_Config + */ + protected function _loadUserConfigIfExists() + { + /* @var $userConfig Zend_Tool_Framework_Client_Config */ + $userConfig = $this->_registry->getConfig(); + + $resp = $this->_registry->getResponse(); + if (!$userConfig->exists()) { + $resp->appendContent("User has no config file.", array("aligncenter" => true, "color" => array('hiWhite', 'bgRed'))); + } + + return $userConfig; + } +} \ No newline at end of file