php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay
files >> /usr/libexec/webmin/authentic-theme/extensions/mail/ |
files >> //usr/libexec/webmin/authentic-theme/extensions/mail/messages.cgi |
#!/usr/bin/perl # # Authentic Theme (https://github.com/authentic-theme/authentic-theme) # Copyright Ilia Rostovtsev <ilia@virtualmin.com> # Licensed under MIT (https://github.com/authentic-theme/authentic-theme/blob/master/LICENSE) # use strict; our (%text, %in, %userconfig, %config, $special_folder_id); do("$ENV{'THEME_ROOT'}/extensions/mail/mail-lib.pl"); my %mails; open_dsn_hash(); # Get all available folders my @folders = list_folders_sorted(); # Get current folder if (defined($in{'id'}) && length $in{'id'}) { my $id = find_named_folder($in{'id'}, \@folders); if ($id) { $in{'folder'} = $id->{'index'}; } } elsif (!defined($in{'folder'}) && $userconfig{'default_folder'}) { my $df = find_named_folder($userconfig{'default_folder'}, \@folders); if ($df) { $in{'folder'} = $df->{'index'}; } } my ($folder) = grep {$_->{'index'} == $in{'folder'}} @folders; # Check mail quota my ($qtotal, $qcount, $totalquota, $countquota) = get_user_quota(); if ($totalquota) { $mails{'quota'} = text('extensions_mail_quota', theme_nice_size_local($qtotal), (int($qtotal * 100 / $totalquota)), theme_nice_size_local($totalquota)); } # Work out start from jump page my $perpage = $folder->{'perpage'} || $userconfig{'perpage'} || 20; $mails{'perpage'} = $perpage; # Work out displayed range my $start = int($in{'start'}); my $end = int($start + $perpage - 1); if ($in{'jump'} =~ /^\d+$/ && $in{'jump'} > 0) { $start = ($in{'jump'} - 1) * $perpage; } # Get email to show, in order my @fetch_mail_error; my ($start, @mail) = messages_fetch($start, $end, $perpage, $in{'jump'}, $folder, !$userconfig{'show_body'}, \@fetch_mail_error); if ($end >= scalar(@mail)) { $end = scalar(@mail) - 1; } if ($end < $start) { $start = 0; $end = int($start + $perpage - 1); ($start, @mail) = messages_fetch($start, $end, $perpage, $in{'jump'}, $folder, !$userconfig{'show_body'}, \@fetch_mail_error); } # Store default folders data my $folder_index = $folder->{'index'}; my $folder_id = $folder->{'id'}; my $folder_file = $folder->{'file'}; my $folder_name = $folder->{'name'}; # Searched messages my %searched; if ($in{'searched'}) { %searched = ('searched' => $in{'searched'}, 'searched_message' => $in{'searched_message'}, 'searched_folder_index' => $in{'searched_folder_index'}, 'searched_folder_name' => $in{'searched_folder_name'}, 'searched_folder_id' => $in{'searched_folder_id'}, 'searched_folder_file' => $in{'searched_folder_file'},); $mails{'searched'} = $searched{'searched'}; $mails{'searched_message'} = $searched{'searched_message'}; $mails{'searched_folder_index'} = $searched{'searched_folder_index'}; $mails{'searched_folder_name'} = $searched{'searched_folder_name'}; $mails{'searched_folder_id'} = folders_key_escape($searched{'searched_folder_id'}); $mails{'searched_folder_file'} = $searched{'searched_folder_file'}; } # Refresh timeout $mails{'refresh'} = $userconfig{'refresh'} || 5; #Folder index $mails{'folder_index'} = int($folder_index); #Folder id $mails{'folder_id'} = folders_key_escape(($folder_id || $folder_file)); # Folder breadcrumb my @folders_breadcrumb = split(/\./, $folder_name); $mails{'folder_breadcrumb'} = \@folders_breadcrumb; # Folder title $mails{'folder_title'} = $folder_name; # Folder name $mails{'folder_name'} = $folders_breadcrumb[-1]; # Folder counts my ($total, $unread, $special, $folder_counts_allowed) = folder_counts($folder); if ($total || $unread || $special) { $mails{'total'} = $total; $mails{'unread'} = $unread; $mails{'special'} = $special; } $total = scalar(@mail); $mails{'total'} = $total; $mails{'folder_counts_allowed'} = $folder_counts_allowed; # Folders select my $folders_select_by_id = folders_select(\@folders, $folder); # Pagination $mails{'pagination_start'} = $start; $mails{'pagination_end'} = $end; $mails{'pagination_current'} = int($start / $perpage) + 1; my $link = "index.cgi?folder=" . $in{'folder'}; my $initial = @mail - $start - $perpage + 1; my $percurrent = ($mails{'pagination_current'} * $perpage); $mails{'pagination_arrow_left'} = message_pagination_link('left', $start ? $link . "&start=" . ($start - $perpage) : undef); $mails{'pagination_arrow_right'} = message_pagination_link('right', $start + $perpage < @mail ? $link . "&start=" . ($start + $perpage) : undef); $mails{'pagination_arrow_first'} = message_pagination_link('first', $start ? $link . "&start=0" : undef); $mails{'pagination_arrow_last'} = message_pagination_link('last', $start + $perpage < @mail ? $link . "&start=" . (int(($total - $perpage - 1) / $perpage + 1) * $perpage) : undef); $mails{'pagination_message'} = @mail ? text('extensions_mail_current_position', $initial < 1 ? ($start ? $start + 1 : 1) : ($percurrent + 1 - $perpage), ($total < $percurrent ? $total : $percurrent), scalar(@mail)) : text('mail_none', $mails{'folder_name'}); # Buttons for managing mail my $form_list_buttons; if (@mail) { my $folders_count = scalar(@folders); my $can_report_spam = (can_report_spam($folder) || $folder->{'spam'} ? 1 : 0); #&& $userconfig{'spam_buttons'} =~ /list/ my $can_report_ham = (can_report_ham($folder) || $folder->{'spam'} ? 1 : 0); #&& $userconfig{'ham_buttons'} =~ /list/ $form_list_buttons = { 'submit' => { 'buttons' => [['delete' => $text{'mail_delete'}], ['forward' => $text{'mail_forward'}]], 'dropdowns' => [ [ 'move' => [ ['move1' => $folders_select_by_id], ['copy1' => ui_span( theme_ui_checkbox_local('copy_only', undef, $text{'extensions_mail_move_copy_only'}, undef, "data-copy-only" ), 'pull-left' ) . ui_span( ui_btn($text{'theme_xhred_global_move'}, 'default disabled', 'data-transfer-submit'), 'pull-right' ) ], ] ], [ 'more' => [ ['markas1' => $text{'extensions_mail_mark_read'}], ['markas0' => $text{'extensions_mail_mark_unread'}], # ['markas2' => $text{'extensions_mail_mark_special'}], ($can_report_ham ? [ 'white' => ($userconfig{'white_move'} && $folder->{'spam'}) ? $text{'extensions_mail_mark_spam_mail_whitemove'} : $text{'extensions_mail_mark_spam_mail_white'} ] : [] ), ($can_report_spam ? ['black' => $text{'extensions_mail_mark_spam_mail_black'}] : []), ($can_report_spam ? [ 'razor' => $userconfig{'spam_del'} ? $text{'extensions_mail_mark_spam_view_razordel'} : $text{'extensions_mail_mark_spam_view_razor'} ] : [] ), (($can_report_ham) ? [ 'ham' => ($userconfig{'ham_move'} && $folder->{'spam'}) ? $text{'extensions_mail_mark_spam_view_hammove'} : $text{'extensions_mail_mark_spam_view_ham'} ] : [] ), ] ], ], }, 'select' => { 'all' => message_select_link("d", undef, undef, undef, undef, 5, $text{'extensions_mail_select_all'}), 'none' => message_select_link("d", undef, undef, undef, undef, 4, $text{'extensions_mail_select_none'}), 'invert' => message_select_link("d", undef, undef, undef, undef, 3, $text{'extensions_mail_select_invert'}), 'read' => message_select_link("d", $folder, \@mail, $start, $end, 2, $text{'extensions_mail_select_read'}), 'unread' => message_select_link("d", $folder, \@mail, $start, $end, 1, $text{'extensions_mail_select_unread'}), 'special' => message_select_link("d", $folder, \@mail, $start, $end, 0, $text{'theme_xhred_global_starred'}), } }; } # Form for managing mail $mails{'form_list'} = { 'target' => 'delete_mail.cgi', ( 'hidden' => { 'id' => folders_key_escape(($folder_id || $folder_file)), 'folder' => $folder_index, 'mod' => modification_time($folder), 'start' => $start || defined, 'confirm' => 1, } ), 'buttons' => $form_list_buttons // defined }; # Assign errors if (@fetch_mail_error) { my $fetch_mail_error = "@fetch_mail_error"; my $mail_system = $config{'mail_system'}; my $mail_err = $fetch_mail_error; if ($fetch_mail_error =~ /\[AUTH/) { if ($mail_system == 4) { $mail_err = text('save_elogin2', $fetch_mail_error); } elsif ($mail_system == 2) { $mail_err = text('save_elogin', $fetch_mail_error); } $mails{'redirect'} = 'inbox_login_error.cgi'; } $mails{'error'} = text('mail_err', $mail_err); } my $errors = $mails{'error'}; if ($in{'error_fatal'} eq '1' || $errors) { my $error_message = $in{'error'}; if ($errors) { $mails{'error'} = { error => ($error_message ? [$errors, $error_message] : [$errors]) }; } elsif ($error_message) { $mails{'error'} = { error => [$error_message] }; } } # Mail list sorter my ($sorted) = get_sort_field($folder); my $showfrom = $folder->{'show_from'}; my $list_sort_from; if ($showfrom) { $list_sort_from = messages_sort_link($text{'extensions_mail_sort_by_sender'}, "from", $folder, $start, %searched); } my $showto = $folder->{'show_to'}; my $list_sort_to; if ($showto) { $list_sort_to = messages_sort_link($text{'extensions_mail_sort_by_recipient'}, "to", $folder, $start, %searched); } my $list_sort_spam; if ($folder->{'spam'}) { $list_sort_spam = messages_sort_link($text{'extensions_mail_sort_by_spam'}, "x-spam-status", $folder, $start, %searched); } # Mail list content my $list_mails; if (@mail) { $list_mails = messages_list($start, $end, $showfrom, $showto, $folder, @mail); } $mails{'list'} = { 'sort' => { 'from' => $list_sort_from, 'to' => $list_sort_to, 'date' => messages_sort_link($text{'extensions_mail_sort_by_date'}, "date", $folder, $start, %searched), 'size' => messages_sort_link($text{'extensions_mail_sort_by_size'}, "size", $folder, $start, %searched), 'spam' => $list_sort_spam, 'subject' => messages_sort_link($text{'extensions_mail_sort_by_subject'}, "subject", $folder, $start, %searched), }, 'messages' => $list_mails, 'sorted' => ( $sorted ? "<a @{[ui_tooltip($text{'extensions_mail_search_filter_reset'})]} data-href='sort.cgi?returned_format=json&folder=$folder_index&start=$start@{[hash_to_query('&', %searched)]}' class=\"fa fa-fw fa-filter-clear text-danger\"></a>" : undef ) }; $mails{'mail_system'} = $config{'mail_system'}; $mails{'config'} = { 'g' => \%config, 'u' => \%userconfig, }; save_last_folder_id($folder); pop3_logout(); print_json([\%mails]);y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`