From: Joe Z. <jz...@us...> - 2003-05-18 06:37:44
|
Update of /cvsroot/bobs/bobs In directory sc8-pr-cvs1:/tmp/cvs-serv9236/bobs Modified Files: ChangeLog TODO admin.php Log Message: Convert admin.php to use rfasttemplate class Restructure admin.php to add some basic input validation. Index: ChangeLog =================================================================== RCS file: /cvsroot/bobs/bobs/ChangeLog,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- ChangeLog 9 May 2003 05:39:53 -0000 1.10 +++ ChangeLog 18 May 2003 06:37:41 -0000 1.11 @@ -22,6 +22,10 @@ bobs data directory (/var/bobsdata). I fixed this bug after deleting 3 years of my kid's homework. 'make uninstall' also kills the cmdloop script. + -- 5-10-2003 + Convert admin.php to use rfasttemplate class. + -- 5-17-2003 + Restructure admin.php to add some basic input validation. Version 0.6.0pre1 Rene Rask (re...@gr...) Index: TODO =================================================================== RCS file: /cvsroot/bobs/bobs/TODO,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- TODO 9 May 2003 05:39:53 -0000 1.17 +++ TODO 18 May 2003 06:37:41 -0000 1.18 @@ -53,6 +53,7 @@ Priority: High It's important to know if the systems are getting backed up properly each day. + Have backups write to optional log file. How is /bobsdata going to get cleaned up? Priority: Medium @@ -60,12 +61,6 @@ Write man/info pages Priority: Low - -Add "Backup Now" button under "Check Configuration" button. - Priority: Medium - This will add the final touch to testing the server setup - and allow people to run backups on demand. - Use interprocess communication like systemcheck.php does. --- End of Murray's Suggestions --- ----- WISHLIST ------ Index: admin.php =================================================================== RCS file: /cvsroot/bobs/bobs/admin.php,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- admin.php 10 May 2003 17:38:52 -0000 1.21 +++ admin.php 18 May 2003 06:37:41 -0000 1.22 @@ -2,12 +2,6 @@ // BOBS Administration Interface -if (isset($_GET['menu_bobs'])){ // BOBS menu button pushed - $bobsdir = dirname($_SERVER['PHP_SELF']); - header("Location: $bobsdir"); // Redirect browser to BOBS main index - exit; // Make sure that code below does not get executed -} - require_once("inc/class_config.php"); // configuration class require_once("inc/class_admin.php"); // admin configuration class require_once("inc/class_server.php"); // admin configuration class @@ -18,7 +12,7 @@ // Logout selected, close the session -if (isset($_GET['menu_logout'])){ +if ($_GET['menu'] == 'logout'){ session_start(); session_unregister("admin"); session_unregister("serverlist"); @@ -43,9 +37,10 @@ $serverlist = &$_SESSION['serverlist']; // Uncomment the following line for debugging -//$debug = 1; -// disable debug for now. It's not safe to do it this way, since user can add $debug without even logging in. (it reveals all passwords!) -unset($debug); +// $debug = 1; +// disable debug for now. It's not safe to do it this way +// since user can add $debug without even logging in. (it reveals all passwords!) +// unset($debug); // Table border variable. Set to 1 for testing, otherwise set to 0. if (isset($debug)) { @@ -54,104 +49,77 @@ $tableborder = "0"; } -// Don't output http header if going to redirect web page -// Yes, this is sloppy. +// ------------------ +// Main Control Loop +// ------------------ -if (! ($_POST['selectlist']['action'] == "Check Configuration") ){ - include_once("inc/header.pinc"); -} +// There are 3 types of fields controlling program flow. +// GET['menu_...'] Menu items from the menu on the header of the page. +// form_name A hidden field on each form. +// selectlist[name] The hidden field on forms built by the selectlist class. +// And overriding all of them is if admin is not logged in. -// ---------------------- -// Display error message -// ---------------------- -// $admin->puterrmsg(); +if ($admin->check_admin($_POST['password']) != "yes"){ + admin_login(); // --- Don't proceed further if not logged in + exit; +} -// ------------------ -// Main control loop -// ------------------ -switch (TRUE) { -// case ($admin->iserror()): // FIXME: Error message is set -// $admin->puterrmsg(); -// break; - case (isset($_GET['menu_logout'])): // logout button pressed - case ($admin->check_admin($_POST['password']) != "yes"): // not logged in - admin_login(); // login screen - break; - case (isset($_GET['menu_servers'])): // servers button pressed - case (isset($_POST['login_button_OK'])): // login OK button pressed - select_server(); // Server selection screen +switch ($_GET['menu']){ // --- A menu button was pressed +case ('bobs'): + $bobsdir = dirname($_SERVER['PHP_SELF']); + header("Location: $bobsdir"); // Redirect browser to BOBS main index + exit; // Make sure that code below does not get executed + break; +case ('help'): + echo "Help function is not yet implemented."; + break; +case ('logout'): + admin_login(); // Build login screen + break; +case ('servers'): + select_server(""); // Build server selection screen + break; +case ('access'): + echo "Access function is not yet implemented."; + break; +default: + switch ($_POST['form_name']){ // --- A form needs to be processed + case ('login'): // Just logged in + select_server(""); // Build server selection screen break; - case ($_POST['selectlist']['name'] == "serverlist"): // Server list form action - $itemval = $serverlist->getvalue($_POST['selectlist']); // Get value of selected item - list($server_key, $server_name, $share_name)= split(",", $itemval[0], 3); - switch ($serverlist->getaction($_POST['selectlist'])) { - case ("Add"): // Create server button pressed - $servercfg->init_new_server($itemval[0], $itemval[1]); - // Init fields for new server - edit_server("create", $itemval[0], $itemval[1], $_POST['settings']); - // Server detail: create mode - break; - case ("Change"): // Change server button pressed - edit_server("change", $server_name, $share_name, $_POST['settings']); - // Server detail: change mode - break; - case ("Delete"): // Delete server button pressed - edit_server("delete", $server_name, $share_name, $_POST['settings']); - // Server detail: delete mode - break; - case ("Check Configuration"): // Test server config - $bobsdir = dirname($_SERVER['PHP_SELF']); - header("Location: $bobsdir/systemcheck.php?server=$server_name&share=$share_name"); - // Redirect browser - exit; - break; - case ("Backup Now"): // Run selected backup now - if(isset($server_name)){ - backup_now($server_name, $share_name); - } - break; - } - break; - case (isset($_POST['edit_server_OK'])): // On edit server detail already - if (changed($_POST['settings']) == TRUE){ // screen settings changed - edit_server($_POST['mode_name'], $_POST['server_name'], $_POST['share_name'], $_POST['settings']); - // redisplay edit server detail screen - } else { // screen settings did not change - confirm_server($_POST['server_name'], $_POST['share_name'], $_POST['mode_name'], $_POST['settings']); - // confirm server changes screen - } + case ('server_details'): // Did something on the server details screen + process_server_details(); break; - case (isset($_POST['save_changes'])): // Commit the server changes to disk + case ('confirm_settings'): // Pressed Confirm on confirm settings screen $servercfg->commit_changes($_POST['mode_name']); - select_server(); // Back to server selection screen + select_server(""); // Back to server selection screen break; default: - echo "That function is not yet implemented."; + switch ($_POST['selectlist']['name']){ + // --- A selection list form needs processing + case ('serverlist'): // Did something on the server list screen + process_serverlist($_POST['selectlist']); + // Process the serverlist screen + break; + default: + admin_login(); // Last default: login screen + break; + } break; + } + break; } // TEST: For testing if (isset($debug)){ - echo "menu_logout:" . $menu_logout . "<br>\n"; - echo "menu_servers:" . $menu_servers . "<br>\n"; - echo "menu_access:" . $menu_access . "<br>\n"; - echo "menu_bobs:" . $menu_bobs . "<br>\n"; - echo "menu_help:" . $menu_help . "<br>\n"; - echo "login_button_OK:" . $login_button_OK . "<br>\n"; - echo "edit_servers:" . $edit_servers . "<br>\n"; - echo "create_server:" . $create_server . "<br>\n"; - echo "change_server:" . $change_server . "<br>\n"; - echo "delete_server:" . $delete_server . "<br>\n"; - echo "edit_server_OK:" . $edit_server_OK . "<br>\n"; - echo "server_key:" . $server_key . "<br>\n"; - echo "<pre>"; print_r($admin); echo "</pre>"; - echo "<pre>"; print_r($servercfg); echo "</pre>"; - echo "<hr>settings:<br><pre>"; print_r($settings); echo "</pre>"; - echo "<hr>selectlist[]:<br><pre>"; print_r($selectlist); echo "</pre>"; - echo "<hr>serverlist:<br><pre>"; print_r($serverlist); echo "</pre>"; + $form_fields = array_keys($HTTP_GET_VARS); + echo "*** FORM FIELDS ***<br>"; + print_r($form_fields); + $post_fields = array_keys($HTTP_POST_VARS); + echo "*** POST FIELDS ***<br>"; + print_r($post_fields); } -echo "</body></html>\n"; return; // ---------------------------------------------------------------- @@ -160,58 +128,44 @@ function admin_login(){ // variables outside scope of this function need to be declared as global - global $tableborder; - $PHP_SELF = $_SERVER['PHP_SELF']; -?> - <center><h2> Administrator Login </h2></center> - <div class="instruction"> - Type the BOBS administrator password and click OK.</div> - <br> -<?php - echo "<form action=\"$PHP_SELF\" method=\"post\">\n"; -?> - <table align="center" border="<?php echo "$tableborder"; ?>" > - <tbody> - <tr> - <td align="right"><p><big>BOBS administrator password: </big></td> - <td align="left"><input type="password" name="password"></td> - <!-- pressing Enter will not set "login_button_OK", but this will--> - <td align="left"><input type="hidden" name="login_button_OK" value="OK"></td> - </tr> - <tr> - <td align="center" colspan="2"> - <br><input type="submit" name="login_button_OK" value="OK"></td> - </tr> - </tbody> - </table> - </form> -<?php + global $tableborder; + + $t = new rFastTemplate('inc/templates'); // Instantiate new template + $t->define(array('admin_login' => 'admin_login.thtml')); + // Tell rfasttemplate the template file name + $t->assign('HEADER', implode("", file('inc/header.pinc'))); + // Load the page header + $t->assign('PHPSELF', $_SERVER['PHP_SELF']); // Replace PHPSELF with the current URL + $t->assign('ERRMSG', ""); // Initialize error message + if (isset($_POST['password'])) { // Password must have been wrong + $t->assign('ERRMSG', "Incorrect password."); + } + $t->assign('BORDER', "$tableborder"); // Helpful to debug table layout + + $t->parse('ADMIN_LOGIN', 'admin_login'); // Prepare the final output + $t->FastPrint(); // and send it to stdout. } // ---------------------------------------------------------------- // Server selection // ---------------------------------------------------------------- -function select_server() { +function select_server($errmsg) { // variables outside scope of this function need to be declared as global global $tableborder, $servercfg, $serverlist; - $PHP_SELF = $_SERVER['PHP_SELF']; + + $PHPSELF = $_SERVER['PHP_SELF']; // Store the server field definitions // This should actually be done only once at startup. FIXME $servercfg->get_server_list(); // Put server configs in $servers[] array. -?> - <center><h2>Server Selection</h2></center> - <p><div class="instruction">Select a server to Change or Delete, - or type the name of a new Server/Share and click Add</div></p> -<?php // Initialize the server list object $serverlist = ""; $serverlist = new selectlist("serverlist"); // Create the server list object - $serverlist->setsize(15); // 15 items per page + $serverlist->setsize(10); // 15 items per page $serverlist->setadd(); // Show the "Add" button $serverlist->setchange(); // Show the "Change" button $serverlist->setdelete(); // Show the "Delete" button @@ -233,175 +187,205 @@ // Display the server list - $html = $serverlist->gethtml($PHP_SELF); // Generate the html - echo "<center>$html</center>"; // Output the html - - // Link to change admin password + $selectlist = $serverlist->gethtml($PHPSELF); // Generate the html for the list - echo "<a href=\"chgadminpwd.php\">Change Admin Password</a>\n"; + $t = new rFastTemplate('inc/templates'); // Instantiate new template + $t->define(array('select_server' => 'select_server.thtml')); + // Tell rfasttemplate the template file name + $t->assign('HEADER', implode("", file('inc/header.pinc'))); + // Load the page header + $t->assign('PHPSELF', $PHPSELF); // Replace PHPSELF with the current URL + $t->assign('ERRMSG', $errmsg); // Error message (if any) + $t->assign('BORDER', "$tableborder"); // Helpful to debug table layout + $t->assign('SELECTLIST', "$selectlist"); // The selection list and buttons + + $t->parse('SELECT_SERVER', 'select_server'); // Prepare the final output + $t->FastPrint(); // and send it to stdout. } // ---------------------------------------------------------------- -// edit_server: generate a html page that will allow -// editing of the server settings. -// Setup the edit mode and output the heading. -// Used by: admin.php +// process_serverlist: Process input from the server details screen +// Parms: selectlist Array of fields returned from the selectlist class // ---------------------------------------------------------------- -function edit_server($mode, $server, $share, $settings) { - global $admin, $server_key, $tableborder; - $PHP_SELF = $_SERVER['PHP_SELF']; +function process_serverlist($selectlist) { + global $admin, $serverlist, $servercfg; - // page heading + // Get selected action + + $action = $serverlist->getaction($selectlist); + + // Get selected server and share names - echo '<center><h2>Server Details</h2></center>'; - put_server_heading($mode, "Type the server information and click OK."); // Output server/share heading + $itemval = $serverlist->getvalue($selectlist); - echo - "\n", - '<table border="', $tableborder, '" cellspacing="2" cellpadding="2" align="center">', - "<tbody>\n" - ; - - switch ($mode) { - case ("create"): - // Error: Server and share name are required - if (strlen($server) <= 0) { - $admin->seterrmsg("Server Name is required."); // FIXME: seterrmsg - return; - } - $html = edit_server_detail("new", $mode, $settings); - break; - case ("change"): - case ("delete"): - $html = edit_server_detail("$server_key", $mode, $settings); - break; + // Get server and share name + + switch ($action){ + case "Add": + $servercfg->init_new_server($itemval[0], $itemval[1]); + $server = trim($itemval[0]); // 1st input field (Add mode) + $share = trim($itemval[1]); // 2nd input field + break; + default: + list($item_index, $server, $share)= split(",", $itemval[0], 3); + // Get values from list } - echo $html; - echo "</tbody></table>"; -} -// --------------------------------------------------------- -// edit_server_detail - generate a html page that will allow -// editing of the server settings -// Used by: admin.php -// Returns: html -// --------------------------------------------------------- -function edit_server_detail($server, $mode, $settings) { - global $servercfg; - $PHP_SELF = $_SERVER['PHP_SELF']; + // Validate input + $errmsg = validate_serverlist($action, $server, $share); - // Save server configuration in admin for use in other functions - if (isset($settings)){ - save_settings($settings); - } else { - save_settings($servercfg->servers["$server"]); + // If error, redisplay serverlist screen with error message + if ($errmsg != ""){ + select_server($errmsg); + return; } - $html = "<form action=\"$PHP_SELF\" method=\"post\">\n"; - - - // parse the config into a html editable page - $html .= parse_edit_html($mode); + // If no error, display server details screen - $html .= "<tr><td align=\"center\" colspan=\"2\"><br><input type=\"submit\" name=\"edit_server_OK\" value=\"Next\">"; - $html .= "<input type=\"hidden\" name=\"server_key\" value=\"$server\">\n"; // save server id - // Save the server/share key in hidden screen fields - $html .= '<input type="hidden" name="server_name" value="'; - $html .= $servercfg->config["server"]; - $html .= "\">\n"; - $html .= '<input type="hidden" name="share_name" value="'; - $html .= $servercfg->config["share"]; - $html .= "\">\n"; - $html .= "<input type=\"hidden\" name=\"mode_name\" value=\"$mode\">\n"; - $html .= "</td>\n"; - - $html .= "</form>\n"; - - return $html; + switch ($action){ + case ("Backup Now"): // Run selected backup now + backup_now($server, $share); + break; + case ("Check Configuration"): // Test server config + $bobsdir = dirname($_SERVER['PHP_SELF']); + header("Location: $bobsdir/systemcheck.php?server=$server&share=$share"); + // Redirect browser + exit; + break; + default: + $servercfg->set_config($server . '.' . $share); + server_details($action, $server, $share, NULL, NULL); + break; + } } // ---------------------------------------------------------------- -// Confirm server changes -// Displays the confirmation screen +// validate_serverlist: Validate input from the server details screen +// Parms: action Button pressed: Add, Change, Delete, Check Configuration, or Backup Now +// server Server name +// share Share name +// Returns: errmsg string - Empty string if no error // ---------------------------------------------------------------- -function confirm_server($server_name, $share_name, $mode, $settings){ - global $servercfg, $tableborder; +function validate_serverlist($action, $server, $share) { - // save the current screen settings - save_settings($settings); + if ( $action == "Add" + || $action == "Change" + || $action == "Delete" + || $action == "Backup Now"){ + if ($server == ""){ + return "Server name is required."; + } + if ($share == ""){ + return "Share name is required."; + } + } +} - // Display the page heading and start the table - echo '<center><h2>Confirm Server Settings</h2></center>'; - put_server_heading($mode, "Verify that the settings are correct before you save"); // Output server/share heading - // FIXME: pass $mode, not "delete" +// ---------------------------------------------------------------- +// server_details: generate a html page that will allow +// editing of the server settings. +// Setup the edit mode and output the heading. +// Used by: admin.php +// ---------------------------------------------------------------- +function server_details($mode, $server, $share, $settings, $errmsg) { + global $admin, $tableborder, $servercfg; - echo '<table align="center" border="' . $tableborder . '"><tbody>'; - echo '<tr><td align = "center">'; + $PHPSELF = $_SERVER['PHP_SELF']; + $server_key = $server . '.' . $share; + switch ($mode) { + case ("Add"): + $details = get_server_html("new", $settings, $mode); + break; + case ("Change"): + case ("Delete"): + $details = get_server_html("$server_key", $settings, $mode); + break; + } + + // Display the server details + + $t = new rFastTemplate('inc/templates'); // Instantiate new template + $t->define(array('server_details' => 'server_details.thtml')); + // Tell rfasttemplate the template file name + $t->assign('HEADER', implode("", file('inc/header.pinc'))); + // Load the page header + $t->assign('PHPSELF', "$PHPSELF"); // Replace PHPSELF with the current URL + $t->assign('ERRMSG', $errmsg); // Error message + $t->assign('BORDER', "$tableborder"); // Helpful to debug table layout + $t->assign('MODE', "$mode"); // Helpful to debug table layout + $t->assign('DETAILS', "$details"); + $t->assign('SERVERKEY', "$server_key"); + $t->assign('SERVER', "$servercfg->config['server']"); + $t->assign('SHARE', "$servercfg->config['share']"); - // load the html form + $t->parse('SERVER_DETAILS', 'server_details'); // Prepare the final output + $t->FastPrint(); // and send it to stdout. +} - echo '<form name="confirm_settings" method="POST">'; +// ---------------------------------------------------------------- +// process_server_details: Process input from the server detail screen +// ---------------------------------------------------------------- +function process_server_details(){ - foreach ($servercfg->config as $name => $value) { // output each field that has a value - echo "$name = $value <br>\n"; + $errmsg = validate_server($_POST['mode_name'], $_POST['settings']); + if (($errmsg != "") + || (changed($_POST['settings']) == TRUE)){ + server_details( + $_POST['mode_name'], + $_POST['settings']['server'], + $_POST['settings']['share'], + $_POST['settings'], + $errmsg); + } else { + confirm_server( + $_POST['settings']['server'], + $_POST['settings']['share'], + $_POST['mode_name'], + $_POST['settings']); } - - echo $html; - echo '<input type="hidden" name="save_changes">'; - echo "<input type=\"hidden\" name=\"mode_name\" value=\"$mode\">\n"; - echo '<p><big>Verify that the settings are correct before you save</big> - <br><br><input type="submit" name="commit_changes" value="Confirm ' . $mode . '"></p>'; - echo '</form>'; - echo '</td></tr>'; - echo '</tbody>'; - echo '</table>'; } -// --------------------------------------------------------- -// save_settings - store the server settings in config -// Used by: edit_server -// --------------------------------------------------------- -function save_settings($settings) { - global $servercfg, $debug; +// ---------------------------------------------------------------- +// validate_server: Validate input from the server details screen +// ---------------------------------------------------------------- +function validate_server($mode, $settings) { + global $admin; - // Also set to blank, any settings not shown - $server_defs = $servercfg->get_server_defs(); - foreach ($server_defs as $name => $value) { - if (isset($settings["$name"])) { - $servercfg->config["$name"] = $settings["$name"]; - } else { - $servercfg->config["$name"] = ""; // Any configs not specified, set to blank - } + if (($settings['backup_method'] == 'rsync') + && (trim($settings['rsync_share']) == "")){ + return "Please specify the name of the rsync share."; } - - // Get value for 7 day checkboxes into $days - // FIXME: 'days' hardcoding prevents using more that one "days" type field - - for ($n = 0; $n <= 6; $n++){ - $day = "day" . $n; - if (isset($settings["$day"])){ - $days .= $n; - } + if ((($settings['backup_method'] == 'nfs') + || ($settings['restore_method'] == 'nfs')) + && (trim($settings['nfs_share']) == "")){ + return "Please specify the path of the nfs share."; } - if (isset($days)){ - $servercfg->config["run_days"] = $days; + if ((($settings['backup_method'] == 'smb') + || ($settings['restore_method'] == 'smb')) + && (trim($settings['smb_share']) == "")){ + return "Please specify the name of the smb share."; } } // --------------------------------------------------------- -// parse_edit_html - parse the config file to html -// Used by: edit_server_detail -// Returns: html +// get_server_html - parse the config file to html +// Used by: server_details +// Returns: html for the edit server screen // --------------------------------------------------------- -function parse_edit_html ($mode) { +function get_server_html($server, $settings, $mode) { global $servercfg; + // Save server configuration in admin for use in other functions + if (isset($settings)){ + save_settings($settings); + } + $server_defs = $servercfg->get_server_defs(); foreach ($server_defs as $name => $value){ // read through server def key/values if (check_rules($name)) { // should field be displayed? - if ($mode == "delete"){ // input or output field? + if ($mode == "Delete"){ // input or output field? $io = 'o'; } else { $io = 'i'; @@ -424,7 +408,7 @@ // --------------------------------------------------------- // check_rules - determine if field should be displayed -// Used by: parse_edit_html +// Used by: get_server_html // Parms: $name The server configuration field name to check // --------------------------------------------------------- function check_rules ($name) { @@ -470,38 +454,84 @@ return FALSE; } +// ---------------------------------------------------------------- +// Confirm server changes +// Displays the confirmation screen +// ---------------------------------------------------------------- +function confirm_server($server_name, $share_name, $mode, $settings){ + global $servercfg, $tableborder; + + // save the current screen settings + save_settings($settings); + + // load the html form + + $t = new rFastTemplate('inc/templates'); // Instantiate new template + $t->define(array('confirm_server' => 'confirm_server.thtml')); + // Tell rfasttemplate the template file name + $t->define_dynamic('detail', 'confirm_server'); // 'detail' is dynamic template in + // same file as 'confirm_server template + $t->assign('HEADER', implode("", file('inc/header.pinc'))); + // Load the page header + $t->assign('BORDER', "$tableborder"); // Helpful to debug table layout + $t->assign('MODE', "$mode"); // Helpful to debug table layout + + foreach ($servercfg->config as $name => $value) { // output each field that has a value + $t->assign('NAME', "$name"); // Setting name + $t->assign('VALUE', "$value"); // Setting value + $t->parse('DETAIL', '.detail'); // Parse the html row + } + + $t->parse('CONFIRM_SERVER', 'confirm_server'); // Prepare the final output + $t->FastPrint(); // and send it to stdout. +} // --------------------------------------------------------- -// put_server_heading - Outputs html for the Server: xxx Share: xxx heading -// Used by: admin.php +// save_settings - store the server settings in config +// Used by: server_details // --------------------------------------------------------- -function put_server_heading($mode, $instruction) { - global $tableborder; +function save_settings($settings) { + global $servercfg, $debug; - $CR = "\n"; + // Also set to blank, any settings not shown + $server_defs = $servercfg->get_server_defs(); + foreach ($server_defs as $name => $value) { + if (isset($settings["$name"])) { + $servercfg->config["$name"] = $settings["$name"]; + } else { + $servercfg->config["$name"] = ""; // Any configs not specified, set to blank + } + } - echo - $CR, '<table align="center" width="90%" border="', $tableborder, '">', - $CR, '<tr><td><div class="instruction">', $instruction, '</div></td>', - $CR, '<td><div class="servermode">Mode: <b>', $mode, '</b></div></td></tr>', $CR - ; + // Get value for 7 day checkboxes into $days + // FIXME: 'days' hardcoding prevents using more than one "days" type field + + for ($n = 0; $n <= 6; $n++){ + $day = "day" . $n; + if (isset($settings["$day"])){ + $days .= $n; + } + } + if (isset($days)){ + $servercfg->config["run_days"] = $days; + } } // --------------------------------------------------------- -// changed - check for screen settings changed +// changed - check for screen number of fields changed // Used by: admin.php // Returns: TRUE if changed, FALSE if not changed // --------------------------------------------------------- function changed($settings) { global $admin; - $hashnew = serialize($settings); // hash current screen settings + $countnew = count($settings); // count current screen fields - if (isset($admin->hash)){ - if ($admin->hash == $hashnew) return FALSE; // compare current to saved screen settings + if (isset($admin->count)){ + if ($admin->count == $countnew) return FALSE; // Same number fields } - $admin->hash = $hashnew; // save current screen settings - return TRUE; // screen settings have changed + $admin->count = $countnew; // save field count + return TRUE; // number of fields has changed } // --------------------------------------------------------- @@ -531,6 +561,15 @@ echo "*** Backing up $server/$share\n"; +} + +// --------------------------------------------------------- +// Dump a formatted variable for TESTing +// Parms: desc string - name of the var +// var the variable to dump +// --------------------------------------------------------- +function testdump($desc, $var){ + echo "<pre>*** $desc ***\n"; var_dump($var); echo "</pre>\n"; } ?> |