1: <?php
2: /**
3: * Representation of a group.
4: *
5: * PHP version 5
6: *
7: * @category Kolab
8: * @package Kolab_Server
9: * @author Gunnar Wrobel <wrobel@pardus.de>
10: * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
11: * @link http://pear.horde.org/index.php?package=Kolab_Server
12: */
13:
14: /**
15: * This class provides methods to deal with groups.
16: *
17: * Copyright 2008-2012 Horde LLC (http://www.horde.org/)
18: *
19: * See the enclosed file COPYING for license information (LGPL). If you
20: * did not receive this file, see http://www.horde.org/licenses/lgpl21.
21: *
22: * @category Kolab
23: * @package Kolab_Server
24: * @author Gunnar Wrobel <wrobel@pardus.de>
25: * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
26: * @link http://pear.horde.org/index.php?package=Kolab_Server
27: */
28: class Horde_Kolab_Server_Object_Groupofnames extends Horde_Kolab_Server_Object_Top
29: {
30: /** The specific object class of this object type */
31: const OBJECTCLASS_GROUPOFNAMES = 'groupOfNames';
32:
33: /** Define attributes specific to this object type */
34:
35: /** The common name */
36: const ATTRIBUTE_CN = 'cn';
37:
38: /** The members of this group */
39: const ATTRIBUTE_MEMBER = 'member';
40:
41: /**
42: * A structure to initialize the attribute structure for this class.
43: *
44: * @var array
45: */
46: static public $init_attributes = array(
47: 'required' => array(
48: self::ATTRIBUTE_CN,
49: self::ATTRIBUTE_MEMBER,
50: ),
51: 'defined' => array(
52: self::ATTRIBUTE_CN,
53: self::ATTRIBUTE_MEMBER,
54: ),
55: 'object_classes' => array(
56: self::OBJECTCLASS_GROUPOFNAMES,
57: ),
58: );
59:
60: /**
61: * Return the filter string to retrieve this object type.
62: *
63: * @static
64: *
65: * @return string The filter to retrieve this object type from the server
66: * database.
67: */
68: public static function getFilter()
69: {
70: return '(' . self::ATTRIBUTE_OC . '=' . self::OBJECTCLASS_GROUPOFNAMES . ')';
71: }
72:
73: /**
74: * Generates an ID for the given information.
75: *
76: * @param array &$info The data of the object.
77: *
78: * @static
79: *
80: * @return string|PEAR_Error The ID.
81: */
82: public function generateId(array &$info)
83: {
84: $id = $info[self::ATTRIBUTE_CN];
85: if (is_array($id)) {
86: $id = $id[0];
87: }
88: return trim(self::ATTRIBUTE_CN . '=' . $id, " \t\n\r\0\x0B,");
89: }
90:
91: /**
92: * Retrieve the member list for this group.
93: *
94: * @return array|PEAR_Error The list of members in this group.
95: */
96: public function getMembers()
97: {
98: return $this->get(self::ATTRIBUTE_MEMBER, false);
99: }
100:
101: /**
102: * Add a member to this group.
103: *
104: * @param string $member The UID of the member to add.
105: *
106: * @return array|PEAR_Error True if successful.
107: */
108: public function addMember($member)
109: {
110: if (!in_array($member, $this->getMembers())) {
111: $this->_cache[self::ATTRIBUTE_MEMBER][] = $member;
112: } else {
113: throw new Horde_Kolab_Server_Exception("The UID %s is already a member of the group %s!",
114: $member, $this->_uid);
115: }
116: return $this->save($this->_cache);
117: }
118:
119: /**
120: * Delete a member from this group.
121: *
122: * @param string $member The UID of the member to delete.
123: *
124: * @return array|PEAR_Error True if successful.
125: */
126: public function deleteMember($member)
127: {
128: $members = $this->getMembers();
129: if (in_array($member, $members)) {
130: //@todo: As the member attribute is required we may not remove the last member
131: $this->_cache[self::ATTRIBUTE_MEMBER] =
132: array_diff($this->_cache[self::ATTRIBUTE_MEMBER],
133: array($member));
134: } else {
135: throw new Horde_Kolab_Server_Exception("The UID %s is no member of the group %s!",
136: $member, $this->_uid);
137:
138: }
139: return $this->save($this->_cache);
140: }
141:
142: /**
143: * Is the specified UID member of this group?
144: *
145: * @param string $member The UID of the member to check.
146: *
147: * @return boolean|PEAR_Error True if the UID is a member of the group,
148: * false otherwise.
149: */
150: public function isMember($member)
151: {
152: $members = $this->getMembers();
153: if (!is_array($members)) {
154: return $member == $members;
155: }
156: if (!in_array($member, $members)) {
157: return false;
158: } else {
159: return true;
160: }
161: }
162: }
163: