root/dev/install/install_step4.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();}
3if (file_exists('../config.php'))
4{
5    echo 'Redirecting you to the Update page, please wait.<br/>';
6    echo '<meta http-equiv="refresh" content="1; URL=?step=40&action=drop" />';
7    return;
8}
9
10$stoppage = true;
11include('../common/includes/php_compat.php');
12include('../common/includes/class.xml.php');
13
14echo 'Reading packages...';
15$xml = new sxml();
16$kb = $xml->parse(file_get_contents('../packages/database/contents.xml'));
17
18$struct = $opt = $data = array();
19$tables = array();
20foreach($kb['kb3']['table'] as $idx => $tbl)
21{
22    $table = $tbl['name'];
23    $files = array();
24    $dir = opendir('../packages/database/'.$table);
25
26    $xml = new sxml();
27    $st = $xml->parse(file_get_contents('../packages/database/'.$table.'/table.xml'));
28    $struct[$table] = $st['kb3']['structure'];
29    $kb['kb3']['table'][$idx]['rows'] = $st['kb3']['rows'];
30    $structc++;
31
32    while ($file = readdir($dir))
33    {
34        if ($file == '.' || $file == '..' || $file == '.svn')
35        {
36            continue;
37        }
38        if (strpos($file, '_opt_'))
39        {
40            $dcnt++;
41            $optcnt++;
42            $opt[$table][] = '../packages/database/'.$table.'/'.$file;
43            asort($opt[$table]);
44        }
45        elseif (!strpos($file, 'xml'))
46        {
47            $dcnt++;
48            $datacnt++;
49            $data[$table][] = '../packages/database/'.$table.'/'.$file;
50            asort($data[$table]);
51        }
52    }
53}
54
55$db = mysql_connect($_SESSION['sql']['host'], $_SESSION['sql']['user'], $_SESSION['sql']['pass']);
56mysql_select_db($_SESSION['sql']['db']);
57$result = mysql_query('show tables');
58while ($row = mysql_fetch_row($result))
59{
60    $table = $row[0];
61    unset($struct[$table]);
62}
63
64if ($_REQUEST['sub'] == 'struct')
65{
66    foreach ($struct as $table => $structure)
67    {
68        echo 'Creating table '.$table.'...';
69        $query = $struct[$table];
70        #echo $query;
71        $id = mysql_query($query);
72        if ($id)
73        {
74            echo 'done<br/>';
75                if ($_SESSION['sql']['engine'] == "InnoDB"){
76                        echo 'Altering table '. $table .' into InnoDB...';
77                        $id = mysql_query('ALTER TABLE '.$table.' ENGINE=InnoDB;');
78                        if ($id)
79                        {
80                            echo 'done<br/>';
81                        }
82                        else
83                        {
84                        echo 'error: '.mysql_error().'<br/>';
85                        }       
86                }
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.' queries.<br/> '.$errors.' Queries 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=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 an error occurred. <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=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        $failed = 0;
258        echo 'All tables imported. Checking tables for correct data...<br/>';
259        foreach ($kb['kb3']['table'] as $line)
260        {
261            $table = $line['name'];
262            $count = $line['rows'];
263            echo 'Checking table '.$table.': ';
264            $result = mysql_query('SELECT count(*) as cnt FROM '.$table);
265            $test = mysql_fetch_array($result);
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;
295$failed = 0;
296foreach ($struct as $table => $file)
297{
298    echo 'Table struct has to be added: '.$table.'<br/>';
299    $structadd++;
300}
301if (!$structadd && $_REQUEST['sub'] != 'datasel' && $_REQUEST['sub'] != 'data')
302{
303    echo 'All table structures seem to be in the database.<br/>';
304#    echo 'I will now check some table structures in case you are upgrading from a previous version... ';
305#    include('install_step4_tblchk.php');
306    echo 'Please continue with <a href="?step=4&sub=datasel">Importing Data</a><br/>';
307
308    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=5">this link</a><br/>';
309    echo 'To be sure, I will check some table data for you now:<br/><br/>';
310    foreach ($kb['kb3']['table'] as $line)
311    {
312        $table = $line['name'];
313        $count = $line['rows'];
314        echo 'Checking table '.$table.': ';
315        $result = mysql_query('SELECT count(*) as cnt FROM '.$table);
316        $test = mysql_fetch_array($result);
317       
318        if ($test['cnt'] != $count && $count != 0)
319        {
320            echo $test['cnt'].'/'.$count.' - <font color="red"><b>FAILED</b></font>';
321            $failed++;
322        }
323        else
324        {
325            echo $test['cnt'].'/'.$count.' - <font color="green"><b>PASSED</b></font>';
326        }
327        echo '<br/>';
328    }
329    if ($failed == 0)
330    {
331        echo '<br/>All important table data seems to be there. You are safe to bypass the import.<br/>';
332    }
333    else
334    {
335        echo '<br/>There was an error in one of the important tables. Please run the import.<br/>';
336    }
337}
338elseif ($structadd)
339{
340    echo 'Some table structures have to be added. Please continue with <a href="?step=4&sub=struct">Creating Tables</a><br/>';
341}
342
343if ($_REQUEST['sub'] == 'datasel')
344{
345?>
346<p>Please select optional SQL data to be inserted into the database:<br/></p>
347<form id="options" name="options" method="post" action="?step=4">
348<input type="hidden" name="step" value="4">
349<input type="hidden" name="sub" value="data">
350<table class="kb-subtable">
351<?php
352    foreach ($opt as $table => $files)
353    {
354?>
355<tr><td width="120"><b><?php echo $table; ?></b></td><td><input type="checkbox" name="opt[<?php echo $table; ?>]"></td></tr>
356<?php
357    }
358    ?>
359<tr><td width="120"></td><td><input type=submit name=submit value="Ok"></td></tr>
360</table>
361<?php
362}
363?>
364<?php if ($stoppage)
365{
366    return;
367}?>
368<p><a href="?step=<?php echo ($_SESSION['state']+1); ?>">Next Step</a></p>
Note: See TracBrowser for help on using the browser.