"Fossies" - the Fresh Open Source Software Archive 
Member "adLDAP-4.0.4/src/classes/adLDAPContacts.php" (13 Apr 2013, 11626 Bytes) of package /linux/www/old/adLDAP-4.0.4.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PHP source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "adLDAPContacts.php" see the
Fossies "Dox" file reference documentation.
1 <?php
2 /**
3 * PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
4 * Version 4.0.4
5 *
6 * PHP Version 5 with SSL and LDAP support
7 *
8 * Written by Scott Barnett, Richard Hyland
9 * email: scott@wiggumworld.com, adldap@richardhyland.com
10 * http://adldap.sourceforge.net/
11 *
12 * Copyright (c) 2006-2012 Scott Barnett, Richard Hyland
13 *
14 * We'd appreciate any improvements or additions to be submitted back
15 * to benefit the entire community :)
16 *
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License as published by the Free Software Foundation; either
20 * version 2.1 of the License.
21 *
22 * This library is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 * Lesser General Public License for more details.
26 *
27 * @category ToolsAndUtilities
28 * @package adLDAP
29 * @subpackage Contacts
30 * @author Scott Barnett, Richard Hyland
31 * @copyright (c) 2006-2012 Scott Barnett, Richard Hyland
32 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
33 * @revision $Revision: 97 $
34 * @version 4.0.4
35 * @link http://adldap.sourceforge.net/
36 */
37
38 require_once(dirname(__FILE__) . '/../adLDAP.php');
39 require_once(dirname(__FILE__) . '/../collections/adLDAPContactCollection.php');
40
41 class adLDAPContacts {
42 /**
43 * The current adLDAP connection via dependency injection
44 *
45 * @var adLDAP
46 */
47 protected $adldap;
48
49 public function __construct(adLDAP $adldap) {
50 $this->adldap = $adldap;
51 }
52
53 //*****************************************************************************************************************
54 // CONTACT FUNCTIONS
55 // * Still work to do in this area, and new functions to write
56
57 /**
58 * Create a contact
59 *
60 * @param array $attributes The attributes to set to the contact
61 * @return bool
62 */
63 public function create($attributes)
64 {
65 // Check for compulsory fields
66 if (!array_key_exists("display_name", $attributes)) { return "Missing compulsory field [display_name]"; }
67 if (!array_key_exists("email", $attributes)) { return "Missing compulsory field [email]"; }
68 if (!array_key_exists("container", $attributes)) { return "Missing compulsory field [container]"; }
69 if (!is_array($attributes["container"])) { return "Container attribute must be an array."; }
70
71 // Translate the schema
72 $add = $this->adldap->adldap_schema($attributes);
73
74 // Additional stuff only used for adding contacts
75 $add["cn"][0] = $attributes["display_name"];
76 $add["objectclass"][0] = "top";
77 $add["objectclass"][1] = "person";
78 $add["objectclass"][2] = "organizationalPerson";
79 $add["objectclass"][3] = "contact";
80 if (!isset($attributes['exchange_hidefromlists'])) {
81 $add["msExchHideFromAddressLists"][0] = "TRUE";
82 }
83
84 // Determine the container
85 $attributes["container"] = array_reverse($attributes["container"]);
86 $container= "OU=" . implode(",OU=", $attributes["container"]);
87
88 // Add the entry
89 $result = @ldap_add($this->adldap->getLdapConnection(), "CN=" . $this->adldap->utilities()->escapeCharacters($add["cn"][0]) . ", " . $container . "," . $this->adldap->getBaseDn(), $add);
90 if ($result != true) {
91 return false;
92 }
93
94 return true;
95 }
96
97 /**
98 * Determine the list of groups a contact is a member of
99 *
100 * @param string $distinguisedname The full DN of a contact
101 * @param bool $recursive Recursively check groups
102 * @return array
103 */
104 public function groups($distinguishedName, $recursive = NULL)
105 {
106 if ($distinguishedName === NULL) { return false; }
107 if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
108 if (!$this->adldap->getLdapBind()){ return false; }
109
110 // Search the directory for their information
111 $info = @$this->info($distinguishedName, array("memberof", "primarygroupid"));
112 $groups = $this->adldap->utilities()->niceNames($info[0]["memberof"]); //presuming the entry returned is our contact
113
114 if ($recursive === true){
115 foreach ($groups as $id => $groupName){
116 $extraGroups = $this->adldap->group()->recursiveGroups($groupName);
117 $groups = array_merge($groups, $extraGroups);
118 }
119 }
120
121 return $groups;
122 }
123
124 /**
125 * Get contact information. Returned in a raw array format from AD
126 *
127 * @param string $distinguisedname The full DN of a contact
128 * @param array $fields Attributes to be returned
129 * @return array
130 */
131 public function info($distinguishedName, $fields = NULL)
132 {
133 if ($distinguishedName === NULL) { return false; }
134 if (!$this->adldap->getLdapBind()) { return false; }
135
136 $filter = "distinguishedName=" . $distinguishedName;
137 if ($fields === NULL) {
138 $fields = array("distinguishedname", "mail", "memberof", "department", "displayname", "telephonenumber", "primarygroupid", "objectsid");
139 }
140 $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
141 $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
142
143 if ($entries[0]['count'] >= 1) {
144 // AD does not return the primary group in the ldap query, we may need to fudge it
145 if ($this->adldap->getRealPrimaryGroup() && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["primarygroupid"][0])){
146 //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
147 $entries[0]["memberof"][] = $this->adldap->group()->getPrimaryGroup($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
148 } else {
149 $entries[0]["memberof"][] = "CN=Domain Users,CN=Users," . $this->adldap->getBaseDn();
150 }
151 }
152
153 $entries[0]["memberof"]["count"]++;
154 return $entries;
155 }
156
157 /**
158 * Find information about the contacts. Returned in a raw array format from AD
159 *
160 * @param string $distinguishedName The full DN of a contact
161 * @param array $fields Array of parameters to query
162 * @return mixed
163 */
164 public function infoCollection($distinguishedName, $fields = NULL)
165 {
166 if ($distinguishedName === NULL) { return false; }
167 if (!$this->adldap->getLdapBind()) { return false; }
168
169 $info = $this->info($distinguishedName, $fields);
170
171 if ($info !== false) {
172 $collection = new adLDAPContactCollection($info, $this->adldap);
173 return $collection;
174 }
175 return false;
176 }
177
178 /**
179 * Determine if a contact is a member of a group
180 *
181 * @param string $distinguisedName The full DN of a contact
182 * @param string $group The group name to query
183 * @param bool $recursive Recursively check groups
184 * @return bool
185 */
186 public function inGroup($distinguisedName, $group, $recursive = NULL)
187 {
188 if ($distinguisedName === NULL) { return false; }
189 if ($group === NULL) { return false; }
190 if (!$this->adldap->getLdapBind()) { return false; }
191 if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
192
193 // Get a list of the groups
194 $groups = $this->groups($distinguisedName, array("memberof"), $recursive);
195
196 // Return true if the specified group is in the group list
197 if (in_array($group, $groups)){
198 return true;
199 }
200
201 return false;
202 }
203
204 /**
205 * Modify a contact
206 *
207 * @param string $distinguishedName The contact to query
208 * @param array $attributes The attributes to modify. Note if you set the enabled attribute you must not specify any other attributes
209 * @return bool
210 */
211 public function modify($distinguishedName, $attributes) {
212 if ($distinguishedName === NULL) { return "Missing compulsory field [distinguishedname]"; }
213
214 // Translate the update to the LDAP schema
215 $mod = $this->adldap->adldap_schema($attributes);
216
217 // Check to see if this is an enabled status update
218 if (!$mod) {
219 return false;
220 }
221
222 // Do the update
223 $result = ldap_modify($this->adldap->getLdapConnection(), $distinguishedName, $mod);
224 if ($result == false) {
225 return false;
226 }
227
228 return true;
229 }
230
231 /**
232 * Delete a contact
233 *
234 * @param string $distinguishedName The contact dn to delete (please be careful here!)
235 * @return array
236 */
237 public function delete($distinguishedName)
238 {
239 $result = $this->folder()->delete($distinguishedName);
240 if ($result != true) {
241 return false;
242 }
243 return true;
244 }
245
246 /**
247 * Return a list of all contacts
248 *
249 * @param bool $includeDescription Include a description of a contact
250 * @param string $search The search parameters
251 * @param bool $sorted Whether to sort the results
252 * @return array
253 */
254 public function all($includeDescription = false, $search = "*", $sorted = true) {
255 if (!$this->adldap->getLdapBind()) { return false; }
256
257 // Perform the search and grab all their details
258 $filter = "(&(objectClass=contact)(cn=" . $search . "))";
259 $fields = array("displayname","distinguishedname");
260 $sr = ldap_search($this->adldap->getLdapConnection(), $this->adldap->getBaseDn(), $filter, $fields);
261 $entries = ldap_get_entries($this->adldap->getLdapConnection(), $sr);
262
263 $usersArray = array();
264 for ($i=0; $i<$entries["count"]; $i++){
265 if ($includeDescription && strlen($entries[$i]["displayname"][0])>0){
266 $usersArray[$entries[$i]["distinguishedname"][0]] = $entries[$i]["displayname"][0];
267 } elseif ($includeDescription){
268 $usersArray[$entries[$i]["distinguishedname"][0]] = $entries[$i]["distinguishedname"][0];
269 } else {
270 array_push($usersArray, $entries[$i]["distinguishedname"][0]);
271 }
272 }
273 if ($sorted) {
274 asort($usersArray);
275 }
276 return $usersArray;
277 }
278
279 /**
280 * Mail enable a contact
281 * Allows email to be sent to them through Exchange
282 *
283 * @param string $distinguishedname The contact to mail enable
284 * @param string $emailaddress The email address to allow emails to be sent through
285 * @param string $mailnickname The mailnickname for the contact in Exchange. If NULL this will be set to the display name
286 * @return bool
287 */
288 public function contactMailEnable($distinguishedName, $emailAddress, $mailNickname = NULL){
289 return $this->adldap->exchange()->contactMailEnable($distinguishedName, $emailAddress, $mailNickname);
290 }
291
292
293 }
294 ?>