Overview

Packages

  • Kolab
    • Server

Classes

  • Horde_Kolab_Server_Composite
  • Horde_Kolab_Server_Connection_File
  • Horde_Kolab_Server_Connection_Mock
  • Horde_Kolab_Server_Connection_Mock_Ldap
  • Horde_Kolab_Server_Connection_Mock_Search
  • Horde_Kolab_Server_Connection_Simpleldap
  • Horde_Kolab_Server_Connection_Splittedldap
  • Horde_Kolab_Server_Decorator_Clean
  • Horde_Kolab_Server_Decorator_Count
  • Horde_Kolab_Server_Decorator_Log
  • Horde_Kolab_Server_Decorator_Map
  • Horde_Kolab_Server_Exception
  • Horde_Kolab_Server_Exception_Bindfailed
  • Horde_Kolab_Server_Exception_Novalue
  • Horde_Kolab_Server_Factory
  • Horde_Kolab_Server_Ldap
  • Horde_Kolab_Server_Ldap_Changes
  • Horde_Kolab_Server_Ldap_Filtered
  • Horde_Kolab_Server_Ldap_Standard
  • Horde_Kolab_Server_List_Base
  • Horde_Kolab_Server_Object_Attribute_Base
  • Horde_Kolab_Server_Object_Attribute_Createtimestamp
  • Horde_Kolab_Server_Object_Attribute_Createtimestampdate
  • Horde_Kolab_Server_Object_Attribute_Decorator
  • Horde_Kolab_Server_Object_Attribute_Default
  • Horde_Kolab_Server_Object_Attribute_Empty
  • Horde_Kolab_Server_Object_Attribute_External
  • Horde_Kolab_Server_Object_Attribute_Field
  • Horde_Kolab_Server_Object_Attribute_Firstnamelastname
  • Horde_Kolab_Server_Object_Attribute_Guid
  • Horde_Kolab_Server_Object_Attribute_Id
  • Horde_Kolab_Server_Object_Attribute_Internal
  • Horde_Kolab_Server_Object_Attribute_Locked
  • Horde_Kolab_Server_Object_Attribute_Modifytimestamp
  • Horde_Kolab_Server_Object_Attribute_Modifytimestampdate
  • Horde_Kolab_Server_Object_Attribute_Objectclass
  • Horde_Kolab_Server_Object_Attribute_Openldapaci
  • Horde_Kolab_Server_Object_Attribute_Required
  • Horde_Kolab_Server_Object_Attribute_Single
  • Horde_Kolab_Server_Object_Attribute_Value
  • Horde_Kolab_Server_Object_Attribute_Writelock
  • Horde_Kolab_Server_Object_Base
  • Horde_Kolab_Server_Object_Factory
  • Horde_Kolab_Server_Object_Groupofnames
  • Horde_Kolab_Server_Object_Hash
  • Horde_Kolab_Server_Object_Inetorgperson
  • Horde_Kolab_Server_Object_Kolab
  • Horde_Kolab_Server_Object_Kolab_Address
  • Horde_Kolab_Server_Object_Kolab_Administrator
  • Horde_Kolab_Server_Object_Kolab_Adminrole
  • Horde_Kolab_Server_Object_Kolab_Distlist
  • Horde_Kolab_Server_Object_Kolab_Domainmaintainer
  • Horde_Kolab_Server_Object_Kolab_Maintainer
  • Horde_Kolab_Server_Object_Kolab_User
  • Horde_Kolab_Server_Object_Kolabgermanbankarrangement
  • Horde_Kolab_Server_Object_Kolabgroupofnames
  • Horde_Kolab_Server_Object_Kolabinetorgperson
  • Horde_Kolab_Server_Object_Kolabpop3account
  • Horde_Kolab_Server_Object_Kolabsharedfolder
  • Horde_Kolab_Server_Object_Mcached
  • Horde_Kolab_Server_Object_Organizationalperson
  • Horde_Kolab_Server_Object_Person
  • Horde_Kolab_Server_Object_Top
  • Horde_Kolab_Server_Objects_Base
  • Horde_Kolab_Server_Query_Element_And
  • Horde_Kolab_Server_Query_Element_Approx
  • Horde_Kolab_Server_Query_Element_Begins
  • Horde_Kolab_Server_Query_Element_Contains
  • Horde_Kolab_Server_Query_Element_Ends
  • Horde_Kolab_Server_Query_Element_Equals
  • Horde_Kolab_Server_Query_Element_Greater
  • Horde_Kolab_Server_Query_Element_Group
  • Horde_Kolab_Server_Query_Element_Less
  • Horde_Kolab_Server_Query_Element_Mapped
  • Horde_Kolab_Server_Query_Element_Not
  • Horde_Kolab_Server_Query_Element_Or
  • Horde_Kolab_Server_Query_Element_Single
  • Horde_Kolab_Server_Query_Ldap
  • Horde_Kolab_Server_Result_Ldap
  • Horde_Kolab_Server_Schema_Base
  • Horde_Kolab_Server_Schema_Decorator_Cache
  • Horde_Kolab_Server_Search_Base
  • Horde_Kolab_Server_Search_Operation_Addressesforuidormail
  • Horde_Kolab_Server_Search_Operation_Attributes
  • Horde_Kolab_Server_Search_Operation_Base
  • Horde_Kolab_Server_Search_Operation_Children
  • Horde_Kolab_Server_Search_Operation_Constraint_Single
  • Horde_Kolab_Server_Search_Operation_Constraint_Strict
  • Horde_Kolab_Server_Search_Operation_Groupsformember
  • Horde_Kolab_Server_Search_Operation_Guid
  • Horde_Kolab_Server_Search_Operation_Guidforalias
  • Horde_Kolab_Server_Search_Operation_Guidforcn
  • Horde_Kolab_Server_Search_Operation_Guidforkolabusers
  • Horde_Kolab_Server_Search_Operation_Guidformail
  • Horde_Kolab_Server_Search_Operation_Guidformailoralias
  • Horde_Kolab_Server_Search_Operation_Guidforuid
  • Horde_Kolab_Server_Search_Operation_Guidforuidormail
  • Horde_Kolab_Server_Search_Operation_Guidforuidormailoralias
  • Horde_Kolab_Server_Search_Operation_Mailforuidormail
  • Horde_Kolab_Server_Search_Operation_Restrictgroups
  • Horde_Kolab_Server_Search_Operation_Restrictkolab
  • Horde_Kolab_Server_Structure_Attribute_Double
  • Horde_Kolab_Server_Structure_Attribute_Value
  • Horde_Kolab_Server_Structure_Base
  • Horde_Kolab_Server_Structure_Kolab
  • Horde_Kolab_Server_Structure_Ldap

Interfaces

  • Horde_Kolab_Server_Connection_Interface
  • Horde_Kolab_Server_Interface
  • Horde_Kolab_Server_List_Interface
  • Horde_Kolab_Server_Object_Attribute_Interface
  • Horde_Kolab_Server_Object_Interface
  • Horde_Kolab_Server_Object_Searches
  • Horde_Kolab_Server_Objects_Interface
  • Horde_Kolab_Server_Query_Element_Interface
  • Horde_Kolab_Server_Query_Interface
  • Horde_Kolab_Server_Result_Interface
  • Horde_Kolab_Server_Schema_Interface
  • Horde_Kolab_Server_Search_Interface
  • Horde_Kolab_Server_Search_Operation_Interface
  • Horde_Kolab_Server_Structure_Attribute_Interface
  • Horde_Kolab_Server_Structure_Interface
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * A bsaic object representation.
  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 basic methods common to all Kolab server objects.
 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_Inetorgperson extends Horde_Kolab_Server_Object_Organizationalperson
 29: {
 30:     /** The specific object class of this object type */
 31:     const OBJECTCLASS_INETORGPERSON = 'inetOrgPerson';
 32: 
 33:     /**
 34:      * The attributes defined for this class.
 35:      *
 36:      * @var array
 37:      */
 38:     static public $attributes = array(
 39:         'uid', 'mail','Firstnamelastname',
 40: /*         'Organization', 'Businesscategory', 'Homephone', 'Mobile', */
 41: /*         'Photo', 'Jpegphoto', 'Givenname', 'Middlenames', */
 42: /*         'Homepostaladdress', 'Labeleduri', 'Lastnamefirstname', */
 43: /*         'Usersmimecertificate' */
 44:     );
 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: /*         'defined' => array( */
 53: /*             self::ATTRIBUTE_SID, */
 54: /*             self::ATTRIBUTE_GIVENNAME, */
 55: /*             self::ATTRIBUTE_LABELEDURI, */
 56: /*             self::ATTRIBUTE_HOMEPOSTALADDRESS, */
 57: /*             self::ATTRIBUTE_ORGANIZATION, */
 58: /*             self::ATTRIBUTE_BUSINESSCATEGORY, */
 59: /*             self::ATTRIBUTE_HOMEPHONE, */
 60: /*             self::ATTRIBUTE_MOBILE, */
 61: /*             self::ATTRIBUTE_PHOTO, */
 62: /*             self::ATTRIBUTE_JPEGPHOTO, */
 63: /*             self::ATTRIBUTE_SMIMECERTIFICATE, */
 64: /*         ), */
 65: /*         'derived' => array( */
 66: /*             self::ATTRARRAY_HOMEPOSTALADDRESS => array( */
 67: /*                 'base' => array( */
 68: /*                     self::ATTRIBUTE_HOMEPOSTALADDRESS, */
 69: /*                     self::ATTRIBUTE_GIVENNAME, */
 70: /*                     self::ATTRIBUTE_SN */
 71: /*                 ), */
 72: /*                 'method' => 'getHomePostalAddressHash', */
 73: /*             ), */
 74: /*             self::ATTRARRAY_LABELEDURI => array( */
 75: /*                 'base' => array( */
 76: /*                     self::ATTRIBUTE_LABELEDURI, */
 77: /*                 ), */
 78: /*                 'method' => 'getLabeledUriHash', */
 79: /*             ), */
 80: /*             self::ATTRIBUTE_GIVENNAME => array( */
 81: /*                 'base' => array( */
 82: /*                     self::ATTRIBUTE_GIVENNAME, */
 83: /*                 ), */
 84: /*                 'method' => 'getField', */
 85: /*                 'args' => array( */
 86: /*                     self::ATTRIBUTE_GIVENNAME, */
 87: /*                     0, */
 88: /*                     ' ' */
 89: /*                 ), */
 90: /*             ), */
 91: /*             self::ATTRIBUTE_MIDDLENAMES => array( */
 92: /*                 'base' => array( */
 93: /*                     self::ATTRIBUTE_GIVENNAME, */
 94: /*                 ), */
 95: /*                 'method' => 'getField', */
 96: /*                 'args' => array( */
 97: /*                     self::ATTRIBUTE_GIVENNAME, */
 98: /*                     1, */
 99: /*                     ' ', */
100: /*                     2 */
101: /*                 ), */
102: /*             ), */
103: /*             self::ATTRIBUTE_FNLN => array( */
104: /*                 'base' => array( */
105: /*                     self::ATTRIBUTE_GIVENNAME, */
106: /*                     self::ATTRIBUTE_SN */
107: /*                 ), */
108: /*                 'method' => 'getFnLn', */
109: /*             ), */
110: /*             self::ATTRIBUTE_LNFN => array( */
111: /*                 'base' => array( */
112: /*                     self::ATTRIBUTE_GIVENNAME, */
113: /*                     self::ATTRIBUTE_SN */
114: /*                 ), */
115: /*                 'method' => 'getLnFn', */
116: /*             ), */
117: /*         ), */
118: /*         'collapsed' => array( */
119: /*             self::ATTRIBUTE_GIVENNAME => array( */
120: /*                 'base' => array( */
121: /*                     self::ATTRIBUTE_GIVENNAME, */
122: /*                     self::ATTRIBUTE_MIDDLENAMES, */
123: /*                 ), */
124: /*                 'method' => 'setField', */
125: /*                 'args' => array( */
126: /*                     ' ', */
127: /*                 ), */
128: /*             ), */
129: /*             self::ATTRIBUTE_LABELEDURI => array( */
130: /*                 'base' => array( */
131: /*                     self::ATTRARRAY_LABELEDURI, */
132: /*                 ), */
133: /*                 'method' => 'setLabeledUriHash', */
134: /*             ), */
135: /*             self::ATTRIBUTE_HOMEPOSTALADDRESS => array( */
136: /*                 'base' => array( */
137: /*                     self::ATTRARRAY_HOMEPOSTALADDRESS, */
138: /*                 ), */
139: /*                 'method' => 'setHomePostalAddressHash', */
140: /*             ), */
141: /*         ), */
142: /*         'locked' => array( */
143: /*             self::ATTRIBUTE_MAIL, */
144: /*         ), */
145: /*         'object_classes' => array( */
146: /*             self::OBJECTCLASS_INETORGPERSON, */
147: /*         ), */
148: /*     ); */
149: 
150:     /**
151:      * Return the filter string to retrieve this object type.
152:      *
153:      * @static
154:      *
155:      * @return string The filter to retrieve this object type from the server
156:      *                database.
157:      */
158:     public static function getFilter()
159:     {
160:         $criteria = array('AND' => array(array('field' => self::ATTRIBUTE_OC,
161:                                                'op'    => '=',
162:                                                'test'  => self::OBJECTCLASS_INETORGPERSON),
163:                           ),
164:         );
165:         return $criteria;
166:     }
167: 
168:     /**
169:      * Get the name of this Object as "Firstname Lastname".
170:      *
171:      * @return string The name.
172:      */
173:     protected function getFnLn()
174:     {
175:         $gn = $this->get(self::ATTRIBUTE_GIVENNAME, true);
176:         $sn = $this->get(self::ATTRIBUTE_SN, true);
177:         return sprintf('%s %s', $gn, $sn);
178:     }
179: 
180:     /**
181:      * Get the name of this Object as "Lastname, Firstname".
182:      *
183:      * @return string The name.
184:      */
185:     protected function getLnFn()
186:     {
187:         $gn = $this->get(self::ATTRIBUTE_GIVENNAME, true);
188:         $sn = $this->get(self::ATTRIBUTE_SN, true);
189:         return sprintf('%s, %s', $sn, $gn);
190:     }
191: 
192:     /**
193:      * Return a hash of URIs. The keys of the hash are the labels.
194:      *
195:      * @return array The URIs.
196:      */
197:     protected function getLabeledUriHash()
198:     {
199:         $result = array();
200:         $uris   = $this->get(self::ATTRIBUTE_LABELEDURI, false);
201:         if (empty($uris)) {
202:             return array();
203:         }
204:         if (!is_array($uris)) {
205:             $uris = array($uris);
206:         }
207:         foreach ($uris as $uri) {
208:             list($address, $label) = explode(' ', $uri, 2);
209:             if (!isset($result[$label])) {
210:                 $result[$label] = array($address);
211:             } else {
212:                 $result[$label][] = $address;
213:             }
214:         }
215:         return $result;
216:     }
217: 
218:     /**
219:      * Store a hash of URIs. The keys of the hash are the labels.
220:      *
221:      * @param string $key        The attribute to collapse into.
222:      * @param array  $attributes The attributes to collapse.
223:      * @param array  &$info      The information currently working on.
224:      *
225:      * @return NULL
226:      */
227:     protected function setLabeledUriHash($key, $attributes, &$info)
228:     {
229:         $result = array();
230:         $uris   = $info[self::ATTRARRAY_LABELEDURI];
231:         foreach ($uris as $label => $addresses) {
232:             if (!is_array($addresses)) {
233:                 $addresses = array($addresses);
234:             }
235:             foreach ($addresses as $address) {
236:                 $result[] = $address . ' ' . $label;
237:             }
238:         }
239:         $info[self::ATTRIBUTE_LABELEDURI] = $result;
240:         unset($info[self::ATTRARRAY_LABELEDURI]);
241:     }
242: 
243:     /**
244:      * Get home postal addresses as an array.
245:      *
246:      * @return array The home addressses.
247:      */
248:     protected function getHomePostalAddressHash()
249:     {
250:         $result    = array();
251:         $addresses = $this->get(self::ATTRIBUTE_HOMEPOSTALADDRESS);
252:         if (empty($addresses)) {
253:             return $addresses;
254:         }
255:         if (!is_array($addresses)) {
256:             $addresses = array($addresses);
257:         }
258:         foreach ($addresses as $address) {
259:             list($name_segment, $street_segment,
260:                  $postal_address, $postal_code, $city) = sscanf('%s$%s$%s$%s %s', $address);
261:             if ($name_segment == "Post office box") {
262:                 $result[] = array(
263:                     self::ATTRIBUTE_POSTOFFICEBOX => $street_segment,
264:                     self::ATTRIBUTE_POSTALADDRESS => $postal_address,
265:                     self::ATTRIBUTE_POSTALCODE => $postal_code,
266:                     self::ATTRIBUTE_CITY => $city
267:                 );
268:             } else {
269:                 $result[] = array(
270:                     self::ATTRIBUTE_STREET => $street_segment,
271:                     self::ATTRIBUTE_POSTALADDRESS => $postal_address,
272:                     self::ATTRIBUTE_POSTALCODE => $postal_code,
273:                     self::ATTRIBUTE_CITY => $city
274:                 );
275:             }
276:         }
277:         return $result;
278:     }
279: 
280:     /**
281:      * Store home postal addresses provided as array.
282:      *
283:      * @param string $key        The attribute to collapse into.
284:      * @param array  $attributes The attributes to collapse.
285:      * @param array  &$info      The information currently working on.
286:      *
287:      * @return NULL
288:      */
289:     protected function setHomePostalAddressHash($key, $attributes, &$info)
290:     {
291:         $result         = array();
292:         $db_postal_data = array();
293:         $db_elements    = array(self::ATTRIBUTE_GIVENNAME,
294:                                 self::ATTRIBUTE_SN);
295:         foreach ($db_elements as $attribute) {
296:             if (!empty($info[$attribute])) {
297:                 if (is_array($info[$attribute])) {
298:                     $new = $info[$attribute][0];
299:                 } else {
300:                     $new = $info[$attribute];
301:                 }
302:                 $db_postal_data[$attribute] = $this->quote($new);
303:             } else {
304:                 $old = $this->_get($attribute, true);
305:                 if (!empty($old)) {
306:                     $db_postal_data[$attribute] = $this->quote($old);
307:                 } else {
308:                     $db_postal_data[$attribute] = '';
309:                 }
310:             }
311:         }
312:         $elements = array(self::ATTRIBUTE_STREET,
313:                           self::ATTRIBUTE_POSTOFFICEBOX,
314:                           self::ATTRIBUTE_POSTALADDRESS,
315:                           self::ATTRIBUTE_POSTALCODE,
316:                           self::ATTRIBUTE_CITY);
317:         if (!empty($info[self::ATTRARRAY_HOMEPOSTALADDRESS])) {
318:             $addresses = $info[self::ATTRARRAY_HOMEPOSTALADDRESS];
319:         } else {
320:             $addresses = $this->get(self::ATTRARRAY_HOMEPOSTALADDRESS);
321:         }
322:         foreach ($addresses as $address) {
323:             $postal_data = array();
324:             foreach ($elements as $element) {
325:                 if (isset($address[$element])) {
326:                     $postal_data[$element] = $this->quote($address[$element]);
327:                 } else {
328:                     $postal_data[$element] = '';
329:                 }
330:             }
331:             if (!empty($postal_data[self::ATTRIBUTE_STREET])) {
332:                 $postal_data['street_segment'] = $postal_data[self::ATTRIBUTE_STREET];
333:                 $postal_data['name_segment']   = $db_postal_data[self::ATTRIBUTE_GIVENNAME] . ' ' . $db_postal_data[self::ATTRIBUTE_SN];
334:             } else {
335:                 $postal_data['street_segment'] = $postal_data[self::ATTRIBUTE_POSTOFFICEBOX];
336:                 $postal_data['name_segment']   = "Post office box";
337:             }
338:             $result[] = sprintf('%s$%s$%s$%s %s',
339:                                 $postal_data['name_segment'],
340:                                 $postal_data['street_segment'],
341:                                 $postal_data[self::ATTRIBUTE_POSTALADDRESS],
342:                                 $postal_data[self::ATTRIBUTE_POSTALCODE],
343:                                 $postal_data[self::ATTRIBUTE_CITY]);
344:         }
345:         $info[self::ATTRIBUTE_HOMEPOSTALADDRESS] = $result;
346:         unset($info[self::ATTRARRAY_HOMEPOSTALADDRESS]);
347:     }
348: 
349:     /**
350:      * Generates an ID for the given information.
351:      *
352:      * @param array $info The data of the object.
353:      *
354:      * @static
355:      *
356:      * @return string|PEAR_Error The ID.
357:      */
358:     public function generateId(array &$info)
359:     {
360:         if ($this->exists()) {
361:             if (!isset($info[self::ATTRIBUTE_GIVENNAME])
362:                 && !isset($info[self::ATTRIBUTE_SN])) {
363:                 return false;
364:             }
365:             if (!isset($info[self::ATTRIBUTE_GIVENNAME])) {
366:                 $info[self::ATTRIBUTE_GIVENNAME] = $this->get(self::ATTRIBUTE_GIVENNAME);
367:             }
368:             if (!isset($info[self::ATTRIBUTE_SN])) {
369:                 $info[self::ATTRIBUTE_SN] = $this->get(self::ATTRIBUTE_SN);
370:             }
371:         }
372: 
373:         $id_mapfields = array(self::ATTRIBUTE_GIVENNAME,
374:                               self::ATTRIBUTE_SN);
375:         $id_format    = self::ATTRIBUTE_CN . '=' . '%s %s';
376: 
377:         $fieldarray = array();
378:         foreach ($id_mapfields as $mapfield) {
379:             if (isset($info[$mapfield])) {
380:                 $id = $info[$mapfield];
381:                 if (is_array($id)) {
382:                     $id = $id[0];
383:                 }
384:                 $fieldarray[] = $this->server->structure->quoteForUid($id);
385:             } else {
386:                 $fieldarray[] = '';
387:             }
388:         }
389: 
390:         return trim(vsprintf($id_format, $fieldarray), " \t\n\r\0\x0B,");
391:     }
392: 
393: }
API documentation generated by ApiGen