--- loncom/interface/lonmsg.pm 2015/02/13 01:46:03 1.239 +++ loncom/interface/lonmsg.pm 2024/02/08 03:09:10 1.239.2.5 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging # -# $Id: lonmsg.pm,v 1.239 2015/02/13 01:46:03 raeburn Exp $ +# $Id: lonmsg.pm,v 1.239.2.5 2024/02/08 03:09:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -120,7 +120,7 @@ Critical message to a user New routine that respects "forward" and calls old routine -=item * B: +=item * B: Sends a critical message $message to the $user at $domain. If $sendback is true, a receipt will be sent to the current user when $user receives the message. @@ -148,7 +148,7 @@ New routine that respects "forward" and =item * B: + $error,$nosentstore,$recipid,$permresults,$senthide)>: Sends a message to the $user at $domain, with subject $subject and message $message. Additionally it will check if the user has a Forwarding address @@ -218,8 +218,8 @@ use LONCAPA qw(:DEFAULT :match); sub packagemsg { - my ($subject,$message,$citation,$baseurl,$attachmenturl, - $recuser,$recdomain,$msgid,$type,$crsmsgid,$symb,$error,$recipid)=@_; + my ($subject,$message,$citation,$baseurl,$attachmenturl,$recuser,$recdomain, + $msgid,$type,$crsmsgid,$symb,$error,$recipid,$senthide,$origmsgid)=@_; $message =&HTML::Entities::encode($message,'<>&"'); $citation=&HTML::Entities::encode($citation,'<>&"'); $subject =&HTML::Entities::encode($subject,'<>&"'); @@ -229,8 +229,25 @@ sub packagemsg { #remove machine specification $attachmenturl =~ s|^https?://[^/]+/|/|; $attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"'); + if ($senthide) { + foreach my $item ($subject,$message) { + if ($item ne '') { + $item = 'Not shown due to IP block'; + } + } + if ($attachmenturl ne '') { + $attachmenturl = ''; + } + if ($citation ne '') { + $citation = ''; + } + if ($msgid ne '') { + $msgid = ''; + } + } my $course_context = &get_course_context(); my $now=time; + my $ip = &Apache::lonnet::get_requestor_ip(); my $msgcount = &get_uniq(); unless(defined($msgid)) { $msgid = &buildmsgid($now,$subject,$env{'user.name'},$env{'user.domain'}, @@ -250,7 +267,7 @@ sub packagemsg { } $result .= ''.$ENV{'SERVER_NAME'}.''. ''.$ENV{'HTTP_HOST'}.''. - ''.$ENV{'REMOTE_ADDR'}.''. + ''.$ip.''. ''.$env{'browser.type'}.''. ''.$env{'browser.os'}.''. ''.$env{'browser.version'}.''. @@ -318,6 +335,9 @@ sub packagemsg { } } } + if ($senthide) { + $result .= '$origmsgid'; + } return ($msgid,$result); } @@ -397,10 +417,14 @@ sub buildmsgid { } sub unpackmsgid { - my ($msgid,$folder,$skipstatus,$status_cache)=@_; + my ($msgid,$folder,$skipstatus,$status_cache,$onlycid)=@_; $msgid=&unescape($msgid); my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid, $processid,$symb,$error) = split(/\:/,&unescape($msgid)); + if (!defined($processid)) { $fromcid = ''; } + if (($onlycid) && ($onlycid ne $fromcid)) { + return ($sendtime,'',$fromname,$fromdomain,'',$fromcid,'',$error); + } $shortsubj = &unescape($shortsubj); $shortsubj = &HTML::Entities::decode($shortsubj); $symb = &unescape($symb); @@ -431,14 +455,17 @@ sub sendemail { $replytoaddress = 'do-not-reply@'.$hostname; } else { my %senderemails; - my $have_sender; + my ($have_sender,$setreplyto); if ($env{'form.reply_to_addr'}) { my ($replytoname,$replytodom) = split(/:/,$env{'form.reply_to_addr'}); - if (!($replytoname eq $env{'user.name'} && $replytodom eq $env{'user.domain'})) { + if (($replytoname eq $env{'user.name'} && $replytodom eq $env{'user.domain'})) { + $setreplyto = 1; + } else { if (&Apache::lonnet::homeserver($replytoname,$replytodom) ne 'no_host') { %senderemails = &Apache::loncommon::getemails($replytoname,$replytodom); $have_sender = 1; + $setreplyto = 1; } } } @@ -448,7 +475,12 @@ sub sendemail { foreach my $type ('permanentemail','critnotification','notification') { if ($senderemails{$type}) { ($senderaddress) = split(/,/,$senderemails{$type}); - last if ($senderaddress); + if ($senderaddress) { + if ($setreplyto) { + $replytoaddress = $senderaddress; + } + last; + } } } } @@ -535,16 +567,20 @@ to access the full message.',$url); $subject = $subj; } - my ($blocked,$blocktext); + my ($blocked,$blocktext,$clientip); + $clientip = &Apache::lonnet::get_requestor_ip(); if (!$crit) { my %setters; - my ($startblock,$endblock) = - &Apache::loncommon::blockcheck(\%setters,'com',$touname,$toudom); + my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = + &Apache::loncommon::blockcheck(\%setters,'com',$clientip,$touname,$toudom); if ($startblock && $endblock) { $blocked = 1; my $showstart = &Apache::lonlocal::locallocaltime($startblock); my $showend = &Apache::lonlocal::locallocaltime($endblock); $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you between [_1] and [_2] will be inaccessible until the end of this time period, because you are a student in a course with an active communications block.',$showstart,$showend); + } elsif ($by_ip) { + $blocked = 1; + $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you will be inaccessible from your IP address [_1], because communication is being blocked for certain IP address(es).',$clientip); } } if ($userenv{'notifywithhtml'} ne '') { @@ -705,7 +741,7 @@ sub store_instructor_comment { sub user_crit_msg_raw { my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage, - $nosentstore,$recipid,$attachmenturl,$permresults)=@_; + $nosentstore,$recipid,$attachmenturl,$permresults,$senthide)=@_; # Check if allowed missing my ($status,$packed_message); my $msgid='undefined'; @@ -723,11 +759,15 @@ sub user_crit_msg_raw { $$sentmessage = $packed_message; } if (!$nosentstore) { - (undef,my $packed_message_no_citation) = + my ($sentmsgid,$packed_message_no_citation) = &packagemsg($subject,$message,undef,undef,$attachmenturl,$user, - $domain,$msgid); + $domain,$msgid,undef,undef,undef,undef,undef,$senthide,$msgid); if ($status eq 'ok' || $status eq 'con_delayed') { - &store_sent_mail($msgid,$packed_message_no_citation); + if ($senthide && $sentmsgid) { + &store_sent_mail($sentmsgid,$packed_message_no_citation); + } else { + &store_sent_mail($msgid,$packed_message_no_citation); + } } } } else { @@ -777,7 +817,7 @@ sub user_crit_msg_raw { sub user_crit_msg { my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage, - $nosentstore,$recipid,$attachmenturl,$permresults)=@_; + $nosentstore,$recipid,$attachmenturl,$permresults,$senthide)=@_; my @status; my %userenv = &Apache::lonnet::get('environment',['msgforward'], $domain,$user); @@ -788,13 +828,13 @@ sub user_crit_msg { push(@status, &user_crit_msg_raw($forwuser,$forwdomain,$subject,$message, $sendback,$toperm,$sentmessage,$nosentstore, - $recipid,$attachmenturl,$permresults)); + $recipid,$attachmenturl,$permresults,$senthide)); } } else { push(@status, &user_crit_msg_raw($user,$domain,$subject,$message,$sendback, $toperm,$sentmessage,$nosentstore,$recipid, - $attachmenturl,$permresults)); + $attachmenturl,$permresults,$senthide)); } if (wantarray) { return @status; @@ -843,7 +883,7 @@ sub user_crit_received { sub user_normal_msg_raw { my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl, $toperm,$currid,$newid,$sentmessage,$crsmsgid,$symb,$restitle, - $error,$nosentstore,$recipid,$permresults)=@_; + $error,$nosentstore,$recipid,$permresults,$senthide)=@_; # Check if allowed missing my ($status,$packed_message); my $msgid='undefined'; @@ -865,11 +905,16 @@ sub user_normal_msg_raw { ('email_status',{'recnewemail'=>time},$domain,$user); # Into sent-mail folder if sent mail storage required if (!$nosentstore) { - (undef,my $packed_message_no_citation) = + my ($sentmsgid,$packed_message_no_citation) = &packagemsg($subject,$message,undef,$baseurl,$attachmenturl, - $user,$domain,$currid,undef,$crsmsgid,$symb,$error); + $user,$domain,$currid,undef,$crsmsgid,$symb,$error, + undef,$senthide,$msgid); if ($status eq 'ok' || $status eq 'con_delayed') { - &store_sent_mail($msgid,$packed_message_no_citation); + if ($senthide && $sentmsgid) { + &store_sent_mail($sentmsgid,$packed_message_no_citation); + } else { + &store_sent_mail($msgid,$packed_message_no_citation); + } } } if (ref($newid) eq 'SCALAR') { @@ -920,7 +965,7 @@ sub user_normal_msg_raw { sub user_normal_msg { my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl, $toperm,$sentmessage,$symb,$restitle,$error,$nosentstore,$recipid, - $permresults)=@_; + $permresults,$senthide)=@_; my @status; my %userenv = &Apache::lonnet::get('environment',['msgforward'], $domain,$user); @@ -932,13 +977,15 @@ sub user_normal_msg { &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message, $citation,$baseurl,$attachmenturl,$toperm, undef,undef,$sentmessage,undef,$symb, - $restitle,$error,$nosentstore,$recipid,$permresults)); + $restitle,$error,$nosentstore,$recipid, + $permresults,$senthide)); } } else { push(@status,&user_normal_msg_raw($user,$domain,$subject,$message, $citation,$baseurl,$attachmenturl,$toperm, undef,undef,$sentmessage,undef,$symb, - $restitle,$error,$nosentstore,$recipid,$permresults)); + $restitle,$error,$nosentstore,$recipid, + $permresults,$senthide)); } if (wantarray) { return @status;