Initial import
[ldapsaisie.git] / trunk / includes / class / class.LSldap.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 /**
24  * Gestion de l'accès à l'annaire Ldap
25  *
26  * Cette classe gère l'accès à l'annuaire ldap en s'appuyant sur PEAR :: Net_LDAP
27  *
28  * @author Benjamin Renard <brenard@easter-eggs.com>
29  */
30 class LSldap {
31
32   var $config;
33   var $cnx = NULL;
34
35   /**
36    * Constructeur
37    *
38    * Cette methode définis la configuration de l'accès à l'annuaire
39    * et établie la connexion.
40    *
41    * @author Benjamin Renard <brenard@easter-eggs.com>
42    *
43    * @param[in] $config array Tableau de configuration au formar Net_LDAP
44    *
45    * @retval void
46    *
47    * @see Net_LDAP::connect()
48    */
49   function LSldap ($config) {
50     $this -> config = $config;
51     $this -> connect();
52   }
53   
54   /**
55    * Connection
56    *
57    * Cette methode établie la connexion à l'annuaire Ldap
58    *
59    * @author Benjamin Renard <brenard@easter-eggs.com>
60    *
61    * @retval boolean true si la connection est établie, false sinon
62    */
63   function connect() {
64     $this -> cnx = Net_LDAP::connect($this -> config);
65     if (Net_LDAP::isError($this -> cnx)) {
66       $GLOBALS['LSerror'] -> addErrorCode(1,$this -> cnx -> getMessage());
67       $this -> cnx = NULL;
68       return;
69     }
70     return true;
71   }
72   
73   /**
74    * Déconnection
75    *
76    * Cette methode clos la connexion à l'annuaire Ldap
77    *
78    * @author Benjamin Renard <brenard@easter-eggs.com>
79    *
80    * @retval void
81    */
82   function close() {
83     $this -> cnx -> done();
84   }
85   
86   /**
87    * Recherche dans l'annuaire
88    *
89    * Cette methode effectue une recherche dans l'annuaire et retourne le resultat
90    * de celle-ci sous la forme d'un tableau.
91    *
92    * @author Benjamin Renard <brenard@easter-eggs.com>
93    *
94    * @param[in] $filter [<b>required</b>] string Filtre de recherche Ldap
95    * @param[in] $basedn string DN de base pour la recherche
96    * @param[in] $params array Paramètres de recherche au format Net_LDAP::search()
97    *
98    * @see Net_LDAP::search()
99    *
100    * @retval array Retourne un tableau associatif contenant :
101    *               - ['dn'] : le DN de l'entré
102    *               - ['attrs'] : tableau associatif contenant les attributs (clé)
103    *                             et leur valeur (valeur).
104    */
105   function search ($filter,$basedn=NULL,$params = array() ) {
106     $ret = $this -> cnx -> search($basedn,$filter,$params);
107     if (Net_LDAP::isError($ret)) {
108       $GLOBALS['LSerror'] -> addErrorCode(2,$ret -> getMessage());
109       return;
110     }
111     $retInfos=array();
112     foreach($ret -> entries() as $entry) {
113       $retInfos[]=array('dn' => $entry -> dn(), 'attrs' => $entry -> getValues());
114     }
115     return $retInfos;
116   }
117   
118   /**
119    * Compte le nombre de retour d'une recherche dans l'annuaire
120    *
121    * Cette methode effectue une recherche dans l'annuaire et retourne le nombre
122    * d'entrés trouvées.
123    *
124    * @author Benjamin Renard <brenard@easter-eggs.com>
125    *
126    * @param[in] $filter [<b>required</b>] string Filtre de recherche Ldap
127    * @param[in] $basedn string DN de base pour la recherche
128    * @param[in] $params array Paramètres de recherche au format Net_LDAP::search()
129    *
130    * @see Net_LDAP::search()
131    *
132    * @retval numeric Le nombre d'entré trouvées
133    */
134   function getNumberResult ($filter,$basedn=NULL,$params = array() ) {
135     if (empty($filter))
136       $filter=NULL;
137     $ret = $this -> cnx -> search($basedn,$filter,$params);
138     if (Net_LDAP::isError($ret)) {
139       $GLOBALS['LSerror'] -> addErrorCode(2,$ret -> getMessage());
140       return;
141     }
142     return $ret -> count();
143   }
144   
145   /**
146    * Charge les valeurs des attributs d'une entré de l'annuaire
147    *
148    * Cette methode recupère les valeurs des attributs d'une entrée de l'annaire
149    * et les retournes sous la forme d'un tableau.
150    *
151    * @author Benjamin Renard <brenard@easter-eggs.com>
152    *
153    * @param[in] $dn string DN de l'entré Ldap
154    *
155    * @retval array Tableau associatif des valeurs des attributs avec en clef, le nom de l'attribut.
156    */
157   function getAttrs($dn) {
158     $infos = ldap_explode_dn($dn,0);
159     if((!$infos)||($infos['count']==0))
160       return;
161     $basedn='';
162     for ($i=1;$i<$infos['count'];$i++) {
163       $sep=($basedn=='')?'':',';
164       $basedn.=$sep.$infos[$i];
165     }
166     $return=$this -> search($infos[0],$basedn);
167     return $return[0]['attrs'];
168   }
169 }
170
171 ?>