Browse code

Filter-Funktion für vmail-Accounts

Bernd Wurst authored on16/02/2018 04:28:04
Showing5 changed files
... ...
@@ -75,7 +75,7 @@ if ($is_current_user) {
75 75
         $used = true;
76 76
     }
77 77
     if (have_module('email') && mail_in_use($dom->id)) {
78
-        output("<p>Es gibt E-Mail-Postfächer unter dieser Domain ".internal_link('../email/vmail', '&#x2192; Bearbeiten', 'domain='.$dom->fqdn)."</p>");
78
+        output("<p>Es gibt E-Mail-Postfächer unter dieser Domain ".internal_link('../email/vmail', '&#x2192; Bearbeiten', 'filter='.$dom->fqdn)."</p>");
79 79
         $used = true;
80 80
     }
81 81
     if (have_module('mailman') && mailman_subdomains($dom->id)) {
82 82
new file mode 100644
... ...
@@ -0,0 +1,12 @@
1
+
2
+input#filter {
3
+    padding-right: 25px;
4
+}
5
+button#clear {
6
+    width: 20px;
7
+    margin-left: -22px;
8
+    margin-right: 1em;
9
+    padding: 0 5px;
10
+    background-color: #fff;
11
+    border: 0;
12
+}
0 13
new file mode 100644
... ...
@@ -0,0 +1,6 @@
1
+$(function() {
2
+    $('#clear').click( function() { 
3
+        $('#filter').val('');
4
+        $('#vmail_filter').submit();
5
+    });
6
+});
... ...
@@ -18,6 +18,8 @@ require_once('inc/base.php');
18 18
 require_once('inc/icons.php');
19 19
 require_once('inc/security.php');
20 20
 require_role(ROLE_SYSTEMUSER);
21
+require_once('inc/jquery.php');
22
+javascript();
21 23
 
22 24
 require_once('hasdomain.php');
23 25
 
... ...
@@ -44,6 +46,10 @@ Subdomains können grundsätzlich nur durch Administratoren eingerichtet und ver
44 46
 else
45 47
 {
46 48
 
49
+$filter = NULL;
50
+if (isset($_REQUEST['filter']) && $_REQUEST['filter'] != '') {
51
+    $filter = $_REQUEST['filter'];
52
+}
47 53
 
48 54
 require_once('vmail.php');
49 55
 
... ...
@@ -67,82 +73,108 @@ addnew("edit", "Neue E-Mail-Adresse anlegen");
67 73
 
68 74
 if (count($domains) > 0)
69 75
 {
70
-  output('
71
-<p>Folgende E-Mail-Konten sind aktuell eingerichtet:</p>
72
-');
73
-  foreach ($domains as $dom) 
74
-  {
76
+    // Filter-Funktion
77
+    if (count($all_accounts) > 10 || $filter) {
78
+        $form = '<p><label for="filter">Filter für die Anzeige:</label> <input type="text" name="filter" id="filter" value="'.$filter.'"><button type="button" id="clear" title="Filter leeren">&times;</button><input type="submit" value="Filtern!"></p>';
79
+        output(html_form('vmail_filter', 'vmail', '', $form));
80
+    }
81
+
75 82
     output('
76
-      <h4>'.$dom['domainname'].' <small>('.other_icon('information.png', 'Zugangsdaten anzeigen').' '.internal_link('logindata', 'Zugangsdaten für E-Mail-Abruf anzeigen', 'server='.get_server_by_id($dom['server']).'&type=vmail').')</small></h4>
77
-      <div style="margin-left: 2em; margin-top: 0.5em; padding: 0.1em 0.5em;">');
78
-    if (array_key_exists($dom['id'], $sorted_by_domains)) {
79
-      $accounts_on_domain = $sorted_by_domains[$dom['id']];
80
-
81
-	    foreach ($accounts_on_domain AS $this_account)
82
-	    {
83
-	      $acc = get_account_details($this_account['id']);
84
-	      $actions = array();
85
-	      DEBUG($acc);
86
-	      if ($acc['password'] != '')
87
-	      {
88
-                $percent = round(( $acc["quota_used"] / $acc["quota"] ) * 100 );
89
-                $color = ( $percent > 95 ? 'red' : ($percent > 75 ? "yellow" : "green" ));
90
-                $width = 2 * min($percent, 100);
91
-                $quotachart = "<div style=\"margin: 2px 0; padding: 0; width: 200px; border: 1px solid black;\"><div style=\"font-size: 1px; background-color: {$color}; height: 10px; width: {$width}px; margin: 0; padding: 0;\">&#160;</div></div> {$acc['quota_used']} MB von {$acc['quota']} MB belegt";
92
-	        array_push($actions, "Ablegen in Mailbox<br />".$quotachart);
93
-	      }
94
-        if ($acc['autoresponder']) {
95
-            $now = date( 'Y-m-d' );
96
-            $valid_from = $acc['autoresponder']['valid_from'];
97
-            $valid_from_string = date('d.m.Y', strtotime($acc['autoresponder']['valid_from']));
98
-            $valid_until = $acc['autoresponder']['valid_until'];
99
-            $valid_until_string = date('d.m.Y', strtotime($acc['autoresponder']['valid_until']));
100
-            if ($valid_from == NULL) {
101
-              // Autoresponder abgeschaltet
102
-              //array_push($actions, "<strike>Automatische Antwort versenden</strike> (Abgeschaltet)");
103
-            } elseif ($valid_from > $now) {
104
-              array_push($actions, "<strike>Automatische Antwort versenden</strike> (Wird aktiviert am {$valid_from_string})");
105
-            } elseif ($valid_until == NULL) {
106
-              array_push($actions, "Automatische Antwort versenden (Unbefristet)");
107
-            } elseif ($valid_until > $now) {
108
-              array_push($actions, "Automatische Antwort versenden (Wird deaktiviert am {$valid_until_string})");
109
-            } elseif ($valid_until < $now) {
110
-              array_push($actions, "<strike>Automatische Antwort versenden</strike> (Automatisch abgeschaltet seit {$valid_until_string})");
83
+            <p>Folgende E-Mail-Konten sind aktuell eingerichtet:</p>
84
+            ');
85
+    foreach ($domains as $dom) 
86
+    {
87
+        if ($filter && strpos($dom['domainname'], $filter) === false) {
88
+            // Die Domain entspricht nicht dem Filter, schau die Postfächer an
89
+            $account_found = false;
90
+            if (array_key_exists($dom['id'], $sorted_by_domains)) {
91
+                $accounts_on_domain = $sorted_by_domains[$dom['id']];
92
+                foreach ($accounts_on_domain AS $this_account) {
93
+                    if (strpos($this_account['local'], $filter) !== false) {
94
+                        $account_found = true;
95
+                    }
96
+                }
97
+            }
98
+            if (! $account_found) {
99
+                continue;
111 100
             }
112 101
         }
113
-	      foreach ($acc['forwards'] AS $fwd)
114
-	      {
115
-		$fwd['destination'] = filter_input_general($fwd['destination']);
116
-	        array_push($actions, "Weiterleitung an <strong>{$fwd['destination']}</strong>");
117
-	      }
118
-	      $dest = '';
119
-	      if (count($actions) > 0)
120
-	      {
121
-	        $dest = "<ul>";
122
-		foreach ($actions as $a)
123
-		  $dest .= "<li>{$a}</li>";
124
-		$dest .= '</ul>';
125
-	      }
126
-        if ($acc['smtpreply']) {
127
-          output('<p><strike>'.$acc['local'].'@'.$this_account['domainname'].'</strike> '.internal_link("save", '<img src="'.$prefix.'images/delete.png" alt="löschen" title="Dieses Konto löschen"/>', "action=delete&id=".$acc['id']).'</p>');
128
-          output("<ul><li>".icon_disabled()." Diese Adresse ist stillgelegt. <strong>".internal_link('suspend', 'Stilllegung ändern/aufheben', 'account='.$acc['id']).'</strong></li></ul>');
102
+        output('
103
+                <h4>'.$dom['domainname'].' <small>('.other_icon('information.png', 'Zugangsdaten anzeigen').' '.internal_link('logindata', 'Zugangsdaten für E-Mail-Abruf anzeigen', 'server='.get_server_by_id($dom['server']).'&type=vmail').')</small></h4>
104
+                <div style="margin-left: 2em; margin-top: 0.5em; padding: 0.1em 0.5em;">');
105
+        if (array_key_exists($dom['id'], $sorted_by_domains)) {
106
+            $accounts_on_domain = $sorted_by_domains[$dom['id']];
107
+
108
+            foreach ($accounts_on_domain AS $this_account)
109
+            {
110
+                if ($filter && 
111
+                    (strpos($dom['domainname'], $filter) === false && 
112
+                     strpos($this_account['local'], $filter) === false)) {
113
+                    continue;
114
+                }
115
+                $acc = get_account_details($this_account['id']);
116
+                $actions = array();
117
+                DEBUG($acc);
118
+                if ($acc['password'] != '')
119
+                {
120
+                    $percent = round(( $acc["quota_used"] / $acc["quota"] ) * 100 );
121
+                    $color = ( $percent > 95 ? 'red' : ($percent > 75 ? "yellow" : "green" ));
122
+                    $width = 2 * min($percent, 100);
123
+                    $quotachart = "<div style=\"margin: 2px 0; padding: 0; width: 200px; border: 1px solid black;\"><div style=\"font-size: 1px; background-color: {$color}; height: 10px; width: {$width}px; margin: 0; padding: 0;\">&#160;</div></div> {$acc['quota_used']} MB von {$acc['quota']} MB belegt";
124
+                    array_push($actions, "Ablegen in Mailbox<br />".$quotachart);
125
+                }
126
+                if ($acc['autoresponder']) {
127
+                    $now = date( 'Y-m-d' );
128
+                    $valid_from = $acc['autoresponder']['valid_from'];
129
+                    $valid_from_string = date('d.m.Y', strtotime($acc['autoresponder']['valid_from']));
130
+                    $valid_until = $acc['autoresponder']['valid_until'];
131
+                    $valid_until_string = date('d.m.Y', strtotime($acc['autoresponder']['valid_until']));
132
+                    if ($valid_from == NULL) {
133
+                        // Autoresponder abgeschaltet
134
+                        //array_push($actions, "<strike>Automatische Antwort versenden</strike> (Abgeschaltet)");
135
+                    } elseif ($valid_from > $now) {
136
+                        array_push($actions, "<strike>Automatische Antwort versenden</strike> (Wird aktiviert am {$valid_from_string})");
137
+                    } elseif ($valid_until == NULL) {
138
+                        array_push($actions, "Automatische Antwort versenden (Unbefristet)");
139
+                    } elseif ($valid_until > $now) {
140
+                        array_push($actions, "Automatische Antwort versenden (Wird deaktiviert am {$valid_until_string})");
141
+                    } elseif ($valid_until < $now) {
142
+                        array_push($actions, "<strike>Automatische Antwort versenden</strike> (Automatisch abgeschaltet seit {$valid_until_string})");
143
+                    }
144
+                }
145
+                foreach ($acc['forwards'] AS $fwd)
146
+                {
147
+                    $fwd['destination'] = filter_input_general($fwd['destination']);
148
+                    array_push($actions, "Weiterleitung an <strong>{$fwd['destination']}</strong>");
149
+                }
150
+                $dest = '';
151
+                if (count($actions) > 0)
152
+                {
153
+                    $dest = "<ul>";
154
+                    foreach ($actions as $a)
155
+                        $dest .= "<li>{$a}</li>";
156
+                    $dest .= '</ul>';
157
+                }
158
+                if ($acc['smtpreply']) {
159
+                    output('<p><strike>'.$acc['local'].'@'.$this_account['domainname'].'</strike> '.internal_link("save", '<img src="'.$prefix.'images/delete.png" alt="löschen" title="Dieses Konto löschen"/>', "action=delete&id=".$acc['id']).'</p>');
160
+                    output("<ul><li>".icon_disabled()." Diese Adresse ist stillgelegt. <strong>".internal_link('suspend', 'Stilllegung ändern/aufheben', 'account='.$acc['id']).'</strong></li></ul>');
161
+                } else {
162
+                    output('<p>'.internal_link('edit', $acc['local'].'@'.$this_account['domainname'], 'id='.$acc['id']).' '.internal_link("save", '<img src="'.$prefix.'images/delete.png" alt="löschen" title="Dieses Konto löschen"/>', "action=delete&id=".$acc['id']).'</p>');
163
+                    output('<p>'.$dest.'</p>');
164
+                }
165
+            }
129 166
         } else {
130
-          output('<p>'.internal_link('edit', $acc['local'].'@'.$this_account['domainname'], 'id='.$acc['id']).' '.internal_link("save", '<img src="'.$prefix.'images/delete.png" alt="löschen" title="Dieses Konto löschen"/>', "action=delete&id=".$acc['id']).'</p>');
131
-          output('<p>'.$dest.'</p>');
167
+            output('<p><em>Bisher keine E-Mail-Adressen unter dieser Domain.</em></p>');
132 168
         }
133
-	    }
134
-    } else {
135
-      output('<p><em>Bisher keine E-Mail-Adressen unter dieser Domain.</em></p>');
136
-    }
137
-    addnew("edit", "Neue E-Mail-Adresse anlegen", "domain={$dom['id']}");
138
-    output('</div>');
139
-  } 
169
+        addnew("edit", "Neue E-Mail-Adresse anlegen", "domain={$dom['id']}");
170
+        output('</div>');
171
+    } 
140 172
 }
141 173
 else
142 174
 {
143
-  output('<p><em>Es sind bisher keine Ihrer Domains für Mail-Empfang eingerichtet.</em></p>');
175
+    output('<p><em>Es sind bisher keine Ihrer Domains für Mail-Empfang eingerichtet.</em></p>');
144 176
 }
145
-        
177
+
146 178
 
147 179
 /* FIXME: Das sollte nur kommen, wenn der IMAP/POP3-Menü-Eintrag nicht da ist */
148 180
 output('<p style="font-size: 90%;padding-top: 0.5em; border-top: 1px solid black;">Hinweis: '.config('company_name').' bietet für fortgeschrittene Nutzer die manuelle Einrichtung von POP3/IMAP-Accounts.<br/>'.internal_link("imap", "Neuen POP3/IMAP-Account anlegen", "action=create").'</p>');
... ...
@@ -39,9 +39,6 @@ $filter = "";
39 39
 if (isset($_REQUEST['filter']) && $_REQUEST['filter'] != '') {
40 40
   $filter = $_REQUEST['filter'];
41 41
 }
42
-if (isset($_REQUEST['clear']) && $_REQUEST['clear'] == 'X') {
43
-    $filter = "";
44
-}
45 42
 $vhosts = list_vhosts($filter);
46 43
 
47 44