Wed, 23 Oct 2019 14:20:50 +0200
Added the product divide scripts. All parts have all the volumes and weights divided, including the master record. Splitted batches have their own records with the product code formatted as code-n. From this design, we can rebuild the print and checklist.
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' ); |
449
a1d6b9eec988
Added Cryo Hop support to the export scripts.
Michiel Broek <mbroek@mbse.eu>
parents:
429
diff
changeset
|
29 | $hopform = array( 'Pellet', 'Plug', 'Leaf', 'Leaf', 'Leaf' ); |
242
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' ); |
429
0d2cf505957c
Prepared for new yeast types.
Michiel Broek <mbroek@mbse.eu>
parents:
401
diff
changeset
|
33 | $yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne', 'Other', 'Other', 'Other', 'Other', 'Other' ); |
515
9d771385a8a0
Added dried yeast form. Pitch rate for Kveik initially set at 0.25. Dried Kveik cells set to 9000000000 cells/gram.
Michiel Broek <mbroek@mbse.eu>
parents:
449
diff
changeset
|
34 | $yeastform = array( 'Liquid', 'Dry', 'Slant', 'Culture', 'Frozen', 'Bottle', 'Dry' ); |
242
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 | ||
401
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
99 | if ($row['brew_cooling_to'] > 0) { |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
100 | xmlwriter_start_element($xw, 'BMS_COOLING_TO'); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
101 | xmlwriter_text($xw, sprintf("%.1f",floatval($row['brew_cooling_to']))); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
102 | xmlwriter_end_element($xw); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
103 | } |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
104 | |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
105 | if ($row['brew_whirlpool9'] > 0) { |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
106 | xmlwriter_start_element($xw, 'BMS_WHIRLPOOL9'); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
107 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool9']))); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
108 | xmlwriter_end_element($xw); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
109 | } |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
110 | if ($row['brew_whirlpool7'] > 0) { |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
111 | xmlwriter_start_element($xw, 'BMS_WHIRLPOOL7'); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
112 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool7']))); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
113 | xmlwriter_end_element($xw); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
114 | } |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
115 | if ($row['brew_whirlpool6'] > 0) { |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
116 | xmlwriter_start_element($xw, 'BMS_WHIRLPOOL6'); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
117 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool6']))); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
118 | xmlwriter_end_element($xw); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
119 | } |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
120 | if ($row['brew_whirlpool2'] > 0) { |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
121 | xmlwriter_start_element($xw, 'BMS_WHIRLPOOL2'); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
122 | xmlwriter_text($xw, sprintf("%.0f",floatval($row['brew_whirlpool2']))); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
123 | xmlwriter_end_element($xw); |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
124 | } |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
125 | |
4aad74bde00b
In product beerxml export added BMS specific items: cooling_to and whirlpool stages. These should be picked up by the brew computer and should do no harm to the rest of the world.
Michiel Broek <mbroek@mbse.eu>
parents:
400
diff
changeset
|
126 | |
177 | 127 | // Style |
128 | xmlwriter_start_element($xw, 'STYLE'); | |
129 | ||
130 | xmlwriter_start_element($xw, 'VERSION'); | |
131 | xmlwriter_text($xw, '1'); | |
132 | xmlwriter_end_element($xw); | |
133 | ||
134 | xmlwriter_start_element($xw, 'NAME'); | |
135 | xmlwriter_text($xw, $row['st_name']); | |
136 | xmlwriter_end_element($xw); | |
137 | ||
138 | xmlwriter_start_element($xw, 'CATEGORY'); | |
139 | xmlwriter_text($xw, $row['st_category']); | |
140 | xmlwriter_end_element($xw); | |
141 | ||
142 | xmlwriter_start_element($xw, 'CATEGORY_NUMBER'); | |
143 | xmlwriter_text($xw, $row['st_category_number']); | |
144 | xmlwriter_end_element($xw); | |
145 | ||
146 | xmlwriter_start_element($xw, 'STYLE_LETTER'); | |
147 | xmlwriter_text($xw, $row['st_letter']); | |
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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
155 | xmlwriter_text($xw, $styletype[$row['st_type']]); |
177 | 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 | |
207 | ||
208 | xmlwriter_start_element($xw, 'EQUIPMENT'); | |
209 | ||
210 | xmlwriter_start_element($xw, 'VERSION'); | |
211 | xmlwriter_text($xw, '1'); | |
212 | xmlwriter_end_element($xw); | |
213 | ||
214 | xmlwriter_start_element($xw, 'NAME'); | |
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 | |
235 | ||
236 | xmlwriter_start_element($xw, 'HOPS'); | |
237 | $arr = json_decode($row['json_hops'], true); | |
238 | foreach($arr as $item) { //foreach element in $arr | |
239 | ||
240 | xmlwriter_start_element($xw, 'HOP'); | |
241 | ||
242 | xmlwriter_start_element($xw, 'VERSION'); | |
243 | xmlwriter_text($xw, '1'); | |
244 | xmlwriter_end_element($xw); | |
245 | ||
246 | xmlwriter_start_element($xw, 'NAME'); | |
247 | xmlwriter_text($xw, $item['h_name']); | |
248 | xmlwriter_end_element($xw); | |
249 | ||
250 | xmlwriter_start_element($xw, 'ALPHA'); | |
251 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['h_alpha']))); | |
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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
259 | xmlwriter_text($xw, $hopuse[$item['h_useat']]); |
177 | 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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
267 | xmlwriter_text($xw, $hoptype[$item['h_type']]); |
177 | 268 | xmlwriter_end_element($xw); |
269 | ||
270 | 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
|
271 | xmlwriter_text($xw, $hopform[$item['h_form']]); |
177 | 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 | |
287 | } | |
288 | xmlwriter_end_element($xw); // HOPS | |
289 | ||
290 | xmlwriter_start_element($xw, 'FERMENTABLES'); | |
291 | $arr = json_decode($row['json_fermentables'], true); | |
292 | foreach($arr as $item) { //foreach element in $arr | |
293 | xmlwriter_start_element($xw, 'FERMENTABLE'); | |
294 | ||
295 | xmlwriter_start_element($xw, 'VERSION'); | |
296 | xmlwriter_text($xw, '1'); | |
297 | xmlwriter_end_element($xw); | |
298 | ||
299 | xmlwriter_start_element($xw, 'NAME'); | |
300 | xmlwriter_text($xw, $item['f_name']); | |
301 | xmlwriter_end_element($xw); | |
302 | ||
303 | 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
|
304 | xmlwriter_text($xw, $fermentabletype[$item['f_type']]); |
177 | 305 | xmlwriter_end_element($xw); |
306 | ||
307 | xmlwriter_start_element($xw, 'AMOUNT'); | |
308 | xmlwriter_text($xw, sprintf("%.4f",floatval($item['f_amount']))); | |
309 | xmlwriter_end_element($xw); | |
310 | ||
311 | xmlwriter_start_element($xw, 'YIELD'); | |
312 | xmlwriter_text($xw, sprintf("%.1f",floatval($item['f_yield']))); | |
313 | xmlwriter_end_element($xw); | |
314 | ||
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'); | |
400
6d07c51e7540
Fixed beerxml output for fermentables added after the boil.
Michiel Broek <mbroek@mbse.eu>
parents:
301
diff
changeset
|
320 | ($item['f_added'] > 1) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
177 | 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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
366 | xmlwriter_text($xw, $graintype[$item['f_graintype']]); |
177 | 367 | xmlwriter_end_element($xw); |
368 | ||
369 | xmlwriter_end_element($xw); // FERMENTABLE | |
370 | } | |
371 | xmlwriter_end_element($xw); // FERMENTABLES | |
372 | ||
373 | xmlwriter_start_element($xw, 'MISCS'); | |
374 | $arr = json_decode($row['json_miscs'], true); | |
375 | foreach($arr as $item) { | |
376 | ||
377 | xmlwriter_start_element($xw, 'MISC'); | |
378 | ||
379 | xmlwriter_start_element($xw, 'VERSION'); | |
380 | xmlwriter_text($xw, '1'); | |
381 | xmlwriter_end_element($xw); | |
382 | ||
383 | xmlwriter_start_element($xw, 'NAME'); | |
384 | xmlwriter_text($xw, $item['m_name']); | |
385 | xmlwriter_end_element($xw); | |
386 | ||
387 | 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
|
388 | xmlwriter_text($xw, $misctype[$item['m_type']]); |
177 | 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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
400 | xmlwriter_text($xw, $miscuse[$item['m_use_use']]); |
177 | 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 | |
408 | } | |
409 | xmlwriter_end_element($xw); // MISCS | |
410 | ||
411 | xmlwriter_start_element($xw, 'YEASTS'); | |
412 | $arr = json_decode($row['json_yeasts'], true); | |
413 | foreach($arr as $item) { //foreach element in $arr | |
414 | ||
415 | xmlwriter_start_element($xw, 'YEAST'); | |
416 | ||
417 | xmlwriter_start_element($xw, 'VERSION'); | |
418 | xmlwriter_text($xw, '1'); | |
419 | xmlwriter_end_element($xw); | |
420 | ||
421 | xmlwriter_start_element($xw, 'NAME'); | |
422 | xmlwriter_text($xw, $item['y_name']); | |
423 | xmlwriter_end_element($xw); | |
424 | ||
425 | 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
|
426 | xmlwriter_text($xw, $yeasttype[$item['y_type']]); |
177 | 427 | xmlwriter_end_element($xw); |
428 | ||
429 | 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
|
430 | xmlwriter_text($xw, $yeastform[$item['y_form']]); |
177 | 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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
438 | ($item['y_form'] == 1) ? xmlwriter_text($xw, 'TRUE') : xmlwriter_text($xw, 'FALSE'); |
177 | 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'); | |
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
462 | ($item['y_use'] == 0) ? xmlwriter_text($xw, 'FALSE') : xmlwriter_text($xw, 'TRUE'); |
177 | 463 | xmlwriter_end_element($xw); |
464 | ||
465 | xmlwriter_end_element($xw); // YEAST | |
466 | } | |
467 | xmlwriter_end_element($xw); // YEASTS | |
468 | ||
469 | xmlwriter_start_element($xw, 'WATERS'); | |
470 | xmlwriter_start_element($xw, 'WATER'); // Source 1 | |
471 | ||
472 | xmlwriter_start_element($xw, 'VERSION'); | |
473 | xmlwriter_text($xw, '1'); | |
474 | xmlwriter_end_element($xw); | |
475 | ||
476 | xmlwriter_start_element($xw, 'NAME'); | |
477 | xmlwriter_text($xw, $row['w1_name']); | |
478 | xmlwriter_end_element($xw); | |
479 | ||
480 | xmlwriter_start_element($xw, 'AMOUNT'); | |
481 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w1_amount']))); | |
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 | |
513 | ||
514 | if (strlen($row['w2_name'])) { | |
515 | xmlwriter_start_element($xw, 'WATER'); // Source 2 | |
516 | ||
517 | xmlwriter_start_element($xw, 'VERSION'); | |
518 | xmlwriter_text($xw, '1'); | |
519 | xmlwriter_end_element($xw); | |
520 | ||
521 | xmlwriter_start_element($xw, 'NAME'); | |
522 | xmlwriter_text($xw, $row['w2_name']); | |
523 | xmlwriter_end_element($xw); | |
524 | ||
525 | xmlwriter_start_element($xw, 'AMOUNT'); | |
526 | xmlwriter_text($xw, sprintf("%.2f",floatval($row['w2_amount']))); | |
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 | |
558 | } | |
559 | xmlwriter_end_element($xw); // WATERS | |
560 | ||
561 | xmlwriter_start_element($xw, 'MASH'); | |
562 | ||
563 | xmlwriter_start_element($xw, 'VERSION'); | |
564 | xmlwriter_text($xw, '1'); | |
565 | xmlwriter_end_element($xw); | |
566 | ||
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'); | |
584 | $arr = json_decode($row['json_mashs'], true); | |
585 | foreach($arr as $item) { //foreach element in $arr | |
586 | xmlwriter_start_element($xw, 'MASH_STEP'); | |
587 | ||
588 | xmlwriter_start_element($xw, 'VERSION'); | |
589 | xmlwriter_text($xw, '1'); | |
590 | xmlwriter_end_element($xw); | |
591 | ||
592 | xmlwriter_start_element($xw, 'NAME'); | |
593 | xmlwriter_text($xw, $item['step_name']); | |
594 | xmlwriter_end_element($xw); | |
595 | ||
596 | 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
|
597 | xmlwriter_text($xw, $mashsteptype[$item['step_type']]); |
177 | 598 | xmlwriter_end_element($xw); |
599 | ||
242
97c237654ddd
Product export to beerxml produces a clean recipe. No brewing information added.
Michiel Broek <mbroek@mbse.eu>
parents:
177
diff
changeset
|
600 | if ($item['step_type'] == 0) { |
177 | 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 | |
627 | } | |
628 | xmlwriter_end_element($xw); // MASH_STEPS | |
629 | xmlwriter_end_element($xw); // MASH | |
630 | xmlwriter_end_element($xw); // RECIPE | |
631 | xmlwriter_end_element($xw); // RECIPES | |
632 | xmlwriter_end_document($xw); | |
633 | ||
634 | $beerxml = xmlwriter_output_memory($xw); | |
635 | ||
636 | Header('Content-type: text/xml'); | |
272
0c2ea1c2b858
Product beerxml export filename includes beer code.
Michiel Broek <mbroek@mbse.eu>
parents:
242
diff
changeset
|
637 | header('Content-Disposition: attachment; filename="' . $row['code'] . ' ' . $row['name'] . '.xml"'); |
177 | 638 | header('Content-Transfer-Encoding: binary'); |
639 | header('Expires: 0'); | |
640 | header('Pragma: no-cache'); | |
641 | header('Content-Length: '.strlen($beerxml)); | |
642 | exit($beerxml); |