--- loncom/interface/lonchatfetch.pm 2006/05/18 01:08:50 1.24 +++ loncom/interface/lonchatfetch.pm 2010/11/18 23:18:39 1.38 @@ -1,7 +1,7 @@ # The LearningOnline Network # Chat Fetching # -# $Id: lonchatfetch.pm,v 1.24 2006/05/18 01:08:50 raeburn Exp $ +# $Id: lonchatfetch.pm,v 1.38 2010/11/18 23:18:39 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,6 +34,10 @@ use Apache::lontexconvert; use Apache::loncommon; use Apache::lonnet; use Apache::longroup; +use Apache::lonlocal; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + sub handler { my $r = shift; @@ -45,8 +49,10 @@ sub handler { my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; if (defined($env{'form.group'})) { $group = $env{'form.group'}; - if (! &Apache::lonnet::allowed('pgc',$env{'request.course.id'}.'/'. - $group) ) { + if ((! &Apache::lonnet::allowed('pgc',$env{'request.course.id'}.'/'. + $group)) && + (! &Apache::lonnet::allowed('vcg',$env{'request.course.id'}. + ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')))) { return HTTP_NOT_ACCEPTABLE; } my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$group); @@ -54,22 +60,15 @@ sub handler { my %group_info = &Apache::longroup::get_group_settings($curr_groups{$group}); $grouptitle = - ''.&Apache::lonnet::unescape($group_info{description}). + ''.&unescape($group_info{description}). '
'; } - } 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; @@ -84,8 +83,8 @@ sub handler { $chome)); # Figure out what the last valid entry-id is my ($lastid,$thentime,$idnum); - foreach (@entries) { - $_=~/^(\w+)/; + foreach my $entry (@entries) { + $entry =~/^(\w+)/; if ($1 ne 'active_participant') { $lastid=$1; ($thentime,$idnum)=split(/\_/,$lastid); @@ -95,36 +94,43 @@ sub handler { my $seeid = &get_seeid_status(); # -------------------------------------------------------- see which ones apply my $include=0; + my $header; my $newstuff=''; my $bottomid=''; unless ($env{'form.lastid'}) { $include=1; - $newstuff .= + $header = &Apache::loncommon::start_page(undef,undef, {'only_body' => 1, 'bgcolor' => '#FFFFFF', 'js_ready' => 1,}); } my @participants=(); - foreach (@entries) { - my ($id,$msg,$udom)=split(/\:/,&Apache::lonnet::unescape($_)); + foreach my $entry (@entries) { + my ($id,$msg,$udom)=split(/\:/,&unescape($entry)); if ($id eq 'active_participant') { chomp($udom); my $participant= &Apache::loncommon::nickname($msg,$udom); - unless ($participant=~/\w/) { $participant=$msg.'@'.$udom; } + unless ($participant=~/\w/) { $participant=$msg.':'.$udom; } $participants[$#participants+1]=$participant; } elsif ($include) { chomp($msg); my ($msgtime,$msgnum)=split(/\_/,$id); my ($sdom,$snum,$anon,$contrib)=split(/\:/, - &Apache::lonnet::unescape($msg)); - $contrib=&Apache::lonnet::unescape($contrib); + &unescape($msg)); + $contrib=&unescape($contrib); &Apache::lonfeedback::newline_to_br(\$contrib); ($contrib,my $errors)=&Apache::lontexconvert::msgtexconverted($contrib); - if ($errors) { $contrib.="[Message not fully displayed due to incorrect embedded TeX]"; } + if ($errors) { + $contrib.=' ' + .&mt('(Message not fully displayed due to incorrect embedded TeX.)') + .''; + } if ($errors && $snum eq $env{'user.name'} && $sdom eq $env{'user.domain'} ) { - $contrib.="
[TeX error message: $errors]"; + $contrib.='
' + .&mt('TeX error message: [_1]',$errors) + .''; } $contrib=~s/\n/ /g; $contrib=~s/\'/\&\#39\;/g; @@ -135,14 +141,14 @@ sub handler { if (($nick) && ($nick ne $sender)) { $sender.=' '.$nick; } - unless ($sender) { $sender=$snum.'@'.$sdom; } + unless ($sender) { $sender=$snum.':'.$sdom; } if ($anon) { $sender.=' [Anon]' }; } elsif (!$anon) { $sender=&Apache::loncommon::nickname($snum,$sdom); - unless ($sender) { $sender=$snum.'@'.$sdom; } + unless ($sender) { $sender=$snum.':'.$sdom; } } else { $sender=&Apache::loncommon::screenname($snum,$sdom); - unless ($sender) { $sender="Anonymous"; } + unless ($sender) { $sender=&mt("Anonymous"); } } $sender=~s/\'/\&\#39\;/g; my $color=$sender; @@ -156,29 +162,41 @@ sub handler { $color=substr($color,0,6); my $timestamp=localtime($msgtime); my ($mhour,$mmin,$msec)=($timestamp=~/(\d\d)\:(\d\d)\:(\d\d)/); - $newstuff.=''. + $newstuff.=''. $sender.' ('.$mhour.':'.$mmin.':'.$msec.'): '. - $contrib."
"; - $bottomid=$id; + $contrib."
"; + $bottomid='LC_'.$id; } else { - $_=~/^(\w+)/; + $entry=~/^(\w+)/; if ($1 eq $env{'form.lastid'}) { $include=1; } } } my $participant_output=join('
',sort @participants); my $refresh_cmd = "/adm/chatfetch?lastid=$lastid"; if (defined($group)) { - $refresh_cmd .= "&group=$group"; + $refresh_cmd .= "&group=$group"; + } + my $headarg; + my ($blocked,$blocktext) = blockstatus(); + if ($blocked) { + $newstuff = $blocktext; + $headarg = {'only_body' => 1,}; + + $r->print(< + parent.location.href="/adm/blockingstatus/?activity=chat" + +ENDSCRIPT + } else { + $headarg = {'redirect' => [5,$refresh_cmd,1], + 'only_body' => 1,}; } - my $start_page = - &Apache::loncommon::start_page('Chat',undef, - {'redirect' => [5,$refresh_cmd], - 'only_body' => 1,}); + my $start_page = &Apache::loncommon::start_page('Chat Room',undef,$headarg); my $end_page = &Apache::loncommon::end_page(); $r->print(< -parent.chatout.document.writeln('$newstuff'); +parent.chatout.document.writeln('$header$newstuff'); parent.chatout.scroll(0,10000000); $grouptitle @@ -203,5 +221,28 @@ sub get_seeid_status { return $seeid; } +sub blockstatus { + my ($blocked,$output); + my %setters; + my ($startblock,$endblock) = &Apache::loncommon::blockcheck(\%setters,'chat'); + if ($startblock && $endblock) { + $blocked = 1; + my $endblocktime = &Apache::lonlocal::locallocaltime($endblock); + $output .= &mt('Chat Room will be unavailable to you until [_1] because communication is blocked in one or more of your courses:',$endblocktime).'

'; + 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{$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]
',$courseinfo{'description'},$openblock,$closeblock,$fullname); + } + } + } + return ($blocked,$output); +} + 1; __END__ 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.