ui-lib conversion
authorJamie Cameron <jcameron@webmin.com>
Fri, 4 Jan 2008 02:17:21 +0000 (02:17 +0000)
committerJamie Cameron <jcameron@webmin.com>
Fri, 4 Jan 2008 02:17:21 +0000 (02:17 +0000)
raid/CHANGELOG
raid/index.cgi
raid/lang/en
raid/raid-lib.pl
raid/raid_form.cgi
raid/save_raid.cgi
raid/view_raid.cgi

index f42c0c6..4f56060 100644 (file)
@@ -11,3 +11,6 @@ Removed need to explicitly select a parity disk for RAID 4 when using MDADM.
 Added support for RAID 10 arrays when using MDADM.
 Changed the main page to use a table for existing RAID arrays, rather than icons.
 Added a section for configuring RAID problem notification when using MDADM.
+---- Changes since 1.390 ----
+Converted all pages to use the new Webmin UI library, for a more consistent look.
+Added a confirmation page before deleting a RAID array.
index f5f972e..13882ad 100755 (executable)
@@ -50,7 +50,7 @@ if (@$conf) {
                                "<font color=#00aa00>$text{'yes'}</font>" :
                                "<font color=#ff0000>$text{'no'}</font>",
                        $lvl eq 'linear' ? $text{'linear'} : $text{'raid'.$lvl},
-                       join(" ", @mems),
+                       &ui_links_row(\@mems),
                        ]);
                }
        print &ui_columns_end();
index 217039b..b7b85b8 100644 (file)
@@ -89,6 +89,7 @@ view_newmount=Mount RAID on:
 view_newmount2=Mount RAID as Virtual Memory
 view_mountmsg=Enter a directory and click this button to go to a form for mounting the RAID device, which must already contain a filesystem.
 view_mountmsg2=Click this button to use this RAID device for virtual memory on your system.
+view_blocks=$1 blocks
 
 mkfs_title=Create Filesystem
 mkfs_header2=This form allows you to build a new $2 filesystem on $1. <b>All</b> existing data will be erased!
@@ -121,3 +122,8 @@ notif_err=Failed to save RAID problem notification options
 notif_emailaddr=Missing or invalid notification address
 notif_emailfrom=Missing or invalid From address
 notif_eprogram=Missing or non-existant program to run
+
+delete_title=Delete RAID Array
+delete_rusure=Are you sure you want to delete the RAID array $1, which uses $2 of disk space?
+delete_ok=Yes, Delete It
+delete_eidx=No RAID array selected!
index b3054e2..c8ea3e0 100644 (file)
@@ -476,6 +476,7 @@ return ();
 }
 
 # find_free_partitions(&skip, showtype, showsize)
+# Returns a list of options, suitable for ui_select
 sub find_free_partitions
 {
 &foreign_require("fdisk", "fdisk-lib.pl");
@@ -490,7 +491,7 @@ foreach $c (@$conf) {
                $used{$d}++;
                }
        }
-local $disks;
+local @disks;
 local $d;
 foreach $d (&fdisk::list_disks_partitions()) {
        foreach $p (@{$d->{'parts'}}) {
@@ -500,21 +501,21 @@ foreach $d (&fdisk::list_disks_partitions()) {
                next if (@st);
                $tag = &foreign_call("fdisk", "tag_name", $p->{'type'});
                $p->{'blocks'} =~ s/\+$//;
-               $disks .= sprintf "<option value='%s'>%s%s%s\n",
-                       $p->{'device'}, $p->{'desc'},
-                       $tag && $_[1] ? " ($tag)" : "",
-                       !$_[2] ? "" :
-                       $d->{'cylsize'} ? " (".&nice_size($d->{'cylsize'}*($p->{'end'} - $p->{'start'} + 1)).")" :
-                       " ($p->{'blocks'} $text{'blocks'})";
+               push(@disks, [ $p->{'device'},
+                              $p->{'desc'}.
+                              ($tag && $_[1] ? " ($tag)" : "").
+                              (!$_[2] ? "" :
+                               $d->{'cylsize'} ? " (".&nice_size($d->{'cylsize'}*($p->{'end'} - $p->{'start'} + 1)).")" :
+                               " ($p->{'blocks'} $text{'blocks'})") ]);
                }
        }
 foreach $c (@$conf) {
        next if (!$c->{'active'} || $used{$c->{'value'}});
        local @st = &device_status($c->{'value'});
        next if (@st || $skip{$c->{'value'}});
-       $disks .= sprintf "<option value='%s'>%s\n",
-               $c->{'value'}, &text('create_rdev',
-                   $c->{'value'} =~ /md(\d+)$/ ? "$1" : $c->{'value'});
+       push(@disks, [ $c->{'value'},
+                      &text('create_rdev',
+                        $c->{'value'} =~ /md(\d+)$/ ? "$1" : $c->{'value'}) ]);
        }
 local $vg;
 foreach $vg (&lvm::list_volume_groups()) {
@@ -525,12 +526,11 @@ foreach $vg (&lvm::list_volume_groups()) {
                         $skip->{$lv->{'device'}});
                local @st = &device_status($lv->{'device'});
                next if (@st);
-               $disks .= sprintf "<option value='%s'>%s\n",
-                       $lv->{'device'},
-                       &text('create_lvm', $lv->{'vg'}, $lv->{'name'});
+               push(@disks, [ $lv->{'device'},
+                             &text('create_lvm', $lv->{'vg'}, $lv->{'name'}) ]);
                }
        }
-return $disks;
+return @disks;
 }
 
 # convert_to_hd(device)
index 9b8c59e..551de06 100755 (executable)
@@ -24,87 +24,69 @@ $raid = { 'value' => "/dev/md$max",
                       ] };
 
 # Find available partitions
-$disks = &find_free_partitions(undef, 1, 1);
-if (!$disks) {
+@disks = &find_free_partitions(undef, 1, 1);
+if (!@disks) {
        print "<p><b>$text{'create_nodisks'}</b> <p>\n";
        &ui_print_footer("", $text{'index_return'});
        exit;
        }
 
-print "<form action=create_raid.cgi>\n";
-print "<input type=hidden name=idx value='$in{'idx'}'>\n";
-print "<table border>\n";
-print "<tr $tb> <td><b>$text{'create_header'}</b></td> </tr>\n";
-print "<tr $cb> <td><table>\n";
+print &ui_form_start("create_raid.cgi");
+print &ui_hidden("idx", $in{'idx'});
+print &ui_table_start($text{'create_header'}, undef, 2, [ "width=30%" ]);
 
-print "<tr> <td><b>$text{'create_device'}</b></td>\n";
-print "<td><tt>$raid->{'value'}</tt></td> </tr>\n";
-print "<input type=hidden name=device value='$raid->{'value'}'>\n";
+# Device name
+print &ui_table_row($text{'create_device'}, "<tt>$raid->{'value'}</tt>");
+print &ui_hidden("device", $raid->{'value'});
 
+# RAID level
 $lvl = &find_value('raid-level', $raid->{'members'});
-print "<tr> <td><b>$text{'create_level'}</b></td>\n";
-print "<td>",$lvl eq 'linear' ? $text{'linear'}
-                             : $text{"raid$lvl"},"</td> </tr>\n";
-print "<input type=hidden name=level value='$lvl'>\n";
+print &ui_table_row($text{'create_level'},
+       $lvl eq 'linear' ? $text{'linear'} : $text{"raid$lvl"});
+print &ui_hidden("level", $lvl);
 
+# Create superblock?
 $super = &find_value('persistent-superblock', $raid->{'members'});
-print "<tr> <td><b>$text{'create_super'}</b></td>\n";
-printf "<td><input name=super type=radio value=1 %s> %s\n",
-       $super ? 'checked' : '', $text{'yes'};
-printf "<input name=super type=radio value=0 %s> %s</td> </tr>\n",
-       $super ? '' : 'checked', $text{'no'};
+print &ui_table_row($text{'create_super'},
+       &ui_yesno_radio("super", $super ? 1 : 0));
 
+# Parity algorithm
 if ($lvl >= 5) {
        $parity = &find_value('parity-algorithm', $raid->{'members'});
-       print "<tr> <td><b>$text{'create_parity'}</b></td>\n";
-       print "<td><select name=parity>\n";
-       foreach $a ('', 'left-asymmetric', 'right-asymmetric',
-                   'left-symmetric', 'right-symmetric') {
-               printf "<option value='%s' %s>%s\n",
-                       $a, $parity eq $a ? 'selected' : '',
-                       $a ? $a : $text{'default'};
-               }
-       print "</select></td> </tr>\n";
+       print &ui_table_row($text{'create_parity'},
+               &ui_select("parity", $parity,
+                       [ [ '', $text{'default'} ],
+                         'left-asymmetric', 'right-asymmetric',
+                         'left-symmetric', 'right-symmetric' ]));
        }
 
+# Chunk size
 $chunk = &find_value('chunk-size', $raid->{'members'});
-print "<tr> <td><b>$text{'create_chunk'}</b></td>\n";
-print "<td><select name=chunk>\n";
-for($i=4; $i<=4096; $i*=2) {
-       printf "<option value=%d %s>%d kB\n",
-               $i, $chunk == $i ? 'selected' : '', $i;
-       }
-print "</select></td> </tr>\n";
+for($i=4; $i<=4096; $i*=2) { push(@chunks, [ $i, $i." kB" ]); }
+print &ui_table_row($text{'create_chunk'},
+       &ui_select("chunk", $chunk, \@chunks));
 
 # Display partitions in raid, spares and parity
-print "<tr> <td valign=top><b>$text{'create_disks'}</b></td>\n";
-print "<td><select name=disks multiple size=4>\n";
-print $disks;
-print "</select></td> </tr>\n";
+print &ui_table_row($text{'create_disks'},
+       &ui_select("disks", undef, \@disks, 4, 1));
 
 if ($lvl >= 4 && $lvl != 10) {
-       print "<tr> <td valign=top><b>$text{'create_spares'}</b></td>\n";
-       print "<td><select name=spares multiple size=4>\n";
-       print $disks;
-       print "</select></td> </tr>\n";
+       print &ui_select($text{'create_spares'},
+               &ui_select("spares", undef, \@disks, 4, 1));
        }
 
 if ($lvl == 4 && $raid_mode ne 'mdadm') {
-       print "<tr> <td valign=top><b>$text{'create_pdisk'}</b></td>\n";
-       print "<td><select name=pdisk>\n";
-       print "<option value='' selected>$text{'create_auto'}\n";
-       print $disks;
-       print "</select></td> </tr>\n";
+       print &ui_select($text{'create_pdisk'},
+               &ui_select("pdisk", '', [ [ '', $text{'create_auto'} ],
+                                         @disks ], 4, 1));
        }
 
-print "<tr> <td><b>$text{'create_force'}</b></td>\n";
-print "<td><input type=radio name=force value=1> $text{'yes'}\n";
-print "<input type=radio name=force value=0 checked> $text{'no'}\n";
-print "</td> </tr>\n";
-
-print "</table></td></tr></table>\n";
+# Force creation
+print &ui_table_row($text{'create_force'},
+       &ui_yesno_radio("force", 0));
 
-print "<input type=submit value='$text{'create'}'></form>\n";
+print &ui_table_end();
+print &ui_form_end([ [ undef, $text{'create'} ] ]);
 
 &ui_print_footer("", $text{'index_return'});
 
index 0b41355..de01f3c 100755 (executable)
@@ -5,22 +5,41 @@
 require './raid-lib.pl';
 &ReadParse();
 $conf = &get_raidtab();
+$in{'idx'} eq '' && &error($text{'delete_eidx'});
 $old = $conf->[$in{'idx'}];
 
 if ($in{'delete'}) {
        # Delete a RAID set
-       &lock_raid_files();
-       &unmake_raid($old);
-       &delete_raid($old);
-       &unlock_raid_files();
-       &webmin_log("delete", undef, $old->{'value'});
-       &redirect("");
+       if (!$in{'confirm'}) {
+               # Ask first!
+               &ui_print_header(undef, $text{'delete_title'}, "");
+
+               print "<center>\n";
+               print &ui_form_start("save_raid.cgi");
+               print &ui_hidden("delete", 1);
+               print &ui_hidden("idx", $in{'idx'});
+               print &text('delete_rusure', "<tt>$old->{'value'}</tt>",
+                           &nice_size($old->{'size'}*1024)),"<p>\n";
+               print &ui_form_end([ [ "confirm", $text{'delete_ok'} ] ]);
+               print "</center>\n";
+
+               &ui_print_footer("", $text{'index_return'});
+               }
+       else {
+               # Really do it
+               &lock_raid_files();
+               &unmake_raid($old);
+               &delete_raid($old);
+               &unlock_raid_files();
+               &webmin_log("delete", undef, $old->{'value'});
+               &redirect("");
+               }
        }
 elsif ($in{'mkfs'}) {
        # Display form for making a filesystem
        &ui_print_header(undef, $text{'mkfs_title'}, "");
 
-       print "<p>",&text('mkfs_header2', "<tt>$old->{'value'}</tt>",
+       print &text('mkfs_header2', "<tt>$old->{'value'}</tt>",
                          $in{'fs'}),"<br>\n";
        print "<form action=mkfs.cgi>\n";
        print "<input type=hidden name=idx value='$in{'idx'}'>\n";
index 1939a57..b8559ee 100755 (executable)
@@ -13,53 +13,53 @@ print "Refresh: $config{'refresh'}\r\n"
 $conf = &get_raidtab();
 $raid = $conf->[$in{'idx'}];
 
-print "<form action=save_raid.cgi>\n";
-print "<input type=hidden name=idx value='$in{'idx'}'>\n";
-print "<table border>\n";
-print "<tr $tb> <td><b>$text{'view_header'}</b></td> </tr>\n";
-print "<tr $cb> <td><table>\n";
+print &ui_form_start("save_raid.cgi");
+print &ui_hidden("idx", $in{'idx'});
+print &ui_table_start($text{'view_header'}, undef, 2, [ "width=30%" ]);
 
-print "<tr> <td><b>$text{'view_device'}</b></td>\n";
-print "<td><tt>$raid->{'value'}</tt></td> </tr>\n";
+# Device name
+print &ui_table_row($text{'view_device'}, "<tt>$raid->{'value'}</tt>");
 
+# RAID level
 $lvl = &find_value('raid-level', $raid->{'members'});
-print "<tr> <td><b>$text{'view_level'}</b></td>\n";
-print "<td>",$lvl eq 'linear' ? $text{'linear'}
-                             : $text{"raid$lvl"},"</td> </tr>\n";
+print &ui_table_row($text{'view_level'},
+       $lvl eq 'linear' ? $text{'linear'} : $text{"raid$lvl"});
 
+# Current status
 @st = &device_status($raid->{'value'});
-print "<tr> <td><b>$text{'view_status'}</b></td> <td>\n";
-print $st[1] eq 'lvm' ? &text('view_lvm', "<tt>$st[0]</tt>") :
+print &ui_table_row($text{'view_status'},
+      $st[1] eq 'lvm' ? &text('view_lvm', "<tt>$st[0]</tt>") :
       $st[2] ? &text('view_mounted', "<tt>$st[0]</tt>") :
       @st ? &text('view_mount', "<tt>$st[0]</tt>") :
       $raid->{'active'} ? $text{'view_active'} :
-                         $text{'view_inactive'};
-print "</td> </tr>\n";
+                         $text{'view_inactive'});
 
 if ($raid->{'size'}) {
-       print "<tr> <td><b>$text{'view_size'}</b></td>\n";
-       print "<td>$raid->{'size'} blocks ",
-             "(",&nice_size($raid->{'size'}*1024),")</td> </tr>\n";
+       print &ui_table_row($text{'view_size'},
+               &text('view_blocks', $raid->{'size'})." ".
+               "(".&nice_size($raid->{'size'}*1024).")");
        }
 if ($raid->{'resync'}) {
-       print "<tr> <td><b>$text{'view_resync'}</b></td>\n";
-       print "<td>$raid->{'resync'} \%</td> </tr>\n";
+       print &ui_table_row($text{'view_resync'}, "$raid->{'resync'} \%");
        }
 
+# Superblock?
 $super = &find_value('persistent-superblock', $raid->{'members'});
-print "<tr> <td><b>$text{'view_super'}</b></td>\n";
-print "<td>",$super ? $text{'yes'} : $text{'no'},"</td> </tr>\n";
+print &ui_table_row($text{'view_super'},
+       $super ? $text{'yes'} : $text{'no'});
 
+# Parity method
 if ($lvl eq '5') {
        $parity = &find_value('parity-algorithm', $raid->{'members'});
-       print "<tr> <td><b>$text{'view_parity'}</b></td>\n";
-       print "<td>",$parity ? $parity : $text{'default'},"</td> </tr>\n";
+       print &ui_table_row($text{'view_parity'}, $parity || $text{'default'});
        }
 
+# Chunk size
 $chunk = &find_value('chunk-size', $raid->{'members'});
-print "<tr> <td><b>$text{'view_chunk'}</b></td>\n";
-print "<td>",$chunk ? "$chunk kB" : $text{'default'},"</td> </tr>\n";
+print &ui_table_row($text{'view_chunk'},
+       $chunk ? "$chunk kB" : $text{'default'});
 
+# Current errors
 if (ref($raid->{'errors'})) {
        for($i=0; $i<@{$raid->{'errors'}}; $i++) {
                if ($raid->{'errors'}->[$i] ne "U") {
@@ -67,132 +67,114 @@ if (ref($raid->{'errors'})) {
                        }
                }
        if (@badlist) {
-               print "<tr> <td><b>$text{'view_errors'}</b></td>\n";
-               print "<td><font color=#ff0000>",
-                       &text('view_bad', scalar(@badlist)),
-                       "</font></td> </tr>\n";
+               print &ui_table_row($text{'view_errors'},
+                       "<font color=#ff0000>".
+                       &text('view_bad', scalar(@badlist)).
+                       "</font>");
                }
        }
 
+# Current state
 if ($raid->{'state'}) {
-       print "<tr> <td><b>$text{'view_state'}</b></td>\n";
-       print "<td>$raid->{'state'}</td> </tr>\n";
+       print &ui_table_row($text{'view_state'}, $raid->{'state'});
        }
 
+# Rebuild percent
 if ($raid->{'rebuild'}) {
-       print "<tr> <td><b>$text{'view_rebuild'}</b></td>\n";
-       print "<td>$raid->{'rebuild'} \%</td> </tr>\n";
+       print &ui_table_row($text{'view_rebuild'}, $raid->{'rebuild'}." \%");
        }
 
 
 # Display partitions in RAID
-print "<tr> <td valign=top><b>$text{'view_disks'}</b></td> <td>\n";
+$rp = undef;
 foreach $d (&find('device', $raid->{'members'})) {
        if (&find('raid-disk', $d->{'members'}) ||
             &find('parity-disk', $d->{'members'})) {
                local $name = &mount::device_name($d->{'value'});
-               print $name,"\n";
+               $rp .= $name."\n";
                if (!&indevlist($d->{'value'}, $raid->{'devices'}) &&
                    $raid->{'active'}) {
-                       print "<font color=#ff0000>$text{'view_down'}</font>\n";
+                       $rp .= "<font color=#ff0000>$text{'view_down'}</font>\n";
                        }
-               print "<br>\n";
-               $rdisks .= "<option value='$d->{'value'}'>$name\n";
-               $rdisks_count++;
+               $rp .= "<br>\n";
+               push(@rdisks, [ $d->{'value'}, $name ]);
                }
        }
-print "</td> </tr>\n";
+print &ui_table_row($text{'view_disks'}, $rp);
 
 # Display spare partitions
+$sp = undef;
 foreach $d (&find('device', $raid->{'members'})) {
        if (&find('spare-disk', $d->{'members'})) {
                local $name = &mount::device_name($d->{'value'});
                $sp .= "$name<br>\n";
-               $rdisks .= "<option value='$d->{'value'}'>$name\n";
-               $rdisks_count++;
+               push(@rdisks, [ $d->{'value'}, $name ]);
                }
        }
 if ($sp) {
-       print "<tr> <td valign=top><b>$text{'view_spares'}</b></td> <td>\n";
-       print $sp,"</td> </tr>\n";
+       print &ui_table_row($text{'view_spares'}, $sp);
        }
+print &ui_table_end();
 
-print "</table></td></tr></table>\n";
-
-print "<p><hr>\n";
-print "<table width=100%><tr>\n";
+print "<hr>\n";
+@grid = ( );
 
 if ($raid_mode eq "raidtools" && !$st[2]) {
        # Only classic raid tools can disable a RAID
        local $act = $raid->{'active'} ? "stop" : "start";
-       print "<tr> <td><input type=submit name=$act ",
-             "value='",$text{'view_'.$act},"'></td>\n";
-       print "<td>",$text{'view_'.$act.'desc'},"</td> </tr>\n";
+       push(@grid, &ui_submit($text{'view_'.$act}, $act),
+                   $text{'view_'.$act.'desc'});
        }
 
 if ($raid_mode eq "mdadm") {
        # Only MDADM can add or remove a device (so far)
-       $disks = &find_free_partitions([ $raid->{'value'} ], 0, 1);
+       @disks = &find_free_partitions([ $raid->{'value'} ], 0, 1);
        if ($disks) {
-               print "<tr> <td><input type=submit name=add ",
-                     "value='$text{'view_add'}'>\n";
-               print "<select name=disk>\n";
-               print $disks;
-               print "</select></td>\n";
-               print "<td>$text{'view_adddesc'}</td> </tr>\n";
+               push(@grid, &ui_submit($text{'view_add'}, "add")." ".
+                           &ui_select("disk", undef, \@disks),
+                           $text{'view_adddesc'});
                }
 
        if ($rdisks_count > 1) {
-               print "<tr> <td><input type=submit name=remove ",
-                     "value='$text{'view_remove'}'>\n";
-               print "<select name=rdisk>\n";
-               print $rdisks;
-               print "</select></td>\n";
-               print "<td>$text{'view_removedesc'}</td> </tr>\n";
+               push(@grid, &ui_submit($text{'view_remove'}, "remove")." ".
+                           &ui_select("rdisk", undef, \@rdisks),
+                           $text{'view_removedesc'});
                }
        }
 
 if ($raid->{'active'} && !$st[2]) {
        # Show buttons for creating filesystems
        $fstype = $st[1] || "ext3";
-       print "<tr> <td nowrap><input type=submit name=mkfs ",
-             "value='$text{'view_mkfs2'}'>\n";
-       print "<select name=fs>\n";
-       foreach $f (&fdisk::supported_filesystems()) {
-               printf "<option value=%s %s>%s (%s)\n",
-                       $f, $fstype eq $f ? "selected" : "",
-                       $fdisk::text{"fs_$f"}, $f;
-               }
-       print "</select></td>\n";
-       print "<td>$text{'view_mkfsdesc'}</td> </tr>\n";
+       push(@grid, &ui_submit($text{'view_mkfs2'}, "mkfs")." ".
+           &ui_select("fs", $fstype,
+                       [ map { [ $_, $fdisk::text{"fs_".$_} ] }
+                             &fdisk::supported_filesystems() ]),
+           $text{'view_mkfsdesc'});
        }
 
 if (!@st) {
        # Show button for mounting filesystem
-       print "<tr> <td valign=top>\n";
-       print "<input type=submit name=mount ",
-             "value=\"",$text{'view_newmount'},"\">\n";
-       print "<input name=newdir size=20></td>\n";
-       print "<td>$text{'view_mountmsg'}</td> </tr>\n";
+       push(@grid, &ui_submit($text{'view_newmount'}, "mount")." ".
+                   &ui_textbox("newdir", undef, 20),
+                   $text{'view_mountmsg'});
 
        # Show button for mounting as swap
-       print "<tr> <td valign=top>\n";
-       print "<input type=submit name=mountswap ",
-             "value=\"",$text{'view_newmount2'},"\"></td>\n";
-       print "<td>$text{'view_mountmsg2'}</td> </tr>\n";
+       push(@grid, &ui_submit($text{'view_newmount2'}, "mountswap"),
+                   $text{'view_mountmsg2'});
        }
 
 if (!$st[2]) {
-       print "<tr> <td><input type=submit name=delete value='$text{'view_delete'}'></td>\n";
-       print "<td>$text{'view_deletedesc'}</td> </tr>\n";
+       push(@grid, &ui_submit($text{'view_delete'}, "delete"),
+                   $text{'view_deletedesc'});
        }
 
+if (@grid) {
+       print &ui_grid_table(\@grid, 2, 100, [ "width=20% nowrap" ]);
+       }
 if ($st[2]) {
-       print "<tr> <td colspan=2><b>$text{'view_cannot2'}</b></td> </tr>\n";
+       print "<b>$text{'view_cannot2'}</b><p>\n";
        }
-
-print "</tr></table>\n";
-print "</form>\n";
+print &ui_form_end();
 
 &ui_print_footer("", $text{'index_return'});