[LON-CAPA-cvs] cvs: loncom /interface lonannounce.pm lonchat.pm lonchatfetch.pm lonparmset.pm mydesk.tab

www lon-capa-cvs@mail.lon-capa.org
Thu, 08 Aug 2002 13:44:17 -0000


This is a MIME encoded message

--www1028814257
Content-Type: text/plain

www		Thu Aug  8 09:44:17 2002 EDT

  Added files:                 
    /loncom/interface	lonchatfetch.pm 

  Modified files:              
    /loncom/interface	lonannounce.pm lonchat.pm lonparmset.pm 
                     	mydesk.tab 
  Log:
  Routines for chat, explanation of option in parmset, chat function kind of
  works
  
  
--www1028814257
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20020808094417.txt"

Index: loncom/interface/lonannounce.pm
diff -u loncom/interface/lonannounce.pm:1.2 loncom/interface/lonannounce.pm:1.3
--- loncom/interface/lonannounce.pm:1.2	Wed Jul 24 16:40:58 2002
+++ loncom/interface/lonannounce.pm	Thu Aug  8 09:44:17 2002
@@ -1,20 +1,81 @@
 # The LearningOnline Network
 # Announce
 #
-# (Internal Server Error Handler
+# $Id: lonannounce.pm,v 1.3 2002/08/08 13:44:17 www Exp $
 #
-# (Login Screen
-# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,
-# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer)
+# Copyright Michigan State University Board of Trustees
 #
-# 3/1/1 Gerd Kortemeyer)
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
 #
-# 3/1 Gerd Kortemeyer
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
 #
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
+
 package Apache::lonannounce;
 
 use strict;
 use Apache::Constants qw(:common);
+use Apache::loncommon;
+
+sub readcalendar {
+    my $courseid=shift;
+    my $coursenum=$ENV{'course.'.$courseid.'.num'};
+    my $coursedom=$ENV{'course.'.$courseid.'.domain'};
+    my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum);
+    my %returnhash=();
+    foreach (keys %thiscal) {
+        unless (($_=~/^error\:/) || ($thiscal{$_}=~/^error\:/)) {
+	   $returnhash{$courseid.'@'.$_}=$thiscal{$_};
+        }
+    }
+    return %returnhash;
+}
+
+sub emptycell {
+    return '<td bgcolor="#AAAAAA">&nbsp;</td>';
+}
+
+sub normalcell {
+    my ($day,$text)=@_;
+    return '<td><b>'.$day.'</b><br>'.$text.'</td>';
+}
+
+sub nextday {
+    my %th=@_;
+    $th{'day'}++;
+    return (&Apache::loncommon::maketime(%th),$th{'month'});
+}
+
+sub showday {
+    my ($tk,%allcal)=@_;
+    my %th=&Apache::loncommon::timehash($tk);
+    my ($nextday,$nextmonth)=&nextday(%th);
+    my $outp='';
+    foreach (keys %allcal) {
+	my ($course,$startdate,$enddate)=($_=~/^(\w+)\@(\d+)\_(\d+)$/);
+        print $course.' '.localtime($startdate).' '.localtime($enddate).
+              localtime($tk).' '.localtime($nextday).'<br>';
+        if (($startdate>$tk) && ($enddate<$nextday)) {
+	    $outp.='___&&&___'.$course.'@'.$allcal{$_};
+        }
+    }
+    return ($nextday,$nextmonth,&normalcell($th{'day'},$outp));
+}
 
 sub handler {
     my $r = shift;
@@ -22,18 +83,180 @@
     $r->send_http_header;
     return OK if $r->header_only;
 
-# --------------------------------------------------- Print login screen header
+# ---------------------------------------------------------- Get time right now
+    my $today=time;
+    my %todayhash=&Apache::loncommon::timehash($today);
+
+# ---------------------------------------------------------- Get month and year
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                            ['month','year']);
+# ----------------------------------------------------- Summarize all calendars
+    my %allcal=();
+    foreach (&Apache::loncommon::findallcourses()) {
+	%allcal=(%allcal,&readcalendar($_));
+    }
+# --------------------------------------------------- Decide what month to show
+    my $year=$todayhash{'year'};
+    if ($ENV{'form.year'}) { $year=$ENV{'form.year'}; }
+    my $month=$todayhash{'month'};
+    if ($ENV{'form.month'}) { $month=$ENV{'form.month'}; }
+# --------------------------------------------- Find out first day of the month
+
+    my %firstday=&Apache::loncommon::timehash(
+       &Apache::loncommon::maketime( 'day' => 1, 'month'=> $month,
+                                     'year' => $year, 'hours' => 0,
+				     'minutes' => 0, 'seconds' => 0,
+                                     'dlsav' => $todayhash{'dlsav'} ));
+    my $weekday=$firstday{'weekday'};
+# ------------------------------------------------------------ Print the screen
     $r->print(<<ENDDOCUMENT);
 <html>
 <head>
 <title>The LearningOnline Network with CAPA</title>
+<script>
+    function pclose() {
+        parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
+                 "height=350,width=350,scrollbars=no,menubar=no");
+        parmwin.close();
+    }
+
+    function pjump(type,dis,value,marker,ret,call) {
+        parmwin=window.open("/adm/rat/parameter.html?type="+escape(type)
+                 +"&value="+escape(value)+"&marker="+escape(marker)
+                 +"&return="+escape(ret)
+                 +"&call="+escape(call)+"&name="+escape(dis),"LONCAPAparms",
+                 "height=350,width=350,scrollbars=no,menubar=no");
+
+    }
+
+    function dateset() {
+        if (document.anno.pres_marker.value=='end') {
+           document.anno.enddate.value=
+	       document.anno.pres_value.value;
+        }
+        if (document.anno.pres_marker.value=='start') {
+           document.anno.startdate.value=
+	       document.anno.pres_value.value;
+        }
+        pclose();
+    }
+
+    function trysubmit() {
+        if (document.anno.startdate.value=='') {
+	    alert("Announcements must have a starting date");
+            return '';
+        }
+        if (document.anno.enddate.value=='') {
+	    alert("Announcements must have a starting date");
+            return '';
+        }
+        if (document.anno.startdate.value>document.anno.enddate.value) {
+	    alert("Starting date is later than ending date");
+            return '';
+        }
+        document.anno.action.value="new";
+	document.anno.submit();
+    }
+
+    function removesub() {
+        document.anno.action.value="del";
+	document.anno.submit();
+    }
+</script>
 </head>
 <body bgcolor="#FFFFFF">
-<h1>Printout</h1>
-<img src="/adm/lonKaputt/lonconstruct.gif">
-</body>
-</html>
+<h1>Announcements</h1>
 ENDDOCUMENT
+
+# does this user have privileges to post, etc?
+    my $allowed=0;
+    if ($ENV{'request.course.id'}) {
+       $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
+    }
+
+    if ($allowed) {
+        my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+        my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+# ----------------------------------------------------- Store new submitted one
+        if ($ENV{'form.action'} eq 'new') {
+	    &Apache::lonnet::put('calendar',{ 
+		$ENV{'form.startdate'}.'_'.$ENV{'form.enddate'} => 
+		    $ENV{'form.msg'} },$coursedom,$coursenum);
+        }
+# ---------------------------------------------------------------- Remove items
+        if ($ENV{'form.action'} eq 'del') {
+	    my @delwhich=();
+            foreach (keys %ENV) {
+		if ($_=~/^form\.remove\_(.+)$/) {
+		    push(@delwhich,$1);
+                }
+            }
+            &Apache::lonnet::del('calendar',\@delwhich,$coursedom,$coursenum);
+        }
+# -------------------------------------------------------- Form to post new one
+        my %tomorrowhash=%todayhash;
+        $tomorrowhash{'day'}++;
+        my $tomorrow=&Apache::loncommon::maketime(%tomorrowhash);
+        
+	$r->print(<<ENDFORM);
+<form name="anno" method="post">
+<input type="hidden" value=''          name="action"      >
+<input type="hidden" value=''          name="pres_value"  >
+<input type="hidden" value=''          name="pres_type"   >
+<input type="hidden" value=''          name="pres_marker" >
+<input type="hidden" value='$today'    name="startdate"   >
+<input type="hidden" value='$tomorrow' name="enddate"     >
+<a 
+ href="javascript:pjump('date_start','Starting Date',document.anno.startdate.value,'start','anno.pres','dateset');"
+>Set Starting Date</a>
+<a 
+ href="javascript:pjump('date_end','Ending Date',document.anno.enddate.value,'end','anno.pres','dateset');"
+>Set Ending Date</a><p>
+<textarea name="msg" rows="4" cols="60">
+</textarea>
+<input type="button" onClick="trysubmit()" value="Post Announcement"><hr>
+<input type="button" onClick="removesub()" value="Remove Marked"><hr>
+ENDFORM
+    }
+    my ($pm,$py,$fm,$fy)=($month-1,$year,$month+1,$year);
+    if ($pm<1) { ($pm,$py)=(12,$year-1); }
+    if ($fm>12){ ($fm,$fy)=(1,$year+1); }
+    $r->print('<h1>'.('','January','February','March','April','May',
+		      'June','July','August','September','October',
+                      'November','December')[$month].' '.$year.'</h1>'.
+ '<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '.
+ '<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a><p>'.
+        '<table border="2" cols="7" rows="5"><tr><th>Sun</th><th>Mon</th>'.
+        '<th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th>');
+
+    my $tk=&Apache::loncommon::maketime(%firstday);
+    my $outp;
+    my $nm;
+
+# ---------------------------------------------------------------- Actual table
+    $r->print('<tr>');
+    for (my $i=0;$i<$weekday;$i++) { $r->print(&emptycell); }
+    for (my $i=$weekday;$i<=6;$i++) { 
+        ($tk,$nm,$outp)=&showday($tk,%allcal);
+        $r->print($outp);
+    }
+    $r->print('</tr>');
+
+    for (my $k=0;$k<=3;$k++) {
+        $r->print('<tr>');
+        for (my $i=0;$i<=6;$i++) {
+            ($tk,$nm,$outp)=&showday($tk,%allcal);
+            if ($month!=$nm) { $outp=&emptycell; }
+            $r->print($outp);
+        }
+        $r->print('</tr>');
+    }
+# ------------------------------------------------------------------- End table
+    if ($allowed) { $r->print('</form>'); }
+    $r->print('</table><p>'.
+ '<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '.
+ '<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a><p>'.
+ '</body></html>');
     return OK;
 } 
 
Index: loncom/interface/lonchat.pm
diff -u loncom/interface/lonchat.pm:1.2 loncom/interface/lonchat.pm:1.3
--- loncom/interface/lonchat.pm:1.2	Wed Jul 24 16:40:58 2002
+++ loncom/interface/lonchat.pm	Thu Aug  8 09:44:17 2002
@@ -1,16 +1,31 @@
 # The LearningOnline Network
 # Chat
 #
-# (Internal Server Error Handler
+# $Id: lonchat.pm,v 1.3 2002/08/08 13:44:17 www Exp $
 #
-# (Login Screen
-# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,
-# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer)
+# Copyright Michigan State University Board of Trustees
 #
-# 3/1/1 Gerd Kortemeyer)
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
 #
-# 3/1 Gerd Kortemeyer
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
 #
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
+
 package Apache::lonchat;
 
 use strict;
@@ -22,6 +37,9 @@
     $r->send_http_header;
     return OK if $r->header_only;
 
+    if ($ENV{'form.newentry'}) {
+	&Apache::lonnet::chatsend($ENV{'form.newchat'},$ENV{'form.anonymous'});
+    }
 # --------------------------------------------------- Print login screen header
     $r->print(<<ENDDOCUMENT);
 <html>
@@ -29,8 +47,11 @@
 <title>The LearningOnline Network with CAPA</title>
 </head>
 <body bgcolor="#FFFFFF">
-<h1>Printout</h1>
-<img src="/adm/lonKaputt/lonconstruct.gif">
+<form method="post">
+<input type="text" size="60" name="newchat">
+<input type="checkbox" name="anonymous">
+<input value="Post" name="newentry" type="submit">
+</form>
 </body>
 </html>
 ENDDOCUMENT
Index: loncom/interface/lonparmset.pm
diff -u loncom/interface/lonparmset.pm:1.55 loncom/interface/lonparmset.pm:1.56
--- loncom/interface/lonparmset.pm:1.55	Mon Jul 22 10:23:29 2002
+++ loncom/interface/lonparmset.pm	Thu Aug  8 09:44:17 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set parameters for assessments
 #
-# $Id: lonparmset.pm,v 1.55 2002/07/22 14:23:29 bowersj2 Exp $
+# $Id: lonparmset.pm,v 1.56 2002/08/08 13:44:17 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -757,9 +757,11 @@
              'pageseparators'  => '<b>Visibly Separate Items on Pages</b><br>'.
                                  '("<tt>yes</tt>" for visible separation)',
              'pch.roles.denied'=> '<b>Disallow Resource Discussion for '.
-                                  'Roles</b> ' . 
-	   Apache::loncommon::help_open_topic("Course_Disable_Discussion")
-	                          ,
+                                  'Roles</b><br>"<tt>st</tt>": '.
+                                  'student, "<tt>ta</tt>": '.
+                                  'TA, "<tt>in</tt>": '.
+                                  'instructor;<br><tt>role,role,...</tt>) '.
+	       Apache::loncommon::help_open_topic("Course_Disable_Discussion"),
              'pch.users.denied' => 
                           '<b>Disallow Resource Discussion for Users</b><br>'.
                                  '(<tt>user:domain,user:domain,...</tt>)',
Index: loncom/interface/mydesk.tab
diff -u loncom/interface/mydesk.tab:1.22 loncom/interface/mydesk.tab:1.23
--- loncom/interface/mydesk.tab:1.22	Tue Jul 30 16:26:48 2002
+++ loncom/interface/mydesk.tab	Thu Aug  8 09:44:17 2002
@@ -8,47 +8,47 @@
 # pro = author   prt = rca and user is a co-author
 # pro = author   prt = any 
 # pro = p???     allowed if the user has the permissions given in ???
-1:1:smp:any:courses.gif:choose:course:go('/adm/roles');
-1:1:smp:rst:courses.gif:switch:course:go('/adm/roles');
-1:1:adv:any:roles.gif:switch:role:go('/adm/roles');
-1:1:adv:rcm:roles.gif:choose:role:go('/adm/roles');
-1:2:any:any:com.gif:commu-:nication:go('/adm/communicate');
+1:1:smp:any:courses.gif:choose:course:go('/adm/roles');:Choose Course
+1:1:smp:rst:courses.gif:switch:course:go('/adm/roles');:Switch Course
+1:1:adv:any:roles.gif:switch:role:go('/adm/roles');:Switch Role
+1:1:adv:rcm:roles.gif:choose:role:go('/adm/roles');:Choose Role
+1:2:any:any:com.gif:commu-:nication:go('/adm/communicate');:Communicate/Messages
 2:1:clear
 2:2:clear
-2:2:pbre:$crs:nav.gif:navigate:contents:gopost('/adm/navmaps',currentURL);
+2:2:pbre:$crs:nav.gif:navigate:contents:gopost('/adm/navmaps',currentURL);:Navigate Contents
 2:3:clear
 3:1:clear
 4:1:clear
-4:1:pbre:$crs:grds.gif:my:grades:go('/adm/studentcalc');
-4:1:pvgr:$crs:sprs.gif:course:grades:go('/adm/classcalc');
+4:1:pbre:$crs:grds.gif:my:grades:go('/adm/studentcalc');:Check My Grades
+4:1:pvgr:$crs:sprs.gif:course:grades:go('/adm/classcalc');:Check Course Grades
 4:2:clear
-4:2:pvgr:$crs:chrt.gif:course:chart:gopost('/adm/statistics','Student Assessment');
+4:2:pvgr:$crs:chrt.gif:course:chart:gopost('/adm/statistics','Student Assessment');:Course Assessment Chart
 4:3:clear
-4:3:pvgr:$crs:stat.gif:course:stats:go('/adm/statistics');
+4:3:pvgr:$crs:stat.gif:course:stats:go('/adm/statistics');:Course Assessment Statistics
 5:1:clear
-5:1:pcst:$crs:enrl.gif:course:enroll:go('/adm/dropadd');
+5:1:pcst:$crs:enrl.gif:course:enroll:go('/adm/dropadd');:Drop/Add Students
 5:2:clear
-5:2:pcst:$crs:cprv.gif:user:roles:go('/adm/createuser');
-5:2:pcca:$udom:cprv.gif:user:roles:go('/adm/createuser');
-5:2:pmau:$udom:cprv.gif:user:roles:go('/adm/createuser');
+5:2:pcst:$crs:cprv.gif:user:roles:go('/adm/createuser');:Change User Roles
+5:2:pcca:$udom:cprv.gif:user:roles:go('/adm/createuser');:Change User Roles
+5:2:pmau:$udom:cprv.gif:user:roles:go('/adm/createuser');:Change User Roles
 5:3:clear
-5:3:pccc:$udom:ccrs.gif:create:course:go('/adm/createcourse');
-5:3:popa:$crs:parm.gif:course:parms:go('/adm/parmset');
+5:3:pccc:$udom:ccrs.gif:create:course:go('/adm/createcourse');:Create New Course
+5:3:popa:$crs:parm.gif:course:parms:go('/adm/parmset');:Set Parameters/Deadlines/etc
 6:1:clear
-6:1:author:any:cstr.gif:con-:struct:cstrgo(currentURL,'/priv/$uname/');
-6:1:author:rca:cstr.gif:co con-:struct:cstrgo(currentURL,'/priv/$uname/');
+6:1:author:any:cstr.gif:con-:struct:cstrgo(currentURL,'/priv/$uname/');:Enter Construction Space
+6:1:author:rca:cstr.gif:co con-:struct:cstrgo(currentURL,'/priv/$uname/');:Enter Co-Construction Space
 6:2:clear
-6:2:author:any:res.gif:resource:space:go('/res/$udom/$uname/?launch=1');
-6:2:author:rca:res.gif:co res:space:go('/res/$udom/$uname/?launch=1');
+6:2:author:any:res.gif:resource:space:go('/res/$udom/$uname/?launch=1');:Browse Published Resources
+6:2:author:rca:res.gif:co res:space:go('/res/$udom/$uname/?launch=1');:Browse Published Resources
 6:3:clear
 7:2:clear
-7:2:adv:rcm:egrd.gif:enter:grades:go('/adm/grades');
+7:2:adv:rcm:egrd.gif:enter:grades:go('/adm/grades');:Enter Grades
 10:1:clear
-10:1:pbre:$crs:anno.gif:calendar:announce:go('/adm/announcements');
+10:1:any:any:anno.gif:calendar:announce:go('/adm/announcements');:Announcements and Calendar
 10:2:clear
-10:2:pbre:$crs:docs.gif:course:docs:go('/adm/coursedocs');
+10:2:pbre:$crs:docs.gif:course:docs:go('/adm/coursedocs');:Course Documents
 10:3:clear
-10:3:pbre:$crs:bchat.gif:course:chat:go('/adm/chat');
-11:1:any:any:src.gif:search:library:go('/adm/searchcat');
-11:2:any:any:pref.gif:prefer-:ences:go('/adm/preferences');
-11:3:any:any:logout.gif:exit::go('/adm/logout');
+10:3:pbre:$crs:bchat.gif:course:chat:go('/res/adm/pages/chatroom.html');:Chat
+11:1:any:any:src.gif:search:library:go('/adm/searchcat');:Search Published Resources
+11:2:any:any:pref.gif:prefer-:ences:go('/adm/preferences');:Set Preferences
+11:3:any:any:logout.gif:exit::go('/adm/logout');:Exit

Index: loncom/interface/lonchatfetch.pm
+++ loncom/interface/lonchatfetch.pm
# The LearningOnline Network
# Chat Fetching
#
# $Id: lonchatfetch.pm,v 1.1 2002/08/08 13:44:17 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#

package Apache::lonchatfetch;

use strict;
use Apache::Constants qw(:common);
use Apache::lontexconvert;

sub handler {
    my $r = shift;
    $r->content_type('text/html');
    $r->send_http_header;
    return OK if $r->header_only;

# ------------------------------------------------------------ retrieve entries

    my $cnum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'};
    my $cdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
    my $chome=$ENV{'course.'.$ENV{'request.course.id'}.'.home'};
    my @entries=split(/\:/,
                       &Apache::lonnet::reply("chatretr:$cdom:$cnum",$chome));
    my ($lastid)=($entries[$#entries]=~/^(\w+)/);
    my ($thentime,$idnum)=split(/\_/,$lastid);
# -------------------------------------------------------- see which ones apply
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['lastid']);
    my $include=0;
    my $newstuff='';
    unless ($ENV{'form.lastid'}) { $include=1; }
    foreach (@entries) {
	if ($include) {
            my ($id,$msg)=split(/\:/,&Apache::lonnet::unescape($_));
            chomp($msg);
            my ($msgtime,$msgnum)=split(/\_/,$id);
            my ($sdom,$snum,$anon,$contrib)=split(/\:/,
                                              &Apache::lonnet::unescape($msg));
            $contrib=&Apache::lonnet::unescape($contrib);
            $contrib=~s/\n/\<br \/\>/g;
	    $contrib=&Apache::lontexconvert::msgtexconverted($contrib);
            $contrib=~s/\n/ /g;
            $contrib=~s/\'/\&\#39\;/g;
            my $sender=$snum.' at '.$sdom;
            if ($anon) {
            }
	    $newstuff.='<b>'.$sender.'</b> ('.localtime($msgtime).'): '.
                       $contrib."<br>";
        } else {
            $_=~/^(\w+)/;
            if ($1 eq $ENV{'form.lastid'}) { $include=1; }
        }
    }
    $r->print(<<ENDDOCUMENT);
<html>
<head>
<title>The LearningOnline Network with CAPA</title>
  <meta HTTP-EQUIV="Refresh" CONTENT="5; url=/adm/chatfetch?lastid=$lastid">
</head>
<body bgcolor="#FFFFFF">
<script>
parent.chatout.document.writeln('$newstuff');
</script>
</body>
</html>
ENDDOCUMENT
    return OK;
} 

1;
__END__

--www1028814257--