--- loncom/interface/lonmsgdisplay.pm 2007/05/02 01:33:49 1.72 +++ loncom/interface/lonmsgdisplay.pm 2007/05/02 19:56:34 1.73 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging display # -# $Id: lonmsgdisplay.pm,v 1.72 2007/05/02 01:33:49 albertel Exp $ +# $Id: lonmsgdisplay.pm,v 1.73 2007/05/02 19:56:34 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -390,6 +390,9 @@ sub renamefolder { if ($env{'form.renamed'} eq '') { return &mt('The folder "[_1]" may not be renamed to "[_2]" as the new name you requested is an invalid name.',$folder,$newname); } + if (defined($permfolders{$folder})) { + return &mt('The folder "[_1]" may not be renamed as it is a folder provided by the system.',$folder); + } if (defined($permfolders{$newname})) { return &mt('The folder "[_1]" may not be renamed to "[_2]" as the new name you requested is reserved for folders provided automatically by the system.',$folder,$newname); } @@ -1279,6 +1282,12 @@ will be forwarded to the recipient(s) yo &mt('Show re-usable messages').'</a><br />'; } } + my $jscript = &Apache::loncommon::check_uncheck_jscript(); + $r->print(<<"ENDREPSCRIPT"); +<script type="text/javascript"> +$jscript +</script> +ENDREPSCRIPT } my $citation=&displayresource(%content); my ($can_grp_broadcast,$viewgrps,$editgrps); @@ -1318,6 +1327,22 @@ will be forwarded to the recipient(s) yo '<input type="hidden" name="recuname" value="'.$content{'sendername'}.'" />'. '<input type="hidden" name="recdomain" value="'.$content{'senderdomain'}.'" />'. '</td></tr>'); + if ($content{'recipid'}) { + my @ccs = &retrieve_cc_recips('replying',%content); + if (@ccs > 0) { + my $replyall = qq| + <span class="LC_nobreak"> + <input type="button" value="check all" + onclick="javascript:checkAll(document.compemail.replying_cc)" /> + + <input type="button" value="uncheck all" + onclick="javascript:uncheckAll(document.compemail.replying_cc)" /> + </span> +|; + my $cclist = join(' ',@ccs); + $r->print('<tr><td>'.&mt('Reply to other recipients').':<br />'.$replyall.'</td><td>'.$cclist.'</td></tr>'); + } + } } else { $r->print(&recipient_input_row($defdom,%lt)); } @@ -1437,10 +1462,13 @@ ENDREC sub additional_rec_row { my ($lt) = @_; + my $cc = &mt('Cc:'); + my $bcc = &mt('Bcc:'); my $output = <<"ENDADD"; -<tr><td>$lt->{'ad'}:<br /><tt>username:domain,username:domain, ... -</tt></td><td> -<input type="text" size="50" name="additionalrec" /></td></tr> +<tr><td>$lt->{'ad'} :<br /><tt>username:domain,username:domain, ... +</tt></td><td> <span class="span.LC_nobreak">$cc +<input type="text" size="50" name="additionalrec_cc" /></nospan><br /> +<span class="span.LC_nobreak">$bcc <input type="text" size="50" name="additionalrec_bcc" /></nospan></td></tr> ENDADD return $output; } @@ -1984,7 +2012,6 @@ sub displaymessage { } my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]); my %content=&Apache::lonmsg::unpackagemsg($message{$msgid}); - my $counter=0; $r->print('<pre>'); my $escmsgid=&escape($msgid); @@ -2039,16 +2066,22 @@ sub displaymessage { } $r->print('</tr></table>'); } - my $tolist; - my @recipients = (); - for (my $i=0; $i<@{$content{'recuser'}}; $i++) { - $recipients[$i] = &Apache::loncommon::aboutmewrapper( - &Apache::loncommon::plainname($content{'recuser'}[$i], + my ($tolist,$cclist); + my (@recipients,@ccs); + if (ref($content{'recuser'}) eq 'ARRAY') { + for (my $i=0; $i<@{$content{'recuser'}}; $i++) { + $recipients[$i] = &Apache::loncommon::aboutmewrapper( + &Apache::loncommon::plainname($content{'recuser'}[$i], $content{'recdomain'}[$i]), - $content{'recuser'}[$i],$content{'recdomain'}[$i]). - ' ('.$content{'recuser'}[$i].' at '.$content{'recdomain'}[$i].') '; + $content{'recuser'}[$i],$content{'recdomain'}[$i]). + ' ('.$content{'recuser'}[$i].' at '.$content{'recdomain'}[$i].') '; + } } $tolist = join(', ',@recipients); + if ($content{'recipid'}) { + @ccs = &retrieve_cc_recips('display',%content); + $cclist = join(', ',@ccs); + } my ($restitle,$baseurl,$refers_to); if (defined($content{'resource_title'})) { $restitle = $content{'resource_title'}; @@ -2061,17 +2094,27 @@ sub displaymessage { $baseurl = &Apache::lonenc::check_encrypt($content{'baseurl'}); } $r->print(&Apache::loncommon::student_image_tag($content{'senderdomain'},$content{'sendername'})); - $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}. - ($folder ne 'sent'?'<br /><b>'.&mt('From').':</b> '. + $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}); + if ($folder eq 'sent') { + $r->print('<br /><b>'.&mt('To').':</b> '.$tolist); + } else { + $r->print('<br /><b>'.&mt('From').':</b> '. &Apache::loncommon::aboutmewrapper( &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}), $content{'sendername'},$content{'senderdomain'}).' ('. $content{'sendername'}.' at '. - $content{'senderdomain'}.') ':'<br /><b>'.&mt('To').':</b> '. - $tolist). - ($content{'courseid'}?'<br /><b>'.&mt($crstype).':</b> '.$courseinfo{'description'}. - ($content{'coursesec'}?' ('.&mt('Section').': '.$content{'coursesec'}.')':''):''). - '<br /><b>'.&mt('Time').':</b> '.$content{'time'}); + $content{'senderdomain'}.') '); + if ($cclist) { + $r->print('<br /><b>'.&mt('Cc').':</b> '.$cclist); + } + } + if ($content{'courseid'}) { + $r->print('<br /><b>'.&mt($crstype).':</b> '.$courseinfo{'description'}); + if ($content{'coursesec'}) { + $r->print(' ('.&mt('Section').': '.$content{'coursesec'}.')'); + } + } + $r->print('<br /><b>'.&mt('Time').':</b> '.$content{'time'}); if ($baseurl) { if (defined($content{'courseid'}) && defined($env{'request.course.id'})) { if ($content{'courseid'} eq $env{'request.course.id'}) { @@ -2124,6 +2167,34 @@ sub displaymessage { return; } +sub retrieve_cc_recips { + my ($context,%content) = @_; + my %reciphash = + &Apache::lonnet::get('nohist_emailrecip',[$content{'recipid'}], + $content{'senderdomain'},$content{'sendername'}); + my $recipinfo = $reciphash{$content{'recipid'}}; + my @ccs; + if (ref($recipinfo) eq 'HASH') { + if (ref($recipinfo->{'cc'}) eq 'HASH') { + foreach my $cc (sort(keys(%{$recipinfo->{'cc'}}))) { + my ($ccname,$ccdom) = split(/:/,$cc); + if (!(($ccname eq $env{'user.name'}) && + ($ccdom eq $env{'user.domain'}))) { + my $showcc ='<span class="LC_nobreak">'; + if ($context eq 'replying') { + $showcc = '<label><input type="checkbox" name="replying_cc" value="'.$cc.'">'; + } + $showcc .= &Apache::loncommon::aboutmewrapper( + &Apache::loncommon::plainname($ccname, + $ccdom),$ccname,$ccdom).'</label></span>'; + push (@ccs,$showcc); + } + } + } + } + return @ccs; +} + # =========================================================== Show the citation sub displayresource { @@ -2271,7 +2342,7 @@ sub sendoffmail { &Apache::loncommon::get_env_multiple('form.selectedusers_forminput'); my $mode = $env{'form.sendmode'}; - my %toaddr; + my (%toaddr,$cc,$bcc); if (@to) { foreach my $dest (@to) { my ($user,$domain) = split(/:/, $dest); @@ -2301,17 +2372,38 @@ sub sendoffmail { } else { if (($env{'form.recuname'} ne '') && ($env{'form.recdomain'} ne '')) { $toaddr{$env{'form.recuname'}.':'.$env{'form.recdomain'}}=''; + $cc->{$env{'form.recuname'}.':'.$env{'form.recdomain'}}=''; } } - if ($env{'form.additionalrec'}) { - foreach my $rec (split(/\s*,\s*/,$env{'form.additionalrec'})) { + if ($env{'form.additionalrec_cc'}) { + foreach my $rec (split(/\s*,\s*/,$env{'form.additionalrec_cc'})) { my ($auname,$audom)=split(/:/,$rec); if (($auname ne "") && ($audom ne "")) { - $toaddr{$auname.':'.$audom}=''; + $toaddr{$auname.':'.$audom}=''; + $cc->{$auname.':'.$audom}=''; } } } - + if ($env{'form.additionalrec_bcc'}) { + foreach my $rec (split(/\s*,\s*/,$env{'form.additionalrec_bcc'})) { + my ($auname,$audom)=split(/:/,$rec); + if (($auname ne "") && ($audom ne "")) { + $toaddr{$auname.':'.$audom}=''; + $bcc->{$auname.':'.$audom}=''; + } + } + } + if ($env{'form.replying_cc'}) { + my @ccreplies = + &Apache::loncommon::get_env_multiple('form.replying_cc'); + foreach my $rec (@ccreplies) { + my ($auname,$audom)=split(/:/,$rec); + if (($auname ne "") && ($audom ne "")) { + $toaddr{$auname.':'.$audom}=''; + $cc->{$auname.':'.$audom}=''; + } + } + } my $savemsg; my $msgtype; my %sentmessage; @@ -2327,12 +2419,24 @@ sub sendoffmail { } else { $savemsg=&Apache::lonfeedback::clear_out_html($env{'form.message'}); } + my %reciphash = ( + cc => $cc, + bcc => $bcc, + ); + my ($recipid,$recipstatus) = + &Apache::lonmsg::store_recipients($msgsubj,$env{'user.name'}, + $env{'user.domain'},\%reciphash); + if ($recipstatus ne 'ok') { + &Apache::lonnet::logthis('Failed to store Bcc and Cc recipients for '.$env{'user.name'}.':'.$env{'user.domain'}); + } my @recusers; my @recudoms; foreach my $address (sort(keys(%toaddr))) { my ($recuname,$recdomain)=split(/\:/,$address); my $msgtxt = $savemsg; - if ($toaddr{$address}) { $msgtxt.='<hr />'.$toaddr{$address}; } + if ($toaddr{$address}) { + $msgtxt.='<hr />'.$toaddr{$address}; + } my @thismsg; if ($msgtype eq 'critical') { $r->print(&mt('Sending critical message').' '. @@ -2343,7 +2447,7 @@ sub sendoffmail { $env{'form.sendbck'}, $env{'form.permanent'}, \$sentmessage{$address}, - $nosentstore); + $nosentstore,$recipid); } else { $r->print(&mt('Sending').' '.$recuname.':'.$recdomain.': '); @thismsg= @@ -2354,7 +2458,7 @@ sub sendoffmail { $env{'form.permanent'}, \$sentmessage{$address}, undef,undef,undef, - $nosentstore); + $nosentstore,$recipid); } $msg_status{$recuname.':'.$recdomain}=join(' ',@thismsg); if ($msg_status{$recuname.':'.$recdomain} =~ /(ok|con_delayed)/) {