Sun, 02 Jun 2019 12:48:54 +0200
Added 15 fields to the recipes table. Added 18 fields to the products table. These are calculated values that are now stored in the database so export programs can use these values without calculating them again. Product and recipe print have water and mash schedule added. Product print has brewday results added if the brewday is over. The ingredients layout changed in the product and recipe prints.
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); |