Großer VMail-move
bernd

bernd commited on 2008-04-03 10:38:22
Zeige 14 geänderte Dateien mit 244 Einfügungen und 23 Löschungen.


git-svn-id: https://svn.schokokeks.org/repos/tools/webinterface/trunk@1012 87cf0b9e-d624-0410-a070-f6ee81989793
... ...
@@ -0,0 +1,23 @@
1
+<?php
2
+
3
+require_once('session/start.php');
4
+require_once('vmail.php');
5
+
6
+require_once("inc/debug.php");
7
+global $debugmode;
8
+
9
+require_role(ROLE_SYSTEMUSER);
10
+
11
+check_form_token('vmail_domainchange');
12
+
13
+if (! $_POST['type'] || ! $_POST['id'])
14
+  system_failure("Unvollständige POST-Daten");
15
+
16
+change_domain($_POST['id'], $_POST['type']);
17
+
18
+if (!$debugmode) {
19
+  header('Location: domains.php');
20
+  die();
21
+}
22
+
23
+
... ...
@@ -0,0 +1,52 @@
1
+<?php
2
+
3
+require_once('inc/base.php');
4
+require_once('inc/security.php');
5
+require_role(ROLE_SYSTEMUSER);
6
+
7
+require_once('vmail.php');
8
+
9
+$settings = domainsettings();
10
+
11
+$domains = $settings['domains'];
12
+$subdomains = $settings['subdomains'];
13
+
14
+DEBUG($settings);
15
+
16
+output('<h3>E-Mail-Verwaltung</h3>
17
+<p>Sie können bei schokokeks.org die E-Mails Ihrer Domains auf zwei unterschiedliche Arten empfangen.</p>
18
+<ol><li>Sie können einfache E-Mail-Konten erstellen, die ankommende E-Mails speichern oder weiterleiten.</li>
19
+<li>Sie können die manuelle Verwaltung wählen, bei der Sie passende .courier-Dateien für den Empfang und
20
+manuelle POP3/IMAP-Konten für den Abruf erstellen können.</li></ol>
21
+<p>Diese Wahlmöglichkeit haben Sie pro Domain bzw. Subdomain. Subdomains können grundsätzlich nur durch Administratoren eingerichtet und verändert werden.</p>
22
+
23
+<h4>Ihre Domains sind momentan wie folgt konfiguriert:</h4>
24
+
25
+<table>
26
+  <tr><th>Domainname</th><th>Einstellung</th><th></th></tr>
27
+');
28
+
29
+foreach ($domains AS $id => $dom) {
30
+  $type = maildomain_type($dom['type']);
31
+  $edit = html_form('vmail_domainchange', 'domainchange.php', '', html_select('type', array('virtual' => 'Webinterface-Verwaltung', 'auto' => '.courier-Dateien', 'none' => 'keine E-Mails empfangen'), $dom['type']).' <input type="hidden" name="id" value="'.$id.'" /><input type="submit" value="ändern" />');
32
+  if ($dom['type'] == 'manual')
33
+    $edit = 'Kann nur von Admins geändert werden';
34
+  if (domain_has_vmail_accounts($id))
35
+    $edit = 'Keine Änderung möglich, so lange noch <a href="vmail.php">E-Mail-Konten</a> für diese Domain eingerichtet sind.';
36
+  output("<tr><td>{$dom['name']}</td><td>{$type}</td><td>{$edit}</td></tr>\n");
37
+  if (array_key_exists($id, $subdomains)) {
38
+    foreach ($subdomains[$id] AS $subdom) {
39
+      $type = maildomain_type($subdom['type']);
40
+      output("<tr><td>{$subdom['name']}.{$dom['name']}</td><td>{$type}</td><td>Subdomains können nur von Admins geändert werden!</td></tr>\n");
41
+    }
42
+  }
43
+}
44
+output('</table>
45
+<br />');
46
+
47
+output('<p><strong>Sicherheitshinweis:</strong> Während der Umstellung der Empfangsart ist Ihre Domain eventuell für einige Minuten in einem undefinierten Zustand. In dieser Zeit kann es passieren, dass E-Mails nicht korrekt zugestellt oder sogar ganz zurückgewiesen werden. Sie sollten diese Einstellungen daher nicht mehr ändern, wenn die Domain aktiv für den E-Mail-Verkehr benutzt wird.</p>
48
+');
49
+
50
+
51
+
52
+?>
... ...
@@ -77,7 +77,7 @@ elseif (isset($_GET['action']) && $_GET['action'] == 'create')
77 77
 
78 78
   output('<h3>E-Mail-Account anlegen</h3>
79 79
 <p>Hier können Sie ein neues POP3/IMAP-Konto anlegen.</p>
80
-<p style="border: 2px solid red; background-color: white; padding:1em;"><strong>ACHTUNG:</strong> ein POP3-/IMAP-Account ist <strong>keine E-Mail-Adresse</strong>. Wenn Sie sich nicht sicher sind, lesen Sie bitte die Anleitung <a href="https://wiki.schokokeks.org/E-Mail/Konfiguration">in unserem Wiki</a>. Sie können Ihre E-Mail-Konten auch über eine einfachere Möglichkeit verwalten, dann ist eine Einrichtung über diese Weboberfläche möglich. Die Umstellung erfolgt manuell pro Domain und kann bei den Admins angefordert werden.</p>
80
+<p style="border: 2px solid red; background-color: white; padding:1em;"><strong>ACHTUNG:</strong> ein POP3-/IMAP-Account ist <strong>keine E-Mail-Adresse</strong>. Wenn Sie sich nicht sicher sind, lesen Sie bitte die Anleitung <a href="https://wiki.schokokeks.org/E-Mail/Konfiguration">in unserem Wiki</a>. Sie können Ihre E-Mail-Konten auch über eine einfachere Möglichkeit verwalten, dann ist eine Einrichtung über diese Weboberfläche möglich. Die Umstellung erfolgt <a href="../vmail/domains.php">unter Domains</a>.</p>
81 81
   '.html_form('imap_accounts_create', 'accounts.php', 'action=save', '
82 82
   <table style="margin-bottom: 1em;">
83 83
   <tr><th>Einstellung:</th><th>Wert:</th><th>&#160;</th></tr>
... ...
@@ -262,4 +262,117 @@ function delete_account($id)
262 262
 }
263 263
 
264 264
 
265
-?>
265
+
266
+function domainsettings($only_domain=NULL) {
267
+  $uid = (int) $_SESSION['userinfo']['uid'];
268
+  if ($domain)
269
+    $only_domain = (int) $only_domain;
270
+  $result = db_query("SELECT d.id, CONCAT_WS('.',d.domainname,d.tld) AS name, d.mail, m.id AS m_id, v.id AS v_id, IF(ISNULL(v.hostname),m.subdomain,v.hostname) AS hostname FROM kundendaten.domains AS d LEFT JOIN mail.virtual_mail_domains AS v ON (d.id=v.domain) LEFT JOIN mail.custom_mappings AS m ON (d.id=m.domain) WHERE d.useraccount={$uid} OR m.uid={$uid};");
271
+  $domains = array();
272
+  $subdomains = array();
273
+  while ($mydom = mysql_fetch_assoc($result)) {
274
+    if (! array_key_exists($mydom['id'], $domains)) {
275
+      if ($mydom['v_id'] && ! $mydom['hostname'])
276
+        $mydom['mail'] = 'virtual';
277
+      $domains[$mydom['id']] = array(
278
+        "name" => $mydom['name'],
279
+        "type" => $mydom['mail']
280
+        );
281
+      if ($only_domain && $only_domain == $mydom['id'])
282
+        return $domains[$only_domain];
283
+    }
284
+    if ($mydom['hostname']) {
285
+      if (! array_key_exists($mydom['id'], $subdomains))
286
+        $subdomains[$mydom['id']] = array();
287
+        
288
+      $type = 'auto';
289
+      if ($mydom['v_id'])
290
+        $type = 'virtual';
291
+      $subdomains[$mydom['id']][] = array(
292
+        "name" => $mydom['hostname'],
293
+        "type" => $type
294
+        );
295
+    }
296
+  }
297
+  return array("domains" => $domains, "subdomains" => $subdomains);
298
+}
299
+
300
+
301
+function domain_has_vmail_accounts($domid)
302
+{
303
+  $domid = (int) $domid;
304
+  $result = db_query("SELECT dom.id FROM mail.vmail_accounts AS acc LEFT JOIN mail.virtual_mail_domains AS dom ON (dom.id=acc.domain) WHERE dom.domain={$domid}");
305
+  return (mysql_num_rows($result) > 0);
306
+}
307
+
308
+
309
+function change_domain($id, $type)
310
+{
311
+  $id = (int) $id;
312
+  $type = mysql_real_escape_string($type);
313
+  if (domain_has_vmail_accounts($id))
314
+    system_failure("Sie müssen zuerst alle E-Mail-Konten mit dieser Domain löschen, bevor Sie die Webinterface-Verwaltung für diese Domain abschalten können.");
315
+  
316
+  if (! in_array($type, array('none','auto','virtual')))
317
+    system_failure("Ungültige Aktion");
318
+  
319
+  $old = domainsettings($id);
320
+  if ($old['type'] == $type)
321
+    system_failure('Domain ist bereits so konfiguriert');
322
+
323
+  if ($type == 'none') {
324
+    db_query("DELETE FROM mail.virtual_mail_domains WHERE domain={$id} AND hostname IS NULL LIMIT 1;");
325
+    db_query("DELETE FROM mail.custom_mappings WHERE domain={$id} AND subdomain IS NULL LIMIT 1;");
326
+    db_query("UPDATE kundendaten.domains SET mail='none' WHERE id={$id} LIMIT 1;");
327
+  }
328
+  elseif ($type == 'virtual') {
329
+    db_query("DELETE FROM mail.custom_mappings WHERE domain={$id} AND subdomain IS NULL LIMIT 1;");
330
+    db_query("UPDATE kundendaten.domains SET mail='auto' WHERE id={$id} LIMIT 1;");    db_query("INSERT INTO mail.virtual_mail_domains (domain) VALUES ({$id});");
331
+  }
332
+  elseif ($type == 'auto') {
333
+    db_query("DELETE FROM mail.virtual_mail_domains WHERE domain={$id} AND hostname IS NULL LIMIT 1;");
334
+    db_query("DELETE FROM mail.custom_mappings WHERE domain={$id} AND subdomain IS NULL LIMIT 1;");
335
+    db_query("UPDATE kundendaten.domains SET mail='auto' WHERE id={$id} LIMIT 1;");
336
+  }
337
+}
338
+
339
+
340
+/*
341
+function maildomain_type($type) {
342
+  switch ($type) {
343
+    case 'none':
344
+      $type = 'Diese Domain empfängt keine E-Mails';
345
+      break;
346
+    case 'auto':
347
+      $type = 'E-Mail-Adressen werden manuell über .courier-Dateien verwaltet';
348
+      break;
349
+    case 'virtual':
350
+      $type = 'E-Mail-Adressen werden über Webinterface verwaltet';
351
+      break;
352
+    case 'manual':
353
+      $type = 'Manuelle Konfiguration, kann nur von den Admins geändert werden';
354
+      break;
355
+  }
356
+  return $type;
357
+}
358
+*/
359
+
360
+function maildomain_type($type) {
361
+  switch ($type) {
362
+    case 'none':
363
+      $type = 'Deaktiviert';
364
+      break;
365
+    case 'auto':
366
+      $type = '.courier-Dateien';
367
+      break;
368
+    case 'virtual':
369
+      $type = 'Webinterface';
370
+      break;
371
+    case 'manual':
372
+      $type = 'Manuell';
373
+      break;
374
+  }
375
+  return $type;
376
+}
377
+
378
+
... ...
@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+$role = $_SESSION['role'];
4
+
5
+require_once('include/hasdomain.php');
6
+require_once('include/hasaccount.php');
7
+
8
+if ($role & ROLE_SYSTEMUSER) {
9
+  $menu["email_vmail"] = array("label" => "E-Mail", "file" => "vmail.php", "weight" => 3);
10
+}
11
+if ($role & (ROLE_VMAIL_ACCOUNT | ROLE_MAILACCOUNT))
12
+{
13
+  $menu['email_chpass'] = array("label" => "Passwort ändern", "file" => "chpass.php", "weight" => 15);
14
+}
15
+if ($role & ROLE_SYSTEMUSER) {
16
+  $menu["email_domains"] = array("label" => "Mail-Verwaltung", "file" => "domains.php", "weight" => 2, "submenu" => "domains_domains");
17
+}
18
+if ($role & ROLE_SYSTEMUSER && (user_has_accounts() || ! user_has_vmail_domain() || user_has_regular_domain() ) )
19
+{
20
+  $menu["email_imap"] = array("label" => "IMAP/POP3", "file" => "imap.php", "weight" => 10, 'submenu' => "email_vmail");
21
+}
22
+
23
+
24
+?>
... ...
@@ -57,7 +57,7 @@ if ($_GET['action'] == 'edit')
57 57
   save_vmail_account($account);
58 58
 
59 59
   if (! ($debugmode || we_have_an_error()))
60
-    header('Location: accounts.php');
60
+    header('Location: vmail.php');
61 61
 }
62 62
 elseif ($_GET['action'] == 'delete')
63 63
 {
... ...
@@ -84,12 +84,12 @@ elseif ($_GET['action'] == 'delete')
84 84
   {
85 85
     delete_account($account['id']);
86 86
     if (! $debugmode)
87
-      header("Location: accounts.php");
87
+      header("Location: vmail.php");
88 88
   }
89 89
   elseif ($sure === false)
90 90
   {
91 91
     if (! $debugmode)
92
-      header("Location: accounts.php");
92
+      header("Location: vmail.php");
93 93
   }
94 94
 
95 95
 }
... ...
@@ -4,6 +4,31 @@ require_once('inc/base.php');
4 4
 require_once('inc/security.php');
5 5
 require_role(ROLE_SYSTEMUSER);
6 6
 
7
+require_once('hasdomain.php');
8
+
9
+if (! user_has_vmail_domain()) {
10
+  output("<h3>E-Mail-Verwaltung</h3>");
11
+  
12
+  output('
13
+<p>Sie können bei schokokeks.org die E-Mails Ihrer Domains auf zwei unterschiedliche Arten empfangen.</p>
14
+<ol><li>Sie können einfache E-Mail-Konten erstellen, die ankommende E-Mails speichern oder weiterleiten.</li>
15
+<li>Sie können die manuelle Verwaltung wählen, bei der Sie passende .courier-Dateien für den Empfang und
16
+manuelle POP3/IMAP-Konten für den Abruf erstellen können.</li></ol>
17
+<p>Diese Wahlmöglichkeit haben Sie pro Domain bzw. Subdomain. Subdomains können grundsätzlich nur durch Administratoren eingerichtet und verändert werden.</p>
18
+<p>Sie haben bisher keine Domains, die auf Web-basierte Verwaltung von E-Mail-Adressen eingerichtet sind.</p>
19
+
20
+<p> </p>
21
+
22
+<p>Besuchen Sie die <a href="domains.php">Domain-Einstellungen</a> um diese Auswahl für Ihre Domains zu ändern.</p>
23
+
24
+<p>Wenn Sie die manuelle Einrichtung möchten oder keine eigene Domain nutzen, können Sie unter <a href="imap.php">POP3/IMAP</a> manuelle POP3-/IMAP-Konten erstellen.</p>
25
+
26
+');
27
+}
28
+else
29
+{
30
+
31
+
7 32
 require_once('vmail.php');
8 33
 
9 34
 $domains = get_vmail_domains();
... ...
@@ -77,6 +102,6 @@ output('<p><a href="edit.php">Neuen Account anlegen</a></p>');
77 102
 /* FIXME: Das sollte nur kommen, wenn der IMAP/POP3-Menü-Eintrag nicht da ist */
78 103
 output('<p style="font-size: 90%;padding-top: 0.5em; border-top: 1px solid black;">Hinweis: schokokeks.org bietet für fortgeschrittene Nutzer die manuelle Einrichtung von POP3/IMAP-Accounts.<br/><a href="'.$prefix.'go/imap/accounts.php?action=create">Neuen POP3/IMAP-Account anlegen</a></p>');
79 104
 
80
-
105
+}
81 106
 
82 107
 ?>
... ...
@@ -4,7 +4,7 @@ $role = $_SESSION['role'];
4 4
 
5 5
 if ($role & ROLE_SYSTEMUSER)
6 6
 {
7
-  $menu['greylisting_whitelist'] = array("label" => "Greylisting", "file" => "whitelist.php", "weight" => 5);
7
+  $menu['greylisting_whitelist'] = array("label" => "Greylisting", "file" => "whitelist.php", "weight" => 5, 'submenu' => 'email_vmail');
8 8
 }
9 9
 
10 10
 ?>
... ...
@@ -1,16 +0,0 @@
1
-<?php
2
-
3
-$role = $_SESSION['role'];
4
-
5
-require_once('include/hasdomain.php');
6
-
7
-if (($role & ROLE_SYSTEMUSER) && user_has_vmail_domain())
8
-{
9
-  $menu["vmail_accounts"] = array("label" => "E-Mail", "file" => "accounts.php", "weight" => 3);
10
-}
11
-if ($role & ROLE_VMAIL_ACCOUNT)
12
-{
13
-  $menu['vmail_chpass'] = array("label" => "Passwort ändern", "file" => "chpass.php", "weight" => 15);
14
-}
15
-
16
-?>
17 0