From c0c66ae94817d2657f087b712a585836d1c35551 Mon Sep 17 00:00:00 2001 From: hickert Date: Fri, 14 May 2010 08:32:21 +0000 Subject: [PATCH] Added seperate migrate class for FAI objects -It is a bit tricky to keep the release container git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@18471 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../fai/migration/class_migrateFaiRDN.inc | 160 ++++++++++++++++++ .../migration/class_migrate_faiBaseRDN.inc | 2 +- .../migration/class_migrate_faiHookRDN.inc | 2 +- .../migration/class_migrate_faiPackageRDN.inc | 2 +- .../class_migrate_faiPartitionRDN.inc | 2 +- .../migration/class_migrate_faiProfileRDN.inc | 2 +- .../migration/class_migrate_faiScriptRDN.inc | 2 +- .../class_migrate_faiTemplateRDN.inc | 2 +- .../class_migrate_faiVariableRDN.inc | 2 +- 9 files changed, 168 insertions(+), 8 deletions(-) create mode 100644 gosa-plugins/fai/admin/fai/migration/class_migrateFaiRDN.inc diff --git a/gosa-plugins/fai/admin/fai/migration/class_migrateFaiRDN.inc b/gosa-plugins/fai/admin/fai/migration/class_migrateFaiRDN.inc new file mode 100644 index 000000000..b832513b3 --- /dev/null +++ b/gosa-plugins/fai/admin/fai/migration/class_migrateFaiRDN.inc @@ -0,0 +1,160 @@ +property = &$property; + $this->config = &$config; + } + + function checkForIssues() + { + $this->found = array(); + $ldap= $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap2= $this->config->get_ldap_link(); + $ldap2->cd($this->config->current['BASE']); + + // If the userRDN wasn't empty, then only search for users inside of the old userRDN. + $initialValue = $this->prefix.$this->property->getValue().$this->suffix; + $targetValue = $this->prefix.$this->property->getValue(TRUE).$this->suffix; + + $dnMatch = ""; + if(!empty($initialValue)){ + foreach(preg_split("/,/", $initialValue) as $rdnPart){ + if(empty($rdnPart)) continue; + list($namingAttrs, $container) = preg_split("/=/",$rdnPart,2); + $container = trim($container,', '); + $dnMatch.= "({$namingAttrs}:dn:={$container})"; + } + } + + // Search for users + $filter = sprintf($this->filter,$dnMatch); + $ldap->search($filter,array('dn')); + $found = FALSE; + while($attrs = $ldap->fetch()){ + $dn = $attrs['dn']; + $dnTo = $dn; + + // If there intially was no userDN given then just add the new userRDN to the user dns + // and create the new container objects. + if(empty($initialValue)){ + list($namingAttrs, $container) = preg_split("/=/",$targetValue,2); + list($name, $container) = preg_split("/,/",$dn,2); + + // Ensure that we handle a valid gosaDepartment container. + while(!isset($this->config->idepartments[$container])){ + $container = preg_replace("/^[^,]*+,/","",$container); + } + + // Queue new containuer to be created. + if(!preg_match("/^".preg_quote($targetValue,'/i')."/", $container)){ + $dnTo = $name.",".$targetValue.$container; + if(!$ldap->dn_exists($targetValue.$container)){ + $this->found['add'][$targetValue.$container] = array(); + } + if($dn != $dnTo){ + $this->found['move'][] = array('from' => $dn, 'to' => $dnTo); + $found = TRUE; + } + } + } + + // If there intially was a userDN given then replace it with the new one. + if(!empty($initialValue)){ + + list($name, $container) = preg_split("/,/",$dn,2); + if(preg_match("/^".preg_quote($initialValue,'/i')."/", $container)){ + $container = preg_replace("/^".preg_quote($initialValue,'/')."/",$targetValue,$container); + + // Ensure that we handle a valid gosaDepartment container. + while(!isset($this->config->idepartments[$container])){ + $container = preg_replace("/^[^,]*+,/","",$container); + } + + + $dnTo = $name.",".$targetValue.$container; + if(!empty($targetValue) && !$ldap->dn_exists($targetValue.$container)){ + $this->found['add'][$targetValue.$container] = array(); + } + if($dn != $dnTo){ + $this->found['move'][] = array('from' => $dn, 'to' => $dnTo); + $found = TRUE; + } + } + } + } + return($found); + } + + function execute() + { + $str = ""; + if(count($this->found['add'])) { + $str.= "

"._("Objects that will be added")."

"; + foreach($this->found['add'] as $dn => $attrs){ + $str.= $dn."
"; + } + } + if(count($this->found['move'])) { + $str.= "

"._("Objects that will be moved")."

"; + $str.="
";
+            foreach($this->found['move'] as $id => $data){
+                $checked = (!isset($_POST["migrateNow".get_class($this)])) ? 'checked':'';
+                $str.= "";
+                $str.= sprintf(_("Moving object '%s' to '%s'"), $data['from'], $data['to'])."
"; + } + $str.="
"; + } + $str.= ""; + return($str); + } + + function save_object() + { + if(isset($_POST["migrateNow".get_class($this)])){ + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + + // Try to add the new container objects + foreach($this->found['add'] as $dn => $data){ + $ldap->cd($this->config->current['BASE']); + $ldap->create_missing_trees(ldap::convert($dn)); + } + + // Now move the objects to the new traget + $tmp = new plugin($this->config,NULL); + foreach($this->found['move'] as $id => $data){ + if(isset($_POST["migrateEntry_{$id}"])){ + $tmp->move($data['from'], $data['to']); + } + } + $this->checkForIssues(); + } + } + + function check() + { + return(array()); + } +} + + +?> diff --git a/gosa-plugins/fai/admin/fai/migration/class_migrate_faiBaseRDN.inc b/gosa-plugins/fai/admin/fai/migration/class_migrate_faiBaseRDN.inc index 5295af1ac..d1e748cff 100644 --- a/gosa-plugins/fai/admin/fai/migration/class_migrate_faiBaseRDN.inc +++ b/gosa-plugins/fai/admin/fai/migration/class_migrate_faiBaseRDN.inc @@ -1,5 +1,5 @@