#!/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"); # 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(); print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($config{'top_buttons'} && @mail) { &show_buttons(1, \@folders, $folder, \@mail, $in{'user'}); @links = ( &select_all_link("d", 1), &select_invert_link("d", 1) ); print &ui_links_row(\@links); } # 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"; } $showto = $folder->{'sent'} || $folder->{'drafts'}; @tds = ( "width=5", "nowrap", "nowrap", "nowrap", "nowrap" ); if (@mail) { # Show mailbox headers local @hcols; push(@hcols, ""); push(@hcols, $showto ? $text{'mail_to'} : $text{'mail_from'}); push(@hcols, $config{'show_to'} ? $showto ? ( $text{'mail_from'} ) : ( $text{'mail_to'} ) : ()); push(@hcols, $text{'mail_date'}); push(@hcols, $text{'mail_size'}); push(@hcols, $text{'mail_subject'}); print &ui_columns_start(\@hcols, 100, 0, \@tds); } # Show rows for actual mail messages for($i=$in{'start'}; $i<@mail && $i<$in{'start'}+$perpage; $i++) { local $idx = $mail[$i]->{'idx'}; local $cols = 0; local @cols; local $from = $mail[$i]->{'header'}->{$showto ? 'to' : 'from'}; $from = $text{'mail_unknown'} if ($from !~ /\S/); push(@cols, &view_mail_link($in{'user'}, $folder, $idx, $from)); if ($config{'show_to'}) { push(@cols, &simplify_from( $mail[$i]->{'header'}->{$showto ? 'from' : 'to'})); } push(@cols, &simplify_date($mail[$i]->{'header'}->{'date'})); push(@cols, &nice_size($mail[$i]->{'size'}, 1024)); local $tbl; $tbl .= "". "
".&simplify_subject($mail[$i]->{'header'}->{'subject'}). " "; if ($mail[$i]->{'header'}->{'content-type'} =~ /multipart\/\S+/i) { $tbl .= ""; } local $p = int($mail[$i]->{'header'}->{'x-priority'}); if ($p == 1) { $tbl .= " "; } elsif ($p == 2) { $tbl .= " "; } if (!$showto) { if ($read{$mail[$i]->{'header'}->{'message-id'}} == 2) { $tbl .= " "; } elsif ($read{$mail[$i]->{'header'}->{'message-id'}} == 1) { $tbl .= " "; } } $tbl .= "
\n"; push(@cols, $tbl); if (&editable_mail($mail[$i])) { print &ui_checked_columns_row(\@cols, \@tds, "d", $idx); } else { print &ui_columns_row([ "", @cols ], \@tds); } if ($config{'show_body'}) { # Show part of the body too &parse_mail($mail[$i]); local $data = &mail_preview($mail[$i]); if ($data) { print " ", &html_escape($data)," \n"; } } } if (@mail) { print &ui_columns_end(); print &ui_links_row(\@links); } &show_buttons(2, \@folders, $folder, \@mail, $in{'user'}); print "
\n"; if ($config{'arrows'} && @mail) { # Show page flipping arrows at the bottom &show_arrows(); } if (@mail) { print "
\n"; print "\n"; # Show simple search form print "\n"; # Show advanced search button print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; # Show delete all button print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } # Show page jump form $jumpform = (@mail > $perpage); if ($jumpform) { print "\n"; print "\n"; print "\n"; print "\n"; } elsif (@mail) { print "\n"; } if (@mail) { print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; printf " %s %s\n", int($in{'start'} / $perpage)+1, $text{'mail_of'}, int(@mail / $perpage)+1; print "
\n"; } if ($config{'log_read'}) { &webmin_log("read", undef, $in{'user'}, { 'file' => $folder->{'file'} }); } &ui_print_footer("", $text{'index_return'}); sub show_arrows { print "
\n"; print "
\n"; print "\n"; if ($in{'start'}+$perpage < @mail) { printf "". "\n", $in{'start'}+$perpage, $uuser, $in{'folder'}; } local $s = @mail-$in{'start'}; local $e = @mail-$in{'start'}-$perpage+1; if (@mail) { print &text('mail_pos', $s, $e < 1 ? 1 : $e, scalar(@mail), $sel); } else { print &text('mail_none', $sel); } print "\n"; if ($in{'start'}) { printf "". "\n", $in{'start'}-$perpage, $uuser, $in{'folder'}; } print "
\n"; }