/** * List all objects of a specific type. * * @param string $type The type of the objects to be listed * @param array $params Additional parameters. * * @return array An array of Kolab objects. * * @throws Horde_Kolab_Server_Exception * * @todo Sorting */ public function listObjects($type, $params = null) { $result = Horde_Kolab_Server_Object::loadClass($type); $vars = get_class_vars($type); $criteria = call_user_func(array($type, 'getFilter')); $filter = $this->searchQuery($criteria); $sort = $vars['sort_by']; if (isset($params['sort'])) { $sort = $params['sort']; } $options = array('scope' => 'sub'); if (isset($params['attributes'])) { $options['attributes'] = $params['attributes']; } else { $options['attributes'] = $this->getAttributes($type); } $data = $this->search($filter, $options, $base); if (empty($data)) { return array(); } if ($sort) { /* @todo: sorting */ /* $data = $result->as_sorted_struct(); */ /*$this->sort($result, $sort); */ } if (isset($params['from'])) { $from = $params['from']; } else { $from = -1; } if (isset($params['to'])) { $sort = $params['to']; } else { $to = -1; } if (!empty($vars['required_group'])) { $required_group = new Horde_Kolab_Server_Object_Kolabgroupofnames($this, null, $vars['required_group']); } $objects = array(); foreach ($data as $uid => $entry) { if (!empty($vars['required_group'])) { if (!$required_group->exists() || !$required_group->isMember($uid)) { continue; } } $objects[$uid] =& Horde_Kolab_Server_Object::factory($type, $uid, $this, $entry); } return $objects; }
/** * Saves object information. * * @param array $info The information about the object. * * @return boolean|PEAR_Error True on success. */ public function save(array $info) { $admin_group = new Horde_Kolab_Server_Object_Kolabgroupofnames($this->server, null, $this->required_group); $save_result = parent::save($info); if (!$admin_group->exists()) { $data = array_merge($this->required_group, array(Horde_Kolab_Server_Object_Kolabgroupofnames::ATTRIBUTE_MEMBER => array($this->uid))); } else { $result = $admin_group->isMember($this->uid); if ($result === false) { $members = $admin_group->getMembers(); $members[] = $this->uid; $data = array(Horde_Kolab_Server_Object_Kolabgroupofnames::ATTRIBUTE_MEMBER => $members); } else { $data = null; } } if (!empty($data)) { return $admin_group->save($data); } return $save_result; }