From 9dafee4fd691e789cfa99193b4c7942abdbb96b7 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel
Date: Mon, 6 Apr 2009 11:42:47 +0200 Subject: [PATCH] Ensure we do not offer a derived value if the base to derive from is missing. Added abstract save() function. --- framework/Kolab_Server/lib/Horde/Kolab/Server.php | 36 +++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server.php b/framework/Kolab_Server/lib/Horde/Kolab/Server.php index f894b8291..ebe9e0248 100644 --- a/framework/Kolab_Server/lib/Horde/Kolab/Server.php +++ b/framework/Kolab_Server/lib/Horde/Kolab/Server.php @@ -448,8 +448,29 @@ abstract class Horde_Kolab_Server } $attrs[Horde_Kolab_Server_Object::ATTRIBUTE_OC]['default'] = $object_classes; - $attrs = array_merge($attrs, $derived); - + foreach ($derived as $key => $attribute) { + if (isset($attribute['base'])) { + if (!is_array($attribute['base'])) { + $bases = array($attribute['base']); + } else { + $bases = $attribute['base']; + } + /** + * Usually derived attribute are determined on basis + * of one or more attributes. If any of these is not + * supported the derived attribute should not be + * included into the set of supported attributes. + */ + foreach ($bases as $base) { + if (!isset($attrs[$base])) { + continue; + } + $attrs[$key] = $attribute; + } + } else { + $attrs[$key] = $attribute; + } + } } $this->attributes[$class] = array($attrs, array( @@ -543,6 +564,17 @@ abstract class Horde_Kolab_Server abstract public function read($uid, $attrs = null); /** + * Save an object. + * + * @param string $uid The UID of the object to be added. + * @param array $data The attributes of the object to be added. + * @param boolean $exists Does the object already exist on the server? + * + * @return boolean True if saving succeeded. + */ + abstract public function save($uid, $data, $exists = false); + + /** * Determine the type of a Kolab object. * * @param string $uid The UID of the object to examine. -- 2.11.0