Show index.html syntax highlighted
% # vim: set syntax=mason:
<%args>
$folder => 'none'
$start => -1
$n => 0
$sortby => 'unknown'
$message => ''
$check => 0
</%args>
<& /mail/header.mhtml, message => $message, refresh => 1, folder => $folder, start => $start, n => $n, sortby => $sortby, title => "Mail - $folder" &>
<SCRIPT LANGUAGE="JavaScript">
<!--
function check_all()
{
document.message_form.uids.checked=1;
for(var i=0; i<document.message_form.uids.length; i++)
document.message_form.uids[i].checked=1;
}
function uncheck_all()
{
document.message_form.uids.checked=0;
for(var i=0; i<document.message_form.uids.length; i++)
document.message_form.uids[i].checked=0;
}
function invert_checks()
{
document.message_form.uids.checked=!document.message_form.uids.checked;
for(var i=0; i<document.message_form.uids.length; i++)
document.message_form.uids[i].checked=!document.message_form.uids[i].checked;
}
function check_read()
{
if(document.message_form.uids.alt == "seen")
document.message_form.uids.checked=1;
else
document.message_form.uids.checked=0;
for(var i=0; i<document.message_form.uids.length; i++)
if(document.message_form.uids[i].alt == "seen")
document.message_form.uids[i].checked=1;
else
document.message_form.uids[i].checked=0;
}
function check_unread()
{
if(document.message_form.uids.alt == "seen")
document.message_form.uids.checked=0;
else
document.message_form.uids.checked=1;
for(var i=0; i<document.message_form.uids.length; i++)
if(document.message_form.uids[i].alt == "seen")
document.message_form.uids[i].checked=0;
else
document.message_form.uids[i].checked=1;
}
// -->
</SCRIPT>
<div class="top_controls">
<%doc>
% if($prefs->get('quicknav', 0)) {
<div class="message_selector">
Index: <% build_message_selector($folder, $msgcnt, $start, $n, $sortby, $user->getAttribute('javascript')) %>
</div>
% }
</%doc>
<form name="message_form" action="/mail/process_messages.html" method="post">
<div class="index_controls">
% if($trash eq $folder) {
<input type="submit" name="empty" value="Empty Trash">
% } else {
<input type="submit" name="delete" value="Delete">
% }
<input type="hidden" name="folder" value="<% $folder |h %>">
<input type="hidden" name="start" value="<% $start |h %>">
<input type="hidden" name="n" value="<% $n |h %>">
<input type="hidden" name="sortby" value="<% $sortby |h %>">
<input type="hidden" name="uidv" value="<% $uidvalidity |h %>">
<select name="action" onChange="document.message_form.submit()">
<option selected value="none">More Actions ...</option>
% if($trash eq 'none') {
<option value="undelete"> Undelete</option>
<option value="expunge"> Purge Deleted</option>
<option value="kill"> Delete and Purge</option>
% }
<option value="report"> Report Spam</option>
</optgroup>
<option disabled value="none">------</option>
<option disabled>Move to:</option>
% for my $fldr (@alt_folders, @$folderlist) {
% my $displayname = $tr->decode($fldr);
% $displayname =~ s/^\Q$prefix\E\/?//;
<option value="to:<% $fldr |h %>"> <% decode('utf8', $displayname) |h %></option>
% }
</select>
% if(!$user->getAttribute('javascript')) {
<input type="submit" name="nothing" value="Go">
% }
<% hyperlink("/mail/index.html", "Refresh", \%ARGS) %><br>
</div>
% if($user->getAttribute('dumb_browser')) { # DUMB BROWSER AGAIN! ***********
<div class="navright_retarded">
% } else { # END OF DUMB BROWSER ********************************************
<div class="navright">
% }
% if($start > $n+1) {
<% hyperlink('/mail/index.html', "<< First", { start => 1, n => $n, sortby => $sortby , folder => $folder }, 'unselected') %>
% }
% if($start > 1) {
<% hyperlink('/mail/index.html', "< Previous", { start => ($start-$n > 0 ? ($start-$n):1), n => $n, sortby => $sortby , folder => $folder }, 'unselected') %>
% }
<% $msgcnt ? $start:0 %> - <% $start+$n-1 > $msgcnt ? $msgcnt:($start+$n-1) %> of <% $msgcnt %>
% if(($start+$n) < ($msgcnt+1)) {
<% hyperlink('/mail/index.html', "Next >", { start => $start+$n, n => $n, sortby => $sortby , folder => $folder }, 'unselected') %>
% }
% if($start+2*$n-1 < $msgcnt) {
<% hyperlink('/mail/index.html', "Last >>", { start => $msgcnt-$n+1, n => $n, sortby => $sortby , folder => $folder }, 'unselected') %>
% }
</div>
</div>
<div class="message_quickcheck">
% if($js) {
Select:
<a class="control" onClick="check_all();" href="#">All</a>,
<a class="control" onClick="uncheck_all();" href="#">None</a>,
<a class="control" onClick="invert_checks();" href="#">Invert</a>,
<a class="control" onClick="check_read();" href="#">Read</a>,
<a class="control" onClick="check_unread();" href="#">Unread</a>
% } else {
Select:
<% hyperlink('/mail/index.html', "All", { check => "All" }, "control") %>,
<% hyperlink('/mail/index.html', "None", { check => 0 }, "control") %>,
<% hyperlink('/mail/index.html', "Read", { check => "Read" }, "control") %>,
<% hyperlink('/mail/index.html', "Unread", { check => "Unread" }, "control") %>
% }
</div>
% if($user->getAttribute('dumb_browser')) { # STUPID BROWSER *****************
<table class="messagelist">
<tr>
<td>
</td>
<td class="messageFrom_retarded">
<% hyperlink("/mail/index.html", "Sender", { start => $start, n => $n, sortby => 'from', uidv => $uidvalidity }, $sortby eq 'from' ? "selected":"unselected") %>
</td>
<td class="messageSubject_retarded">
<% hyperlink("/mail/index.html", "Subject" . ($sortby eq 'thread' ? " (sorted by thread and date)":""), { start => $start, n => $n, sortby => 'thread', uidv => $uidvalidity }, $sortby eq 'thread' ? "selected":"unselected") %>
</td>
<td class="messageDate_retarded">
<% hyperlink("/mail/index.html", "Date", { start => $start, n => $n, sortby => 'date', uidv => $uidvalidity }, $sortby eq 'date' ? "selected":"unselected") %>
</td>
</tr>
% if(defined($headers) && @$headers && defined($headers->[0]{to})) {
<%perl>
my $offset = $start;
for my $entry (@$headers) {
my $date = $entry->{date};
my ($day, $month, $year, $hour, $minute) = $date =~ m/(?:\w+,\s+)?(\d{1,2})\s+(\w{3})\s+(\d{2,4})\s+(\d+):(\d+):/;
my $from = $entry->{from};
if($from =~ m/^([^<]*)\s*<[^>]*>$/) {
$from = $1;
}
</%perl>
<tr>
<td class="messageFlags_retarded">
<input alt="<% $entry->{seen} ? "seen":"unseen" %>"
type="checkbox" name="uids"
<% ($check eq 'All' || ($check eq 'Read' && $entry->{seen}) || ($check eq 'Unread' && !$entry->{seen})) ? "checked":"" %>
value="<% $entry->{uid} %>">
<% ($entry->{answered} ? '<span class="flag">R</span>':'') %>
<% ($entry->{attachment} ? '<span class="flag">A</span>':'') %>
<% ($entry->{flagged} ? '<span class="flag">F</span>':'') %>
<% ($entry->{forwarded} ? '<span class="flag">W</span>':'') %>
</td>
<td class="messageFrom_retarded">
<% ($entry->{seen} ? '<span class="seen">':
'<span class="unseen">') %>
<% hyperlink("/mail/read.html", $from,
{ sorted_offset => $offset, n => $n,
uidv => $uidvalidity, uid => $entry->{uid},
sortby => $sortby , folder => $folder }) %>
</span>
</td>
<td class="messageSubject_retarded">
<a href="<% build_url("/mail/read.html",
{ sorted_offset => $offset, n => $n,
uidv => $uidvalidity, uid => $entry->{uid},
sortby => $sortby , folder => $folder }) %>"
class="<% $entry->{deleted} ? "deleted":"" %>">
<% ($entry->{seen} ? '<span class="seen">': '<span class="unseen">') %><% (($sortby eq 'thread' && $entry->{threadlevel}) ? ("+" . "-" x $entry->{threadlevel}):"") . $entry->{subject} |h %> - <span class="snippet"><% $entry->{snippet} |h %></span></span>
</a>
</td>
<td class="messageDate_retarded">
<% hyperlink("/mail/read.html", $month . " " . $day .
", " . $year . " " . $hour . ":" . $minute,
{ sorted_offset => $offset, n => $n,
uidv => $uidvalidity, uid => $entry->{uid},
sortby => $sortby , folder => $folder }) %>
</td>
</tr>
% $offset++;
% }
% } else {
<tr>
<td class="tablemessage_retarded" colspan="4">
There are no messages in this mailbox.
</td>
</tr>
% }
</table>
% } else { # NOT A DUMB BROWSER: ********************************************
<table class="messagelist">
<tr>
<td class="messageFlags">
</td>
<td class="messageFrom">
<div class="nowrap">
<% hyperlink("/mail/index.html", "Sender", { start => $start, n => $n, sortby => 'from', uidv => $uidvalidity }, $sortby eq 'from' ? "selected":"unselected") %>
</div>
</td>
<td class="messageSubject">
<div class="nowrap">
<% hyperlink("/mail/index.html", "Subject" . ($sortby eq 'thread' ? " (sorted by thread and date)":""), { start => $start, n => $n, sortby => 'thread', uidv => $uidvalidity }, $sortby eq 'thread' ? "selected":"unselected") %>
</div>
</td>
<td class="messageDate">
<div class="nowrap">
<% hyperlink("/mail/index.html", "Date", { start => $start, n => $n, sortby => 'date', uidv => $uidvalidity }, $sortby eq 'date' ? "selected":"unselected") %>
</div>
</td>
</tr>
% if(defined($headers) && @$headers && defined($headers->[0]{to})) {
<%perl>
my $offset = $start;
for my $entry (@$headers) {
my $date = $entry->{date};
my ($day, $month, $year, $hour, $minute) = $date =~ m/(?:\w+,\s+)?(\d{1,2})\s+(\w{3})\s+(\d{2,4})\s+(\d+):(\d+):/;
my $from = $entry->{from};
if($from =~ m/^([^<]*)\s*<[^>]*>$/) {
$from = $1;
}
</%perl>
<tr>
<td class="messageFlags">
<input alt="<% $entry->{seen} ? "seen":"unseen" %>"
type="checkbox" name="uids"
<% ($check eq 'All' || ($check eq 'Read' && $entry->{seen}) || ($check eq 'Unread' && !$entry->{seen})) ? "checked":"" %>
value="<% $entry->{uid} %>">
<span class="flags">
<% ($entry->{answered} ? '<span class="flag">R</span>':'') %>
<% ($entry->{attachment} ? '<span class="flag">A</span>':'') %>
<% ($entry->{flagged} ? '<span class="flag">F</span>':'') %>
<% ($entry->{forwarded} ? '<span class="flag">W</span>':'') %>
</span>
</td>
<td class="messageFrom">
<div class="nowrap">
<% ($entry->{seen} ? '<span class="seen">':
'<span class="unseen">') %>
<% hyperlink("/mail/read.html", $from,
{ sorted_offset => $offset, n => $n,
uidv => $uidvalidity, uid => $entry->{uid},
sortby => $sortby , folder => $folder }) %>
</span>
</div>
</td>
<td class="messageSubject">
<div class="nowrap">
<a href="<% build_url("/mail/read.html",
{ sorted_offset => $offset, n => $n,
uidv => $uidvalidity, uid => $entry->{uid},
sortby => $sortby , folder => $folder }) %>"
class="<% $entry->{deleted} ? "deleted":"" %>">
<% ($entry->{seen} ? '<span class="seen">': '<span class="unseen">') %><% (($sortby eq 'thread' && $entry->{threadlevel}) ? ("+" . "-" x $entry->{threadlevel}):"") . $entry->{subject} |h %> - <span class="snippet"><% $entry->{snippet} |h %></span></span>
</a>
</div>
</td>
<td class="messageDate">
<div class="nowrap">
<% hyperlink("/mail/read.html", $month . " " . $day .
", " . $year . " " . $hour . ":" . $minute,
{ sorted_offset => $offset, n => $n,
uidv => $uidvalidity, uid => $entry->{uid},
sortby => $sortby , folder => $folder }) %>
</div>
</td>
</tr>
% $offset++;
% }
% } else {
<tr>
<td class="tablemessage" colspan="4">
There are no messages in this mailbox.
</td>
</tr>
% }
</table>
% } # END OF NOT A DUMB BROWSER *********************************************
</form>
<div class="message_quickcheck">
% if($js) {
Select:
<a class="control" onClick="check_all();" href="#">All</a>,
<a class="control" onClick="uncheck_all();" href="#">None</a>,
<a class="control" onClick="invert_checks();" href="#">Invert</a>,
<a class="control" onClick="check_read();" href="#">Read</a>,
<a class="control" onClick="check_unread();" href="#">Unread</a>
% } else {
Select:
<% hyperlink('/mail/index.html', "All", { check => "All" }, "control") %>,
<% hyperlink('/mail/index.html', "None", { check => 0 }, "control") %>,
<% hyperlink('/mail/index.html', "Read", { check => "Read" }, "control") %>,
<% hyperlink('/mail/index.html', "Unread", { check => "Unread" }, "control") %>
% }
</div>
<!-- Cache lookup time: <% sprintf("%4.2f", tv_interval( $st, $st2)) %> seconds -->
<P>Response time: <% sprintf("%4.2f", tv_interval( $st, [gettimeofday])) %> seconds
<& /mail/footer.mhtml &>
<%init>
my $user = Apache::SiteControl->getCurrentUser($r);
AlphaMail::SessionUtil::sessionSetup($r, $user, $config);
my $logger = Log::Log4perl->get_logger('alphamail');
my $tr = Unicode::IMAPUtf7->new();
my $js = 0;
my $prefs = new AlphaMail::Preferences($user->getUsername(),
$user->getAttribute('imap'), $config);
if(!$prefs->get('trash_folder')) {
$m->redirect('/mail/first_login.html');
}
if(!defined($user->getAttribute('javascript'))) {
# FIXME: Add in browser detection to avoid browsers that are flaky
$user->setAttribute($r, 'javascript', 0);
if(defined($user->getAttribute('credential_4'))) {
if($user->getAttribute('credential_5') =~ m/Safari/) {
$user->setAttribute($r, 'dumb_browser', 0);
} elsif($user->getAttribute('credential_5') =~ m/Gecko\/(\d+)\s/) {
if($1 > 20040500) {
$user->setAttribute($r, 'dumb_browser', 0);
} else {
$user->setAttribute($r, 'dumb_browser', 1);
}
}
if($user->getAttribute('credential_5') =~ m/MSIE\s+(\d+)\.(\d+)/) {
if($1 < 6) {
$user->setAttribute($r, 'dumb_browser', 1);
}
}
$user->setAttribute($r, 'javascript', $user->getAttribute('credential_4'));
$logger->info($user->getUsername() . " using " . $user->getAttribute('credential_5') . " version " . $user->getAttribute('credential_6'));
}
}
$js = $user->getAttribute('javascript');
my $prefix = $config->get('folder_prefix', 'mail');
# Get the configured allowed number of messages per page:
my @allowed_per_page = $config->getList('allowed_per_page', 20, 30, 50);
@allowed_per_page = (20) if(!@allowed_per_page);
my $trash = $prefs->get('trash_folder', 'none');
my $altfolders = $prefs->get('alt_folders', '');
my @alt_folders = split /,/, $altfolders if($altfolders);
if(!$n) {
my @allowed_per_page = $config->getList('allowed_per_page', 20, 35, 50);
$n = $prefs->get('messages_per_page', $allowed_per_page[0]);
}
my $folderlist;
my $headers;
my $uidvalidity;
my $c;
my $msgcnt;
my $st = [gettimeofday];
my $st2;
if($sortby eq 'unknown') {
$sortby = $user->getAttribute('lastsortby') || 'date';
} else {
$user->setAttribute($r, 'lastsortby', $sortby);
}
eval {
$c = new AlphaMail::Middleware($user->getAttribute('imap'), $user->getUsername(), $user->getAttribute('password'), $config);
$folderlist = AlphaMail::SessionUtil::getFolderList($r, $user, $config);
($folder, $start, $n, $sortby) = AlphaMail::SessionUtil::markLocation($r, $user, $folder, $start, $n, $sortby);
$msgcnt = $c->getMessageCount($folder);
$start = $msgcnt - $n if($start > $msgcnt);
if($start < 1) {
# if($prefs->get('quicknav', 0)) {
# $start = $msgcnt - ($msgcnt % $n == 0 ? $n:($msgcnt % $n)) + 1;
# } else {
$start = $msgcnt - $n + 1;
# }
# } elsif($start % $n != 1 && $prefs->get('quicknav', 0)) {
# $start = $start - ($start % $n == 0 ? $n:($start % $n)) + 1;
}
$start = 1 if($start < 1);
$headers = $c->getMessageHeaders($folder, $start, $n, $sortby);
$msgcnt = $headers->[0]{count};
$uidvalidity = $headers->[0]{uidvalidity};
$c->close;
};
if($@) {
$message = "Error: $@";
}
$st2 = [gettimeofday];
</%init>
<%once>
use Data::Dumper;
use Encode;
use Time::HiRes qw( gettimeofday tv_interval );
use AlphaMail::HTMLHelper qw(build_message_selector hyperlink);
</%once>
See more files for this project here