Rev 9 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9 | Rev 14 | ||
---|---|---|---|
1 | <?php |
1 | <?php |
2 | 2 | ||
3 | if (!defined('IBLEGAL')) die('Kann nicht ohne Personal WebBase ausgeführt werden.'); |
3 | if (!defined('WBLEGAL')) die('Kann nicht ohne Personal WebBase ausgeführt werden.'); |
4 | 4 | ||
5 | // Auslesen der Datenbanktabellen und deren Felder |
5 | // Auslesen der Datenbanktabellen und deren Felder |
6 | 6 | ||
7 | $datenbanktabellen = array(); |
7 | $datenbanktabellen = array(); |
8 | $qs = db_query('SHOW TABLES'); |
8 | $qs = db_query('SHOW TABLES'); |
9 | while ($qr = db_fetch($qs)) |
9 | while ($qr = db_fetch($qs)) |
10 | { |
10 | { |
11 | $qs2 = db_query("SHOW FIELDS FROM `".db_escape($qr[0])."`"); |
11 | $qs2 = db_query("SHOW FIELDS FROM `".db_escape($qr[0])."`"); |
12 | while ($qr2 = db_fetch($qs2)) |
12 | while ($qr2 = db_fetch($qs2)) |
13 | { |
13 | { |
14 | $datenbanktabellen[$qr[0]][$qr2[0]] = $qr2[1].'/'.$qr2[2].'/'.$qr2[3].'/'.$qr2[4].'/'.$qr2[5]; |
14 | $datenbanktabellen[$qr[0]][$qr2[0]] = $qr2[1].'/'.$qr2[2].'/'.$qr2[3].'/'.$qr2[4].'/'.$qr2[5]; |
15 | } |
15 | } |
16 | } |
16 | } |
17 | 17 | ||
18 | // Important, must exist |
18 | // Important, must exist |
19 | 19 | ||
20 | if (!array_key_exists($mysql_zugangsdaten['praefix'].'module', $datenbanktabellen)) { |
20 | if (!array_key_exists($mysql_zugangsdaten['praefix'].'module', $datenbanktabellen)) { |
21 | $tabellen = array(); |
21 | $tabellen = array(); |
22 | ib_newdatabasetable('module', 'admin_module', 'modul', "varchar(255) NOT NULL default ''", |
22 | ib_newdatabasetable('module', 'admin_module', 'modul', "varchar(255) NOT NULL default ''", |
23 | 'table', "varchar(255) NOT NULL default ''"); |
23 | 'table', "varchar(255) NOT NULL default ''"); |
24 | } |
24 | } |
25 | 25 | ||
26 | if (function_exists('set_searchable')) set_searchable($m2, 'module', 0); |
26 | if (function_exists('set_searchable')) set_searchable($m2, 'module', 0); |
27 | 27 | ||
28 | my_add_key($mysql_zugangsdaten['praefix'].'module', 'table', true, 'table'); |
28 | my_add_key($mysql_zugangsdaten['praefix'].'module', 'table', true, 'table'); |
29 | 29 | ||
30 | // Array $tabellen erstellen und dabei ungültige Einträge der Modultabelle entfernen... |
30 | // Array $tabellen erstellen und dabei ungültige Einträge der Modultabelle entfernen... |
31 | 31 | ||
32 | $tabellen = array(); |
32 | $tabellen = array(); |
33 | $res = db_query("SELECT `table` FROM `".$mysql_zugangsdaten['praefix']."module` ORDER BY `id`"); |
33 | $res = db_query("SELECT `table` FROM `".$mysql_zugangsdaten['praefix']."module` ORDER BY `id`"); |
34 | while ($row = db_fetch($res)) |
34 | while ($row = db_fetch($res)) |
35 | { |
35 | { |
36 | if (!isset($datenbanktabellen[$mysql_zugangsdaten['praefix'].$row['table']])) |
36 | if (!isset($datenbanktabellen[$mysql_zugangsdaten['praefix'].$row['table']])) |
37 | { |
37 | { |
38 | db_query("DELETE FROM `".$mysql_zugangsdaten['praefix']."module` WHERE `table` = '".$row['table']."'"); |
38 | db_query("DELETE FROM `".$mysql_zugangsdaten['praefix']."module` WHERE `table` = '".$row['table']."'"); |
39 | if (db_affected_rows() > 0) |
39 | if (db_affected_rows() > 0) |
40 | db_query("OPTIMIZE TABLE `".$mysql_zugangsdaten['praefix']."module`"); |
40 | db_query("OPTIMIZE TABLE `".$mysql_zugangsdaten['praefix']."module`"); |
41 | } |
41 | } |
42 | else |
42 | else |
43 | { |
43 | { |
44 | $tabellen[] = $row['table']; |
44 | $tabellen[] = $row['table']; |
45 | } |
45 | } |
46 | } |
46 | } |
47 | 47 | ||
48 | // Diese Funktion erstellt eine Datebanktabelle und fügt ggf. neue Felder hinzu |
48 | // Diese Funktion erstellt eine Datebanktabelle und fügt ggf. neue Felder hinzu |
49 | // Parameter: name (ohne Präfix), modul, Feld_1 Name, Feld_1 Eigenschaften, Feld_2 ... |
49 | // Parameter: name (ohne Präfix), modul, Feld_1 Name, Feld_1 Eigenschaften, Feld_2 ... |
50 | function ib_newdatabasetable($name, $modul) |
50 | function ib_newdatabasetable($name, $modul) |
51 | { |
51 | { |
52 | global $datenbanktabellen, $mysql_zugangsdaten, $tabellen; |
52 | global $datenbanktabellen, $mysql_zugangsdaten, $tabellen; |
53 | 53 | ||
54 | if (!isset($datenbanktabellen[$mysql_zugangsdaten['praefix'].$name])) |
54 | if (!isset($datenbanktabellen[$mysql_zugangsdaten['praefix'].$name])) |
55 | db_query("CREATE TABLE `".$mysql_zugangsdaten['praefix'].db_escape($name)."` ( |
55 | db_query("CREATE TABLE `".$mysql_zugangsdaten['praefix'].db_escape($name)."` ( |
56 | `id` bigint(21) NOT NULL auto_increment, |
56 | `id` bigint(21) NOT NULL auto_increment, |
57 | PRIMARY KEY (`id`) |
57 | PRIMARY KEY (`id`) |
58 | )"); |
58 | )"); |
59 | 59 | ||
60 | for ($i=1; $i<@func_num_args()-2; $i++) |
60 | for ($i=1; $i<@func_num_args()-2; $i++) |
61 | { |
61 | { |
62 | if ($i%2) |
62 | if ($i%2) |
63 | { |
63 | { |
64 | if (isset($datenbanktabellen[$mysql_zugangsdaten['praefix'].$name][@func_get_arg($i+1)])) |
64 | if (isset($datenbanktabellen[$mysql_zugangsdaten['praefix'].$name][@func_get_arg($i+1)])) |
65 | { |
65 | { |
66 | // Wenn der Feldtyp bei einem Versionstyp gewechselt hat, dann normalisieren |
66 | // Wenn der Feldtyp bei einem Versionstyp gewechselt hat, dann normalisieren |
67 | // Achtung: Es wird nur der FELDTYP kontrolliert! |
67 | // Achtung: Es wird nur der FELDTYP kontrolliert! |
68 | $x = $datenbanktabellen[$mysql_zugangsdaten['praefix'].$name][@func_get_arg($i+1)]; // Workaround für "Can't be used as a function parameter" |
68 | $x = $datenbanktabellen[$mysql_zugangsdaten['praefix'].$name][@func_get_arg($i+1)]; // Workaround für "Can't be used as a function parameter" |
69 | $art = explode('/', $x); |
69 | $art = explode('/', $x); |
70 | $y = @func_get_arg($i+2); // Workaround für "Can't be used as a function parameter" |
70 | $y = @func_get_arg($i+2); // Workaround für "Can't be used as a function parameter" |
71 | $arm = explode(' ', $y); |
71 | $arm = explode(' ', $y); |
72 | if (strtolower($art[0]) <> strtolower($arm[0])) |
72 | if (strtolower($art[0]) <> strtolower($arm[0])) |
73 | { |
73 | { |
74 | db_query("ALTER TABLE `".$mysql_zugangsdaten['praefix'].$name."` CHANGE `".@func_get_arg($i+1)."` `".@func_get_arg($i+1)."` ".@func_get_arg($i+2)); |
74 | db_query("ALTER TABLE `".$mysql_zugangsdaten['praefix'].$name."` CHANGE `".@func_get_arg($i+1)."` `".@func_get_arg($i+1)."` ".@func_get_arg($i+2)); |
75 | } |
75 | } |
76 | } |
76 | } |
77 | else |
77 | else |
78 | { |
78 | { |
79 | db_query("ALTER TABLE `".$mysql_zugangsdaten['praefix'].db_escape($name)."` ADD `".@func_get_arg($i+1)."` ".@func_get_arg($i+2)); |
79 | db_query("ALTER TABLE `".$mysql_zugangsdaten['praefix'].db_escape($name)."` ADD `".@func_get_arg($i+1)."` ".@func_get_arg($i+2)); |
80 | } |
80 | } |
81 | } |
81 | } |
82 | } |
82 | } |
83 | 83 | ||
84 | $nellebat = array_flip($tabellen); |
84 | $nellebat = array_flip($tabellen); |
85 | if (!isset($nellebat[$name])) |
85 | if (!isset($nellebat[$name])) |
86 | { |
86 | { |
87 | db_query("INSERT INTO `".$mysql_zugangsdaten['praefix']."module` (`modul`, `table`) VALUES ('".db_escape($modul)."', '".db_escape($name)."')"); |
87 | db_query("INSERT INTO `".$mysql_zugangsdaten['praefix']."module` (`modul`, `table`) VALUES ('".db_escape($modul)."', '".db_escape($name)."')"); |
88 | $tabellen[] = $name; |
88 | $tabellen[] = $name; |
89 | } |
89 | } |
90 | } |
90 | } |
91 | 91 | ||
92 | // Sorgt dafür, dass keine Duplicate-Fehler entstehen, wenn Indexe erstellt werden |
92 | // Sorgt dafür, dass keine Duplicate-Fehler entstehen, wenn Indexe erstellt werden |
93 | // Index werden nur einmalig erstellt oder ggf aktualisiert |
93 | // Index werden nur einmalig erstellt oder ggf aktualisiert |
94 | function my_add_key($table, $name, $unique, $column) |
94 | function my_add_key($table, $name, $unique, $column) |
95 | { |
95 | { |
96 | // Funktioniert nicht für PRIMARY KEY |
96 | // Funktioniert nicht für PRIMARY KEY |
97 | 97 | ||
98 | if ($unique) |
98 | if ($unique) |
99 | $erwarte_non_unique = '0'; |
99 | $erwarte_non_unique = '0'; |
100 | else |
100 | else |
101 | $erwarte_non_unique = '1'; |
101 | $erwarte_non_unique = '1'; |
102 | 102 | ||
103 | //$breaki = false; |
103 | //$breaki = false; |
104 | $rs = db_query("SHOW INDEX FROM `$table`"); |
104 | $rs = db_query("SHOW INDEX FROM `$table`"); |
105 | while ($rw = db_fetch($rs)) |
105 | while ($rw = db_fetch($rs)) |
106 | { |
106 | { |
107 | for ($i=0; $i<@func_num_args()-3; $i++) |
107 | for ($i=0; $i<@func_num_args()-3; $i++) |
108 | { |
108 | { |
109 | if (($rw['Column_name'] == @func_get_arg($i+3)) && ($rw['Key_name'] != $name)) |
109 | if (($rw['Column_name'] == @func_get_arg($i+3)) && ($rw['Key_name'] != $name)) |
110 | { |
110 | { |
111 | db_query("ALTER TABLE `$table` DROP INDEX `".$rw['Key_name']."`"); |
111 | db_query("ALTER TABLE `$table` DROP INDEX `".$rw['Key_name']."`"); |
112 | //$breaki = true; |
112 | //$breaki = true; |
113 | //break; |
113 | //break; |
114 | } |
114 | } |
115 | } |
115 | } |
116 | //if ($breaki) break; |
116 | //if ($breaki) break; |
117 | } |
117 | } |
118 | 118 | ||
119 | $breaki = false; |
119 | $breaki = false; |
120 | $rs = db_query("SHOW INDEX FROM `$table`"); |
120 | $rs = db_query("SHOW INDEX FROM `$table`"); |
121 | while ($rw = db_fetch($rs)) |
121 | while ($rw = db_fetch($rs)) |
122 | { |
122 | { |
123 | if ($rw['Key_name'] == $name) |
123 | if ($rw['Key_name'] == $name) |
124 | { |
124 | { |
125 | for ($i=0; $i<@func_num_args()-3; $i++) |
125 | for ($i=0; $i<@func_num_args()-3; $i++) |
126 | { |
126 | { |
127 | if ($rw['Column_name'] == @func_get_arg($i+3)) |
127 | if ($rw['Column_name'] == @func_get_arg($i+3)) |
128 | { |
128 | { |
129 | if ($rw['Non_unique'] == $erwarte_non_unique) |
129 | if ($rw['Non_unique'] == $erwarte_non_unique) |
130 | { |
130 | { |
131 | ${'vorgekommen_'.@func_get_arg($i+3)} = true; |
131 | ${'vorgekommen_'.@func_get_arg($i+3)} = true; |
132 | } |
132 | } |
133 | else |
133 | else |
134 | { |
134 | { |
135 | db_query("ALTER TABLE `$table` DROP INDEX `$name`"); |
135 | db_query("ALTER TABLE `$table` DROP INDEX `$name`"); |
136 | $breaki = true; |
136 | $breaki = true; |
137 | break; |
137 | break; |
138 | } |
138 | } |
139 | } |
139 | } |
140 | } |
140 | } |
141 | } |
141 | } |
142 | if ($breaki) break; |
142 | if ($breaki) break; |
143 | } |
143 | } |
144 | 144 | ||
145 | $alles_vorgekommen = true; |
145 | $alles_vorgekommen = true; |
146 | 146 | ||
147 | for ($i=0; $i<@func_num_args()-3; $i++) |
147 | for ($i=0; $i<@func_num_args()-3; $i++) |
148 | { |
148 | { |
149 | if ((!isset(${'vorgekommen_'.@func_get_arg($i+3)})) || (!${'vorgekommen_'.@func_get_arg($i+3)})) |
149 | if ((!isset(${'vorgekommen_'.@func_get_arg($i+3)})) || (!${'vorgekommen_'.@func_get_arg($i+3)})) |
150 | { |
150 | { |
151 | $alles_vorgekommen = false; |
151 | $alles_vorgekommen = false; |
152 | } |
152 | } |
153 | } |
153 | } |
154 | 154 | ||
155 | if (!$alles_vorgekommen) |
155 | if (!$alles_vorgekommen) |
156 | { |
156 | { |
157 | $colo = ''; |
157 | $colo = ''; |
158 | 158 | ||
159 | for ($i=0; $i<@func_num_args()-3; $i++) |
159 | for ($i=0; $i<@func_num_args()-3; $i++) |
160 | { |
160 | { |
161 | $colo .= '`'.@func_get_arg($i+3).'`, '; |
161 | $colo .= '`'.@func_get_arg($i+3).'`, '; |
162 | } |
162 | } |
163 | 163 | ||
164 | $colo = substr($colo, 0, strlen($colo)-2); |
164 | $colo = substr($colo, 0, strlen($colo)-2); |
165 | 165 | ||
166 | if ($unique) |
166 | if ($unique) |
167 | db_query("ALTER TABLE `$table` ADD UNIQUE `$name` ($colo)"); |
167 | db_query("ALTER TABLE `$table` ADD UNIQUE `$name` ($colo)"); |
168 | else |
168 | else |
169 | db_query("ALTER TABLE `$table` ADD KEY `$name` ($colo)"); |
169 | db_query("ALTER TABLE `$table` ADD KEY `$name` ($colo)"); |
170 | } |
170 | } |
171 | } |
171 | } |
172 | 172 | ||
173 | ?> |
173 | ?> |
174 | 174 |