Frage Datenbank-Kürzel nicht mehr ab sondern erzeuge es autoamtisch
bernd

bernd commited on 2009-03-19 08:17:31
Zeige 5 geänderte Dateien mit 29 Einfügungen und 33 Löschungen.


git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1310 87cf0b9e-d624-0410-a070-f6ee81989793
... ...
@@ -9,14 +9,12 @@ function validate_data($post)
9 9
 {
10 10
   DEBUG('Validating Data:');
11 11
   DEBUG($post);
12
-  $fields = array('adminuser', 'adminpassword', 'adminemail', 'sitename', 'siteemail', 'dbhandle');
12
+  $fields = array('adminuser', 'adminpassword', 'adminemail', 'sitename', 'siteemail');
13 13
   foreach ($fields AS $field)
14 14
     if ((! isset($post[$field])) || $post[$field] == '')
15 15
       system_failure('Nicht alle Werte angegeben ('.$field.')');
16 16
 
17
-  $username = mysql_real_escape_string($_SESSION['userinfo']['username']);
18
-  $dbname = $username.'_'.$post['dbhandle'];
19
-  $dbpassword = create_webapp_mysqldb($post['dbhandle']);
17
+  $dbdata = create_webapp_mysqldb('drupal6', $post['sitename']);
20 18
 
21 19
   $passwordhash = md5( $post['adminpassword'] );
22 20
   
... ...
@@ -25,9 +23,9 @@ adminpassword={$passwordhash}
25 23
 adminemail={$post['adminemail']}
26 24
 sitename={$post['sitename']}
27 25
 siteemail={$post['siteemail']}
28
-dbname={$dbname}
29
-dbuser={$dbname}
30
-dbpass={$dbpassword}";
26
+dbname={$dbdata['dbname']}
27
+dbuser={$dbdata['dbuser']}
28
+dbpass={$dbdata['dbpass']}";
31 29
   DEBUG($data);
32 30
   return $data;
33 31
 }
... ...
@@ -9,14 +9,12 @@ function validate_data($post)
9 9
 {
10 10
   DEBUG('Validating Data:');
11 11
   DEBUG($post);
12
-  $fields = array('adminuser', 'adminpassword', 'adminemail', 'wikiname', 'dbhandle');
12
+  $fields = array('adminuser', 'adminpassword', 'adminemail', 'wikiname');
13 13
   foreach ($fields AS $field)
14 14
     if ((! isset($post[$field])) || $post[$field] == '')
15 15
       system_failure('Nicht alle Werte angegeben ('.$field.')');
16 16
 
17
-  $username = mysql_real_escape_string($_SESSION['userinfo']['username']);
18
-  $dbname = $username.'_'.$post['dbhandle'];
19
-  $dbpassword = create_webapp_mysqldb($post['dbhandle']);
17
+  $dbdata = create_webapp_mysqldb('mediawiki', $post['wikiname']);
20 18
 
21 19
   $salt = random_string(8);
22 20
   $salthash = ':B:' . $salt . ':' . md5( $salt . '-' . md5( $post['adminpassword'] ));
... ...
@@ -25,9 +23,9 @@ function validate_data($post)
25 23
 adminpassword={$salthash}
26 24
 adminemail={$post['adminemail']}
27 25
 wikiname={$post['wikiname']}
28
-dbname={$dbname}
29
-dbuser={$dbname}
30
-dbpass={$dbpassword}";
26
+dbname={$dbdata['dbname']}
27
+dbuser={$dbdata['dbuser']}
28
+dbpass={$dbdata['dbpass']}";
31 29
   DEBUG($data);
32 30
   return $data;
33 31
 }
... ...
@@ -61,32 +61,40 @@ function get_url_for_dir($docroot, $cutoff = '')
61 61
 }
62 62
 
63 63
 
64
-function create_webapp_mysqldb($handle)
64
+function create_webapp_mysqldb($application, $sitename)
65 65
 {
66 66
   // dependet auf das mysql-modul
67 67
   require_once('modules/mysql/include/mysql.php'); 
68 68
   
69 69
   $username = mysql_real_escape_string($_SESSION['userinfo']['username']);
70
-  if ($handle == '')
71
-    input_error('Kein Datenbank-Handle angegeben');
72
-  $handle = $username.'_'.$handle;
70
+  $description = "Automatisch erzeugte Datenbank für {$application} ({$sitename})";
73 71
   
74
-  if (! validate_mysql_username($handle))
75
-  {
76
-    system_failure('Ungültiges MySQL-Handle');
77
-  }
72
+  // zuerst versuchen wir username_webappname. Wenn das nicht klappt, dann wird hochgezählt
73
+  $handle = $username.'_'.$application;
78 74
   
79
-  if (has_mysql_user($handle) || has_mysql_database($handle))
75
+  if (validate_mysql_username($handle) && validate_mysql_dbname($handle) && ! (has_mysql_user($handle) || has_mysql_database($handle)))
80 76
   {
81
-    system_failure('Eine Datenbank oder einen Datenbank-Benutzer mit diesem Namen gibt es bereits!');
77
+    create_mysql_database($handle, $description);
78
+    create_mysql_account($handle, $description);
79
+    set_mysql_access($handle, $handle, true);
80
+    $password = random_string(10);
81
+    set_mysql_password($handle, $password);
82
+    return array('dbuser' => $handle, 'dbname' => $handle, 'dbpass' => $password);
82 83
   }
83 84
 
85
+  for ($i = 0; $i < 100 ; $i++) {
86
+    $handle = $username.'_'.$i;
87
+    if (validate_mysql_username($handle) && validate_mysql_dbname($handle) && ! (has_mysql_user($handle) || has_mysql_database($handle)))
88
+    {
84 89
       create_mysql_database($handle);
85 90
       create_mysql_account($handle);
86 91
       set_mysql_access($handle, $handle, true);
87 92
       $password = random_string(10);
88 93
       set_mysql_password($handle, $password);
89
-  return $password; 
94
+      return array('dbuser' => $handle, 'dbname' => $handle, 'dbpass' => $password);
95
+    }
96
+  }
97
+  system_failure('Konnte keine Datenbank erzeugen. Bitte melden Sie diesen Umstand den Administratoren!');
90 98
 }
91 99
 
92 100
 
... ...
@@ -64,10 +64,6 @@ else
64 64
   <h5>E-Mail-Adresse der Seite</h5>
65 65
   <p>Wenn die Website E-Mails versendet (z.B. für neue Benutzer, bei kommentaren auf einzelnen Seiten, ...) erscheint diese Adresse als Absender.
66 66
   <p><label for="siteemail">E-Mail-Adresse:</label> <input type="text" id="siteemail" name="siteemail" value="'.$_SESSION['userinfo']['username'].'@'.$config['masterdomain'].'" /></p>
67
-  
68
-  <h5>Datenbank-Kürzel</h5>
69
-  <p>Drupal benötigt eine MySQL-Datenbank. Dieses Programm wird automatisch eine Datenbank für Sie anlegen. Damit Sie diese später erkennen und verwalten können, wird ein Kürzel benötigt. Der Name der Datenbank wird nachher aus Ihrem Benutzernamen und diesem Kürzel erzeugt. Die Eingabe hier darf keine Leer- oder Sonderzeichen enthalten und nur wenige Zeichen lang sein.</p>
70
-  <p><label for="dbhandle">Kürzel für Datenbankname:</label> <input type="text" name="dbhandle" id="dbhandle" value="drupal6" /></p>
71 67
 </div>
72 68
 
73 69
 <h4>Drupal-Administrator</h4>
... ...
@@ -60,10 +60,6 @@ else
60 60
   <h5>Name des Wikis</h5>
61 61
   <p>Jedes MediaWiki benötigt einen griffigen Namen. Der Name kann entweder in »WikiSchreibweise« (zusammengezogene Wörter mit großgeschriebenen Anfangsbuchstaben) oder in normaler Schreibweise sein.</p>
62 62
   <p><label for="wikiname">Wiki-Name:</label> <input type="text" id="wikiname" name="wikiname" /></p>
63
-  
64
-  <h5>Datenbank-Kürzel</h5>
65
-  <p>Ein MediaWiki benötigt eine MySQL-Datenbank. Dieses Programm wird automatisch eine Datenbank für Sie anlegen. Damit Sie diese später erkennen und verwalten können, wird ein Kürzel benötigt. Der Name der Datenbank wird nachher aus Ihrem Benutzernamen und diesem Kürzel erzeugt. Die Eingabe hier darf keine Leer- oder Sonderzeichen enthalten und nur wenige Zeichen lang sein.</p>
66
-  <p><label for="dbhandle">Kürzel für Datenbankname:</label> <input type="text" name="dbhandle" id="dbhandle" value="wiki" /></p>
67 63
 </div>
68 64
 
69 65
 <h4>Wiki-Administrator</h4>
70 66