Code

Updated FAI partition handling
[gosa.git] / gosa-plugins / fai / admin / fai / class_faiManagement.inc
index c88f435d26e1ec2993516f8c3a0975d045d06d9b..0099a68637175dc13b4b3d10156e08a9d27fd054 100644 (file)
@@ -113,6 +113,8 @@ class faiManagement extends plugin
     
                $display        = "";
     $s_action  = "";
+    $i_entryID ="";
+    $s_entryType= "";
                $s_entry        = "";
     $no_save = FALSE;   // hide Apply / Save buttons
     
@@ -140,6 +142,8 @@ class faiManagement extends plugin
 
                     "/^edit_continue$/"               => "select_class_name_finished",
 
+                    "/^group_copy/"                   => "group_copy",
+                    "/^group_cut/"                    => "group_cut",
                     "/^group_edit/"                   => "group_edit",
                     "/^group_remove/"                 => "group_remove");
                foreach($_POST as $name => $value){
@@ -151,6 +155,11 @@ class faiManagement extends plugin
           break;
         }
       }
+      if(preg_match("/^edit_[0-9]*_.*$/",$name)){
+        $i_entryID  = preg_replace("/^edit_([0-9]*)_.*$/i","\\1",$name);
+        $s_entryType= preg_replace("/^edit_[0-9]*_([^_]*)_.*$/i","\\1",$name);
+        $s_action = "edit";
+      }
     }
 
     if(isset($_GET['act']) && $_GET['act'] == "edit" && isset($_GET['id'])){
@@ -201,16 +210,6 @@ class faiManagement extends plugin
       $this->no_save = $no_save;
     }
 
-    /********************
-      Copy & Paste
-     ********************/
-
-    /* Display the copy & paste dialog, if it is currently open */
-    $ret = $this->copyPasteHandling_from_queue($s_action,$s_entry);
-    if($ret){
-      return($ret);
-    }
-
 
     /*******************
       Opsi extension 
@@ -263,14 +262,46 @@ class faiManagement extends plugin
         foreach(array("opsi_netboot","opsi_local") as $type){
           if(isset($group[$type])) unset($group[$type]);
         }
-        if(count($group)){
+        if(count($group) == 1){
+          $s_action = "remove";
+          $i_entryID = $s_entry;
+          $s_entryType = key($group);
+        }elseif(count($group)){
           $this->dialog = new faiGroupHandle($group,"remove");
         }
       }
     }elseif($s_action == "group_edit"){
       if(isset($this->objects[$s_entry])){
         $group = $this->objects[$s_entry];
-        $this->dialog = new faiGroupHandle($group,"edit");
+        if(count($group) == 1){
+          $s_action = "edit";
+          $i_entryID = $s_entry;
+          $s_entryType = key($group);
+        }else{
+          $this->dialog = new faiGroupHandle($group,"edit");
+        }
+      }
+    }elseif($s_action == "group_cut"){
+      if(isset($this->objects[$s_entry])){
+        $group = $this->objects[$s_entry];
+        if(count($group) == 1){
+          $s_action = "cut";
+          $i_entryID = $s_entry;
+          $s_entryType = key($group);
+        }else{
+          $this->dialog = new faiGroupHandle($group,"cut");
+        }
+      }
+    }elseif($s_action == "group_copy"){
+      if(isset($this->objects[$s_entry])){
+        $group = $this->objects[$s_entry];
+        if(count($group) == 1){
+          $s_action = "copy";
+          $i_entryID = $s_entry;
+          $s_entryType = key($group);
+        }else{
+          $this->dialog = new faiGroupHandle($group,"copy");
+        }
       }
     }
     if($this->dialog instanceOf faiGroupHandle){
@@ -286,6 +317,16 @@ class faiManagement extends plugin
       }
     }
 
+    /********************
+      Copy & Paste
+     ********************/
+
+    /* Display the copy & paste dialog, if it is currently open */
+    $ret = $this->copyPasteHandling_from_queue($s_action,$i_entryID,$s_entryType);
+    if($ret){
+      return($ret);
+    }
+
 
     /********************
       Delete MULTIPLE entries confirmed
@@ -309,8 +350,8 @@ class faiManagement extends plugin
           $this->dialog->set_acl_base($dn);
           $this->dialog->by_object[$type[1]]->remove_from_parent ();
           $this->dialog= FALSE;
-          $to_del = FAI::clean_up_releases($dn);
           FAI::save_release_changes_now();
+          $to_del = FAI::clean_up_releases($dn);
           foreach($to_del as $dn){
             $ldap->rmdir_recursive($dn);
           }
@@ -334,7 +375,7 @@ class faiManagement extends plugin
       Delete confirme dialog 
      ****************/
 
-    if ($s_action=="del_multiple" || 
+    if ($s_action=="del_multiple" || $s_action == "remove" ||  
         $this->dialog instanceOf faiGroupHandle && $this->dialog->get_mode() == "remove"){
  
       /* Collect objects to delete and check if objects are freezed
@@ -342,13 +383,18 @@ class faiManagement extends plugin
       $dns = array();
       $errors = "";
       $this->dns = array();
-      if($this->dialog instanceOf faiGroupHandle){
+
+      if($s_action == "remove"){
+        $to_delete =array($entry = $this->objects[$i_entryID][$s_entryType]);
+      }elseif($this->dialog instanceOf faiGroupHandle){
         $to_delete = $this->dialog->get_selected();
       }else{
         $ids = $this->list_get_selected_items();
         $to_delete = array();
         foreach($ids as $id){
-          $to_delete = array_merge($to_delete,$this->objects[$id]);
+          foreach($this->objects[$id] as $obj) { 
+            array_push($to_delete, $obj); 
+          } 
         }
       } 
 
@@ -399,12 +445,11 @@ class faiManagement extends plugin
       $this->dns = array();
     }
 
-
     /****************
       Edit entry 
      ****************/
 
-               if($this->dialog instanceOf faiGroupHandle && $this->dialog->get_mode() == "edit"){
+               if($s_action == "edit" || $this->dialog instanceOf faiGroupHandle && $this->dialog->get_mode() == "edit"){
 
       $entry = array();
       if($this->dialog instanceOf faiGroupHandle){
@@ -446,7 +491,7 @@ class faiManagement extends plugin
           $this->dialog->by_object[$a_setup[1]]->FAIstate = $entry['FAIstate'];
           $this->dialog->set_acl_base($this->dn);
           $this->is_dialog  = true;
-          session::set('objectinfo',$this->dn);
+          set_object_info($this->dn);
         }
       }
     }
@@ -905,7 +950,7 @@ class faiManagement extends plugin
                if(isset($_POST['edit_cancel'])){
                        $this->dialog=FALSE;
                        $this->is_dialog = false;
-                       session::un_set('objectinfo');
+                       set_object_info();
       $this->remove_lock();
                }
 
@@ -957,7 +1002,7 @@ class faiManagement extends plugin
           $this->remove_lock();
           $this->dialog=FALSE;
           $this->is_dialog=false;
-          session::un_set('objectinfo');
+          set_object_info();
         }else{
 
           /* Reinitialize tab */
@@ -1209,7 +1254,7 @@ class faiManagement extends plugin
 
        function remove_lock()
        {
-               if (isset($this->dn)){
+               if (isset($this->dn) && !empty($this->dn)){
                        del_lock ($this->dn);
                }
     if(isset($this->dns) && is_array($this->dns) && count($this->dns)){
@@ -1287,7 +1332,7 @@ class faiManagement extends plugin
   }
 
 
-  function copyPasteHandling_from_queue($s_action,$s_entry)
+  function copyPasteHandling_from_queue($s_action,$i_entryID,$s_entryType)
   {
     /* Check if Copy & Paste is disabled */
     if(!is_object($this->CopyPasteHandler)){
@@ -1296,17 +1341,44 @@ class faiManagement extends plugin
 
     $ui = get_userinfo();
 
-    /* Add a single entry to queue */
+    // Copy a single entry
     if($s_action == "copy"){
-
-      /* Cleanup object queue */
+      $entry = $this->objects[$i_entryID][$s_entryType];
       $this->CopyPasteHandler->cleanup_queue();
-      $entry    = $this->objects[$s_entry];
       $a_setup  = $this->get_type($entry);
       $dn = $entry['dn'];
+      if($ui->is_copyable($dn,"fai",$a_setup[1])){
+        $this->CopyPasteHandler->add_to_queue($dn,"copy",$a_setup[0],$a_setup[2],"fai");
+      }
+    }
 
+    // cut a single entry
+    if($s_action == "cut"){
+      $entry = $this->objects[$i_entryID][$s_entryType];
+      $this->CopyPasteHandler->cleanup_queue();
+      $a_setup  = $this->get_type($entry);
+      $dn = $entry['dn'];
       if($ui->is_copyable($dn,"fai",$a_setup[1])){
-        $this->CopyPasteHandler->add_to_queue($dn,$s_action,$a_setup[0],$a_setup[2],"fai");//$a_setup[1]);
+        $this->CopyPasteHandler->add_to_queue($dn,"cut",$a_setup[0],$a_setup[2],"fai");
+      }
+    }
+
+    /* Add a entries from the group selection to queue */
+    if($this->dialog instanceOf faiGroupHandle && !$this->dialog->is_open()){
+
+      if(in_array($this->dialog->get_mode(),array("copy"))){      
+
+        /* Cleanup object queue */
+        $this->CopyPasteHandler->cleanup_queue();
+        $group = $this->dialog->get_selected();
+        foreach($group as $entry){
+          $a_setup  = $this->get_type($entry);
+          $dn = $entry['dn'];
+          if($ui->is_copyable($dn,"fai",$a_setup[1])){
+            $this->CopyPasteHandler->add_to_queue($dn,$this->dialog->get_mode(),$a_setup[0],$a_setup[2],"fai");//$a_setup[1]);
+          }
+        }
+        $this->dialog = FALSE;
       }
     }
 
@@ -1318,14 +1390,14 @@ class faiManagement extends plugin
 
       /* Add new entries to CP queue */
       foreach($this->list_get_selected_items() as $id){
+        $group    = $this->objects[$id];
+        foreach($group as $entry){
+          $a_setup  = $this->get_type($entry);
+          $dn = $entry['dn'];
 
-        /* Cleanup object queue */
-        $entry    = $this->objects[$id];
-        $a_setup  = $this->get_type($entry);
-        $dn = $entry['dn'];
-
-        if($s_action == "copy_multiple" && $ui->is_copyable($dn,"fai",$a_setup[1])){
-          $this->CopyPasteHandler->add_to_queue($dn,"copy",$a_setup[0],$a_setup[2],"fai");//$a_setup[1]);
+          if($s_action == "copy_multiple" && $ui->is_copyable($dn,"fai",$a_setup[1])){
+            $this->CopyPasteHandler->add_to_queue($dn,"copy",$a_setup[0],$a_setup[2],"fai");//$a_setup[1]);
+          }
         }
       }
     }