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:  * The driver for handling the Kolab user database structure.
  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 objects stored in
 16:  * the standard Kolab LDAP 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_Structure_Kolab extends Horde_Kolab_Server_Structure_Ldap
 30: {
 31:     /**
 32:      * Returns the set of objects supported by this structure.
 33:      *
 34:      * @return array An array of supported objects.
 35:      */
 36:     public function getSupportedObjects()
 37:     {
 38:         return array(
 39:             'Horde_Kolab_Server_Object',
 40:             'Horde_Kolab_Server_Object_Groupofnames',
 41:             'Horde_Kolab_Server_Object_Person',
 42:             'Horde_Kolab_Server_Object_Organizationalperson',
 43:             'Horde_Kolab_Server_Object_Inetorgperson',
 44:             'Horde_Kolab_Server_Object_Kolab',
 45:             'Horde_Kolab_Server_Object_Kolabinetorgperson',
 46:             'Horde_Kolab_Server_Object_Kolabgermanbankarrangement',
 47:             'Horde_Kolab_Server_Object_Kolabpop3account',
 48:             'Horde_Kolab_Server_Object_Kolabgroupofnames',
 49:             'Horde_Kolab_Server_Object_Kolabsharedfolder',
 50:             'Horde_Kolab_Server_Object_Kolab_Address',
 51:             'Horde_Kolab_Server_Object_Kolab_Administrator',
 52:             'Horde_Kolab_Server_Object_Kolab_Distlist',
 53:             'Horde_Kolab_Server_Object_Kolab_Domainmaintainer',
 54:             'Horde_Kolab_Server_Object_Kolab_Maintainer',
 55:             'Horde_Kolab_Server_Object_Kolab_User',
 56:         );
 57:     }
 58: 
 59:     /**
 60:      * Returns the set of search operations supported by this object type.
 61:      *
 62:      * @return array An array of supported search operations.
 63:      */
 64:     public function getSearchOperations()
 65:     {
 66:         $searches = array(
 67:             'Horde_Kolab_Server_Search_Operation_Guid',
 68:             'Horde_Kolab_Server_Search_Operation_Attributes',
 69:             'Horde_Kolab_Server_Search_Operation_Children',
 70:             'Horde_Kolab_Server_Search_Operation_Guidforcn',
 71:             'Horde_Kolab_Server_Search_Operation_Guidforkolabusers',
 72:             'Horde_Kolab_Server_Search_Operation_Guidforuid',
 73:             'Horde_Kolab_Server_Search_Operation_Guidformail',
 74:             'Horde_Kolab_Server_Search_Operation_Guidforuidormail',
 75:             'Horde_Kolab_Server_Search_Operation_Guidforalias',
 76:             'Horde_Kolab_Server_Search_Operation_Guidformailoralias',
 77:             'Horde_Kolab_Server_Search_Operation_Guidforuidormailoralias',
 78:             'Horde_Kolab_Server_Search_Operation_Mailforuidormail',
 79:             'Horde_Kolab_Server_Search_Operation_Addressesforuidormail',
 80:             'Horde_Kolab_Server_Search_Operation_Groupsformember',
 81:         );
 82:         return $searches;
 83:     }
 84: 
 85:     /**
 86:      * Determine the type of an object by its tree position and other
 87:      * parameters.
 88:      *
 89:      * @param string $guid The GUID of the object to examine.
 90:      * @param array  $ocs  The object classes of the object to examine.
 91:      *
 92:      * @return string The class name of the corresponding object type.
 93:      *
 94:      * @throws Horde_Kolab_Server_Exception If the object type is unknown.
 95:      */
 96:     protected function _determineType($guid, array $ocs)
 97:     {
 98:         // Not a user type?
 99:         if (!in_array('kolabinetorgperson', $ocs)) {
100:             // Is it a group?
101:             if (in_array('kolabgroupofnames', $ocs)) {
102:                 return 'Horde_Kolab_Server_Object_Kolabgroupofnames';
103:             }
104:             // Is it an external pop3 account?
105:             if (in_array('kolabexternalpop3account', $ocs)) {
106:                 return 'Horde_Kolab_Server_Object_Kolabpop3account';
107:             }
108:             // Is it a shared Folder?
109:             if (in_array('kolabsharedfolder', $ocs)) {
110:                 return 'Horde_Kolab_Server_Object_Kolabsharedfolder';
111:             }
112:             return parent::_determineType($guid, $ocs);
113:         }
114: 
115:         $groups = $this->getComposite()->search->searchGroupsForMember($guid);
116:         if (!empty($groups)) {
117:             $base = $this->getComposite()->server->getBaseGuid();
118:             if (in_array('cn=admin,cn=internal,' . $base, $groups)) {
119:                 return 'Horde_Kolab_Server_Object_Kolab_Administrator';
120:             }
121:             if (in_array('cn=maintainer,cn=internal,' . $base,
122:                          $groups)) {
123:                 return 'Horde_Kolab_Server_Object_Kolab_Maintainer';
124:             }
125:             if (in_array('cn=domain-maintainer,cn=internal,' . $base,
126:                          $groups)) {
127:                 return 'Horde_Kolab_Server_Object_Kolab_Domainmaintainer';
128:             }
129:         }
130: 
131:         if (strpos($guid, 'cn=external') !== false) {
132:             return 'Horde_Kolab_Server_Object_Kolab_Address';
133:         }
134: 
135:         return 'Horde_Kolab_Server_Object_Kolab_User';
136:     }
137: 
138:     /**
139:      * Generates a UID for the given information.
140:      *
141:      * @param string $type The class name of the object to create.
142:      * @param string $id   The id of the object.
143:      * @param array  $info Any additional information about the object to create.
144:      *
145:      * @return string The UID.
146:      *
147:      * @throws Horde_Kolab_Server_Exception If the given type is unknown.
148:      */
149:     public function generateServerGuid($type, $id, array $info)
150:     {
151:         switch ($type) {
152:         case 'Horde_Kolab_Server_Object_Kolab_User':
153:             if (empty($info['user_type'])) {
154:                 return parent::generateServerGuid($type, $id, $info);
155:             } else if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_INTERNAL) {
156:                 return parent::generateServerGuid($type,
157:                                                   sprintf('%s,cn=internal', $id),
158:                                                   $info);
159:             } else if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_GROUP) {
160:                 return parent::generateServerGuid($type,
161:                                                   sprintf('%s,cn=groups', $id),
162:                                                   $info);
163:             } else if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_RESOURCE) {
164:                 return parent::generateServerGuid($type,
165:                                                   sprintf('%s,cn=resources', $id),
166:                                                   $info);
167:             } else {
168:                 return parent::generateServerGuid($type, $id, $info);
169:             }
170:         case 'Horde_Kolab_Server_Object_Kolab_Address':
171:             return parent::generateServerGuid($type,
172:                                               sprintf('%s,cn=external', $id),
173:                                               $info);
174:         case 'Horde_Kolab_Server_Object_Kolabgroupofnames':
175:         case 'Horde_Kolab_Server_Object_Kolab_Distlist':
176:             if (!isset($info['visible']) || !empty($info['visible'])) {
177:                 return parent::generateServerGuid($type, $id, $info);
178:             } else {
179:                 return parent::generateServerGuid($type,
180:                                                   sprintf('%s,cn=internal', $id),
181:                                                   $info);
182:             }
183:         case 'Horde_Kolab_Server_Object_Kolabsharedfolder':
184:         case 'Horde_Kolab_Server_Object_Kolab_Administrator':
185:         case 'Horde_Kolab_Server_Object_Kolab_Maintainer':
186:         case 'Horde_Kolab_Server_Object_Kolab_Domainmaintainer':
187:         default:
188:             return parent::generateServerGuid($type, $id, $info);
189:         }
190:     }
191: }
192: 
API documentation generated by ApiGen