Annotation of loncom/interface/lonannounce.pm, revision 1.3
1.1 www 1: # The LearningOnline Network
1.2 www 2: # Announce
1.1 www 3: #
1.3 ! www 4: # $Id: $
1.1 www 5: #
1.3 ! www 6: # Copyright Michigan State University Board of Trustees
1.1 www 7: #
1.3 ! www 8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
1.1 www 9: #
1.3 ! www 10: # LON-CAPA is free software; you can redistribute it and/or modify
! 11: # it under the terms of the GNU General Public License as published by
! 12: # the Free Software Foundation; either version 2 of the License, or
! 13: # (at your option) any later version.
1.1 www 14: #
1.3 ! www 15: # LON-CAPA is distributed in the hope that it will be useful,
! 16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 18: # GNU General Public License for more details.
! 19: #
! 20: # You should have received a copy of the GNU General Public License
! 21: # along with LON-CAPA; if not, write to the Free Software
! 22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! 23: #
! 24: # /home/httpd/html/adm/gpl.txt
! 25: #
! 26: # http://www.lon-capa.org/
! 27: #
! 28:
1.2 www 29: package Apache::lonannounce;
1.1 www 30:
31: use strict;
32: use Apache::Constants qw(:common);
1.3 ! www 33: use Apache::loncommon;
! 34:
! 35: sub readcalendar {
! 36: my $courseid=shift;
! 37: my $coursenum=$ENV{'course.'.$courseid.'.num'};
! 38: my $coursedom=$ENV{'course.'.$courseid.'.domain'};
! 39: my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum);
! 40: my %returnhash=();
! 41: foreach (keys %thiscal) {
! 42: unless (($_=~/^error\:/) || ($thiscal{$_}=~/^error\:/)) {
! 43: $returnhash{$courseid.'@'.$_}=$thiscal{$_};
! 44: }
! 45: }
! 46: return %returnhash;
! 47: }
! 48:
! 49: sub emptycell {
! 50: return '<td bgcolor="#AAAAAA"> </td>';
! 51: }
! 52:
! 53: sub normalcell {
! 54: my ($day,$text)=@_;
! 55: return '<td><b>'.$day.'</b><br>'.$text.'</td>';
! 56: }
! 57:
! 58: sub nextday {
! 59: my %th=@_;
! 60: $th{'day'}++;
! 61: return (&Apache::loncommon::maketime(%th),$th{'month'});
! 62: }
! 63:
! 64: sub showday {
! 65: my ($tk,%allcal)=@_;
! 66: my %th=&Apache::loncommon::timehash($tk);
! 67: my ($nextday,$nextmonth)=&nextday(%th);
! 68: my $outp='';
! 69: foreach (keys %allcal) {
! 70: my ($course,$startdate,$enddate)=($_=~/^(\w+)\@(\d+)\_(\d+)$/);
! 71: print $course.' '.localtime($startdate).' '.localtime($enddate).
! 72: localtime($tk).' '.localtime($nextday).'<br>';
! 73: if (($startdate>$tk) && ($enddate<$nextday)) {
! 74: $outp.='___&&&___'.$course.'@'.$allcal{$_};
! 75: }
! 76: }
! 77: return ($nextday,$nextmonth,&normalcell($th{'day'},$outp));
! 78: }
1.1 www 79:
80: sub handler {
81: my $r = shift;
82: $r->content_type('text/html');
83: $r->send_http_header;
84: return OK if $r->header_only;
85:
1.3 ! www 86: # ---------------------------------------------------------- Get time right now
! 87: my $today=time;
! 88: my %todayhash=&Apache::loncommon::timehash($today);
! 89:
! 90: # ---------------------------------------------------------- Get month and year
! 91: &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
! 92: ['month','year']);
! 93: # ----------------------------------------------------- Summarize all calendars
! 94: my %allcal=();
! 95: foreach (&Apache::loncommon::findallcourses()) {
! 96: %allcal=(%allcal,&readcalendar($_));
! 97: }
! 98: # --------------------------------------------------- Decide what month to show
! 99: my $year=$todayhash{'year'};
! 100: if ($ENV{'form.year'}) { $year=$ENV{'form.year'}; }
! 101: my $month=$todayhash{'month'};
! 102: if ($ENV{'form.month'}) { $month=$ENV{'form.month'}; }
! 103: # --------------------------------------------- Find out first day of the month
! 104:
! 105: my %firstday=&Apache::loncommon::timehash(
! 106: &Apache::loncommon::maketime( 'day' => 1, 'month'=> $month,
! 107: 'year' => $year, 'hours' => 0,
! 108: 'minutes' => 0, 'seconds' => 0,
! 109: 'dlsav' => $todayhash{'dlsav'} ));
! 110: my $weekday=$firstday{'weekday'};
! 111: # ------------------------------------------------------------ Print the screen
1.1 www 112: $r->print(<<ENDDOCUMENT);
113: <html>
114: <head>
115: <title>The LearningOnline Network with CAPA</title>
1.3 ! www 116: <script>
! 117: function pclose() {
! 118: parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
! 119: "height=350,width=350,scrollbars=no,menubar=no");
! 120: parmwin.close();
! 121: }
! 122:
! 123: function pjump(type,dis,value,marker,ret,call) {
! 124: parmwin=window.open("/adm/rat/parameter.html?type="+escape(type)
! 125: +"&value="+escape(value)+"&marker="+escape(marker)
! 126: +"&return="+escape(ret)
! 127: +"&call="+escape(call)+"&name="+escape(dis),"LONCAPAparms",
! 128: "height=350,width=350,scrollbars=no,menubar=no");
! 129:
! 130: }
! 131:
! 132: function dateset() {
! 133: if (document.anno.pres_marker.value=='end') {
! 134: document.anno.enddate.value=
! 135: document.anno.pres_value.value;
! 136: }
! 137: if (document.anno.pres_marker.value=='start') {
! 138: document.anno.startdate.value=
! 139: document.anno.pres_value.value;
! 140: }
! 141: pclose();
! 142: }
! 143:
! 144: function trysubmit() {
! 145: if (document.anno.startdate.value=='') {
! 146: alert("Announcements must have a starting date");
! 147: return '';
! 148: }
! 149: if (document.anno.enddate.value=='') {
! 150: alert("Announcements must have a starting date");
! 151: return '';
! 152: }
! 153: if (document.anno.startdate.value>document.anno.enddate.value) {
! 154: alert("Starting date is later than ending date");
! 155: return '';
! 156: }
! 157: document.anno.action.value="new";
! 158: document.anno.submit();
! 159: }
! 160:
! 161: function removesub() {
! 162: document.anno.action.value="del";
! 163: document.anno.submit();
! 164: }
! 165: </script>
1.1 www 166: </head>
167: <body bgcolor="#FFFFFF">
1.3 ! www 168: <h1>Announcements</h1>
1.1 www 169: ENDDOCUMENT
1.3 ! www 170:
! 171: # does this user have privileges to post, etc?
! 172: my $allowed=0;
! 173: if ($ENV{'request.course.id'}) {
! 174: $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
! 175: }
! 176:
! 177: if ($allowed) {
! 178: my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'};
! 179: my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
! 180: # ----------------------------------------------------- Store new submitted one
! 181: if ($ENV{'form.action'} eq 'new') {
! 182: &Apache::lonnet::put('calendar',{
! 183: $ENV{'form.startdate'}.'_'.$ENV{'form.enddate'} =>
! 184: $ENV{'form.msg'} },$coursedom,$coursenum);
! 185: }
! 186: # ---------------------------------------------------------------- Remove items
! 187: if ($ENV{'form.action'} eq 'del') {
! 188: my @delwhich=();
! 189: foreach (keys %ENV) {
! 190: if ($_=~/^form\.remove\_(.+)$/) {
! 191: push(@delwhich,$1);
! 192: }
! 193: }
! 194: &Apache::lonnet::del('calendar',\@delwhich,$coursedom,$coursenum);
! 195: }
! 196: # -------------------------------------------------------- Form to post new one
! 197: my %tomorrowhash=%todayhash;
! 198: $tomorrowhash{'day'}++;
! 199: my $tomorrow=&Apache::loncommon::maketime(%tomorrowhash);
! 200:
! 201: $r->print(<<ENDFORM);
! 202: <form name="anno" method="post">
! 203: <input type="hidden" value='' name="action" >
! 204: <input type="hidden" value='' name="pres_value" >
! 205: <input type="hidden" value='' name="pres_type" >
! 206: <input type="hidden" value='' name="pres_marker" >
! 207: <input type="hidden" value='$today' name="startdate" >
! 208: <input type="hidden" value='$tomorrow' name="enddate" >
! 209: <a
! 210: href="javascript:pjump('date_start','Starting Date',document.anno.startdate.value,'start','anno.pres','dateset');"
! 211: >Set Starting Date</a>
! 212: <a
! 213: href="javascript:pjump('date_end','Ending Date',document.anno.enddate.value,'end','anno.pres','dateset');"
! 214: >Set Ending Date</a><p>
! 215: <textarea name="msg" rows="4" cols="60">
! 216: </textarea>
! 217: <input type="button" onClick="trysubmit()" value="Post Announcement"><hr>
! 218: <input type="button" onClick="removesub()" value="Remove Marked"><hr>
! 219: ENDFORM
! 220: }
! 221: my ($pm,$py,$fm,$fy)=($month-1,$year,$month+1,$year);
! 222: if ($pm<1) { ($pm,$py)=(12,$year-1); }
! 223: if ($fm>12){ ($fm,$fy)=(1,$year+1); }
! 224: $r->print('<h1>'.('','January','February','March','April','May',
! 225: 'June','July','August','September','October',
! 226: 'November','December')[$month].' '.$year.'</h1>'.
! 227: '<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '.
! 228: '<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a><p>'.
! 229: '<table border="2" cols="7" rows="5"><tr><th>Sun</th><th>Mon</th>'.
! 230: '<th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th>');
! 231:
! 232: my $tk=&Apache::loncommon::maketime(%firstday);
! 233: my $outp;
! 234: my $nm;
! 235:
! 236: # ---------------------------------------------------------------- Actual table
! 237: $r->print('<tr>');
! 238: for (my $i=0;$i<$weekday;$i++) { $r->print(&emptycell); }
! 239: for (my $i=$weekday;$i<=6;$i++) {
! 240: ($tk,$nm,$outp)=&showday($tk,%allcal);
! 241: $r->print($outp);
! 242: }
! 243: $r->print('</tr>');
! 244:
! 245: for (my $k=0;$k<=3;$k++) {
! 246: $r->print('<tr>');
! 247: for (my $i=0;$i<=6;$i++) {
! 248: ($tk,$nm,$outp)=&showday($tk,%allcal);
! 249: if ($month!=$nm) { $outp=&emptycell; }
! 250: $r->print($outp);
! 251: }
! 252: $r->print('</tr>');
! 253: }
! 254: # ------------------------------------------------------------------- End table
! 255: if ($allowed) { $r->print('</form>'); }
! 256: $r->print('</table><p>'.
! 257: '<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '.
! 258: '<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a><p>'.
! 259: '</body></html>');
1.1 www 260: return OK;
261: }
262:
263: 1;
264: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>