Browse code

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

git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1310 87cf0b9e-d624-0410-a070-f6ee81989793

bernd authored on19/03/2009 08:17:31
Showing5 changed files
... ...
@@ -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))
72
+  // zuerst versuchen wir username_webappname. Wenn das nicht klappt, dann wird hochgezählt
73
+  $handle = $username.'_'.$application;
74
+  
75
+  if (validate_mysql_username($handle) && validate_mysql_dbname($handle) && ! (has_mysql_user($handle) || has_mysql_database($handle)))
75 76
   {
76
-    system_failure('Ungültiges MySQL-Handle');
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);
77 83
   }
78 84
 
79
-  if (has_mysql_user($handle) || has_mysql_database($handle))
80
-  {
81
-    system_failure('Eine Datenbank oder einen Datenbank-Benutzer mit diesem Namen gibt es bereits!');
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
+    {
89
+      create_mysql_database($handle);
90
+      create_mysql_account($handle);
91
+      set_mysql_access($handle, $handle, true);
92
+      $password = random_string(10);
93
+      set_mysql_password($handle, $password);
94
+      return array('dbuser' => $handle, 'dbname' => $handle, 'dbpass' => $password);
95
+    }
82 96
   }
83
-
84
-  create_mysql_database($handle);
85
-  create_mysql_account($handle);
86
-  set_mysql_access($handle, $handle, true);
87
-  $password = random_string(10);
88
-  set_mysql_password($handle, $password);
89
-  return $password; 
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>