Sat, 23 Feb 2019 19:55:42 +0100
ABV calculation uses Daniels method. sg_to_plato and plato_to_sg functions use brewersfriend calculation. Added sg_to_brix and brix_to_sg functions. Make brewdate tab read only when the primary fermentation is ready. Brix aid input functions for primary end sg and final sg fields. Added tooltips on the fermentation tab. Changes in the layout of the fermentation tab.
177 | 1 | <?php |
2 | require_once('config.php'); | |
3 | require_once('includes/formulas.php'); | |
4 | //require_once($_SERVER['DOCUMENT_ROOT'].'/config.php'); | |
5 | //require_once($_SERVER['DOCUMENT_ROOT'].'/includes/formulas.php'); | |
6 | ||
7 | ||
8 | $link = mysqli_connect(DBASE_HOST,DBASE_USER,DBASE_PASS,DBASE_NAME); | |
9 | if (! $link) { | |
10 | die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); | |
11 | } | |
12 | if (! mysqli_set_charset($link, "utf8" )) { | |
13 | echo "error"; | |
14 | return 1; | |
15 | } | |
16 | ||
17 | //setlocale ( LC_ALL, 'nl_NL.UTF-8'); | |
18 | if (isset($_GET["record"])) | |
19 | $record = $_GET["record"]; | |
20 | else | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
21 | $record = 78; |
177 | 22 | $result = mysqli_query($link, "SELECT * FROM products WHERE record='".$record."'"); |
23 | $row = mysqli_fetch_array($result); | |
24 | ||
25 | ||
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
26 | $recipetype = array( 'Extract', 'Partial Mash', 'All Grain' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
27 | $styletype = array( 'Lager', 'Ale', 'Mead', 'Wheat', 'Mixed', 'Cider' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
28 | $hoptype = array( 'Bittering', 'Aroma', 'Both' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
29 | $hopform = array( 'Pellet', 'Plug', 'Leaf' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
30 | $hopuse = array( 'Mash', 'First wort', 'Boil', 'Aroma', 'Whirlpool', 'Dry hop' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
31 | $fermentabletype = array( 'Grain', 'Sugar', 'Extract', 'Dry extract', 'Adjunct' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
32 | $graintype = array( 'Base', 'Roast', 'Crystal', 'Kilned', 'Sour malt', 'Special', 'No malt' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
33 | $yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
34 | $yeastform = array( 'Liquid', 'Dry', 'Slant', 'Culture', 'Frozen', 'Bottle' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
35 | $yeastuse = array( 'Primary', 'Secondary', 'Tertiary', 'Bottle' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
36 | $misctype = array( 'Spice', 'Herb', 'Flavor', 'Fining', 'Water agent', 'Yeast nutrient', 'Other' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
37 | $miscuse = array( 'Starter', 'Mash', 'Boil', 'Primary', 'Secondary', 'Bottling' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
38 | $mashsteptype = array( 'Infusion', 'Temperature', 'Decoction' ); |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
39 | |
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
40 | |
177 | 41 | |
42 | /* | |
43 | * Create beerxml output | |
44 | */ | |
45 | $xw = xmlwriter_open_memory(); | |
46 | xmlwriter_set_indent($xw, 1); | |
47 | $res = xmlwriter_set_indent_string($xw, ' '); | |
48 | ||
49 | xmlwriter_start_document($xw, '1.0', 'UTF-8'); | |
50 | ||
51 | xmlwriter_start_element($xw, 'RECIPES'); | |
52 | xmlwriter_start_element($xw, 'RECIPE'); | |
53 | ||
54 | // Recipe basics | |
55 | xmlwriter_start_element($xw, 'VERSION'); | |
56 | xmlwriter_text($xw, '1'); | |
57 | xmlwriter_end_element($xw); | |
58 | ||
59 | xmlwriter_start_element($xw, 'NAME'); | |
60 | xmlwriter_text($xw, $row['name']); | |
61 | xmlwriter_end_element($xw); | |
62 | ||
63 | xmlwriter_start_element($xw, 'NOTES'); | |
64 | xmlwriter_text($xw, $row['notes']); | |
65 | xmlwriter_end_element($xw); | |
66 | ||
67 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
68 | xmlwriter_text($xw, $recipetype[$row['type']]); |
177 | 69 | xmlwriter_end_element($xw); |
70 | ||
71 | xmlwriter_start_element($xw, 'BREWER'); | |
72 | xmlwriter_text($xw, 'Anonymous'); | |
73 | xmlwriter_end_element($xw); | |
74 | ||
75 | xmlwriter_start_element($xw, 'BATCH_SIZE'); | |
76 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['batch_size']))); | |
77 | xmlwriter_end_element($xw); | |
78 | ||
79 | xmlwriter_start_element($xw, 'BOIL_SIZE'); | |
80 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['boil_size']))); | |
81 | xmlwriter_end_element($xw); | |
82 | ||
83 | xmlwriter_start_element($xw, 'BOIL_TIME'); | |
84 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['boil_time']))); | |
85 | xmlwriter_end_element($xw); | |
86 | ||
87 | xmlwriter_start_element($xw, 'EFFICIENCY'); | |
88 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['efficiency']))); | |
89 | xmlwriter_end_element($xw); | |
90 | ||
91 | xmlwriter_start_element($xw, 'OG'); | |
92 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['og']))); | |
93 | xmlwriter_end_element($xw); | |
94 | ||
95 | xmlwriter_start_element($xw, 'FG'); | |
96 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['fg']))); | |
97 | xmlwriter_end_element($xw); | |
98 | ||
99 | // Style | |
100 | xmlwriter_start_element($xw, 'STYLE'); | |
101 | ||
102 | xmlwriter_start_element($xw, 'VERSION'); | |
103 | xmlwriter_text($xw, '1'); | |
104 | xmlwriter_end_element($xw); | |
105 | ||
106 | xmlwriter_start_element($xw, 'NAME'); | |
107 | xmlwriter_text($xw, $row['st_name']); | |
108 | xmlwriter_end_element($xw); | |
109 | ||
110 | xmlwriter_start_element($xw, 'CATEGORY'); | |
111 | xmlwriter_text($xw, $row['st_category']); | |
112 | xmlwriter_end_element($xw); | |
113 | ||
114 | xmlwriter_start_element($xw, 'CATEGORY_NUMBER'); | |
115 | xmlwriter_text($xw, $row['st_category_number']); | |
116 | xmlwriter_end_element($xw); | |
117 | ||
118 | xmlwriter_start_element($xw, 'STYLE_LETTER'); | |
119 | xmlwriter_text($xw, $row['st_letter']); | |
120 | xmlwriter_end_element($xw); | |
121 | ||
122 | xmlwriter_start_element($xw, 'STYLE_GUIDE'); | |
123 | xmlwriter_text($xw, $row['st_guide']); | |
124 | xmlwriter_end_element($xw); | |
125 | ||
126 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
127 | xmlwriter_text($xw, $styletype[$row['st_type']]); |
177 | 128 | xmlwriter_end_element($xw); |
129 | ||
130 | xmlwriter_start_element($xw, 'OG_MIN'); | |
131 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_og_min']))); | |
132 | xmlwriter_end_element($xw); | |
133 | ||
134 | xmlwriter_start_element($xw, 'OG_MAX'); | |
135 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_og_max']))); | |
136 | xmlwriter_end_element($xw); | |
137 | ||
138 | xmlwriter_start_element($xw, 'FG_MIN'); | |
139 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_og_min']))); | |
140 | xmlwriter_end_element($xw); | |
141 | ||
142 | xmlwriter_start_element($xw, 'OG_MAX'); | |
143 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_fg_max']))); | |
144 | xmlwriter_end_element($xw); | |
145 | ||
146 | xmlwriter_start_element($xw, 'IBU_MIN'); | |
147 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['st_ibu_min']))); | |
148 | xmlwriter_end_element($xw); | |
149 | ||
150 | xmlwriter_start_element($xw, 'IBU_MAX'); | |
151 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['st_ibu_max']))); | |
152 | xmlwriter_end_element($xw); | |
153 | ||
154 | xmlwriter_start_element($xw, 'COLOR_MIN'); | |
155 | xmlwriter_text($xw, sprintf("%.2f",ebc_to_srm(floatval($row['st_color_min'])))); | |
156 | xmlwriter_end_element($xw); | |
157 | ||
158 | xmlwriter_start_element($xw, 'COLOR_MAX'); | |
159 | xmlwriter_text($xw, sprintf("%.2f",ebc_to_srm(floatval($row['st_color_max'])))); | |
160 | xmlwriter_end_element($xw); | |
161 | ||
162 | xmlwriter_start_element($xw, 'CARB_MIN'); | |
163 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_carb_min']))); | |
164 | xmlwriter_end_element($xw); | |
165 | ||
166 | xmlwriter_start_element($xw, 'CARB_MAX'); | |
167 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_carb_max']))); | |
168 | xmlwriter_end_element($xw); | |
169 | ||
170 | xmlwriter_start_element($xw, 'ABV_MIN'); | |
171 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_abv_min']))); | |
172 | xmlwriter_end_element($xw); | |
173 | ||
174 | xmlwriter_start_element($xw, 'ABV_MAX'); | |
175 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_abv_max']))); | |
176 | xmlwriter_end_element($xw); | |
177 | ||
178 | xmlwriter_end_element($xw); // STYLE | |
179 | ||
180 | xmlwriter_start_element($xw, 'EQUIPMENT'); | |
181 | ||
182 | xmlwriter_start_element($xw, 'VERSION'); | |
183 | xmlwriter_text($xw, '1'); | |
184 | xmlwriter_end_element($xw); | |
185 | ||
186 | xmlwriter_start_element($xw, 'NAME'); | |
187 | xmlwriter_text($xw, $row['eq_name']); | |
188 | xmlwriter_end_element($xw); | |
189 | ||
190 | xmlwriter_start_element($xw, 'NOTES'); | |
191 | xmlwriter_text($xw, $row['eq_notes']); | |
192 | xmlwriter_end_element($xw); | |
193 | ||
194 | xmlwriter_start_element($xw, 'BATCH_SIZE'); | |
195 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['eq_batch_size']))); | |
196 | xmlwriter_end_element($xw); | |
197 | ||
198 | xmlwriter_start_element($xw, 'BOIL_SIZE'); | |
199 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['eq_boil_size']))); | |
200 | xmlwriter_end_element($xw); | |
201 | ||
202 | xmlwriter_start_element($xw, 'BOIL_TIME'); | |
203 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['eq_boil_time']))); | |
204 | xmlwriter_end_element($xw); | |
205 | ||
206 | xmlwriter_end_element($xw); // EQUIPMENT | |
207 | ||
208 | xmlwriter_start_element($xw, 'HOPS'); | |
209 | $arr = json_decode($row['json_hops'], true); | |
210 | foreach($arr as $item) { //foreach element in $arr | |
211 | ||
212 | xmlwriter_start_element($xw, 'HOP'); | |
213 | ||
214 | xmlwriter_start_element($xw, 'VERSION'); | |
215 | xmlwriter_text($xw, '1'); | |
216 | xmlwriter_end_element($xw); | |
217 | ||
218 | xmlwriter_start_element($xw, 'NAME'); | |
219 | xmlwriter_text($xw, $item['h_name']); | |
220 | xmlwriter_end_element($xw); | |
221 | ||
222 | xmlwriter_start_element($xw, 'ALPHA'); | |
223 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_alpha']))); | |
224 | xmlwriter_end_element($xw); | |
225 | ||
226 | xmlwriter_start_element($xw, 'AMOUNT'); | |
227 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['h_amount']))); | |
228 | xmlwriter_end_element($xw); | |
229 | ||
230 | xmlwriter_start_element($xw, 'USE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
231 | xmlwriter_text($xw, $hopuse[$item['h_useat']]); |
177 | 232 | xmlwriter_end_element($xw); |
233 | ||
234 | xmlwriter_start_element($xw, 'TIME'); | |
235 | xmlwriter_text($xw, $item['h_time']); | |
236 | xmlwriter_end_element($xw); | |
237 | ||
238 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
239 | xmlwriter_text($xw, $hoptype[$item['h_type']]); |
177 | 240 | xmlwriter_end_element($xw); |
241 | ||
242 | xmlwriter_start_element($xw, 'FORM'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
243 | xmlwriter_text($xw, $hopform[$item['h_form']]); |
177 | 244 | xmlwriter_end_element($xw); |
245 | ||
246 | xmlwriter_start_element($xw, 'BETA'); | |
247 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_beta']))); | |
248 | xmlwriter_end_element($xw); | |
249 | ||
250 | xmlwriter_start_element($xw, 'HSI'); | |
251 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_hsi']))); | |
252 | xmlwriter_end_element($xw); | |
253 | ||
254 | xmlwriter_start_element($xw, 'ORIGIN'); | |
255 | xmlwriter_text($xw, $item['h_origin']); | |
256 | xmlwriter_end_element($xw); | |
257 | ||
258 | xmlwriter_end_element($xw); // HOP | |
259 | } | |
260 | xmlwriter_end_element($xw); // HOPS | |
261 | ||
262 | xmlwriter_start_element($xw, 'FERMENTABLES'); | |
263 | $arr = json_decode($row['json_fermentables'], true); | |
264 | foreach($arr as $item) { //foreach element in $arr | |
265 | xmlwriter_start_element($xw, 'FERMENTABLE'); | |
266 | ||
267 | xmlwriter_start_element($xw, 'VERSION'); | |
268 | xmlwriter_text($xw, '1'); | |
269 | xmlwriter_end_element($xw); | |
270 | ||
271 | xmlwriter_start_element($xw, 'NAME'); | |
272 | xmlwriter_text($xw, $item['f_name']); | |
273 | xmlwriter_end_element($xw); | |
274 | ||
275 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
276 | xmlwriter_text($xw, $fermentabletype[$item['f_type']]); |
177 | 277 | xmlwriter_end_element($xw); |
278 | ||
279 | xmlwriter_start_element($xw, 'AMOUNT'); | |
280 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_amount']))); | |
281 | xmlwriter_end_element($xw); | |
282 | ||
283 | xmlwriter_start_element($xw, 'YIELD'); | |
284 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['f_yield']))); | |
285 | xmlwriter_end_element($xw); | |
286 | ||
287 | xmlwriter_start_element($xw, 'COLOR'); | |
288 | xmlwriter_text($xw, sprintf("%.1f",ebc_to_srm(floatval($item['f_color'])))); | |
289 | xmlwriter_end_element($xw); | |
290 | ||
291 | xmlwriter_start_element($xw, 'ADD_AFTER_BOIL'); | |
292 | ($item['f_add_after_boil']) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); | |
293 | xmlwriter_end_element($xw); | |
294 | ||
295 | xmlwriter_start_element($xw, 'ORIGIN'); | |
296 | xmlwriter_text($xw, $item['f_origin']); | |
297 | xmlwriter_end_element($xw); | |
298 | ||
299 | xmlwriter_start_element($xw, 'SUPPLIER'); | |
300 | xmlwriter_text($xw, $item['f_supplier']); | |
301 | xmlwriter_end_element($xw); | |
302 | ||
303 | if (floatval($item['f_coarse_fine_diff'])) { | |
304 | xmlwriter_start_element($xw, 'COARSE_FINE_DIFF'); | |
305 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_coarse_fine_diff']))); | |
306 | xmlwriter_end_element($xw); | |
307 | } | |
308 | ||
309 | if (floatval($item['f_moisture'])) { | |
310 | xmlwriter_start_element($xw, 'MOISTURE'); | |
311 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_moisture']))); | |
312 | xmlwriter_end_element($xw); | |
313 | } | |
314 | ||
315 | if (floatval($item['f_diastatic_power'])) { | |
316 | xmlwriter_start_element($xw, 'DIASTATIC_POWER'); | |
317 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_diastatic_power']))); | |
318 | xmlwriter_end_element($xw); | |
319 | } | |
320 | ||
321 | if (floatval($item['f_protein'])) { | |
322 | xmlwriter_start_element($xw, 'PROTEIN'); | |
323 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_protein']))); | |
324 | xmlwriter_end_element($xw); | |
325 | } | |
326 | ||
327 | if (floatval($item['f_max_in_batch'])) { | |
328 | xmlwriter_start_element($xw, 'MAX_IN_BATCH'); | |
329 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['f_max_in_batch']))); | |
330 | xmlwriter_end_element($xw); | |
331 | } | |
332 | ||
333 | xmlwriter_start_element($xw, 'RECOMMEND_MASH'); | |
334 | ($item['f_recommend_mash']) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); | |
335 | xmlwriter_end_element($xw); | |
336 | ||
337 | xmlwriter_start_element($xw, 'GRAINTYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
338 | xmlwriter_text($xw, $graintype[$item['f_graintype']]); |
177 | 339 | xmlwriter_end_element($xw); |
340 | ||
341 | xmlwriter_end_element($xw); // FERMENTABLE | |
342 | } | |
343 | xmlwriter_end_element($xw); // FERMENTABLES | |
344 | ||
345 | xmlwriter_start_element($xw, 'MISCS'); | |
346 | $arr = json_decode($row['json_miscs'], true); | |
347 | foreach($arr as $item) { | |
348 | ||
349 | xmlwriter_start_element($xw, 'MISC'); | |
350 | ||
351 | xmlwriter_start_element($xw, 'VERSION'); | |
352 | xmlwriter_text($xw, '1'); | |
353 | xmlwriter_end_element($xw); | |
354 | ||
355 | xmlwriter_start_element($xw, 'NAME'); | |
356 | xmlwriter_text($xw, $item['m_name']); | |
357 | xmlwriter_end_element($xw); | |
358 | ||
359 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
360 | xmlwriter_text($xw, $misctype[$item['m_type']]); |
177 | 361 | xmlwriter_end_element($xw); |
362 | ||
363 | xmlwriter_start_element($xw, 'AMOUNT'); | |
364 | xmlwriter_text($xw, sprintf("%.5f",floatval($item['m_amount']))); | |
365 | xmlwriter_end_element($xw); | |
366 | ||
367 | xmlwriter_start_element($xw, 'AMOUNT_IS_WEIGHT'); | |
368 | ($item['m_amount_is_weight']) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); | |
369 | xmlwriter_end_element($xw); | |
370 | ||
371 | xmlwriter_start_element($xw, 'USE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
372 | xmlwriter_text($xw, $miscuse[$item['m_use_use']]); |
177 | 373 | xmlwriter_end_element($xw); |
374 | ||
375 | xmlwriter_start_element($xw, 'TIME'); | |
376 | xmlwriter_text($xw, sprintf("%.0f",floatval($item['m_time']))); | |
377 | xmlwriter_end_element($xw); | |
378 | ||
379 | xmlwriter_end_element($xw); // MISC | |
380 | } | |
381 | xmlwriter_end_element($xw); // MISCS | |
382 | ||
383 | xmlwriter_start_element($xw, 'YEASTS'); | |
384 | $arr = json_decode($row['json_yeasts'], true); | |
385 | foreach($arr as $item) { //foreach element in $arr | |
386 | ||
387 | xmlwriter_start_element($xw, 'YEAST'); | |
388 | ||
389 | xmlwriter_start_element($xw, 'VERSION'); | |
390 | xmlwriter_text($xw, '1'); | |
391 | xmlwriter_end_element($xw); | |
392 | ||
393 | xmlwriter_start_element($xw, 'NAME'); | |
394 | xmlwriter_text($xw, $item['y_name']); | |
395 | xmlwriter_end_element($xw); | |
396 | ||
397 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
398 | xmlwriter_text($xw, $yeasttype[$item['y_type']]); |
177 | 399 | xmlwriter_end_element($xw); |
400 | ||
401 | xmlwriter_start_element($xw, 'FORM'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
402 | xmlwriter_text($xw, $yeastform[$item['y_form']]); |
177 | 403 | xmlwriter_end_element($xw); |
404 | ||
405 | xmlwriter_start_element($xw, 'AMOUNT'); | |
406 | xmlwriter_text($xw, sprintf("%.5f",floatval($item['y_amount']))); | |
407 | xmlwriter_end_element($xw); | |
408 | ||
409 | xmlwriter_start_element($xw, 'AMOUNT_IS_WEIGHT'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
410 | ($item['y_form'] == 1) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
177 | 411 | xmlwriter_end_element($xw); |
412 | ||
413 | xmlwriter_start_element($xw, 'LABORATORY'); | |
414 | xmlwriter_text($xw, $item['y_laboratory']); | |
415 | xmlwriter_end_element($xw); | |
416 | ||
417 | xmlwriter_start_element($xw, 'PRODUCT_ID'); | |
418 | xmlwriter_text($xw, $item['y_product_id']); | |
419 | xmlwriter_end_element($xw); | |
420 | ||
421 | xmlwriter_start_element($xw, 'MIN_TEMPERATURE'); | |
422 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['y_min_temperature']))); | |
423 | xmlwriter_end_element($xw); | |
424 | ||
425 | xmlwriter_start_element($xw, 'MAX_TEMPERATURE'); | |
426 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['y_max_temperature']))); | |
427 | xmlwriter_end_element($xw); | |
428 | ||
429 | xmlwriter_start_element($xw, 'ATTENUATION'); | |
430 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['y_attenuation']))); | |
431 | xmlwriter_end_element($xw); | |
432 | ||
433 | xmlwriter_start_element($xw, 'ADD_TO_SECONDARY'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
434 | ($item['y_use'] == 0) ? xmlwriter_text($xw, 'FALSE') : xmlwriter_text($xw, 'TRUE'); |
177 | 435 | xmlwriter_end_element($xw); |
436 | ||
437 | xmlwriter_end_element($xw); // YEAST | |
438 | } | |
439 | xmlwriter_end_element($xw); // YEASTS | |
440 | ||
441 | xmlwriter_start_element($xw, 'WATERS'); | |
442 | xmlwriter_start_element($xw, 'WATER'); // Source 1 | |
443 | ||
444 | xmlwriter_start_element($xw, 'VERSION'); | |
445 | xmlwriter_text($xw, '1'); | |
446 | xmlwriter_end_element($xw); | |
447 | ||
448 | xmlwriter_start_element($xw, 'NAME'); | |
449 | xmlwriter_text($xw, $row['w1_name']); | |
450 | xmlwriter_end_element($xw); | |
451 | ||
452 | xmlwriter_start_element($xw, 'AMOUNT'); | |
453 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_amount']))); | |
454 | xmlwriter_end_element($xw); | |
455 | ||
456 | xmlwriter_start_element($xw, 'CALCIUM'); | |
457 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_calcium']))); | |
458 | xmlwriter_end_element($xw); | |
459 | ||
460 | xmlwriter_start_element($xw, 'BICARBONATE'); | |
461 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_total_alkalinity']) * 1.22)); | |
462 | xmlwriter_end_element($xw); | |
463 | ||
464 | xmlwriter_start_element($xw, 'SULFATE'); | |
465 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_sulfate']))); | |
466 | xmlwriter_end_element($xw); | |
467 | ||
468 | xmlwriter_start_element($xw, 'CHLORIDE'); | |
469 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_chloride']))); | |
470 | xmlwriter_end_element($xw); | |
471 | ||
472 | xmlwriter_start_element($xw, 'SODIUM'); | |
473 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_sodium']))); | |
474 | xmlwriter_end_element($xw); | |
475 | ||
476 | xmlwriter_start_element($xw, 'PH'); | |
477 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['w1_ph']))); | |
478 | xmlwriter_end_element($xw); | |
479 | ||
480 | xmlwriter_start_element($xw, 'TOTAL_ALKALINITY'); | |
481 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_total_alkalinity']))); | |
482 | xmlwriter_end_element($xw); | |
483 | ||
484 | xmlwriter_end_element($xw); // WATER | |
485 | ||
486 | if (strlen($row['w2_name'])) { | |
487 | xmlwriter_start_element($xw, 'WATER'); // Source 2 | |
488 | ||
489 | xmlwriter_start_element($xw, 'VERSION'); | |
490 | xmlwriter_text($xw, '1'); | |
491 | xmlwriter_end_element($xw); | |
492 | ||
493 | xmlwriter_start_element($xw, 'NAME'); | |
494 | xmlwriter_text($xw, $row['w2_name']); | |
495 | xmlwriter_end_element($xw); | |
496 | ||
497 | xmlwriter_start_element($xw, 'AMOUNT'); | |
498 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_amount']))); | |
499 | xmlwriter_end_element($xw); | |
500 | ||
501 | xmlwriter_start_element($xw, 'CALCIUM'); | |
502 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_calcium']))); | |
503 | xmlwriter_end_element($xw); | |
504 | ||
505 | xmlwriter_start_element($xw, 'BICARBONATE'); | |
506 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_total_alkalinity']) * 1.22)); | |
507 | xmlwriter_end_element($xw); | |
508 | ||
509 | xmlwriter_start_element($xw, 'SULFATE'); | |
510 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_sulfate']))); | |
511 | xmlwriter_end_element($xw); | |
512 | ||
513 | xmlwriter_start_element($xw, 'CHLORIDE'); | |
514 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_chloride']))); | |
515 | xmlwriter_end_element($xw); | |
516 | ||
517 | xmlwriter_start_element($xw, 'SODIUM'); | |
518 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_sodium']))); | |
519 | xmlwriter_end_element($xw); | |
520 | ||
521 | xmlwriter_start_element($xw, 'PH'); | |
522 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['w2_ph']))); | |
523 | xmlwriter_end_element($xw); | |
524 | ||
525 | xmlwriter_start_element($xw, 'TOTAL_ALKALINITY'); | |
526 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_total_alkalinity']))); | |
527 | xmlwriter_end_element($xw); | |
528 | ||
529 | xmlwriter_end_element($xw); // WATER | |
530 | } | |
531 | xmlwriter_end_element($xw); // WATERS | |
532 | ||
533 | xmlwriter_start_element($xw, 'MASH'); | |
534 | ||
535 | xmlwriter_start_element($xw, 'VERSION'); | |
536 | xmlwriter_text($xw, '1'); | |
537 | xmlwriter_end_element($xw); | |
538 | ||
539 | xmlwriter_start_element($xw, 'NAME'); | |
540 | xmlwriter_text($xw, $row['mash_name']); | |
541 | xmlwriter_end_element($xw); | |
542 | ||
543 | xmlwriter_start_element($xw, 'GRAIN_TEMP'); | |
544 | xmlwriter_text($xw, '10.0'); | |
545 | xmlwriter_end_element($xw); | |
546 | ||
547 | xmlwriter_start_element($xw, 'PH'); | |
548 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['sparge_ph']))); | |
549 | xmlwriter_end_element($xw); | |
550 | ||
551 | xmlwriter_start_element($xw, 'SPARGE_TEMP'); | |
552 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['sparge_temp']))); | |
553 | xmlwriter_end_element($xw); | |
554 | ||
555 | xmlwriter_start_element($xw, 'MASH_STEPS'); | |
556 | $arr = json_decode($row['json_mashs'], true); | |
557 | foreach($arr as $item) { //foreach element in $arr | |
558 | xmlwriter_start_element($xw, 'MASH_STEP'); | |
559 | ||
560 | xmlwriter_start_element($xw, 'VERSION'); | |
561 | xmlwriter_text($xw, '1'); | |
562 | xmlwriter_end_element($xw); | |
563 | ||
564 | xmlwriter_start_element($xw, 'NAME'); | |
565 | xmlwriter_text($xw, $item['step_name']); | |
566 | xmlwriter_end_element($xw); | |
567 | ||
568 | xmlwriter_start_element($xw, 'TYPE'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
569 | xmlwriter_text($xw, $mashsteptype[$item['step_type']]); |
177 | 570 | xmlwriter_end_element($xw); |
571 | ||
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
572 | if ($item['step_type'] == 0) { |
177 | 573 | xmlwriter_start_element($xw, 'INFUSE_AMOUNT'); |
574 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['step_infuse_amount']))); | |
575 | xmlwriter_end_element($xw); | |
576 | } | |
577 | ||
578 | xmlwriter_start_element($xw, 'STEP_TEMP'); | |
579 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['step_temp']))); | |
580 | xmlwriter_end_element($xw); | |
581 | ||
582 | xmlwriter_start_element($xw, 'STEP_TIME'); | |
583 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['step_time']))); | |
584 | xmlwriter_end_element($xw); | |
585 | ||
586 | xmlwriter_start_element($xw, 'RAMP_TIME'); | |
587 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['ramp_time']))); | |
588 | xmlwriter_end_element($xw); | |
589 | ||
590 | xmlwriter_start_element($xw, 'END_TEMP'); | |
591 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['end_temp']))); | |
592 | xmlwriter_end_element($xw); | |
593 | ||
594 | xmlwriter_start_element($xw, 'PH'); | |
595 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['mash_ph']))); | |
596 | xmlwriter_end_element($xw); | |
597 | ||
598 | xmlwriter_end_element($xw); // MASH_STEP | |
599 | } | |
600 | xmlwriter_end_element($xw); // MASH_STEPS | |
601 | xmlwriter_end_element($xw); // MASH | |
602 | xmlwriter_end_element($xw); // RECIPE | |
603 | xmlwriter_end_element($xw); // RECIPES | |
604 | xmlwriter_end_document($xw); | |
605 | ||
606 | $beerxml = xmlwriter_output_memory($xw); | |
607 | ||
608 | Header('Content-type: text/xml'); | |
272
0c2ea1c2b858
Product beerxml export filename includes beer code.
Michiel Broek <mbroek@mbse.eu>
parents:
242
diff
changeset
|
609 | header('Content-Disposition: attachment; filename="' . $row['code'] . ' ' . $row['name'] . '.xml"'); |
177 | 610 | header('Content-Transfer-Encoding: binary'); |
611 | header('Expires: 0'); | |
612 | header('Pragma: no-cache'); | |
613 | header('Content-Length: '.strlen($beerxml)); | |
614 | exit($beerxml); |