root/dev/install/install_step40.php @ 400

Revision 400, 11.8 KB (checked in by kovell, 13 years ago)

Fixes: install is locked after first run, private cache files made inaccesible, initial summary caching removed from kill posting, board will not attempt to run on MySQL < 4.1, PILOT_ID cannot be set, legacy option removed from admin panel, pos values added to installation defaults

Line 
1<?php
2if(!$installrunning) {header('Location: index.php');die();}
3$stoppage = true;
4include('../common/includes/php_compat.php');
5include('../common/includes/class.xml.php');
6require('../config.php');
7include('../common/includes/class.db.php');
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 '<br/>File '.$file.' had '.$lines.' lines with '.$query_count.' querys.<br/> '.$errors.' Querys failed.<br/>';
164                if (!$error)
165                {
166                    echo '<br/>Finished importing of this file.<br/>';
167                    echo '<meta http-equiv="refresh" content="1; URL=?step=40&sub=data" />';
168                    echo 'Automatic reload in 1s for next chunk. <a href="?step=40&sub=data">Manual Link</a><br/>';
169                }
170                else
171                {
172                    echo $error;
173                    echo '<meta http-equiv="refresh" content="20; URL=?step=40&sub=data" />';
174                    echo 'Automatic reload in 20s for next chunk because an 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 '<br/>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=40&sub=data" />';
248                echo 'Automatic reload in 1s for next chunk. <a href="?step=40&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=40&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=41">Next Step</a><br/>';
285        }
286    }
287    echo '<br/>Use <a href="?step=40&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;
295$failed = 0;
296
297foreach ($struct as $table => $file)
298{
299    echo 'Table struct has to be added: '.$table.'<br/>';
300    $structadd++;
301}
302if (!$structadd && $_REQUEST['sub'] != 'datasel' && $_REQUEST['sub'] != 'data')
303{
304    echo 'All table structures seem to be in the database.<br/><br/>';
305#    echo 'I will now check some table structures in case you are upgrading from a previous version... ';
306#    include('install_step4_tblchk.php');
307    echo 'Please continue with <a href="?step=40&sub=datasel">Importing Data</a><br/>';
308
309    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=41">this link</a><br/>';
310    echo 'To be sure, I will check some table data for you now:<br/><br/>';
311
312    foreach ($kb['kb3']['table'] as $line)
313    {
314        $table = $line['name'];
315        $count = $line['rows'];
316        echo 'Checking table '.$table.': ';
317        $result = mysql_query('SELECT count(*) as cnt FROM '.$table);
318        $test = mysql_fetch_array($result);
319        if ($test['cnt'] != $count && $count != 0)
320        {
321            echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>';
322            $failed++;
323        }
324        else
325        {
326            echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>';
327        }
328        echo '<br/>';
329    }
330    if ($failed == 0)
331    {
332        echo '<br/>All important table data seems to be there. You are safe to bypass the import.<br/>';
333    }
334    else
335    {
336        echo 'There was an error in one of the important tables. Please run the import.<br/>';
337    }
338}
339elseif ($structadd)
340{
341    echo 'Some table structures have to be added. Please continue with <a href="?step=40&sub=struct">Creating Tables</a><br/>';
342}
343
344if ($_REQUEST['sub'] == 'datasel')
345{
346?>
347<p>Please select optional SQL data to be inserted into the database:<br/></p>
348<form id="options" name="options" method="post" action="?step=40">
349<input type="hidden" name="step" value="40">
350<input type="hidden" name="sub" value="data">
351<table class="kb-subtable">
352<?php
353    foreach ($opt as $table => $files)
354    {
355?>
356<tr><td width="120"><b><?php echo $table; ?></b></td><td><input type="checkbox" name="opt[<?php echo $table; ?>]"></td></tr>
357<?php
358    }
359    ?>
360<tr><td width="120"></td><td><input type=submit name=submit value="Ok"></td></tr>
361</table>
362<?php
363}
364?>
365<?php if ($stoppage)
366{
367    return;
368}?>
369<p><a href="?step=<?php echo ($_SESSION['state']+1); ?>">Next Step</a></p>
Note: See TracBrowser for help on using the browser.