Code

Followup commit for #774
[gosa.git] / trunk / gosa-plugins / fai / admin / fai / class_askClassName.inc
index 6b9c49649e97ad30f53ec4ed00244fe5b4cbd324..7cac6536d9e0fb4ee7fe594fac025cea642661ae 100644 (file)
@@ -142,6 +142,11 @@ class askClassName extends plugin
       $message[] = msgPool::invalid(_("Name"),preg_replace("/ /","_",$this->ClassName),"/[^_]/");
     }
 
+    if(preg_match("/^-/", $this->ClassName)) {
+      $message[] = sprintf(_("The specified classname '%s' is invalid. Classnames must not start with a dash."), $this->ClassName);
+
+    }
+
     if($this->ClassName == ""){
       $message[]= msgPool::required(_("Name"));
     }
@@ -149,33 +154,41 @@ class askClassName extends plugin
     if(in_array($this->ClassName,$this->forbidden)){
       $message[]= msgPool::duplicated(_("Name"));
     }
-
-    /* Check if the given ClassName is already used in another administrative unit */
-    $parent_tag = $this->get_gosaUnitTag($this->parent->base);
-
-    $ldap= $this->config->get_ldap_link();
-    $filter = "(&(cn=".$this->ClassName.")(!(gosaUnitTag=".$parent_tag.")))";
-    $ldap->search($filter, array("dn","gosaUnitTag"));
-
-    if ($ldap->count() > 0) {
-      $entry = $ldap->fetch();
-
-      /* Find out which administrative unit is using the classname */
-      $ldap->cd($this->config->current['BASE']);
-      $filter = "(&(objectClass=gosaAdministrativeUnit)(gosaUnitTag=".$entry['gosaUnitTag'][0]."))";
-      $ldap->search($filter, array('dn', 'ou'));
+    else {
+      /* Check if the given ClassName is already used in another administrative unit */
+      switch($this->objectClass) {
+        case "FAIpartitionTable":  $rdn = get_ou('faiPartitionRDN'); break;
+        case "FAIpackageList"   :  $rdn = get_ou('faiPackageRDN'); break;
+        case "FAIscript"        :  $rdn = get_ou('faiScriptRDN'); break;
+        case "FAIvariable"      :  $rdn = get_ou('faiVariableRDN'); break;
+        case "FAIhook"          :  $rdn = get_ou('faiHookRDN'); break;
+        case "FAIprofile"       :  $rdn = get_ou('faiProfileRDN'); break;
+        case "FAItemplate"      :  $rdn = get_ou('faiTemplateRDN'); break;
+      }
+      $ldap= $this->config->get_ldap_link();
+      $filter = "(&(cn=".$this->ClassName.")(!(FAIstate=|removed)))";
+      $base = $rdn . $this->parent->fai_release;
+      $ldap->cd($base);
+      $ldap->search($filter, array("dn","gosaUnitTag"));
 
       if ($ldap->count() > 0) {
         $entry = $ldap->fetch();
-        $used_by = $entry['ou'][0];
-      } else {
-        $used_by = $entry['gosaUnitTag'][0];
-      }
-      
-      $message[]= sprintf(_("This FAI class name is already in use by the administrative unit '%s'."), $used_by);
 
-     }
+        /* Find out which administrative unit is using the classname */
+        $ldap->cd($this->config->current['BASE']);
+        $filter = "(&(objectClass=gosaAdministrativeUnit)(gosaUnitTag=".$entry['gosaUnitTag'][0]."))";
+        $ldap->search($filter, array('dn', 'ou'));
+
+        if ($ldap->count() > 0) {
+          $entry = $ldap->fetch();
+          $used_by = $entry['ou'][0];
+        } else {
+          $used_by = $entry['gosaUnitTag'][0];
+        }
+        
+        $message[]= sprintf(_("This FAI class name is already in use by the administrative unit '%s'."), $used_by);
+      }
+    }
 
     return ($message);
   }