Tue, 04 Jun 2019 19:50:06 +0200
Added console logging in the grid write callback functions. Removed grid sorting, it is done on the server side. Alert popup for block row edit functions. Better grid live updates. In recipe and product print show the whirlpool time. The checklist now shows misc ingredients added in the mash. Show hops added in the whirlpool. Most ingredient names are now quoted.
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); |