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 Collection
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
38abstract class adLDAPCollection
39{
40    /**
41    * The current adLDAP connection via dependency injection
42    *
43    * @var adLDAP
44    */
45    protected $adldap;
46
47    /**
48    * The current object being modifed / called
49    *
50    * @var mixed
51    */
52    protected $currentObject;
53
54    /**
55    * The raw info array from Active Directory
56    *
57    * @var array
58    */
59    protected $info;
60
61    public function __construct($info, adLDAP $adldap)
62    {
63        $this->setInfo($info);
64        $this->adldap = $adldap;
65    }
66
67    /**
68    * Set the raw info array from Active Directory
69    *
70    * @param array $info
71    */
72    public function setInfo(array $info)
73    {
74        if ($this->info && sizeof($info) >= 1) {
75            unset($this->info);
76        }
77        $this->info = $info;
78    }
79
80    /**
81    * Magic get method to retrieve data from the raw array in a formatted way
82    *
83    * @param string $attribute
84    * @return mixed
85    */
86    public function __get($attribute)
87    {
88        if (isset($this->info[0]) && is_array($this->info[0])) {
89            foreach ($this->info[0] as $keyAttr => $valueAttr) {
90                if (strtolower($keyAttr) == strtolower($attribute)) {
91                    if ($this->info[0][strtolower($attribute)]['count'] == 1) {
92                        return $this->info[0][strtolower($attribute)][0];
93                    }
94                    else {
95                        $array = array();
96                        foreach ($this->info[0][strtolower($attribute)] as $key => $value) {
97                            if ((string)$key != 'count') {
98                                $array[$key] = $value;
99                            }
100                        }
101                        return $array;
102                    }
103                }
104            }
105        }
106        else {
107            return NULL;
108        }
109    }
110
111    /**
112    * Magic set method to update an attribute
113    *
114    * @param string $attribute
115    * @param string $value
116    * @return bool
117    */
118    abstract public function __set($attribute, $value);
119
120    /**
121    * Magic isset method to check for the existence of an attribute
122    *
123    * @param string $attribute
124    * @return bool
125    */
126    public function __isset($attribute) {
127        if (isset($this->info[0]) && is_array($this->info[0])) {
128            foreach ($this->info[0] as $keyAttr => $valueAttr) {
129                if (strtolower($keyAttr) == strtolower($attribute)) {
130                    return true;
131                }
132            }
133        }
134        return false;
135     }
136}
137?>
138