--- loncom/interface/lonannounce.pm 2003/05/23 16:14:33 1.12
+++ loncom/interface/lonannounce.pm 2003/09/03 01:53:46 1.19
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Announce
#
-# $Id: lonannounce.pm,v 1.12 2003/05/23 16:14:33 www Exp $
+# $Id: lonannounce.pm,v 1.19 2003/09/03 01:53:46 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -32,8 +32,10 @@ use strict;
use Apache::Constants qw(:common);
use Apache::loncommon;
use Apache::lonhtmlcommon();
+use HTML::Entities();
my %todayhash;
+my %showedcheck;
sub editfield {
my ($r,$start,$end,$text)=@_;
@@ -83,11 +85,16 @@ sub normalcell {
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'})) {
+ if ((&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))
+ && (!$showedcheck{$start.'_'.$end})
+ && ($ENV{'form.pickdate'} ne 'yes')) {
$output.=' ';
+ $showedcheck{$start.'_'.$end}=1;
}
}
+ $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');
+ $fullmsg=~s/&/\\&/g;
$output.=''.
substr($msg,0,20).'... ';
}
@@ -96,7 +103,7 @@ sub normalcell {
((($day eq $todayhash{'day'}) &&
($month eq $todayhash{'month'}) &&
($year eq $todayhash{'year'}))?' bgcolor="#FFFF00"':'').
- '>'.$day.' '.$output.'';
+ '>'.&tfont(''.&picklink($day,$day,$month,$year).' '.$output).'';
}
sub plaincell {
@@ -108,6 +115,8 @@ sub plaincell {
my $msg=join('@',@msg);
my $fullmsg=$ENV{'course.'.$courseid.'.description'}.
', '.localtime($start).' - '.localtime($end).': '.$msg;
+ $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');
+ $fullmsg=~s/&/\\&/g;
$output.=''.
substr($msg,0,40).'... ';
}
@@ -163,6 +172,43 @@ sub showday {
}
}
+sub tfont {
+ my $text=shift;
+ if ($ENV{'form.pickdate'} eq 'yes') {
+ return ''.$text.' ';
+ } else {
+ return $text;
+ }
+}
+
+sub picklink {
+ my ($text,$day,$month,$year)=@_;
+ if ($ENV{'form.pickdate'} eq 'yes') {
+ return ''.
+ $text.' ';
+ } else {
+ return $text;
+ }
+}
+
+sub dialscript {
+ return (<
+function dialin(day,month,year) {
+ opener.document.$ENV{'form.formname'}.$ENV{'form.element'}\_year.value=year;
+ var slct=opener.document.$ENV{'form.formname'}.$ENV{'form.element'}\_month;
+ var i;
+ for (i=0;i
+ENDDIA
+}
+
sub handler {
my $r = shift;
$r->content_type('text/html');
@@ -172,15 +218,22 @@ sub handler {
# ---------------------------------------------------------- Get time right now
my $today=time;
%todayhash=&Apache::loncommon::timehash($today);
-
+# ----------------------------------------------------------------- Check marks
+ %showedcheck=();
+ undef %showedcheck;
# ---------------------------------------------------------- Get month and year
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['month','year']);
+ ['month','year','pickdate','formname','element']);
# --------------------------------------------------- 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'}; }
+
+# ---------------------------------------------- See if we are in pickdate mode
+ my $pickdatemode=($ENV{'form.pickdate'} eq 'yes');
+ my $pickinfo='&pickdate=yes&formname='.$ENV{'form.formname'}.
+ '&element='.$ENV{'form.element'};
# --------------------------------------------- Find out first day of the month
my %firstday=&Apache::loncommon::timehash(
@@ -209,13 +262,63 @@ sub handler {
ENDDOCUMENT
- $r->print(&Apache::loncommon::bodytag("Announcements and Calendar"));
+ if ($pickdatemode) {
+# no big header in pickdate mode
+ $r->print(&Apache::loncommon::bodytag("Pick a Date",'','',1).
+ &dialscript().
+ '');
+ } else {
+ $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'});
}
-
+# does this user have privileges to post to servers?
+ my $serverpost=0;
+ if ($ENV{'request.role.domain'}) {
+ $serverpost=&Apache::lonnet::allowed('psa',
+ $ENV{'request.role.domain'});
+ } else {
+ $serverpost=&Apache::lonnet::allowed('psa','/');
+ }
+# -------------------------------- BUT: do no fancy stuff when in pickdate mode
+ if ($pickdatemode) {
+ $serverpost=0;
+ $allowed=0;
+ }
+# ------------------------------------------------------------ Process commands
+ if ($serverpost) {
+ if ($ENV{'form.serveraction'}) {
+ foreach (keys %ENV) {
+ if ($_=~/^form\.postto\_(\w+)/) {
+ $r->print(
+ ' Posting '.$1.': '.&Apache::lonnet::postannounce
+ ($1,$ENV{'form.serverannnounce'}));
+ }
+ }
+ }
+ $r->print(<
+Post Server Announcements
+Post announcements to the system login and roles screen
+(leave blank to delete announcement)
+
+Check machines:
+SERVERANNOUNCE
+# list servers
+ foreach (sort keys %Apache::lonnet::hostname) {
+ if (&Apache::lonnet::allowed('psa',$Apache::lonnet::hostdom{$_})) {
+ $r->print (' '.
+ $_.' '.$Apache::lonnet::hostname{$_}.' '.
+ 'current ');
+ }
+ }
+ $r->print(
+ ' ');
+ }
if ($allowed) {
my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'};
my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
@@ -263,15 +366,40 @@ ENDDOCUMENT
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(''.('','January','February','March','April','May',
'June','July','August','September','October',
- 'November','December')[$month].' '.$year.' '.
- 'Previous Month '.
- 'Next Month '.
+ 'November','December')[$month].' '.$year.'');
+# Reached the end of times, give up
+ if (($year<1970) || ($year>2037)) {
+ $r->print('No calendar available for this date. '.
+ 'Current Month