#!/usr/local/bin/perl
# list_mail.cgi
# List the mail messages for some user in some folder
require './mailboxes-lib.pl';
&ReadParse();
&can_user($in{'user'}) || &error($text{'mail_ecannot'});
&is_user($in{'user'}) || -e $in{'user'} || &error($text{'mail_efile'});
$uuser = &urlize($in{'user'});
if ($config{'track_read'}) {
dbmopen(%read, "$module_config_directory/$in{'user'}.read", 0600);
}
# Make sure the mail system is OK
$err = &test_mail_system();
if ($err) {
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
if (!$access{'noconfig'}) {
&ui_print_endpage(&text('index_esystem3',
"../config.cgi?$module_name", $err));
}
else {
&ui_print_endpage(&text('mail_esystem', $err));
}
}
&ui_print_header(undef, $text{'mail_title'}, "");
print &check_clicks_function();
@folders = &list_user_folders_sorted($in{'user'});
($folder) = grep { $_->{'index'} == $in{'folder'} } @folders;
# Get folder-selection HTML
$sel = &folder_select(\@folders, $folder, "folder", undef, 0, 1);
# Work out start from jump page
$perpage = $folder->{'perpage'} || $config{'perpage'};
if ($in{'jump'} =~ /^\d+$/ && $in{'jump'} > 0) {
$in{'start'} = ($in{'jump'}-1)*$perpage;
}
# View mail from the most recent
@mail = reverse(&mailbox_list_mails(-$in{'start'},
-$in{'start'}-$perpage+1,
$folder, 1, \@error));
if ($in{'start'} >= @mail && $in{'jump'}) {
# Jumped too far!
$in{'start'} = @mail - $perpage;
@mail = reverse(&mailbox_list_mails(-$in{'start'},
-$in{'start'}-$perpage+1,
$folder, 1, \@error));
}
# Show page flipping arrows
&show_arrows();
# Start of the deletion / move form
print &ui_form_start("delete_mail.cgi", "post");
print &ui_hidden("user", $in{'user'});
print &ui_hidden("folder", $folder->{'index'});
print &ui_hidden("mod", &modification_time($folder));
print &ui_hidden("start", $in{'start'});
if ($config{'top_buttons'} && @mail) {
&show_buttons(1, \@folders, $folder, \@mail, $in{'user'});
}
# Show error opening folder
if (@error) {
print "
\n";
print &text('mail_err', $error[0] == 0 ? $error[1] :
&text('save_elogin', $error[1])),"\n";
print "\n";
}
# Get the mails
@showmail = ( );
for($i=$in{'start'}; $i<@mail && $i<$in{'start'}+$perpage; $i++) {
push(@showmail, $mail[$i]);
}
@hasattach = &mail_has_attachments(\@showmail, $folder);
# Show them
if (@mail) {
&show_mail_table(\@showmail, $folder, 1);
}
&show_buttons(2, \@folders, $folder, \@mail, $in{'user'});
print &ui_form_end();
if ($config{'arrows'} && @mail) {
# Show page flipping arrows at the bottom
&show_arrows();
}
@grid = ( );
if (@mail) {
# Show simple search form
push(@grid, &ui_form_start("mail_search.cgi").
&ui_hidden("user", $in{'user'}).
&ui_hidden("folder", $folder->{'index'}).
&ui_hidden("simple", 1).
&ui_submit($text{'mail_search2'})." ".
&ui_textbox("search", undef, 20).
&ui_form_end());
# Show advanced search button
push(@grid, &ui_form_start("search_form.cgi").
&ui_hidden("user", $in{'user'}).
&ui_hidden("folder", $folder->{'index'}).
&ui_submit($text{'mail_advanced'}, "advanced").
&ui_form_end());
# Show delete all button
push(@grid, &ui_form_start("delete_all.cgi").
&ui_hidden("user", $in{'user'}).
&ui_hidden("folder", $folder->{'index'}).
&ui_submit($text{'mail_delall'}).
&ui_form_end());
}
# Show page jump form
$jumpform = (@mail > $perpage);
if ($jumpform) {
push(@grid, &ui_form_start("list_mail.cgi").
&ui_hidden("user", $in{'user'}).
&ui_hidden("folder", $folder->{'index'}).
&ui_submit($text{'mail_jump'})." ".
&ui_textbox("jump", int($in{'start'} / $perpage)+1, 3)." ".
$text{'mail_of'}." ".(int(@mail / $perpage)+1).
&ui_form_end());
}
# Show the buttons, if any
if (@grid) {
print &ui_hr();
print &ui_grid_table(\@grid, 4, 100,
[ "align=left width=25%", "align=center width=25%",
"align=center width=25%", "align=right width=25%" ],
"cellpadding=0 cellspacing=0");
}
if ($config{'log_read'}) {
&webmin_log("read", undef, $in{'user'},
{ 'file' => $folder->{'file'} });
}
&ui_print_footer("", $text{'index_return'});
sub show_arrows
{
my $link = "list_mail.cgi?user=".&urlize($in{'user'})."&folder=".$in{'folder'};
my $left = $in{'start'} ?
$link."&start=".($in{'start'}-$perpage) : undef;
my $right = $in{'start'}+$perpage < @mail ?
$link."&start=".($in{'start'}+$perpage) : undef;
my $first = $in{'start'} ?
$link."&start=0" : undef;
my $last = $in{'start'}+$perpage < @mail ?
$link."&start=".(int((scalar(@mail)-$perpage-1)/$perpage + 1)*$perpage) : undef;
my $s = @mail-$in{'start'};
my $e = @mail-$in{'start'}-$perpage+1;
print &ui_page_flipper(
@mail ? &text('mail_pos', $s, $e < 1 ? 1 : $e, scalar(@mail), $sel)
: &text('mail_none', $sel),
&ui_submit($text{'mail_fchange'}).&ui_hidden("user", $in{'user'}),
"list_mail.cgi",
$left,
$right,
$first,
$last,
);
}