--- loncom/interface/lonmsgdisplay.pm 2006/04/25 23:12:34 1.16
+++ loncom/interface/lonmsgdisplay.pm 2006/05/30 12:46:09 1.29
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging display
#
-# $Id: lonmsgdisplay.pm,v 1.16 2006/04/25 23:12:34 albertel Exp $
+# $Id: lonmsgdisplay.pm,v 1.29 2006/05/30 12:46:09 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -125,6 +125,9 @@ use Apache::lonlocal;
use Apache::loncommunicate;
use Apache::lonfeedback;
use Apache::lonrss();
+use Apache::lonselstudent();
+use lib '/home/httpd/lib/perl/';
+use LONCAPA;
# Querystring component with sorting type
my $sqs;
@@ -259,89 +262,32 @@ sub movemsg {
# ======================================================= Display a course list
sub discourse {
- my $r=shift;
- my $classlist = &Apache::loncoursedata::get_classlist();
- my $now=time;
- my %lt=&Apache::lonlocal::texthash('cfa' => 'Check All',
- 'cfs' => 'Check Section/Group',
- 'cfn' => 'Uncheck All');
- $r->print(<
-
-
-
-
-
-
-ENDDISHEADER
- my %coursepersonnel=&Apache::lonnet::get_course_adv_roles();
- $r->print('
');
+ my $result;
+ my ($course_personnel,
+ $current_members,
+ $expired_members,
+ $future_members) =
+ &Apache::lonselstudent::get_people_in_class($env{'request.course.sec'});
+ unshift @$current_members, (@$course_personnel);
+ my %defaultUsers;
+
+ $result = &Apache::lonselstudent::render_student_list($current_members,
+ "compemail",
+ "current",
+ \%defaultUsers,
+ 1,"selectedusers",1);
+
+ $result .= &Apache::lonselstudent::render_student_list($expired_members,
+ "compemail",
+ "expired",
+ \%defaultUsers,
+ 1, "selectedusers",0);
+ $result .= &Apache::lonselstudent::render_student_list($future_members,
+ "compemail",
+ "future",
+ \%defaultUsers,
+ 1, "selectedusers", 0);
+ return $result;
}
# ==================================================== Display Critical Message
@@ -400,7 +346,7 @@ sub sortedmessages {
}
foreach my $msgid (@messages) {
- my $esc_msgid=&Apache::lonnet::escape($msgid);
+ my $esc_msgid=&escape($msgid);
my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid)=
&Apache::lonmsg::unpackmsgid($esc_msgid,$folder,undef,
\%status_cache);
@@ -526,7 +472,7 @@ sub disnew {
&Apache::lonnet::get('email_status',\@msgids);
my %descriptions;
foreach (@msgids) {
- my $msgid=&Apache::lonnet::escape($_);
+ my $msgid=&escape($_);
my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)=
&Apache::lonmsg::unpackmsgid($msgid,undef,undef,\%status_cache);
if (defined($sendtime) && $sendtime!~/error/) {
@@ -709,7 +655,7 @@ ENDDISHEADER
$dis_name = join(' ',@{$recv_name});
$dis_domain = join(' ',@{$recv_domain});
} else {
- my $msg_id = &Apache::lonnet::unescape($origID);
+ my $msg_id = &unescape($origID);
my %message = &Apache::lonnet::get('nohist_email'.$suffix,
[$msg_id]);
my %content = &Apache::lonmsg::unpackagemsg($message{$msg_id});
@@ -728,7 +674,7 @@ ENDDISHEADER
} elsif ($status eq 'deleted') {
# purge
my ($result,$msg) =
- &movemsg(&Apache::lonnet::unescape($origID),$folder,'trash');
+ &movemsg(&unescape($origID),$folder,'trash');
}
}
@@ -772,15 +718,15 @@ sub compout {
'Broadcast Message');
} elsif ($forwarding) {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/email?display=".&Apache::lonnet::escape($forwarding),
+ ({href=>"/adm/email?display=".&escape($forwarding),
text=>"Display Message"});
- &printheader($r,'/adm/email?forward='.&Apache::lonnet::escape($forwarding),
+ &printheader($r,'/adm/email?forward='.&escape($forwarding),
'Forwarding a Message');
} elsif ($replying) {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/email?display=".&Apache::lonnet::escape($replying),
+ ({href=>"/adm/email?display=".&escape($replying),
text=>"Display Message"});
- &printheader($r,'/adm/email?replyto='.&Apache::lonnet::escape($replying),
+ &printheader($r,'/adm/email?replyto='.&escape($replying),
'Replying to a Message');
} elsif ($replycrit) {
$r->print(''.&mt('Replying to a Critical Message').' ');
@@ -830,7 +776,7 @@ sub compout {
$dismsg=&mt('Forwarded message from').' '.
$content{'sendername'}.' '.&mt('at').' '.$content{'senderdomain'};
if ($content{'baseurl'}) {
- $disbase=' ';
+ $disbase=' ';
}
}
if ($replying) {
@@ -846,18 +792,20 @@ sub compout {
$dismsg=~s/\f/\n/g;
$dismsg=~s/\n+/\n\> /g;
if ($content{'baseurl'}) {
- $disbase=' ';
+ $disbase=' ';
if ($env{'user.adv'}) {
$disbase.=' '.&mt('Store message for re-use').
' '.
+ &escape($content{'baseurl'}).'" target="comments">'.
&mt('Show re-usable messages').' ';
}
}
}
my $citation=&displayresource(%content);
if ($env{'form.recdom'}) { $defdom=$env{'form.recdom'}; }
- $r->print(
+ if ($env{'form.text'}) { $dismsg=$env{'form.text'}; }
+ if ($env{'form.subject'}) { $dissub=$env{'form.subject'}; }
+ $r->print(
''.
&Apache::lonfeedback::generate_preview_button('compemail','message').
@@ -992,7 +942,7 @@ sub disfacetoface {
$result .=''.&mt('Broadcast Message').' ';
if ($content{'subject'}=~/^Broadcast\./) {
if (defined($content{'coursemsgid'})) {
- my $crsmsgid = &Apache::lonnet::escape($content{'coursemsgid'});
+ my $crsmsgid = &escape($content{'coursemsgid'});
my $broadcast_message = &general_message($crsmsgid);
$content{'message'} = ''.&mt('Subject').': '.$content{'message'}.' '.$broadcast_message;
} else {
@@ -1005,7 +955,7 @@ sub disfacetoface {
} else {
$result.=''.&mt('Critical Message').' ';
if (defined($content{'coursemsgid'})) {
- my $crsmsgid=&Apache::lonnet::escape($content{'coursemsgid'});
+ my $crsmsgid=&escape($content{'coursemsgid'});
my $critical_message = &general_message($crsmsgid);
$content{'message'} = ''.&mt('Subject').': '.$content{'message'}.' '.$critical_message;
} else {
@@ -1291,8 +1241,8 @@ sub display_blocker_status {
'modi' => 'Modify',
'canc' => 'Cancel',
);
+ $r->print(&Apache::loncommon::start_data_table());
$r->print(<<"END");
-
$$ltext{'dura'}
$$ltext{'setb'}
@@ -1300,26 +1250,27 @@ sub display_blocker_status {
$$ltext{'actn'}?
END
- foreach (sort keys %{$records}) {
- my $iter = $parmcount%2;
+ foreach my $record (sort(keys(%{$records}))) {
my $onchange = 'onFocus="javascript:window.document.forms['.
"'blockform'].elements['modify_".$parmcount."'].".
'checked=true;"';
- my ($start,$end) = split/____/,$_;
+ my ($start,$end) = split(/____/,$record);
my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);
my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);
- my ($setuname,$setudom,$title) = &parse_block_record($$records{$_});
+ my ($setuname,$setudom,$title) =
+ &parse_block_record($$records{$record});
+ $title = &HTML::Entities::encode($title,'"<>&');
my $settername = &Apache::loncommon::plainname($setuname,$setudom);
+ $r->print(&Apache::loncommon::start_data_table_row());
$r->print(<<"END");
-
$$ltext{'star'}: $startform $$ltext{'endd'}: $endform
$settername
-
+
$lt{'modi'}? $lt{'canc'}?
-
END
- $parmcount ++;
+ $r->print(&Apache::loncommon::end_data_table_row());
+ $parmcount++;
}
$r->print(<<"END");
@@ -1358,19 +1309,23 @@ sub display_addblocker_table {
);
$r->print(<<"END");
$lt{'addn'}
-
END
+ $r->print(&Apache::loncommon::end_data_table_row());
+ $r->print(&Apache::loncommon::end_data_table());
return;
}
@@ -1388,12 +1343,9 @@ sub blockcheck {
# for students.
return if (!%live_courses);
- &Apache::lonnet::logthis("hmm");
- &Apache::lonnet::logthis(join(" ",%live_courses));
- &Apache::lonnet::logthis(join(" ",%staff_of));
-
foreach my $course (keys(%live_courses)) {
- my ($cdom,$cnum) = split(/_/,$course);
+ my $cdom = $env{'course.'.$course.'.domain'};
+ my $cnum = $env{'course.'.$course.'.num'};
# if they are a staff member and are currently not playing student
next if ( $staff_of{$course}
@@ -1428,31 +1380,35 @@ sub build_block_table {
'cour' => 'Course',
'dura' => 'Duration',
'blse' => 'Block set by'
- );
+ );
+ $r->print(<<"END");
+ $lt{'cacb'}:
+END
+ $r->print(&Apache::loncommon::start_data_table());
$r->print(<<"END");
- $lt{'cacb'}:
-
$lt{'cour'}
$lt{'dura'}
$lt{'blse'}
END
- foreach (keys %{$setters}) {
- my %courseinfo=&Apache::lonnet::coursedescription($_);
- for (my $i=0; $i<@{$$setters{$_}{staff}}; $i++) {
- my ($uname,$udom) = @{$$setters{$_}{staff}[$i]};
+ foreach my $course (keys(%{$setters})) {
+ my %courseinfo=&Apache::lonnet::coursedescription($course);
+ for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {
+ my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};
my $fullname = &Apache::loncommon::plainname($uname,$udom);
- my ($openblock,$closeblock) = @{$$setters{$_}{times}[$i]};
+ my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
$openblock = &Apache::lonlocal::locallocaltime($openblock);
$closeblock= &Apache::lonlocal::locallocaltime($closeblock);
- $r->print(''.$courseinfo{'description'}.' '.
+ $r->print(&Apache::loncommon::start_data_table_row().
+ ''.$courseinfo{'description'}.' '.
''.$openblock.' to '.$closeblock.' '.
''.$fullname.' ('.$uname.':'.$udom.
- ') ');
+ ')'.
+ &Apache::loncommon::end_data_table_row());
}
}
- $r->print('
');
+ $r->print(&Apache::loncommon::end_data_table());
}
# ----------------------------------------------------------- Display a message
@@ -1480,7 +1436,7 @@ sub displaymessage {
my $counter=0;
$r->print('');
- my $escmsgid=&Apache::lonnet::escape($msgid);
+ my $escmsgid=&escape($msgid);
foreach (@messages) {
if ($_->[5] eq $escmsgid){
last;
@@ -1490,17 +1446,17 @@ sub displaymessage {
$r->print(' ');
my $number_of_messages = scalar(@messages); #subtract 1 for last index
# start output
- &printheader($r,'/adm/email?display='.&Apache::lonnet::escape($msgid),'Display a Message','',$content{'baseurl'});
+ &printheader($r,'/adm/email?display='.&escape($msgid),'Display a Message','',$content{'baseurl'});
my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});
# Functions
$r->print(''.&mt('Functions').': '.
- ''.&mt('Reply').' '.
- ''.&mt('Forward').' '.
- ''.&mt('Mark Unread').' '.
- ''.&mt('Delete').' '.
' $cleanmsgtxt });
}
sub storedcommentlisting {
my ($r)=@_;
my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,
- '^'.&Apache::lonnet::escape(&Apache::lonnet::escape($env{'form.showcommentbaseurl'})));
+ '^'.&escape(&escape($env{'form.showcommentbaseurl'})));
$r->print(&Apache::loncommon::start_page('Stored Comment Listing',undef,
{'onlybody' => 1}));
if ((keys %msgs)[0]=~/^error\:/) {
@@ -1681,13 +1637,26 @@ sub sendoffmail {
&statuschange($msgid,'replied',$folder);
}
+ my $to = $env{'form.selectedusers.forminput'};
+ my $mode = $env{'form.sendmode'};
+
my %toaddr;
- if ($env{'form.sendmode'} eq 'group') {
- foreach my $address (keys(%env)) {
- if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
- $toaddr{$1}='';
+ if ($to) {
+ foreach my $dest (@$to) {
+ my ($user,$domain) = split(/:/, $dest);
+ if (($user ne '') && ($domain ne '')) {
+ my $address = $user.":".$domain; # How the code below expects it.
+ $toaddr{$address} = '';
}
}
+ }
+
+ if ($env{'form.sendmode'} eq 'group') {
+ foreach my $address (keys(%env)) {
+ if ($address=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
+ $toaddr{$1}='';
+ }
+ }
} elsif ($env{'form.sendmode'} eq 'upload') {
foreach my $line (split(/[\n\r\f]+/,$env{'form.upfile'})) {
my ($rec,$txt)=split(/\s*\:\s*/,$line);
@@ -1697,12 +1666,16 @@ sub sendoffmail {
}
}
} else {
- $toaddr{$env{'form.recuname'}.':'.$env{'form.recdomain'}}='';
+ if (($env{'form.recuname'} ne '') && ($env{'form.recdomain'} ne '')) {
+ $toaddr{$env{'form.recuname'}.':'.$env{'form.recdomain'}}='';
+ }
}
if ($env{'form.additionalrec'}) {
foreach (split(/\,/,$env{'form.additionalrec'})) {
my ($auname,$audom)=split(/\@/,$_);
- $toaddr{$auname.':'.$audom}='';
+ if (($auname ne "") && ($audom ne "")) {
+ $toaddr{$auname.':'.$audom}='';
+ }
}
}
@@ -1771,20 +1744,20 @@ sub sendoffmail {
my ($specialmsgid,$specialresult);
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my $course_str = &Apache::lonnet::escape('['.$cnum.':'.$cdom.']');
+ my $course_str = &escape('['.$cnum.':'.$cdom.']');
if ($numspecial) {
$specialresult = &Apache::lonmsg::user_normal_msg_raw($cnum,$cdom,$subj_prefix.
' '.$course_str,$savemsg,undef,undef,undef,
undef,undef,\$specialmsgid);
- $specialmsgid = &Apache::lonnet::unescape($specialmsgid);
+ $specialmsgid = &unescape($specialmsgid);
}
if ($specialresult eq 'ok') {
my $record_sent;
my @recusers;
my @recudoms;
my ($stamp,$crssubj,$msgname,$msgdom,$msgcount,$context,$pid) =
- split(/\:/,&Apache::lonnet::unescape($specialmsgid));
+ split(/\:/,&unescape($specialmsgid));
foreach my $recipient (sort(keys(%toaddr))) {
if ($specialmsg_status{$recipient} eq 'ok') {
@@ -1831,7 +1804,7 @@ sub sendoffmail {
}
} else {
$r->print(''.&mt('Could not deliver message').' '.
- &mt('Please use the browser "Back" button and correct the recipient addresses').'
');
+ &mt('Please use the browser "Back" button and correct the recipient addresses '."($sendstatus)").'');
}
}
@@ -1852,7 +1825,7 @@ sub handler {
['display','replyto','forward','markread','markdel','markunread',
'sendreply','compose','sendmail','critical','recname','recdom',
'recordftf','sortedby','block','folder','startdis','interdis',
- 'showcommentbaseurl','dismode']);
+ 'showcommentbaseurl','dismode','group','subject','text']);
$sqs='&sortedby='.$env{'form.sortedby'};
# ------------------------------------------------------ They checked for email
@@ -1874,7 +1847,7 @@ sub handler {
unless ($folder) {
$folder='';
} else {
- $sqs.='&folder='.&Apache::lonnet::escape($folder);
+ $sqs.='&folder='.&escape($folder);
}
# ------------------------------------------------------------ Get Display Mode
@@ -1882,7 +1855,7 @@ sub handler {
unless ($dismode) {
$dismode='';
} else {
- $sqs.='&dismode='.&Apache::lonnet::escape($dismode);
+ $sqs.='&dismode='.&escape($dismode);
}
# --------------------------------------------------------------------- Display
@@ -1952,7 +1925,7 @@ sub handler {
foreach my $key (keys(%env)) {
if ($key=~/^form\.delmark_(.*)$/) {
my ($result,$msg) =
- &movemsg(&Apache::lonnet::unescape($1),$folder,
+ &movemsg(&unescape($1),$folder,
$env{'form.movetofolder'});
if ($result) {
$total++;
@@ -1979,7 +1952,7 @@ sub handler {
foreach my $key (keys(%env)) {
if ($key=~/^form\.delmark_(.*)$/) {
my ($result,$msg) =
- &statuschange(&Apache::lonnet::unescape($1),'deleted',
+ &statuschange(&unescape($1),'deleted',
$folder);
if ($result) {
$total++;