--- loncom/interface/lonchatfetch.pm	2009/07/26 16:53:40	1.35
+++ loncom/interface/lonchatfetch.pm	2021/11/30 15:55:37	1.40
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Chat Fetching
 #
-# $Id: lonchatfetch.pm,v 1.35 2009/07/26 16:53:40 kalberla Exp $
+# $Id: lonchatfetch.pm,v 1.40 2021/11/30 15:55:37 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -63,19 +63,12 @@ sub handler {
 		'<b>'.&unescape($group_info{description}).
 		'</b><br />';
         }
-    } elsif (! &Apache::lonnet::allowed('pch',$env{'request.course.id'}.
+    } elsif (! &Apache::lonnet::allowed('plc',$env{'request.course.id'}.
              ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))
         ) {
         return HTTP_NOT_ACCEPTABLE;
     }
 
-    my $loaderror=&Apache::lonnet::overloaderror($r);
-    if ($loaderror) { return $loaderror; }
-    $loaderror=
-       &Apache::lonnet::overloaderror($r,
-         $env{'course.'.$env{'request.course.id'}.'.home'});
-    if ($loaderror) { return $loaderror; }
-
     &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;
     return OK if $r->header_only;
@@ -128,10 +121,16 @@ sub handler {
 	    $contrib=&unescape($contrib);
 	    &Apache::lonfeedback::newline_to_br(\$contrib);
 	    ($contrib,my $errors)=&Apache::lontexconvert::msgtexconverted($contrib);
-	    if ($errors) { $contrib.=&mt('[Message not fully displayed due to incorrect embedded TeX]'); }
+            if ($errors) {
+                $contrib.=' <span class="LC_error">'
+                         .&mt('(Message not fully displayed due to incorrect embedded TeX.)')
+                         .'</span>';
+            }
 	    if ($errors && $snum eq $env{'user.name'} &&
 		$sdom eq $env{'user.domain'} ) {
-		$contrib.='<br />'.&mt('[TeX error message: [_1]',$errors);
+                $contrib.='<br /><span class="LC_error">'
+                         .&mt('TeX error message: [_1]',$errors)
+                         .'</span>';
 	    }
 	    $contrib=~s/\n/ /g;
 	    $contrib=~s/\'/\&\#39\;/g;
@@ -163,9 +162,9 @@ sub handler {
 	    $color=substr($color,0,6);
 	    my $timestamp=localtime($msgtime);
 	    my ($mhour,$mmin,$msec)=($timestamp=~/(\d\d)\:(\d\d)\:(\d\d)/);
-	    $newstuff.='<font color="#'.$color.'"><a name="LC_'.$id.'"></a><b>'.
+	    $newstuff.='<span style="color:#'.$color.'"><a name="LC_'.$id.'"></a><b>'.
 		$sender.'</b> ('.$mhour.':'.$mmin.':'.$msec.'): '.
-		$contrib."</font><br />";
+		$contrib."</span><br />";
 	    $bottomid='LC_'.$id;
 	} else {
 	    $entry=~/^(\w+)/;
@@ -178,7 +177,8 @@ sub handler {
         $refresh_cmd .= "&amp;group=$group";
     }
     my $headarg;
-    my ($blocked,$blocktext) = blockstatus();
+    my $clientip = &Apache::lonnet::get_requestor_ip($r);
+    my ($blocked,$blocktext) = &blockstatus($clientip);
     if ($blocked) {
         $newstuff = $blocktext;
         $headarg =  {'only_body' => 1,};
@@ -223,9 +223,11 @@ sub get_seeid_status {
 }
 
 sub blockstatus {
+    my ($clientip) = @_;
     my ($blocked,$output);
     my %setters;
-    my ($startblock,$endblock) = &Apache::loncommon::blockcheck(\%setters,'chat');
+    my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) =
+        &Apache::loncommon::blockcheck(\%setters,'chat',$clientip);
     if ($startblock && $endblock) {
         $blocked = 1;
         my $endblocktime = &Apache::lonlocal::locallocaltime($endblock);
@@ -238,9 +240,21 @@ sub blockstatus {
                 my ($openblock,$closeblock) = @{$setters{$course}{times}[$i]};
                 $openblock = &Apache::lonlocal::locallocaltime($openblock);
                 $closeblock= &Apache::lonlocal::locallocaltime($closeblock);
-                $output .= &mt('Block for [_1] starts: [_2], ends [_3], set by: [_4]<br />',$courseinfo{'description'},$openblock,$closeblock,$fullname);
+                $output .= &mt('Block for [_1] starts: [_2], ends [_3], set by: [_4]',$courseinfo{'description'},$openblock,$closeblock,$fullname).'<br />';
             }
         }
+    } elsif ($by_ip) {
+        $blocked = 1;
+        my $showdom = &Apache::lonnet::domain($blockdom);
+        if ($showdom eq '') {
+            $showdom = $blockdom;
+        }
+        $output = &mt('Chat Room is unavailable from your current IP address: [_1], '
+                     .'because communication is blocked for certain IP address(es).'
+                     ,$clientip).
+                  '<br />'.
+                  &mt('This restriction was set by an administrator in the [_1] LON-CAPA domain.'
+                     ,$showdom);
     }
     return ($blocked,$output);
 }