_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; } $newLines[] = $contentLine; if ($insideSection) { // if its blank, or a section heading if (isset($contentLines[$contentLineIndex + 1]{0}) && $contentLines[$contentLineIndex + 1]{0} == '[') { $newLines[] = $key . ' = ' . $value; $insideSection = null; } else if (!isset($contentLines[$contentLineIndex + 1])){ $newLines[] = $key . ' = ' . $value; $insideSection = null; } } } $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 =<<