root/dev/install/install_step40.php @ 324

Revision 270, 11.7 KB (checked in by exi, 13 years ago)

Missed a form element

Line 
1<?php
2$stoppage = true;
3include('../common/includes/php_compat.php');
4include('../common/includes/class.xml.php');
5require('../config.php');
6include('../common/includes/class.db.php');
7
8echo 'Reading packages...';
9$xml = new sxml();
10$kb = $xml->parse(file_get_contents('../packages/database/contents.xml'));
11
12$struct = $opt = $data = array();
13$tables = array();
14foreach($kb['kb3']['table'] as $idx => $tbl)
15{
16    $table = $tbl['name'];
17    $files = array();
18    $dir = opendir('../packages/database/'.$table);
19
20    $xml = new sxml();
21    $st = $xml->parse(file_get_contents('../packages/database/'.$table.'/table.xml'));
22    $struct[$table] = $st['kb3']['structure'];
23    $kb['kb3']['table'][$idx]['rows'] = $st['kb3']['rows'];
24    $structc++;
25
26    while ($file = readdir($dir))
27    {
28        if ($file == '.' || $file == '..' || $file == '.svn')
29        {
30            continue;
31        }
32        if (strpos($file, '_opt_'))
33        {
34            $dcnt++;
35            $optcnt++;
36            $opt[$table][] = '../packages/database/'.$table.'/'.$file;
37            asort($opt[$table]);
38        }
39        elseif (!strpos($file, 'xml'))
40        {
41            $dcnt++;
42            $datacnt++;
43            $data[$table][] = '../packages/database/'.$table.'/'.$file;
44            asort($data[$table]);
45        }
46    }
47}
48
49$db = mysql_connect($_SESSION['sql']['host'], $_SESSION['sql']['user'], $_SESSION['sql']['pass']);
50mysql_select_db($_SESSION['sql']['db']);
51
52if ($_REQUEST['action'] == 'drop')
53{
54    echo 'Running database checks... ';
55    include('install_step40_tblchk.php');
56    echo 'done<br/>';
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=40&sub=data" />';
167                    echo 'Automatic reload in 1s for next chunk. <a href="?step=40&sub=data">Manual Link</a><br/>';
168                }
169                else
170                {
171                    echo $error;
172                    echo '<meta http-equiv="refresh" content="20; URL=?step=40&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                    $text = '';
226                    $query = trim($query);
227                    if ($query)
228                    {
229                        if (substr($query, -1, 1) == ';')
230                        {
231                            $query = substr($query, 0, -1);
232                        }
233                        $id = mysql_query($query);
234                        #echo $query;
235                    }
236                }
237                if ($id)
238                {
239                    echo 'done<br/>';
240                }
241                else
242                {
243                    echo 'error: '.mysql_error().'<br/>';
244                }
245                $_SESSION['sqlinsert']++;
246                echo '<meta http-equiv="refresh" content="1; URL=?step=40&sub=data" />';
247                echo 'Automatic reload in 1s for next chunk. <a href="?step=40&sub=data">Manual Reload</a><br/>';
248                $did = true;
249                break 2;
250            }
251        }
252    }
253    if (!$did)
254    {
255        $stoppage = false;
256        echo 'All tables imported. Checking tables for correct data...<br/>';
257        foreach ($kb['kb3']['table'] as $line)
258        {
259            $table = $line['name'];
260            $count = $line['rows'];
261            echo 'Checking table '.$table.': ';
262            $result = mysql_query('SELECT count(*) as cnt FROM '.$table);
263            $test = mysql_fetch_array($result);
264            $failed = 0;
265            if ($test['cnt'] != $count && $count != 0)
266            {
267                echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>';
268                $failed++;
269            }
270            else
271            {
272                echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>';
273            }
274            echo '<br/>';
275        }
276        if ($stoppage)
277        {
278            echo 'There has been an error with one of the tables, please <a href="?step=40&do=reset">Reset</a> and try again.<br/>';
279        }
280        else
281        {
282            echo '<br/>All tables passed.<br/>';
283            echo 'You can now create or search your corporation/alliance: <a href="?step=41">Next Step</a><br/>';
284        }
285    }
286    echo '<br/>Use <a href="?step=40&sub=datasel&do=reset">Reset</a> to step back to the sql-opt select.<br/>';
287}
288?>
289<div class="block-header2">MySQL Data Import</div>
290Found <?php echo $structc; ?> table structures and <?php echo $dcnt; ?> data files for <?php echo count($opt)+count($data); ?> tables.<br/>
291<?php
292
293$structadd = 0;
294foreach ($struct as $table => $file)
295{
296    echo 'Table struct has to be added: '.$table.'<br/>';
297    $structadd++;
298}
299if (!$structadd && $_REQUEST['sub'] != 'datasel' && $_REQUEST['sub'] != 'data')
300{
301    echo 'All table structures seem to be in the database.<br/>';
302#    echo 'I will now check some table structures in case you are upgrading from a previous version... ';
303#    include('install_step4_tblchk.php');
304    echo 'Please continue with <a href="?step=40&sub=datasel">Importing Data</a><br/>';
305
306    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=41">this link</a><br/>';
307    echo 'To be sure i will check some table data for you now:<br/>';
308    foreach ($kb['kb3']['table'] as $line)
309    {
310        $table = $line['name'];
311        $count = $line['rows'];
312        echo 'Checking table '.$table.': ';
313        $result = mysql_query('SELECT count(*) as cnt FROM '.$table);
314        $test = mysql_fetch_array($result);
315        $failed = 0;
316        if ($test['cnt'] != $count && $count != 0)
317        {
318            echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>';
319            $failed++;
320        }
321        else
322        {
323            echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>';
324        }
325        echo '<br/>';
326    }
327    if ($failed == 0)
328    {
329        echo 'All important table data seems to be there, you are safe to bypass the import.<br/>';
330    }
331    else
332    {
333        echo 'There was an error in one of the important tables, please run the import.<br/>';
334    }
335}
336elseif ($structadd)
337{
338    echo 'Some table structures have to be added, please continue with <a href="?step=40&sub=struct">Creating Tables</a><br/>';
339}
340
341if ($_REQUEST['sub'] == 'datasel')
342{
343?>
344<p>Please select optional SQL data to be inserted into the database:<br/></p>
345<form id="options" name="options" method="post" action="?step=40">
346<input type="hidden" name="step" value="40">
347<input type="hidden" name="sub" value="data">
348<table class="kb-subtable">
349<?php
350    foreach ($opt as $table => $files)
351    {
352?>
353<tr><td width="120"><b><?php echo $table; ?></b></td><td><input type="checkbox" name="opt[<?php echo $table; ?>]"></td></tr>
354<?php
355    }
356    ?>
357<tr><td width="120"></td><td><input type=submit name=submit value="Ok"></td></tr>
358</table>
359<?php
360}
361?>
362<?php if ($stoppage)
363{
364    return;
365}?>
366<p><a href="?step=<?php echo ($_SESSION['state']+1); ?>">Next Step</a></p>
Note: See TracBrowser for help on using the browser.