X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fplugins%2Fadmin%2Fdepartments%2Fclass_departmentGeneric.inc;h=78e514f1e2af041e3b302cd4d85cb3c5cc4e9713;hb=10100c5c8d92e45a0719bc321a3767f65966d9d7;hp=e851984322288ea4f5b5a4a2355e27b20b6d345b;hpb=d9a99d65c0a2747863478c63ad60fa9d9fd075b0;p=gosa.git diff --git a/gosa-core/plugins/admin/departments/class_departmentGeneric.inc b/gosa-core/plugins/admin/departments/class_departmentGeneric.inc index e85198432..78e514f1e 100644 --- a/gosa-core/plugins/admin/departments/class_departmentGeneric.inc +++ b/gosa-core/plugins/admin/departments/class_departmentGeneric.inc @@ -36,7 +36,7 @@ class department extends plugin var $gosaUnitTag= ""; var $view_logged = FALSE; - var $type ="ou"; + var $type ="organizationalUnit"; var $namingAttr = "ou"; /* Headpage attributes */ @@ -47,14 +47,38 @@ class department extends plugin /* attribute list for save action */ var $attributes= array("ou", "description", "businessCategory", "st", "l", "postalAddress", "telephoneNumber", "facsimileTelephoneNumber", "gosaUnitTag"); - var $objectclasses= array("top", "gosaDepartment", "organizationalUnit"); - var $initially_was_tagged = false; + /* Do not append the structural object classes here, they are added dynamically in the constructor */ + var $objectclasses= array("top", "gosaDepartment"); + var $structuralOC = array("organizationalUnit"); + + var $initially_was_tagged = false; var $orig_base = ""; var $orig_ou = ""; function department (&$config, $dn) { + /* Add the default structural obejct class 'locality' if this is a new entry + */ + $ldap = $config->get_ldap_link(); + $ldap->cd($config->current['BASE']); + if($dn == "" || $dn == "new" || !$ldap->dn_exists($dn)){ + $this->objectclasses = array_merge($this->structuralOC,$this->objectclasses); + }else{ + $ldap->cat($dn, array("structuralObjectClass")); + $attrs= $ldap->fetch(); + if(isset($attrs['structuralObjectClass']['count'])){ + for($i = 0 ; $i < $attrs['structuralObjectClass']['count'] ; $i++){ + $this->objectclasses[] = $attrs['structuralObjectClass'][$i]; + } + }else{ + + /* Could not detect structural object class for this object, fall back to the default 'locality' + */ + $this->objectclasses = array_merge($this->structuralOC,$this->objectclasses); + } + } + $this->objectclasses = array_unique($this->objectclasses); plugin::plugin($config, $dn); $this->is_account= TRUE; @@ -159,9 +183,8 @@ class department extends plugin }else{ $tmp = array(); foreach($bases as $dn=>$base){ - $fixed = str_replace("/","\\",$this->dn); /* Only attach departments which are not a subtree of this one */ - if(!preg_match("/".$fixed."/",$dn)){ + if(!preg_match("/".preg_quote($this->dn)."/",$dn)){ $tmp[$dn]=$base; } } @@ -186,7 +209,7 @@ class department extends plugin $dep_types = departmentManagement::get_support_departments(); $tpl =""; foreach($dep_types as $key => $data){ - if($data['ATTR'] == $this->type){ + if($data['OC'] == $this->type){ $tpl = $data['TPL']; break; } @@ -254,15 +277,15 @@ class department extends plugin /* Save tagging flag */ if ($this->acl_is_writeable("gosaUnitTag")){ - if (isset($_POST['gosaUnitTag'])){ + if (isset($_POST['is_administrational_unit'])){ $this->is_administrational_unit= true; } else { $this->is_administrational_unit= false; } } - /* If this is the root directory service entry (rootDSE) - then avoid changing the naming attribute of this entry. + /* If this is the root directory service entry then avoid + changing the naming attribute of this entry. */ if($this->dn == $this->config->current['BASE']){ $this->$nA = $old_nA; @@ -369,20 +392,18 @@ class department extends plugin $this->skipTagging = TRUE; plugin::save(); - /* Remove tag information if needed */ if (!$this->is_administrational_unit && $this->initially_was_tagged){ $tmp= array(); /* Remove gosaAdministrativeUnit from this plugin */ - $has_unit_tag= false; foreach($this->attrs['objectClass'] as $oc){ + if (preg_match("/^gosaAdministrativeUnitTag$/i", $oc)){ + continue; + } if (!preg_match("/^gosaAdministrativeUnit$/i", $oc)){ $tmp[]= $oc; } - if (preg_match("/^gosaAdministrativeUnitTag$/i", $oc)){ - $has_unit_tag= true; - } } $this->attrs['objectClass']= $tmp; $this->attrs['gosaUnitTag']= array(); @@ -433,7 +454,7 @@ class department extends plugin '; - echo "

".sprintf(_("Tagging '%s'."),"".@LDAP::fix($this->dn)."")."

"; + echo "

".sprintf(_("Tagging '%s'."),"".LDAP::fix($this->dn)."")."

"; } $add= $this->is_administrational_unit; @@ -467,7 +488,7 @@ class department extends plugin } /* This one matches with the latter part. Break and don't fix this entry */ - if (preg_match('/(^|,)'.normalizePreg($key).'$/', $attrs['dn'])){ + if (preg_match('/(^|,)'.preg_quote($key, '/').'$/', $attrs['dn'])){ $fix= false; break; } @@ -487,9 +508,13 @@ class department extends plugin if(!$OnlySetTagFlag){ $this->must_be_tagged = FALSE; echo '

 

'; - echo "
-
-
"; + echo "
". + "
". + "
". + "". + "". + "
". + "
"; echo "" ; } } @@ -510,7 +535,7 @@ class department extends plugin '; - echo "

".sprintf(_("Moving '%s' to '%s'"),"".@LDAP::fix($src_dn)."","".@LDAP::fix($dst_dn)."")."

"; + echo "

".sprintf(_("Moving '%s' to '%s'"),"".LDAP::fix($src_dn)."","".LDAP::fix($dst_dn)."")."

"; /* Check if the destination entry exists */ @@ -519,9 +544,9 @@ class department extends plugin /* Check if destination exists - abort */ $ldap->cat($dst_dn, array('dn')); if ($ldap->fetch()){ - trigger_error("Recursive_move ".@LDAP::fix($dst_dn)." already exists.", + trigger_error("Recursive_move ".LDAP::fix($dst_dn)." already exists.", E_USER_WARNING); - echo sprintf("Recursive_move: '%s' already exists", @LDAP::fix($dst_dn))."
"; + echo sprintf("Recursive_move: '%s' already exists", LDAP::fix($dst_dn))."
"; return (FALSE); } @@ -546,12 +571,12 @@ class department extends plugin $dst= preg_replace("/".str_replace("\\","\\\\",$src_dn)."$/", "$dst_dn", $object); $dst= str_replace($src_dn,$dst_dn,$object); - echo ""._("Object").": ".@LDAP::fix($src)."
"; + echo ""._("Object").": ".LDAP::fix($src)."
"; $this->update_acls($object, $dst,TRUE); if (!$this->copy($src, $dst)){ - echo "
".sprintf(_("FAILED to copy %s, aborting operation"),@LDAP::fix($src))."
"; + echo "
".sprintf(_("FAILED to copy %s, aborting operation"),LDAP::fix($src))."
"; return (FALSE); } echo "" ; @@ -586,7 +611,7 @@ class department extends plugin "plSelfModify" => FALSE, "plPriority" => 0, "plDepends" => array(), - "plSection" => array("admin"), + "plSection" => array("administration"), "plCategory" => array("department" => array("objectClass" => "gosaDepartment", "description" => _("Departments"))), "plProvidedAcls" => array( @@ -625,7 +650,7 @@ class department extends plugin } /* This one matches with the latter part. Break and don't fix this entry */ - if (preg_match('/(^|,)'.normalizePreg($key).'$/', $dn)){ + if (preg_match('/(^|,)'.preg_quote($key, '/').'$/', $dn)){ @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, "DEBUG: Possibly relevant: $key", "Tagging"); $relevant[strlen($key)]= $ntag; continue; @@ -652,14 +677,14 @@ class department extends plugin $attrs= $ldap->fetch(); if(isset($attrs['gosaUnitTag'][0]) && $attrs['gosaUnitTag'][0] == $tag){ if ($show) { - echo sprintf(_("Object '%s' is already tagged"), @LDAP::fix($dn))."
"; + 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))."
"; + echo sprintf(_("Adding tag (%s) to object '%s'"), $tag, LDAP::fix($dn))."
"; flush(); } $nattrs= array("gosaUnitTag" => $tag); @@ -691,7 +716,7 @@ class department extends plugin } if (count($attrs)){ if ($show){ - echo sprintf(_("Removing tag from object '%s'"), @LDAP::fix($dn))."
"; + echo sprintf(_("Removing tag from object '%s'"), LDAP::fix($dn))."
"; flush(); } $nattrs= array("gosaUnitTag" => array());