Tue, 10 Dec 2019 20:11:37 +0100
Fix upgrade of the yeast data in products and recipes if the original yeast is not found. Export product or recipe for forum is now coded in forum format and copied to the clipboard ready to paste on a forum.
177 | 1 | <?php |
563
acdd54144838
Added export inventory and profiles in beerxml format. Small fixes in beerxml recipe and product export.
Michiel Broek <mbroek@mbse.eu>
parents:
515
diff
changeset
|
2 | //require_once('config.php'); |
acdd54144838
Added export inventory and profiles in beerxml format. Small fixes in beerxml recipe and product export.
Michiel Broek <mbroek@mbse.eu>
parents:
515
diff
changeset
|
3 | //require_once('includes/formulas.php'); |
acdd54144838
Added export inventory and profiles in beerxml format. Small fixes in beerxml recipe and product export.
Michiel Broek <mbroek@mbse.eu>
parents:
515
diff
changeset
|
4 | require_once($_SERVER['DOCUMENT_ROOT'].'/config.php'); |
acdd54144838
Added export inventory and profiles in beerxml format. Small fixes in beerxml recipe and product export.
Michiel Broek <mbroek@mbse.eu>
parents:
515
diff
changeset
|
5 | require_once($_SERVER['DOCUMENT_ROOT'].'/includes/formulas.php'); |
177 | 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'); | |
563
acdd54144838
Added export inventory and profiles in beerxml format. Small fixes in beerxml recipe and product export.
Michiel Broek <mbroek@mbse.eu>
parents:
515
diff
changeset
|
167 | xmlwriter_text($xw, sprintf("%.3f",floatval($row['st_fg_min']))); |
177 | 168 | xmlwriter_end_element($xw); |
169 | ||
563
acdd54144838
Added export inventory and profiles in beerxml format. Small fixes in beerxml recipe and product export.
Michiel Broek <mbroek@mbse.eu>
parents:
515
diff
changeset
|
170 | xmlwriter_start_element($xw, 'FG_MAX'); |
177 | 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); |