Code

Apply patch for #3305
[gosa.git] / trunk / gosa-plugins / goto / admin / systems / goto / class_workstationStartup.inc
index d4349fa278fa84d1da840cf1e47aa835e1a7a24b..7b67379d7aaa7243a8db9dbc6bc29db005707e6b 100644 (file)
@@ -694,6 +694,18 @@ class workstartup extends plugin
 
   function remove_from_parent()
   {
+    /* Cancel if there's nothing to do here */
+    if ((!$this->acl_is_removeable())){
+      return;
+    }
+
+    /* Remove and write to LDAP */
+    plugin::remove_from_parent();
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->dn);
+    $this->cleanup();
+    $this->attrs['gotoModules'] = array();
+    $ldap->modify($this->attrs);
     $this->handle_post_events("remove");
     new log("remove","workstation/".get_class($this),$this->dn);
   }
@@ -991,7 +1003,7 @@ class workstartup extends plugin
     plugin::PrepareForCopyPaste($source);    
     $source_o = new workstartup ($this->config, $source['dn']);
     foreach(array("FAIclass","gotoModules", "gotoAutoFs", "gotoFilesystem",
-          "gotoKernelParameters","gotoShares") as $attr){
+          "gotoKernelParameters","gotoShares","gotoLdapServers", "gotoLdap_inherit") as $attr){
       $this->$attr = $source_o->$attr;
     }
   }
@@ -1044,6 +1056,44 @@ class workstartup extends plugin
           ));
   }
 
+  /* Function to find bad classes */
+  function update_bad_classes($release)
+  {
+
+    if(!isset($this->cache['BAD_CLASSES'][$release])) {
+      /* Find "bad" classes */
+      $ui = get_userinfo();
+      $ldap = $this->config->get_ldap_link();
+
+      /* Convert release name to a valid ldap uri component */
+      $release_components = split('/', $release);
+      $release_components = array_reverse($release_components);
+      for($i=0;$i<sizeof($release_components);$i++) {
+        $release_components[$i] = "ou=" . $release_components[$i];
+      }
+      $release_dn_part = join(',', $release_components);
+
+      /* Limit the base to the release in the faiBase */
+      $base = sprintf("%s,%s%s", $release_dn_part, get_ou('faiBaseRDN'), $this->config->current['BASE']);
+
+      /* Build a list of all fai classes, that don't have the unittag of the user
+       * and are not freezed or removed. The classes will be filtered by this
+       * list. Its needed to specify each objectClass (FAIpackageList etc.) because
+       * FAIClass would match sub-objects, too, which would lead to an array that
+       * is much bigger then needed */
+      $filter = sprintf('(&(|(objectClass=FAItemplate)(objectClass=FAIpackageList)(objectClass=FAIprofile)(objectClass=FAIscript)(objectClass=FAIpartitionTable)(objectClass=FAIHook)(objectClass=FAIvariable)(objectClass=FAItemplate))(&(!(gosaUnitTag=%s))(&(!(FAIstate=*removed*))(!(FAIstate=*freeze*)))))', $ui->gosaUnitTag);
+      $ldap->cd($base);
+      $ldap->search(sprintf("$filter", $ui->gosaUnitTag));
+        
+      $this->cache['BAD_CLASSES'][$release] = array(); 
+      while ($entry = $ldap->fetch()) {
+        $classname = $entry['cn'][0];
+        if (!in_array($classname, $this->cache['BAD_CLASSES'][$release])) {
+          array_push($this->cache['BAD_CLASSES'][$release], $classname);
+        }
+      }
+    } 
+   }
 
   /* Updates release dns 
    *  and reads all classes for the current release, 
@@ -1072,16 +1122,15 @@ class workstartup extends plugin
         return;
       }else{
 
+        $base = $this->config->current['BASE'];
+        $ldap = $this->config->get_ldap_link();
         foreach($servers as $server){
-          if ($this->attrs['gosaUnitTag'][0] != $server['TAG']) {
-            echo "Skipping server " . $server['SERVER'] . "<br>";
+          /* Dont show servers that have a different unittag as the user*/
+          $ui = get_userinfo();
+          if ($ui->gosaUnitTag != $server['TAG']) {
             continue;
           }
         
-
-          echo "My unittag: ". $this->attrs['gosaUnitTag'][0] ."<br>";
-          echo "<p> " . print_a($server);
-          echo "</p>";
           $rel = $server['FAI_RELEASE'];
           $this->cache['SERVERS']['auto'][$rel] = $rel;
           $this->cache['SERVERS'][$server['SERVER']][$rel] = $rel;
@@ -1142,7 +1191,13 @@ class workstartup extends plugin
       }else{
         foreach($classes as $class){
           $classname = $class['CLASS'];
-          var_dump($class);
+          $this->update_bad_classes($release);
+          if(isset($this->cache['BAD_CLASSES'][$release])){
+            /* Skip classes that are in the array of bad classes */
+            if (in_array($classname, $this->cache['BAD_CLASSES'][$release])) {
+              continue;
+            }
+          }
           if (!isset($this->cache['CLASSES'][$release][$classname])) {
             $this->cache['CLASSES'][$release][$classname] = array();
           }
@@ -1253,14 +1308,14 @@ class workstartup extends plugin
       # everything looks fine if the type in this position
       # doesn't exist in that class
       for ($i=0; $i<6; $i++) {
-        $result[$i] = "<img src='images/empty.png' width='17'>";
+        $result[$i] = "<img src='images/empty.png' width='17'>&nbsp;";
       }
     }
 
     foreach($classes[$class_name] as $type) {
       $index = $type['index'];
       if ($image) {
-        $string = "<img src='".$type['img']."' width='17' alt='".$type['desc']."'>&nbsp;";
+        $string = "<img src='".$type['img']."' width='17' title='".$type['desc']."'>&nbsp;";
       }
       else {
         $string = $type['Abbr'];
@@ -1295,53 +1350,54 @@ class workstartup extends plugin
   function analyse_fai_object($attr)
   {
     $result = array();
-    $result['desc'] = 'Placeholder';
     switch($attr['TYPE']){
       case 'FAIpartitionTable':
         $result["Type"]= 'FAIpartitionTable'; 
         $result["Abbr"]= 'Pt';
         $result["img"]= 'plugins/fai/images/fai_partitionTable.png';
-        $result["desc"] = "_('Partition table')";
+        $result["desc"] = _('Partition table');
         $result["index"]= 0;
         break;
       case 'FAIpackageList':
         $result["Type"]= 'FAIpackageList';
         $result["Abbr"]= 'Pl';
         $result["img"] = 'plugins/fai/images/fai_packages.png';
-        $result["desc"] = "_('Package list')";
+        $result["desc"] = _('Package list');
         $result["index"] = 1;
         break;
       case 'FAIscript':
         $result["Type"]= 'FAIscript'; 
         $result["Abbr"]= 'S'; 
         $result["img"]= 'plugins/fai/images/fai_script.png';
-        $result["desc"] = "_('Script')";
+        $result["desc"] = _('Scripts');
         $result["index"] = 2;
         break;
       case 'FAIvariable':
         $result["Type"]= 'FAIvariable'; 
         $result["Abbr"]= 'V';
         $result["img"]= 'plugins/fai/images/fai_variable.png'; 
-        $result["desc"] = "_('Variables')";
+        $result["desc"] = _('Variables');
         $result["index"]= 3;
         break;
       case 'FAIhook':
         $result["Type"]= 'FAIhook'; 
         $result["Abbr"]= 'H'; 
         $result["img"]= 'plugins/fai/images/fai_hook.png';
-        $result["desc"] = "_('Hooks')";
+        $result["desc"] = _('Hooks');
         $result["index"]= 4;
         break;
       case 'FAIprofile':
         $result["Type"]= 'FAIprofile'; 
         $result["Abbr"]= 'P';
         $result["img"]= 'plugins/fai/images/fai_profile.png';
+        $result["desc"]= _('Profile');
         $result["index"] = 5;
         break;
       case 'FAItemplate': 
         $result["Type"]= 'FAItemplate'; 
         $result["Abbr"]= 'T';
         $result["img"] = 'plugins/fai/images/fai_template.png'; 
+        $result["desc"]= _('Templates');
         $result["index"] = 6;
         break;
       default: trigger_error("Unknown FAI object type!");;