/**
* Update the specified attribute.
*
* @param string $name The name of the the
* attribute to be updated.
* @param array $attributes The data array that holds
* all attribute values.
* @param DOMNode $parent_node The parent node of the
* node that should be
* updated.
* @param Horde_Kolab_Format_Xml_Helper $helper A XML helper instance.
* @param array $params Additional parameters
* for this write operation.
*
* @return DOMNode|boolean The new/updated child node or false if this
* failed.
*
* @throws Horde_Kolab_Format_Exception If converting the data to XML failed.
*/
public function save($name, $attributes, $parent_node, Horde_Kolab_Format_Xml_Helper $helper, $params = array())
{
if (!($root = $helper->findNode('/' . $name, $parent_node))) {
$root = $helper->createNewNode($parent_node, $name);
$root->setAttribute('version', $params['expected-version']);
} else {
if (!$this->isRelaxed($params)) {
if (version_compare($params['expected-version'], $root->getAttribute('version')) < 0) {
throw new Horde_Kolab_Format_Exception_InvalidRoot(sprintf('Not attempting to overwrite higher root version of %s with our version %s!', $root->getAttribute('version'), $params['expected-version']));
}
}
if ($params['expected-version'] != $root->getAttribute('version')) {
$root->setAttribute('version', $params['expected-version']);
}
}
$this->_prepareCompositeParameters($params, $params['expected-version']);
parent::save($name, $attributes, $parent_node, $helper, $params);
return $root;
}