root/dev/install/install_step40.php @ 267

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

Config file is now saved as 440.
The upgrader should now drop tables at initial call of step40.

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