From 292ae6f5c9c63240443ea67e8c4f664afcb005dd Mon Sep 17 00:00:00 2001 From: hickert Date: Tue, 15 Jan 2008 10:15:45 +0000 Subject: [PATCH] Closes #310 Moved copy_FAI_resource_recursive to faiManagement. It is only used there. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@8346 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/include/class_ldap.inc | 196 ----------------- .../plugins/admin/fai/class_faiManagement.inc | 207 +++++++++++++++++- 2 files changed, 201 insertions(+), 202 deletions(-) diff --git a/gosa-core/include/class_ldap.inc b/gosa-core/include/class_ldap.inc index 53cdac820..625d052cd 100644 --- a/gosa-core/include/class_ldap.inc +++ b/gosa-core/include/class_ldap.inc @@ -1261,202 +1261,6 @@ class LDAP{ return ($result); } - - } - - -/*! \brief Create a new FAI branch. - * @param $sourcedn String The source release dn - * @param $destinationdn String The destination dn - * @param $destinationName String The name of the new release - * @param $type String The release type (freeze/branch) - * @param $is_first Boolean Use to identify the first func. call when recursivly called. - * @param $depth Integer Current depth of recursion. - */ -function copy_FAI_resource_recursive($sourcedn,$destinationdn,$destinationName,$type="branch",$is_first = true,$depth=0) -{ - global $config; - error_reporting(E_ALL | E_STRICT); - $ldap = $config->get_ldap_link(); - $basedn = $config->current['BASE']; - $delarray = array(); - - /* The following code will output a status string - * for each handled object, in a seperate iframe. - */ - - - /* Display current action information. - */ - if($is_first){ - echo "

".sprintf(_("Creating copy of %s"),"".LDAP::fix($sourcedn)."")."

"; - }else{ - if(preg_match("/^ou=/",$sourcedn)){ - echo "

"._("Processing")." ".LDAP::fix($destinationdn)."

"; - }else{ - $tmp = split(",",$sourcedn); - echo " "._("Object").": "; - $deststr = LDAP::fix($destinationdn); - if(strlen($deststr) > 96){ - $deststr = substr($deststr,0,96)."..."; - } - echo $deststr."
"; - } - } - /* .. immediately display infos */ - flush(); - - - - /* Check if destination entry already exists - */ - $ldap->cat($destinationdn); - if($ldap->count()){ - echo _("Could not create new release, the destination dn is already in use."); - return; - }else{ - - $ldap->clearResult(); - - /* Get source entry - * if it does not exist, abort here. - */ - $ldap->cd($basedn); - $ldap->cat($sourcedn); - $attr = $ldap->fetch(); - if((!$attr) || (count($attr)) ==0) { - echo _("Error while fetching source dn - aborted!"); - return; - } - - /* The current object we want to create is an department. - * Create the department and add the FAIbranch tag. - */ - if(in_array("organizationalUnit",$attr['objectClass'])){ - $attr['dn'] = LDAP::convert($destinationdn); - $ldap->cd($basedn); - $ldap->create_missing_trees($destinationdn); - $ldap->cd($destinationdn); - - /* If is first entry, append FAIbranch to department entry */ - if($is_first){ - $ldap->cat($destinationdn); - $attr= $ldap->fetch(); - - /* Filter unneeded informations */ - foreach($attr as $key => $value){ - if(is_numeric($key)) unset($attr[$key]); - if(isset($attr[$key]['count'])){ - if(is_array($attr[$key])){ - unset($attr[$key]['count']); - } - } - } - - unset($attr['count']); - unset($attr['dn']); - - /* Add marking attribute */ - $attr['objectClass'][] = "FAIbranch"; - - /* Add this entry */ - $ldap->modify($attr); - } - }else{ - - /* Replicate all relevant FAI objects here. - * FAI objects, Apps and Mimetypes. - * Get all attributes as binary value, to ensure that Icon, File template aso - * are created correctly. - */ - foreach($attr as $key => $value){ - if(in_array($key ,array("FAItemplateFile","FAIscript", "gotoLogonScript", "gosaApplicationIcon","gotoMimeIcon"))){ - $sr= ldap_read($ldap->cid, LDAP::fix($sourcedn), "$key=*", array($key)); - $ei= ldap_first_entry($ldap->cid, $sr); - if ($tmp= @ldap_get_values_len($ldap->cid, $ei,$key)){ - $attr[$key] = $tmp; - } - } - - if(is_numeric($key)) unset($attr[$key]); - if(isset($attr[$key]['count'])){ - if(is_array($attr[$key])){ - unset($attr[$key]['count']); - } - } - } - unset($attr['count']); - unset($attr['dn']); - - /* Add FAIstate attribute to all FAI objects. - */ - if((!in_array("gosaApplication" , $attr['objectClass'])) && (!in_array("gotoMimeType", $attr['objectClass']))){ - $attr['FAIdebianRelease'] = $destinationName; - if($type=="branch"){ - $attr['FAIstate'] ="branch"; - }elseif($type=="freeze"){ - $attr['FAIstate'] ="freeze"; - }else{ - msg_dialog::display(_("Internal error"), sprintf(_("FAIstate '%s' is unknown!"),$type), ERROR_DIALOG); - } - } - - /* Replace FAIdebianRelease with new release name. - */ - if(in_array("FAIpackageList" , $attr['objectClass'])){ - $attr['FAIdebianRelease'] = $destinationName; - } - - /* Add entry - */ - $ldap->cd($destinationdn); - $ldap->cat($destinationdn); - $a = $ldap->fetch(); - if(!count($a)){ - $ldap->add($attr); - } - - if($ldap->error != "Success"){ - - /* Some error occurred */ - print "---------------------------------------------"; - print $ldap->get_error()."
"; - print $sourcedn."
"; - print $destinationdn."
"; - print_a( $attr); - exit(); - } - } - } - - echo "" ; - - /* Prepare for recursive copy. - * Get all object within the source dn and - * call the recursive copy for each. - */ - $ldap->ls ("(objectClass=*)",$sourcedn); - while ($ldap->fetch()){ - $deldn= $ldap->getDN(); - $delarray[$deldn]= strlen($deldn); - } - asort ($delarray); - reset ($delarray); - $depth ++; - foreach($delarray as $dn => $bla){ - if($dn != $destinationdn){ - $ldap->cd($basedn); - $item = $ldap->fetch($ldap->cat($dn)); - if(!in_array("FAIbranch",$item['objectClass'])){ - copy_FAI_resource_recursive($dn,str_replace($sourcedn,$destinationdn,$dn),$destinationName,$type,false,$depth); - } - } - } - if($is_first){ - echo "

 

"; - } -} - // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?> diff --git a/gosa-core/plugins/admin/fai/class_faiManagement.inc b/gosa-core/plugins/admin/fai/class_faiManagement.inc index 1c9b4347e..31f7c99cc 100644 --- a/gosa-core/plugins/admin/fai/class_faiManagement.inc +++ b/gosa-core/plugins/admin/fai/class_faiManagement.inc @@ -598,8 +598,7 @@ class faiManagement extends plugin if($ldap->count()){ $ldap->cd ($appdst); $ldap->recursive_remove(); - $ldap->cd ($this->config->current['BASE']); - $ldap->copy_FAI_resource_recursive($appsrc,$appdst,$NewReleaseName,$type,true); + $this->copy_FAI_resource_recursive($appsrc,$appdst,$NewReleaseName,$type,true); } /* Duplicate mime types @@ -608,8 +607,7 @@ class faiManagement extends plugin if($ldap->count()){ $ldap->cd ($mimedst); $ldap->recursive_remove(); - $ldap->cd ($this->config->current['BASE']); - $ldap->copy_FAI_resource_recursive($mimesrc,$mimedst,$NewReleaseName,$type,true); + $this->copy_FAI_resource_recursive($mimesrc,$mimedst,$NewReleaseName,$type,true); } $attr = array(); @@ -629,8 +627,7 @@ class faiManagement extends plugin */ // $ldap->cd ("ou=".$name.",".$baseToUse); // $ldap->recursive_remove(); - // $ldap->cd ($this->config->current['BASE']); - // $ldap->copy_FAI_resource_recursive($baseToUse,"ou=".$name.",".$baseToUse,$NewReleaseName,$type,true); + // $this->copy_FAI_resource_recursive($baseToUse,"ou=".$name.",".$baseToUse,$NewReleaseName,$type,true); echo "

@@ -1146,6 +1143,204 @@ class faiManagement extends plugin } + /*! \brief Create a new FAI branch. + * @param $sourcedn String The source release dn + * @param $destinationdn String The destination dn + * @param $destinationName String The name of the new release + * @param $type String The release type (freeze/branch) + * @param $is_first Boolean Use to identify the first func. call when recursivly called. + * @param $depth Integer Current depth of recursion. + */ + function copy_FAI_resource_recursive($sourcedn,$destinationdn,$destinationName,$type="branch",$is_first = true,$depth=0) + { + global $config; + error_reporting(E_ALL | E_STRICT); + $ldap = $config->get_ldap_link(); + $basedn = $config->current['BASE']; + $delarray = array(); + + /* The following code will output a status string + * for each handled object, in a seperate iframe. + */ + + + /* Display current action information. + */ + if($is_first){ + echo "

".sprintf(_("Creating copy of %s"),"".LDAP::fix($sourcedn)."")."

"; + }else{ + if(preg_match("/^ou=/",$sourcedn)){ + echo "

"._("Processing")." ".LDAP::fix($destinationdn)."

"; + }else{ + $tmp = split(",",$sourcedn); + echo " "._("Object").": "; + $deststr = LDAP::fix($destinationdn); + if(strlen($deststr) > 96){ + $deststr = substr($deststr,0,96)."..."; + } + echo $deststr."
"; + } + } + /* .. immediately display infos */ + flush(); + + /* Check if destination entry already exists + */ + $ldap->cat($destinationdn); + if($ldap->count()){ + echo _("Could not create new release, the destination dn is already in use."); + return; + }else{ + + $ldap->clearResult(); + + /* Get source entry + * if it does not exist, abort here. + */ + $ldap->cd($basedn); + $ldap->cat($sourcedn); + $attr = $ldap->fetch(); + if((!$attr) || (count($attr)) ==0) { + echo _("Error while fetching source dn - aborted!"); + return; + } + + /* The current object we want to create is an department. + * Create the department and add the FAIbranch tag. + */ + if(in_array("organizationalUnit",$attr['objectClass'])){ + $attr['dn'] = LDAP::convert($destinationdn); + $ldap->cd($basedn); + $ldap->create_missing_trees($destinationdn); + $ldap->cd($destinationdn); + + /* If is first entry, append FAIbranch to department entry */ + if($is_first){ + $ldap->cat($destinationdn); + $attr= $ldap->fetch(); + + /* Filter unneeded informations */ + foreach($attr as $key => $value){ + if(is_numeric($key)) unset($attr[$key]); + if(isset($attr[$key]['count'])){ + if(is_array($attr[$key])){ + unset($attr[$key]['count']); + } + } + } + + unset($attr['count']); + unset($attr['dn']); + + /* Add marking attribute */ + $attr['objectClass'][] = "FAIbranch"; + + /* Add this entry */ + $ldap->modify($attr); + } + }else{ + + /* Replicate all relevant FAI objects here. + * FAI objects, Apps and Mimetypes. + * Get all attributes as binary value, to ensure that Icon, File template aso + * are created correctly. + */ + foreach($attr as $key => $value){ + +# Seems to be obsolete 01.2008 Hickert +# if(in_array($key ,array("FAItemplateFile","FAIscript", "gotoLogonScript", "gosaApplicationIcon","gotoMimeIcon"))){ + if(in_array($key ,array("gotoLogonScript", "gosaApplicationIcon","gotoMimeIcon"))){ + $sr= ldap_read($ldap->cid, LDAP::fix($sourcedn), "$key=*", array($key)); + $ei= ldap_first_entry($ldap->cid, $sr); + if ($tmp= @ldap_get_values_len($ldap->cid, $ei,$key)){ + $attr[$key] = $tmp; + } + } + + if(is_numeric($key)) unset($attr[$key]); + if(isset($attr[$key]['count'])){ + if(is_array($attr[$key])){ + unset($attr[$key]['count']); + } + } +} +unset($attr['count']); +unset($attr['dn']); + +# Seems to be obsolete 01.2008 Hickert +# /* Add FAIstate attribute to all FAI objects. +# */ +# if((!in_array("gosaApplication" , $attr['objectClass'])) && (!in_array("gotoMimeType", $attr['objectClass']))){ +# $attr['FAIdebianRelease'] = $destinationName; +# if($type=="branch"){ +# $attr['FAIstate'] ="branch"; +# }elseif($type=="freeze"){ +# $attr['FAIstate'] ="freeze"; +# }else{ +# msg_dialog::display(_("Internal error"), sprintf(_("FAIstate '%s' is unknown!"),$type), ERROR_DIALOG); +# } +# } +# +# /* Replace FAIdebianRelease with new release name. +# */ +# if(in_array("FAIpackageList" , $attr['objectClass'])){ +# $attr['FAIdebianRelease'] = $destinationName; +# } + +/* Add entry + */ +$ldap->cd($destinationdn); +$ldap->cat($destinationdn); + +$a = $ldap->fetch(); +if(!count($a)){ + $ldap->add($attr); +} + +if($ldap->error != "Success"){ + + /* Some error occurred */ + print "---------------------------------------------"; + print $ldap->get_error()."
"; + print $sourcedn."
"; + print $destinationdn."
"; + print_a( $attr); + exit(); +} +} +} + +echo "" ; + +/* Prepare for recursive copy. + * Get all object within the source dn and + * call the recursive copy for each. + */ +$ldap->ls ("(objectClass=*)",$sourcedn); +while ($ldap->fetch()){ + $deldn= $ldap->getDN(); + $delarray[$deldn]= strlen($deldn); +} +asort ($delarray); +reset ($delarray); +$depth ++; +foreach($delarray as $dn => $bla){ + if($dn != $destinationdn){ + $ldap->cd($basedn); + $item = $ldap->fetch($ldap->cat($dn)); + if(!in_array("FAIbranch",$item['objectClass'])){ + $this->copy_FAI_resource_recursive($dn,str_replace($sourcedn,$destinationdn,$dn),$destinationName,$type,false,$depth); + } + } +} +if($is_first){ + echo "

 

"; +} +} + + + + /* Return plugin informations for acl handling */ static function plInfo() { -- 2.30.2