--- loncom/interface/lonmsgdisplay.pm 2007/05/01 18:40:57 1.71
+++ loncom/interface/lonmsgdisplay.pm 2007/05/05 02:50:27 1.77
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging display
#
-# $Id: lonmsgdisplay.pm,v 1.71 2007/05/01 18:40:57 raeburn Exp $
+# $Id: lonmsgdisplay.pm,v 1.77 2007/05/05 02:50:27 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);
}
@@ -734,12 +737,20 @@ $content{'sendername'}.':'.
' '.&mt('Subject').': '.$content{'subject'}.
'
'.&mt('Store message for re-use').
+ $disbase.=' '.&mt('Save message for re-use').
' '.
&mt('Show re-usable messages').' ';
}
}
+ my $jscript = &Apache::loncommon::check_uncheck_jscript();
+ $r->print(<<"ENDREPSCRIPT");
+
+ENDREPSCRIPT
}
my $citation=&displayresource(%content);
my ($can_grp_broadcast,$viewgrps,$editgrps);
@@ -1318,6 +1335,22 @@ will be forwarded to the recipient(s) yo
' '.
' '.
'');
+ if ($content{'recipid'}) {
+ my @ccs = &retrieve_cc_recips('replying',%content);
+ if (@ccs > 0) {
+ my $replyall = qq|
+
+
+
+
+
+|;
+ my $cclist = join(' ',@ccs);
+ $r->print(''.&mt('Reply to other recipients').': '.$replyall.' '.$cclist.' ');
+ }
+ }
} else {
$r->print(&recipient_input_row($defdom,%lt));
}
@@ -1437,10 +1470,13 @@ ENDREC
sub additional_rec_row {
my ($lt) = @_;
+ my $cc = &mt('Cc:');
+ my $bcc = &mt('Bcc:');
my $output = <<"ENDADD";
-$lt->{'ad'}:username:domain,username:domain, ...
-
-
+$lt->{'ad'} :username:domain,username:domain, ...
+ $cc
+
+$bcc
ENDADD
return $output;
}
@@ -1680,8 +1716,8 @@ sub examblock {
'cbds' => 'Communication blocking during scheduled exams',
'desc' => "You can use communication blocking to prevent $usertype enrolled in this course from displaying LON-CAPA messages sent by other $usertype during an online exam. As blocking of communication could potentially interrupt legitimate communication between $usertype who are also both enrolled in a different LON-CAPA course, please be careful that you select the correct start and end times for your scheduled exam when setting or modifying these parameters.",
'mecb' => 'Modify existing communication blocking periods',
- 'ncbc' => 'No communication blocks currently stored',
- 'stor' => 'Store',
+ 'ncbc' => 'No communication blocks currently saved',
+ 'stor' => 'Save',
);
my %ltext = &Apache::lonlocal::texthash(
@@ -1984,7 +2020,6 @@ sub displaymessage {
}
my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
my %content=&Apache::lonmsg::unpackagemsg($message{$msgid});
-
my $counter=0;
$r->print('');
my $escmsgid=&escape($msgid);
@@ -2039,16 +2074,22 @@ sub displaymessage {
}
$r->print('');
}
- 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 +2102,27 @@ sub displaymessage {
$baseurl = &Apache::lonenc::check_encrypt($content{'baseurl'});
}
$r->print(&Apache::loncommon::student_image_tag($content{'senderdomain'},$content{'sendername'}));
- $r->print(''.&mt('Subject').': '.$content{'subject'}.
- ($folder ne 'sent'?''.&mt('From').': '.
+ $r->print(''.&mt('Subject').': '.$content{'subject'});
+ if ($folder eq 'sent') {
+ $r->print(''.&mt('To').': '.$tolist);
+ } else {
+ $r->print(''.&mt('From').': '.
&Apache::loncommon::aboutmewrapper(
&Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
$content{'sendername'},$content{'senderdomain'}).' ('.
$content{'sendername'}.' at '.
- $content{'senderdomain'}.') ':''.&mt('To').': '.
- $tolist).
- ($content{'courseid'}?''.&mt($crstype).': '.$courseinfo{'description'}.
- ($content{'coursesec'}?' ('.&mt('Section').': '.$content{'coursesec'}.')':''):'').
- ''.&mt('Time').': '.$content{'time'});
+ $content{'senderdomain'}.') ');
+ if ($cclist) {
+ $r->print(''.&mt('Cc').': '.$cclist);
+ }
+ }
+ if ($content{'courseid'}) {
+ $r->print(''.&mt($crstype).': '.$courseinfo{'description'});
+ if ($content{'coursesec'}) {
+ $r->print(' ('.&mt('Section').': '.$content{'coursesec'}.')');
+ }
+ }
+ $r->print(''.&mt('Time').': '.$content{'time'});
if ($baseurl) {
if (defined($content{'courseid'}) && defined($env{'request.course.id'})) {
if ($content{'courseid'} eq $env{'request.course.id'}) {
@@ -2124,6 +2175,38 @@ 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 ='';
+ if ($context eq 'replying') {
+ $showcc = ' ';
+ }
+ $showcc .= &Apache::loncommon::aboutmewrapper(
+ &Apache::loncommon::plainname($ccname,
+ $ccdom),$ccname,$ccdom);
+ if ($context eq 'replying') {
+ $showcc .=' ';
+ }
+ $showcc .= ' ';
+ push(@ccs,$showcc);
+ }
+ }
+ }
+ }
+ return @ccs;
+}
+
# =========================================================== Show the citation
sub displayresource {
@@ -2208,10 +2291,10 @@ sub storedcommentlisting {
my ($r)=@_;
my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,
'^'.&escape(&escape($env{'form.showcommentbaseurl'})));
- $r->print(&Apache::loncommon::start_page('Stored Comment Listing',undef,
+ $r->print(&Apache::loncommon::start_page('Saved Comment Listing',undef,
{'onlybody' => 1}));
if ((keys %msgs)[0]=~/^error\:/) {
- $r->print(&mt('No stored comments yet.'));
+ $r->print(&mt('No saved comments yet.'));
} else {
my $found=0;
foreach my $key (sort(keys(%msgs))) {
@@ -2219,7 +2302,7 @@ sub storedcommentlisting {
$found=1;
}
unless ($found) {
- $r->print(&mt('No stored comments yet for this resource.'));
+ $r->print(&mt('No saved comments yet for this resource.'));
}
}
}
@@ -2271,7 +2354,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 +2384,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 +2431,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.=' '.$toaddr{$address}; }
+ if ($toaddr{$address}) {
+ $msgtxt.=' '.$toaddr{$address};
+ }
my @thismsg;
if ($msgtype eq 'critical') {
$r->print(&mt('Sending critical message').' '.
@@ -2343,7 +2459,7 @@ sub sendoffmail {
$env{'form.sendbck'},
$env{'form.permanent'},
\$sentmessage{$address},
- $nosentstore);
+ $nosentstore,$recipid);
} else {
$r->print(&mt('Sending').' '.$recuname.':'.$recdomain.': ');
@thismsg=
@@ -2354,7 +2470,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)/) {
@@ -2528,16 +2644,19 @@ sub handler {
&printheader($r,'','Confirmed Receipt');
my $replying = 0;
foreach my $envkey (keys(%env)) {
- if ($envkey=~/^form\.rec\_(.*)$/) {
- $r->print(''.&mt('Confirming Receipt').': '.
- &Apache::lonmsg::user_crit_received($1).' ');
- }
- if ($envkey=~/^form\.reprec\_(.*)$/) {
- my $msgid=$1;
- $r->print(''.&mt('Confirming Receipt').': '.
- &Apache::lonmsg::user_crit_received($msgid).' ');
- &compout($r,'','','',$msgid);
- $replying = 1;
+ if ($envkey=~/^form\.(rep)?rec\_(.*)$/) {
+ my $repchk = $1;
+ my $msgid = $2;
+ $r->print(''.&mt('Confirming Receipt').': ');
+ my $result = &Apache::lonmsg::user_crit_received($msgid);
+ if ($result =~ /trans:\s+ok/) {
+ &statuschange($msgid,'read');
+ }
+ $r->print($result.' ');
+ if ($repchk eq 'rep') {
+ &compout($r,'','','',$msgid);
+ $replying = 1;
+ }
}
}
if (!$replying) {