Handle hostnames with upper-case letters
[webmin.git] / sendmail / list_mailq.cgi
1 #!/usr/local/bin/perl
2 # list_mailq.cgi
3 # Display the current mail queue
4
5 require './sendmail-lib.pl';
6 require './boxes-lib.pl';
7 &ReadParse();
8 $access{'mailq'} || &error($text{'mailq_ecannot'});
9 print "Refresh: $config{'mailq_refresh'}\r\n"
10         if ($config{'mailq_refresh'});
11 &ui_print_header(undef, $text{'mailq_title'}, "");
12
13 $conf = &get_sendmailcf();
14 @qfiles = &list_mail_queue($conf);
15
16 if ($access{'qdoms'}) {
17         # Filter out blocked mails
18         @qfiles = grep { &can_view_qfile($qmails{$_} = &mail_from_queue($_)) }
19                        @qfiles;
20         }
21
22 if ($config{'mailq_sort'} == 0) {
23         # Just sort by ID
24         @qfiles = sort { $a =~ /\/([^\/]+)$/; local $af = $1;
25                          $b =~ /\/([^\/]+)$/; local $bf = $1;
26                          $af cmp $bf } @qfiles;
27         }
28 else {
29         # We need the actual mails for sorting
30         local $q;
31         foreach $q (@qfiles) {
32                 $qmails{$q} ||= &mail_from_queue($q);
33                 }
34         if ($config{'mailq_sort'} == 1) {
35                 @qfiles = sort { lc(&address_parts($qmails{$a}->{'header'}->{'from'})) cmp
36                                  lc(&address_parts($qmails{$b}->{'header'}->{'from'})) } @qfiles;
37                 }
38         elsif ($config{'mailq_sort'} == 2) {
39                 @qfiles = sort { lc(&address_parts($qmails{$a}->{'header'}->{'to'})) cmp
40                                  lc(&address_parts($qmails{$b}->{'header'}->{'to'})) } @qfiles;
41                 }
42         elsif ($config{'mailq_sort'} == 3) {
43                 @qfiles = sort { lc($qmails{$a}->{'header'}->{'subject'}) cmp
44                                  lc($qmails{$b}->{'header'}->{'subject'}) } @qfiles;
45                 }
46         elsif ($config{'mailq_sort'} == 4) {
47                 @qfiles = sort { lc($qmails{$a}->{'status'}) cmp
48                                  lc($qmails{$b}->{'status'}) } @qfiles;
49                 }
50         elsif ($config{'mailq_sort'} == 5) {
51                 @qfiles = sort { $qmails{$b}->{'size'} <=>
52                                  $qmails{$a}->{'size'} } @qfiles;
53                 }
54         }
55
56
57 if (@qfiles) {
58         if (@qfiles > $config{'perpage'}) {
59                 # Need to show arrows
60                 print "<center>\n";
61                 $s = int($in{'start'});
62                 $e = $in{'start'} + $config{'perpage'} - 1;
63                 $e = @qfiles-1 if ($e >= @qfiles);
64                 if ($s) {
65                         printf "<a href='list_mailq.cgi?start=%d'>%s</a>\n",
66                             $s - $config{'perpage'},
67                             "<img src=/images/left.gif border=0 align=middle>";
68                         }
69                 print "<font size=+1>",&text('mail_pos', $s+1, $e+1,
70                                              scalar(@qfiles)),"</font>\n";
71                 if ($e < @qfiles-1) {
72                         printf "<a href='list_mailq.cgi?start=%d'>%s</a>\n",
73                             $s + $config{'perpage'},
74                             "<img src=/images/right.gif border=0 align=middle>";
75                         }
76                 print "</center>\n";
77                 }
78         else {
79                 # Can show them all
80                 $s = 0;
81                 $e = @qfiles - 1;
82                 }
83
84         # Show the queued mails
85         $quarcount = &mailq_table([ @qfiles[$s .. $e] ], \%qmails);
86
87         # Show queue search form
88         print "<form action=mailq_search.cgi>\n";
89         print "<b>$text{'mailq_search'}</b>\n";
90         print "<select name=field>\n";
91         foreach $f ('from', 'subject', 'to', 'cc', 'date', 'status', 'body', 'headers', 'size', '',
92             '!from', '!subject', '!to', '!cc', '!date', '!status', '!body', '!headers', '!size') {
93                 printf "<option value='%s'>%s\n", $f, $text{"match_$f"};
94                 }
95         print "</select>\n";
96         print "<input name=match size=20>\n";
97         print "&nbsp;<input type=submit value='$text{'mail_ok'}'>\n";
98         print "</form>\n";
99
100         # Show flush button(s)
101         if ($access{'flushq'}) {
102                 print &ui_hr();
103                 print &ui_buttons_start();
104                 print &ui_buttons_row("flushq.cgi",
105                                       $text{'mailq_flush'},
106                                       $text{'mailq_flushdesc'});
107                 if ($quarcount) {
108                         print &ui_buttons_row("flushq.cgi",
109                                               $text{'mailq_flushquar'},
110                                               $text{'mailq_flushquardesc'},
111                                               &ui_hidden("quar", 1));
112                         }
113                 print &ui_buttons_row("list_mailq.cgi?$in",
114                                       $text{'mailq_refresh'},
115                                       $text{'mailq_refreshdesc'});
116                 print &ui_buttons_end();
117                 }
118         }
119 else {
120         print "<b>$text{'mailq_none'}</b> <p>\n";
121         }
122
123 &ui_print_footer("", $text{'index_return'});
124