50 |
57 |
51 xmlwriter_start_element($xw, 'RECIPES'); |
58 xmlwriter_start_element($xw, 'RECIPES'); |
52 xmlwriter_start_element($xw, 'RECIPE'); |
59 xmlwriter_start_element($xw, 'RECIPE'); |
53 |
60 |
54 // Recipe basics |
61 // Recipe basics |
55 xmlwriter_start_element($xw, 'VERSION'); |
62 field($xw, 'VERSION', '1'); |
56 xmlwriter_text($xw, '1'); |
63 field($xw, 'NAME', $row['name']); |
57 xmlwriter_end_element($xw); |
64 field($xw, 'NOTES', $row['notes']); |
58 |
65 field($xw, 'TYPE', $recipetype[$row['type']]); |
59 xmlwriter_start_element($xw, 'NAME'); |
66 field($xw, 'BREWER', 'Anonymous'); |
60 xmlwriter_text($xw, $row['name']); |
67 field($xw, 'BATCH_SIZE', sprintf("%.4f",floatval($row['batch_size']))); |
61 xmlwriter_end_element($xw); |
68 field($xw, 'BOIL_SIZE', sprintf("%.4f",floatval($row['boil_size']))); |
62 |
69 field($xw, 'BOIL_TIME', sprintf("%.3f",floatval($row['boil_time']))); |
63 xmlwriter_start_element($xw, 'NOTES'); |
70 field($xw, 'EFFICIENCY', sprintf("%.4f",floatval($row['efficiency']))); |
64 xmlwriter_text($xw, $row['notes']); |
71 field($xw, 'OG', sprintf("%.3f",floatval($row['og']))); |
65 xmlwriter_end_element($xw); |
72 field($xw, 'FG', sprintf("%.3f",floatval($row['fg']))); |
66 |
73 |
67 xmlwriter_start_element($xw, 'TYPE'); |
74 |
68 xmlwriter_text($xw, $recipetype[$row['type']]); |
75 if (floatval($row['est_og']) > 0) { |
69 xmlwriter_end_element($xw); |
76 field($xw, 'EST_OG', sprintf("%.3f",floatval($row['est_og']))); |
70 |
77 } |
71 xmlwriter_start_element($xw, 'BREWER'); |
78 |
72 xmlwriter_text($xw, 'Anonymous'); |
79 if (floatval($row['est_fg']) > 0) { |
73 xmlwriter_end_element($xw); |
80 field($xw, 'EST_FG', sprintf("%.3f",floatval($row['est_fg']))); |
74 |
81 } |
75 xmlwriter_start_element($xw, 'BATCH_SIZE'); |
82 |
76 xmlwriter_text($xw, sprintf("%.2f",floatval($row['batch_size']))); |
83 if (floatval($row['est_abv']) > 0) { |
77 xmlwriter_end_element($xw); |
84 field($xw, 'EST_ABV', sprintf("%.1f",floatval($row['est_abv']))); |
78 |
85 } |
79 xmlwriter_start_element($xw, 'BOIL_SIZE'); |
86 |
80 xmlwriter_text($xw, sprintf("%.2f",floatval($row['boil_size']))); |
87 if (floatval($row['est_color']) > 0) { |
81 xmlwriter_end_element($xw); |
88 field($xw, 'EST_COLOR', sprintf("%.6f", ebc_to_srm(floatval($row['est_color'])))); |
82 |
89 field($xw, 'COLOR_METHOD', $colormethod[$row['color_method']]); |
83 xmlwriter_start_element($xw, 'BOIL_TIME'); |
90 } |
84 xmlwriter_text($xw, sprintf("%.0f",floatval($row['boil_time']))); |
91 |
85 xmlwriter_end_element($xw); |
92 if (floatval($row['est_ibu']) > 0) { |
86 |
93 field($xw, 'EST_IBU', sprintf("%.1f",floatval($row['est_ibu']))); |
87 xmlwriter_start_element($xw, 'EFFICIENCY'); |
94 field($xw, 'IBU_METHOD', $ibumethod[$row['ibu_method']]); |
88 xmlwriter_text($xw, sprintf("%.1f",floatval($row['efficiency']))); |
95 } |
89 xmlwriter_end_element($xw); |
96 |
90 |
97 /* If product is packaged and carbonated, add fermentation data. */ |
91 xmlwriter_start_element($xw, 'OG'); |
98 if ($row['stage'] >= 8) { |
92 xmlwriter_text($xw, sprintf("%.3f",floatval($row['og']))); |
99 $d1 = new DateTime($row['brew_date_end']); |
93 xmlwriter_end_element($xw); |
100 $d2 = new DateTime($row['primary_end_date']); |
94 |
101 $d3 = new DateTime($row['secondary_end_date']); |
95 xmlwriter_start_element($xw, 'FG'); |
102 $d4 = new DateTime($row['package_date']); |
96 xmlwriter_text($xw, sprintf("%.3f",floatval($row['fg']))); |
103 $diff = $d2->diff($d1); |
97 xmlwriter_end_element($xw); |
104 $primary_days = $diff->days; |
98 |
105 $diff = $d3->diff($d2); |
99 if ($row['brew_cooling_to'] > 0) { |
106 $secondary_days = $diff->days; |
100 xmlwriter_start_element($xw, 'BMS_COOLING_TO'); |
107 $diff = $d4->diff($d3); |
101 xmlwriter_text($xw, sprintf("%.1f",floatval($row['brew_cooling_to']))); |
108 $tertiary_days = $diff->days; |
102 xmlwriter_end_element($xw); |
109 field($xw, 'FERMENTATION_STAGES', '3'); |
103 } |
110 field($xw, 'PRIMARY_AGE', sprintf("%.1f", $primary_days)); |
104 |
111 field($xw, 'PRIMARY_TEMP', sprintf("%.1f", $row['primary_max_temp'])); |
105 if ($row['brew_whirlpool9'] > 0) { |
112 field($xw, 'SECONDARY_AGE', sprintf("%.1f", $secondary_days)); |
106 xmlwriter_start_element($xw, 'BMS_WHIRLPOOL9'); |
113 field($xw, 'SECONDARY_TEMP', sprintf("%.1f", $row['secondary_temp'])); |
107 xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool9']))); |
114 field($xw, 'TERTIARY_AGE', sprintf("%.1f", $tertiary_days)); |
108 xmlwriter_end_element($xw); |
115 field($xw, 'TERTIARY_TEMP', sprintf("%.1f", $row['tertiary_temp'])); |
109 } |
116 field($xw, 'CARBONATION', sprintf("%.1f", $row['bottle_carbonation'])); |
110 if ($row['brew_whirlpool7'] > 0) { |
117 field($xw, 'FORCED_CARBONATION', 'FALSE'); |
111 xmlwriter_start_element($xw, 'BMS_WHIRLPOOL7'); |
118 field($xw, 'CARBONATION_TEMP', sprintf("%.1f", $row['bottle_carbonation_temp'])); |
112 xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool7']))); |
119 } |
113 xmlwriter_end_element($xw); |
120 |
114 } |
121 if ($row['brew_cooling_to'] > 0) |
115 if ($row['brew_whirlpool6'] > 0) { |
122 field($xw, 'BMS_COOLING_TO', sprintf("%.1f",floatval($row['brew_cooling_to']))); |
116 xmlwriter_start_element($xw, 'BMS_WHIRLPOOL6'); |
123 |
117 xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool6']))); |
124 if ($row['brew_whirlpool9'] > 0) |
118 xmlwriter_end_element($xw); |
125 field($xw, 'BMS_WHIRLPOOL9', sprintf("%.0f",floatval($row['brew_whirlpool9']))); |
119 } |
126 if ($row['brew_whirlpool7'] > 0) |
120 if ($row['brew_whirlpool2'] > 0) { |
127 field($xw, 'BMS_WHIRLPOOL7', sprintf("%.0f",floatval($row['brew_whirlpool7']))); |
121 xmlwriter_start_element($xw, 'BMS_WHIRLPOOL2'); |
128 if ($row['brew_whirlpool6'] > 0) |
122 xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool2']))); |
129 field($xw, 'BMS_WHIRLPOOL6', sprintf("%.0f",floatval($row['brew_whirlpool6']))); |
123 xmlwriter_end_element($xw); |
130 if ($row['brew_whirlpool2'] > 0) |
124 } |
131 field($xw, 'BMS_WHIRLPOOL2', sprintf("%.0f",floatval($row['brew_whirlpool2']))); |
125 |
132 |
126 |
133 |
127 // Style |
134 // Style |
128 xmlwriter_start_element($xw, 'STYLE'); |
135 xmlwriter_start_element($xw, 'STYLE'); |
129 |
136 field($xw, 'VERSION', '1'); |
130 xmlwriter_start_element($xw, 'VERSION'); |
137 field($xw, 'NAME', $row['st_name']); |
131 xmlwriter_text($xw, '1'); |
138 field($xw, 'CATEGORY', $row['st_category']); |
132 xmlwriter_end_element($xw); |
139 field($xw, 'CATEGORY_NUMBER', $row['st_category_number']); |
133 |
140 field($xw, 'STYLE_LETTER', $row['st_letter']); |
134 xmlwriter_start_element($xw, 'NAME'); |
141 field($xw, 'STYLE_GUIDE', $row['st_guide']); |
135 xmlwriter_text($xw, $row['st_name']); |
142 field($xw, 'TYPE', $styletype[$row['st_type']]); |
136 xmlwriter_end_element($xw); |
143 field($xw, 'OG_MIN', sprintf("%.3f",floatval($row['st_og_min']))); |
137 |
144 field($xw, 'OG_MAX', sprintf("%.3f",floatval($row['st_og_max']))); |
138 xmlwriter_start_element($xw, 'CATEGORY'); |
145 field($xw, 'FG_MIN', sprintf("%.3f",floatval($row['st_fg_min']))); |
139 xmlwriter_text($xw, $row['st_category']); |
146 field($xw, 'FG_MAX', sprintf("%.3f",floatval($row['st_fg_max']))); |
140 xmlwriter_end_element($xw); |
147 field($xw, 'IBU_MIN', sprintf("%.0f",floatval($row['st_ibu_min']))); |
141 |
148 field($xw, 'IBU_MAX', sprintf("%.0f",floatval($row['st_ibu_max']))); |
142 xmlwriter_start_element($xw, 'CATEGORY_NUMBER'); |
149 field($xw, 'COLOR_MIN', sprintf("%.2f",ebc_to_srm(floatval($row['st_color_min'])))); |
143 xmlwriter_text($xw, $row['st_category_number']); |
150 field($xw, 'COLOR_MAX', sprintf("%.2f",ebc_to_srm(floatval($row['st_color_max'])))); |
144 xmlwriter_end_element($xw); |
151 field($xw, 'CARB_MIN', sprintf("%.1f",floatval($row['st_carb_min']))); |
145 |
152 field($xw, 'CARB_MAX', sprintf("%.1f",floatval($row['st_carb_max']))); |
146 xmlwriter_start_element($xw, 'STYLE_LETTER'); |
153 field($xw, 'ABV_MIN', sprintf("%.1f",floatval($row['st_abv_min']))); |
147 xmlwriter_text($xw, $row['st_letter']); |
154 field($xw, 'ABV_MAX', sprintf("%.1f",floatval($row['st_abv_max']))); |
148 xmlwriter_end_element($xw); |
|
149 |
|
150 xmlwriter_start_element($xw, 'STYLE_GUIDE'); |
|
151 xmlwriter_text($xw, $row['st_guide']); |
|
152 xmlwriter_end_element($xw); |
|
153 |
|
154 xmlwriter_start_element($xw, 'TYPE'); |
|
155 xmlwriter_text($xw, $styletype[$row['st_type']]); |
|
156 xmlwriter_end_element($xw); |
|
157 |
|
158 xmlwriter_start_element($xw, 'OG_MIN'); |
|
159 xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_og_min']))); |
|
160 xmlwriter_end_element($xw); |
|
161 |
|
162 xmlwriter_start_element($xw, 'OG_MAX'); |
|
163 xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_og_max']))); |
|
164 xmlwriter_end_element($xw); |
|
165 |
|
166 xmlwriter_start_element($xw, 'FG_MIN'); |
|
167 xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_og_min']))); |
|
168 xmlwriter_end_element($xw); |
|
169 |
|
170 xmlwriter_start_element($xw, 'OG_MAX'); |
|
171 xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_fg_max']))); |
|
172 xmlwriter_end_element($xw); |
|
173 |
|
174 xmlwriter_start_element($xw, 'IBU_MIN'); |
|
175 xmlwriter_text($xw, sprintf("%.0f",floatval($row['st_ibu_min']))); |
|
176 xmlwriter_end_element($xw); |
|
177 |
|
178 xmlwriter_start_element($xw, 'IBU_MAX'); |
|
179 xmlwriter_text($xw, sprintf("%.0f",floatval($row['st_ibu_max']))); |
|
180 xmlwriter_end_element($xw); |
|
181 |
|
182 xmlwriter_start_element($xw, 'COLOR_MIN'); |
|
183 xmlwriter_text($xw, sprintf("%.2f",ebc_to_srm(floatval($row['st_color_min'])))); |
|
184 xmlwriter_end_element($xw); |
|
185 |
|
186 xmlwriter_start_element($xw, 'COLOR_MAX'); |
|
187 xmlwriter_text($xw, sprintf("%.2f",ebc_to_srm(floatval($row['st_color_max'])))); |
|
188 xmlwriter_end_element($xw); |
|
189 |
|
190 xmlwriter_start_element($xw, 'CARB_MIN'); |
|
191 xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_carb_min']))); |
|
192 xmlwriter_end_element($xw); |
|
193 |
|
194 xmlwriter_start_element($xw, 'CARB_MAX'); |
|
195 xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_carb_max']))); |
|
196 xmlwriter_end_element($xw); |
|
197 |
|
198 xmlwriter_start_element($xw, 'ABV_MIN'); |
|
199 xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_abv_min']))); |
|
200 xmlwriter_end_element($xw); |
|
201 |
|
202 xmlwriter_start_element($xw, 'ABV_MAX'); |
|
203 xmlwriter_text($xw, sprintf("%.1f",floatval($row['st_abv_max']))); |
|
204 xmlwriter_end_element($xw); |
|
205 |
|
206 xmlwriter_end_element($xw); // STYLE |
155 xmlwriter_end_element($xw); // STYLE |
207 |
156 |
208 xmlwriter_start_element($xw, 'EQUIPMENT'); |
157 xmlwriter_start_element($xw, 'EQUIPMENT'); |
209 |
158 field($xw, 'VERSION', '1'); |
210 xmlwriter_start_element($xw, 'VERSION'); |
159 field($xw, 'NAME', $row['eq_name']); |
211 xmlwriter_text($xw, '1'); |
160 field($xw, 'NOTES', $row['eq_notes']); |
212 xmlwriter_end_element($xw); |
161 field($xw, 'BATCH_SIZE', sprintf("%.2f",floatval($row['eq_batch_size']))); |
213 |
162 field($xw, 'BOIL_SIZE', sprintf("%.2f",floatval($row['eq_boil_size']))); |
214 xmlwriter_start_element($xw, 'NAME'); |
163 field($xw, 'BOIL_TIME', sprintf("%.0f",floatval($row['eq_boil_time']))); |
215 xmlwriter_text($xw, $row['eq_name']); |
|
216 xmlwriter_end_element($xw); |
|
217 |
|
218 xmlwriter_start_element($xw, 'NOTES'); |
|
219 xmlwriter_text($xw, $row['eq_notes']); |
|
220 xmlwriter_end_element($xw); |
|
221 |
|
222 xmlwriter_start_element($xw, 'BATCH_SIZE'); |
|
223 xmlwriter_text($xw, sprintf("%.2f",floatval($row['eq_batch_size']))); |
|
224 xmlwriter_end_element($xw); |
|
225 |
|
226 xmlwriter_start_element($xw, 'BOIL_SIZE'); |
|
227 xmlwriter_text($xw, sprintf("%.2f",floatval($row['eq_boil_size']))); |
|
228 xmlwriter_end_element($xw); |
|
229 |
|
230 xmlwriter_start_element($xw, 'BOIL_TIME'); |
|
231 xmlwriter_text($xw, sprintf("%.0f",floatval($row['eq_boil_time']))); |
|
232 xmlwriter_end_element($xw); |
|
233 |
|
234 xmlwriter_end_element($xw); // EQUIPMENT |
164 xmlwriter_end_element($xw); // EQUIPMENT |
235 |
165 |
236 xmlwriter_start_element($xw, 'HOPS'); |
166 xmlwriter_start_element($xw, 'HOPS'); |
237 $arr = json_decode($row['json_hops'], true); |
167 $arr = json_decode($row['json_hops'], true); |
238 foreach($arr as $item) { //foreach element in $arr |
168 foreach($arr as $item) { //foreach element in $arr |
239 |
|
240 xmlwriter_start_element($xw, 'HOP'); |
169 xmlwriter_start_element($xw, 'HOP'); |
241 |
170 field($xw, 'VERSION', '1'); |
242 xmlwriter_start_element($xw, 'VERSION'); |
171 field($xw, 'NAME', $item['h_name']); |
243 xmlwriter_text($xw, '1'); |
172 field($xw, 'ALPHA', sprintf("%.1f",floatval($item['h_alpha']))); |
244 xmlwriter_end_element($xw); |
173 field($xw, 'AMOUNT', sprintf("%.4f",floatval($item['h_amount']))); |
245 |
174 field($xw, 'USE', $hopuse[$item['h_useat']]); |
246 xmlwriter_start_element($xw, 'NAME'); |
175 field($xw, 'TIME', $item['h_time']); |
247 xmlwriter_text($xw, $item['h_name']); |
176 field($xw, 'TYPE', $hoptype[$item['h_type']]); |
248 xmlwriter_end_element($xw); |
177 field($xw, 'FORM', $hopform[$item['h_form']]); |
249 |
178 field($xw, 'BETA', sprintf("%.1f",floatval($item['h_beta']))); |
250 xmlwriter_start_element($xw, 'ALPHA'); |
179 field($xw, 'HSI', sprintf("%.1f",floatval($item['h_hsi']))); |
251 xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_alpha']))); |
180 field($xw, 'ORIGIN', $item['h_origin']); |
252 xmlwriter_end_element($xw); |
|
253 |
|
254 xmlwriter_start_element($xw, 'AMOUNT'); |
|
255 xmlwriter_text($xw, sprintf("%.4f",floatval($item['h_amount']))); |
|
256 xmlwriter_end_element($xw); |
|
257 |
|
258 xmlwriter_start_element($xw, 'USE'); |
|
259 xmlwriter_text($xw, $hopuse[$item['h_useat']]); |
|
260 xmlwriter_end_element($xw); |
|
261 |
|
262 xmlwriter_start_element($xw, 'TIME'); |
|
263 xmlwriter_text($xw, $item['h_time']); |
|
264 xmlwriter_end_element($xw); |
|
265 |
|
266 xmlwriter_start_element($xw, 'TYPE'); |
|
267 xmlwriter_text($xw, $hoptype[$item['h_type']]); |
|
268 xmlwriter_end_element($xw); |
|
269 |
|
270 xmlwriter_start_element($xw, 'FORM'); |
|
271 xmlwriter_text($xw, $hopform[$item['h_form']]); |
|
272 xmlwriter_end_element($xw); |
|
273 |
|
274 xmlwriter_start_element($xw, 'BETA'); |
|
275 xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_beta']))); |
|
276 xmlwriter_end_element($xw); |
|
277 |
|
278 xmlwriter_start_element($xw, 'HSI'); |
|
279 xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_hsi']))); |
|
280 xmlwriter_end_element($xw); |
|
281 |
|
282 xmlwriter_start_element($xw, 'ORIGIN'); |
|
283 xmlwriter_text($xw, $item['h_origin']); |
|
284 xmlwriter_end_element($xw); |
|
285 |
|
286 xmlwriter_end_element($xw); // HOP |
181 xmlwriter_end_element($xw); // HOP |
287 } |
182 } |
288 xmlwriter_end_element($xw); // HOPS |
183 xmlwriter_end_element($xw); // HOPS |
289 |
184 |
290 xmlwriter_start_element($xw, 'FERMENTABLES'); |
185 xmlwriter_start_element($xw, 'FERMENTABLES'); |
291 $arr = json_decode($row['json_fermentables'], true); |
186 $arr = json_decode($row['json_fermentables'], true); |
292 foreach($arr as $item) { //foreach element in $arr |
187 foreach($arr as $item) { //foreach element in $arr |
|
188 if ($item['f_added'] <= 3) { |
293 xmlwriter_start_element($xw, 'FERMENTABLE'); |
189 xmlwriter_start_element($xw, 'FERMENTABLE'); |
294 |
190 field($xw, 'VERSION', '1'); |
295 xmlwriter_start_element($xw, 'VERSION'); |
191 field($xw, 'NAME', $item['f_name']); |
296 xmlwriter_text($xw, '1'); |
192 field($xw, 'TYPE', $fermentabletype[$item['f_type']]); |
297 xmlwriter_end_element($xw); |
193 field($xw, 'AMOUNT', sprintf("%.4f",floatval($item['f_amount']))); |
298 |
194 field($xw, 'YIELD', sprintf("%.1f",floatval($item['f_yield']))); |
299 xmlwriter_start_element($xw, 'NAME'); |
195 field($xw, 'COLOR', sprintf("%.1f",ebc_to_srm(floatval($item['f_color'])))); |
300 xmlwriter_text($xw, $item['f_name']); |
196 field($xw, 'ADD_AFTER_BOIL', ($item['f_added'] > 1) ? 'TRUE':'FALSE'); |
301 xmlwriter_end_element($xw); |
197 field($xw, 'ORIGIN', $item['f_origin']); |
302 |
198 field($xw, 'SUPPLIER', $item['f_supplier']); |
303 xmlwriter_start_element($xw, 'TYPE'); |
199 if (floatval($item['f_coarse_fine_diff'])) |
304 xmlwriter_text($xw, $fermentabletype[$item['f_type']]); |
200 field($xw, 'COARSE_FINE_DIFF', sprintf("%.4f",floatval($item['f_coarse_fine_diff']))); |
305 xmlwriter_end_element($xw); |
201 if (floatval($item['f_moisture'])) |
306 |
202 field($xw, 'MOISTURE', sprintf("%.4f",floatval($item['f_moisture']))); |
307 xmlwriter_start_element($xw, 'AMOUNT'); |
203 if (floatval($item['f_diastatic_power'])) |
308 xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_amount']))); |
204 field($xw, 'DIASTATIC_POWER', sprintf("%.4f",floatval($item['f_diastatic_power']))); |
309 xmlwriter_end_element($xw); |
205 if (floatval($item['f_protein'])) |
310 |
206 field($xw, 'PROTEIN', sprintf("%.4f",floatval($item['f_protein']))); |
311 xmlwriter_start_element($xw, 'YIELD'); |
207 if (floatval($item['f_max_in_batch'])) |
312 xmlwriter_text($xw, sprintf("%.1f",floatval($item['f_yield']))); |
208 field($xw, 'MAX_IN_BATCH', sprintf("%.1f",floatval($item['f_max_in_batch']))); |
313 xmlwriter_end_element($xw); |
209 field($xw, 'RECOMMEND_MASH', ($item['f_recommend_mash']) ? 'TRUE':'FALSE'); |
314 |
210 field($xw, 'GRAINTYPE', $graintype[$item['f_graintype']]); |
315 xmlwriter_start_element($xw, 'COLOR'); |
|
316 xmlwriter_text($xw, sprintf("%.1f",ebc_to_srm(floatval($item['f_color'])))); |
|
317 xmlwriter_end_element($xw); |
|
318 |
|
319 xmlwriter_start_element($xw, 'ADD_AFTER_BOIL'); |
|
320 ($item['f_added'] > 1) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
|
321 xmlwriter_end_element($xw); |
|
322 |
|
323 xmlwriter_start_element($xw, 'ORIGIN'); |
|
324 xmlwriter_text($xw, $item['f_origin']); |
|
325 xmlwriter_end_element($xw); |
|
326 |
|
327 xmlwriter_start_element($xw, 'SUPPLIER'); |
|
328 xmlwriter_text($xw, $item['f_supplier']); |
|
329 xmlwriter_end_element($xw); |
|
330 |
|
331 if (floatval($item['f_coarse_fine_diff'])) { |
|
332 xmlwriter_start_element($xw, 'COARSE_FINE_DIFF'); |
|
333 xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_coarse_fine_diff']))); |
|
334 xmlwriter_end_element($xw); |
|
335 } |
|
336 |
|
337 if (floatval($item['f_moisture'])) { |
|
338 xmlwriter_start_element($xw, 'MOISTURE'); |
|
339 xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_moisture']))); |
|
340 xmlwriter_end_element($xw); |
|
341 } |
|
342 |
|
343 if (floatval($item['f_diastatic_power'])) { |
|
344 xmlwriter_start_element($xw, 'DIASTATIC_POWER'); |
|
345 xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_diastatic_power']))); |
|
346 xmlwriter_end_element($xw); |
|
347 } |
|
348 |
|
349 if (floatval($item['f_protein'])) { |
|
350 xmlwriter_start_element($xw, 'PROTEIN'); |
|
351 xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_protein']))); |
|
352 xmlwriter_end_element($xw); |
|
353 } |
|
354 |
|
355 if (floatval($item['f_max_in_batch'])) { |
|
356 xmlwriter_start_element($xw, 'MAX_IN_BATCH'); |
|
357 xmlwriter_text($xw, sprintf("%.1f",floatval($item['f_max_in_batch']))); |
|
358 xmlwriter_end_element($xw); |
|
359 } |
|
360 |
|
361 xmlwriter_start_element($xw, 'RECOMMEND_MASH'); |
|
362 ($item['f_recommend_mash']) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
|
363 xmlwriter_end_element($xw); |
|
364 |
|
365 xmlwriter_start_element($xw, 'GRAINTYPE'); |
|
366 xmlwriter_text($xw, $graintype[$item['f_graintype']]); |
|
367 xmlwriter_end_element($xw); |
|
368 |
|
369 xmlwriter_end_element($xw); // FERMENTABLE |
211 xmlwriter_end_element($xw); // FERMENTABLE |
|
212 } |
370 } |
213 } |
371 xmlwriter_end_element($xw); // FERMENTABLES |
214 xmlwriter_end_element($xw); // FERMENTABLES |
372 |
215 |
373 xmlwriter_start_element($xw, 'MISCS'); |
216 xmlwriter_start_element($xw, 'MISCS'); |
374 $arr = json_decode($row['json_miscs'], true); |
217 $arr = json_decode($row['json_miscs'], true); |
375 foreach($arr as $item) { |
218 foreach($arr as $item) { |
376 |
|
377 xmlwriter_start_element($xw, 'MISC'); |
219 xmlwriter_start_element($xw, 'MISC'); |
378 |
220 field($xw, 'VERSION', '1'); |
379 xmlwriter_start_element($xw, 'VERSION'); |
221 field($xw, 'NAME', $item['m_name']); |
380 xmlwriter_text($xw, '1'); |
222 field($xw, 'TYPE', $misctype[$item['m_type']]); |
381 xmlwriter_end_element($xw); |
223 field($xw, 'AMOUNT', sprintf("%.5f",floatval($item['m_amount']))); |
382 |
224 field($xw, 'AMOUNT_IS_WEIGHT', ($item['m_amount_is_weight']) ? 'TRUE':'FALSE'); |
383 xmlwriter_start_element($xw, 'NAME'); |
225 field($xw, 'USE', $miscuse[$item['m_use_use']]); |
384 xmlwriter_text($xw, $item['m_name']); |
226 field($xw, 'TIME', sprintf("%.0f",floatval($item['m_time']))); |
385 xmlwriter_end_element($xw); |
|
386 |
|
387 xmlwriter_start_element($xw, 'TYPE'); |
|
388 xmlwriter_text($xw, $misctype[$item['m_type']]); |
|
389 xmlwriter_end_element($xw); |
|
390 |
|
391 xmlwriter_start_element($xw, 'AMOUNT'); |
|
392 xmlwriter_text($xw, sprintf("%.5f",floatval($item['m_amount']))); |
|
393 xmlwriter_end_element($xw); |
|
394 |
|
395 xmlwriter_start_element($xw, 'AMOUNT_IS_WEIGHT'); |
|
396 ($item['m_amount_is_weight']) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
|
397 xmlwriter_end_element($xw); |
|
398 |
|
399 xmlwriter_start_element($xw, 'USE'); |
|
400 xmlwriter_text($xw, $miscuse[$item['m_use_use']]); |
|
401 xmlwriter_end_element($xw); |
|
402 |
|
403 xmlwriter_start_element($xw, 'TIME'); |
|
404 xmlwriter_text($xw, sprintf("%.0f",floatval($item['m_time']))); |
|
405 xmlwriter_end_element($xw); |
|
406 |
|
407 xmlwriter_end_element($xw); // MISC |
227 xmlwriter_end_element($xw); // MISC |
408 } |
228 } |
409 xmlwriter_end_element($xw); // MISCS |
229 xmlwriter_end_element($xw); // MISCS |
410 |
230 |
411 xmlwriter_start_element($xw, 'YEASTS'); |
231 xmlwriter_start_element($xw, 'YEASTS'); |
412 $arr = json_decode($row['json_yeasts'], true); |
232 $arr = json_decode($row['json_yeasts'], true); |
413 foreach($arr as $item) { //foreach element in $arr |
233 foreach($arr as $item) { //foreach element in $arr |
414 |
|
415 xmlwriter_start_element($xw, 'YEAST'); |
234 xmlwriter_start_element($xw, 'YEAST'); |
416 |
235 field($xw, 'VERSION', '1'); |
417 xmlwriter_start_element($xw, 'VERSION'); |
236 field($xw, 'NAME', $item['y_name']); |
418 xmlwriter_text($xw, '1'); |
237 field($xw, 'TYPE', $yeasttype[$item['y_type']]); |
419 xmlwriter_end_element($xw); |
238 field($xw, 'FORM', $yeastform[$item['y_form']]); |
420 |
239 field($xw, 'AMOUNT', sprintf("%.5f",floatval($item['y_amount']))); |
421 xmlwriter_start_element($xw, 'NAME'); |
240 field($xw, 'AMOUNT_IS_WEIGHT', ($item['y_form'] == 1) ? 'TRUE':'FALSE'); |
422 xmlwriter_text($xw, $item['y_name']); |
241 field($xw, 'LABORATORY', $item['y_laboratory']); |
423 xmlwriter_end_element($xw); |
242 field($xw, 'PRODUCT_ID', $item['y_product_id']); |
424 |
243 field($xw, 'MIN_TEMPERATURE', sprintf("%.1f",floatval($item['y_min_temperature']))); |
425 xmlwriter_start_element($xw, 'TYPE'); |
244 field($xw, 'MAX_TEMPERATURE', sprintf("%.1f",floatval($item['y_max_temperature']))); |
426 xmlwriter_text($xw, $yeasttype[$item['y_type']]); |
245 field($xw, 'ATTENUATION', sprintf("%.1f",floatval($item['y_attenuation']))); |
427 xmlwriter_end_element($xw); |
246 field($xw, 'ADD_TO_SECONDARY', ($item['y_use'] == 0) ? 'FALSE':'TRUE'); |
428 |
|
429 xmlwriter_start_element($xw, 'FORM'); |
|
430 xmlwriter_text($xw, $yeastform[$item['y_form']]); |
|
431 xmlwriter_end_element($xw); |
|
432 |
|
433 xmlwriter_start_element($xw, 'AMOUNT'); |
|
434 xmlwriter_text($xw, sprintf("%.5f",floatval($item['y_amount']))); |
|
435 xmlwriter_end_element($xw); |
|
436 |
|
437 xmlwriter_start_element($xw, 'AMOUNT_IS_WEIGHT'); |
|
438 ($item['y_form'] == 1) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
|
439 xmlwriter_end_element($xw); |
|
440 |
|
441 xmlwriter_start_element($xw, 'LABORATORY'); |
|
442 xmlwriter_text($xw, $item['y_laboratory']); |
|
443 xmlwriter_end_element($xw); |
|
444 |
|
445 xmlwriter_start_element($xw, 'PRODUCT_ID'); |
|
446 xmlwriter_text($xw, $item['y_product_id']); |
|
447 xmlwriter_end_element($xw); |
|
448 |
|
449 xmlwriter_start_element($xw, 'MIN_TEMPERATURE'); |
|
450 xmlwriter_text($xw, sprintf("%.1f",floatval($item['y_min_temperature']))); |
|
451 xmlwriter_end_element($xw); |
|
452 |
|
453 xmlwriter_start_element($xw, 'MAX_TEMPERATURE'); |
|
454 xmlwriter_text($xw, sprintf("%.1f",floatval($item['y_max_temperature']))); |
|
455 xmlwriter_end_element($xw); |
|
456 |
|
457 xmlwriter_start_element($xw, 'ATTENUATION'); |
|
458 xmlwriter_text($xw, sprintf("%.1f",floatval($item['y_attenuation']))); |
|
459 xmlwriter_end_element($xw); |
|
460 |
|
461 xmlwriter_start_element($xw, 'ADD_TO_SECONDARY'); |
|
462 ($item['y_use'] == 0) ? xmlwriter_text($xw, 'FALSE') : xmlwriter_text($xw, 'TRUE'); |
|
463 xmlwriter_end_element($xw); |
|
464 |
|
465 xmlwriter_end_element($xw); // YEAST |
247 xmlwriter_end_element($xw); // YEAST |
466 } |
248 } |
467 xmlwriter_end_element($xw); // YEASTS |
249 xmlwriter_end_element($xw); // YEASTS |
468 |
250 |
469 xmlwriter_start_element($xw, 'WATERS'); |
251 xmlwriter_start_element($xw, 'WATERS'); |
470 xmlwriter_start_element($xw, 'WATER'); // Source 1 |
252 xmlwriter_start_element($xw, 'WATER'); // Source 1 |
471 |
253 field($xw, 'VERSION', '1'); |
472 xmlwriter_start_element($xw, 'VERSION'); |
254 field($xw, 'NAME', $row['w1_name']); |
473 xmlwriter_text($xw, '1'); |
255 field($xw, 'AMOUNT', sprintf("%.2f",floatval($row['w1_amount']))); |
474 xmlwriter_end_element($xw); |
256 field($xw, 'CALCIUM', sprintf("%.2f",floatval($row['w1_calcium']))); |
475 |
257 field($xw, 'MAGNESIUM', sprintf("%.2f",floatval($row['w1_magnesium']))); |
476 xmlwriter_start_element($xw, 'NAME'); |
258 field($xw, 'BICARBONATE', sprintf("%.2f",floatval($row['w1_total_alkalinity']) * 1.22)); |
477 xmlwriter_text($xw, $row['w1_name']); |
259 field($xw, 'SULFATE', sprintf("%.2f",floatval($row['w1_sulfate']))); |
478 xmlwriter_end_element($xw); |
260 field($xw, 'CHLORIDE', sprintf("%.2f",floatval($row['w1_chloride']))); |
479 |
261 field($xw, 'SODIUM', sprintf("%.2f",floatval($row['w1_sodium']))); |
480 xmlwriter_start_element($xw, 'AMOUNT'); |
262 field($xw, 'PH', sprintf("%.1f",floatval($row['w1_ph']))); |
481 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_amount']))); |
263 field($xw, 'TOTAL_ALKALINITY', sprintf("%.2f",floatval($row['w1_total_alkalinity']))); |
482 xmlwriter_end_element($xw); |
|
483 |
|
484 xmlwriter_start_element($xw, 'CALCIUM'); |
|
485 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_calcium']))); |
|
486 xmlwriter_end_element($xw); |
|
487 |
|
488 xmlwriter_start_element($xw, 'BICARBONATE'); |
|
489 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_total_alkalinity']) * 1.22)); |
|
490 xmlwriter_end_element($xw); |
|
491 |
|
492 xmlwriter_start_element($xw, 'SULFATE'); |
|
493 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_sulfate']))); |
|
494 xmlwriter_end_element($xw); |
|
495 |
|
496 xmlwriter_start_element($xw, 'CHLORIDE'); |
|
497 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_chloride']))); |
|
498 xmlwriter_end_element($xw); |
|
499 |
|
500 xmlwriter_start_element($xw, 'SODIUM'); |
|
501 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_sodium']))); |
|
502 xmlwriter_end_element($xw); |
|
503 |
|
504 xmlwriter_start_element($xw, 'PH'); |
|
505 xmlwriter_text($xw, sprintf("%.1f",floatval($row['w1_ph']))); |
|
506 xmlwriter_end_element($xw); |
|
507 |
|
508 xmlwriter_start_element($xw, 'TOTAL_ALKALINITY'); |
|
509 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_total_alkalinity']))); |
|
510 xmlwriter_end_element($xw); |
|
511 |
|
512 xmlwriter_end_element($xw); // WATER |
264 xmlwriter_end_element($xw); // WATER |
513 |
265 |
514 if (strlen($row['w2_name'])) { |
266 if (strlen($row['w2_name'])) { |
515 xmlwriter_start_element($xw, 'WATER'); // Source 2 |
267 xmlwriter_start_element($xw, 'WATER'); // Source 2 |
516 |
268 field($xw, 'VERSION', '1'); |
517 xmlwriter_start_element($xw, 'VERSION'); |
269 field($xw, 'NAME', $row['w2_name']); |
518 xmlwriter_text($xw, '1'); |
270 field($xw, 'AMOUNT', sprintf("%.2f",floatval($row['w2_amount']))); |
519 xmlwriter_end_element($xw); |
271 field($xw, 'CALCIUM', sprintf("%.2f",floatval($row['w2_calcium']))); |
520 |
272 field($xw, 'MAGNESIUM', sprintf("%.2f",floatval($row['w2_magnesium']))); |
521 xmlwriter_start_element($xw, 'NAME'); |
273 field($xw, 'BICARBONATE', sprintf("%.2f",floatval($row['w2_total_alkalinity']) * 1.22)); |
522 xmlwriter_text($xw, $row['w2_name']); |
274 field($xw, 'SULFATE', sprintf("%.2f",floatval($row['w2_sulfate']))); |
523 xmlwriter_end_element($xw); |
275 field($xw, 'CHLORIDE', sprintf("%.2f",floatval($row['w2_chloride']))); |
524 |
276 field($xw, 'SODIUM', sprintf("%.2f",floatval($row['w2_sodium']))); |
525 xmlwriter_start_element($xw, 'AMOUNT'); |
277 field($xw, 'PH', sprintf("%.1f",floatval($row['w2_ph']))); |
526 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_amount']))); |
278 field($xw, 'TOTAL_ALKALINITY', sprintf("%.2f",floatval($row['w2_total_alkalinity']))); |
527 xmlwriter_end_element($xw); |
|
528 |
|
529 xmlwriter_start_element($xw, 'CALCIUM'); |
|
530 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_calcium']))); |
|
531 xmlwriter_end_element($xw); |
|
532 |
|
533 xmlwriter_start_element($xw, 'BICARBONATE'); |
|
534 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_total_alkalinity']) * 1.22)); |
|
535 xmlwriter_end_element($xw); |
|
536 |
|
537 xmlwriter_start_element($xw, 'SULFATE'); |
|
538 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_sulfate']))); |
|
539 xmlwriter_end_element($xw); |
|
540 |
|
541 xmlwriter_start_element($xw, 'CHLORIDE'); |
|
542 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_chloride']))); |
|
543 xmlwriter_end_element($xw); |
|
544 |
|
545 xmlwriter_start_element($xw, 'SODIUM'); |
|
546 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_sodium']))); |
|
547 xmlwriter_end_element($xw); |
|
548 |
|
549 xmlwriter_start_element($xw, 'PH'); |
|
550 xmlwriter_text($xw, sprintf("%.1f",floatval($row['w2_ph']))); |
|
551 xmlwriter_end_element($xw); |
|
552 |
|
553 xmlwriter_start_element($xw, 'TOTAL_ALKALINITY'); |
|
554 xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_total_alkalinity']))); |
|
555 xmlwriter_end_element($xw); |
|
556 |
|
557 xmlwriter_end_element($xw); // WATER |
279 xmlwriter_end_element($xw); // WATER |
558 } |
280 } |
559 xmlwriter_end_element($xw); // WATERS |
281 xmlwriter_end_element($xw); // WATERS |
560 |
282 |
561 xmlwriter_start_element($xw, 'MASH'); |
283 xmlwriter_start_element($xw, 'MASH'); |
562 |
284 field($xw, 'VERSION', '1'); |
563 xmlwriter_start_element($xw, 'VERSION'); |
285 field($xw, 'NAME', $row['mash_name']); |
564 xmlwriter_text($xw, '1'); |
286 field($xw, 'GRAIN_TEMP', '10.0'); |
565 xmlwriter_end_element($xw); |
287 field($xw, 'PH', sprintf("%.1f",floatval($row['sparge_ph']))); |
566 |
288 field($xw, 'SPARGE_TEMP', sprintf("%.1f",floatval($row['sparge_temp']))); |
567 xmlwriter_start_element($xw, 'NAME'); |
|
568 xmlwriter_text($xw, $row['mash_name']); |
|
569 xmlwriter_end_element($xw); |
|
570 |
|
571 xmlwriter_start_element($xw, 'GRAIN_TEMP'); |
|
572 xmlwriter_text($xw, '10.0'); |
|
573 xmlwriter_end_element($xw); |
|
574 |
|
575 xmlwriter_start_element($xw, 'PH'); |
|
576 xmlwriter_text($xw, sprintf("%.1f",floatval($row['sparge_ph']))); |
|
577 xmlwriter_end_element($xw); |
|
578 |
|
579 xmlwriter_start_element($xw, 'SPARGE_TEMP'); |
|
580 xmlwriter_text($xw, sprintf("%.1f",floatval($row['sparge_temp']))); |
|
581 xmlwriter_end_element($xw); |
|
582 |
|
583 xmlwriter_start_element($xw, 'MASH_STEPS'); |
289 xmlwriter_start_element($xw, 'MASH_STEPS'); |
584 $arr = json_decode($row['json_mashs'], true); |
290 $arr = json_decode($row['json_mashs'], true); |
585 foreach($arr as $item) { //foreach element in $arr |
291 foreach($arr as $item) { //foreach element in $arr |
586 xmlwriter_start_element($xw, 'MASH_STEP'); |
292 xmlwriter_start_element($xw, 'MASH_STEP'); |
587 |
293 field($xw, 'VERSION', '1'); |
588 xmlwriter_start_element($xw, 'VERSION'); |
294 field($xw, 'NAME', $item['step_name']); |
589 xmlwriter_text($xw, '1'); |
295 field($xw, 'TYPE', $mashsteptype[$item['step_type']]); |
590 xmlwriter_end_element($xw); |
296 if ($item['step_type'] == 0) |
591 |
297 field($xw, 'INFUSE_AMOUNT', sprintf("%.1f",floatval($item['step_infuse_amount']))); |
592 xmlwriter_start_element($xw, 'NAME'); |
298 field($xw, 'STEP_TEMP', sprintf("%.1f",floatval($item['step_temp']))); |
593 xmlwriter_text($xw, $item['step_name']); |
299 field($xw, 'STEP_TIME', sprintf("%.1f",floatval($item['step_time']))); |
594 xmlwriter_end_element($xw); |
300 field($xw, 'RAMP_TIME', sprintf("%.1f",floatval($item['ramp_time']))); |
595 |
301 field($xw, 'END_TEMP', sprintf("%.1f",floatval($item['end_temp']))); |
596 xmlwriter_start_element($xw, 'TYPE'); |
302 field($xw, 'PH', sprintf("%.1f",floatval($row['mash_ph']))); |
597 xmlwriter_text($xw, $mashsteptype[$item['step_type']]); |
|
598 xmlwriter_end_element($xw); |
|
599 |
|
600 if ($item['step_type'] == 0) { |
|
601 xmlwriter_start_element($xw, 'INFUSE_AMOUNT'); |
|
602 xmlwriter_text($xw, sprintf("%.1f",floatval($item['step_infuse_amount']))); |
|
603 xmlwriter_end_element($xw); |
|
604 } |
|
605 |
|
606 xmlwriter_start_element($xw, 'STEP_TEMP'); |
|
607 xmlwriter_text($xw, sprintf("%.1f",floatval($item['step_temp']))); |
|
608 xmlwriter_end_element($xw); |
|
609 |
|
610 xmlwriter_start_element($xw, 'STEP_TIME'); |
|
611 xmlwriter_text($xw, sprintf("%.1f",floatval($item['step_time']))); |
|
612 xmlwriter_end_element($xw); |
|
613 |
|
614 xmlwriter_start_element($xw, 'RAMP_TIME'); |
|
615 xmlwriter_text($xw, sprintf("%.1f",floatval($item['ramp_time']))); |
|
616 xmlwriter_end_element($xw); |
|
617 |
|
618 xmlwriter_start_element($xw, 'END_TEMP'); |
|
619 xmlwriter_text($xw, sprintf("%.1f",floatval($item['end_temp']))); |
|
620 xmlwriter_end_element($xw); |
|
621 |
|
622 xmlwriter_start_element($xw, 'PH'); |
|
623 xmlwriter_text($xw, sprintf("%.1f",floatval($row['mash_ph']))); |
|
624 xmlwriter_end_element($xw); |
|
625 |
|
626 xmlwriter_end_element($xw); // MASH_STEP |
303 xmlwriter_end_element($xw); // MASH_STEP |
627 } |
304 } |
628 xmlwriter_end_element($xw); // MASH_STEPS |
305 xmlwriter_end_element($xw); // MASH_STEPS |
629 xmlwriter_end_element($xw); // MASH |
306 xmlwriter_end_element($xw); // MASH |
630 xmlwriter_end_element($xw); // RECIPE |
307 xmlwriter_end_element($xw); // RECIPE |