Code

We can now save volume groups.
[gosa.git] / gosa-plugins / fai / admin / fai / class_faiPartition.inc
1 <?php
3 class faiPartition extends plugin
4 {
5   var $attributes = array("cn","description","FAIfsCreateOptions","FAIfsOptions","FAIfsTuneOptions",
6       "FAIfsType","FAImountOptions","FAImountPoint","FAIpartitionNr","FAIpartitionFlags","FAIdiskType",
7       "FAIpartitionSize","FAIpartitionType","FAIstate", "bootable","resize", "preserve", "preserveType",
8       "encrypted");
10   var $cn  = "";
11   var $description  = "";
12   var $FAIfsCreateOptions = "";
13   var $FAIfsOptions = "";
14   var $FAIfsTuneOptions = "";
15   var $FAIfsType = "";
16   var $FAImountOptions = "";
17   var $FAImountPoint = "";
18   var $FAIpartitionNr = "";
19   var $FAIpartitionSize = "";
20   var $FAIpartitionType = "";
21   var $FAIstate = "";
22   var $FAIpartitionFlags = "";
23   
24   var $FAIdiskType = "disk";
26   var $FAIpartitionSizeType = "fixed";
27   var $sizeStart = 0;
28   var $sizeStop  = 0;
29   var $sizeStart_Type = "MB";
30   var $sizeStop_Type  = "MB";
31    
32   var $bootable = false; 
33   var $resize = false;
34   var $preserve = false;
35   var $preserveType = "always";
36   var $encrypted = false;
38   var $status = "";
39   var $raidDevices = array();
41   function __construct($config, $object, $parent,$type)
42   {
44     $this->parent = $parent;
45     $this->status = "new";
46    
47     // Load attributes from existing partition 
48     if($object){
50       foreach($this->attributes as $attr){
51         if(isset($object[$attr])){
52           $this->$attr = $object[$attr];
53         }
54       }
56       $this->status = $object['status'];
57       $this->FAIdiskType = $type;
59       if($type == "disk"){
61         /* Prepare size attribute 
62          * This attribute may represent a range, a fixed value 
63          *  or a percentage.
64          * fixed is just a number   * 500MB
65          * range                    * 500MB-1TB
66          * remaining                * -
67          */
68         // Fixed
69         if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
70           $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
71           $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
72           $this->FAIpartitionSizeType = "fixed";
73         }else
75         // Dynamic range
76         if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)-[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
77           $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\1",$this->FAIpartitionSize);
78           $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\2",$this->FAIpartitionSize);
79           $this->sizeStop = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
80           $this->sizeStop_Type = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
81           $this->FAIpartitionSizeType = "dynamic";
82         }else
84         // Dynamic range
85         if(preg_match("/^\-$/",$this->FAIpartitionSize)){
86           $this->FAIpartitionSizeType = "remaining";
88         }
90         /* Check for encrypted partitions
91          */
92         if(preg_match("/:encrypt$/",$this->FAImountPoint)){
93           $this->FAImountPoint = preg_replace("/:encrypt/","",$this->FAImountPoint);
94           $this->encrypted = TRUE;
95         }
96     
97       }elseif($type == "raid"){
98     
99         $usedDisks = split(",",$this->FAIpartitionSize);
100         foreach($usedDisks as $disk){
101           $name = preg_replace("/:.*$/","",$disk);
102           $spare = preg_match("/:spare/",$disk);
103           $missing = preg_match("/:missing/",$disk);
104           $this->raidDevices[$name] = 
105             array(
106                 "name" => $name, 
107                 "spare" => $spare, 
108                 "missing" => $missing);
109         }
110       }
111     }
112   }
114   function execute()
115   {
116     plugin::execute();
117     $smarty = get_smarty();
119     // Remove partition
120     if(isset($_POST['addPhysicalPartition']) && isset($_POST['phyiscalPartitionAdd'])){
121       $name = $_POST['phyiscalPartitionAdd'];
122       $this->raidDevices[$name] = array("name" => $name,"spare"=>false,"missing"=>false);     
123     }
125     // Create a list of selectable partition types
126     if($this->FAIdiskType == "disk"){
127       $types  = array(
128           "primary" => _("Primary"),
129           "secondary" => _("Secondary"));
130     }elseif($this->FAIdiskType == "raid"){
131       $types  = array(
132           "raid0" => _("Raid 0"),
133           "raid1" => _("Raid 1"),
134           "raid5" => _("Raid 5"),
135           "raid6" => _("Raid 6"));
136     }else{
137       $types = "";
138     }
139      
140     // Create a list of all size options
141     $partitionSizeTypes  = array(
142         "fixed"     => _("Fixed"),
143         "dynamic"     => _("Dynamic"),
144         "remaining" => _("Use remaining space")
145         );
147     // Create a list of all size options
148     $sizeTypes  = array(
149         "KB"      => _("KB"),
150         "MB"      => _("MB"),
151         "GB"      => _("GB"),
152         "TB"      => _("TB"),
153         "PB"      => _("PB"),
154         "%"      => _("Percent")
155         );
157     // Preserve types 
158     $preserveTypes = array(
159         "always" => _("Always"),
160         "reinstall" => _("Reinstall"));
162     // File system types.  
163     $FAIfsTypes = array(
164         "swap" => _("Swap"),
165         "ext2" => _("Ext 2"),
166         "ext3" => _("Ext 3"),
167         "ext4" => _("Ext 4"),
168         "reiserfs" => _("Reiser fs"),
169         "xfs" => _("Xfs"),
170         "btrfs" => _("Btrfs"));
172     $smarty->assign("partitionTypes", $types);
173     $smarty->assign("partitionSizeTypes", $partitionSizeTypes);
174     $smarty->assign("FAIpartitionSizeType", $this->FAIpartitionSizeType);
175     $smarty->assign("sizeTypes", $sizeTypes);
177     $smarty->assign("sizeStart_Type", $this->sizeStart_Type);
178     $smarty->assign("sizeStop_Type", $this->sizeStop_Type);
179     $smarty->assign("sizeStart", $this->sizeStart);
180     $smarty->assign("sizeStop", $this->sizeStop);
182     $smarty->assign("preserveTypes", $preserveTypes);
183     $smarty->assign("preserveType", $this->preserveType);
185     $smarty->assign("FAIfsTypes", $FAIfsTypes);
187     $smarty->assign("plist",$this->getRaidlist());
188     $smarty->assign("phyiscalPartitionList",$this->getPartitionlist());
190     foreach($this->attributes as $attr){
191       $smarty->assign($attr,$this->$attr);
192     }
193     return($smarty->fetch(get_template_path("faiPartition.tpl", TRUE, dirname(__FILE__))));
194   }
196     
197   function getPartitionList()
198   {
199     $array = array();  
200     foreach($this->parent->parent->disks as $disk){
201       foreach($disk['partitions'] as $key => $part){
202         $name = $disk['cn'].$key;
203         if(!isset($this->raidDevices[$name])){
204           $array[$name] = $name;
205         }
206       }
207     }
208     return($array);
209   }
212   function getRaidList()
213   {
214     $divlist = new divSelectBox("RaidList");
215    
216     $disks = $this->parent->parent->disks;
217     $objs = $disks;
218     foreach($disks as $disk){
219       foreach($disk['partitions'] as $id => $part){
220         $objs[$disk['cn'].$id] = $part;
221       }
222     }
223     
224     $list = array();
225     foreach($this->raidDevices as $device){
226       $list[$device['name']] = $device['name'];
228       if(isset($objs[$device['name']]['FAIpartitionSize'])){
229         $list[$device['name']].= _("Size").":&nbsp;";
230         $list[$device['name']].= $objs[$device['name']]['FAIpartitionSize'];
231       }
233       $list[$device['name']].= " &nbsp; "._("Options").": ";
234       if($device['spare']){
235         $list[$device['name']].= "&nbsp;"._("Spare")."&nbsp;";
236       }
237       if($device['missing']){
238         $list[$device['name']].= "&nbsp;"._("Missing")."&nbsp;";
239       }
240     }
241     return($list);
242   }
244   function save_object()
245   {
246     if(isset($_POST['faiPartition'])){
247       foreach($this->attributes as $attr){
248         if(isset($_POST[$attr])){
249           $this->$attr = get_post($attr);
250         }
251       }
252       foreach(array("FAIpartitionSizeType","sizeStart","sizeStop","sizeStart_Type","sizeStop_Type") as $attr){
253         if(isset($_POST[$attr])){
254           $this->$attr = get_post($attr);
255         }
256       }
257       foreach(array("bootable","preserve","resize","encrypted") as $attr){
258         if(isset($_POST[$attr])){
259           $this->$attr = TRUE;
260         }else{
261           $this->$attr = FALSE;
262         }
263       }
265       // Remove partition
266       if(isset($_POST['delPhysicalPartition']) && isset($_POST['phyiscalPartition'])){
267         unset($this->raidDevices[$_POST['phyiscalPartition']]); 
268       }
270       // Toggle spare flag for partition entries
271       if(isset($_POST['toggleSpare']) && isset($_POST['phyiscalPartition'])){
272         $this->raidDevices[$_POST['phyiscalPartition']]['spare'] = 
273             !$this->raidDevices[$_POST['phyiscalPartition']]['spare'];
274       }
276       // Toggle missing flag for partition entries
277       if(isset($_POST['toggleMissing']) && isset($_POST['phyiscalPartition'])){
278         $this->raidDevices[$_POST['phyiscalPartition']]['missing'] = 
279             !$this->raidDevices[$_POST['phyiscalPartition']]['missing'];
280       }
281     } 
282   }
284   function save()
285   {
286     $ret = array();
287     foreach($this->attributes as $attr){
288       $ret[$attr] = $this->$attr;
289     }
291     // Save partition size
292     if($this->FAIdiskType == "disk"){ 
293       switch($this->FAIpartitionSizeType){
294         case 'fixed' : 
295           $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type;break; 
296         case 'dynamic' : 
297           $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type."-".  
298             $this->sizeStop.$this->sizeStop_Type;break; 
299         case 'remaining' : 
300           $ret['FAIpartitionSize'] = "-";break; 
301         default: trigger_error("Unknown partition size!");
302       }
304       // Add encryption flag to partition mount point
305       if($this->encrypted){
306         $ret['FAImountPoint'] .= ":encrypt";
307       }
309     }elseif($this->FAIdiskType == "raid"){
310       $ret['FAIpartitionSize'] = "";
311       foreach($this->raidDevices as $device){
312         $ret['FAIpartitionSize'] .= $device['name'];
313         if($device['spare']){
314           $ret['FAIpartitionSize'] .= ":spare";
315         }
316         if($device['missing']){
317           $ret['FAIpartitionSize'] .= ":missing";
318         }
319         $ret['FAIpartitionSize'] .= ",";
320       }
321       $ret['FAIpartitionSize'] = trim($ret['FAIpartitionSize'],",");
322     }
323     $ret['status'] = $this->status;
324     return($ret);
325   }
327 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
328 ?>