aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/freenas/pkg/freenas_guiconfig.inc124
-rw-r--r--packages/freenas/www/disks_manage_init.php392
-rw-r--r--packages/freenas/www/disks_manage_tools.php151
-rw-r--r--packages/freenas/www/disks_mount_tools.php91
4 files changed, 359 insertions, 399 deletions
diff --git a/packages/freenas/pkg/freenas_guiconfig.inc b/packages/freenas/pkg/freenas_guiconfig.inc
index c049659a..93e7a826 100644
--- a/packages/freenas/pkg/freenas_guiconfig.inc
+++ b/packages/freenas/pkg/freenas_guiconfig.inc
@@ -38,8 +38,132 @@ $d_groupconfdirty_path = $g['varrun_path'] . "/group.conf.dirty";
$d_smbshareconfdirty_path = $g['varrun_path'] . "/smbshare.conf.dirty";
$d_upnpconfdirty_path = $g['varrun_path'] . "/upnp.conf.dirty";
+/* ============================================================================= */
+/* == Constants used together with executing a UNIX command line tool == */
+/* ============================================================================= */
+
+define("DONE_PARAGRAPH", "
+ <p>
+ <span class='red' style='font-family: Courier, monospace; font-size: small;'><strong>Done!</strong></span>
+ </p>
+ ");
+
+define("CMDOUT_PARA", "
+ <p style='font-size: small;'>
+ <strong>Command output:</strong> (use the toggle icon to unveil detailed infos):
+ </p>
+ ");
+
+define("CMDOUT_TOGGLE_FUNC", "
+function toggle_cmdout(image, totoggle) {
+ var plusSrc = \"/themes/{$g['theme']}/images/misc/bullet_toggle_plus.png\";
+ var minusSrc = \"/themes/{$g['theme']}/images/misc/bullet_toggle_minus.png\";
+ var currentSrc = image.src;
+ var newSrc = (currentSrc.indexOf(\"plus\") >= 0) ? minusSrc : plusSrc;
+
+ image.src = newSrc;
+ Effect.toggle(totoggle, 'appear', { duration: 0.75 });
+}
+");
+
+define("CMDOUT_AJAX_SCRIPT", "
+ <script type='text/javascript'>
+ function execCMD() {
+ var to_insert = \"<div style='visibility:hidden' id='loading' name='loading'><img src='/themes/nervecenter/images/misc/loader_tab.gif' \/><\/div>\";
+ new Insertion.Before('doCMDSubmit', to_insert);
+
+ $('doCMDSubmit').style.visibility = 'hidden';
+ $('loading').style.visibility = 'visible';
+ $('cmdOutputTD').innerHTML = '';
+
+ new Ajax.Request(
+ \"{$_SERVER['SCRIPT_NAME']}\", {
+ method : 'post',
+ parameters : Form.serialize($('iform')),
+ onSuccess : execCMDComplete,
+ onFailure : execCMDFailure
+ }
+ );
+ }
+
+ function execCMDFailure(req) {
+ if($('doCMDSubmit')) $('doCMDSubmit').style.visibility = 'visible';
+ if($('loading')) $('loading').style.visibility = 'hidden';
+ if($('inputerrors')) window.scrollTo(0, 0);
+ if($('inputerrors')) new Effect.Shake($('inputerrors'));
+ if($('inputerrors')) $('inputerrors').innerHTML = req.responseText;
+ }
+
+ function execCMDComplete(req) {
+ $('cmdOutputTD').innerHTML = req.responseText;
+ $('loading').style.visibility = 'hidden';
+ $('doCMDSubmit').style.visibility = 'visible';
+ $('cmdOutputTD').style.visibility = 'visible';
+ }
+ </script>
+");
+
$freenas_config =& $config['installedpackages']['freenas']['config'][0];
+/* ============================================================================= */
+/* == Functions used together with executing a UNIX command line tool == */
+/* ============================================================================= */
+
+function assemble_cmdout($button, $out, $done = false) {
+ $dopara = DONE_PARAGRAPH;
+
+ $retvalue =<<<EOD
+{$button}
+{$out}
+
+EOD;
+
+ if ($done) { $retvalue .= "{$dopara}\n"; }
+ return $retvalue;
+}
+
+function create_cmdout_container($id = "", $cmd = "") {
+ $diskinit_str = "";
+
+ if (is_array($cmd)) {
+ foreach ($cmd as $cmdline) {
+ $a_out = exec_command_and_return_text_array($cmdline);
+ $diskinit_str .= implode("\n", $a_out);
+ }
+ } else {
+ $a_out = exec_command_and_return_text_array($cmd);
+ $diskinit_str = implode("\n", $a_out);
+ }
+
+ $returnval =<<<EOD
+ <div id="{$id}" style="display: none; font-family: Courier, monospace; font-size: small;">
+ <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
+ </div>
+
+EOD;
+
+ return $returnval;
+}
+
+function create_toggle_button($title, $totoggle) {
+ global $g;
+
+ $returnval =<<<EOD
+ <table cellpadding="0" cellspacing="0" border="0" style="padding-bottom: 8px;">
+ <tr>
+ <td align="left" valign="middle" style="padding-right: 5px;">
+ <img src='/themes/{$g['theme']}/images/misc/bullet_toggle_plus.png' alt='' border='0' style='border: solid 1px silver; cursor: pointer;' onclick='toggle_cmdout(this, "{$totoggle}");' />
+ </td>
+ <td align="left" valign="middle" style='font-family: Courier, monospace; font-size: small;'>
+ {$title}:
+ </td>
+ </tr>
+ </table>
+EOD;
+
+ return $returnval;
+}
+
function print_error_box_np($msg) {
global $g;
diff --git a/packages/freenas/www/disks_manage_init.php b/packages/freenas/www/disks_manage_init.php
index f72d1505..4f55aabe 100644
--- a/packages/freenas/www/disks_manage_init.php
+++ b/packages/freenas/www/disks_manage_init.php
@@ -49,11 +49,6 @@ require_once("guiconfig.inc");
require_once("freenas_guiconfig.inc");
require_once("freenas_functions.inc");
-define("DONE_PARAGRAPH", "
- <p>
- <span class='red' style='font-family: Courier, monospace; font-size: small;'><strong>Done!</strong></span>
- </p>
- ");
define("DISK_DETAILS_PARA", "
<p style='font-size: small;'>
<strong>Disk initialization details</strong> (use the toggle icon to unveil detailed infos):
@@ -62,7 +57,6 @@ define("DISK_DETAILS_PARA", "
function create_format_output($disk, $type, $notinitmbr) {
$ddetails = DISK_DETAILS_PARA;
- $dopara = DONE_PARAGRAPH;
ob_end_flush();
@@ -74,20 +68,13 @@ EOD;
// Erase MBR if not checked
if (!$notinitmbr) {
$button = create_toggle_button("Erasing MBR and all paritions", "mbr_out");
- $a_out = exec_command_and_return_text_array("dd if=/dev/zero of=" . escapeshellarg($disk) . " bs=32k count=640");
- $diskinit_str = implode("\n", $a_out);
- $retvalue .=<<<EOD
- {$button}
- <div id="mbr_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
-
+ $cmd = "dd if=/dev/zero of=" . escapeshellarg($disk) . " bs=32k count=640";
+ $out = create_cmdout_container("mbr_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
} else {
$diskinit_str = "Keeping the MBR and all partitions";
$retvalue .=<<<EOD
- <div id="mbr_out" style="display: none; font-family: Courier, monospace; font-size: small;">
+ <div id="mbr_out" style="font-family: Courier, monospace; font-size: small;">
<pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
</div>
@@ -98,316 +85,148 @@ EOD;
case "ufs":
$button = create_toggle_button("Creating one partition", "ufs_fdisk_out");
/* Initialize disk */
- $a_out = exec_command_and_return_text_array("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufs_fdisk_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk);
+ $out = create_cmdout_container("ufs_fdisk_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Initializing partition", "ufs_dd_out");
/* Initialise the partition (optional) */
- $a_out = exec_command_and_return_text_array("/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufs_dd_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16";
+ $out = create_cmdout_container("ufs_dd_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating BSD label", "ufs_label_out");
/* Create s1 label */
- $a_out = exec_command_and_return_text_array("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufs_label_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto";
+ $out = create_cmdout_container("ufs_label_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating Filesystem", "ufs_newfs_out");
/* Create filesystem */
- $a_out = exec_command_and_return_text_array("/sbin/newfs -U " . escapeshellarg($disk) . "s1");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufs_newfs_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-{$dopara}
-
-EOD;
+ $cmd = "/sbin/newfs -U " . escapeshellarg($disk) . "s1";
+ $out = create_cmdout_container("ufs_newfs_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
break; // end case "ufs":
case "ufs_no_su":
$button = create_toggle_button("Creating one partition", "ufsn_fdisk_out");
/* Initialize disk */
- $a_out = exec_command_and_return_text_array("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
+ $cmd = "/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk);
+ $out = create_cmdout_container("ufsn_fdisk_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsn_fdisk_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
$button = create_toggle_button("Initializing partition", "ufsn_dd_out");
/* Initialise the partition (optional) */
- $a_out = exec_command_and_return_text_array("/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsn_dd_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16";
+ $out = create_cmdout_container("ufsn_dd_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
+
$button = create_toggle_button("Creating BSD label", "ufsn_label_out");
/* Create s1 label */
- $a_out = exec_command_and_return_text_array("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsn_label_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto";
+ $out = create_cmdout_container("ufsn_label_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
+
$button = create_toggle_button("Creating Filesystem", "ufsn_newfs_out");
/* Create filesystem */
- $a_out = exec_command_and_return_text_array("/sbin/newfs -m 0 " . escapeshellarg($disk) . "s1");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsn_newfs_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-{$dopara}
-
-EOD;
-
+ $cmd = "/sbin/newfs -m 0 " . escapeshellarg($disk) . "s1";
+ $out = create_cmdout_container("ufsn_newfs_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
+
break; // end ufs_no_su
case "ufsgpt":
$button = create_toggle_button("Destroying old GTP information", "ufsg_gptd_out");
/* Destroy GPT partition table */
- $a_out = exec_command_and_return_text_array("/sbin/gpt destroy " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsg_gptd_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/gpt destroy " . escapeshellarg($disk);
+ $out = create_cmdout_container("ufsg_gptd_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating GPT partition", "ufsg_gptc_out");
/* Create GPT partition table */
- $a_out = exec_command_and_return_text_array("/sbin/gpt create -f " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
- $a_out = exec_command_and_return_text_array("/sbin/gpt add -t ufs " . escapeshellarg($disk));
- $diskinit_str .= implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsg_gptc_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = array("/sbin/gpt create -f " . escapeshellarg($disk),
+ "/sbin/gpt add -t ufs " . escapeshellarg($disk));
+ $out = create_cmdout_container("ufsg_gptc_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating Filesystem with Soft Updates", "ufsg_newfs_out");
/* Create filesystem */
- $a_out = exec_command_and_return_text_array("/sbin/newfs -U " . escapeshellarg($disk) . "p1");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsg_newfs_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-{$dopara}
-
-EOD;
+ $cmd = "/sbin/newfs -U " . escapeshellarg($disk) . "p1";
+ $out = create_cmdout_container("ufsg_newfs_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
break; // end case "ufsgpt":
case "ufsgpt_no_su":
$button = create_toggle_button("Destroying old GTP information", "ufsgn_gpt_out");
/* Destroy GPT partition table */
- $a_out = exec_command_and_return_text_array("/sbin/gpt destroy " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsgn_gpt_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/gpt destroy " . escapeshellarg($disk);
+ $out = create_cmdout_container("ufsgn_gpt_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating GPT partition", "ufsgn_gptc_out");
/* Create GPT partition table */
- $a_out = exec_command_and_return_text_array("/sbin/gpt create -f " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
- $a_out = exec_command_and_return_text_array("/sbin/gpt add -t ufs " . escapeshellarg($disk));
- $diskinit_str .= implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsgn_gptc_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
+ $cmd = array("/sbin/gpt create -f " . escapeshellarg($disk),
+ "/sbin/gpt add -t ufs " . escapeshellarg($disk));
+ $out = create_cmdout_container("ufsgn_gptc_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
-EOD;
$button = create_toggle_button("Creating Filesystem without Soft Updates", "ufsgn_newfs_out");
/* Create filesystem */
- $a_out = exec_command_and_return_text_array("/sbin/newfs -m 0 " . escapeshellarg($disk) . "p1");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="ufsgn_newfs_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-{$dopara}
-
-EOD;
+ $cmd = "/sbin/newfs -m 0 " . escapeshellarg($disk) . "p1";
+ $out = create_cmdout_container("ufsgn_newfs_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
break; // end case "ufsgpt_no_su":
case "softraid":
$button = create_toggle_button("Initializing disk", "softr_fdisk_out");
/* Initialize disk */
- $a_out = exec_command_and_return_text_array("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="softr_fdisk_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk);
+ $out = create_cmdout_container("softr_fdisk_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Initializing partition", "softr_dd_out");
/* Initialise the partition (optional) */
- $a_out = exec_command_and_return_text_array("/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="softr_dd_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16";
+ $out = create_cmdout_container("softr_dd_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
+
$button = create_toggle_button("Delete old gmirror information", "softr_dd_out");
/* Delete old gmirror information */
- $a_out = exec_command_and_return_text_array("/sbin/gmirror clear " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="softr_dd_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-{$dopara}
-
-EOD;
+ $cmd = "/sbin/gmirror clear " . escapeshellarg($disk);
+ $out = create_cmdout_container("softr_dd_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
break; // end case "softraid":
case "msdos":
$button = create_toggle_button("Initialize disk", "dos_fdisk_out");
/* Initialize disk */
- $a_out = exec_command_and_return_text_array("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="dos_fdisk_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk);
+ $out = create_cmdout_container("dos_fdisk_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Initialize partion", "dos_dd_out");
/* Initialise the partition (optional) */
- $a_out = exec_command_and_return_text_array("/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="dos_dd_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/bin/dd if=/dev/zero of=" . escapeshellarg($disk) . "s1 bs=32k count=16";
+ $out = create_cmdout_container("dos_dd_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating BSD label", "dos_label_out");
/* Initialise the partition (optional) */
- $a_out = exec_command_and_return_text_array("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="dos_label_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-
-EOD;
+ $cmd = "/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto";
+ $out = create_cmdout_container("dos_label_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
$button = create_toggle_button("Creating Filesystem", "dos_newfs_out");
/* Initialise the partition (optional) */
- $a_out = exec_command_and_return_text_array("/sbin/newfs_msdos -F 32 " . escapeshellarg($disk) . "s1");
- $diskinit_str = implode("\n", $a_out);
-
- $retvalue .=<<<EOD
- {$button}
- <div id="dos_newfs_out" style="display: none; font-family: Courier, monospace; font-size: small;">
- <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
- </div>
-{$dopara}
-
-EOD;
+ $a_out = "/sbin/newfs_msdos -F 32 " . escapeshellarg($disk) . "s1";
+ $out = create_cmdout_container("dos_newfs_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out, true);
+
break; // end case "msdos":
} // end switch
return $retvalue;
}
-function create_toggle_button($title, $totoggle) {
- global $g;
-
- $returnval =<<<EOD
- <table cellpadding="0" cellspacing="0" border="0" style="padding-bottom: 8px;">
- <tr>
- <td align="left" valign="middle" style="padding-right: 5px;">
- <img src='/themes/{$g['theme']}/images/misc/bullet_toggle_plus.png' alt='' border='0' style='border: solid 1px silver; cursor: pointer;' onclick='toggle_cmdout(this, "{$totoggle}");' />
- </td>
- <td align="left" valign="middle" style='font-family: Courier, monospace; font-size: small;'>
- {$title}:
- </td>
- </tr>
- </table>
-EOD;
-
- return $returnval;
-}
-
if (!is_array($freenas_config['disks']['disk']))
$freenas_config['disks']['disk'] = array();
@@ -594,15 +413,7 @@ function disk_change() {
}
}
-function toggle_cmdout(image, totoggle) {
- var plusSrc = "/themes/<?= $g['theme'] ?>/images/misc/bullet_toggle_plus.png";
- var minusSrc = "/themes/<?= $g['theme'] ?>/images/misc/bullet_toggle_minus.png";
- var currentSrc = image.src;
- var newSrc = (currentSrc.indexOf("plus") >= 0) ? minusSrc : plusSrc;
-
- image.src = newSrc;
- Effect.toggle(totoggle, 'appear', { duration: 0.75 });
-}
+<?= CMDOUT_TOGGLE_FUNC ?>
// -->
</script>
</head>
@@ -613,7 +424,7 @@ function toggle_cmdout(image, totoggle) {
<?php if ($input_errors) print_input_errors($input_errors); ?>
<?php if ($savemsg) print_info_box($savemsg); ?>
<?php if($errormsg) print_error_box($errormsg);?>
-<div id="inputerrors"></div>
+<div id="inputerrors"></div>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
@@ -631,40 +442,8 @@ function toggle_cmdout(image, totoggle) {
<td>
<div id="mainarea">
<form id="iform" name="iform" action="disks_manage_init.php" method="post">
+ <?= CMDOUT_AJAX_SCRIPT ?>
<table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
- <script type="text/javascript">
- function execFormat() {
- var to_insert = "<div style='visibility:hidden' id='loading' name='loading'><img src='/themes/nervecenter/images/misc/loader_tab.gif' /></div>";
- new Insertion.Before('doFormatSubmit', to_insert);
-
- $("doFormatSubmit").style.visibility = "hidden";
- $('loading').style.visibility = 'visible';
-
- new Ajax.Request(
- "<?=$_SERVER['SCRIPT_NAME'];?>", {
- method : "post",
- parameters : Form.serialize($("iform")),
- onSuccess : execFormatComplete,
- onFailure : execFormatFailure
- }
- );
- }
-
- function execFormatFailure(req) {
- if($('doFormatSubmit')) $('doFormatSubmit').style.visibility = 'visible';
- if($('loading')) $('loading').style.visibility = 'hidden';
- if($('inputerrors')) window.scrollTo(0, 0);
- if($('inputerrors')) new Effect.Shake($('inputerrors'));
- if($('inputerrors')) $('inputerrors').innerHTML = req.responseText;
- }
-
- function execFormatComplete(req) {
- $("formatOutputTD").innerHTML = req.responseText;
- $('loading').style.visibility = 'hidden';
- $("doFormatSubmit").style.visibility = 'visible';
- $("formatOutputTD").style.visibility = 'visible';
- }
- </script>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Disk");?></td>
<td width="78%" class="vtable">
@@ -697,22 +476,21 @@ function toggle_cmdout(image, totoggle) {
<tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
- <input id="doFormatSubmit" name="doFormatSubmit" type="button" class="formbtn" value="<?=gettext("Format disk!");?>" onclick="execFormat();" />
+ <input id="doCMDSubmit" name="doCMDSubmit" type="button" class="formbtn" value="<?=gettext("Format disk!");?>" onclick="execCMD();" />
</td>
</tr>
<tr>
<!-- Format Output Container - Do Not Delete -->
- <td id="formatOutputTD" valign="top" colspan="2" style="visibility: hidden; border: solid 1px silver; vertical-align: middle; width: 100%"></td>
+ <td id="cmdOutputTD" valign="top" colspan="2" style="visibility: hidden; border: solid 1px silver; vertical-align: middle; width: 100%"></td>
</tr>
<tr>
<td align="left" valign="top" colspan="2">
- <span class="red">
- <strong>WARNING:</strong>
- </span>
- <br />
- <span class="vexpl">
- <?= gettext("This step will erase all your partition, create partition number 1 and format the hard drive with the file system specified."); ?>
- </span>
+ <span class="red">
+ <strong>WARNING:</strong>
+ </span>
+ <br />
+ <span class="vexpl">
+ <?= gettext("This step will erase all your partition, create partition number 1 and format the hard drive with the file system specified."); ?>
</span>
</td>
</tr>
diff --git a/packages/freenas/www/disks_manage_tools.php b/packages/freenas/www/disks_manage_tools.php
index 85de9ce8..01438dab 100644
--- a/packages/freenas/www/disks_manage_tools.php
+++ b/packages/freenas/www/disks_manage_tools.php
@@ -49,6 +49,81 @@ require_once("guiconfig.inc");
require_once("freenas_guiconfig.inc");
require_once("freenas_functions.inc");
+function create_cmd_output(&$action, &$a_disk, &$disk, &$partition, &$umount) {
+ $cmdout = CMDOUT_PARA;
+
+ ob_end_flush();
+
+ $retvalue =<<<EOD
+{$cmdout}
+
+EOD;
+
+ switch($action)
+ {
+ case "fsck":
+ /* Get the id of the disk. */
+ $id = array_search_ex($disk, $a_disk, "name");
+ /* Get the filesystem type of the disk. */
+ $type = $a_disk[$id]['fstype'];
+ /* Check if disk is mounted. */
+ $ismounted = disks_check_mount_fullname($disk.$partition);
+
+ /* Umount disk if necessary. */
+ if($umount && $ismounted) {
+ $diskinit_str = "<strong class='red'>" . gettext("Note") . ":</strong> " . gettext("The disk is currently mounted! The mount point will be removed temporary to perform selected command.") . "<br /><br />";
+ $retvalue .=<<<EOD
+ <div id="ismounted_out" style="display: none; font-family: Courier, monospace; font-size: small;">
+ <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
+ </div>
+
+EOD;
+
+ disks_umount_fullname($disk.$partition);
+ }
+
+ switch($type)
+ {
+ case "":
+ case "ufs":
+ case "ufs_no_su":
+ case "ufsgpt":
+ case "ufsgpt_no_su":
+ $button = create_toggle_button("Checking disk", "ufsgn_fsck_out");
+ $cmd = "/sbin/fsck_ufs -y -f /dev/" . escapeshellarg($disk . $partition);
+ $out = create_cmdout_container("ufsgn_fsck_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
+ break;
+ case "gmirror":
+ case "gvinum":
+ case "graid5":
+ $diskinit_str = sprintf(gettext("Use <a href='%s'>RAID tools</a> for this disk!"), "disks_raid_{$type}_tools.php");
+ $retvalue .=<<<EOD
+ <div id="graid5_out" style="display: none; font-family: Courier, monospace; font-size: small;">
+ <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
+ </div>
+
+EOD;
+ break;
+ case "msdos":
+ $button = create_toggle_button("Checking disk", "dos_fsck_out");
+ $cmd = "/sbin/fsck_msdosfs -y -f /dev/" . escapeshellarg($disk . $partition);
+ $out = create_cmdout_container("dos_fsck_out", $cmd);
+ $retvalue .= assemble_cmdout($button, $out);
+ break;
+ }
+
+ /* Mount disk if necessary. */
+ if($umount && $ismounted) {
+ disks_mount_fullname($disk.$partition);
+ }
+
+ break;
+ }
+
+ return $retvalue;
+}
+
if (!is_array($freenas_config['disks']['disk']))
$freenas_config['disks']['disk'] = array();
@@ -65,6 +140,12 @@ if ($_POST) {
$reqdfieldsn = explode(",", "Disk,Action");
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
+ /* if this is an AJAX caller then handle via JSON */
+ if(isAjax() && is_array($error_bucket)) {
+ input_errors2Ajax(NULL, $error_bucket);
+ exit;
+ }
+
if (!$input_errors)
{
$do_action = true;
@@ -72,6 +153,9 @@ if ($_POST) {
$action = $_POST['action'];
$partition = $_POST['partition'];
$umount = $_POST['umount'];
+
+ echo create_cmd_output($action, $a_disk, $disk, $partition, $umount);
+ exit; // cause of Ajax
}
}
@@ -116,6 +200,8 @@ function disk_change() {
<?php endforeach; ?>
}
}
+
+<?= CMDOUT_TOGGLE_FUNC ?>
// -->
</script>
</head>
@@ -140,6 +226,7 @@ function disk_change() {
<tr>
<td>
<div id="mainarea">
+ <?= CMDOUT_AJAX_SCRIPT ?>
<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Disk");?></td>
@@ -181,68 +268,14 @@ function disk_change() {
</td>
</tr>
<tr>
- <td width="22%" valign="top" class="vncellreq">&nbsp;</td>
- <td width="78%" class="vtable">
- <input name="Submit" type="submit" class="formbtn" value="<?= gettext("Send Command!"); ?>" />
+ <td width="22%" valign="top">&nbsp;</td>
+ <td width="78%">
+ <input id="doCMDSubmit" name="doCMDSubmit" type="button" class="formbtn" value="<?=gettext("Send Command!");?>" onclick="execCMD();" />
</td>
</tr>
<tr>
- <td width="22%" valign="top" class="vncellreq">&nbsp;</td>
- <td width="78%" class="vtable">
- <?php
- if($do_action)
- {
- echo("<strong>" . gettext("Command output:") . "</strong><br>");
- echo('<pre>');
- ob_end_flush();
-
- switch($action)
- {
- case "fsck":
- /* Get the id of the disk. */
- $id = array_search_ex($disk, $a_disk, "name");
- /* Get the filesystem type of the disk. */
- $type = $a_disk[$id]['fstype'];
- /* Check if disk is mounted. */
- $ismounted = disks_check_mount($disk,$partition);
-
- /* Umount disk if necessary. */
- if($umount && $ismounted) {
- echo("<strong class='red'>" . gettext("Note") . ":</strong> " . gettext("The disk is currently mounted! The mount point will be removed temporary to perform selected command.") . "<br><br>");
- disks_umount_ex($disk,$partition);
- }
-
- switch($type)
- {
- case "":
- case "ufs":
- case "ufs_no_su":
- case "ufsgpt":
- case "ufsgpt_no_su":
- system("/sbin/fsck_ufs -y -f /dev/" . escapeshellarg($disk . $partition));
- break;
- case "gmirror":
- case "gvinum":
- case "graid5":
- $infomsg = sprintf(gettext("Use <a href='%s'>RAID tools</a> for this disk!"), "disks_raid_{$type}_tools.php");
- print_info_box_np($infomsg);
- break;
- case "msdos":
- system("/sbin/fsck_msdosfs -y -f /dev/" . escapeshellarg($disk . $partition));
- break;
- }
-
- /* Mount disk if necessary. */
- if($umount && $ismounted) {
- disks_mount_ex($disk,$partition);
- }
-
- break;
- }
- echo('</pre>');
- }
- ?>
- </td>
+ <!-- Format Output Container - Do Not Delete -->
+ <td id="cmdOutputTD" valign="top" colspan="2" style="visibility: hidden; border: solid 1px silver; vertical-align: middle; width: 100%"></td>
</tr>
</table>
</div>
diff --git a/packages/freenas/www/disks_mount_tools.php b/packages/freenas/www/disks_mount_tools.php
index 67006981..26e7471d 100644
--- a/packages/freenas/www/disks_mount_tools.php
+++ b/packages/freenas/www/disks_mount_tools.php
@@ -50,6 +50,46 @@ require_once("guiconfig.inc");
require_once("freenas_guiconfig.inc");
require_once("freenas_functions.inc");
+function create_cmd_output(&$action, &$a_mount, &$fullname) {
+ $cmdout = CMDOUT_PARA;
+
+ ob_end_flush();
+
+ $retvalue =<<<EOD
+{$cmdout}
+
+EOD;
+
+ /* Get the id of the mount array entry. */
+ $id = array_search_ex($fullname, $a_mount, "fullname");
+ /* Get the mount data. */
+ $mount = $a_mount[$id];
+
+ switch($action)
+ {
+ case "mount":
+ $diskinit_str = gettext("Mounting '{$fullname}'...") . "<br />";
+ $result = disks_mount_fullname($fullname);
+ break;
+ case "umount":
+ $diskinit_str = gettext("Umounting '{$fullname}'...") . "<br />";
+ $result = disks_umount_fullname($fullname);
+ break;
+ }
+
+ /* Display result */
+ (0 == $result) ? $diskinit_str .= gettext("Successful") : $diskinit_str .= gettext("Failed");
+
+ $retvalue .=<<<EOD
+ <div id="ismounted_out" style="font-family: Courier, monospace; font-size: small;">
+ <pre style="font-family: Courier, monospace; font-size: small; font-style: italic;">{$diskinit_str}</pre>
+ </div>
+
+EOD;
+
+ return $retvalue;
+}
+
if (!is_array($freenas_config['mounts']['mount']))
$freenas_config['mounts']['mount'] = array();
@@ -85,6 +125,9 @@ if (! empty($_POST))
$do_action = true;
$fullname = $_POST['fullname'];
$action = $_POST['action'];
+
+ echo create_cmd_output($action, $a_mount, $fullname);
+ exit; // cause of Ajax
}
}
@@ -107,13 +150,23 @@ if(isset($_GET['action'])) {
$action = $_GET['action'];
}
+/* if ajax is calling, give them an update message */
+if(isAjax())
+ print_info_box_np($savemsg);
+
include("head.inc");
/* put your custom HTML head content here */
/* using some of the $pfSenseHead function calls */
+$pfSenseHead->setCloseHead(false);
echo $pfSenseHead->getHTML();
?>
-
+<script type="text/javascript">
+<!--
+<?= CMDOUT_TOGGLE_FUNC ?>
+// -->
+</script>
+</head>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
<?php include("fbegin.inc"); ?>
@@ -134,6 +187,7 @@ echo $pfSenseHead->getHTML();
<tr>
<td>
<div id="mainarea">
+ <?= CMDOUT_AJAX_SCRIPT ?>
<?php if ($input_errors) print_input_errors($input_errors); ?>
<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
@@ -160,41 +214,12 @@ echo $pfSenseHead->getHTML();
<tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
- <input name="Submit" type="submit" class="formbtn" value="<?= gettext("Send Command!"); ?>" />
+ <input id="doCMDSubmit" name="doCMDSubmit" type="button" class="formbtn" value="<?=gettext("Send Command!");?>" onclick="execCMD();" />
</td>
</tr>
<tr>
- <td valign="top" colspan="2">
- <?php if($do_action)
- {
- echo("<strong>" . gettext("Command output") . ": </strong><br />");
- echo('<pre>');
- ob_end_flush();
-
- /* Get the id of the mount array entry. */
- $id = array_search_ex($fullname, $a_mount, "fullname");
- /* Get the mount data. */
- $mount = $a_mount[$id];
-
- switch($action)
- {
- case "mount":
- echo(gettext("Mounting '{$fullname}'...") . "<br />");
- $result = disks_mount_fullname($fullname);
- break;
- case "umount":
- echo(gettext("Umounting '{$fullname}'...") . "<br />");
- $result = disks_umount_fullname($fullname);
- break;
- }
-
- /* Display result */
- echo((0 == $result) ? gettext("Successful") : gettext("Failed"));
-
- echo('</pre>');
- }
- ?>
- </td>
+ <!-- Format Output Container - Do Not Delete -->
+ <td id="cmdOutputTD" valign="top" colspan="2" style="visibility: hidden; border: solid 1px silver; vertical-align: middle; width: 100%"></td>
</tr>
</table>
</div>