Fix upgrade of the yeast data in products and recipes if the original yeast is not found. Export product or recipe for forum is now coded in forum format and copied to the clipboard ready to paste on a forum.

Tue, 10 Dec 2019 20:11:37 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Tue, 10 Dec 2019 20:11:37 +0100
changeset 565
dfc850e6ee1f
parent 564
d5fad7d80899
child 566
e526dc911bc1

Fix upgrade of the yeast data in products and recipes if the original yeast is not found. Export product or recipe for forum is now coded in forum format and copied to the clipboard ready to paste on a forum.

www/includes/db_product.php file | annotate | diff | comparison | revisions
www/includes/db_recipes.php file | annotate | diff | comparison | revisions
www/js/prod_forum.js file | annotate | diff | comparison | revisions
www/js/rec_forum.js file | annotate | diff | comparison | revisions
www/prod_forum.php file | annotate | diff | comparison | revisions
www/rec_forum.php file | annotate | diff | comparison | revisions
--- a/www/includes/db_product.php	Sun Dec 08 11:27:19 2019 +0100
+++ b/www/includes/db_product.php	Tue Dec 10 20:11:37 2019 +0100
@@ -965,7 +965,22 @@
                                                         $yeasts[$i]['y_pofpos'] = intval($obj->pofpos);
 						if (! isset($yeasts[$i]['y_zymocide']))
                                                         $yeasts[$i]['y_zymocide'] = intval($obj->zymocide);
-					}
+					} else {
+                                                if (! isset($yeasts[$i]['y_sta1']))
+                                                        $yeasts[$i]['y_sta1'] = 0;
+                                                if (! isset($yeasts[$i]['y_bacteria']))
+                                                        $yeasts[$i]['y_bacteria'] = 0;
+                                                if (! isset($yeasts[$i]['y_harvest_top']))
+                                                        $yeasts[$i]['y_harvest_top'] = 0;
+                                                if (! isset($yeasts[$i]['y_harvest_time']))
+                                                        $yeasts[$i]['y_harvest_time'] = 0;
+                                                if (! isset($yeasts[$i]['y_pitch_temperature']))
+                                                        $yeasts[$i]['y_pitch_temperature'] = 0;
+                                                if (! isset($yeasts[$i]['y_pofpos']))
+                                                        $yeasts[$i]['y_pofpos'] = 0;
+                                                if (! isset($yeasts[$i]['y_zymocide']))
+                                                        $yeasts[$i]['y_zymocide'] = 0;
+                                        }
 					mysqli_free_result($result2);
 				}
 			}
--- a/www/includes/db_recipes.php	Sun Dec 08 11:27:19 2019 +0100
+++ b/www/includes/db_recipes.php	Tue Dec 10 20:11:37 2019 +0100
@@ -293,7 +293,7 @@
                         $yeast .= ',"y_pofpos":' . $item['y_pofpos'];
                         $yeast .= ',"y_zymocide":' . $item['y_zymocide'];
 			$yeast .= ',"y_cost":' . $item['y_cost'] . '}';
-			//syslog(LOG_NOTICE, $yeast);
+			syslog(LOG_NOTICE, $yeast);
 			$yeasts .= $yeast;
 		}
 	}
@@ -552,10 +552,26 @@
                                                         $yeasts[$i]['y_pofpos'] = intval($obj->pofpos);
                                                 if (! isset($yeasts[$i]['y_zymocide']))
                                                         $yeasts[$i]['y_zymocide'] = intval($obj->zymocide);
+					} else {
+                                                if (! isset($yeasts[$i]['y_sta1']))
+                                                        $yeasts[$i]['y_sta1'] = 0;
+                                                if (! isset($yeasts[$i]['y_bacteria']))
+                                                        $yeasts[$i]['y_bacteria'] = 0;
+                                                if (! isset($yeasts[$i]['y_harvest_top']))
+                                                        $yeasts[$i]['y_harvest_top'] = 0;
+                                                if (! isset($yeasts[$i]['y_harvest_time']))
+                                                        $yeasts[$i]['y_harvest_time'] = 0;
+                                                if (! isset($yeasts[$i]['y_pitch_temperature']))
+                                                        $yeasts[$i]['y_pitch_temperature'] = 0;
+                                                if (! isset($yeasts[$i]['y_pofpos']))
+                                                        $yeasts[$i]['y_pofpos'] = 0;
+                                                if (! isset($yeasts[$i]['y_zymocide']))
+                                                        $yeasts[$i]['y_zymocide'] = 0;
 					}
 					mysqli_free_result($result2);
 				}
 			}
+			syslog(LOG_NOTICE, json_encode($yeasts, JSON_UNESCAPED_UNICODE));
 			$recipes .= ',"yeasts":' . json_encode($yeasts, JSON_UNESCAPED_UNICODE);
 		} else {
 			// Just leave it.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/js/prod_forum.js	Tue Dec 10 20:11:37 2019 +0100
@@ -0,0 +1,27 @@
+
+$(document).ready(function() {
+
+ /**
+  * This will copy the innerHTML of an element to the clipboard
+  * @param element reference OR string
+  */
+ function copyToClipboard(e) {
+    var tempItem = document.createElement('textarea');
+
+    document.body.appendChild(tempItem);
+    tempItem.value = e;
+    tempItem.select();
+    document.execCommand('Copy');
+
+    tempItem.parentElement.removeChild(tempItem);
+ }
+
+
+ $('#copytoClipboard').jqxButton({ template: 'success', theme: theme, width: 150 });
+ $('#copytoClipboard').click(function() {
+  copyToClipboard(forumstr);
+  window.close();
+ });
+
+});
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/js/rec_forum.js	Tue Dec 10 20:11:37 2019 +0100
@@ -0,0 +1,27 @@
+
+$(document).ready(function() {
+
+ /**
+  * This will copy the innerHTML of an element to the clipboard
+  * @param element reference OR string
+  */
+ function copyToClipboard(e) {
+    var tempItem = document.createElement('textarea');
+
+    document.body.appendChild(tempItem);
+    tempItem.value = e;
+    tempItem.select();
+    document.execCommand('Copy');
+
+    tempItem.parentElement.removeChild(tempItem);
+ }
+
+
+ $('#copytoClipboard').jqxButton({ template: 'success', theme: theme, width: 150 });
+ $('#copytoClipboard').click(function() {
+  copyToClipboard(forumstr);
+  window.close();
+ });
+
+});
+
--- a/www/prod_forum.php	Sun Dec 08 11:27:19 2019 +0100
+++ b/www/prod_forum.php	Tue Dec 10 20:11:37 2019 +0100
@@ -3,10 +3,9 @@
 require_once($_SERVER['DOCUMENT_ROOT'].'/includes/formulas.php');
 require_once($_SERVER['DOCUMENT_ROOT'].'/includes/constants.php');
 
-
 $link = mysqli_connect(DBASE_HOST,DBASE_USER,DBASE_PASS,DBASE_NAME);
 if (! $link) {
-	die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
+	die('Connect Error ('.mysqli_connect_errno().') '.mysqli_connect_error());
 }
 if (! mysqli_set_charset($link, "utf8" )) {
 	echo "error";
@@ -22,91 +21,53 @@
 date_default_timezone_set('Europe/Amsterdam');
 $prdate = date(DATE_RFC2822);
 
-?>
-<!DOCTYPE html>
-<html lang=nl-NL>
- <head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title>BMS v<?php echo $my_version;?> - Export recipe</title>
-  <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1" />
- </head>
- <body>
-  <pre>
-<?php
 
-
-function itemline($item, $content) {
-
-	echo $item . " ";
-	for ($i = strlen($item); $i < 40; $i++)
-		echo ".";	
-	echo ": " . $content . PHP_EOL;
-}
-
-
-function formatstr($strin, $len) {
-
-	$strout = null;
-	$cnt = 0;
-
-        for ($i = 0; $i < strlen($strin); $i++) {
-                $ord = ord($strin[$i]);
-		if ($ord != 195)
-			$cnt++;
+/*
+ * Generate the output in a string.
+ */
+$tabus = '[tabular]';
+$tabue = '[/tabular]';
+$heads = '[head]';
+$heade = '[/head]';
+$rows  = '[row]';
+$rowe  = '[/row]';
+$datas = '[data]';
+$datae = '[/data]';
 
-                switch ($strin[$i]) {
-                        case '<':
-                                        $strout .= '&lt;';
-                                        break;
-                        case '>':
-                                        $strout .= '&gt;';
-                                        break;
-                        case '&':
-                                        $strout .= '&amp;';
-                                        break;
-                        case '"':
-                                        $strout .= '&quot;';
-                                        break;
-                        default:
-                                        $strout .= $strin[$i];
-        	}
-
-		if ($cnt >= $len)
-			break;
-        }
+$memo  = "[u][b]BMS v".$my_version." - Datum export: ".$prdate.'[/b][/u]'.PHP_EOL;
+$memo .= PHP_EOL;
+$memo .= PHP_EOL;
+$memo .= '[u][b]Basis[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Omschrijving'.$heade.$heads.'Waarde'.$heade.PHP_EOL;
+$memo .= $rows.$datas.'Bier naam'.$datae.$datas.$row['code'].' '.$row['name'].$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Bier stijl'.$datae.$datas.$row['st_name'].$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Recept type'.$datae.$datas.$recipetype[$row['type']].$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Batch grootte'.$datae.$datas.$row['batch_size'].' liter'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Kooktijd'.$datae.$datas.$row['boil_time'].' minuten'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Brouwzaal rendement'.$datae.$datas.$row['efficiency'].' %'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Geschatte begin densiteit'.$datae.$datas.sprintf("%.3f",$row['est_og']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_og'])).'°P'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Geschatte eind densiteit'.$datae.$datas.sprintf("%.3f",$row['est_fg']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_fg'])).'°P'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Geschat alcohol'.$datae.$datas.sprintf("%.1f",$row['est_abv']).'% vol'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Kleur ('.$colormethod[$row['color_method']].')'.$datae.$datas.$row['est_color'].' EBC'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Bitterheid ('.$ibumethod[$row['ibu_method']].')'.$datae.$datas.$row['est_ibu'].' IBU'.$datae.$rowe.PHP_EOL;
+if ($row['divide_parts'])
+    $memo .= $rows.$datas.'Split batch (' .$splitat[$row['divide_type']].')'.$datae.$datas.($row['divide_part'] + 1)." van ".($row['divide_parts'] + 1).$datae.$rowe.PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
-	for ($i = $cnt; $i < $len; $i++)
-		$strout .= " ";
-        return $strout;
-}
-
-
-echo "BMS v" . $my_version . " - Datum export: " . $prdate . PHP_EOL;
-echo "----------------------------------------------------------" . PHP_EOL;
-itemline("Bier naam", $row['code'].' '.$row['name']);
-itemline("Bier stijl", $row['st_name']);
-itemline("Recept type", $recipetype[$row['type']]);
-itemline("Batch grootte", $row['batch_size'].' liter');
-itemline("Kooktijd", $row['boil_time'].' minuten');
-itemline("Brouwzaal rendement", $row['efficiency'].' %');
-itemline("Geschatte begin densiteit", sprintf("%.3f",$row['est_og']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_og'])).'&deg;P');
-itemline("Geschatte eind densiteit", sprintf("%.3f",$row['est_fg']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_fg'])).'&deg;P');
-itemline("Geschat alcohol", sprintf("%.1f",$row['est_abv']).'% vol');
-itemline("Kleur (" . $colormethod[$row['color_method']] . ")", $row['est_color'] . ' EBC');
-itemline("Bitterheid (" . $ibumethod[$row['ibu_method']] . ")", $row['est_ibu'] . ' IBU');
-if ($row['divide_parts'])
-    itemline("Split batch (".$splitat[$row['divide_type']].")", ($row['divide_part'] + 1)." van ".($row['divide_parts'] + 1));
-echo PHP_EOL . PHP_EOL;
 
 $sugarsm = 0;
 $grainabsorbtion = 0;
 $mashwater = 0;
 
+$memo .= '[u][b]Vergistbare ingrediënten[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Mout, granen en suikers'.$heade.$heads.'EBC'. $heade.$heads.'Gewicht kg'.$heade.$heads.'%'.$heade.$heads.'Gebruik tijdens'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_fermentables'], true);
-echo "Mout, granen en suikers                   EBC Gewicht kg     % Gebruik tijdens" . PHP_EOL;
-echo "---------------------------------------- ---- ---------- ----- ----------------" . PHP_EOL;
 foreach($arr as $item) {
-	$name = formatstr($item['f_name'] . " (" . $item['f_supplier'] . ")", 40);
+	$name = $item['f_name']." (".$item['f_supplier'].")";
 	$amount   = floatval($item['f_amount']);
 	$d = $amount * (floatval($item['f_yield']) / 100) * (1 - floatval($item['f_moisture']) / 100);
         if ($item['f_added']  == 0) {
@@ -114,18 +75,26 @@
                 $sugarsm += $d;
 		$grainabsorbtion += $item['f_amount'];
         }
-	echo sprintf("%s %4.0f %10.3f %5.1f ", $name, floatval($item['f_color']), $amount, floatval($item['f_percentage']));
-	echo $added[$item['f_added']] . PHP_EOL;
+	$pct = '';
+	if ($item['f_added']  < 4)
+		$pct = sprintf("%.1f", floatval($item['f_percentage']));
+
+	$memo .= $rows.$datas.$name.$datae.$datas.sprintf("%.0f", floatval($item['f_color'])).$datae.$datas;
+	$memo .= sprintf("%.3f", $amount).$datae.$datas.$pct.$datae.$datas;
+	$memo .= $added[$item['f_added']].$datae.$rowe .PHP_EOL;
 }
 $preboil_sg = estimate_sg($sugarsm, floatval($row['boil_size']));
-echo PHP_EOL . PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
 
-echo "Hop                                      Vorm       &alpha; %   IBU   Gram Toevoegen moment" . PHP_EOL;
-echo "---------------------------------------- -------- ----- ----- ------ --------------------" . PHP_EOL;
+$memo .= '[u][b]Hop[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Hop'.$heade.$heads.'Vorm'.$heade.$heads.'Alpha'.$heade.$heads.'IBU'.$heade.$heads.'Gram'.$heade.$heads.'Toevoegen moment'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_hops'], true);
 foreach($arr as $item) {
-	$name   = formatstr($item['h_name'] . " (" . $item['h_origin'] . ")", 40);
+	$name   = $item['h_name']." (".$item['h_origin'].")";
 	$amount = floatval($item['h_amount']) * 1000;
 	$time   = floatval($item['h_time']);
         $alpha  = floatval($item['h_alpha']);
@@ -138,36 +107,37 @@
 		$moment = $hopuse[$item['h_useat']].' '.sprintf("%.0f", $time / 1440).' dagen';
         }
 
-	echo sprintf("%s %-8s %5.1f %5.1f %6.1f %-20s", $name, $hopform[$item['h_form']], $alpha, $ibu, $amount, $moment);
-	echo PHP_EOL;
+	$memo .= $rows.$datas.$name.$datae.$datas.$hopform[$item['h_form']].$datae.$datas.sprintf("%.1f", $alpha).'%'.$datae.$datas;
+	$memo .= sprintf("%.1f", $ibu).$datae.$datas.sprintf("%.1f", $amount).$datae.$datas.$moment.$datae.$rowe.PHP_EOL;
 }
-echo PHP_EOL . PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
-echo "Specerij, kruid, brouwzout etc Type grondstof  Gebruik tijdens          Hoeveel" . PHP_EOL;
-echo "------------------------------ --------------- -------------------- -----------" . PHP_EOL;
+$memo .= '[u][b]Diversen[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Specerij, kruid, brouwzout'.$heade.$heads.'Type grondstof'.$heade.$heads.'Gebruik tijdens'.$heade.$heads.'Hoeveel'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_miscs'], true);
 foreach($arr as $item) {
-	$amount  = floatval($item['m_amount']) * 1000;
-	$aiw     = $item['m_amount_is_weight'];
-	$use_use = $item['m_use_use'];
-	$time    = floatval($item['m_time']);
-
-	if ($use_use == 2)      // Boil
-        	$gebruik = sprintf("%s %d min",$miscuse[$use_use],$time);
+	if ($item['m_use_use'] == 2)      // Boil
+        	$gebruik = sprintf("%s %d min",$miscuse[$item['m_use_use']],floatval($item['m_time']));
         else
-        	$gebruik = $miscuse[$use_use];
-	$hoeveel = sprintf("%.2f %s",$amount,$aiw ? "gr":"ml");
+        	$gebruik = $miscuse[$item['m_use_use']];
+	$hoeveel = sprintf("%.2f %s",floatval($item['m_amount']) * 1000,$item['m_amount_is_weight'] ? "gr":"ml");
 
-	echo sprintf("%s %-15s %-20s %11s", formatstr($item['m_name'], 30), $misctype[$item['m_type']], $gebruik, $hoeveel) . PHP_EOL;
+	$memo .= $rows.$datas.$item['m_name'].$datae.$datas.$misctype[$item['m_type']].$datae.$datas;
+	$memo .= $gebruik.$datae.$datas.$hoeveel.$datae.$rowe.PHP_EOL;
 }
-echo PHP_EOL . PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
-echo "Gistlab en code      Omschrijving                   Gebruik      Vorm            Hoeveel" . PHP_EOL;
-echo "-------------------- ------------------------------ ------------ ------------ ----------" . PHP_EOL;
+$memo .= '[u][b]Gist[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Gistlab en code'.$heade.$heads.'Omschrijving'.$heade.$heads.'Gebruik'.$heade.$heads.'Vorm'.$heade.$heads.'Hoeveel'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_yeasts'], true);
 foreach($arr as $item) {
-	$name    = formatstr($item['y_name'], 30);
-	$product = formatstr($item['y_laboratory']." ".$item['y_product_id'], 20);
+	$product = $item['y_laboratory']." ".$item['y_product_id'];
 
 	if ($item['y_form'] == 0)       // Liquid
                 $amount = sprintf("%.0f",floatval($item['y_amount']))." pak";
@@ -176,8 +146,10 @@
         else
                 $amount = sprintf("%.0f",floatval($item['y_amount'])*1000)." ml";
 
-	echo sprintf("%s %s %-12s %-12s %10s", $product, $name, $yeastuse[$item['y_use']], $yeastform[$item['y_form']], $amount) . PHP_EOL;
+	$memo .= $rows.$datas.$product.$datae.$datas.$item['y_name'].$datae.$datas.$yeastuse[$item['y_use']].$datae.$datas;
+	$memo .= $yeastform[$item['y_form']].$datae.$datas.$amount.$datae.$rowe.PHP_EOL;
 }
+$memo .= $tabue.PHP_EOL;
 if ($row['starter_enable'] && $row['prop1_volume']) {
 	$sv = 0;
 	for ($i = 1; $i < 5; $i++) {
@@ -186,44 +158,70 @@
 			$sv = floatval($row[$pv]);
 		}
 	}
-	echo PHP_EOL . "Maak een giststarter van " . sprintf("%.1f", $sv) . " liter." . PHP_EOL;
+	$memo .= "Maak een giststarter van ".sprintf("%.1f", $sv)." liter.".PHP_EOL;
 }
-echo PHP_EOL . PHP_EOL;
+$memo .= PHP_EOL;
+
 
 if ($row['w1_name'])
 	$mashwater += floatval($row['w1_amount']);
 if ($row['w2_name'])
 	$mashwater += floatval($row['w2_amount']);
 
-echo "Maisch stap          stap type              stap temp    rusten  opwarmen" . PHP_EOL;
-echo "-------------------- ---------------------- --------- --------- ---------" . PHP_EOL;
+$memo .= '[u][b]Maischschema[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Maisch stap'.$heade.$heads.'Stap type'.$heade.$heads.'Temperatuur'.$heade.$heads.'Rust tijd'.$heade.$heads.'Opwarmen tijd'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_mashs'], true);
 foreach($arr as $item) {
 	
 	if ($item['step_type'] == 1) {
-		$stype = formatstr($mashtype[$item['step_type']], 22);
+		$stype = $mashtype[$item['step_type']];
 	} else {
-		$stype = formatstr($mashtype[$item['step_type']].' '.sprintf("%.1f", $item['step_infuse_amount']).' liter', 22);
+		$stype = $mashtype[$item['step_type']].' '.sprintf("%.1f", $item['step_infuse_amount']).' liter';
 	}
-	echo sprintf("%s %s %s %s %s", 
-		formatstr($item['step_name'], 20), $stype, sprintf("%6.1f &deg;C", $item['step_temp']),
-		sprintf("%4.0f min.", $item['step_time']), sprintf("%4.0f min.", $item['ramp_time'])) . PHP_EOL;
+	$memo .= $rows.$datas.$item['step_name'].$datae.$datas.$stype.$datae.$datas.sprintf("%.1f °C", $item['step_temp']);
+	$memo .= $datae.$datas.sprintf("%.0f min.", $item['step_time']).$datae.$datas.sprintf("%.0f min.", $item['ramp_time']);
+	$memo .= $datae.$rowe.PHP_EOL;
 }
-echo PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
+
+$memo .= '[u][b]Brouwwater[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Omschrijving'.$heade.$heads.'Waarde'.$heade.PHP_EOL;
+
 if ($row['w1_name'] && $row['w2_name']) {
-	itemline("Maischwater 1", sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']);
-	itemline("Maischwater 2", sprintf("%.1f",floatval($row['w2_amount'])).' liter water '.$row['w2_name']);
+	$memo .= $rows.$datas.'Maischwater 1'.$datae.$datas.sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name'].$datae.$rowe.PHP_EOL;
+	$memo .= $rows.$datas.'Maischwater 2'.$datae.$datas.sprintf("%.1f",floatval($row['w2_amount'])).' liter water '.$row['w2_name'].$datae.$rowe.PHP_EOL;
 } else {
-	itemline("Maischwater", sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']);
+	$memo .= $rows.$datas.'Maischwater'.$datae.$datas.sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name'].$datae.$rowe.PHP_EOL;
 }
-itemline("Maischwater aanzuren tot pH", $row['mash_ph'].' pH');
-itemline("Spoelwater geschat", sprintf("%.1f", $row['brew_sparge_est'])." liter");
-itemline("Spoelwater temperatuur", $row['sparge_temp'].' &deg;C');
-itemline("Spoelwater aanzuren tot pH", sprintf("%.1f",$row['sparge_ph']).' pH');
-echo PHP_EOL . PHP_EOL;
+$memo .= $rows.$datas.'Maischwater aanzuren tot pH'.$datae.$datas.$row['mash_ph'].' pH'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Spoelwater geschat'.$datae.$datas.sprintf("%.1f",$row['brew_sparge_est'])." liter".$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Spoelwater temperatuur'.$datae.$datas.$row['sparge_temp'].' °C'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Spoelwater aanzuren tot pH'.$datae.$datas.sprintf("%.1f",$row['sparge_ph']).' pH'.$datae.$rowe.PHP_EOL;
+$memo .= $tabue.PHP_EOL;
 
 
+page_header('Product naar forum', 'prod_forum');
 ?>
-  </pre>
- </body>
-</html>
+   <script>
+    // json_encode() seems to do the right thing.
+    var forumstr = <?= json_encode($memo) ?>;
+   </script>
+   <div id="MainPanel">
+    <div class="section">
+     <div style="overflow: hidden; margin: 25px;"><br>
+      <p>Het product met alle gegevens staan gereed.</p>
+      <p>Zodra je de "Klembord" toets gebruikt zullen deze gegevens naar het klembord gekopieerd<br>
+      worden. In het scherm van het forum kun je deze gegevens vervolgens "plakken".</p>
+      <p>Na het drukken van de toets wordt dit scherm gesloten.</p>
+      <p><input type="button" value="Klembord" id="copytoClipboard" /></p>
+     </div>
+    </div>
+   </div>
+
+<?php
+page_footer();
+?>
--- a/www/rec_forum.php	Sun Dec 08 11:27:19 2019 +0100
+++ b/www/rec_forum.php	Tue Dec 10 20:11:37 2019 +0100
@@ -22,89 +22,51 @@
 date_default_timezone_set('Europe/Amsterdam');
 $prdate = date(DATE_RFC2822);
 
-?>
-<!DOCTYPE html>
-<html lang=nl-NL>
- <head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title>BMS v<?php echo $my_version;?> - Export recipe</title>
-  <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1" />
- </head>
- <body>
-  <pre>
-<?php
-
-
-function itemline($item, $content) {
-
-	echo $item . " ";
-	for ($i = strlen($item); $i < 40; $i++)
-		echo ".";	
-	echo ": " . $content . PHP_EOL;
-}
-
-
-function formatstr($strin, $len) {
-
-	$strout = null;
-	$cnt = 0;
-
-        for ($i = 0; $i < strlen($strin); $i++) {
-                $ord = ord($strin[$i]);
-		if ($ord != 195)
-			$cnt++;
+/*
+ * Generate the output in a string.
+ */
+$tabus = '[tabular]';
+$tabue = '[/tabular]';
+$heads = '[head]';
+$heade = '[/head]';
+$rows  = '[row]';
+$rowe  = '[/row]';
+$datas = '[data]';
+$datae = '[/data]';
 
-                switch ($strin[$i]) {
-                        case '<':
-                                        $strout .= '&lt;';
-                                        break;
-                        case '>':
-                                        $strout .= '&gt;';
-                                        break;
-                        case '&':
-                                        $strout .= '&amp;';
-                                        break;
-                        case '"':
-                                        $strout .= '&quot;';
-                                        break;
-                        default:
-                                        $strout .= $strin[$i];
-        	}
-
-		if ($cnt >= $len)
-			break;
-        }
-
-	for ($i = $cnt; $i < $len; $i++)
-		$strout .= " ";
-        return $strout;
-}
-
-
-echo "BMS v" . $my_version . " - Datum export: " . $prdate . PHP_EOL;
-echo "----------------------------------------------------------" . PHP_EOL;
-itemline("Bier naam", $row['name']);
-itemline("Bier stijl", $row['st_name']);
-itemline("Recept type", $recipetype[$row['type']]);
-itemline("Batch grootte", $row['batch_size'].' liter');
-itemline("Kooktijd", $row['boil_time'].' minuten');
-itemline("Brouwzaal rendement", $row['efficiency'].' %');
-itemline("Geschatte begin densiteit", sprintf("%.3f",$row['est_og']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_og'])).'&deg;P');
-itemline("Geschatte eind densiteit", sprintf("%.3f",$row['est_fg']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_fg'])).'&deg;P');
-itemline("Geschat alcohol", sprintf("%.1f",$row['est_abv']).'% vol');
-itemline("Kleur (" . $colormethod[$row['color_method']] . ")", $row['est_color'] . ' EBC');
-itemline("Bitterheid (" . $ibumethod[$row['ibu_method']] . ")", $row['est_ibu'] . ' IBU');
-echo PHP_EOL . PHP_EOL;
+$memo  = "[u][b]BMS v".$my_version." - Datum export: ".$prdate.'[/b][/u]'.PHP_EOL;
+$memo .= PHP_EOL;
+$memo .= PHP_EOL;
+$memo .= '[u][b]Basis[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Omschrijving'.$heade.$heads.'Waarde'.$heade.PHP_EOL;
+$memo .= $rows.$datas.'Bier naam'.$datae.$datas.$row['name'].$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Bier stijl'.$datae.$datas.$row['st_name'].$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Recept type'.$datae.$datas.$recipetype[$row['type']].$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Batch grootte'.$datae.$datas.$row['batch_size'].' liter'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Kooktijd'.$datae.$datas.$row['boil_time'].' minuten'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Brouwzaal rendement'.$datae.$datas.$row['efficiency'].' %'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Geschatte begin densiteit'.$datae.$datas.sprintf("%.3f",$row['est_og']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_og'])).'°P'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Geschatte eind densiteit'.$datae.$datas.sprintf("%.3f",$row['est_fg']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_fg'])).'°P'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Geschat alcohol'.$datae.$datas.sprintf("%.1f",$row['est_abv']).'% vol'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Kleur ('.$colormethod[$row['color_method']].')'.$datae.$datas.$row['est_color'].' EBC'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Bitterheid ('.$ibumethod[$row['ibu_method']].')'.$datae.$datas.$row['est_ibu'].' IBU'.$datae.$rowe.PHP_EOL;
+if ($row['divide_parts'])
+    $memo .= $rows.$datas.'Split batch (' .$splitat[$row['divide_type']].')'.$datae.$datas.($row['divide_part'] + 1)." van ".($row['divide_parts'] + 1).$datae.$rowe.PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
 $sugarsm = 0;
 $grainabsorbtion = 0;
 $mashwater = 0;
 
+$memo .= '[u][b]Vergistbare ingrediënten[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Mout, granen en suikers'.$heade.$heads.'EBC'. $heade.$heads.'Gewicht kg'.$heade.$heads.'%'.$heade.$heads.'Gebruik tijdens'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_fermentables'], true);
-echo "Mout, granen en suikers                  EBC Gewicht kg     % Gebruik tijdens" . PHP_EOL;
-echo "---------------------------------------- --- ---------- ----- ----------------" . PHP_EOL;
 foreach($arr as $item) {
-	$name = formatstr($item['f_name'] . " (" . $item['f_supplier'] . ")", 40);
+	$name = $item['f_name']." (".$item['f_supplier'].")";
 	$amount   = floatval($item['f_amount']);
 	$d = $amount * (floatval($item['f_yield']) / 100) * (1 - floatval($item['f_moisture']) / 100);
         if ($item['f_added']  == 0) {
@@ -112,18 +74,25 @@
                 $sugarsm += $d;
 		$grainabsorbtion += $item['f_amount'];
         }
-	echo sprintf("%s %3.0f %10.3f %5.1f ", $name, floatval($item['f_color']), $amount, floatval($item['f_percentage']));
-	echo $added[$item['f_added']] . PHP_EOL;
+	$pct = '';
+        if ($item['f_added']  < 4)
+                $pct = sprintf("%.1f", floatval($item['f_percentage']));
+
+	$memo .= $rows.$datas.$name.$datae.$datas.sprintf("%.0f", floatval($item['f_color'])).$datae.$datas;
+        $memo .= sprintf("%.3f", $amount).$datae.$datas.$pct.$datae.$datas;
+        $memo .= $added[$item['f_added']].$datae.$rowe .PHP_EOL;
 }
 $preboil_sg = estimate_sg($sugarsm, floatval($row['boil_size']));
-echo PHP_EOL . PHP_EOL;
-
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
-echo "Hop                                      Vorm       &alpha; %   IBU   Gram Toevoegen moment" . PHP_EOL;
-echo "---------------------------------------- -------- ----- ----- ------ --------------------" . PHP_EOL;
+$memo .= '[u][b]Hop[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Hop'.$heade.$heads.'Vorm'.$heade.$heads.'Alpha'.$heade.$heads.'IBU'.$heade.$heads.'Gram'.$heade.$heads.'Toevoegen moment'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_hops'], true);
 foreach($arr as $item) {
-	$name   = formatstr($item['h_name'] . " (" . $item['h_origin'] . ")", 40);
+	$name   = $item['h_name']." (".$item['h_origin'].")";
 	$amount = floatval($item['h_amount']) * 1000;
 	$time   = floatval($item['h_time']);
         $alpha  = floatval($item['h_alpha']);
@@ -136,17 +105,18 @@
 		$moment = $hopuse[$item['h_useat']].' '.sprintf("%.0f", $time / 1440).' dagen';
         }
 
-	echo sprintf("%s %-8s %5.1f %5.1f %6.1f %-20s", $name, $hopform[$item['h_form']], $alpha, $ibu, $amount, $moment);
-	echo PHP_EOL;
+	$memo .= $rows.$datas.$name.$datae.$datas.$hopform[$item['h_form']].$datae.$datas.sprintf("%.1f", $alpha).'%'.$datae.$datas;
+        $memo .= sprintf("%.1f", $ibu).$datae.$datas.sprintf("%.1f", $amount).$datae.$datas.$moment.$datae.$rowe.PHP_EOL;
 }
-echo PHP_EOL . PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
-echo "Specerij, kruid, brouwzout etc Type grondstof  Gebruik tijdens          Hoeveel" . PHP_EOL;
-echo "------------------------------ --------------- -------------------- -----------" . PHP_EOL;
+$memo .= '[u][b]Diversen[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Specerij, kruid, brouwzout'.$heade.$heads.'Type grondstof'.$heade.$heads.'Gebruik tijdens'.$heade.$heads.'Hoeveel'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_miscs'], true);
 foreach($arr as $item) {
-	$amount  = floatval($item['m_amount']) * 1000;
-	$aiw     = $item['m_amount_is_weight'];
 	$use_use = $item['m_use_use'];
 	$time    = floatval($item['m_time']);
 
@@ -154,18 +124,21 @@
         	$gebruik = sprintf("%s %d min",$miscuse[$use_use],$time);
         else
         	$gebruik = $miscuse[$use_use];
-	$hoeveel = sprintf("%.2f %s",$amount,$aiw ? "gr":"ml");
+	$hoeveel = sprintf("%.2f %s",floatval($item['m_amount']) * 1000,$item['m_amount_is_weight'] ? "gr":"ml");
 
-	echo sprintf("%s %-15s %-20s %11s", formatstr($item['m_name'], 30), $misctype[$item['m_type']], $gebruik, $hoeveel) . PHP_EOL;
+	$memo .= $rows.$datas.$item['m_name'].$datae.$datas.$misctype[$item['m_type']].$datae.$datas;
+        $memo .= $gebruik.$datae.$datas.$hoeveel.$datae.$rowe.PHP_EOL;
 }
-echo PHP_EOL . PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
 
-echo "Gistlab en code      Omschrijving                   Gebruik      Vorm            Hoeveel" . PHP_EOL;
-echo "-------------------- ------------------------------ ------------ ------------ ----------" . PHP_EOL;
+$memo .= '[u][b]Gist[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Gistlab en code'.$heade.$heads.'Omschrijving'.$heade.$heads.'Gebruik'.$heade.$heads.'Vorm'.$heade.$heads.'Hoeveel'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_yeasts'], true);
 foreach($arr as $item) {
-	$name    = formatstr($item['y_name'], 30);
-	$product = formatstr($item['y_laboratory']." ".$item['y_product_id'], 20);
+	$product = $item['y_laboratory']." ".$item['y_product_id'];
 
 	if ($item['y_form'] == 0)       // Liquid
                 $amount = sprintf("%.0f",floatval($item['y_amount']))." pak";
@@ -174,8 +147,10 @@
         else
                 $amount = sprintf("%.0f",floatval($item['y_amount'])*1000)." ml";
 
-	echo sprintf("%s %s %-12s %-12s %10s", $product, $name, $yeastuse[$item['y_use']], $yeastform[$item['y_form']], $amount) . PHP_EOL;
+	$memo .= $rows.$datas.$product.$datae.$datas.$item['y_name'].$datae.$datas.$yeastuse[$item['y_use']].$datae.$datas;
+        $memo .= $yeastform[$item['y_form']].$datae.$datas.$amount.$datae.$rowe.PHP_EOL;
 }
+$memo .= $tabue.PHP_EOL;
 if ($row['starter_enable'] && $row['prop1_volume']) {
 	$sv = 0;
 	for ($i = 1; $i < 5; $i++) {
@@ -184,45 +159,69 @@
 			$sv = floatval($row[$pv]);
 		}
 	}
-	echo PHP_EOL . "Maak een giststarter van " . sprintf("%.1f", $sv) . " liter." . PHP_EOL;
+	$memo .= "Maak een giststarter van ".sprintf("%.1f", $sv)." liter.".PHP_EOL;
 }
-echo PHP_EOL . PHP_EOL;
+$memo .= PHP_EOL;
 
 if ($row['w1_name'])
 	$mashwater += floatval($row['w1_amount']);
 if ($row['w2_name'])
 	$mashwater += floatval($row['w2_amount']);
 
-echo "Maisch stap          stap type              stap temp    rusten  opwarmen" . PHP_EOL;
-echo "-------------------- ---------------------- --------- --------- ---------" . PHP_EOL;
+$memo .= '[u][b]Maischschema[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Maisch stap'.$heade.$heads.'Stap type'.$heade.$heads.'Temperatuur'.$heade.$heads.'Rust tijd'.$heade.$heads.'Opwarmen tijd'.$heade.PHP_EOL;
+
 $arr = json_decode($row['json_mashs'], true);
 foreach($arr as $item) {
 	
 	if ($item['step_type'] == 1) {
-		$stype = formatstr($mashtype[$item['step_type']], 22);
+		$stype = $mashtype[$item['step_type']];
 	} else {
-		$stype = formatstr($mashtype[$item['step_type']].' '.sprintf("%.1f", $item['step_infuse_amount']).' liter', 22);
+		$stype = $mashtype[$item['step_type']].' '.sprintf("%.1f", $item['step_infuse_amount']).' liter';
 	}
-	echo sprintf("%s %s %s %s %s", 
-		formatstr($item['step_name'], 20), $stype, sprintf("%6.1f &deg;C", $item['step_temp']),
-		sprintf("%4.0f min.", $item['step_time']), sprintf("%4.0f min.", $item['ramp_time'])) . PHP_EOL;
+	$memo .= $rows.$datas.$item['step_name'].$datae.$datas.$stype.$datae.$datas.sprintf("%.1f °C", $item['step_temp']);
+        $memo .= $datae.$datas.sprintf("%.0f min.", $item['step_time']).$datae.$datas.sprintf("%.0f min.", $item['ramp_time']);
+        $memo .= $datae.$rowe.PHP_EOL;
 }
-echo PHP_EOL;
+$memo .= $tabue.PHP_EOL;
+$memo .= PHP_EOL;
+
+$memo .= '[u][b]Brouwwater[/b][/u]'.PHP_EOL;
+$memo .= $tabus.PHP_EOL;
+$memo .= $heads.'Omschrijving'.$heade.$heads.'Waarde'.$heade.PHP_EOL;
+
 if ($row['w1_name'] && $row['w2_name']) {
-	itemline("Maischwater 1", sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']);
-	itemline("Maischwater 2", sprintf("%.1f",floatval($row['w2_amount'])).' liter water '.$row['w2_name']);
+        $memo .= $rows.$datas.'Maischwater 1'.$datae.$datas.sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name'].$datae.$rowe.PHP_EOL;
+        $memo .= $rows.$datas.'Maischwater 2'.$datae.$datas.sprintf("%.1f",floatval($row['w2_amount'])).' liter water '.$row['w2_name'].$datae.$rowe.PHP_EOL;
 } else {
-	itemline("Maischwater", sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']);
+        $memo .= $rows.$datas.'Maischwater'.$datae.$datas.sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name'].$datae.$rowe.PHP_EOL;
 }
-itemline("Maischwater aanzuren tot pH", $row['mash_ph'].' pH');
+$memo .= $rows.$datas.'Maischwater aanzuren tot pH'.$datae.$datas.$row['mash_ph'].' pH'.$datae.$rowe.PHP_EOL;
 $spoelw = ($row['boil_size'] - $mashwater + $grainabsorbtion + $row['eq_lauter_deadspace']) * 1.03;     // A small heat correction
-itemline("Spoelwater geschat", sprintf("%.1f", $spoelw)." liter");
-itemline("Spoelwater temperatuur", $row['sparge_temp'].' &deg;C');
-itemline("Spoelwater aanzuren tot pH", sprintf("%.1f",$row['sparge_ph']).' pH');
-echo PHP_EOL . PHP_EOL;
+$memo .= $rows.$datas.'Spoelwater geschat'.$datae.$datas.sprintf("%.1f",$spoelw)." liter".$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Spoelwater temperatuur'.$datae.$datas.$row['sparge_temp'].' °C'.$datae.$rowe.PHP_EOL;
+$memo .= $rows.$datas.'Spoelwater aanzuren tot pH'.$datae.$datas.sprintf("%.1f",$row['sparge_ph']).' pH'.$datae.$rowe.PHP_EOL;
+$memo .= $tabue.PHP_EOL;
 
-
+page_header('Recept naar forum', 'rec_forum');
 ?>
-  </pre>
- </body>
-</html>
+   <script>
+    // json_encode() seems to do the right thing.
+    var forumstr = <?= json_encode($memo) ?>;
+   </script>
+   <div id="MainPanel">
+    <div class="section">
+     <div style="overflow: hidden; margin: 25px;"><br>
+      <p>Het recept met alle gegevens staan gereed.</p>
+      <p>Zodra je de "Klembord" toets gebruikt zullen deze gegevens naar het klembord gekopieerd<br>
+      worden. In het scherm van het forum kun je deze gegevens vervolgens "plakken".</p>
+      <p>Na het drukken van de toets wordt dit scherm gesloten.</p>
+      <p><input type="button" value="Klembord" id="copytoClipboard" /></p>
+     </div>
+    </div>
+   </div>
+
+<?php
+page_footer();
+?>

mercurial