[LON-CAPA-cvs] cvs: loncom /interface loncommunicate.pm lonmsg.pm
raeburn
lon-capa-cvs@mail.lon-capa.org
Mon, 17 May 2004 19:00:46 -0000
This is a MIME encoded message
--raeburn1084820446
Content-Type: text/plain
raeburn Mon May 17 15:00:46 2004 EDT
Modified files:
/loncom/interface lonmsg.pm loncommunicate.pm
Log:
Course Coordinators and Instructors can schedule blocking periods for student display of e-mail.
During a blocking period students will be unable to display LON-CAPA e-mail sent during the current
blocking period. If Course Coodinators or Instructors need to contact students during this time, they
should send a critical message (these will still be viewable). Note: because COM functions can be
used outside a course context, blocking prevents display of all messages sent to the student during the
blocking period (including other courses).
--raeburn1084820446
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20040517150046.txt"
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.100 loncom/interface/lonmsg.pm:1.101
--- loncom/interface/lonmsg.pm:1.100 Mon May 10 18:39:51 2004
+++ loncom/interface/lonmsg.pm Mon May 17 15:00:45 2004
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging
#
-# $Id: lonmsg.pm,v 1.100 2004/05/10 22:39:51 albertel Exp $
+# $Id: lonmsg.pm,v 1.101 2004/05/17 19:00:45 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -74,6 +74,18 @@
interface, or other features they may wish to use in response to the
student's query.
+=item * B<Blocking>: LON-CAPA can block display of e-mails that are
+sent to a student during an online exam. A course coordinator or
+instructor can set an open and close date/time for scheduled online
+exams in a course. If a user uses the LON-CAPA internal messaging
+system to display e-mails during the scheduled blocking event,
+display of all e-mail sent during the blocking period will be
+suppressed, and a message of explanation, including details of the
+currently active blocking periods will be displayed instead. A user
+who has a course coordinator or instructor role in a course will be
+unaffected by any blocking periods for the course, unless the user
+also has a student role in the course, AND has selected the student role.
+
=back
Users can ask LON-CAPA to forward messages to conventional e-mail
@@ -622,6 +634,7 @@
}
sub sortedmessages {
+ my ($blocked,$startblock,$endblock,$numblocked) = @_;
my @messages = &Apache::lonnet::getkeys('nohist_email');
#unpack the varibles and repack into temp for sorting
my @temp;
@@ -631,7 +644,14 @@
&Apache::lonmsg::unpackmsgid($msgid);
my @temp1 = ($sendtime,$shortsubj,$fromname,$fromdomain,$status,
$msgid);
- push @temp ,\@temp1;
+ # Check whether message was sent during blocking period.
+ if ($sendtime >= $startblock && ($sendtime <= $endblock && $endblock > 0) ) {
+ my $escid = &Apache::lonnet::unescape($msgid);
+ $$blocked{$escid} = 'ON';
+ $$numblocked ++;
+ } else {
+ push @temp ,\@temp1;
+ }
}
#default sort
@temp = sort {$a->[0] <=> $b->[0]} @temp;
@@ -672,7 +692,13 @@
sub disall {
my $r=shift;
- $r->print(<<ENDDISHEADER);
+ my %blocked = ();
+ my %setters = ();
+ my $startblock;
+ my $endblock;
+ my $numblocked = 0;
+ &blockcheck(\%setters,\$startblock,\$endblock);
+ $r->print(<<ENDDISHEADER);
<script>
function checkall() {
for (i=0; i<document.forms.disall.elements.length; i++) {
@@ -726,7 +752,7 @@
$r->print('<a href = "?sortedby=revstatus">'.&mt('Status').'</th>');
}
$r->print('</tr>');
- my @temp=sortedmessages();
+ my @temp=sortedmessages(\%blocked,$startblock,$endblock,\$numblocked);
foreach (@temp){
my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID)= @$_;
if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {
@@ -753,7 +779,15 @@
'<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a><p>'.
'<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.
'<input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" />'.
- '</form></body></html>');
+ '</form>');
+ if ($numblocked > 0) {
+ my $beginblock = &Apache::lonlocal::locallocaltime($startblock);
+ my $finishblock = &Apache::lonlocal::locallocaltime($endblock);
+ $r->print('<br /><br />'.
+ $numblocked.' '.&mt('message(s) is/are not viewable because display of LON-CAPA messages sent to you by other students between').' '.$beginblock.' '.&mt('and').' '.$finishblock.' '.&mt('is currently being blocked because of online exams.'));
+ &build_block_table($r,$startblock,$endblock,\%setters);
+ }
+ $r->print('</body></html>');
}
# ============================================================== Compose output
@@ -1030,15 +1064,391 @@
}
}
+# ----------------------------------------------------------- Blocking during exams
+
+sub examblock {
+ my ($r,$action) = @_;
+ unless ($ENV{'request.course.id'}) { return;}
+ unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { $r->print('Not allowed'); }
+ my %lt=&Apache::lonlocal::texthash(
+ 'comb' => 'Communication Blocking',
+ 'cbds' => 'Communication blocking during scheduled exams',
+ 'desc' => 'You can use communication blocking to prevent students enrolled in this course from displaying LON-CAPA messages sent by other students during an online exam. As blocking of communication could potentially interrupt legitimate communication between students 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'
+ );
+
+ my %ltext = &Apache::lonlocal::texthash(
+ 'dura' => 'Duration',
+ 'setb' => 'Set by',
+ 'even' => 'Event',
+ 'actn' => 'Action',
+ 'star' => 'Start',
+ 'endd' => 'End'
+ );
+
+ &printheader($r,'/adm/email?block=display',$lt{'comb'});
+ $r->print('<h3>'.$lt{'cbds'}.'</h3>');
+
+ if ($action eq 'store') {
+ &blockstore($r);
+ }
+
+ $r->print($lt{'desc'}.'<br /><br />
+ <form name="blockform" method="post" action="/adm/email?block=store">
+ ');
+
+ $r->print('<h4>'.$lt{'mecb'}.'</h4>');
+ my %records = ();
+ my $blockcount = 0;
+ my $parmcount = 0;
+ &get_blockdates(\%records,\$blockcount);
+ if ($blockcount > 0) {
+ $parmcount = &display_blocker_status($r,\%records,\%ltext);
+ } else {
+ $r->print($lt{'ncbc'}.'<br /><br />');
+ }
+ &display_addblocker_table($r,$parmcount,\%ltext);
+ $r->print(<<"END");
+<br />
+<input type="hidden" name="blocktotal" value="$blockcount" />
+<input type ="submit" value="Save Changes" />
+</form>
+</body>
+</html>
+END
+ return;
+}
+
+sub blockstore {
+ my $r = shift;
+ my %lt=&Apache::lonlocal::texthash(
+ 'tfcm' => 'The following changes were made',
+ 'cbps' => 'communication blocking period(s)',
+ 'werm' => 'was/were removed',
+ 'wemo' => 'was/were modified',
+ 'wead' => 'was/were added',
+ 'ncwm' => 'No changes were made.'
+ );
+ my %adds = ();
+ my %removals = ();
+ my %cancels = ();
+ my $modtotal = 0;
+ my $canceltotal = 0;
+ my $addtotal = 0;
+ my %blocking = ();
+ $r->print('<h3>'.$lt{'head'}.'</h3>');
+ foreach (keys %ENV) {
+ if ($_ =~ m/^form\.modify_(\w+)$/) {
+ $adds{$1} = $1;
+ $removals{$1} = $1;
+ $modtotal ++;
+ } elsif ($_ =~ m/^form\.cancel_(\d+)$/) {
+ $cancels{$1} = $1;
+ unless ( defined($removals{$1}) ) {
+ $removals{$1} = $1;
+ $canceltotal ++;
+ }
+ } elsif ($_ =~ m/^form\.add_(\d+)$/) {
+ $adds{$1} = $1;
+ $addtotal ++;
+ }
+ }
+
+ foreach (keys %removals) {
+ my $hashkey = $ENV{'form.key_'.$_};
+ &Apache::lonnet::del('comm_block',["$hashkey"],
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'}
+ );
+ }
+ foreach (keys %adds) {
+ unless ( defined($cancels{$_}) ) {
+ my ($newstart,$newend) = &get_dates_from_form($_);
+ my $newkey = $newstart.'____'.$newend;
+ $blocking{$newkey} = $ENV{'user.name'}.'@'.$ENV{'user.domain'}.':'.$ENV{'form.title_'.$_};
+ }
+ }
+ if ($addtotal + $modtotal > 0) {
+ &Apache::lonnet::put('comm_block',\%blocking,
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'}
+ );
+ }
+ my $chgestotal = $canceltotal + $modtotal + $addtotal;
+ if ($chgestotal > 0) {
+ $r->print($lt{'tfcm'}.'<ul>');
+ if ($canceltotal > 0) {
+ $r->print('<li>'.$canceltotal.' '.$lt{'cbps'},' '.$lt{'werm'}.'</li>');
+ }
+ if ($modtotal > 0) {
+ $r->print('<li>'.$modtotal.' '.$lt{'cbps'},' '.$lt{'wemo'}.'</li>');
+ }
+ if ($addtotal > 0) {
+ $r->print('<li>'.$addtotal.' '.$lt{'cbps'},' '.$lt{'wead'}.'</li>');
+ }
+ $r->print('</ul>');
+ } else {
+ $r->print($lt{'ncwm'});
+ }
+ $r->print('<br />');
+ return;
+}
+
+sub get_dates_from_form {
+ my $item = shift;
+ my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate_'.$item);
+ my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate_'.$item);
+ return ($startdate,$enddate);
+}
+
+sub get_blockdates {
+ my ($records,$blockcount) = @_;
+ $$blockcount = 0;
+ %{$records} = &Apache::lonnet::dump('comm_block',
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'}
+ );
+ $$blockcount = keys %{$records};
+
+ foreach (keys %{$records}) {
+ if ($_ eq 'error: 2 tie(GDBM) Failed while attempting dump') {
+ $$blockcount = 0;
+ last;
+ }
+ }
+}
+
+sub display_blocker_status {
+ my ($r,$records,$ltext) = @_;
+ my $parmcount = 0;
+ my @bgcols = ("#eeeeee","#dddddd");
+ my $function = &Apache::loncommon::get_users_function();
+ my $color = &Apache::loncommon::designparm($function.'.tabbg',
+ $ENV{'user.domain'});
+ my %lt = &Apache::lonlocal::texthash(
+ 'modi' => 'Modify',
+ 'canc' => 'Cancel',
+ );
+ $r->print(<<"END");
+<table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="100%" bgcolor="#000000">
+ <table width="100%" border="0" cellpadding="1" cellspacing="0">
+ <tr>
+ <td width="100%" bgcolor="#000000">
+ <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">
+ <tr bgcolor="$color">
+ <td><b>$$ltext{'dura'}</b></td>
+ <td><b>$$ltext{'setb'}</b></td>
+ <td><b>$$ltext{'even'}</b></td>
+ <td><b>$$ltext{'actn'}?</b></td>
+ </tr>
+END
+ foreach (sort keys %{$records}) {
+ my $iter = $parmcount%2;
+ my $onchange = 'onFocus="javascript:window.document.forms['.
+ "'blockform'].elements['modify_".$parmcount."'].".
+ 'checked=true;"';
+ my ($start,$end) = split/____/,$_;
+ my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);
+ my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);
+ my ($setter,$title) = split/:/,$$records{$_};
+ my ($setuname,$setudom) = split/@/,$setter;
+ my $settername = &Apache::loncommon::plainname($setuname,$setudom);
+ $r->print(<<"END");
+ <tr bgcolor="$bgcols[$iter]">
+ <td>$$ltext{'star'}: $startform<br/>$$ltext{'endd'}: $endform</td>
+ <td>$settername</td>
+ <td><input type="text" name="title_$parmcount" size="15" value="$title"/><input type="hidden" name="key_$parmcount" value="$_"></td>
+ <td>$lt{'modi'}? <input type="checkbox" name="modify_$parmcount"/><br />$lt{'canc'}? <input type="checkbox" name="cancel_$parmcount"/>
+ </tr>
+END
+ $parmcount ++;
+ }
+ $r->print(<<"END");
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<br />
+<br />
+END
+ return $parmcount;
+}
+
+sub display_addblocker_table {
+ my ($r,$parmcount,$ltext) = @_;
+ my $start = time;
+ my $end = $start + (60 * 60 * 2); #Default is an exam of 2 hours duration.
+ my $onchange = 'onFocus="javascript:window.document.forms['.
+ "'blockform'].elements['add_".$parmcount."'].".
+ 'checked=true;"';
+ my $startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.$parmcount,$start,$onchange);
+ my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);
+ my $function = &Apache::loncommon::get_users_function();
+ my $color = &Apache::loncommon::designparm($function.'.tabbg',
+ $ENV{'user.domain'});
+ my %lt = &Apache::lonlocal::texthash(
+ 'addb' => 'Add block',
+ 'exam' => 'e.g., Exam 1',
+ 'addn' => 'Add new communication blocking periods'
+ );
+ $r->print(<<"END");
+<h4>$lt{'addn'}</h4>
+<table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="100%" bgcolor="#000000">
+ <table width="100%" border="0" cellpadding="1" cellspacing="0">
+ <tr>
+ <td width="100%" bgcolor="#000000">
+ <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">
+ <tr bgcolor="#CCCCFF">
+ <td><b>$$ltext{'dura'}</b></td>
+ <td><b>$$ltext{'even'} $lt{'exam'}</b></td>
+ <td><b>$$ltext{'actn'}?</b></td>
+ </tr>
+ <tr bgcolor="#eeeeee">
+ <td>$$ltext{'star'}: $startform<br />$$ltext{'endd'}: $endform</td>
+ <td><input type="text" name="title_$parmcount" size="15" value=""/></td>
+ <td>$lt{'addb'}? <input type="checkbox" name="add_$parmcount" value="1"/></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+END
+ return;
+}
+
+sub blockcheck {
+ my ($setters,$startblock,$endblock) = @_;
+ # Retrieve active student roles and active course coordinator/instructor roles
+ my @livecses = ();
+ my @staffcses = ();
+ $$startblock = 0;
+ $$endblock = 0;
+ foreach (keys %ENV) {
+ if ($_ =~ m-^user\.role\.(st|cc|in)\./(.+)$-) {
+ my $role = $1;
+ my $cse = $2;
+ $cse =~ s|/|_|;
+ if ($ENV{$_} =~ m/^(\d*)\.(\d*)$/) {
+ unless (($2 > 0 && $2 < time) || ($1 > time)) {
+ if ($role eq 'st') {
+ push @livecses, $cse;
+ } else {
+ unless (grep/^$cse$/,@staffcses) {
+ push @staffcses, $cse;
+ }
+ }
+ }
+ }
+ } elsif ($_ =~ m-user\.role\.cr/(\w+)/(\w+)/([^/]+)\./(.+)$- ) {
+ my $rolepriv = $ENV{'user.role..rolesdef_'.$3};
+ }
+ }
+ # Retrieve blocking times and identity of blocker for active courses for students.
+ if (@livecses > 0) {
+ foreach my $cse (@livecses) {
+ my ($cdom,$crs) = split/_/,$cse;
+ if ( (grep/^$cse$/,@staffcses) && ($ENV{'request.role'} !~ m-^st\./$cdom/$crs$-) ) {
+ next;
+ } else {
+ %{$$setters{$cse}} = ();
+ @{$$setters{$cse}{'staff'}} = ();
+ @{$$setters{$cse}{'times'}} = ();
+ my %records = &Apache::lonnet::dump('comm_block',$cdom,$crs);
+ foreach (keys %records) {
+ if ($_ =~ m/^(\d+)____(\d+)$/) {
+ if ($1 <= time && $2 >= time) {
+ my ($staff,$title) = split/:/,$records{$_};
+ push @{$$setters{$cse}{'staff'}}, $staff;
+ push @{$$setters{$cse}{'times'}}, $_;
+ if ( ($$startblock == 0) || ($$startblock > $1) ) {
+ $$startblock = $1;
+ }
+ if ( ($$endblock == 0) || ($$endblock < $2) ) {
+ $$endblock = $2;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+sub build_block_table {
+ my ($r,$startblock,$endblock,$setters) = @_;
+ my $function = &Apache::loncommon::get_users_function();
+ my $color = &Apache::loncommon::designparm($function.'.tabbg',
+ $ENV{'user.domain'});
+ my %lt = &Apache::lonlocal::texthash(
+ 'cacb' => 'Currently active communication blocks',
+ 'cour' => 'Course',
+ 'dura' => 'Duration',
+ 'blse' => 'Block set by'
+ );
+ $r->print(<<"END");
+<br /<br />$lt{'cacb'}:<br /><br />
+<table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="100%" bgcolor="#000000">
+ <table width="100%" border="0" cellpadding="1" cellspacing="0">
+ <tr>
+ <td width="100%" bgcolor="#000000">
+ <table border="0" cellpadding="3" cellspacing="3" bgcolor="#FFFFFF">
+ <tr bgcolor="$color">
+ <td><b>$lt{'cour'}</b></td>
+ <td><b>$lt{'dura'}</b></td>
+ <td><b>$lt{'blse'}</b></td>
+ </tr>
+END
+ foreach (keys %{$setters}) {
+ my %courseinfo=&Apache::lonnet::coursedescription($_);
+ for (my $i=0; $i<@{$$setters{$_}{staff}}; $i++) {
+ my ($uname,$udom) = split/\@/,$$setters{$_}{staff}[$i];
+ my $fullname = &Apache::loncommon::plainname($uname,$udom);
+ my ($openblock,$closeblock) = split/____/,$$setters{$_}{times}[$i];
+ $openblock = &Apache::lonlocal::locallocaltime($openblock);
+ $closeblock= &Apache::lonlocal::locallocaltime($closeblock);
+ $r->print('<tr><td>'.$courseinfo{'description'}.'</td>'.
+ '<td>'.$openblock.' to '.$closeblock.'</td>'.
+ '<td>'.$fullname.' ('.$uname.'@'.$udom.
+ ')</td></tr>');
+ }
+ }
+ $r->print('</table></td></tr></table></td></tr></table>');
+}
+
# ----------------------------------------------------------- Display a message
sub displaymessage {
my ($r,$msgid)=@_;
+ my %blocked = ();
+ my %setters = ();
+ my $startblock = 0;
+ my $endblock = 0;
+ my $numblocked = 0;
+# info to generate "next" and "previous" buttons and check if message is blocked
+ &blockcheck(\%setters,\$startblock,\$endblock);
+ my @messages=&sortedmessages(\%blocked,$startblock,$endblock,\$numblocked);
+ if ( $blocked{$msgid} eq 'ON' ) {
+ &printheader($r,'/adm/email',&mt('Display a Message'));
+ $r->print(&mt('You attempted to display a message that is currently blocked because you are enrolled in one or more courses for which there is an ongoing online exam.'));
+ &build_block_table($r,$startblock,$endblock,\%setters);
+ return;
+ }
&statuschange($msgid,'read');
my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
my %content=&unpackagemsg($message{$msgid});
-# info to generate "next" and "previous" buttons
- my @messages=&sortedmessages();
my $counter=0;
$r->print('<pre>');
my $escmsgid=&Apache::lonnet::escape($msgid);
@@ -1132,10 +1542,12 @@
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['display','replyto','forward','markread','markdel','markunread',
'sendreply','compose','sendmail','critical','recname','recdom',
- 'recordftf','sortedby']);
+ 'recordftf','sortedby','block']);
$sqs='&sortedby='.$ENV{'form.sortedby'};
# ------------------------------------------------------ They checked for email
- &Apache::lonnet::put('email_status',{'recnewemail'=>0});
+ unless ($ENV{'form.block'}) {
+ &Apache::lonnet::put('email_status',{'recnewemail'=>0});
+ }
# ----------------------------------------------------------------- Breadcrumbs
@@ -1194,6 +1606,8 @@
&compout($r,'','',$ENV{'form.compose'});
} elsif ($ENV{'form.recordftf'}) {
&facetoface($r,$ENV{'form.recordftf'});
+ } elsif ($ENV{'form.block'}) {
+ &examblock($r,$ENV{'form.block'});
} elsif ($ENV{'form.sendmail'}) {
my $sendstatus='';
if ($ENV{'form.send'}) {
Index: loncom/interface/loncommunicate.pm
diff -u loncom/interface/loncommunicate.pm:1.21 loncom/interface/loncommunicate.pm:1.22
--- loncom/interface/loncommunicate.pm:1.21 Fri Mar 26 14:35:59 2004
+++ loncom/interface/loncommunicate.pm Mon May 17 15:00:46 2004
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Communicate
#
-# $Id: loncommunicate.pm,v 1.21 2004/03/26 19:35:59 www Exp $
+# $Id: loncommunicate.pm,v 1.22 2004/05/17 19:00:46 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -50,7 +50,9 @@
'da' => 'Date',
'us' => 'Username',
'op' => 'Open',
-'do' => 'Domain'
+'do' => 'Domain',
+'cbs' => 'Configure blocking of student communication during exams'
+
);
my %help=();
foreach ('Course_Face_To_Face_Records,Course_Critical_Message',
@@ -82,7 +84,9 @@
<tr><td bgcolor="#FFFFAA">
<b><a href="/adm/email?recordftf=query">$lt{'unr'}</a></b>$help{'Course_Face_To_Face_Records,Course_Critical_Message'}
</td></tr>
-
+<tr><td bgcolor="#FFFFAA">
+ <b><a href="/adm/email?block=display">$lt{'cbs'}</a>
+</td></tr>
END
}
$r->print('</table>');
@@ -91,21 +95,34 @@
$ENV{'user.name'}.':nohist_email',
$ENV{'user.home'}));
my @newmsgs;
+ my %setters = ();
+ my $startblock = 0;
+ my $endblock = 0;
+ my %blocked = ();
+ my $numblocked = 0;
+ # Check for blocking of display because of scheduled online exams.
+ &Apache::lonmsg::blockcheck(\%setters,\$startblock,\$endblock);
foreach (@msgids) {
my ($sendtime,$shortsubj,$fromname,$fromdom,$status)=
&Apache::lonmsg::unpackmsgid($_);
- if (defined($sendtime) && $sendtime!~/error/) {
- $sendtime = &Apache::lonlocal::locallocaltime($sendtime);
- if ($status eq 'new') {
- push @newmsgs, {
- msgid => $_,
- sendtime => $sendtime,
- shortsub => &Apache::lonnet::unescape($shortsubj),
- from => $fromname,
- fromdom => $fromdom
+ if (defined($sendtime) && $sendtime!~/error/) {
+ my $numsendtime = $sendtime;
+ $sendtime = &Apache::lonlocal::locallocaltime($sendtime);
+ if ($status eq 'new') {
+ if ($numsendtime >= $startblock && ($numsendtime <= $endblock && $endblock > 0) ) {
+ $blocked{$_} = 'ON';
+ $numblocked ++;
+ } else {
+ push @newmsgs, {
+ msgid => $_,
+ sendtime => $sendtime,
+ shortsub => &Apache::lonnet::unescape($shortsubj),
+ from => $fromname,
+ fromdom => $fromdom
+ }
}
+ }
}
- }
}
if ($#newmsgs >= 0) {
$r->print(<<TABLEHEAD);
@@ -124,8 +141,22 @@
$r->print("</td></tr>");
}
$r->print('</table></body></html>');
- } else {
+ } elsif ($numblocked == 0) {
$r->print("<h3>".&mt('You have no unread messages')."</h3>");
+ }
+ if ($numblocked > 0) {
+ my $beginblock = &Apache::lonlocal::locallocaltime($startblock);
+ my $finishblock = &Apache::lonlocal::locallocaltime($endblock);
+ if ($numblocked == 1) {
+ $r->print("<h3>".&mt('You have').' '.$numblocked.' '.&mt('blocked unread message').".</h3>");
+ $r->print(&mt('This message is not viewable because').' ');
+ } else {
+ $r->print("<h3>".&mt('You have').' '.$numblocked.' '.&mt('blocked unread messages').".</h3>");
+ $r->print(&mt('These').' '.$numblocked.' '.&mt('messages are not viewable because '));
+ }
+ $r->print(
+&mt('display of LON-CAPA messages sent to you by other students between').' '.$beginblock.' '.&mt('and').' '.$finishblock.' '.&mt('is currently being blocked because of online exams').'.');
+ &Apache::lonmsg::build_block_table($r,$startblock,$endblock,\%setters);
}
}
--raeburn1084820446--