version 1.2, 2002/07/24 20:40:58
|
version 1.14, 2003/06/18 15:11:20
|
Line 1
|
Line 1
|
# The LearningOnline Network |
# The LearningOnline Network |
# Announce |
# Announce |
# |
# |
# (Internal Server Error Handler |
# $Id$ |
# |
# |
# (Login Screen |
# Copyright Michigan State University Board of Trustees |
# 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) |
|
# |
# |
# 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; |
package Apache::lonannounce; |
|
|
use strict; |
use strict; |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
|
use Apache::loncommon; |
|
use Apache::lonhtmlcommon(); |
|
|
|
my %todayhash; |
|
|
|
sub editfield { |
|
my ($r,$start,$end,$text)=@_; |
|
# Deal with date forms |
|
my $startdateform = &Apache::lonhtmlcommon::date_setter('anno', |
|
'startdate', |
|
$start); |
|
my $enddateform = &Apache::lonhtmlcommon::date_setter('anno', |
|
'enddate', |
|
$end); |
|
|
|
$r->print(<<ENDFORM); |
|
<form name="anno" method="post"> |
|
<input type="hidden" value='' name="action" > |
|
<table><tr><td>Starting date:</td><td>$startdateform</td></tr> |
|
<tr><td>Ending date:</td><td>$enddateform</td></tr></table> |
|
<textarea name="msg" rows="4" cols="60">$text</textarea> |
|
<input type="button" onClick="trysubmit()" value="Post Announcement"><hr> |
|
ENDFORM |
|
} |
|
|
|
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"> </td>'; |
|
} |
|
|
|
sub normalcell { |
|
my ($day,$month,$year,$text)=@_; |
|
my $output=''; |
|
foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { |
|
if ($_) { |
|
my ($courseid,$start,$end,@msg)=split(/\@/,$_); |
|
my $msg=join('@',@msg); |
|
my $fullmsg=$ENV{'course.'.$courseid.'.description'}. |
|
', '.localtime($start).' - '.localtime($end).': '.$msg; |
|
if ($courseid eq $ENV{'request.course.id'}) { |
|
if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { |
|
$output.='<input type="checkbox" name="remove_'.$start.'_'. |
|
$end.'">'; |
|
} |
|
} |
|
$output.='<a href="javascript:alert('."'$fullmsg'".')">'. |
|
substr($msg,0,20).'...</a><br />'; |
|
} |
|
} |
|
return '<td'. |
|
((($day eq $todayhash{'day'}) && |
|
($month eq $todayhash{'month'}) && |
|
($year eq $todayhash{'year'}))?' bgcolor="#FFFF00"':''). |
|
'><b>'.$day.'</b><br>'.$output.'</td>'; |
|
} |
|
|
|
sub plaincell { |
|
my ($text)=@_; |
|
my $output=''; |
|
foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { |
|
if ($_) { |
|
my ($courseid,$start,$end,@msg)=split(/\@/,$_); |
|
my $msg=join('@',@msg); |
|
my $fullmsg=$ENV{'course.'.$courseid.'.description'}. |
|
', '.localtime($start).' - '.localtime($end).': '.$msg; |
|
$output.='<a href="javascript:alert('."'$fullmsg'".')">'. |
|
substr($msg,0,40).'...</a><br />'; |
|
} |
|
} |
|
return $output; |
|
} |
|
|
|
sub listcell { |
|
my ($text)=@_; |
|
my $output=''; |
|
foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { |
|
if ($_) { |
|
my ($courseid,$start,$end,@msg)=split(/\@/,$_); |
|
my $msg=join('@',@msg); |
|
my $fullmsg=localtime($start).' to '.localtime($end).':<br /><b>'. |
|
$msg.'</b>'; |
|
$output.='<li>'.$fullmsg.'</li>'; |
|
} |
|
} |
|
return $output; |
|
} |
|
|
|
sub nextday { |
|
my %th=@_; |
|
$th{'day'}++; |
|
return (&Apache::loncommon::maketime(%th),$th{'month'}); |
|
} |
|
|
|
sub showday { |
|
my ($tk,$mode,%allcal)=@_; |
|
my %th=&Apache::loncommon::timehash($tk); |
|
my ($nextday,$nextmonth)=&nextday(%th); |
|
my $outp=''; |
|
my $oneday=24*3600; |
|
foreach (keys %allcal) { |
|
my ($course,$startdate,$enddate)=($_=~/^(\w+)\@(\d+)\_(\d+)$/); |
|
if (($startdate<$nextday) && ($enddate>$tk)) { |
|
$outp.='___&&&___'.$course.'@'.$startdate.'@'.$enddate.'@'. |
|
$allcal{$_}; |
|
} |
|
} |
|
unless ($mode) { |
|
return ($nextday,$nextmonth,&normalcell( |
|
$th{'day'},$th{'month'},$th{'year'},$outp)); |
|
} elsif ($outp) { |
|
if ($mode==1) { |
|
return '<br />'.&plaincell($outp); |
|
} else { |
|
return '<ul>'.&listcell($outp).'</ul>'; |
|
} |
|
} else { |
|
return ''; |
|
} |
|
} |
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 22 sub handler {
|
Line 169 sub handler {
|
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
# --------------------------------------------------- Print login screen header |
# ---------------------------------------------------------- Get time right now |
|
my $today=time; |
|
%todayhash=&Apache::loncommon::timehash($today); |
|
|
|
# ---------------------------------------------------------- Get month and year |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['month','year']); |
|
# --------------------------------------------------- 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); |
$r->print(<<ENDDOCUMENT); |
<html> |
<html> |
<head> |
<head> |
<title>The LearningOnline Network with CAPA</title> |
<title>The LearningOnline Network with CAPA</title> |
|
<script> |
|
|
|
function trysubmit() { |
|
document.anno.action.value="new"; |
|
document.anno.submit(); |
|
} |
|
|
|
function removesub() { |
|
document.anno.action.value="del"; |
|
document.anno.submit(); |
|
} |
|
</script> |
</head> |
</head> |
<body bgcolor="#FFFFFF"> |
|
<h1>Printout</h1> |
|
<img src="/adm/lonKaputt/lonconstruct.gif"> |
|
</body> |
|
</html> |
|
ENDDOCUMENT |
ENDDOCUMENT |
|
$r->print(&Apache::loncommon::bodytag("Announcements and Calendar")); |
|
# 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') { |
|
my $startdate = |
|
&Apache::lonhtmlcommon::get_date_from_form('startdate'); |
|
my $enddate = |
|
&Apache::lonhtmlcommon::get_date_from_form('enddate'); |
|
unless ($startdate=~/^\d+$/) { $startdate=time; } |
|
unless ($enddate=~/^\d+$/) { $enddate=$startdate+1; } |
|
if ($startdate>$enddate) { |
|
my $buffer=$startdate; |
|
$startdate=$enddate; |
|
$enddate=$buffer; |
|
} |
|
&Apache::lonnet::put('calendar',{ |
|
$startdate.'_'.$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); |
|
|
|
&editfield($r,$today,$tomorrow,''); |
|
} |
|
# ----------------------------------------------------- Summarize all calendars |
|
my %allcal=(); |
|
foreach (&Apache::loncommon::findallcourses()) { |
|
%allcal=(%allcal,&readcalendar($_)); |
|
} |
|
|
|
# ------------------------------- Initialize table and forward backward buttons |
|
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>'); |
|
# Reached the end of times, give up |
|
if (($year<1970) || ($year>2037)) { |
|
$r->print('<h3>No calendar available for this date.</h3>'. |
|
'<a href="/adm/announcements?month='.$todayhash{'month'}. |
|
'&year='.$todayhash{'year'}.'">Current Month</a></body></html>'); |
|
return OK; |
|
} |
|
$r->print( |
|
'<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '. |
|
'<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a>'. |
|
' <a href="/adm/announcements?month='.$todayhash{'month'}. |
|
'&year='.$todayhash{'year'}.'">Current 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></tr>'); |
|
|
|
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,0,%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,0,%allcal); |
|
if ($month!=$nm) { $outp=&emptycell; } |
|
$r->print($outp); |
|
} |
|
$r->print('</tr>'); |
|
} |
|
# ------------------------------------------------------------------- End table |
|
$r->print('</table>'); |
|
if ($allowed) { $r->print('<input type="button" onClick="removesub()" value="Remove Checked Entries"></form>'); } |
|
$r->print('<p>'. |
|
'<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '. |
|
'<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a>'. |
|
' <a href="/adm/announcements?month='.$todayhash{'month'}. |
|
'&year='.$todayhash{'year'}.'">Current Month</a></p>'. |
|
'</body></html>'); |
return OK; |
return OK; |
} |
} |
|
|