- LSldapObject :

-> Ajout de la méthode search() effectuant une recherche multi-niveau dans l'annuaire
		 et retournant un tableau array(dn => '', attrs => '') des objets correspondants.
		 Cette méthode est plus légère à utiliser quand on cherche simplement a obtenir une
		 liste d'objet avec quelques infos plutôt qu'une liste d'objet instancié.
	-> Utilisation de la méthode search() dans les méthodes listObjects() 
		 et listObjectsName() plutôt qu'une recherche autonome.
This commit is contained in:
Benjamin Renard 2008-11-09 16:47:55 +00:00
parent 2b5dfe8416
commit 41767dde3d

View file

@ -634,7 +634,36 @@ class LSldapObject {
* *
* @retval array Tableau d'objets correspondant au resultat de la recherche * @retval array Tableau d'objets correspondant au resultat de la recherche
*/ */
function listObjects($filter='',$basedn=NULL,$params=array()) { function listObjects($filter=NULL,$basedn=NULL,$params=array()) {
$retInfos=array();
$ret = $this -> search($filter,$basedn,$params);
// Création d'un tableau d'objet correspondant au valeur retourné
for($i=0;$i<count($ret);$i++) {
$retInfos[$i] = new $this -> type_name($this -> config);
$retInfos[$i] -> loadData($ret[$i]['dn']);
}
return $retInfos;
}
/**
* Recherche les objets du même type dans l'annuaire
*
* Effectue une recherche en fonction des paramètres passé et retourne un
* tableau array(dn => '', attrs => array()) d'objet correspondant au resultat*
* de la recherche.
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @param[in] $filter array (ou string) Filtre de recherche Ldap / Tableau de filtres de recherche
* @param[in] $basedn string DN de base pour la recherche
* @param[in] $params array Paramètres de recherche au format Net_LDAP2::search()
*
* @retval array Tableau d'objets correspondant au resultat de la recherche
*/
function search($filter='',$basedn=NULL,$params=array()) {
$retInfos=array(); $retInfos=array();
$attrs=false; $attrs=false;
$check_final_dn=false; $check_final_dn=false;
@ -716,7 +745,7 @@ class LSldapObject {
if ($filter[$i]['attr']) { if ($filter[$i]['attr']) {
$sparams['attributes'] = array($filter[$i]['attr']); $sparams['attributes'] = array($filter[$i]['attr']);
} }
else { else if (!isset($sparams['attributes'])) {
$sparams['attributes'] = array($this -> config['rdn']); $sparams['attributes'] = array($this -> config['rdn']);
} }
@ -742,20 +771,10 @@ class LSldapObject {
} }
} }
} }
else {
// vérification de la compatibilité de la compatibilité du DN resultant
// et du basedn de recherche
if (!$this -> isCompatibleDNs($ret[0]['dn'],$basedn))
continue;
// ajout du DN au resultat finale
$ret_gen[]=$ret[0]['dn'];
}
} }
} }
// cas du dernier filtre // cas du dernier filtre
if(!empty($ret_gen)) { if(!empty($ret_gen)) {
// on quitte la boucle des filtres de la conf
$ret=$ret_gen;
break; break;
} }
// dans le cas d'une suite prévu mais d'un retour nul de la précédente recherche // dans le cas d'une suite prévu mais d'un retour nul de la précédente recherche
@ -783,7 +802,9 @@ class LSldapObject {
$sfilter.=$sfilter_end; $sfilter.=$sfilter_end;
// Attributes // Attributes
$sparams['attributes'] = array($this -> config['rdn']); if (!isset($sparams['attributes'])) {
$sparams['attributes'] = array($this -> config['rdn']);
}
// Lancement de la recherche // Lancement de la recherche
$ret=$GLOBALS['LSldap'] -> search ($sfilter,$sbasedn,$sparams); $ret=$GLOBALS['LSldap'] -> search ($sfilter,$sbasedn,$sparams);
@ -815,28 +836,14 @@ class LSldapObject {
// Si recherche unique // Si recherche unique
else { else {
// préparation du retour finale // préparation du retour finale
if (is_array($ret)) { if (!is_array($ret)) {
$ret_final=array();
foreach($ret as $obj) {
$ret_final[]=$obj['dn'];
}
$ret=$ret_final;
}
else {
$ret=array(); $ret=array();
} }
break; break;
} }
} }
} }
return $ret;
// Création d'un tableau d'objet correspondant au valeur retourné
for($i=0;$i<count($ret);$i++) {
$retInfos[$i] = new $this -> type_name($this -> config);
$retInfos[$i] -> loadData($ret[$i]);
}
return $retInfos;
} }
/** /**
@ -860,31 +867,14 @@ class LSldapObject {
if (!$displayFormat) { if (!$displayFormat) {
$displayFormat = $this -> getDisplayAttributes(); $displayFormat = $this -> getDisplayAttributes();
} }
// Filtre sur l'objet souhaité
$sfilter='(&';
$sfilter.=$this -> getObjectFilter();
$sfilter_end=')';
if(($filter)&&(!empty($filter))) {
if(substr($filter,0,1)=='(') {
$sfilter.=$filter;
}
else {
$sfilter.='('.$filter.')';
}
}
// fermeture du filtre
$sfilter.=$sfilter_end;
// Attributes // Attributes
$sparams['attributes'] = getFieldInFormat($displayFormat); $attrs = getFieldInFormat($displayFormat);
if(empty($sparams['attributes'])) { if(!empty($attrs)) {
$sparams['attributes'] = array($this -> config['rdn']); $sparams['attributes'] = $attrs;
} }
// Lancement de la recherche // Lancement de la recherche
$ret=$GLOBALS['LSldap'] -> search ($sfilter,$sbasedn,$sparams); $ret=$this -> search ($filter,$sbasedn,$sparams);
if (is_array($ret)) { if (is_array($ret)) {
foreach($ret as $obj) { foreach($ret as $obj) {