Tue, 29 Jan 2019 21:52:08 +0100
Recipes import uses indexes instead of strings. Started rebuilding the recipes editor using indexes and standard formats. Rebuild the fermentable editor from grid editing to popup editing. Most calculations are using indexes for dropdown values.
<?php require($_SERVER['DOCUMENT_ROOT']."/config.php"); require($_SERVER['DOCUMENT_ROOT']."/version.php"); #Connect to the database $connect = mysqli_connect(DBASE_HOST, DBASE_USER, DBASE_PASS, DBASE_NAME); if (! $connect) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } mysqli_set_charset($connect, "utf8" ); $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c"); $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b"); $rescapers = array("'"); $rreplacements = array("\\'"); if (isset($_POST['insert']) || isset($_POST['update'])) { if (isset($_POST['insert'])) { $sql = "INSERT INTO `profile_fermentation` SET "; } if (isset($_POST['update'])) { $sql = "UPDATE `profile_fermentation` SET "; } if (isset($_POST['uuid']) && (strlen($_POST['uuid']) == 36)) { $sql .= "uuid='" . $_POST['uuid']; } else { $uuid = str_replace("\n", "", file_get_contents('/proc/sys/kernel/random/uuid')); $sql .= "uuid='" . $uuid; } $sql .= "', name='" . mysqli_real_escape_string($connect, $_POST['name']); $sql .= "', inittemp_lo='" . floatval($_POST['inittemp_lo']); $sql .= "', inittemp_hi='" . floatval($_POST['inittemp_hi']); ($_POST['fridgemode'] == 'true') ? $sql .= "', fridgemode='1" : $sql .= "', fridgemode='0"; $array = $_POST['steps']; // Don't believe given duration and number of steps, recalculate. $duration = 0; $totalsteps = 0; $steps = '['; foreach($array as $key => $item) { if ($totalsteps > 0) $steps.= ','; $totalsteps++; $duration += $item['steptime'] + $item['resttime']; $steps .= '{"name":"' . str_replace($rescapers,$rreplacements,$item['name']); $steps .= '","steptime":' . $item['steptime']; $steps .= ',"resttime":' . $item['resttime']; $steps .= ',"target_lo":' . $item['target_lo']; $steps .= ',"target_hi":' . $item['target_hi']; $steps .= ',"fridgemode":' . $item['fridgemode'] . '}'; } $steps .= ']'; $sql .= "', totalsteps='" . $totalsteps; $sql .= "', duration='" . $duration; syslog(LOG_NOTICE, $steps); $sql .= "', steps='" . str_replace($rescapers,$rreplacements,json_encode($array)); if (isset($_POST['insert'])) { $sql .= "';"; } if (isset($_POST['update'])) { $sql .= "' WHERE record='" . $_POST['record'] . "';"; } syslog(LOG_NOTICE, $sql); $result = mysqli_query($connect, $sql); if (! $result) { syslog(LOG_NOTICE, "db_profile_fermentation: ".$sql." result: ".mysqli_error($connect)); } else { if (isset($_POST['update'])) { syslog(LOG_NOTICE, "db_profile_fermentation: updated record ".$_POST['record']); } else { $lastid = mysqli_insert_id($connect); syslog(LOG_NOTICE, "db_profile_fermentation: inserted record ".$lastid); } } echo $result; } else if (isset($_POST['delete'])) { // DELETE COMMAND $sql = "DELETE FROM `profile_fermentation` WHERE record='".$_POST['record']."';"; $result = mysqli_query($connect, $sql); if (! $result) { syslog(LOG_NOTICE, "db_profile_fermentation: ".$sql." result: ".mysqli_error($connect)); } else { syslog(LOG_NOTICE, "db_profile_fermentation: deleted record ".$_POST['record']); } echo $result; } else { // SELECT COMMAND $query = "SELECT * FROM profile_fermentation ORDER BY name;"; $result = mysqli_query($connect, $query) or die("SQL Error 1: " . mysqli_error($connect)); $profiles = '['; $comma = FALSE; while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { // Manual encode to JSON. if ($comma) { $profiles .= ','; } $comma = TRUE; $profiles .= '{"record":' . $row['record']; $profiles .= ',"uuid":"' . $row['uuid']; $profiles .= '","name":"' . str_replace($escapers, $replacements, $row['name']); $profiles .= '","inittemp_lo":' . $row['inittemp_lo']; $profiles .= ',"inittemp_hi":' . $row['inittemp_hi']; $profiles .= ',"fridgemode":' . $row['fridgemode']; $profiles .= ',"totalsteps":' . $row['totalsteps']; $profiles .= ',"duration":' . $row['duration']; $profiles .= ',"steps":' . $row['steps']; $profiles .= '}'; } $profiles .= ']'; // syslog(LOG_NOTICE, $profiles); header("Content-type: application/json"); echo $profiles; } ?>