1: <?php
2: /**
3: * A standard Kolab user.
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 Kolab users stored in
16: * the Kolab db.
17: *
18: * Copyright 2008-2012 Horde LLC (http://www.horde.org/)
19: *
20: * See the enclosed file COPYING for license information (LGPL). If you
21: * did not receive this file, see http://www.horde.org/licenses/lgpl21.
22: *
23: * @category Kolab
24: * @package Kolab_Server
25: * @author Gunnar Wrobel <wrobel@pardus.de>
26: * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
27: * @link http://pear.horde.org/index.php?package=Kolab_Server
28: */
29: class Horde_Kolab_Server_Object_Kolab_User extends Horde_Kolab_Server_Object_Kolabinetorgperson
30: {
31:
32: /** Define attributes specific to this object type */
33:
34: /** The user type */
35: const ATTRIBUTE_USERTYPE = 'usertype';
36:
37: /** The first name */
38: const ATTRIBUTE_FN = 'fn';
39:
40: /** Define the possible Kolab user types */
41: const USERTYPE_STANDARD = 0;
42: const USERTYPE_INTERNAL = 1;
43: const USERTYPE_GROUP = 2;
44: const USERTYPE_RESOURCE = 3;
45:
46: /**
47: * A structure to initialize the attribute structure for this class.
48: *
49: * @var array
50: */
51: /* static public $init_attributes = array( */
52: /* 'derived' => array( */
53: /* self::ATTRIBUTE_USERTYPE => array(), */
54: /* self::ATTRIBUTE_FN => array(), */
55: /* ), */
56: /* 'required' => array( */
57: /* self::ATTRIBUTE_USERPASSWORD, */
58: /* ), */
59: /* ); */
60:
61: /**
62: * Return the filter string to retrieve this object type.
63: *
64: * @return string The filter to retrieve this object type from the server
65: * database.
66: */
67: public static function getFilter()
68: {
69: $criteria = array('AND' => array(
70: array('field' => self::ATTRIBUTE_SN,
71: 'op' => 'any'),
72: array('field' => self::ATTRIBUTE_MAIL,
73: 'op' => 'any'),
74: array('field' => self::ATTRIBUTE_SID,
75: 'op' => 'any'),
76: array('field' => self::ATTRIBUTE_OC,
77: 'op' => '=',
78: 'test' => self::OBJECTCLASS_KOLABINETORGPERSON),
79: ),
80: );
81: return $criteria;
82: }
83:
84: /**
85: * Derive an attribute value.
86: *
87: * @param string $attr The attribute to derive.
88: *
89: * @return mixed The value of the attribute.
90: */
91: protected function derive($attr)
92: {
93: switch ($attr) {
94: case self::ATTRIBUTE_USERTYPE:
95: if (strpos($this->_uid, 'cn=internal')) {
96: return self::USERTYPE_INTERNAL;
97: } else if (strpos($this->_uid, 'cn=group')) {
98: return self::USERTYPE_GROUP;
99: } else if (strpos($this->_uid, 'cn=resource')) {
100: return self::USERTYPE_RESOURCE;
101: } else {
102: return self::USERTYPE_STANDARD;
103: }
104: case self::ATTRIBUTE_FN:
105: return $this->getFn();
106: default:
107: return parent::derive($attr);
108: }
109: }
110:
111: /**
112: * Convert the object attributes to a hash.
113: *
114: * @param string $attrs The attributes to return.
115: *
116: * @return array|PEAR_Error The hash representing this object.
117: */
118: public function toHash($attrs = null)
119: {
120: if (!isset($attrs)) {
121: $attrs = array(
122: self::ATTRIBUTE_SID,
123: self::ATTRIBUTE_FN,
124: self::ATTRIBUTE_MAIL,
125: self::ATTRIBUTE_USERTYPE,
126: );
127: }
128: return parent::toHash($attrs);
129: }
130:
131: /**
132: * Get the "first name" attribute of this object
133: *
134: * @todo: This should get refactored to be combined with the Id value.
135: *
136: * @return string the "first name" of this object
137: */
138: protected function getFn()
139: {
140: $sn = $this->_get(self::ATTRIBUTE_SN, true);
141: $cn = $this->_get(self::ATTRIBUTE_CN, true);
142: return trim(substr($cn, 0, strlen($cn) - strlen($sn)));
143: }
144:
145: /**
146: * Get the groups for this object
147: *
148: * @return mixed|PEAR_Error An array of group ids, false if no groups were
149: * found.
150: */
151: public function getGroups()
152: {
153: return $this->server->getGroups($this->uid);
154: }
155:
156: /**
157: * Get the group mail addresses for this object
158: *
159: * @return mixed|PEAR_Error An array of group addresses, false if no groups were
160: * found.
161: */
162: function getGroupAddresses()
163: {
164: return $this->server->getGroupAddresses($this->uid);
165: }
166: };
167: