Subversion Repositories personal-webbase

Rev

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&uuml;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
?>