Sun, 10 Feb 2019 16:14:48 +0100
Fixed estimate_fg formula. Estimate neede sparge water displayed on the brewday tab. Moved calcSVG, calcFG and calcABV functions into calcFermentables. Calc FG now uses mash data if available. Show estimated fg on the fermentation tab. Cosmetic changes on the brewday 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'); | |
609 | header('Content-Disposition: attachment; filename="' . $row['name'] . '.xml"'); | |
610 | header('Content-Transfer-Encoding: binary'); | |
611 | header('Expires: 0'); | |
612 | header('Pragma: no-cache'); | |
613 | header('Content-Length: '.strlen($beerxml)); | |
614 | exit($beerxml); |