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->property->getValue(); $targetValue = $this->property->getValue(TRUE); $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 $ldap->search("(&(objectClass=gosaAccount)(!(objectClass=sambaSamAccount)){$dnMatch})",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'])) ? 'checked':'';
                $str.= "";
                $str.= sprintf(_("Moving object '%s' to '%s'"), $data['from'], $data['to'])."
"; } $str.="
"; } $str.= ""; return($str); } function save_object() { if(isset($_POST['migrateNow'])){ $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 foreach($this->found['move'] as $id => $data){ if(isset($_POST["migrateEntry_{$id}"])){ $ldap->rename_dn($data['from'], $data['to']); } } $this->checkForIssues(); } } function check() { return(array()); } } ?>