root/dev/install/install_step40.php @ 261

Revision 261, 11.7 KB (checked in by exi, 15 years ago)

Fix for a fatal during upgrade.

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