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