23 | | $table = $tbl['name']; |
24 | | $files = array(); |
25 | | $dir = opendir('../packages/database/'.$table); |
26 | | |
27 | | $xml = new sxml(); |
28 | | $st = $xml->parse(file_get_contents('../packages/database/'.$table.'/table.xml')); |
29 | | $struct[$table] = $st['kb3']['structure']; |
30 | | $kb['kb3']['table'][$idx]['rows'] = $st['kb3']['rows']; |
31 | | $structc++; |
32 | | |
33 | | while ($file = readdir($dir)) |
34 | | { |
35 | | if ($file == '.' || $file == '..' || $file == '.svn') |
36 | | { |
37 | | continue; |
38 | | } |
39 | | if (strpos($file, '_opt_')) |
40 | | { |
41 | | $dcnt++; |
42 | | $optcnt++; |
43 | | $opt[$table][] = '../packages/database/'.$table.'/'.$file; |
44 | | asort($opt[$table]); |
45 | | } |
46 | | elseif (!strpos($file, 'xml')) |
47 | | { |
48 | | $dcnt++; |
49 | | $datacnt++; |
50 | | $data[$table][] = '../packages/database/'.$table.'/'.$file; |
51 | | asort($data[$table]); |
52 | | } |
53 | | } |
| 23 | $table = $tbl['name']; |
| 24 | $files = array(); |
| 25 | $dir = opendir('../packages/database/'.$table); |
| 26 | |
| 27 | $xml = new sxml(); |
| 28 | $st = $xml->parse(file_get_contents('../packages/database/'.$table.'/table.xml')); |
| 29 | $struct[$table] = $st['kb3']['structure']; |
| 30 | $kb['kb3']['table'][$idx]['rows'] = $st['kb3']['rows']; |
| 31 | $structc++; |
| 32 | |
| 33 | while ($file = readdir($dir)) |
| 34 | { |
| 35 | if ($file == '.' || $file == '..' || $file == '.svn') |
| 36 | { |
| 37 | continue; |
| 38 | } |
| 39 | if (strpos($file, '_opt_')) |
| 40 | { |
| 41 | $dcnt++; |
| 42 | $optcnt++; |
| 43 | $opt[$table][] = '../packages/database/'.$table.'/'.$file; |
| 44 | asort($opt[$table]); |
| 45 | } |
| 46 | elseif (!strpos($file, 'xml')) |
| 47 | { |
| 48 | $dcnt++; |
| 49 | $datacnt++; |
| 50 | $data[$table][] = '../packages/database/'.$table.'/'.$file; |
| 51 | asort($data[$table]); |
| 52 | } |
| 53 | } |
61 | | $table = $row[0]; |
62 | | unset($struct[$table]); |
63 | | } |
64 | | |
65 | | if ($_REQUEST['sub'] == 'struct') |
66 | | { |
67 | | foreach ($struct as $table => $structure) |
68 | | { |
69 | | echo 'Creating table '.$table.'...'; |
70 | | $query = $struct[$table]; |
71 | | #echo $query; |
72 | | $id = mysql_query($query); |
73 | | if ($id) |
74 | | { |
75 | | echo 'done<br/>'; |
76 | | if ($_SESSION['sql']['engine'] == "InnoDB"){ |
77 | | echo 'Altering table '. $table .' into InnoDB...'; |
78 | | $id = mysql_query('ALTER TABLE '.$table.' ENGINE=InnoDB;'); |
79 | | if ($id) |
80 | | { |
81 | | echo 'done<br/>'; |
82 | | } |
83 | | else |
84 | | { |
85 | | echo 'error: '.mysql_error().'<br/>'; |
86 | | } |
87 | | } |
88 | | } |
89 | | else |
90 | | { |
91 | | echo 'error: '.mysql_error().'<br/>'; |
92 | | } |
93 | | unset($struct[$table]); |
94 | | } |
95 | | } |
96 | | if ($_REQUEST['do'] == 'reset') |
97 | | { |
98 | | unset($_SESSION['sqlinsert']); |
99 | | unset($_SESSION['doopt']); |
100 | | } |
101 | | |
102 | | if ($_REQUEST['sub'] == 'data') |
103 | | { |
104 | | if (!isset($_SESSION['sqlinsert'])) |
105 | | { |
106 | | $_SESSION['sqlinsert'] = 1; |
107 | | if (isset($_POST['opt'])) |
108 | | { |
109 | | $_SESSION['useopt'] = array(); |
110 | | foreach ($_POST['opt'] as $table => $value) |
111 | | { |
112 | | $_SESSION['useopt'][] = $table; |
113 | | } |
114 | | } |
115 | | } |
116 | | |
117 | | $i = 0; |
118 | | $did = false; |
119 | | $errors = false; |
120 | | if (!isset($_SESSION['doopt'])) |
121 | | { |
122 | | foreach ($data as $table => $files) |
123 | | { |
124 | | foreach ($files as $file) |
125 | | { |
126 | | $i++; |
127 | | if ($_SESSION['sqlinsert'] > $i) |
128 | | { |
129 | | continue; |
130 | | } |
131 | | echo 'Inserting data ('.$i.'/'.$datacnt.') into '.$table.'<br/> using file '.$file.'...<br/>'; |
132 | | |
133 | | $error = ''; |
134 | | $fp = gzopen($file, 'r'); |
135 | | $lines = 0; |
136 | | $errors = 0; |
| 61 | $table = $row[0]; |
| 62 | unset($struct[$table]); |
| 63 | } |
| 64 | |
| 65 | if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'struct') |
| 66 | { |
| 67 | foreach ($struct as $table => $structure) |
| 68 | { |
| 69 | echo 'Creating table '.$table.'...'; |
| 70 | $query = $struct[$table]; |
| 71 | if ($_SESSION['sql']['engine'] == "InnoDB") |
| 72 | { |
| 73 | $query = preg_replace('/MyISAM/', 'InnoDB', $query); |
| 74 | } |
| 75 | #echo $query; |
| 76 | $id = mysql_query($query); |
| 77 | if ($id) |
| 78 | { |
| 79 | echo 'done<br/>'; |
| 80 | } |
| 81 | else |
| 82 | { |
| 83 | echo 'error: '.mysql_error().'<br/>'; |
| 84 | } |
| 85 | unset($struct[$table]); |
| 86 | } |
| 87 | } |
| 88 | if (!empty($_REQUEST['do']) && $_REQUEST['do'] == 'reset') |
| 89 | { |
| 90 | unset($_SESSION['sqlinsert']); |
| 91 | unset($_SESSION['doopt']); |
| 92 | } |
| 93 | |
| 94 | if (!empty($_REQUEST['sub']) && $_REQUEST['sub'] == 'data') |
| 95 | { |
| 96 | if (!isset($_SESSION['sqlinsert'])) |
| 97 | { |
| 98 | $_SESSION['sqlinsert'] = 1; |
| 99 | if (isset($_POST['opt'])) |
| 100 | { |
| 101 | $_SESSION['useopt'] = array(); |
| 102 | foreach ($_POST['opt'] as $table => $value) |
| 103 | { |
| 104 | $_SESSION['useopt'][] = $table; |
| 105 | } |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | $i = 0; |
| 110 | $did = false; |
| 111 | $errors = false; |
| 112 | if (!isset($_SESSION['doopt'])) |
| 113 | { |
| 114 | foreach ($data as $table => $files) |
| 115 | { |
| 116 | foreach ($files as $file) |
| 117 | { |
| 118 | $i++; |
| 119 | if ($_SESSION['sqlinsert'] > $i) |
| 120 | { |
| 121 | continue; |
| 122 | } |
| 123 | echo 'Inserting data ('.$i.'/'.$datacnt.') into '.$table.'<br/> using file '.$file.'...<br/>'; |
| 124 | |
| 125 | $error = ''; |
| 126 | $fp = gzopen($file, 'r'); |
| 127 | $lines = 0; |
| 128 | $errors = 0; |
139 | | while ($query = gzgets($fp, 4000)) |
140 | | { |
141 | | $text .= $query; |
142 | | if (substr($text, -3, 1) != ';') |
143 | | { |
144 | | continue; |
145 | | } |
146 | | $query = $text; |
147 | | $text = ''; |
148 | | $lines++; |
149 | | if (trim($query)) |
150 | | { |
151 | | $query = trim($query); |
152 | | if (substr($query, -1, 1) == ';') |
153 | | { |
154 | | $query = substr($query, 0, -1); |
155 | | } |
156 | | $query_count++; |
157 | | $id = mysql_query($query); |
158 | | #echo $query; |
159 | | if (!$id) |
160 | | { |
161 | | $error .= 'error: '.mysql_error().'<br/>'; |
162 | | $errors++; |
163 | | } |
164 | | } |
165 | | } |
166 | | echo '<br/>File '.$file.' had '.$lines.' lines with '.$query_count.' queries.<br/> '.$errors.' Queries failed.<br/>'; |
167 | | if (!$error) |
168 | | { |
169 | | echo '<br/>Finished importing of this file.<br/>'; |
170 | | echo '<meta http-equiv="refresh" content="1; URL=?step=4&sub=data" />'; |
171 | | echo 'Automatic reload in 1s for next chunk. <a href="?step=4&sub=data">Manual Link</a><br/>'; |
172 | | } |
173 | | else |
174 | | { |
175 | | echo $error; |
176 | | echo '<meta http-equiv="refresh" content="20; URL=?step=4&sub=data" />'; |
177 | | echo 'Automatic reload in 20s for next chunk because an error occurred. <a href="?step=4&sub=data">Manual Link</a><br/>'; |
178 | | } |
179 | | $_SESSION['sqlinsert']++; |
180 | | |
181 | | $did = true; |
182 | | break 2; |
183 | | } |
184 | | } |
185 | | } |
186 | | |
187 | | if (isset($_SESSION['useopt']) && !$did) |
188 | | { |
189 | | $i = 0; |
190 | | if (!isset($_SESSION['doopt'])) |
191 | | { |
192 | | $_SESSION['doopt'] = true; |
193 | | $_SESSION['sqlinsert'] = 1; |
194 | | } |
| 131 | mysql_query("START TRANSACTION"); |
| 132 | while ($query = gzgets($fp, 4000)) |
| 133 | { |
| 134 | $text .= $query; |
| 135 | if (substr(trim($query), -1, 1) != ';') |
| 136 | { |
| 137 | continue; |
| 138 | } |
| 139 | $query = $text; |
| 140 | $text = ''; |
| 141 | $lines++; |
| 142 | if (trim($query)) |
| 143 | { |
| 144 | $query = trim($query); |
| 145 | if (substr($query, -1, 1) == ';') |
| 146 | { |
| 147 | $query = substr($query, 0, -1); |
| 148 | } |
| 149 | if (strpos($query, 'TRUNCATE') !== FALSE) |
| 150 | { |
| 151 | mysql_query("COMMIT"); |
| 152 | } |
| 153 | $query_count++; |
| 154 | $id = mysql_query($query); |
| 155 | if (strpos($query, 'TRUNCATE') !== FALSE) |
| 156 | { |
| 157 | mysql_query("START TRANSACTION"); |
| 158 | } |
| 159 | #echo $query; |
| 160 | if (!$id) |
| 161 | { |
| 162 | $error .= 'error: '.mysql_error().'<br/>'; |
| 163 | $errors++; |
| 164 | } |
| 165 | } |
| 166 | } |
| 167 | mysql_query("COMMIT"); |
| 168 | echo '<br/>File '.$file.' had '.$lines.' lines with '.$query_count.' queries.<br/> '.$errors.' Queries failed.<br/>'; |
| 169 | if (!$error) |
| 170 | { |
| 171 | echo '<br/>Finished importing of this file.<br/>'; |
| 172 | echo '<meta http-equiv="refresh" content="1; URL=?step=4&sub=data" />'; |
| 173 | echo 'Automatic reload in 1s for next chunk. <a href="?step=4&sub=data">Manual Link</a><br/>'; |
| 174 | } |
| 175 | else |
| 176 | { |
| 177 | echo $error; |
| 178 | echo '<meta http-equiv="refresh" content="20; URL=?step=4&sub=data" />'; |
| 179 | echo 'Automatic reload in 20s for next chunk because an error occurred. <a href="?step=4&sub=data">Manual Link</a><br/>'; |
| 180 | } |
| 181 | $_SESSION['sqlinsert']++; |
| 182 | |
| 183 | $did = true; |
| 184 | break 2; |
| 185 | } |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | if (isset($_SESSION['useopt']) && !$did) |
| 190 | { |
| 191 | $i = 0; |
| 192 | if (!isset($_SESSION['doopt'])) |
| 193 | { |
| 194 | $_SESSION['doopt'] = true; |
| 195 | $_SESSION['sqlinsert'] = 1; |
| 196 | } |
196 | | foreach ($opt as $table => $files) |
197 | | { |
198 | | if (!in_array($table, $_SESSION['useopt'])) |
199 | | { |
200 | | continue; |
201 | | } |
202 | | foreach ($files as $file) |
203 | | { |
204 | | $optsel++; |
205 | | } |
206 | | } |
207 | | foreach ($opt as $table => $files) |
208 | | { |
209 | | if (!in_array($table, $_SESSION['useopt'])) |
210 | | { |
211 | | continue; |
212 | | } |
213 | | foreach ($files as $file) |
214 | | { |
215 | | $i++; |
216 | | if ($_SESSION['sqlinsert'] > $i) |
217 | | { |
218 | | continue; |
219 | | } |
220 | | echo '<br/>Inserting optional data ('.$i.'/'.$optsel.') into '.$table.'<br/> using file '.$file.'...'; |
221 | | $fp = gzopen($file, 'r'); |
| 198 | foreach ($opt as $table => $files) |
| 199 | { |
| 200 | if (!in_array($table, $_SESSION['useopt'])) |
| 201 | { |
| 202 | continue; |
| 203 | } |
| 204 | foreach ($files as $file) |
| 205 | { |
| 206 | $optsel++; |
| 207 | } |
| 208 | } |
| 209 | foreach ($opt as $table => $files) |
| 210 | { |
| 211 | if (!in_array($table, $_SESSION['useopt'])) |
| 212 | { |
| 213 | continue; |
| 214 | } |
| 215 | foreach ($files as $file) |
| 216 | { |
| 217 | $i++; |
| 218 | if ($_SESSION['sqlinsert'] > $i) |
| 219 | { |
| 220 | continue; |
| 221 | } |
| 222 | echo '<br/>Inserting optional data ('.$i.'/'.$optsel.') into '.$table.'<br/> using file '.$file.'...'; |
| 223 | $fp = gzopen($file, 'r'); |
223 | | while ($query = gzgets($fp, 4000)) |
224 | | { |
225 | | $text .= $query; |
226 | | if (substr($text, -3, 1) != ';') |
227 | | { |
228 | | continue; |
229 | | } |
230 | | $query = $text; |
231 | | $text = ''; |
232 | | $query = trim($query); |
233 | | if ($query) |
234 | | { |
235 | | if (substr($query, -1, 1) == ';') |
236 | | { |
237 | | $query = substr($query, 0, -1); |
238 | | } |
239 | | $id = mysql_query($query); |
240 | | #echo $query; |
241 | | } |
242 | | } |
243 | | if ($id) |
244 | | { |
245 | | echo 'done<br/>'; |
246 | | } |
247 | | else |
248 | | { |
249 | | echo 'error: '.mysql_error().'<br/>'; |
250 | | } |
251 | | $_SESSION['sqlinsert']++; |
252 | | echo '<meta http-equiv="refresh" content="1; URL=?step=4&sub=data" />'; |
253 | | echo 'Automatic reload in 1s for next chunk. <a href="?step=4&sub=data">Manual Reload</a><br/>'; |
254 | | $did = true; |
255 | | break 2; |
256 | | } |
257 | | } |
258 | | } |
259 | | if (!$did) |
260 | | { |
261 | | $stoppage = false; |
262 | | $failed = 0; |
263 | | echo 'All tables imported. Checking tables for correct data...<br/>'; |
264 | | foreach ($kb['kb3']['table'] as $line) |
265 | | { |
266 | | $table = $line['name']; |
267 | | $count = $line['rows']; |
268 | | echo 'Checking table '.$table.': '; |
269 | | $result = mysql_query('SELECT count(*) as cnt FROM '.$table); |
270 | | $test = mysql_fetch_array($result); |
271 | | if ($test['cnt'] != $count && $count != 0) |
272 | | { |
273 | | echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>'; |
274 | | $failed++; |
275 | | } |
276 | | else |
277 | | { |
278 | | echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>'; |
279 | | } |
280 | | echo '<br/>'; |
281 | | } |
282 | | if ($stoppage) |
283 | | { |
284 | | echo 'There has been an error with one of the tables, please <a href="?step=4&do=reset">Reset</a> and try again.<br/>'; |
285 | | } |
286 | | else |
287 | | { |
288 | | echo '<br/>All tables passed.<br/>'; |
289 | | echo 'You can now create or search your corporation/alliance: <a href="?step=5">Next Step</a><br/>'; |
290 | | } |
291 | | } |
292 | | echo '<br/>Use <a href="?step=4&sub=datasel&do=reset">Reset</a> to step back to the sql-opt select.<br/>'; |
| 225 | mysql_query("START TRANSACTION"); |
| 226 | while ($query = gzgets($fp, 4000)) |
| 227 | { |
| 228 | $text .= $query; |
| 229 | if (substr(trim($query), -1, 1) != ';') |
| 230 | { |
| 231 | continue; |
| 232 | } |
| 233 | $query = $text; |
| 234 | $text = ''; |
| 235 | $query = trim($query); |
| 236 | if ($query) |
| 237 | { |
| 238 | if (substr($query, -1, 1) == ';') |
| 239 | { |
| 240 | $query = substr($query, 0, -1); |
| 241 | } |
| 242 | if (strpos($query, 'TRUNCATE') !== FALSE) |
| 243 | { |
| 244 | mysql_query("COMMIT"); |
| 245 | } |
| 246 | $id = mysql_query($query); |
| 247 | if (strpos($query, 'TRUNCATE') !== FALSE) |
| 248 | { |
| 249 | mysql_query("START TRANSACTION"); |
| 250 | } |
| 251 | #echo $query; |
| 252 | } |
| 253 | } |
| 254 | mysql_query("COMMIT"); |
| 255 | if ($id) |
| 256 | { |
| 257 | echo 'done<br/>'; |
| 258 | } |
| 259 | else |
| 260 | { |
| 261 | echo 'error: '.mysql_error().'<br/>'; |
| 262 | } |
| 263 | $_SESSION['sqlinsert']++; |
| 264 | echo '<meta http-equiv="refresh" content="1; URL=?step=4&sub=data" />'; |
| 265 | echo 'Automatic reload in 1s for next chunk. <a href="?step=4&sub=data">Manual Reload</a><br/>'; |
| 266 | $did = true; |
| 267 | break 2; |
| 268 | } |
| 269 | } |
| 270 | } |
| 271 | if (!$did) |
| 272 | { |
| 273 | $stoppage = false; |
| 274 | $failed = 0; |
| 275 | echo 'All tables imported. Checking tables for correct data...<br/>'; |
| 276 | foreach ($kb['kb3']['table'] as $line) |
| 277 | { |
| 278 | $table = $line['name']; |
| 279 | $count = $line['rows']; |
| 280 | echo 'Checking table '.$table.': '; |
| 281 | $result = mysql_query('SELECT count(*) as cnt FROM '.$table); |
| 282 | $test = mysql_fetch_array($result); |
| 283 | if ($test['cnt'] != $count && $count != 0) |
| 284 | { |
| 285 | echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>'; |
| 286 | $failed++; |
| 287 | } |
| 288 | else |
| 289 | { |
| 290 | echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>'; |
| 291 | } |
| 292 | echo '<br/>'; |
| 293 | } |
| 294 | if ($stoppage) |
| 295 | { |
| 296 | echo 'There has been an error with one of the tables, please <a href="?step=4&do=reset">Reset</a> and try again.<br/>'; |
| 297 | } |
| 298 | else |
| 299 | { |
| 300 | echo '<br/>All tables passed.<br/>'; |
| 301 | echo 'You can now create or search your corporation/alliance: <a href="?step=5">Next Step</a><br/>'; |
| 302 | } |
| 303 | } |
| 304 | echo '<br/>Use <a href="?step=4&sub=datasel&do=reset">Reset</a> to step back to the sql-opt select.<br/>'; |
303 | | echo 'Table struct has to be added: '.$table.'<br/>'; |
304 | | $structadd++; |
305 | | } |
306 | | if (!$structadd && $_REQUEST['sub'] != 'datasel' && $_REQUEST['sub'] != 'data') |
307 | | { |
308 | | echo 'All table structures seem to be in the database.<br/>'; |
309 | | # echo 'I will now check some table structures in case you are upgrading from a previous version... '; |
310 | | # include('install_step4_tblchk.php'); |
311 | | echo 'Please continue with <a href="?step=4&sub=datasel">Importing Data</a><br/>'; |
312 | | |
313 | | echo '<br/><br/>If you have aborted the install and you already have the data in those tables, you can bypass the import now with <a href="?step=5">this link</a><br/>'; |
314 | | echo 'To be sure, I will check some table data for you now:<br/><br/>'; |
315 | | foreach ($kb['kb3']['table'] as $line) |
316 | | { |
317 | | $table = $line['name']; |
318 | | $count = $line['rows']; |
319 | | echo 'Checking table '.$table.': '; |
320 | | $result = mysql_query('SELECT count(*) as cnt FROM '.$table); |
321 | | $test = mysql_fetch_array($result); |
322 | | |
323 | | if ($test['cnt'] != $count && $count != 0) |
324 | | { |
325 | | echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>'; |
326 | | $failed++; |
327 | | } |
328 | | else |
329 | | { |
330 | | echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>'; |
331 | | } |
332 | | echo '<br/>'; |
333 | | } |
334 | | if ($failed == 0) |
335 | | { |
336 | | echo '<br/>All important table data seems to be there. You are safe to bypass the import.<br/>'; |
337 | | } |
338 | | else |
339 | | { |
340 | | echo '<br/>There was an error in one of the important tables. Please run the import.<br/>'; |
341 | | } |
| 315 | echo 'Table struct has to be added: '.$table.'<br/>'; |
| 316 | $structadd++; |
| 317 | } |
| 318 | if (!$structadd && (empty($_REQUEST['sub']) || ($_REQUEST['sub'] != 'datasel' && $_REQUEST['sub'] != 'data'))) |
| 319 | //if (!$structadd && $_REQUEST['sub'] != 'datasel' && $_REQUEST['sub'] != 'data') |
| 320 | { |
| 321 | echo 'All table structures seem to be in the database.<br/>'; |
| 322 | # echo 'I will now check some table structures in case you are upgrading from a previous version... '; |
| 323 | # include('install_step4_tblchk.php'); |
| 324 | echo 'Please continue with <a href="?step=4&sub=datasel">Importing Data</a><br/>'; |
| 325 | |
| 326 | echo '<br/><br/>If you have aborted the install and you already have the data in those tables, you can bypass the import now with <a href="?step=5">this link</a><br/>'; |
| 327 | echo 'To be sure, I will check some table data for you now:<br/><br/>'; |
| 328 | foreach ($kb['kb3']['table'] as $line) |
| 329 | { |
| 330 | $table = $line['name']; |
| 331 | $count = $line['rows']; |
| 332 | echo 'Checking table '.$table.': '; |
| 333 | $result = mysql_query('SELECT count(*) as cnt FROM '.$table); |
| 334 | $test = mysql_fetch_array($result); |
| 335 | |
| 336 | if ($test['cnt'] != $count && $count != 0) |
| 337 | { |
| 338 | echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>'; |
| 339 | $failed++; |
| 340 | } |
| 341 | else |
| 342 | { |
| 343 | echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>'; |
| 344 | } |
| 345 | echo '<br/>'; |
| 346 | } |
| 347 | if ($failed == 0) |
| 348 | { |
| 349 | echo '<br/>All important table data seems to be there. You are safe to bypass the import.<br/>'; |
| 350 | } |
| 351 | else |
| 352 | { |
| 353 | echo '<br/>There was an error in one of the important tables. Please run the import.<br/>'; |
| 354 | } |