Sat, 26 Jul 2014 17:30:47 +0200
Profiles can be managed via the web interface
<?php /***************************************************************************** * Copyright (C) 2014 * * Michiel Broek <mbroek at mbse dot eu> * * This file is part of ThermFerm * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * ThermFerm is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ThermFerm; see the file COPYING. If not, write to the Free * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *****************************************************************************/ require_once('utilities.php'); /* * 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; /* * Profile add * * @param string $_POST['Name'] The rpofile name */ function profile_add() { $cmd = "ADD PROFILE ".$_POST['Name']; $sock = open_socket(); if ($sock != false) { /* * Send command and absorb the result. */ socket_write($sock, $cmd, 4096); while (1) { $line = socket_read($sock, 4096); if ($line === '') break; } 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 */ if ($_POST['key'] == 'Delete') $update_cmd = "DEL PROFILE ".$_POST['UUID']; else $update_cmd = "PROFILE ".$_POST['UUID'].",".$_POST['Name']; $sock = open_socket(); if ($sock != false) { /* * Send command and absorb the result. */ socket_write($sock, $update_cmd, 4096); while (1) { $line = socket_read($sock, 4096); if ($line === '') break; } 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 .= ' <div id="errors">'.PHP_EOL; $outstr .= ' '.$error_message.PHP_EOL; $outstr .= ' </div> <!-- errors -->'.PHP_EOL; $outstr .= ' <div id="etable">'.PHP_EOL; $outstr .= ' <form method="POST" action="profiles.php">'.PHP_EOL; $outstr .= ' <table class="editor">'.PHP_EOL; $outstr .= ' <tr class="editor">'.PHP_EOL; $outstr .= ' <td class="editname">UUID</td>'.PHP_EOL; $outstr .= ' <td class="editfield">'.$UUID.'</td>'.PHP_EOL; $outstr .= ' </tr>'.PHP_EOL; $outstr .= ' <tr class="editor">'.PHP_EOL; $outstr .= ' <td class="editname">Name</td>'.PHP_EOL; $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value="'.$Name.'"></td>'.PHP_EOL; $outstr .= ' </tr>'.PHP_EOL; $outstr .= ' <tr class="editor">'.PHP_EOL; $outstr .= ' <td class="editname"><input type="submit" value="Save" name="key"></td>'.PHP_EOL; $outstr .= ' <td class="editfield"><input type="submit" value="Cancel" name="key">'; $outstr .= '<input type="submit" value="Delete" name="key" style="margin-left: 100px;">'; $outstr .= '<input type="hidden" value="testdata" name="action">'; $outstr .= '<input type="hidden" value="'.$command.'" name="command">'; $outstr .= '<input type="hidden" value="'.$UUID.'" name="UUID"></td>'.PHP_EOL; $outstr .= ' </tr>'.PHP_EOL; $outstr .= ' </table>'.PHP_EOL; $outstr .= ' </form>'.PHP_EOL; $outstr .= ' </div> <!-- etable -->'.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'); } } /* * @link Edit profile * @link Add profile */ function profile_list() { global $arr; $outstr = build_header("ThermFerm - Profiles"); $outstr .= ' <div id="errors">'.PHP_EOL; $outstr .= ' </div> <!-- errors -->'.PHP_EOL; $outstr .= ' <div id="etable">'.PHP_EOL; $outstr .= ' <table class="setup">'.PHP_EOL; $outstr .= ' <tr style="background-color: #FFCC01;">'.PHP_EOL; $outstr .= ' <td class="setup">UUID</td>'.PHP_EOL; $outstr .= ' <td class="setup">Name</td>'.PHP_EOL; $outstr .= ' <td class="setup">Steps</td>'.PHP_EOL; $outstr .= ' <td class="setup">Edit</td>'.PHP_EOL; $outstr .= ' </tr>'.PHP_EOL; if (startsWith($arr[0], "212")) { $j = 1; while (1) { if (strcmp($arr[$j], ".") == 0) break; $f = explode(",", $arr[$j]); $outstr .= ' <tr class="setup">'.PHP_EOL; $outstr .= ' <td class="setup">'.$f[0].'</td>'.PHP_EOL; $outstr .= ' <td class="setup">'.$f[1].'</td>'.PHP_EOL; $outstr .= ' <td class="setup">'.$f[2].'</td>'.PHP_EOL; if ($f[3] == 1) $outstr .= ' <td class="setup">Busy</td>'.PHP_EOL; else $outstr .= ' <td class="setup"><a href="profiles.php?action=edit&UUID='.$f[0].'">Edit</a></td>'.PHP_EOL; $outstr .= ' </tr>'.PHP_EOL; $j++; } } $outstr .= ' </table>'.PHP_EOL; $outstr .= ' </div> <!-- etable -->'.PHP_EOL; $outstr .= ' <div id="atable">'.PHP_EOL; $outstr .= ' <form method="POST" action="profiles.php">'.PHP_EOL; $outstr .= ' <table class="editor">'.PHP_EOL; $outstr .= ' <tr class="editor">'.PHP_EOL; $outstr .= ' <td class="editname">Name</td>'.PHP_EOL; $outstr .= ' <td class="editfield"><input type="text" name="Name" size="50" value="'.$Name.'"></td>'.PHP_EOL; $outstr .= ' </tr>'.PHP_EOL; $outstr .= ' <tr class="editor">'.PHP_EOL; $outstr .= ' <td class="editname"><input type="submit" value="Add" name="key"></td>'.PHP_EOL; $outstr .= '<input type="hidden" value="testdata" name="action">'; $outstr .= '<input type="hidden" value="add" name="command">'; $outstr .= '<input type="hidden" value="00000000-0000-0000-0000-000000000000" name="UUID">'; $outstr .= ' </tr>'.PHP_EOL; $outstr .= ' </table>'.PHP_EOL; $outstr .= ' </form>'.PHP_EOL; $outstr .= ' </div> <!-- atable -->'.PHP_EOL; $outstr .= build_footer(); echo $outstr; }