root/dev/install/install_step4.php @ 254

Revision 254, 11.3 KB (checked in by exi, 15 years ago)

Merging 242:253 branch into dev

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