set json api functions parameter names
[tine20] / tine20 / Tinebase / LdapInfo.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Tinebase
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
8  * @author      Cornelius Weiss <c.weiss@metaways.de>
9  */
10
11 /**
12  * LDAP infomation class
13  * 
14  * @package     Tinebase
15  */
16 class Tinebase_LdapInfo
17 {
18     /**
19      * openldap server
20      */
21     const TYPE_OPENLDAP = 'openldap';
22
23     /**
24      * unknown server
25      */
26     const TYPE_UNKNOWN  = 'unknown';
27     
28     
29     protected $_serverType = NULL;
30     
31     protected $_supportedProtocolVersion = NULL;
32     
33     protected $_supportedObjectClasses = NULL;
34     
35     protected $_subschemaEntryDn = NULL;
36     
37     protected $_namingContexts = NULL;
38     
39     /**
40      * constructs a new ldap info object
41      *
42      * @param Tinebase_Ldap $_ldapServer
43      */
44     public function __construct(Tinebase_Ldap $_ldapServer)
45     {
46         $this->_ldapServer = $_ldapServer;
47         
48         $this->_resolveBaseInfo();
49     }
50     
51     public function getType()
52     {
53         return $this->_serverType;
54     }
55     
56     public function getProtocolVersion()
57     {
58         return $this->_supportedProtocolVersion;
59     }
60     
61     public function getSupportedObjectClasses()
62     {
63         if (! $this->_supportedObjectClasses) {
64             $this->_resolveSupportedObjectClasses();
65         }
66         
67         return $this->_supportedObjectClasses;
68     }
69     
70     /**
71      * resolves base info and filles them into the corrensponding properties of object
72      */
73     protected function _resolveBaseInfo()
74     {
75         $dn = '';
76         $filter='(objectclass=*)';
77         $attributes = array(
78             'structuralObjectClass',
79             'namingContexts',
80             'supportedLDAPVersion',
81             'subschemaSubentry'
82         );
83         
84         $info = $this->_ldapServer->fetchDn($dn, $filter, $attributes);
85         
86         // find servder type
87         if($info[0]['namingcontexts']) {
88             for($i=0; $i<$info[0]['namingcontexts']['count']; $i++) {
89                 $namingcontexts[] = $info[0]['namingcontexts'][$i];
90             }
91             $this->_namingContexts = $namingcontexts;
92         }
93
94         // find servder type
95         if($info[0]['structuralobjectclass']) {
96             switch($info[0]['structuralobjectclass'][0]) {
97                 case 'OpenLDAProotDSE':
98                     $this->_serverType = self::TYPE_OPENLDAP;
99                     break;
100                 default:
101                     $this->_serverType = self::TYPE_UNKNOWN;
102                     break;
103             }
104             
105         }
106         
107         // find subschema entry dn
108         if($info[0]['subschemasubentry']) {
109             $this->_subschemaEntryDn = $info[0]['subschemasubentry'][0];
110         }
111         
112     }
113     
114     /**
115      * resolves supported object classes
116      */
117     protected function _resolveSupportedObjectClasses()
118     {
119         if(empty($this->_subschemaEntryDn)) {
120             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . "  Could not resolve supported object classes");
121             return;
122         }
123         
124         $filter     = '(objectclass=*)';
125         $attributes = array('objectClasses');
126         
127         $info = $this->_ldapServer->fetchDn($dn, $filter, $attributes);
128         
129         if($info[0]['objectclasses']) {
130             for($i=0; $i<$info[0]['objectclasses']['count']; $i++) {
131                 $pattern = '/^\( (.*) NAME \'(\w*)\' /';
132                 if(preg_match($pattern, $info[0]['objectclasses'][$i], $matches)) {
133                     #_debug_array($matches);
134                     if(count($matches) == 3) {
135                         $supportedObjectClasses[$matches[1]] = strtolower($matches[2]);
136                     }
137                 }
138             }
139
140             $this->_supportedObjectClasses = $supportedObjectClasses;
141         }
142     }
143 }