X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_plugin.inc;h=e33b2ec613feebaad84cdcd40bb6e3b1060ac42f;hb=b4517f3f06a0f04435fd4f889c04f946de8f3e45;hp=9e5d706d37f14aa2622d94672bf50fc09d62adf6;hpb=b97327caa07546659cc3baeb12c36dc1b8f9c23d;p=gosa.git diff --git a/gosa-core/include/class_plugin.inc b/gosa-core/include/class_plugin.inc index 9e5d706d3..e33b2ec61 100644 --- a/gosa-core/include/class_plugin.inc +++ b/gosa-core/include/class_plugin.inc @@ -111,10 +111,6 @@ class plugin var $acl_base= ""; var $acl_category= ""; - /* Plugin identifier */ - var $plHeadline= ""; - var $plDescription= ""; - /* This can be set to render the tabulators in another stylesheet */ var $pl_notify= FALSE; @@ -216,7 +212,7 @@ class plugin unset($this->saved_attributes[$index]); continue; } - if ($this->saved_attributes[$index]["count"] == 1){ + if (isset($this->saved_attributes[$index][0]) || $this->saved_attributes[$index]["count"] == 1){ $tmp= $this->saved_attributes[$index][0]; unset($this->saved_attributes[$index]); $this->saved_attributes[$index]= $tmp; @@ -318,9 +314,6 @@ class plugin $data = ""; } $this->$val= $data; - //echo "".$val."
"; - }else{ - //echo "".$val."
"; } } } @@ -364,6 +357,8 @@ class plugin } } + /* Handle tagging */ + $this->tag_attrs(&$this->attrs); } @@ -822,7 +817,7 @@ class plugin { /* Rename dn in possible object groups */ $ldap= $this->config->get_ldap_link(); - $ldap->search('(&(objectClass=gosaGroupOfNames)(member='.@LDAP::fix($src_dn).'))', + $ldap->search('(&(objectClass=gosaGroupOfNames)(member='.@LDAP::prepare4filter($src_dn).'))', array('cn')); while ($attrs= $ldap->fetch()){ $og= new ogroup($this->config, $ldap->getDN()); @@ -860,6 +855,11 @@ class plugin function move($src_dn, $dst_dn) { + /* Do not copy if only upper- lowercase has changed */ + if(strtolower($src_dn) == strtolower($dst_dn)){ + return(TRUE); + } + /* Copy source to destination */ if (!$this->copy($src_dn, $dst_dn)){ return (FALSE); @@ -974,26 +974,18 @@ class plugin $tmp = $source[$var][$i]; } $this->$var = $tmp; -# echo $var."=".$tmp."
"; }else{ $this->$var = $source[$var][0]; -# echo $var."=".$source[$var][0]."
"; } }else{ $this->$var= $source[$var]; -# echo $var."=".$source[$var]."
"; } } } } - - function handle_object_tagging($dn= "", $tag= "", $show= false) + function tag_attrs($at, $dn= "", $tag= "", $show= false) { - //FIXME: How to optimize this? We have at least two - // LDAP accesses per object. It would be a good - // idea to have it integrated. - /* No dn? Self-operation... */ if ($dn == ""){ $dn= $this->dn; @@ -1031,71 +1023,17 @@ class plugin } } + /* Remove tags that may already be here... */ + remove_objectClass("gosaAdministrativeUnitTag", &$at); + if (isset($at['gosaUnitTag'])){ + unset($at['gosaUnitTag']); + } /* Set tag? */ if ($tag != ""){ - /* Set objectclass and attribute */ - $ldap= $this->config->get_ldap_link(); - $ldap->cat($dn, array('gosaUnitTag', 'objectClass')); - $attrs= $ldap->fetch(); - if(isset($attrs['gosaUnitTag'][0]) && $attrs['gosaUnitTag'][0] == $tag){ - if ($show) { - echo sprintf(_("Object '%s' is already tagged"), @LDAP::fix($dn))."
"; - flush(); - } - return; - } - if (count($attrs)){ - if ($show){ - echo sprintf(_("Adding tag (%s) to object '%s'"), $tag, @LDAP::fix($dn))."
"; - flush(); - } - $nattrs= array("gosaUnitTag" => $tag); - $nattrs['objectClass']= array(); - for ($i= 0; $i<$attrs['objectClass']['count']; $i++){ - $oc= $attrs['objectClass'][$i]; - if ($oc != "gosaAdministrativeUnitTag"){ - $nattrs['objectClass'][]= $oc; - } - } - $nattrs['objectClass'][]= "gosaAdministrativeUnitTag"; - $ldap->cd($dn); - $ldap->modify($nattrs); - show_ldap_error($ldap->get_error(), sprintf(_("Handle object tagging with dn '%s' failed."),$dn)); - } else { - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "Not tagging ($tag) $dn - seems to have moved away", "Tagging"); - } - - } else { - /* Remove objectclass and attribute */ - $ldap= $this->config->get_ldap_link(); - $ldap->cat($dn, array('gosaUnitTag', 'objectClass')); - $attrs= $ldap->fetch(); - if (isset($attrs['objectClass']) && !in_array_ics("gosaAdministrativeUnitTag", $attrs['objectClass'])){ - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "$dn is not tagged", "Tagging"); - return; - } - if (count($attrs)){ - if ($show){ - echo sprintf(_("Removing tag from object '%s'"), @LDAP::fix($dn))."
"; - flush(); - } - $nattrs= array("gosaUnitTag" => array()); - $nattrs['objectClass']= array(); - for ($i= 0; $i<$attrs['objectClass']['count']; $i++){ - $oc= $attrs['objectClass'][$i]; - if ($oc != "gosaAdministrativeUnitTag"){ - $nattrs['objectClass'][]= $oc; - } - } - $ldap->cd($dn); - $ldap->modify($nattrs); - show_ldap_error($ldap->get_error(), sprintf(_("Handle object tagging with dn '%s' failed."),$dn)); - } else { - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "Not removing tag ($tag) $dn - seems to have moved away", "Tagging"); - } + add_objectClass("gosaAdministrativeUnitTag", &$at); + $at['gosaUnitTag']= $tag; } - } @@ -1575,12 +1513,12 @@ class plugin if(isset($this->base) && isset($this->config->idepartments[$this->base])){ $deps[$this->base] = $this->config->idepartments[$this->base]; }else{ - echo "No default base found. ".$this->base."
"; + trigger_error("No default base found in class ".get_class($this).". ".$this->base); } - return($deps); } + /* This function modifies object acls too, if an object is moved. * $old_dn specifies the actually used dn * $new_dn specifies the destiantion dn @@ -1658,14 +1596,10 @@ class plugin /* Acls for this object must be adjusted */ if($found){ - if($output_changes){ - echo "". - _("Changing ACL dn")." : 
 -"._("from")."  ". - $old_dn. - "
 -"._("to")." ". - $new_dn. - "

"; - } + $debug_info= _("Changing ACL dn")." : 
 -"._("from")."  ". + $old_dn."
 -"._("to")." ".$new_dn."
"; + @DEBUG (DEBUG_ACL, __LINE__, __FUNCTION__, __FILE__,$debug_info,"ACL"); + $update[$attrs['dn']] =array(); foreach($acls as $acl){ $update[$attrs['dn']]['gosaAclEntry'][] = $acl;