modules/mysql/databases.php
defbfa55
 <?php
 
 require_once('session/start.php');
da0e59cc
 require_once('inc/icons.php');
defbfa55
 require_role(array(ROLE_SYSTEMUSER));
 
 global $prefix;
 
 require_once('mysql.php');
 
 $output_something = true;
 
 
 if (isset($_GET['action']))
   switch ($_GET['action'])
   {
     case 'delete_db':
db87f221
       if (! has_mysql_database($_GET['db']))
         system_failure('Ungültige Datenbank');
defbfa55
       $sure = user_is_sure();
       if ($sure === NULL)
       {
d5f2f3f4
         are_you_sure("action=delete_db&db={$_GET['db']}", "Möchten Sie die Datenbank »{$_GET['db']}« wirklich löschen?");
defbfa55
         $output_something = false;
       }
       elseif ($sure === true)
       {
         delete_mysql_database($_GET['db']);
         header("Location: ?");
         $output_something = false;
       }
       elseif ($sure === false)
       {
         header("Location: ?");
         $output_something = false;
       }
       break;
     case 'delete_user':
9a18ccaf
       if (! has_mysql_user($_GET['user']))
db87f221
         system_failure('Ungültiger Benutzer');
defbfa55
       $sure = user_is_sure();
       if ($sure === NULL)
       {
d5f2f3f4
         are_you_sure("action=delete_user&user={$_GET['user']}", "Möchten Sie den Benutzer »{$_GET['user']}« wirklich löschen?");
defbfa55
         $output_something = false;
       }
       elseif ($sure === true)
       {
         delete_mysql_account($_GET['user']);
         header("Location: ?");
         $output_something = false;
       }
       elseif ($sure === false)
       {
         header("Location: ?");
         $output_something = false;
       }
       break;
     case 'change_pw':
79b7e0c3
       check_form_token('mysql_databases');
defbfa55
       set_mysql_password($_POST['mysql_username'], $_POST['mysql_password']);
       header("Location: ?");
       $output_something = false;
       break;
     default:
       system_failure("Diese Funktion scheint noch nicht eingebaut zu sein!");
   }
 
 
 $dbs = get_mysql_databases($_SESSION['userinfo']['uid']);
 $users = get_mysql_accounts($_SESSION['userinfo']['uid']);
 
0095a9eb
 if (isset($_POST['accesseditor']))
defbfa55
 {
79b7e0c3
   check_form_token('mysql_databases');
defbfa55
   /* Eine neue Datenbank */
   if ($_POST['new_db'] != '')
   {
     create_mysql_database($_POST['new_db']);
     if (isset($_POST['access']['new']))
     {
       $_POST['access'][$_POST['new_db']] = array();
438cc61e
       foreach ($users as $user) {
fbbc80e1
         $user = $user['username'];
438cc61e
         if (in_array($user, $_POST['access']['new'])) {
defbfa55
           array_push($_POST['access'][$_POST['new_db']], $user);
438cc61e
         }
       }
defbfa55
       if (($_POST['new_user'] != '') and (in_array('new', $_POST['access']['new'])))
         array_push($_POST['access'][$_POST['new_db']], $_POST['new_user']);
     }
   }
 
   /* Ein neuer Account soll angelegt werden */
   if ($_POST['new_user'] != '')
   {
     create_mysql_account($_POST['new_user']);
438cc61e
     foreach ($dbs as $db) {
fbbc80e1
       $db = $db['name'];
438cc61e
       if (isset($_POST['access'][$db]) and (in_array('new', $_POST['access'][$db]))) {
defbfa55
         array_push($_POST['access'][$db], $_POST['new_user']);
438cc61e
       }
     }
defbfa55
   }
   
   if (($_POST['new_user'] != '') or ($_POST['new_db'] != ''))
   {
     $dbs = get_mysql_databases($_SESSION['userinfo']['uid']);
     $users = get_mysql_accounts($_SESSION['userinfo']['uid']);
   }
 
   foreach ($dbs as $db)
fbbc80e1
   {
     $db = $db['name'];
defbfa55
     foreach ($users as $user)
fbbc80e1
     {
       $user = $user['username'];
defbfa55
       if (! isset($_POST['access'][$db]))
         set_mysql_access($db, $user, false);
       else
         set_mysql_access($db, $user, in_array($user, $_POST['access'][$db]));
fbbc80e1
     }
   }
defbfa55
   $mysql_access = NULL;
 }
 
 if ($output_something)
 {
f2550e90
   title("MySQL-Datenbanken");
e7161671
   output('<p>Hier können Sie Ihre MySQL-Datenbanken verwalten. Die Einstellungen werden mit einer leichten Verzögerung (maximal 5 Minuten) in das System übertragen. Bitte beachten Sie, dass neue Zugänge also nicht umgehend funktionieren.</p>
defbfa55
   <p><strong>Hinweis:</strong> In dieser Matrix sehen Sie links die Datenbanken und oben die Benutzer, die Sie eingerichtet haben.
33986238
   In die leeren Eingabefelder können Sie den Namen eines neuen Benutzers bzw. einer neuen Datenbank eintragen. Sofern Sie noch keine Datenbank(en) oder Benutzer eingerichtet haben, erscheinen nur die Eingabefelder. Vergessen Sie nicht, nach der Erstellung eines neuen Benutzerkontos dem betreffenden Benutzer ein Passwort zu setzen (s. unten auf dieser Seite). Der Name von Datenbanken und Datenbank-Benutzern muss mit dem Namen des System-Benutzeraccounts übereinstimmen oder mit diesem und einem nachfolgenden Unterstrich beginnen. Z.B. kann der System-Benutzer <em>bernd</em> die MySQL-Accounts <em>bernd</em> und <em>bernd_2</em> erzeugen. Aufgrund einer Beschränkung des MySQL-Servers dürfen Benutzernamen allerdings zur Zeit nur 16 Zeichen lang sein.</p>');
defbfa55
 
c52d6756
   $form = '
defbfa55
   <table>
ec0c81a8
   <tr><th>&#160;</th><th style="background-color: #729bb3; color: #fff;padding: 0.2em;" colspan="'.(count($users)+1).'">Benutzerkonten</th></tr>
c52d6756
   <tr><th style="background-color: #729bb3; color: #fff;padding: 0.2em; text-align: left;">Datenbanken</th>';
defbfa55
 
   foreach ($users as $user)
fbbc80e1
   {
bc45bc58
     $username = $user["username"];
     //$username = str_replace('_', '_ ', $user['username']);
aed08fe4
     $desc = ($user['description'] ? $user['description'].' (Erstellt: '.$user['created'].')' : 'Erstellt: '.$user['created']);
5bdbcb67
     $form .= "<th><span title=\"{$desc}\">{$username}</span><br />".internal_link("", icon_delete("Benutzer »{$user['username']}« löschen"), "action=delete_user&user={$user['username']}")."</th>";
fbbc80e1
   }
da0e59cc
   $form .= '<th><input type="text" name="new_user" size="10" value="" /><br />'.icon_add().'</th></tr>
c52d6756
 ';
defbfa55
 
650c1121
   array_push($users, array('username' => "new", 'description' => NULL));
defbfa55
 
e7161671
   $servers = servers_for_databases();
 
defbfa55
   foreach($dbs as $db)
   {
e7161671
     $phpmyadmin = "https://mysql.{$servers[$db['name']]}/";
aed08fe4
     $desc = ($db['description'] ? $db['description'].' (Erstellt: '.$db['created'].')' : 'Erstellt: '.$db['created']);
bc45bc58
     $form .= "<tr><td style=\"border: 0px; font-weight: bold; text-align: right;\"><span title=\"{$desc}\">{$db['name']}</span>&#160;".internal_link("", icon_delete("Datenbank »{$db['name']}« löschen"), "action=delete_db&db={$db['name']}")."&#160;<a href=\"".$phpmyadmin."\">".other_icon("database_go.png", "Datenbank-Verwaltung über phpMyAdmin")."</a></td>";
defbfa55
     foreach ($users as $user)
3b218a6c
       $form .= '<td style="text-align: center;"><input type="checkbox" id="'.$db['name'].'_'.$user['username'].'" name="access['.$db['name'].'][]" value="'.$user['username'].'" '.(get_mysql_access($db['name'], $user['username']) ? 'checked="checked" ' : '')." /></td>";
c52d6756
     $form .= "</tr>\n";
defbfa55
   }
 
c52d6756
   $form .= '
da0e59cc
   <tr><td style="border: 0px; font-weight: bold; text-align: right;"><input type="text" name="new_db" size="15" value="" />'.icon_add().'</td>';
defbfa55
   foreach ($users as $user)
3b218a6c
     $form .= '<td style="text-align: center;"><input type="checkbox" id="new_'.$user['username'].'" name="access[new][]" value="'.$user['username'].'" /></td>';
c52d6756
   $form .= '</tr>
   </table>
0095a9eb
   <p><input type="submit" name="accesseditor" value="Speichern" /></p>';
c52d6756
 
   
63a0529b
   output(html_form('mysql_databases', 'databases', '', $form));
defbfa55
 
e7161671
   $myservers = array();
   foreach ($servers as $s) {
     if (! in_array($s, $myservers)) {
       $myservers[] = $s;
     }
   }
 
   output("<h4>Verwaltung der Datenbanken (phpMyAdmin)</h4>
   <p><img src=\"{$prefix}images/phpmyadmin.png\" style=\"width: 120px; height: 70px; float: right;\" />Zur Verwaltung der Datenbank-Inhalte stellen wir Ihnen eine stets aktualisierte Version von phpMyAdmin zur Verfügung.</p>");
   if (count($myservers) == 1) {
     output("<p><strong><a href=\"https://mysql.{$myservers[0]}/\">phpMyAdmin aufrufen</a></strong></p>");
   }
   else {
     output("<p><em>Ihre Datenbanken befinden sich auf unterschiedlichen Servern, daher müssen Sie die jeweils passende Adresse für phpMyAdmin benutzen. Klicken Sie auf das Symbol ".other_icon("database_go.png", "Datenbank-Verwaltung über phpMyAdmin")." oben neben der jeweiligen Datenbank.</em></p>");
   }
 
 
defbfa55
   $users = get_mysql_accounts($_SESSION['userinfo']['uid']);
 
 
2fba6db0
 
   $my_users = array();
   foreach ($users as $u)
   {
fbbc80e1
     $my_users[$u['username']] = $u['username'];
2fba6db0
   }
fbb3a834
   $form = '<div>
2fba6db0
   <label for="mysql_username">Benutzername:</label>&#160;'.html_select('mysql_username', $my_users).'
9a18ccaf
   &#160;&#160;&#160;
   <label for="password">Passwort:</label>&#160;<input type="password" name="mysql_password" id="password" />
   &#160;&#160;<input type="submit" value="Setzen" />
 </div>';
 
c52d6756
 
   output('<h4>Passwort ändern</h4>
   <p>Hier können Sie das Passwort eines MySQL-Benutzeraccounts ändern bzw. neu setzen</p>
 
9a18ccaf
   '.html_form('mysql_databases', 'databases', 'action=change_pw', $form).'<br />');
defbfa55
 
 }
 
 
 ?>