root/dev/install/install_step40.php @ 254

Revision 254, 11.2 KB (checked in by exi, 13 years ago)

Merging 242:253 branch into dev

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