72942a65d14017215293efe93711ec7b29772861
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 = "";
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";
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;
46 foreach($this->attributes as $attr){
47 if(isset($object[$attr])){
48 $this->$attr = $object[$attr];
49 }
50 }
52 $this->status = $object['status'];
53 $this->FAIdiskType = $type;
55 if($type == "disk"){
57 /* Prepare size attribute
58 * This attribute may represent a range, a fixed value
59 * or a percentage.
60 * fixed is just a number * 500MB
61 * range * 500MB-1TB
62 * remaining * -
63 */
64 // Fixed
65 if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
66 $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
67 $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
68 $this->FAIpartitionSizeType = "fixed";
69 }else
71 // Dynamic range
72 if(preg_match("/^[0-9]*(KB|MB|GB|TB|PB|%)-[0-9]*(KB|MB|GB|TB|PB|%)$/",$this->FAIpartitionSize)){
73 $this->sizeStart = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\1",$this->FAIpartitionSize);
74 $this->sizeStart_Type = preg_replace("/^([0-9]*)(KB|MB|GB|TB|PB|%).*$/","\\2",$this->FAIpartitionSize);
75 $this->sizeStop = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\1",$this->FAIpartitionSize);
76 $this->sizeStop_Type = preg_replace("/^[^\-]*\-([0-9]*)(KB|MB|GB|TB|PB|%)$/","\\2",$this->FAIpartitionSize);
77 $this->FAIpartitionSizeType = "dynamic";
78 }else
80 // Dynamic range
81 if(preg_match("/^\-$/",$this->FAIpartitionSize)){
82 $this->FAIpartitionSizeType = "remaining";
84 }
86 /* Check for encrypted partitions
87 */
88 if(preg_match("/:encrypt$/",$this->FAImountPoint)){
89 $this->FAImountPoint = preg_replace("/:encrypt/","",$this->FAImountPoint);
90 $this->encrypted = TRUE;
91 }
93 }elseif($type == "raid"){
95 $usedDisks = split(",",$this->FAIpartitionSize);
96 foreach($usedDisks as $disk){
97 $name = preg_replace("/:.*$/","",$disk);
98 $spare = preg_match("/:spare/",$disk);
99 $missing = preg_match("/:missing/",$disk);
100 $this->raidDevices[$name] =
101 array(
102 "name" => $name,
103 "spare" => $spare,
104 "missing" => $missing);
105 }
106 }
107 }
109 function execute()
110 {
111 plugin::execute();
112 $smarty = get_smarty();
114 // Remove partition
115 if(isset($_POST['addPhysicalPartition']) && isset($_POST['phyiscalPartitionAdd'])){
116 $name = $_POST['phyiscalPartitionAdd'];
117 $this->raidDevices[$name] = array("name" => $name,"spare"=>false,"missing"=>false);
118 }
120 // Create a list of selectable partition types
121 if($this->FAIdiskType == "disk"){
122 $types = array(
123 "primary" => _("Primary"),
124 "secondary" => _("Secondary"));
125 }elseif($this->FAIdiskType == "raid"){
126 $types = array(
127 "raid0" => _("Raid 0"),
128 "raid1" => _("Raid 1"),
129 "raid5" => _("Raid 5"),
130 "raid6" => _("Raid 6"));
131 }else{
132 $types = "";
133 }
135 // Create a list of all size options
136 $partitionSizeTypes = array(
137 "fixed" => _("Fixed"),
138 "dynamic" => _("Dynamic"),
139 "remaining" => _("Use remaining space")
140 );
142 // Create a list of all size options
143 $sizeTypes = array(
144 "KB" => _("KB"),
145 "MB" => _("MB"),
146 "GB" => _("GB"),
147 "TB" => _("TB"),
148 "PB" => _("PB"),
149 "%" => _("Percent")
150 );
152 // Preserve types
153 $preserveTypes = array(
154 "always" => _("Always"),
155 "reinstall" => _("Reinstall"));
157 // File system types.
158 $FAIfsTypes = array(
159 "swap" => _("Swap"),
160 "ext2" => _("Ext 2"),
161 "ext3" => _("Ext 3"),
162 "ext4" => _("Ext 4"),
163 "reiserfs" => _("Reiser fs"),
164 "xfs" => _("Xfs"),
165 "btrfs" => _("Btrfs"));
167 $smarty->assign("partitionTypes", $types);
168 $smarty->assign("partitionSizeTypes", $partitionSizeTypes);
169 $smarty->assign("FAIpartitionSizeType", $this->FAIpartitionSizeType);
170 $smarty->assign("sizeTypes", $sizeTypes);
172 $smarty->assign("sizeStart_Type", $this->sizeStart_Type);
173 $smarty->assign("sizeStop_Type", $this->sizeStop_Type);
174 $smarty->assign("sizeStart", $this->sizeStart);
175 $smarty->assign("sizeStop", $this->sizeStop);
177 $smarty->assign("preserveTypes", $preserveTypes);
178 $smarty->assign("preserveType", $this->preserveType);
180 $smarty->assign("FAIfsTypes", $FAIfsTypes);
182 $smarty->assign("plist",$this->getRaidlist());
183 $smarty->assign("phyiscalPartitionList",$this->getPartitionlist());
185 foreach($this->attributes as $attr){
186 $smarty->assign($attr,$this->$attr);
187 }
188 return($smarty->fetch(get_template_path("faiPartition.tpl", TRUE, dirname(__FILE__))));
189 }
192 function getPartitionList()
193 {
194 $array = array();
195 foreach($this->parent->parent->disks as $disk){
196 foreach($disk['partitions'] as $key => $part){
197 $name = $disk['cn'].$key;
198 if(!isset($this->raidDevices[$name])){
199 $array[$name] = $name;
200 }
201 }
202 }
203 return($array);
204 }
207 function getRaidList()
208 {
209 $divlist = new divSelectBox("RaidList");
211 $disks = $this->parent->parent->disks;
212 $objs = $disks;
213 foreach($disks as $disk){
214 foreach($disk['partitions'] as $id => $part){
215 $objs[$disk['cn'].$id] = $part;
216 }
217 }
219 $list = array();
220 foreach($this->raidDevices as $device){
221 $list[$device['name']] = $device['name'];
223 if(isset($objs[$device['name']]['FAIpartitionSize'])){
224 $list[$device['name']].= _("Size").": ";
225 $list[$device['name']].= $objs[$device['name']]['FAIpartitionSize'];
226 }
228 $list[$device['name']].= " "._("Options").": ";
229 if($device['spare']){
230 $list[$device['name']].= " "._("Spare")." ";
231 }
232 if($device['missing']){
233 $list[$device['name']].= " "._("Missing")." ";
234 }
235 }
236 return($list);
237 }
239 function save_object()
240 {
241 if(isset($_POST['faiPartition'])){
242 foreach($this->attributes as $attr){
243 if(isset($_POST[$attr])){
244 $this->$attr = get_post($attr);
245 }
246 }
247 foreach(array("FAIpartitionSizeType","sizeStart","sizeStop","sizeStart_Type","sizeStop_Type") as $attr){
248 if(isset($_POST[$attr])){
249 $this->$attr = get_post($attr);
250 }
251 }
252 foreach(array("bootable","preserve","resize","encrypted") as $attr){
253 if(isset($_POST[$attr])){
254 $this->$attr = TRUE;
255 }else{
256 $this->$attr = FALSE;
257 }
258 }
260 // Remove partition
261 if(isset($_POST['delPhysicalPartition']) && isset($_POST['phyiscalPartition'])){
262 unset($this->raidDevices[$_POST['phyiscalPartition']]);
263 }
265 // Toggle spare flag for partition entries
266 if(isset($_POST['toggleSpare']) && isset($_POST['phyiscalPartition'])){
267 $this->raidDevices[$_POST['phyiscalPartition']]['spare'] =
268 !$this->raidDevices[$_POST['phyiscalPartition']]['spare'];
269 }
271 // Toggle missing flag for partition entries
272 if(isset($_POST['toggleMissing']) && isset($_POST['phyiscalPartition'])){
273 $this->raidDevices[$_POST['phyiscalPartition']]['missing'] =
274 !$this->raidDevices[$_POST['phyiscalPartition']]['missing'];
275 }
276 }
277 }
279 function save()
280 {
281 $ret = array();
282 foreach($this->attributes as $attr){
283 $ret[$attr] = $this->$attr;
284 }
286 // Save partition size
287 if($this->FAIdiskType == "disk"){
288 switch($this->FAIpartitionSizeType){
289 case 'fixed' :
290 $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type;break;
291 case 'dynamic' :
292 $ret['FAIpartitionSize'] = $this->sizeStart.$this->sizeStart_Type."-".
293 $this->sizeStop.$this->sizeStop_Type;break;
294 case 'remaining' :
295 $ret['FAIpartitionSize'] = "-";break;
296 default: trigger_error("Unknown partition size!");
297 }
299 // Add encryption flag to partition mount point
300 if($this->encrypted){
301 $ret['FAImountPoint'] .= ":encrypt";
302 }
304 }elseif($this->FAIdiskType == "raid"){
305 $ret['FAIpartitionSize'] = "";
306 foreach($this->raidDevices as $device){
307 $ret['FAIpartitionSize'] .= $device['name'];
308 if($device['spare']){
309 $ret['FAIpartitionSize'] .= ":spare";
310 }
311 if($device['missing']){
312 $ret['FAIpartitionSize'] .= ":missing";
313 }
314 $ret['FAIpartitionSize'] .= ",";
315 }
316 $ret['FAIpartitionSize'] = trim($ret['FAIpartitionSize'],",");
317 }
318 $ret['status'] = $this->status;
319 return($ret);
320 }
321 }
322 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
323 ?>