--- loncom/interface/lonmsg.pm 2001/08/03 14:00:07 1.12 +++ loncom/interface/lonmsg.pm 2001/08/09 14:57:33 1.17 @@ -13,7 +13,7 @@ # 10/19,10/20,10/30, # 02/06/01 Gerd Kortemeyer # 07/27 Guy Albertelli -# 07/27,07/28,07/30,08/03 Gerd Kortemeyer +# 07/27,07/28,07/30,08/03,08/06,08/08,08/09 Gerd Kortemeyer package Apache::lonmsg; @@ -201,8 +201,65 @@ sub statuschange { ($status{$msgid} eq 'forwarded')) { &Apache::lonnet::put('email_status',{$msgid => $newstatus}); } + if (($newstatus eq 'deleted') || ($newstatus eq 'new')) { + &Apache::lonnet::put('email_status',{$msgid => $newstatus}); + } } -# ===================================================================== Handler + +# ======================================================= Display a course list + +sub discourse { + my $r=shift; + my %courselist=&Apache::lonnet::dump( + 'classlist', + $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, + $ENV{'course.'.$ENV{'request.course.id'}.'.num'}); + my $now=time; + $r->print(< + + + +

+ENDDISHEADER + map { + my ($end,$start)=split(/\:/,$courselist{$_}); + my $active=1; + if (($end) && ($now>$end)) { $active=0; } + if ($active) { + my ($sname,$sdom)=split(/\:/,$_); + my %reply=&Apache::lonnet::get('environment', + ['firstname','middlename','lastname','generation'], + $sdom,$sname); + $r->print('
'. + $reply{'firstname'}.' '. + $reply{'middlename'}.' '. + $reply{'lastname'}.' '. + $reply{'generation'}. + ' ('.$_.')'); + } + } sort keys %courselist; +} + +# ==================================================== Display Critical Message sub discrit { my $r=shift; @@ -216,11 +273,126 @@ sub discrit { $r->print('


From: '.$content{'sendername'}.'@'. $content{'senderdomain'}.' ('.$content{'time'}. ')
'.$content{'message'}.'
'. - ''); + ''. + ''); } sort keys %what; - $r->print(''); + $r->print( + ''); +} + +# =============================================================== Compose reply + +sub comprep { + my ($r,$msgid)=@_; + 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'}; + my $dispcrit=''; + if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { + $dispcrit= + ' Send as critical message

'; + } + $r->print(<<"ENDREPLY"); +

+ +Subject:

+

+$dispcrit + +

+ENDREPLY } +# ======================================================== Display all messages + +sub disall { + my $r=shift; + $r->print('

Display All Messages

'. + ''. + ''); + map { + my ($sendtime,$shortsubj,$fromname,$fromdomain,$status)= + &Apache::lonmsg::unpackmsgid($_); + unless ($status eq 'deleted') { + if ($status eq 'new') { + $r->print(''); + } elsif ($status eq 'read') { + $r->print(''); + } elsif ($status eq 'replied') { + $r->print(''); + } else { + $r->print(''); + } + $r->print(''); + } + } sort split(/\&/,&Apache::lonnet::reply('keys:'. + $ENV{'user.domain'}.':'. + $ENV{'user.name'}.':nohist_email', + $ENV{'user.home'})); + $r->print('
 DateUsernameDomainSubjectStatus
OpenDelete'.localtime($sendtime).''. + $fromname.''.$fromdomain.''. + &Apache::lonnet::unescape($shortsubj).''. + $status.'
'); +} + +# ============================================================== Compose output + +sub compout { + my ($r,$forwarding,$broadcast)=@_; + my $dispcrit=''; + my $dissub=''; + my $dismsg=''; + my $func='Send New'; + if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { + $dispcrit= + ' Send as critical message

'; + } + if ($forwarding) { + $dispcrit.=''; + $func='Forward'; + my %message=&Apache::lonnet::get('nohist_email',[$forwarding]); + my %content=&unpackagemsg($message{$forwarding}); + + $dissub='Forwarding: '.$content{'subject'}; + $dismsg='Forwarded message from '. + $content{'sendername'}.' at '.$content{'senderdomain'}; + } + my $defdom=$ENV{'user.domain'}; + $r->print('

'. + ''); + unless ($broadcast eq 'group') { + $r->print(<<"ENDREC"); +
+ + + +ENDREC + } + $r->print(<<"ENDCOMP"); +
Username:
Domain:
Subject: +
+

+$dispcrit + +ENDCOMP + if ($broadcast eq 'group') { + &discourse; + } + $r->print('

'); +} + +# ===================================================================== Handler + sub handler { my $r=shift; @@ -238,7 +410,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 'markread') || + ($name eq 'markdel') || ($name eq 'markunread') || ($name eq 'sendreply') || ($name eq 'compose') || ($name eq 'sendmail') || ($name eq 'critical')) { unless ($ENV{'form.'.$name}) { @@ -261,35 +434,19 @@ sub handler { $r->print('Subject: '.$content{'subject'}. '
From: '.$content{'sendername'}.' at '. $content{'senderdomain'}. - '
Time: '.$content{'time'}.'
Functions: '. - 'Reply
'.
+             '
Time: '.$content{'time'}.'

'. + ''. + ''. + ''. + ''. + ''. + '
Functions:ReplyForwardMark UnreadDisplay all Messages

'.
              $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'}; - my $dispcrit=''; - if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { - $dispcrit= - ' Send as critical message

'; - } - $r->print(<<"ENDREPLY"); -

- -Subject:

-

-$dispcrit - -

-ENDREPLY + &comprep($r,$ENV{'form.replyto'}); } elsif ($ENV{'form.sendreply'}) { my $msgid=$ENV{'form.sendreply'}; my %message=&Apache::lonnet::get('nohist_email',[$msgid]); @@ -308,61 +465,71 @@ ENDREPLY $ENV{'form.subject'}, $ENV{'form.message'})); } + if ($ENV{'form.displayedcrit'}) { + &discrit($r); + } else { + &disall($r); + } } elsif ($ENV{'form.confirm'}) { map { if ($_=~/^form\.rec\_(.*)$/) { $r->print('Confirming Receipt: '. &user_crit_received($1).'
'); } + if ($_=~/^form\.reprec\_(.*)$/) { + my $msgid=$1; + $r->print('Confirming Receipt: '. + &user_crit_received($msgid).'
'); + &comprep($r,$msgid); + } } keys %ENV; &discrit($r); } elsif ($ENV{'form.critical'}) { &discrit($r); } elsif ($ENV{'form.forward'}) { - } elsif ($ENV{'form.mark'}) { + &compout($r,$ENV{'form.forward'}); + } elsif ($ENV{'form.markread'}) { + } elsif ($ENV{'form.markdel'}) { + &statuschange($ENV{'form.markdel'},'deleted'); + &disall($r); + } elsif ($ENV{'form.markunread'}) { + &statuschange($ENV{'form.markunread'},'new'); + &disall($r); } elsif ($ENV{'form.compose'}) { - my $dispcrit=''; - if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { - $dispcrit= - ' Send as critical message

'; - } - $r->print(<<"ENDCOMP"); -

- -Subject:

-

-$dispcrit - -

-ENDCOMP + &compout($r,'',$ENV{'form.compose'}); } elsif ($ENV{'form.sendmail'}) { + my %content=(); + undef %content; + if ($ENV{'form.forwid'}) { + my $msgid=$ENV{'form.forwid'}; + my %message=&Apache::lonnet::get('nohist_email',[$msgid]); + %content=&unpackagemsg($message{$msgid}); + &statuschange($msgid,'forwarded'); + $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n". + $content{'message'}; + } + if (($ENV{'form.critmsg'}) && + (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) { + $r->print('Sending critical: '. + &user_crit_msg($ENV{'form.recuname'}, + $ENV{'form.recdomain'}, + $ENV{'form.subject'}, + $ENV{'form.message'}, + $content{'citation'})); + } else { + $r->print('Sending: '.&user_normal_msg($ENV{'form.recuname'}, + $ENV{'form.recdomain'}, + $ENV{'form.subject'}, + $ENV{'form.message'}, + $content{'citation'})); + } + if ($ENV{'form.displayedcrit'}) { + &discrit($r); + } else { + &disall($r); + } } else { - $r->print(''. - ''); - 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(''); - } sort split(/\&/,&Apache::lonnet::reply('keys:'. - $ENV{'user.domain'}.':'. - $ENV{'user.name'}.':nohist_email', - $ENV{'user.home'})); - $r->print('
 DateUsernameDomainSubjectStatus
Open'.localtime($sendtime).''. - $fromname.''.$fromdomain.''. - &Apache::lonnet::unescape($shortsubj).''. - $status.'
'); - + &disall($r); } $r->print(''); return OK;