Handle hostnames with upper-case letters
[webmin.git] / mailboxes / list_mail.cgi
1 #!/usr/local/bin/perl
2 # list_mail.cgi
3 # List the mail messages for some user in some folder
4
5 require './mailboxes-lib.pl';
6 &ReadParse();
7 &can_user($in{'user'}) || &error($text{'mail_ecannot'});
8 &is_user($in{'user'}) || -e $in{'user'} || &error($text{'mail_efile'});
9 $uuser = &urlize($in{'user'});
10
11 if ($config{'track_read'}) {
12         dbmopen(%read, "$module_config_directory/$in{'user'}.read", 0600);
13         }
14
15 # Make sure the mail system is OK
16 $err = &test_mail_system();
17 if ($err) {
18         &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
19         if (!$access{'noconfig'}) {
20                 &ui_print_endpage(&text('index_esystem3',
21                                         "../config.cgi?$module_name", $err));
22                 }
23         else {
24                 &ui_print_endpage(&text('mail_esystem', $err));
25                 }
26         }
27
28 &ui_print_header(undef, $text{'mail_title'}, "");
29 print &check_clicks_function();
30 @folders = &list_user_folders_sorted($in{'user'});
31 ($folder) = grep { $_->{'index'} == $in{'folder'} } @folders;
32
33 # Get folder-selection HTML
34 $sel = &folder_select(\@folders, $folder, "folder", undef, 0, 1);
35
36 # Work out start from jump page
37 $perpage = $folder->{'perpage'} || $config{'perpage'};
38 if ($in{'jump'} =~ /^\d+$/ && $in{'jump'} > 0) {
39         $in{'start'} = ($in{'jump'}-1)*$perpage;
40         }
41
42 # View mail from the most recent
43 @mail = reverse(&mailbox_list_mails(-$in{'start'},
44                                     -$in{'start'}-$perpage+1,
45                                     $folder, 1, \@error));
46 if ($in{'start'} >= @mail && $in{'jump'}) {
47         # Jumped too far!
48         $in{'start'} = @mail - $perpage;
49         @mail = reverse(&mailbox_list_mails(-$in{'start'},
50                                             -$in{'start'}-$perpage+1,
51                                             $folder, 1, \@error));
52         }
53
54 # Show page flipping arrows
55 &show_arrows();
56
57 # Start of the deletion / move form
58 print &ui_form_start("delete_mail.cgi", "post");
59 print &ui_hidden("user", $in{'user'});
60 print &ui_hidden("folder", $folder->{'index'});
61 print &ui_hidden("mod", &modification_time($folder));
62 print &ui_hidden("start", $in{'start'});
63 if ($config{'top_buttons'} && @mail) {
64         &show_buttons(1, \@folders, $folder, \@mail, $in{'user'});
65         }
66
67 # Show error opening folder
68 if (@error) {
69         print "<center><b><font color=#ff0000>\n";
70         print &text('mail_err', $error[0] == 0 ? $error[1] :
71                               &text('save_elogin', $error[1])),"\n";
72         print "</font></b></center>\n";
73         }
74
75 # Get the mails
76 @showmail = ( );
77 for($i=$in{'start'}; $i<@mail && $i<$in{'start'}+$perpage; $i++) {
78         push(@showmail, $mail[$i]);
79         }
80 @hasattach = &mail_has_attachments(\@showmail, $folder);
81
82 # Show them
83 if (@mail) {
84         &show_mail_table(\@showmail, $folder, 1);
85         }
86
87 &show_buttons(2, \@folders, $folder, \@mail, $in{'user'});
88 print &ui_form_end();
89 if ($config{'arrows'} && @mail) {
90         # Show page flipping arrows at the bottom
91         &show_arrows();
92         }
93
94 @grid = ( );
95 if (@mail) {
96         # Show simple search form
97         push(@grid, &ui_form_start("mail_search.cgi").
98                     &ui_hidden("user", $in{'user'}).
99                     &ui_hidden("folder", $folder->{'index'}).
100                     &ui_hidden("simple", 1).
101                     &ui_submit($text{'mail_search2'})." ".
102                     &ui_textbox("search", undef, 20).
103                     &ui_form_end());
104
105         # Show advanced search button
106         push(@grid, &ui_form_start("search_form.cgi").
107                     &ui_hidden("user", $in{'user'}).
108                     &ui_hidden("folder", $folder->{'index'}).
109                     &ui_submit($text{'mail_advanced'}, "advanced").
110                     &ui_form_end());
111
112         # Show delete all button
113         push(@grid, &ui_form_start("delete_all.cgi").
114                     &ui_hidden("user", $in{'user'}).
115                     &ui_hidden("folder", $folder->{'index'}).
116                     &ui_submit($text{'mail_delall'}).
117                     &ui_form_end());
118         }
119
120 # Show page jump form
121 $jumpform = (@mail > $perpage);
122 if ($jumpform) {
123         push(@grid, &ui_form_start("list_mail.cgi").
124                     &ui_hidden("user", $in{'user'}).
125                     &ui_hidden("folder", $folder->{'index'}).
126                     &ui_submit($text{'mail_jump'})." ".
127                     &ui_textbox("jump", int($in{'start'} / $perpage)+1, 3)." ".
128                     $text{'mail_of'}." ".(int(@mail / $perpage)+1).
129                     &ui_form_end());
130         }
131
132 # Show the buttons, if any
133 if (@grid) {
134         print &ui_hr();
135         print &ui_grid_table(\@grid, 4, 100,
136                   [ "align=left width=25%", "align=center width=25%",
137                     "align=center width=25%", "align=right width=25%" ],
138                   "cellpadding=0 cellspacing=0");
139         }
140
141 if ($config{'log_read'}) {
142         &webmin_log("read", undef, $in{'user'},
143                     { 'file' => $folder->{'file'} });
144         }
145 &ui_print_footer("", $text{'index_return'});
146
147 sub show_arrows
148 {
149 my $link = "list_mail.cgi?user=".&urlize($in{'user'})."&folder=".$in{'folder'};
150 my $left = $in{'start'} ?
151            $link."&start=".($in{'start'}-$perpage) : undef;
152 my $right = $in{'start'}+$perpage < @mail ?
153             $link."&start=".($in{'start'}+$perpage) : undef;
154 my $first = $in{'start'} ?
155             $link."&start=0" : undef;
156 my $last = $in{'start'}+$perpage < @mail ?
157            $link."&start=".(int((scalar(@mail)-$perpage-1)/$perpage + 1)*$perpage) : undef;
158 my $s = @mail-$in{'start'};
159 my $e = @mail-$in{'start'}-$perpage+1;
160 print &ui_page_flipper(
161         @mail ? &text('mail_pos', $s, $e < 1 ? 1 : $e, scalar(@mail), $sel)
162               : &text('mail_none', $sel),
163         &ui_submit($text{'mail_fchange'}).&ui_hidden("user", $in{'user'}),
164         "list_mail.cgi",
165         $left,
166         $right,
167         $first,
168         $last,
169         );
170 }
171