root/dev/install/install_step4.php @ 133

Revision 133, 10.0 KB (checked in by exi, 14 years ago)

Reduced one potential sql-bug.
Added ability to identify items as t2 via their techlevel rather than just 'II'.
Fixed item location 0 to not cause skipping that item.
Added anzahl/quantity-replace for the german killpreparser.
Fixed final blow award to show correct numbers.
Removed unnecessary code from db.php.
Added a table data check to the sql importer and made the importer more verbose, this should minimize support requests caused by empty table data.
Fixed a small misalignment of the comment block.

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