note 34576 added to ref.ldap
| From: | Deplacer at rack1 dot php dot net | Date: | Thu, 31 Jul 2003 07:55:53 +0000 |
| Subject: | note 34576 added to ref.ldap | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-53051@lists.php.net to get a copy of this message | ||
Fonction récursive qui permet deplacer un noeud complet LDAP et tous ses fils, avec les fonctions
PHP.
A condition d'avoir les droits LDAP pour le faire.
Rmq : $conn = link Identifier
/**
* entite_ldap::Deplace_Arbre()
* Cette fonction deplace une partie de l'annuaire LDAP
* en creant de nouvelles entrees et en effacant les anciennes.
* @param $old_dn ,DN d'origine
* @param $conn ,identifiant de connection du serveur LDAP
* @param $new_dn , nouveau DN
* @return
*
**/
function Deplace_Arbre($old_dn,$conn,$new_dn) {
$new_pere=@ldap_explode_dn($new_dn,1);
//echo "ANCIEN DN : ".$old_dn."<br>";
//echo "NEW DN : ".$new_dn."<br>";
/* Recherche des informations propre au DN origine -> $old_dn */
$search_result = ldap_search($this->ldap,$old_dn ,"(objectclass=*)");
$allValues = ldap_get_entries($this->ldap, $search_result);
while (list($entree,$valeur)=each($allValues[0])) {
//$tab_entree[$entree]=$valeur;
if ((!(ereg("[0-9]+",$entree))) && ($entree!="dn") &&
($entree!="count"))
{//on recupere les valeurs de l'ancienne entree
if ($valeur["count"]==1)
{
$tab_entree[$entree]=$valeur[0];
}
else
{
for ($i=0;$i<$valeur["count"];$i++)
{
$tab_entree[$entree][$i]=$valeur[$i];
}//fin for
}//fin else
}//fin if (!(ereg("[0-9]+",$entree)))
}
/* Creation d'une nouvelle entrée */
$tmp=@ldap_add($conn,$new_dn,$tab_entree);
/* On regarde si la base a des fils */
$rep_arbre=@ldap_list($conn,$old_dn,"objectclass=*");
$nb_fils=@ldap_count_entries($conn,$rep_arbre);
$arbre=@ldap_get_entries($conn,$rep_arbre);
for ($i=0;$i<$nb_fils;$i++) {
//on recupere les infos du DN fils
$info_dn_fils = @ldap_explode_dn( $arbre[$i]["dn"] ,0);
//on deplace le sous-arbre de l'entree que l'on vient de copier
$this->Deplace_Arbre($arbre[$i]["dn"],$conn,
$info_dn_fils[0].",".$new_dn );
if (!$rep_eff) {
$GLOBALS["msg_err"].="Erreur lors de l'effacement de
".$arbre[$i]["dn"].":".@ldap_error($conn_id)."<br>\n";
}
}//fin for
//on efface l'entree même si pas de fils
$rep_eff=@ldap_delete($conn,$old_dn);
}//fin Deplace_Arbre
----
Manual Page -- http://www.php.net/manual/en/ref.ldap.php
Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+34576
Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+34576&report=yes
Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+34576&report=yes