"Fossies" - the Fresh Open Source Software Archive

Member "adLDAP-4.0.4/src/classes/adLDAPFolders.php" (13 Apr 2013, 6808 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 "adLDAPFolders.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 Folders
   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 require_once(dirname(__FILE__) . '/../adLDAP.php');
   38 
   39 /**
   40 * FOLDER / OU MANAGEMENT FUNCTIONS
   41 */
   42 class adLDAPFolders {
   43     /**
   44     * The current adLDAP connection via dependency injection
   45     * 
   46     * @var adLDAP
   47     */
   48     protected $adldap;
   49     
   50     public function __construct(adLDAP $adldap) {
   51         $this->adldap = $adldap;
   52     }
   53     
   54     /**
   55     * Delete a distinguished name from Active Directory
   56     * You should never need to call this yourself, just use the wrapper functions user_delete and contact_delete
   57     *
   58     * @param string $dn The distinguished name to delete
   59     * @return bool
   60     */
   61     public function delete($dn){ 
   62         $result = ldap_delete($this->adldap->getLdapConnection(), $dn);
   63         if ($result != true) { 
   64             return false; 
   65         }
   66         return true;
   67     }
   68     
   69     /**
   70     * Returns a folder listing for a specific OU
   71     * See http://adldap.sourceforge.net/wiki/doku.php?id=api_folder_functions
   72     * 
   73     * @param array $folderName An array to the OU you wish to list. 
   74     *                           If set to NULL will list the root, strongly recommended to set 
   75     *                           $recursive to false in that instance!
   76     * @param string $dnType The type of record to list.  This can be ADLDAP_FOLDER or ADLDAP_CONTAINER.
   77     * @param bool $recursive Recursively search sub folders
   78     * @param bool $type Specify a type of object to search for
   79     * @return array
   80     */
   81     public function listing($folderName = NULL, $dnType = adLDAP::ADLDAP_FOLDER, $recursive = NULL, $type = NULL) 
   82     {
   83         if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } //use the default option if they haven't set it
   84         if (!$this->adldap->getLdapBind()) { return false; }
   85 
   86         $filter = '(&';
   87         if ($type !== NULL) {
   88             switch ($type) {
   89                 case 'contact':
   90                     $filter .= '(objectClass=contact)';
   91                     break;
   92                 case 'computer':
   93                     $filter .= '(objectClass=computer)';
   94                     break;
   95                 case 'group':
   96                     $filter .= '(objectClass=group)';
   97                     break;
   98                 case 'folder':
   99                     $filter .= '(objectClass=organizationalUnit)';
  100                     break;
  101                 case 'container':
  102                     $filter .= '(objectClass=container)';
  103                     break;
  104                 case 'domain':
  105                     $filter .= '(objectClass=builtinDomain)';
  106                     break;
  107                 default:
  108                     $filter .= '(objectClass=user)';
  109                     break;   
  110             }
  111         }
  112         else {
  113             $filter .= '(objectClass=*)';   
  114         }
  115         // If the folder name is null then we will search the root level of AD
  116         // This requires us to not have an OU= part, just the base_dn
  117         $searchOu = $this->adldap->getBaseDn();
  118         if (is_array($folderName)) {
  119             $ou = $dnType . "=" . implode("," . $dnType . "=", $folderName);
  120             $filter .= '(!(distinguishedname=' . $ou . ',' . $this->adldap->getBaseDn() . ')))';
  121             $searchOu = $ou . ',' . $this->adldap->getBaseDn();
  122         }
  123         else {
  124             $filter .= '(!(distinguishedname=' . $this->adldap->getBaseDn() . ')))';
  125         }
  126 
  127         if ($recursive === true) {
  128             $sr = ldap_search($this->adldap->getLdapConnection(), $searchOu, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
  129             $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
  130             if (is_array($entries)) {
  131                 return $entries;
  132             }
  133         }
  134         else {
  135             $sr = ldap_list($this->adldap->getLdapConnection(), $searchOu, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
  136             $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr);
  137             if (is_array($entries)) {
  138                 return $entries;
  139             }
  140         }
  141         
  142         return false;
  143     }
  144 
  145     /**
  146     * Create an organizational unit
  147     * 
  148     * @param array $attributes Default attributes of the ou
  149     * @return bool
  150     */
  151     public function create($attributes)
  152     {
  153         if (!is_array($attributes)){ return "Attributes must be an array"; }
  154         if (!is_array($attributes["container"])) { return "Container attribute must be an array."; }
  155         if (!array_key_exists("ou_name",$attributes)) { return "Missing compulsory field [ou_name]"; }
  156         if (!array_key_exists("container",$attributes)) { return "Missing compulsory field [container]"; }
  157         
  158         $attributes["container"] = array_reverse($attributes["container"]);
  159 
  160         $add=array();
  161         $add["objectClass"] = "organizationalUnit";
  162         $add["OU"] = $attributes['ou_name'];
  163         $containers = "";
  164         if (count($attributes['container']) > 0) {
  165             $containers = "OU=" . implode(",OU=", $attributes["container"]) . ",";
  166         }
  167 
  168         $containers = "OU=" . implode(",OU=", $attributes["container"]);
  169         $result = ldap_add($this->adldap->getLdapConnection(), "OU=" . $add["OU"] . ", " . $containers . $this->adldap->getBaseDn(), $add);
  170         if ($result != true) { 
  171             return false; 
  172         }
  173         
  174         return true;
  175     }
  176     
  177 }
  178 
  179 ?>