root/dev/install/install_step40.php @ 255

Revision 255, 11.5 KB (checked in by exi, 13 years ago)

Update for installer, drop some tables instead of fixing them.

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