--- loncom/interface/lonmsg.pm 2001/02/06 16:51:24 1.6
+++ loncom/interface/lonmsg.pm 2001/07/27 20:17:14 1.10
@@ -24,9 +24,11 @@ use Apache::Constants qw(:common);
# ===================================================================== Package
sub packagemsg {
- my ($subject,$message)=@_;
+ my ($subject,$message,$citation)=@_;
$message=~s/\\<\;/g;
$message=~s/\>/\>\;/g;
+ $citation=~s/\\<\;/g;
+ $citation=~s/\>/\>\;/g;
$subject=~s/\\<\;/g;
$subject=~s/\>/\>\;/g;
my $now=time;
@@ -54,7 +56,8 @@ sub packagemsg {
''.$ENV{'request.role'}.''.
''.$ENV{'request.filename'}.''.
''.$msgid.''.
- ''.$message.'';
+ ''.$message.''.
+ ''.$citation.'';
}
# ================================================== Unpack message into a hash
@@ -77,11 +80,10 @@ sub unpackagemsg {
# ======================================================= Get info out of msgid
sub unpackmsgid {
- my $msgid=shift;
+ my $msgid=&Apache::lonnet::unescape(shift);
my ($sendtime,$shortsubj,$fromname,$fromdomain)=split(/\:/,
- &Apache::lonnet::unescape(
- &Apache::lonnet::unescape($_)));
- my %status=&Apache::lonnet::get('email_status',$msgid);
+ &Apache::lonnet::unescape($msgid));
+ 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});
@@ -149,9 +151,9 @@ sub user_crit_received {
$contents{'subject'}.'" dated '.$contents{'time'}.".\n\n"
.'Message ID: '.$contents{'msgid'});
$status.=' trans: '.
- &Apache::lonnet::put('nohist_email',$contents{'msgid'} => $message);
+ &Apache::lonnet::put('nohist_email',{$contents{'msgid'} => $message});
$status.=' del: '.
- &Apache::lonnet::del('critical',$contents{'msgid'});
+ &Apache::lonnet::del('critical',[$contents{'msgid'}]);
&Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},
$ENV{'user.home'},'Received critical message '.
$contents{'msgid'}.
@@ -161,7 +163,7 @@ sub user_crit_received {
# ======================================================== Normal communication
sub user_normal_msg {
- my ($user,$domain,$subject,$message)=@_;
+ my ($user,$domain,$subject,$message,$citation)=@_;
# Check if allowed missing
my $status='';
my $msgid='undefined';
@@ -169,7 +171,7 @@ sub user_normal_msg {
my $homeserver=&Apache::lonnet::homeserver($user,$domain);
if ($homeserver ne 'no_host') {
my $msgid;
- ($msgid,$message)=&packagemsg($subject,$message);
+ ($msgid,$message)=&packagemsg($subject,$message,$citation);
$status=&Apache::lonnet::critical(
'put:'.$domain.':'.$user.':nohist_email:'.
&Apache::lonnet::escape($msgid).'='.
@@ -183,6 +185,18 @@ sub user_normal_msg {
return $status;
}
+# =============================================================== Status Change
+
+sub statuschange {
+ my ($msgid,$newstatus)=@_;
+ my %status=&Apache::lonnet::get('email_status',[$msgid]);
+ if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
+ unless ($status{$msgid}) { $status{$msgid}='new'; }
+ unless (($status{$msgid} eq 'replied') ||
+ ($status{$msgid} eq 'forwarded')) {
+ &Apache::lonnet::put('email_status',{$msgid => $newstatus});
+ }
+}
# ===================================================================== Handler
sub handler {
@@ -202,7 +216,8 @@ sub handler {
$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')) {
+ ($name eq 'forward') || ($name eq 'mark') ||
+ ($name eq 'sendreply')) {
unless ($ENV{'form.'.$name}) {
$ENV{'form.'.$name}=$value;
}
@@ -212,10 +227,49 @@ sub handler {
# --------------------------------------------------------------- Render Output
$r->print('
EMail and Messaging');
- $r->print('');
+ $r->print(
+ '
');
$r->print('EMail
');
if ($ENV{'form.display'}) {
+ my $msgid=$ENV{'form.display'};
+ &statuschange($msgid,'read');
+ my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
+ my %content=&unpackagemsg($message{$msgid});
+ $r->print('Subject: '.$content{'subject'}.
+ '
From: '.$content{'sendername'}.' at '.
+ $content{'senderdomain'}.
+ '
Time: '.$content{'time'}.'
Functions: '.
+ 'Reply
'.
+ $content{'message'}.'
'.$content{'citation'});
} elsif ($ENV{'form.replyto'}) {
+ my $msgid=$ENV{'form.replyto'};
+ my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
+ my %content=&unpackagemsg($message{$msgid});
+ my $quotemsg='> '.$content{'message'};
+ $quotemsg=~s/\r/\n/g;
+ $quotemsg=~s/\f/\n/g;
+ $quotemsg=~s/\n+/\n\> /g;
+ my $subject='Re: '.$content{'subject'};
+ $r->print(<<"ENDREPLY");
+
+ENDREPLY
+ } elsif ($ENV{'form.sendreply'}) {
+ my $msgid=$ENV{'form.sendreply'};
+ my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
+ my %content=&unpackagemsg($message{$msgid});
+ &statuschange($msgid,'replied');
+ $r->print('Sending: '.&user_normal_msg($content{'sendername'},
+ $content{'senderdomain'},
+ $ENV{'form.subject'},
+ $ENV{'form.message'}));
} elsif ($ENV{'form.forward'}) {
} elsif ($ENV{'form.mark'}) {
} else {
@@ -229,7 +283,7 @@ sub handler {
} elsif ($status eq 'read') {
$r->print('');
} elsif ($status eq 'replied') {
- $r->print('
');
+ $r->print('
');
} else {
$r->print('
');
}