Code

Beautified FAI templates
[gosa.git] / gosa-plugins / fai / admin / fai / class_faiPartition.inc
index f8a9a121514301de498068fb15049ef5989fa4e3..ad553a2348acd2107c0841b3b4bd92271772a260 100644 (file)
@@ -23,19 +23,20 @@ class faiPartition extends plugin
   
   var $FAIdiskType = "disk";
 
+  // Size options.
   var $FAIpartitionSizeType = "fixed";
   var $sizeStart = 0;
   var $sizeStop  = 0;
   var $sizeStart_Type = "MB";
   var $sizeStop_Type  = "MB";
-   
+  
+  //  Flags 
   var $bootable = false; 
   var $resize = false;
+  var $encrypted = false;
   var $preserve = false;
   var $preserveType = "always";
-  var $encrypted = false;
 
-  var $status = "";
   var $raidDevices = array();
 
   // Once we've exceeded the primary partition limit,
@@ -46,7 +47,6 @@ class faiPartition extends plugin
   {
 
     $this->parent = $parent;
-    $this->status = "new";
     $this->FAIdiskType = $type;
 
     // Check if we should be able to add primary partitions.
@@ -66,15 +66,12 @@ class faiPartition extends plugin
 
     // Load attributes from existing partition 
     if($object){
-
       foreach($this->attributes as $attr){
         if(isset($object[$attr])){
           $this->$attr = $object[$attr];
         }
       }
 
-      $this->status = $object['status'];
-
       if($type == "disk" || $type =="lvm"){
 
         /* Prepare size attribute 
@@ -85,14 +82,14 @@ class faiPartition extends plugin
          * remaining                * -
          */
         // Fixed
-        if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
+        if(preg_match("/^[0-9]{1,}(KB|MB|GB|TB|PB|%|)$/",$this->FAIpartitionSize)){
           $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
           $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
           $this->FAIpartitionSizeType = "fixed";
         }else
 
         // Dynamic range
-        if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)-[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
+        if(preg_match("/^[0-9]{1,}(KB|MB|GB|TB|PB|%|)-[0-9]{1,}(KB|MB|GB|TB|PB|%|)$/",$this->FAIpartitionSize)){
           $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\1",$this->FAIpartitionSize);
           $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\2",$this->FAIpartitionSize);
           $this->sizeStop = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
@@ -101,9 +98,16 @@ class faiPartition extends plugin
         }else
 
         // Dynamic range
-        if(preg_match("/^\-$/",$this->FAIpartitionSize)){
+        if(preg_match("/^(0|)\-$/",$this->FAIpartitionSize)){
           $this->FAIpartitionSizeType = "remaining";
+        }
 
+        // Ensure that we've a valid value type selected.
+        if(!preg_match("/(KB|MB|GB|TB|PB|%)/",$this->sizeStart_Type)){
+          $this->sizeStart_Type = "MB";
+        }
+        if(!preg_match("/(KB|MB|GB|TB|PB|%)/",$this->sizeStop_Type)){
+          $this->sizeStop_Type = "MB";
         }
 
         /* Check for encrypted partitions
@@ -114,8 +118,9 @@ class faiPartition extends plugin
         }
     
       }elseif($type == "raid"){
-    
-        $usedDisks = split(",",$this->FAIpartitionSize);
+   
+        // Extract raid devices out of the partition size attribute. 
+        $usedDisks = explode(",",$this->FAIpartitionSize);
         foreach($usedDisks as $disk){
           $name = preg_replace("/:.*$/","",$disk);
           $spare = preg_match("/:spare/",$disk);
@@ -195,7 +200,8 @@ class faiPartition extends plugin
         "ext4" => _("ext4"),
         "reiserfs" => _("reiser fs"),
         "xfs" => _("xfs"),
-        "btrfs" => _("btrfs"));
+        "btrfs" => _("btrfs"),
+        "-" => "-");
 
     $smarty->assign("partitionTypes", $types);
     $smarty->assign("partitionSizeTypes", $partitionSizeTypes);
@@ -212,6 +218,7 @@ class faiPartition extends plugin
 
     $smarty->assign("FAIfsTypes", $FAIfsTypes);
     $smarty->assign("cn", $this->cn);
+    $smarty->assign("freeze", preg_match("/freeze/i",$this->parent->FAIstate));
 
     $smarty->assign("plist",$this->getRaidlist());
     $smarty->assign("physicalPartitionList",$this->getPartitionlist());
@@ -223,28 +230,59 @@ class faiPartition extends plugin
     return($smarty->fetch(get_template_path("faiPartition.tpl", TRUE, dirname(__FILE__))));
   }
 
-    
+  
+  /* Returns a list of all partitions that are useable 
+   *  for raid arrays.
+   */
   function getPartitionList()
   {
-    $array = array();  
+    $may = $used = array();  
     foreach($this->parent->parent->disks as $disk){
-      if($disk['FAIdiskType'] != "raid"){
-        foreach($disk['partitions'] as $key => $part){
+
+      // Skip ourselves 
+      if($disk['cn'] == $this->parent->DISKcn) continue;
+
+      // Add partition from lvm combinations 
+      if($disk['FAIdiskType'] == "lvm"){
+        $used = array_merge($used,$disk['FAIlvmDevice']);
+      }
+
+      foreach($disk['partitions'] as $key => $part){
+
+        // Add disks of raid arrays, to the used list.
+        if($disk['FAIdiskType'] == "raid"){
+          foreach(explode(",",$part['FAIpartitionSize']) as $rDevice){
+            $used[] = preg_replace("/:.*$/i","",$rDevice);
+          }
+        }
+
+        // Collect all available disks 
+        if($disk['FAIdiskType'] == "disk"){
           $name = $part['cn'];
           if(!isset($this->raidDevices[$name])){
-            $array[$name] = $name." (".$disk['cn'].")";
+            $may[] = $name;
           }
         }
       }
     }
-    return($array);
+    // Check which of the available disks are unused. 
+    $ret = array();
+    foreach($may as $val){
+      if(!in_array($val,$used)){
+        $ret[$val] = $val;
+      }
+    }
+    return($ret);
   }
 
 
+  /* Creates a human readable list of all used partitions 
+   *  of a raid device.
+   */
   function getRaidList()
   {
     $divlist = new divSelectBox("RaidList");
-   
     $disks = $this->parent->parent->disks;
     $objs = array();
     foreach($disks as $disk){
@@ -308,7 +346,11 @@ class faiPartition extends plugin
 
       // Remove partition
       if(isset($_POST['delPhysicalPartition']) && isset($_POST['physicalPartition'])){
-        unset($this->raidDevices[$_POST['physicalPartition']]); 
+        foreach($_POST['physicalPartition'] as $key){
+          if(isset($this->raidDevices[$key])){
+            unset($this->raidDevices[$key]);
+          }
+        }
       }
 
       // Toggle spare flag for partition entries
@@ -367,7 +409,7 @@ class faiPartition extends plugin
     }
 
     // check mount point 
-    if($this->FAIfsType != "swap"){
+    if($this->FAIfsType != "swap" && $this->FAIfsType != "-"){
       if(!preg_match("#^/#",$this->FAImountPoint)){
         $msgs[] = msgPool::invalid(_("Mount point"));
       }
@@ -393,7 +435,7 @@ class faiPartition extends plugin
           $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type."-".  
             $this->sizeStop.$this->sizeStop_Type;break; 
         case 'remaining' : 
-          $ret['FAIpartitionSize'] = "-";break; 
+          $ret['FAIpartitionSize'] = "0-";break; 
         default: trigger_error("Unknown partition size!");
       }
 
@@ -403,6 +445,8 @@ class faiPartition extends plugin
       }
 
     }elseif($this->FAIdiskType == "raid"){
+
+      // Save selected raid partitions in FAIpartitionSize
       $ret['FAIpartitionSize'] = "";
       foreach($this->raidDevices as $device){
         $ret['FAIpartitionSize'] .= $device['name'];
@@ -416,7 +460,6 @@ class faiPartition extends plugin
       }
       $ret['FAIpartitionSize'] = trim($ret['FAIpartitionSize'],",");
     }
-    $ret['status'] = $this->status;
 
     if($this->FAIfsType == "swap"){
       $ret['FAImountPoint'] = "swap";