--- loncom/interface/lonmsg.pm 2000/10/20 18:06:08 1.4
+++ loncom/interface/lonmsg.pm 2001/02/06 16:51:24 1.6
@@ -10,7 +10,8 @@
#
# 10/05 Gerd Kortemeyer)
#
-# 10/19,10/20 Gerd Kortemeyer
+# 10/19,10/20,10/30,
+# 02/06/01 Gerd Kortemeyer
package Apache::lonmsg;
@@ -18,6 +19,7 @@ use strict;
use Apache::lonnet();
use vars qw($msgcount);
use HTML::TokeParser;
+use Apache::Constants qw(:common);
# ===================================================================== Package
@@ -29,8 +31,12 @@ sub packagemsg {
$subject=~s/\>/\>\;/g;
my $now=time;
$msgcount++;
- my $msgid=$now.'_'.$ENV{'user.name'}.'_'.
- $ENV{'user.domain'}.'_'.$msgcount.'_'.$$;
+ my $partsubj=$subject;
+ $partsubj=&Apache::lonnet::escape($partsubj);
+ $partsubj=substr($partsubj,0,50);
+ my $msgid=&Apache::lonnet::escape(
+ $now.':'.$partsubj.':'.$ENV{'user.name'}.':'.
+ $ENV{'user.domain'}.':'.$msgcount.':'.$$);
return $msgid,
''.$ENV{'user.name'}.''.
''.$ENV{'user.domain'}.''.
@@ -68,6 +74,19 @@ sub unpackagemsg {
return %content;
}
+# ======================================================= Get info out of msgid
+
+sub unpackmsgid {
+ my $msgid=shift;
+ my ($sendtime,$shortsubj,$fromname,$fromdomain)=split(/\:/,
+ &Apache::lonnet::unescape(
+ &Apache::lonnet::unescape($_)));
+ my %status=&Apache::lonnet::get('email_status',$msgid);
+ if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
+ unless ($status{$msgid}) { $status{$msgid}='new'; }
+ return ($sendtime,$shortsubj,$fromname,$fromdomain,$status{$msgid});
+}
+
# =============================== Automated message to the author of a resource
sub author_res_msg {
@@ -122,15 +141,21 @@ sub user_crit_msg {
sub user_crit_received {
my $message=shift;
my %contents=&unpackagemsg($message);
- &Apache::lonnet::log('Received critical message '.$contents{'msgid'});
- &user_normal_msg($contents{'sendername'},$contents{'senderdomain'},
+ my $status='rec: '.
+ &user_normal_msg($contents{'sendername'},$contents{'senderdomain'},
'Receipt: '.$ENV{'user.name'}.' at '.$ENV{'user.domain'},
'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}.
' acknowledged receipt of message "'.
$contents{'subject'}.'" dated '.$contents{'time'}.".\n\n"
.'Message ID: '.$contents{'msgid'});
- &Apache::lonnet::put('nohist_email',$contents{'msgid'} => $message);
- &Apache::lonnet::del('critical',$contents{'msgid'});
+ $status.=' trans: '.
+ &Apache::lonnet::put('nohist_email',$contents{'msgid'} => $message);
+ $status.=' del: '.
+ &Apache::lonnet::del('critical',$contents{'msgid'});
+ &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},
+ $ENV{'user.home'},'Received critical message '.
+ $contents{'msgid'}.
+ ', '.$status);
}
# ======================================================== Normal communication
@@ -158,6 +183,72 @@ sub user_normal_msg {
return $status;
}
+# ===================================================================== Handler
+
+sub handler {
+ my $r=shift;
+
+# ----------------------------------------------------------- Set document type
+
+ $r->content_type('text/html');
+ $r->send_http_header;
+
+ return OK if $r->header_only;
+
+# --------------------------- Get query string for limited number of parameters
+
+ map {
+ my ($name, $value) = split(/=/,$_);
+ $value =~ tr/+/ /;
+ $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+ if (($name eq 'display') || ($name eq 'replyto') ||
+ ($name eq 'forward') || ($name eq 'mark')) {
+ unless ($ENV{'form.'.$name}) {
+ $ENV{'form.'.$name}=$value;
+ }
+ }
+ } (split(/&/,$ENV{'QUERY_STRING'}));
+
+# --------------------------------------------------------------- Render Output
+
+ $r->print('
EMail and Messaging');
+ $r->print('');
+ $r->print('EMail
');
+ if ($ENV{'form.display'}) {
+ } elsif ($ENV{'form.replyto'}) {
+ } elsif ($ENV{'form.forward'}) {
+ } elsif ($ENV{'form.mark'}) {
+ } else {
+ $r->print('  | Date | '.
+ 'Username | Domain | Subject | Status |
');
+ map {
+ my ($sendtime,$shortsubj,$fromname,$fromdomain,$status)=
+ &Apache::lonmsg::unpackmsgid($_);
+ if ($status eq 'new') {
+ $r->print('');
+ } elsif ($status eq 'read') {
+ $r->print('
');
+ } elsif ($status eq 'replied') {
+ $r->print('
');
+ } else {
+ $r->print('
');
+ }
+ $r->print('Open | '.localtime($sendtime).' | '.
+ $fromname.' | '.$fromdomain.' | '.
+ &Apache::lonnet::unescape($shortsubj).' | '.
+ $status.' |
');
+ } sort split(/\&/,&Apache::lonnet::reply('keys:'.
+ $ENV{'user.domain'}.':'.
+ $ENV{'user.name'}.':nohist_email',
+ $ENV{'user.home'}));
+ $r->print('
');
+
+ }
+ $r->print('