--- loncom/interface/lonmsg.pm 2001/02/06 16:51:24 1.6 +++ loncom/interface/lonmsg.pm 2001/02/06 18:17:34 1.7 @@ -24,9 +24,11 @@ use Apache::Constants qw(:common); # ===================================================================== Package sub packagemsg { - my ($subject,$message)=@_; + my ($subject,$message,$citation)=@_; $message=~s/\/\>\;/g; + $citation=~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,10 +80,9 @@ 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($_))); + &Apache::lonnet::unescape($msgid)); my %status=&Apache::lonnet::get('email_status',$msgid); if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; } unless ($status{$msgid}) { $status{$msgid}='new'; } @@ -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"); +
+ +Subject:

+

+ +

+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(''); }