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