--- loncom/interface/lonmsgdisplay.pm 2017/08/07 20:22:13 1.185 +++ loncom/interface/lonmsgdisplay.pm 2022/01/19 15:04:15 1.197 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging display # -# $Id: lonmsgdisplay.pm,v 1.185 2017/08/07 20:22:13 raeburn Exp $ +# $Id: lonmsgdisplay.pm,v 1.197 2022/01/19 15:04:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -782,11 +782,14 @@ sub groupmail_header { if ($grouppagelink) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>$grouppagelink, - text=>"Group: $description", - title=>"Go to group's home page"},); + text=>&mt('Group').": $description", + title=>&mt("Go to group's home page"), + no_mt=>1, + },); } else { &Apache::lonhtmlcommon::add_breadcrumb - ({text=>"Group: $description",}); + ({text=>&mt('Group').": $description", + no_mt=>1,}); } &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/email?compose=group&group=". @@ -799,8 +802,9 @@ sub groupmail_header { title=>"E-mails sent"},); } my $groupheader = &Apache::loncommon::start_page('Group Message'); - $groupheader .= &Apache::lonhtmlcommon::breadcrumbs - ('Group - '.$env{'form.group'}.' Email'); + $groupheader .= &Apache::lonhtmlcommon::breadcrumbs( + &mt('Group messages - [_1]',$description), + undef,undef,undef,undef,1); return $groupheader; } @@ -861,7 +865,7 @@ sub discrit { .&Apache::lonhtmlcommon::row_closure(1); } $result .= &Apache::lonhtmlcommon::row_title(&mt('Message'),undef,'LC_evenrow_value') - .'
'.&Apache::lontexconvert::msgtexconverted($content{'message'}).'' + .'
'.&Apache::lontexconvert::msgtexconverted($content{'message'}).'' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title('',undef,'LC_oddrow_value') .'
'); @@ -1124,7 +1131,7 @@ ENDDISHEADER } $r->print('
'); if ($numblocked > 0) { - $r->print(&blocked_in_folder($numblocked,$startblock,$endblock, + $r->print(&blocked_in_folder($numblocked,$startblock,$endblock,$by_ip,$clientip,$blockdom, \%setters)); } return; @@ -1314,20 +1321,26 @@ ENDDISHEADER $r->print(''); if ($numblocked > 0) { $r->print(&blocked_in_folder($numblocked,$startblock,$endblock, - \%setters)); + $by_ip,$clientip,$blockdom,\%setters)); } } sub blocked_in_folder { - my ($numblocked,$startblock,$endblock,$setters) = @_; - my $beginblock = &Apache::lonlocal::locallocaltime($startblock); - my $finishblock = &Apache::lonlocal::locallocaltime($endblock); - my $output = ''. + &mt('Sending of LON-CAPA messages is blocked for your current IP address: [_1].',$clientip).'
'. + ''. + ''. &Apache::lontexconvert::msgtexconverted($content{'message'}). ''; } @@ -2102,14 +2135,16 @@ sub displaymessage { my %setters = (); my $numblocked = 0; my $crstype = &Apache::loncommon::course_type(); + my $clientip = &Apache::lonnet::get_requestor_ip($r); # info to generate "next" and "previous" buttons and check if message is blocked - my ($startblock,$endblock) = &Apache::loncommon::blockcheck(\%setters,'com'); - my @messages=&sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder,$msgstatus); + my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = + &Apache::loncommon::blockcheck(\%setters,'com',$clientip); + my @messages=&sortedmessages(\%blocked,$startblock,$endblock,$by_ip,\$numblocked,$folder,$msgstatus); 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.')); - my($blocked, $blocktext) = &Apache::loncommon::blocking_status("com"); + my($blocked, $blocktext) = &Apache::loncommon::blocking_status("com",$clientip); $r->print("
".$blocktext); return; } @@ -2143,8 +2178,28 @@ sub displaymessage { my $number_of_messages = scalar(@messages); #subtract 1 for last index + my $head_extra; + +# if student's view of resource will be included +# get tag(s) for css file(s) in use, and pass to &header to include +# in call to loncommon::start_page() + + if (($env{'request.course.id'} eq $content{'courseid'}) && + (&Apache::lonnet::allowed('vgr',$content{'courseid'}))) { + my $symb; + if (defined($content{'symb'})) { + $symb = $content{'symb'}; + } elsif (defined($content{'baseurl'})) { + $symb=&Apache::lonnet::symbread($content{'baseurl'}); + } + if ($symb) { + $head_extra = &Apache::loncommon::css_links($symb); + } + } + # start output - &printheader($r,'/adm/email?display='.&escape($msgid),'Display a Message','',$content{'baseurl'}); + &printheader($r,'/adm/email?display='.&escape($msgid),'Display a Message','', + $content{'baseurl'},$head_extra); # Prepare available functions my @functionlist; @@ -2493,7 +2548,7 @@ sub displaymessage { # Message $r->print(&Apache::lonhtmlcommon::row_title(&mt('Message')) - .'' + .'' .&Apache::lontexconvert::msgtexconverted($content{'message'},1) .'' ); @@ -2653,6 +2708,13 @@ sub displayresource { } # Could not get a symb, give up unless ($symb) { return $content{'citation'}; } + if ($symb =~ /ext\.tool$/) { + return ''.&mt('Current transactions for student (if applicable)').'
'. + &Apache::loncommon::get_previous_attempt($symb, + $content{'sendername'}, + $content{'senderdomain'}, + $content{'courseid'}); + } # Have a symb, can render return ''.&mt('Current attempts of student (if applicable)').'
'. &Apache::loncommon::get_previous_attempt($symb, @@ -2678,13 +2740,16 @@ sub displayresource { # ================================================================== The Header sub header { - my ($r,$title,$baseurl)=@_; + my ($r,$title,$baseurl,$head_extra)=@_; my $extra = &Apache::loncommon::studentbrowser_javascript(); if ($baseurl) { $extra .= ""; } $extra .= ''; + if ($head_extra) { + $extra .= "\n$head_extra"; + } $r->print(&Apache::loncommon::start_page('Messages', $extra)); $r->print(&Apache::lonhtmlcommon::breadcrumbs @@ -2694,11 +2759,11 @@ sub header { # ---------------------------------------------------------------- Print header sub printheader { - my ($r,$url,$desc,$title,$baseurl)=@_; + my ($r,$url,$desc,$title,$baseurl,$head_extra)=@_; &Apache::lonhtmlcommon::add_breadcrumb ({href=>$url, text=>$desc}); - &header($r,$title,$baseurl); + &header($r,$title,$baseurl,$head_extra); } # ------------------------------------------------------------ Store the comment @@ -2755,7 +2820,14 @@ sub sendoffmail { $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; } - if ($env{'form.send'}) { + my $clientip = &Apache::lonnet::get_requestor_ip($r); + my %setters; + my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = + &Apache::loncommon::blockcheck(\%setters,'com',$clientip); + if ($by_ip) { + &printheader($r,'','Sending messages blocked from your location.'); + return 'blocked'; + } elsif ($env{'form.send'}) { if (!$env{'form.multiforward'}) { if ($group eq '') { &printheader($r,'','Messages being sent.'); @@ -3002,7 +3074,7 @@ sub sendoffmail { &Apache::lonnet::logthis('Failed to store To, Bcc and Cc recipients for '.$env{'user.name'}.':'.$env{'user.domain'}); } if ($env{'form.attachment'}) { - if (length($env{'form.attachment'})<131072) { + if (length($env{'form.attachment'}) <= 1048576) { $attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback/'.$now); } else { $r->print(' '.&mt('Attachment not included - exceeded permitted length').'
'); @@ -3449,8 +3521,12 @@ sub handler { my $count = keys(%forwardfail); my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Could not forward [quant,_1,message].',$count),1); foreach my $key (keys(%forwardfail)) { - $message .= '
'.&mt('Could not deliver forwarded message.').' '. - &mt('The recipient addresses may need to be corrected').' ('.$forwardfail{$key}.')'; + $message .= '
'.&mt('Could not deliver forwarded message.').' '; + if ($forwardfail{$key} eq 'blocked') { + $message .= &mt('Sending messages is blocked from your IP address'); + } else { + $message .= &mt('The recipient addresses may need to be corrected').' ('.$forwardfail{$key}.')'; + } } $message = &Apache::loncommon::confirmwrapper($message); $r->print($message);