Preferences page working

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@154 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
bp-sawyers 2007-12-11 19:44:21 +00:00
parent b947a175a2
commit fe1edbd1e4
11 changed files with 330 additions and 262 deletions

View File

@ -1,54 +1,53 @@
<?php
// Allow the user to set preferences for this web interface
// Allow the user to set preferences for this web interface. The preferences are stored
// in the browsers cookie.
$TOPDIR = '..';
require_once "$TOPDIR/lib/functions.php";
insertHeader('Preferences', NULL, NULL, array('config','prefs'));
?>
<FORM NAME="prefs">
<TABLE class="inner_table" cellspacing=0 cellpadding=5>
<TBODY>
<TR>
<TD colspan="3"><font class="BlueBack">Number of nodes per display: </font>
<INPUT type="text" id="number_of_node" name="number_of_node"
value="<?php if(@$_POST["number_of_node"] == "") echo "20"; else echo $_POST["number_of_node"];?>">
</TD>
</TR>
<TR>
<TD colspan="3"><p>
<INPUT type="button" id="setPrefButton" name="setPrefButton" value="Set Preferences" class=middle onclick="checkEmpty();"></p>
</TD>
</TR>
</TBODY>
</TABLE>
</FORM>
</TD>
</TR>
</TABLE>
<SCRIPT language="JavaScript">
<!--
echo "<FORM NAME=prefs onsubmit='return false'><TABLE class=inner_table cellspacing=0 cellpadding=5><TBODY>\n";
window.onload = function(){window.document.prefs.setPrefButton.focus()};
//foreach ($_COOKIE as $key => $value) { echo "<p>$key: {$_COOKIE[$key]}</p>\n"; }
function checkEmpty(){
echo "<tr><td colspan=2>\n";
insertButtons(array('label' => 'Set Preferences', 'onclick' => 'doSetPref()'));
echo " <span id=setMsg class=Info style='display: none'>Preferences set successfully</span></td></tr>\n";
$nodesPerPage = getPref('nodesPerPage');
echo "<TR><TD align=right><font class=BlueBack>Number of nodes to display per page:</font></td>\n";
echo "<td><INPUT type=text id=nodesPerPage name=nodesPerPage value='$nodesPerPage' onchange='doSetPref()'></TD></TR>\n";
$displayCmds = getPref('displayCmds');
$displayStr = $displayCmds ? 'checked' : '';
echo "<TR><TD align=right><font class=BlueBack>Display commands run by this interface:</font></td>\n";
echo "<td><INPUT type=checkbox id=displayCmds name=displayCmds $displayStr></TD></TR>\n";
//echo "<TR><TD colspan=3><INPUT type=button id=setPrefButton name=setPrefButton value='Set Preferences' class=middle onclick='doSetPref();'> <span id=setMsg class=Info style='display: none'>Preferences set successfully</span></TD></TR>\n";
echo "</TBODY></TABLE></FORM>\n";
echo <<<EOS
<SCRIPT language=JavaScript>
//window.onload = function(){window.document.prefs.setPrefButton.focus()};
function doSetPref(){
var form = window.document.prefs;
var number_of_node = form.number_of_node.value;
if (number_of_node.length == 0)
{
alert('Enter a number before pressing the Set Preferences button.');
return false;
}
else {
setCookie('number_of_node',number_of_node);
alert('Preferences set.');
return true;
}
}
var cookies = getCookies();
//for (c in cookies) { alert('cookies['+c+']='+cookies[c]); }
//alert('cookies[nodesPerPage]='+cookies['nodesPerPage']);
-->
var nodesPerPage = form.nodesPerPage.value;
if (nodesPerPage != cookies['nodesPerPage']) { setCookie('nodesPerPage',nodesPerPage,'/'); }
var displayCmds = form.displayCmds.checked ? '1' : '0';
if (displayCmds != cookies['displayCmds']) { setCookie('displayCmds',displayCmds,'/'); }
document.getElementById('setMsg').style.display = 'inline';
//return false;
}
</SCRIPT>
</BODY>
</HTML>
</HTML>
EOS;
?>

View File

@ -2,6 +2,18 @@
// Main page of the xCAT web interface, but will redirect to the default page
header( 'Location: machines/groups.php' ) ;
$TOPDIR = '.';
require_once "$TOPDIR/lib/functions.php";
// First try to get the cookie of the last visited page
if (isset($_COOKIE['currentpage'])) {
//echo "<p>here</p>\n";
$keys = $_COOKIE['currentpage'];
$m = $MENU[$keys[0]]; // this gets us to the menu choice for the top menu in the data structure
$url = $m['list'][$keys[1]]['url']; // get to the list of submenu choices, choose the proper one, and get its url
//echo "<p>url: $url, m[label]: " . $m['label'] . "</p>\n";
} else { $url = 'machines/groups.php'; }
header("Location: $url");
?>

View File

@ -1,40 +1,27 @@
var CommandWindow = {};
CommandWindow.updateCommandResult = function() {
var commandQueryId = "commandQuery";
var copyChkBoxId = "copyChkBox";
var nodenameHiddenTxtId = "nodename";
var nodegrpsCboBoxId = "nodegrpsCboBox";
var pshChkBoxId = "pshChkBox";
//todo: add commandQueryObj.value to the history select box
var serialChkBoxId = "serialChkBox";
var verifyChkBoxId = "verifyChkBox";
var fanoutTxtBoxId = "fanoutTxtBox";
var userIDTxtBoxId = "userIDTxtBox";
var rshellTxtBoxId = "rshellTxtBox";
var rshellTxtBoxId = "rshellTxtBox";
var monitorChkBoxId = "monitorChkBox";
var ret_codeChkBoxId = "ret_codeChkBox";
var commandQueryObj = $('commandQuery');
var copyChkBoxObj = $('copyChkBox');
var nodelistTxtObj = $('nodeList');
var nodegrpsCboBoxObj = $('nodegrpsCboBox');
var pshChkBoxObj = $('pshChkBox');
var copyChkBoxObj = $(copyChkBoxId);
var commandQueryObj = $(commandQueryId);
var nodenameHiddenTxtObj = $(nodenameHiddenTxtId);
var nodegrpsCboBoxObj = $(nodegrpsCboBoxId);
var pshChkBoxObj = $(pshChkBoxId);
var serialChkBoxObj = $(serialChkBoxId);
var verifyChkBoxObj = $(verifyChkBoxId);
var fanoutTxtBoxObj = $(fanoutTxtBoxId);
var userIDTxtBoxObj = $(userIDTxtBoxId);
var rshellTxtBoxObj = $(rshellTxtBoxId);
var monitorChkBoxObj = $(monitorChkBoxId);
var ret_codeChkBoxObj = $(ret_codeChkBoxId);
var serialChkBoxObj = $('serialChkBox');
var verifyChkBoxObj = $('verifyChkBox');
var fanoutTxtBoxObj = $('fanoutTxtBox');
var userIDTxtBoxObj = $('userIDTxtBox');
var rshellTxtBoxObj = $('rshellTxtBox');
var monitorChkBoxObj = $('monitorChkBox');
var ret_codeChkBoxObj = $('ret_codeChkBox');
// Do AJAX call and get HTML here.
var url = "dsh_action.php";
var postPara = "command=" + encodeURIComponent(commandQueryObj.value);
postPara += "&node=" + encodeURIComponent(nodenameHiddenTxtObj.value);
postPara += "&nodegrps=" + encodeURIComponent(nodegrpsCboBoxObj.options[nodegrpsCboBoxObj.selectedIndex].value);
if (nodelistTxtObj) { postPara += "&node=" + encodeURIComponent(nodelistTxtObj.value); }
if (nodegrpsCboBoxObj) { postPara += "&nodegrps=" + encodeURIComponent(nodegrpsCboBoxObj.options[nodegrpsCboBoxObj.selectedIndex].value); }
if (copyChkBoxObj.checked == true) postPara += "&copy=on"; else postPara += "&copy=off";
if (pshChkBoxObj.checked == true) postPara += "&psh=on"; else postPara += "&psh=off";
if (serialChkBoxObj.checked == true) postPara += "&serial=on"; else postPara += "&serial=off";

View File

@ -1,17 +1,21 @@
// Javascript functions that most pages need.
// Note: this is included by all pages, so only put functions in this file that most/all pages need.
function setCookies(form)
{
var value = (form.rack.checked?1:0) + '&' + form.nodegrps.value + '&' + form.nodeRange.value;
setCookie('mainpage', value);
function setCookie(name, value, path) {
value = escape(value); // this is needed if value contains spaces, semicolons, or commas
document.cookie = name + '=' + value
+ ';expires=' + (new Date("December 31, 2023")).toGMTString()
+ ';path=' + path;
}
function setCookie(name, value)
{
value = escape(value);
value = value.replace(/\+/g, '%2B'); // The un_urlize() function in webmin works slightly differently than javascript escape()
document.cookie = name + '=' + value + ';expires=' + (new Date("December 31, 2023")).toGMTString();
// Return a hash of the cookie names and values
function getCookies() {
//alert('"'+document.cookie+'"');
var cookies = document.cookie.split(/; */);
//alert(cookies[0]);
var cookret = new Object(); // this is the return value
for (i in cookies) { var pair = cookies[i].split('='); cookret[pair[0]] = unescape(pair[1]); }
return cookret;
}
function selectAll(element, objectName)

View File

@ -4,22 +4,28 @@
// Some common/global settings
session_start(); // retain session variables across page requests
if (!isset($TOPDIR)) { $TOPDIR = '..'; }
// The settings below display error on the screen, instead of giving blank pages.
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', true);
// Todo: get rid of these globals
$XCATROOT = '/opt/xcat/bin';
$CURRDIR = '/opt/xcat/web';
/*-----------------------------------------------------------------------------------------------
Function to insert the header part of the HTML and the top part of the page
------------------------------------------------------------------------------------------------*/
/**
* Inserts the header part of the HTML and the top part of the page, including the menu.
* Also includes some common css and js files and the css and js files specified.
* This function should be called at the beginning of every page.
* @param String $title The page title that should go in the window title bar.
* @param array $stylesheets The paths of the styles that are specific to this page.
* @param array $javascripts The paths of the javascript files that are specific to this page.
* @param array $currents The keys to the top menu and 2nd menu that represent the current choice for this page. See insertMenus() for the keys.
*/
function insertHeader($title, $stylesheets, $javascripts, $currents) {
global $TOPDIR;
if (!$TOPDIR) $TOPDIR = '..';
// Remember the current page so we can open it again the next time they come to the web interface
$expire_time = gmmktime(0, 0, 0, 1, 1, 2038);
foreach ($currents as $key => $value) { setcookie("currentpage[$key]", $value, $expire_time, '/'); }
echo <<<EOS
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd">
@ -74,63 +80,87 @@ echo "</td><td><img src='$TOPDIR/images/topr.jpg'></td></tr></table>\n";
} // end insertHeader
// This is the data structure that represents the menu for each page.
$MENU = array(
'machines' => array(
'label' => 'Machines',
'default' => 'groups',
'list' => array(
'lab' => array('label' => 'Lab Floor', 'url' => "$TOPDIR/machines/lab.php"),
'frames' => array('label' => 'Frames', 'url' => "$TOPDIR/machines/frames.php"),
'groups' => array('label' => 'Groups', 'url' => "$TOPDIR/machines/groups.php"),
'nodes' => array('label' => 'Nodes', 'url' => "$TOPDIR/machines/nodes.php"),
'layout' => array('label' => 'Layout', 'url' => "$TOPDIR/machines/layout.php"),
)
),
'manage' => array(
'label' => 'Manage',
'default' => 'dsh',
'list' => array(
'dsh' => array('label' => 'Run Cmds', 'url' => "$TOPDIR/manage/dsh.php"),
'copyfiles' => array('label' => 'Copy Files', 'url' => "$TOPDIR/manage/copyfiles.php"),
'cfm' => array('label' => 'Sync Files', 'url' => "$TOPDIR/manage/cfm.php"),
'hwctrl' => array('label' => 'HW Ctrl', 'url' => "$TOPDIR/manage/hwctrl.php"),
'diagnodes' => array('label' => 'Diagnose', 'url' => "$TOPDIR/manage/diagnodes.php"),
)
),
'jobs' => array(
'label' => 'Jobs',
'default' => 'overview',
'list' => array(
'overview' => array('label' => 'Overview', 'url' => "$TOPDIR/jobs/overview.php"),
//todo: Vallard fill in rest
)
),
'deploy' => array(
'label' => 'Deploy',
'default' => 'osimages',
'list' => array(
'osimages' => array('label' => 'OS Images', 'url' => "$TOPDIR/deploy/osimages.php"),
'prepare' => array('label' => 'Prepare', 'url' => "$TOPDIR/deploy/prepare.php"),
'deploy' => array('label' => 'Deploy', 'url' => "$TOPDIR/deploy/deploy.php"),
'monitor' => array('label' => 'Monitor', 'url' => "$TOPDIR/deploy/monitor.php"),
)
),
'config' => array(
'label' => 'Configure',
'default' => 'site',
'list' => array(
'prefs' => array('label' => 'Preferences', 'url' => "$TOPDIR/config/prefs.php"),
'site' => array('label' => 'Cluster Settings', 'url' => "$TOPDIR/config/site.php"),
'mgmtnode' => array('label' => 'Mgmt Node', 'url' => "$TOPDIR/config/mgmtnode.php"),
'monitor' => array('label' => 'Monitor Setup', 'url' => "$TOPDIR/config/monitor.php"),
'eventlog' => array('label' => 'Event Log', 'url' => "$TOPDIR/config/eventlog.php"),
)
),
'support' => array(
'label' => 'Support',
'default' => 'diagnose',
'list' => array(
'diagnose' => array('label' => 'Diagnose', 'url' => "$TOPDIR/support/diagnose.php"),
'update' => array('label' => 'Update', 'url' => "$TOPDIR/support/update.php"),
'howtos' => array('label' => 'HowTos', 'url' => "$TOPDIR/support/howtos.php"),
'manpages' => array('label' => 'Man Pages', 'url' => "$TOPDIR/support/manpages.php"),
'maillist' => array('label' => 'Mail List', 'url' => "http://xcat.org/mailman/listinfo/xcat-user"),
'wiki' => array('label' => 'Wiki', 'url' => "http://xcat.wiki.sourceforge.net/"),
'suggest' => array('label' => 'Suggestions', 'url' => "$TOPDIR/support/suggest.php"),
'about' => array('label' => 'About', 'url' => "$TOPDIR/support/about.php"),
)
),
);
// Insert the menus at the top of the page
// $currents is an array of the current menu choice tree
function insertMenus($currents) {
global $TOPDIR;
global $MENU;
echo "<table border=0 cellspacing=0 cellpadding=0>\n";
insertMenuRow($currents[0], 1, array(
'machines' => array('Machines', "$TOPDIR/machines/groups.php"),
'jobs' => array('Jobs', "$TOPDIR/jobs/overview.php"),
'deploy' => array('Deploy', "$TOPDIR/deploy/osimages.php"),
'config' => array('Configuration', "$TOPDIR/config/site.php"),
'support' => array('Support', "$TOPDIR/support/diagnose.php")
));
if ($currents[0] == 'machines') {
insertMenuRow($currents[1], 0, array(
'lab' => array('Lab Floor', "$TOPDIR/machines/lab.php"),
'frames' => array('Frames', "$TOPDIR/machines/frames.php"),
'groups' => array('Groups', "$TOPDIR/machines/groups.php"),
'nodes' => array('Nodes', "$TOPDIR/machines/nodes.php"),
'layout' => array('Layout', "$TOPDIR/machines/layout.php")
));
}
elseif ($currents[0] == 'jobs') {
insertMenuRow($currents[1], 0, array(
'overview' => array('Overview', "$TOPDIR/jobs/overview.php"),
//todo: Vallard fill in rest
));
}
elseif ($currents[0] == 'deploy') {
insertMenuRow($currents[1], 0, array(
'osimages' => array('OS Images', "$TOPDIR/deploy/osimages.php"),
'prepare' => array('Prepare', "$TOPDIR/deploy/prepare.php"),
'deploy' => array('Deploy', "$TOPDIR/deploy/deploy.php"),
'monitor' => array('Monitor', "$TOPDIR/deploy/monitor.php"),
));
}
elseif ($currents[0] == 'config') {
insertMenuRow($currents[1], 0, array(
'prefs' => array('Preferences', "$TOPDIR/config/prefs.php"),
'site' => array('Cluster Settings', "$TOPDIR/config/site.php"),
'mgmtnode' => array('Mgmt Node', "$TOPDIR/config/mgmtnode.php"),
'monitor' => array('Monitor Setup', "$TOPDIR/config/monitor.php"),
'eventlog' => array('Event Log', "$TOPDIR/config/eventlog.php"),
));
}
elseif ($currents[0] == 'support') {
insertMenuRow($currents[1], 0, array(
'diagnose' => array('Diagnose', "$TOPDIR/support/diagnose.php"),
'update' => array('Update', "$TOPDIR/support/update.php"),
'howtos' => array('HowTos', "$TOPDIR/support/howtos.php"),
'manpages' => array('Man Pages', "$TOPDIR/support/manpages.php"),
'maillist' => array('Mail List', "http://xcat.org/mailman/listinfo/xcat-user"),
'wiki' => array('Wiki', "http://xcat.wiki.sourceforge.net/"),
'suggest' => array('Suggestions', "$TOPDIR/support/suggest.php"),
'about' => array('About', "$TOPDIR/support/about.php"),
));
}
insertMenuRow($currents[0], 1, $MENU);
insertMenuRow($currents[1], 0, $MENU[$currents[0]]['list']);
echo "</table>\n";
}
@ -147,13 +177,19 @@ function insertMenuRow($current, $isTop, $items) {
//echo "<div class=$menuRowClass><ul id=mainNav>\n";
echo "<tr><td $menuRowClass><ul id=mainNav>\n";
foreach ($items as $key => $link) {
foreach ($items as $key => $value) {
$label = $value['label'];
if ($isTop) {
$url = $value['list'][$value['default']]['url']; // get to the list of submenu choices, choose the default one, and get its url
} else {
$url = $value['url'];
}
if ($key == $current){
//echo "<TD><a id=$key href='$link[1]'>$link[0]</a></TD>\n";
echo "<li><p $currentClass>$link[0]</p></li>";
echo "<li><p $currentClass>$label</p></li>";
} else {
//echo "<TD><a class=NavItem id=$key href='$link[1]'>$link[0]</a></TD>\n";
echo "<li><a $menuItemClass id=$key href='$link[1]'>$link[0]</a></li>";
echo "<li><a $menuItemClass id=$key href='$url'>$label</a></li>";
}
}
@ -172,7 +208,6 @@ function insertMenuRow($current, $isTop, $items) {
2: Like mode 0, if successful, return output to a reference variable in the caller function, with the newlines removed.
But error msgs are output to reference variable in the caller function
1: Long running cmd, intermediate results/errors are ouput as the command is executed
-1: Like mode 1
3: Long running cmd. Results/errors are output to a file and return a file handle to the caller function
3. Reference variable to hold the output returned to caller function
4. Reference to an options hash, e.g. { NoVerbose => 1, NoRedirectStderr => 1 }
@ -182,31 +217,35 @@ function runcmd ($cmd, $mode, &$output, $options=NULL){
//Set error output to the same source as standard output (on Linux)
if (strstr($cmd,'2>&1') == FALSE && !$options["NoRedirectStdErr"]) { $cmd .= ' 2>&1'; }
$cmd = "/bin/sudo $cmd"; //todo: change this when move to xcat 2
if (!isSupported('ClientServer')) { $cmd = "/bin/sudo $cmd"; }
//todo: add support for xcat 2
$ret_stat = "";
$arr_output = NULL;
if ($mode == 3){
//$arr_output = NULL;
if ($mode == 3) { // long running cmd - pipe output to file handle
$handle = popen($cmd, "r");
if($handle){
if($handle) {
$output = $handle; //return file handle to caller
return 0; //successful
}else{
echo "Piping command into a file failed";
} else {
msg('E', "Piping command ($cmd) into a file handle failed.");
return 1;
}
}elseif ($mode == 0 || $mode == 2 ){
exec($cmd,$arr_output,$ret_stat);
exec($cmd, $output, $ret_stat);
if ($ret_stat == 0){
$output = $arr_output;
//$output = $arr_output;
} else {
//output the error msg to the screen
if ($mode == 0) echo $arr_output[0];
if ($mode == 0) foreach ($output as $line) { msg('E', $line); }
//output error msg to the caller function
elseif ($mode == 2) $output = $arr_output[0];
//elseif ($mode == 2) $output = $arr_output[0]; // error is already in the output
}
}elseif ($mode == 1 || $mode == -1){
system($cmd,$ret_stat);
} elseif ($mode == 1){
echo "<code>\n";
system($cmd, $ret_stat);
echo "</code>\n";
}
return $ret_stat;
}
@ -227,8 +266,10 @@ function dumpGlobals() { //------------------------------------
}
}
function getXcatRoot() { return isset($_ENV['XCATROOT']) ? $_ENV['XCATROOT'] : '/opt/xcat'; }
# Returns true if the given rpm file is already installed at this version or higher.
function isInstalled($rpmfile) { //------------------------------------
function isInstalled($rpmfile) {
$aixrpmopt = isAIX() ? '--ignoreos' : '';
$lang = isWindows() ? '' : 'LANG=C'; //todo: add this back in
$out = array();
@ -241,6 +282,28 @@ function isInstalled($rpmfile) { //------------------------------------
}
$isSupportedHash = array();
# Returns true if the specified feature is supported. This is normally determined by some fast
# method like checking for the existence of a file. The answer is also cached for next time.
function isSupported($feature) {
if (isset($isSupportedHash[$feature])) { return $isSupportedHash[$feature]; }
# These are supported in xCAT 2.0 and above
if ($feature == 'ClientServer'
|| $feature == 'DB')
{ $isSupportedHash[$feature] = file_exists(getXcatRoot() . '/bin/xcatclient'); }
# These are supported in xCAT x.x and above
//elseif ($feature == 'DshExecute')
// { $isSupportedHash[$feature] = -e '/opt/csm/bin/csmsetuphwmaint'; }
else { return false; }
return $isSupportedHash[$feature];
}
// Debug output ------------------------------------
define("TRACE", "1");
@ -411,10 +474,16 @@ function getStatusImage($status) {
}
// Returns the specified user preference value. Not finished.
function getPref($key) { //------------------------------------
if ($key == 'MaxNodesDisplayed') { return 50; }
return '';
// Returns the specified user preference value, or the default. (The preferences are stored in cookies.)
// If no key is specified, it will return the list of preference names.
function getPref($key) {
$prefDefaults = array(
'nodesPerPage' => 40,
'displayCmds' => 0,
);
if (!isset($key)) { return array_keys($prefDefaults); }
if (isset($_COOKIE[$key])) { return $_COOKIE[$key]; }
return $prefDefaults[$key]; // return default if not in the cookie
}
@ -495,19 +564,35 @@ function insertTabs ($tablist, $currentTabIndex) { //---------------------------
}
// Create the Action buttons in a table. Buttonlist is an array of arrays of button attribute strings.
function insertButtons ($buttonsets) { //------------------------------------
foreach ($buttonsets as $buttonlist) {
echo "<TABLE cellpadding=0 cellspacing=2><TR>";
foreach ($buttonlist as $button) {
//echo "<td><INPUT type=submit class=but $button ></td>";
echo "<td><a class=button href=''><span>$button</span></a></td>";
}
echo "</TR></TABLE>\n";
}
// Create the Action buttons in a table. Each argument passed in is a button, which is an array of attribute strings.
// If your onclick attribute contains javascript code that uses quotes, use double quotes instead of single quotes.
// Note: if only 1 button is passed in, the button is not put in a table.
function insertButtons () {
$num = func_num_args();
if ($num > 1) echo "<TABLE cellpadding=0 cellspacing=2><TR>";
foreach (func_get_args() as $button) {
//echo "<td><INPUT type=submit class=but $button ></td>";
$otherattrs = @$button['otherattrs'];
if ($num > 1) echo "<td>";
echo "<a class=button href='' onclick='{$button['onclick']};return false' $otherattrs><span>{$button['label']}</span></a>";
if ($num > 1) echo "</td>";
}
if ($num > 1) echo "</TR></TABLE>\n";
}
// Display messages in the html. If severity is W or E, it will attempt to use the Error class
// from the style sheet.
function msg($severity, $msg)
{
//if ($severity=~/V/ && !$::GUI_VERBOSE) { return; }
if (preg_match('/O/', $severity)) { echo "$msg\n"; return; }
$styleclass = 'Info';
if (preg_match('/[WE]/', $severity)) { $styleclass = 'Error'; }
echo "<P class=$styleclass>$msg</P>\n";
}
function insertNotDoneYet() { echo "<p class=NotDone>This page is not done yet.</p>\n"; }
?>

View File

@ -1,3 +1,4 @@
<?php
//setcookie("history", "", time() - 3600); //to delete a cookie, but did not seem to work
phpinfo()
?>

View File

@ -22,13 +22,6 @@ var value = (form.rack.checked?1:0) + '&' + form.nodegrps.value + '&' + form.nod
setCookie('mainpage', value);
}
function setCookie(name, value)
{
value = escape(value);
value = value.replace(/\\+/g, '%2B'); // The un_urlize() function in webmin works slightly differently than javascript escape()
document.cookie = name + '=' + value + ';expires=' + (new Date("December 31, 2023")).toGMTString();
}
function selectAll(element, rack)
{
var sel = element.checked;

View File

@ -14,24 +14,23 @@ insertHeader('Groups', array('groups.css'),
echo "<div id=content align=center>\n";
insertButtons(array(
array(
'Attributes',
'Create Group',
'Ping',
insertButtons(
array('label' => 'Attributes', 'onclick' => ''),
array('label' => 'Create Group', 'onclick' => ''),
array('label' => 'Ping', 'onclick' => ''),
//'Updatenode',
'Run Cmd',
'Copy Files',
'Sync Files'
),
array(
array('label' => 'Run Cmd', 'onclick' => ''),
array('label' => 'Copy Files', 'onclick' => ''),
array('label' => 'Sync Files', 'onclick' => '')
);
insertButtons(
//'Soft Maint',
'HW Ctrl',
'RSA/MM/FSP',
'Deploy',
'Diagnose',
'Remove'
),
array('label' => 'HW Ctrl', 'onclick' => ''),
array('label' => 'RSA/MM/FSP', 'onclick' => ''),
array('label' => 'Deploy', 'onclick' => ''),
array('label' => 'Diagnose', 'onclick' => ''),
array('label' => 'Remove', 'onclick' => '')
);
/*
array(
'name=propButton value="Attributes"',
@ -53,7 +52,6 @@ insertButtons(array(
'name=removeButton value="Remove"'
),
*/
));
echo '<form name="nodelist" class=ContentForm>';

View File

@ -4,72 +4,66 @@
------------------------------------------------------------------------------*/
$TOPDIR = '..';
$expire_time = gmmktime(0, 0, 0, 1, 1, 2038);
setcookie("history", "date;hello.sh", $expire_time);
//setcookie('history[]', "date;hello.sh", $expire_time);
require_once "$TOPDIR/lib/functions.php";
insertHeader('Run Commands on Nodes', array("$TOPDIR/themes/default.css"),
array("$TOPDIR/lib/CommandWindow.js", "$TOPDIR/js/prototype.js", "$TOPDIR/js/scriptaculous.js?load=effects", "$TOPDIR/js/window.js"),
array('machines','dsh'));
array('manage','dsh'));
?>
echo <<<EOS
<div id=content>
<FORM NAME="dsh_options" onsubmit="checkEmpty();">
<input type="hidden" id="nodename" value=<?php echo @$_REQUEST["noderange"] ?> >
<TABLE class="inner_table" cellspacing=0 cellpadding=5>
<TBODY>
<TR>
<TD colspan="3">
<?php if (@$_REQUEST["noderange"] == ""){ ?>
<font class="BlueBack">Run Command on Group:</font>
<SELECT name=nodegrps id=nodegrpsCboBox class=middle>
<OPTION value="">Choose ...</OPTION>
<?php
$nodegroups = getGroups();
foreach ($nodegroups as $group) {
//if($group == $currentGroup) { $selected = 'selected'; } else { $selected = ''; }
echo "<OPTION value='$group' $selected>$group</OPTION>\n";
}
?>
</SELECT>
<TR><TD colspan=3>
EOS;
<?php }else{ ?>
<font class="BlueBack">Run Command on: </font><?php echo @$_REQUEST["noderange"]; } ?>
</TD>
</TR>
<TR>
<TD colspan="3">
if (isset($_REQUEST['noderange'])) {
echo "<B><FONT size='+1'>Run Command on: </FONT></B>";
if (strlen($_REQUEST['noderange']) > 70) {
echo "<TEXTAREA rows=1 cols=70 readonly name=nodeList class=middle>" . $_REQUEST['noderange'] . "</TEXTAREA>\n";
} else {
echo "<INPUT size=70 type=text name=nodeList id=nodeList class=middle value='" . $_REQUEST['noderange'] . "'>\n";
}
} else { echo "<B><FONT size='+1'>Run Command on a Group of Nodes</FONT></B>\n"; }
echo <<<EOS2
</TD></TR>
<TR><TD colspan=3>
<P>Select a previous command from the history, or enter the command and options below. Then click on Run Cmd.</P>
</TD>
</TR>
<TR>
<TD colspan="3"><p>
<INPUT type="button" id="runCmdButton" name="runCmdButton" value="Run Cmd" class=middle onclick="CommandWindow.updateCommandResult()"></p>
</TD>
</TR>
<TR>
<TD colspan="3"><font class="BlueBack">Command History:</font>
<SELECT name="history" onChange="_setvars();" class="middle">
</TD></TR>
<TR><TD colspan=3>
EOS2;
// <INPUT type="button" id="runCmdButton" name="runCmdButton" value="Run Cmd" class=middle onclick="CommandWindow.updateCommandResult()">
insertButtons(array('label' => 'Run Cmd', 'onclick' => 'CommandWindow.updateCommandResult()'));
echo "</TD></TR>\n";
if (!isset($_REQUEST['noderange'])) {
echo "<TR class=FormTable><TD colspan=3>Run Command on Group:<SELECT name=nodegrps id=nodegrpsCboBox class=middle><OPTION value=''>Choose ...</OPTION>\n";
$nodegroups = getGroups();
foreach ($nodegroups as $group) {
//if($group == $currentGroup) { $selected = 'selected'; } else { $selected = ''; }
echo "<OPTION value='$group' $selected>$group</OPTION>\n";
}
echo "</SELECT></td></tr>\n";
}
?>
<TR class=FormTable>
<TD colspan=3>Command:&nbsp;
<INPUT size=80 type=text name=command id=commandQuery class=middle onchange='CommandWindow.updateCommandResult()'>
History:
<SELECT name=history onChange="_setvars();" class=middle>
<OPTION value="">Choose ...</OPTION>
<?php
$string = @$_COOKIE["history"];
echo $token = strtok($string, ';');
echo "<option value=\"" . $token . "\">" . $token . "</option>";
while (FALSE !== ($token = strtok(';'))) {
echo "<option value=\"" . $token . "\">" . $token . "</option>";
if (isset($_COOKIE['history'])) {
foreach ($_COOKIE['history'] as $value) { echo "<option value='$value'>$value</option>\n"; }
}
?>
</SELECT>
&nbsp; &nbsp;Selecting one of these commands will fill in the fields below.
</TD>
</TR>
<TR>
<TD colspan="3"><div id="commandResult"></div></TD>
</TR>
<TR class=FormTable>
<TD colspan="3">Command:&nbsp;
<INPUT size="80" type="text" name="command" id="commandQuery" class="middle"></TD>
</TD>
</TR>
<TR class=FormTable>
<TD colspan="3" nowrap><INPUT type="checkbox" name="copy_script" id="copyChkBox">
@ -143,7 +137,7 @@ insertHeader('Run Commands on Nodes', array("$TOPDIR/themes/default.css"),
// in CSM perl script this portion used to be javascript to get
// and set cookies, now php has handled it
window.onload = function(){window.document.dsh_options.runCmdButton.focus()};
//window.onload = function(){window.document.dsh_options.runCmdButton.focus()};
function _setvars(){
var form = window.document.dsh_options;
form.command.value = form.history.value;

View File

@ -7,22 +7,24 @@ $TOPDIR = '..';
require_once "$TOPDIR/lib/functions.php";
// HTTP Headers: headers, cookies, ...
// HTTP Headers to tell the browser to always update, never cache this page
// so the History combo box always update the new commands added whenever the page is reloaded
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
// Store commands into Cookie
//setcookie("history","");
// Store command into history cookie, if it is not already there
$expire_time = gmmktime(0, 0, 0, 1, 1, 2038);
?>
if (isset($_COOKIE['history']) && array_search($_REQUEST['command'], $_COOKIE['history'])) {
// this command is already in the history, so do not need to add it
} else {
$i = isset($_COOKIE['history']) ? count($_COOKIE['history']) : 0;
setcookie("history[$i]", $_REQUEST['command'], $expire_time);
}
<FORM>
<?php
//echo "history:" . $_COOKIE["history"];
//print_r($_COOKIE);
//get the command and the options
$cmd = @$_REQUEST["command"];
@ -42,18 +44,18 @@ $expire_time = gmmktime(0, 0, 0, 1, 1, 2038);
$ret_code = @$_REQUEST["ret_code"];
if ($group == "") $nodegrps = "blade7"; // For now, use blade7 as test node
//if ($group == "") $nodegrps = "blade7"; // For now, use blade7 as test node
if ($psh == "off"){ //using dsh
$command = "xdsh ";
$copy_cmd = "xdcp ";
if ($group == "") $node_group = "-n " . $nodegrps;
if ($group == "") $node_group = "-n " . $node;
else $node_group = "-N " . $group;
}else{
$command = "psh ";
$copy_cmd = "prcp ";
if ($group == "") $node_group = $nodegrps;
if ($group == "") $node_group = $node;
else $node_group = $group;
}
@ -107,9 +109,7 @@ $expire_time = gmmktime(0, 0, 0, 1, 1, 2038);
if ($ret_code == "on"){
$rc = runcmd($command_string, 0, $output); //mode 0
if ($rc == 0){
foreach ($outp as $key => $val){
echo $val. "</br>";
}
foreach ($output as $line){ echo "$line<br>"; }
}
}else{
@ -193,8 +193,4 @@ $expire_time = gmmktime(0, 0, 0, 1, 1, 2038);
}*/
?>
</FORM>
?>

View File

@ -25,7 +25,6 @@ approximately priority order:</p>
<li>Update the spec file for this web interface to have all the necessary post installation scripts (Bruce)</li>
<li>One button update of this web interface from the internet (Bruce)</li>
<li>Improve the look of associating the top menu with the 2nd menu (Quyen)</li>
<li>Have the task pane save the current task in the cookie and have each page set the current task (Bruce)</li>
<li>Do frame view and rack layout pages (Bruce)</li>
<li>Do several of the buttons within the machines views (Bruce):
<ul>