diff -r bd595ad770fc -r 1c2f13fd785c web/enmi/Zend/Tool/Project/Context/Zf/ApplicationConfigFile.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/enmi/Zend/Tool/Project/Context/Zf/ApplicationConfigFile.php Thu Jan 20 19:30:54 2011 +0100 @@ -0,0 +1,283 @@ +_type = $this->_resource->getAttribute('type'); + parent::init(); + return $this; + } + + /** + * getPersistentAttributes() + * + * @return array + */ + public function getPersistentAttributes() + { + return array('type' => $this->_type); + } + + /** + * getContents() + * + * @return string + */ + public function getContents() + { + if ($this->_content === null) { + if (file_exists($this->getPath())) { + $this->_content = file_get_contents($this->getPath()); + } else { + $this->_content = $this->_getDefaultContents(); + } + + } + + return $this->_content; + } + + public function getAsZendConfig($section = 'production') + { + return new Zend_Config_Ini($this->getPath(), $section); + } + + /** + * addStringItem() + * + * @param string $key + * @param string $value + * @param string $section + * @param bool $quoteValue + * @return Zend_Tool_Project_Context_Zf_ApplicationConfigFile + */ + public function addStringItem($key, $value, $section = 'production', $quoteValue = true) + { + // null quote value means to auto-detect + if ($quoteValue === null) { + $quoteValue = preg_match('#[\"\']#', $value) ? false : true; + } + + if ($quoteValue == true) { + $value = '"' . $value . '"'; + } + + $contentLines = preg_split('#[\n\r]#', $this->getContents()); + + $newLines = array(); + $insideSection = false; + + foreach ($contentLines as $contentLineIndex => $contentLine) { + + if ($insideSection === false && preg_match('#^\[' . $section . '#', $contentLine)) { + $insideSection = true; + } + + if ($insideSection) { + // if its blank, or a section heading + if ((trim($contentLine) == null) || (isset($contentLines[$contentLineIndex + 1]{0}) && $contentLines[$contentLineIndex + 1]{0} == '[')) { + $newLines[] = $key . ' = ' . $value; + $insideSection = null; + } + } + + $newLines[] = $contentLine; + } + + $this->_content = implode("\n", $newLines); + return $this; + } + + /** + * + * @param array $item + * @param string $section + * @param bool $quoteValue + * @return Zend_Tool_Project_Context_Zf_ApplicationConfigFile + */ + public function addItem($item, $section = 'production', $quoteValue = true) + { + $stringItems = array(); + $stringValues = array(); + $configKeyNames = array(); + + $rii = new RecursiveIteratorIterator( + new RecursiveArrayIterator($item), + RecursiveIteratorIterator::SELF_FIRST + ); + + $lastDepth = 0; + + // loop through array structure recursively to create proper keys + foreach ($rii as $name => $value) { + $lastDepth = $rii->getDepth(); + + if (is_array($value)) { + array_push($configKeyNames, $name); + } else { + $stringItems[] = implode('.', $configKeyNames) . '.' . $name; + $stringValues[] = $value; + } + } + + foreach ($stringItems as $stringItemIndex => $stringItem) { + $this->addStringItem($stringItem, $stringValues[$stringItemIndex], $section, $quoteValue); + } + + return $this; + } + + public function removeStringItem($key, $section = 'production') + { + $contentLines = file($this->getPath()); + + $newLines = array(); + $insideSection = false; + + foreach ($contentLines as $contentLineIndex => $contentLine) { + + if ($insideSection === false && preg_match('#^\[' . $section . '#', $contentLine)) { + $insideSection = true; + } + + if ($insideSection) { + // if its blank, or a section heading + if ((trim($contentLine) == null) || ($contentLines[$contentLineIndex + 1][0] == '[')) { + $insideSection = null; + } + } + + if (!preg_match('#' . $key . '\s?=.*#', $contentLine)) { + $newLines[] = $contentLine; + } + } + + $this->_content = implode('', $newLines); + } + + public function removeItem($item, $section = 'production') + { + $stringItems = array(); + $stringValues = array(); + $configKeyNames = array(); + + $rii = new RecursiveIteratorIterator( + new RecursiveArrayIterator($item), + RecursiveIteratorIterator::SELF_FIRST + ); + + $lastDepth = 0; + + // loop through array structure recursively to create proper keys + foreach ($rii as $name => $value) { + $lastDepth = $rii->getDepth(); + + if (is_array($value)) { + array_push($configKeyNames, $name); + } else { + $stringItems[] = implode('.', $configKeyNames) . '.' . $name; + $stringValues[] = $value; + } + } + + foreach ($stringItems as $stringItemIndex => $stringItem) { + $this->removeStringItem($stringItem, $section); + } + + return $this; + } + + protected function _getDefaultContents() + { + + $contents =<<