Code Search for Developers
 
 
  

index.html from AlphaMail at Krugle


Show index.html syntax highlighted

% # vim: set syntax=mason:
<%args>
$folder => 'none'
$start => -1
$n => 0
$sortby => 'unknown'
$filter => ''
$search_string => ''
$message => ''
$check => 0
</%args>
<& /mail/header.mhtml, message => $message, refresh => 1, folder => $folder, start => $start, n => $n, sortby => $sortby, title => "Mail - $folder" &>
<script type="text/javascript" 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>
<form name="message_form" action="<% $base %>/mail/process_messages.html" method="post">
<div class="top_controls">
      <div class="index_controls">
         <!-- This is a hack. Attempt to make enter key only modify the filter,
              instead of defaulting to the other "first" buttons. I don't want 
              this one to show, so I explicitly move it off-screen.
           -->
         <input style="zindex=2; position: absolute; left: -20pt; width: 0px;" type="submit" name="altfilt" value="1">
% if($trash eq $folder) {
         <input type="submit" name="empty" value="Empty Trash">
% } else {
         <input type="submit" name="delete" value="Delete">
%    if($trash eq 'none') {
         <input type="submit" name="purge" value="Purge Deleted">
%    }
% }
         <input type="hidden" name="folder" value="<% $folder |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">&nbsp;&nbsp;&nbsp;Undelete</option>
% }
            <option value="mark">&nbsp;&nbsp;&nbsp;Flag</option> 
            <option value="unmark">&nbsp;&nbsp;&nbsp;Unflag</option> 
            <option value="unread">&nbsp;&nbsp;&nbsp;Mark as unread</option> 
            <option disabled value="none">-----</option>
            <option value="report">&nbsp;&nbsp;&nbsp;Report Spam</option>
% if($trash eq 'none') {
            <option disabled value="none">-----</option>
            <option value="kill">&nbsp;&nbsp;&nbsp;Delete and Purge</option>
% }
            <optgroup label="Move to:">
% 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>
% }
            </optgroup>
         </select>
% if(!$user->getAttribute('javascript')) {
         <input type="submit" name="nothing" value="Go">
% }
         <% hyperlink("$base/mail/index.html", "Refresh") %><br>
      </div>
      <div class="navright">
% if($start > $n+1) {
         <% hyperlink("$base/mail/index.html", "<< First", { start => 1, n => $n, sortby => $sortby , folder => $folder, search_string => $search_string, filter => $filter }, 'unselected') %>
% }
% if($start > 1) {
         <% hyperlink("$base/mail/index.html", "< Previous", { start => ($start-$n > 0 ? ($start-$n):1), n => $n, sortby => $sortby, folder => $folder, search_string => $search_string, filter => $filter }, 'unselected') %>
% }
         <% $msgcnt ? $start:0 %> - <% $start+$n-1 > $msgcnt ? $msgcnt:($start+$n-1) %> of <% $msgcnt %>
% if(($start+$n) < ($msgcnt+1)) {
         <% hyperlink("$base/mail/index.html", "Next >", { start => $start+$n, n => $n, sortby => $sortby , folder => $folder, search_string => $search_string, filter => $filter  }, 'unselected') %>
% }
% if($start+2*$n-1 < $msgcnt) {
         <% hyperlink("$base/mail/index.html", "Last >>", { start => $msgcnt-$n+1, n => $n, sortby => $sortby , folder => $folder, search_string => $search_string, filter => $filter  }, 'unselected') %>
% }
         <br>Filter:<input onmouseover="return escape('Filter the folder view. Use from:address or to:address to filter by address, or simply use the words you want to find in the header and body of the messages. You may also use quotes for phrases. For example:<br>&nbsp;&nbsp;from:joe meeting')" type="text" name="search_string" size="20" value="<% $search_string |h %>">
      </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("$base/mail/index.html", "All", { check => "All" }, "control") %>,
      <% hyperlink("$base/mail/index.html", "None", { check => 0 }, "control") %>,
      <% hyperlink("$base/mail/index.html", "Read", { check => "Read" }, "control") %>,
      <% hyperlink("$base/mail/index.html", "Unread", { check => "Unread" }, "control") %>
% }
      </div>
      <table class="messagelist">
         <tr> 
            <td class="messageFlags">
            </td>
            <td class="messageFrom">
               <div class="nowrap">
                  <% hyperlink("$base/mail/index.html", ($is_sent_or_drafts ? "To":"From"), { start => $start, n => $n, sortby => ($is_sent_or_drafts ? ($sortby eq 'to' ? 'rto':'to'):($sortby eq 'from' ? 'rfrom':'from')), uidv => $uidvalidity, search_string => $search_string, filter => $filter  }, $sortby =~ m/^(from|to)$/ ? "selected":"unselected") %>
               </div>
            </td>
            <td class="messageSubject">
               <div class="nowrap">
                  <% hyperlink("$base/mail/index.html", "Subject", { start => $start, n => $n, sortby => ($sortby eq 'subject' ? 'rsubject':'subject'), uidv => $uidvalidity, search_string => $search_string, filter => $filter  }, $sortby =~ m'subject' ? "selected":"unselected") %>
               </div>
            </td>
            <td class="messageDate">
               <div class="date">
                  <% hyperlink("$base/mail/index.html", "Date", { start => $start, n => $n, sortby => ($sortby eq 'date' ? 'rdate':'date'), uidv => $uidvalidity, search_string => $search_string, filter => $filter  }, $sortby =~ m'date' ? "selected":"unselected") %>
               </div>
            </td>
         </tr>
% if(defined($headers) && @$headers && defined($headers->[0]{to})) {
<%perl>
      my $offset = $start;
      for my $entry (@$headers) {
         my $date = context_date($entry->{date});
         my @fromaddr = Email::Address->parse($entry->{from});
         my $from;
         if(@fromaddr && defined($fromaddr[0]) && $fromaddr[0]->phrase) {
            $from = $fromaddr[0]->phrase;
         } elsif(@fromaddr && defined($fromaddr[0]) && $fromaddr[0]->address) {
            $from = $fromaddr[0]->address;
         } else {
            $from = $entry->{from};
         }
         my @toaddr = Email::Address->parse($entry->{to});
         my $to;
         if(@toaddr && defined($toaddr[0]) && $toaddr[0]->phrase) {
            $to = $toaddr[0]->phrase;
         } elsif(@toaddr && defined($toaddr[0]) && $toaddr[0]->address) {
            $to = $toaddr[0]->address;
         } else {
            $to = $entry->{to};
         }
</%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" onmouseover="return escape('R = Replied, F = Forwarded');">
                  <% ($entry->{answered} ? 'R':'') %><% ($entry->{attachment} ? 'A':'') %><% ($entry->{forwarded} ? 'F':'') %>
               </span>
% my $parts = parts2hover($entry->{parts});
% if($parts) {
                  <img ALT="Attachment" src="<% $base %>/static/paperclip.png" width="16" height="16" onmouseover="return escape('<% $parts %>');">
% }
            </td>
% my $class = ($entry->{flagged} ? "flagged":($entry->{seen} ? "seen":"unseen"));
            <td class="messageFrom">
               <div class="nowrap">
                  <a href="<% build_url($read_page, 
                                 { sorted_offset => $offset, n => $n, 
                                   uidv => $uidvalidity, uid => $entry->{uid},
                                   sortby => $sortby , folder => $folder,
                                   search_string => $search_string,
                                   filter => $filter }) |h %>">
                     <span class="<% $class %>">
% if($is_sent_or_drafts) {
                     <% $to |h %>
% } else {
                     <% $from |h %>
% }
                     </span>
                  </a>
               </div>
            </td>
            <td class="messageSubject">
               <div class="nowrap">
                  <a href="<% build_url($read_page, 
                                 { sorted_offset => $offset, n => $n, 
                                   uidv => $uidvalidity, uid => $entry->{uid},
                                   sortby => $sortby , folder => $folder,
                                   search_string => $search_string,
                                   filter => $filter }) |h %>">
% if($entry->{deleted}) {
                  <span class="deleted">
% }
                     <span class="<% $class %>"><% (($sortby eq 'thread' && $entry->{threadlevel}) ? ("+" . "-" x $entry->{threadlevel}):"") . $entry->{subject} |h %></span> - <span class="snippet"><% $entry->{snippet} |h %></span>
% if($entry->{deleted}) {
                  </span>
% }
                  </a>
               </div>
            </td>
            <td class="messageDate">
               <div class="date">
                  <% $date |h %>
               </div>
            </td>
         </tr>
%             $offset++;
%    }
% } else {
         <tr>
            <td class="tablemessage" colspan="4">
               There are no messages in this mailbox.
            </td>
         </tr>
% }
      </table>
      <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("$base/mail/index.html", "All", { check => "All" }, "control") %>,
         <% hyperlink("$base/mail/index.html", "None", { check => 0 }, "control") %>,
         <% hyperlink("$base/mail/index.html", "Read", { check => "Read" }, "control") %>,
         <% hyperlink("$base/mail/index.html", "Unread", { check => "Unread" }, "control") %>
% }
      </div>
      <div class="index_controls">
% if($trash eq $folder) {
         <input type="submit" name="empty" value="Empty Trash">
% } else {
         <input type="submit" name="delete" value="Delete">
%    if($trash eq 'none') {
         <input type="submit" name="purge" value="Purge Deleted">
%    }
% }
         <select name="action2" onChange="document.message_form.submit()">
            <option disabled selected value="none">More Actions ...</option>
% if($trash eq 'none') {
            <option value="undelete">&nbsp;&nbsp;&nbsp;Undelete</option>
% }
            <option value="mark">&nbsp;&nbsp;&nbsp;Flag</option> 
            <option value="unmark">&nbsp;&nbsp;&nbsp;Unflag</option> 
            <option value="unread">&nbsp;&nbsp;&nbsp;Mark as unread</option> 
            <option disabled value="none">-----</option>
            <option value="report">&nbsp;&nbsp;&nbsp;Report Spam</option>
% if($trash eq 'none') {
            <option disabled value="none">-----</option>
            <option value="kill">&nbsp;&nbsp;&nbsp;Delete and Purge</option>
% }
            <optgroup label="Move to:">
% 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>
% }
            </optgroup>
         </select>
% if(!$user->getAttribute('javascript')) {
         <input type="submit" name="nothing" value="Go">
% }
         <% hyperlink("$base/mail/index.html", "Refresh", \%ARGS) %><br>
      </div>
   </form>
   <!-- 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>
$m->redirect($base . "/mail/logout.html") if($config->get('forcelogout', 0) &&
                                             $config->get('nologin', 0));

my $user = Apache2::SiteControl->getCurrentUser($r);
if(!$user || !$user->isa('Apache2::SiteControl::User')) {
   $logger->error("Unable to find a user for the given session key.");
   $m->redirect("/");
}
AlphaMail::SessionUtil::sessionSetup($r, $user, $config);
my $js = 0;
my $tr;
my $is_sent_or_drafts;
my $prefs;
my $read_page = "$base/mail/read.html"; # Default, unless draft folder

eval {
   $tr = Unicode::IMAPUtf7->new();
   $prefs = new AlphaMail::Preferences($user->getUsername(), 
                                      $user->getAttribute('mx'), $config);
   $search_string = decode_utf8($search_string);
};
if($@) {
   $logger->error("fatal error: $@. User, m and r were: ". Dumper($user, $m, $r));
   die "Unable to process index.html";
}

if($folder =~ m/\\/ || $folder =~ m/^\// || $folder =~ m/\.\./) {
   $logger->error("SECURITY ALERT: Access requested for folder $folder by user: " . $user->getUsername());
   $m->redirect("$base/mail/index.html");
}

if(!$prefs->get('trash_folder')) {
   $m->redirect("$base/mail/first_login.html");
}

# Notify them if they clobbered their own session
if($user->getAttribute("session_removed") && $user->getAttribute("session_removed") == 1) {
   $message = "Multiple sessions detected. You forgot to log out last time! Your old session was logged out.";
   $user->setAttribute($r, "session_removed", 0);
}

if(!defined($user->getAttribute('javascript'))) {
   # If the javascript property is not defined, then this is the first pass.
   # Features that vary with browser:
   #  - field completion in compose: field_completion = 0 or 1
   #  - tool tips, auto form submission: javascript = 0 or 1
   #  - Spell check DOM replacement: dom_edit = 0 or 1
   my $js = defined($user->getAttribute('credential_4')) ? $user->getAttribute('credential_4'):0;
   $user->setAttribute($r, 'javascript', $js); # defaults
   $user->setAttribute($r, 'field_completion', 0);
   $user->setAttribute($r, 'dom_edit', 0);
   if(defined($user->getAttribute('credential_4'))) {
      my $id = $user->getAttribute('credential_5');
      my $os = "other";
      $os = "windows" if $id =~ m/windows/i;
      $os = "mac" if $id =~ m/macintosh/i;
      $os = "linux" if $id =~ m/linux/i;
      $logger->info("Browser: $id");
      if($id =~ m/Safari/) { # Safari
         $user->setAttribute($r, 'field_completion', $js);
         $user->setAttribute($r, 'dom_edit', 1);
      } elsif($id =~ m/Opera/) { # Opera
         $user->setAttribute($r, 'field_completion', $js);
         $user->setAttribute($r, 'dom_edit', 1);
      } elsif($id =~ m/Gecko\/(\d+)\b/i) { # Mozilla-based
         if($1 > 20040500) {
            $user->setAttribute($r, 'field_completion', $js);
            $user->setAttribute($r, 'dom_edit', 1);
         } 
      } elsif($id =~ m/MSIE\D+(\d+)\.(\d+)/) { # IE 
         if($1 >= 6) {
            $user->setAttribute($r, 'field_completion', $js);
            $user->setAttribute($r, 'dom_edit', 1);
         } 
      }
      $user->setAttribute($r, 'supported', ($user->getAttribute('field_completion') == 1 && $user->getAttribute('dom_edit') == 1));
      $logger->info($user->getUsername() . " using " . $user->getAttribute('credential_5') . " version " . $user->getAttribute('credential_6'));
      $logger->info("Enabling features: field_completion: " . $user->getAttribute('field_completion') . ", javascript: " . $js);
   }
}
$js = $user->getAttribute('javascript');

# Deal with remote IP recording and checking.
eval {
   require APR::SockAddr;
   my $c = $r->connection;
   if(!defined($user->getAttribute('ip'))) {
      $user->setAttribute($r, 'ip', $c->remote_addr->ip_get);
   } elsif($user->getAttribute('ip') ne $c->remote_addr->ip_get) {
      $logger->error("User moved from one IP to another!\nOld IP:" .
         $user->getAttribute('ip') . "\nNew IP: " .
         $c->remote_addr->ip_get);
   }
};
if($@) {
   $logger->error("Unable to look at IPs: $@");
} 

my ($prefix, $separator) = $config->getFolderPrefix($user);
$prefix .= $separator;

# Get the configured allowed number of messages per page:
my @allowed_per_page = $config->getList('allowed_per_page', 20, 30, 50);
my $trash = $prefs->get('trash_folder', 'none');
my $sent = $prefs->get('sent_folder', 'none');
my $drafts = $prefs->get('drafts_folder', 'none');
my $invertindex = $prefs->get('invertindex', 0);

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 $subscribed_folderlist;
my $headers;
my $uidvalidity;
my $c;
my $msgcnt;
my $st = [gettimeofday];
my $st2;

eval {
   $c = new AlphaMail::Middleware($user->getAttribute('imap'), $user->getUsername(), $user->getAttribute('password'), $config);
   $folderlist = AlphaMail::SessionUtil::getFolderList($r, $user, $config);
   $subscribed_folderlist = AlphaMail::SessionUtil::getSubscribedFolderList($r, $user, $config);
   ($folder, $start, $n, $sortby, $invertindex) = AlphaMail::SessionUtil::markLocation($r, $user, $folder, $start, $n, $sortby, $invertindex);
   $is_sent_or_drafts = ($folder eq $sent || $folder eq $drafts);
   $read_page = "$base/mail/resume_compose.html" if($drafts eq $folder);

   # Flip sorting around when changing folders
   if($is_sent_or_drafts && $sortby eq 'from') {
      $sortby = 'to';
      $user->setAttribute($r, 'lastsortby', $sortby);
   } elsif(!$is_sent_or_drafts && $sortby eq 'to') {
      $sortby = 'from';
      $user->setAttribute($r, 'lastsortby', $sortby);
   }

   $msgcnt = $c->getMessageCount($folder, $filter);
   $start = $msgcnt - $n if($start > $msgcnt);
   if(!$invertindex) {
      if($start < 1) {
            $start = $msgcnt - $n + 1;
      }
   } else {
      $start = 1 if($start < 1);
   }
   $start = 1 if($start < 1);
   $headers = $c->getMessageHeaders($folder, $start, $n, $sortby, $filter);
   $msgcnt = $headers->[0]{count};
   $uidvalidity = $headers->[0]{uidvalidity};
   $c->close;
};
if($@) {
   $logger->error("ERROR GETTING INDEX: $@");
   $message = "Unable to read folder. Perhaps it is in use by another application. Please try again, or contact support.";
   $msgcnt = 0;
}
$st2 = [gettimeofday];
</%init>
<%once>
use Data::Dumper;
use Encode;
use Time::HiRes qw( gettimeofday tv_interval );
use AlphaMail::HTMLHelper qw(build_url hyperlink context_date size_with_units);
our $logger = Log::Log4perl->get_logger('alphamail');
our $base = $config->get('base_uri');

sub parts2hover
{
   my $parts = shift;
   my $html = undef;

   while($parts =~ m/\(([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)\)/g) 
   {
      my ($pt, $cset, $enc, $mt, $mst, $nm, $sz) = ($1, $2, $3, $4, $5, $6, $7);
      if($nm) {
         $sz = size_with_units($sz);
         $html .= qq($nm $mt/$mst ($sz)<br>);
         $html =~ s/\s+/ /g;
      }
   }

   return $html;
}

</%once>




See more files for this project here

AlphaMail

AlphaMail is an accelerated web mail interface with a C++ middleware layer that is more effective than an IMAP proxy which is a highly scalable (10k+ users). The interface includes modern features, Section 508 compliance, and universal browser support.

Project homepage: http://sourceforge.net/projects/alphamail
Programming language(s): C++,Java,JavaScript,Perl
License: other

  addressbook/
    edit.mhtml
    import.mhtml
    import_complete.html
    import_csv.html
    import_csv_save.html
    import_fname.html
    import_imho.html
    import_lname.html
    index.html
    lists.mhtml
    process_edit.html
    process_lists.html
    process_take.html
    take.html
  admin/
    autohandler
    index.html
    show_stats.mhtml
    test.mhtml
  docs/
    faq/
      colors.gif
      dates1.gif
      drafts.gif
      filter.gif
      general.html
      index.html
      notrash1.gif
      notrash2.gif
      notrash3.gif
      other.html
      sort.gif
      timeout.gif
    new_features.html
  settings/
    add_filter.html
    altfolder_update.html
    altprefix_update.html
    edit_folders.html
    export.mhtml
    export_mail.html
    filters.mhtml
    folders.mhtml
    general.mhtml
    index.html
    share.mhtml
    sharing_agree.html
    signatures.mhtml
    update_folderlist.html
    update_general.html
    update_signatures.html
  viewers/
    excel.html
    html.html
    targz.html
    text.html
    word.html
    zip.html
  address_mail.html
  addresslist.html
  autohandler
  check_spelling.html
  compose.html
  feedback.html
  first_login.html
  fix_spelling.html
  folderlist.mhtml
  footer.mhtml
  get_attachment.html
  header.mhtml
  help.html
  index.html
  logout.html
  menu.mhtml
  other_folders.html
  process_compose.html
  process_first_login.html
  process_messages.html
  process_read_message.html
  process_search.html
  quota.html
  quota_graph.html
  raw.html
  read.html
  remove_attachment.html
  renew_session.html
  resume_compose.html
  sanitized.html
  share_options.html
  share_upload.html
  verify_password.html
  view_attachment.html