# HG changeset patch # User Michiel Broek # Date 1406388647 -7200 # Node ID e4518fd9b6261a1b2cd74431c9f7c56371e2e437 # Parent 264e5ee5abfceb49edc64e47f94b9d04d766f4b8 Profiles can be managed via the web interface diff -r 264e5ee5abfc -r e4518fd9b626 www-thermferm/css/style.css --- a/www-thermferm/css/style.css Sat Jul 26 13:18:00 2014 +0200 +++ b/www-thermferm/css/style.css Sat Jul 26 17:30:47 2014 +0200 @@ -56,14 +56,23 @@ } #errors { - height: 60px; + height: 35px; width: 978px; float: left; + text-align: center; + font-size: 1.5em; + margin-top: 10px; color: #ff0000; } #etable { - height: 360px; + height: 320px; + width: 978px; + float: left; +} + +#atable { + height: 60px; width: 978px; float: left; } @@ -86,6 +95,31 @@ padding: 1px 3px 1px 3px; } +/* + * Editor screens + */ +table.editor { + margin-left: auto; + margin-right: auto; + border-collapse: collapse; + background-color: #eee; +} + +tr.editor { + height: 30px; +} + +td.editname { + width: 150px; + padding: 1px 3px 1px 3px; +} + +td.editfield { + width: 550px; + padding: 1px 3px 1px 3px; +} + + #jqxTabs { width: 980px; height: 440px; diff -r 264e5ee5abfc -r e4518fd9b626 www-thermferm/profiles.php --- a/www-thermferm/profiles.php Sat Jul 26 13:18:00 2014 +0200 +++ b/www-thermferm/profiles.php Sat Jul 26 17:30:47 2014 +0200 @@ -23,35 +23,65 @@ require_once('utilities.php'); -profile_admin(); +/* + * Each time this page is loaded, get the profiles from the server. + */ +$sock = open_socket(); +if ($sock == false) { + load('index.php'); +} + +socket_write($sock, "LIST PROFILES", 4096); +$answer = ""; +while (1) { + $line = socket_read($sock, 4096); + if ($line === '') + break; + $answer .= $line; +} +socket_close($sock); +/* + * $arr contains the complete reply of he LIST PROFILES command. + */ +$arr = explode("\r\n", $answer); + + +if (isset($_GET['action'])) { + switch ($_GET['action']) { + case 'edit': profile_edit(); + break; + default: break; + } +} elseif (isset($_POST['action'])) { + switch ($_POST['action']) { + case 'testdata': testdata(); + break; + default: break; + } +} else { + profile_list(); +} + exit; -function profile_admin() { - if (isset($_GET['action'])) { - switch ($_GET['action']) { - default: break; - } - } elseif (isset($_POST['action'])) { - switch ($_POST['action']) { - default: break; - } - } else { - profile_list(); - } -} - +/* + * Profile add + * + * @param string $_POST['Name'] The rpofile name + */ function profile_add() { - $cmd = "ADD PROFILE ".$_GET['Name']; + + $cmd = "ADD PROFILE ".$_POST['Name']; $sock = open_socket(); if ($sock != false) { /* * Send command and absorb the result. */ - socket_write($sock, $update_cmd, 4096); + socket_write($sock, $cmd, 4096); while (1) { $line = socket_read($sock, 4096); if ($line === '') @@ -59,15 +89,31 @@ } socket_close($sock); } + + unset($_POST['UUID']); + unset($_POST['Name']); + unset($_POST['key']); + unset($_POST['command']); + load('profiles.php'); } +/* + * Profile update + * + * @param string $_POST['UUID'] The profile UUID + * @param string $_POST['Name'] The profile name + * @param string $_POST['key'] The button pressed. + */ function profile_update() { /* * Build the update command */ - $update_cmd = "PROFILE ".$_GET['UUID'].",".$_GET['Name']; + if ($_POST['key'] == 'Delete') + $update_cmd = "DEL PROFILE ".$_POST['UUID']; + else + $update_cmd = "PROFILE ".$_POST['UUID'].",".$_POST['Name']; $sock = open_socket(); if ($sock != false) { @@ -82,6 +128,177 @@ } socket_close($sock); } + + unset($_POST['UUID']); + unset($_POST['Name']); + unset($_POST['key']); + unset($_POST['command']); + load('profiles.php'); +} + + + +/* + * Test input of a modified or new profile. + * + * @param string $_POST['UUID'] Unique record UUID + * @param string $_POST['Name'] Profile name + * @param string $_POST['key'] Key choice, Save or Cancel + * @param string $_POST['command'] Command used, 'add' or 'update' + * + * Return: 0 = Ok + * 1 = Missing data + * 2 = Name field too short + * 3 = Name already in use + * 99 = Cancel key + */ +function test_thedata() { + + global $arr; + + if (isset($_POST['UUID']) && isset($_POST['Name']) && isset($_POST['key']) && isset($_POST['command'])) { + + if ($_POST['key'] == 'Cancel') + return 99; + + if (strlen($_POST['Name']) < 2) + return 2; + + if (startsWith($arr[0], "212")) { + $j = 1; + while (1) { + if (strcmp($arr[$j], ".") == 0) + break; + $f = explode(",", $arr[$j]); + if (strcmp($f[0], $_POST['UUID']) && (strcmp($f[1], $_POST['Name']) == 0)) { + return 3; + } + $j++; + } + } + + } else { + return 1; + } + + return 0; +} + + + +/* + * Test result from edit screen and do next action + */ +function testdata() { + + $result = test_thedata(); + $error = ''; + + switch ($result) { + case 0: if ($_POST['command'] == 'add') { + profile_add(); + return; + } else if ($_POST['command'] == 'update') { + profile_update(); + return; + } + break; + case 1: $error = 'Missing data'; + break; + case 2: $error = 'The name is too short'; + break; + case 3: $error = 'The name is already in use, choose another one'; + break; + case 99: + load('profiles.php'); + break; + } + + if ($_POST['command'] == 'add') { + $heading = 'ThermFerm - Add Profile'; + } else { + $heading = 'ThermFerm - Edit Profile'; + } + + edit_screen($_POST['UUID'], $_POST['Name'], $_POST['command'], $heading, $error); +} + + + +/* + * Profiles edit screen. Used by profile_edit(), profile_add() and testdata() + * + * @param string $UUID The record UUID (fixed). + * @param string $Name The Profile Name. + * @param string $command 'add' or 'update' + * @param string $heading Pagina heading title. + * @Param string $error_message Blank or previous error. + */ +function edit_screen($UUID, $Name, $command, $heading, $error_message) { + + $outstr = build_header($heading); + $outstr .= '
'.PHP_EOL; + $outstr .= ' '.$error_message.PHP_EOL; + $outstr .= '
'.PHP_EOL; + $outstr .= '
'.PHP_EOL; + $outstr .= '
'.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= '
UUID'.$UUID.'
Name
'; + $outstr .= ''; + $outstr .= ''; + $outstr .= ''; + $outstr .= '
'.PHP_EOL; + $outstr .= '
'.PHP_EOL; + $outstr .= '
'.PHP_EOL; + $outstr .= build_footer(); + echo $outstr; +} + + + +/* + * Edit a Profile. Fetches the record data and shows the edit screen. + * + * @param string $_GET['action'] Must be 'edit'. + * @param string $_GET['UUID'] The UUID of the Profile. + */ +function profile_edit() { + + global $arr; + + if ($_GET['action'] == 'edit') { + + if (startsWith($arr[0], "212")) { + $j = 1; + while (1) { + if (strcmp($arr[$j], ".") == 0) + break; + $f = explode(",", $arr[$j]); + if (strcmp($f[0], $_GET['UUID']) == 0) { + edit_screen($f[0], $f[1], 'update', 'ThermFerm - Edit Profile', ''); + return; + } + $j++; + } + } else { + load('profiles.php'); + } + + } else { + load('profiles.php'); + } } @@ -91,29 +308,13 @@ * @link Add profile */ function profile_list() { - - $sock = open_socket(); - if ($sock == false) { - echo ""; - return; - } - socket_write($sock, "LIST PROFILES", 4096); - $answer = ""; - while (1) { - $line = socket_read($sock, 4096); - if ($line === '') - break; - $answer .= $line; - } - socket_close($sock); - $arr = explode("\r\n", $answer); + global $arr; - $outstr = build_header(); + $outstr = build_header("ThermFerm - Profiles"); $outstr .= '
'.PHP_EOL; $outstr .= '
'.PHP_EOL; - $outstr .= '
'.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; @@ -129,12 +330,11 @@ if (strcmp($arr[$j], ".") == 0) break; $f = explode(",", $arr[$j]); - $busy = 0; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; - if ($busy == 1) + if ($f[3] == 1) $outstr .= ' '.PHP_EOL; else $outstr .= ' '.PHP_EOL; @@ -145,6 +345,24 @@ $outstr .= '
'.$f[0].''.$f[1].''.$f[2].'BusyEdit
'.PHP_EOL; $outstr .= '
'.PHP_EOL; + $outstr .= '
'.PHP_EOL; + + $outstr .= '
'.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ''; + $outstr .= ''; + $outstr .= ''; + $outstr .= ' '.PHP_EOL; + $outstr .= '
Name
'.PHP_EOL; + $outstr .= '
'.PHP_EOL; + + $outstr .= '
'.PHP_EOL; $outstr .= build_footer(); echo $outstr; } diff -r 264e5ee5abfc -r e4518fd9b626 www-thermferm/utilities.php --- a/www-thermferm/utilities.php Sat Jul 26 13:18:00 2014 +0200 +++ b/www-thermferm/utilities.php Sat Jul 26 17:30:47 2014 +0200 @@ -46,13 +46,13 @@ -function build_header() +function build_header($heading) { $outstr = ''.PHP_EOL; $outstr .= ''.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; - $outstr .= ' ThermFerm monitor'.PHP_EOL; + $outstr .= ' '.$heading.''.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; @@ -80,3 +80,17 @@ } + +/* + * Goto URL. Works also after headers have been sent. + */ +function load($url) { + echo' + '; +} +