From 706eb7908c223ebc01f13860d5e32e39db92e61b Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Fri, 27 Aug 2004 20:08:44 +0000 Subject: [PATCH] Holiday and exam support for MHC schedule --- perl/sctweb | 112 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 96 insertions(+), 16 deletions(-) diff --git a/perl/sctweb b/perl/sctweb index 5925b97..2cbedd6 100755 --- a/perl/sctweb +++ b/perl/sctweb @@ -52,8 +52,9 @@ sub off_for_holidays { open(HOLIDAY, "today --category=holiday --date=$firstday+$days|") or return undef; my @holidays=(); while() { - /^(\d\d)\/(\d\d) /; - push @holidays, "!".($firstday[5]+1900).$1.$2; + next unless /^(\d\d)\/(\d\d) ([A-Z][a-z][a-z])/; + my $day=$1.$2; + push (@holidays, "!".($firstday[5]+1900).$day) if ($_[1] =~ /\b$3\b/); } return wantarray ? @holidays : "@holidays"; } @@ -61,7 +62,7 @@ sub off_for_holidays { sub off_for_exams { $_[3] =~ /\d{8}-(\d\d\d\d)(\d\d)(\d\d)/; my @finalday = localtime timelocal(0,0,0,$3,$2-1,$1); - return undef unless ($finalday[6] == 0); + return wantarray ? () : undef unless ($finalday[6] == 0); my $beginning="(08:00-09:15|11:00-12:15|14:00-15:15|17:00-18:15|17:30-18:45|20:00-21:15|20:30-21:45)"; my $ending ="(06:30-07:45|09:30-10:45|12:30-13:45|15:30-16:45|18:30-19:45|19:00-20:15)"; if($_[1] eq "Mon Wed") { @@ -81,7 +82,7 @@ sub off_for_exams { return "!" . ($1-5); } } else { - return ""; + return wantarray ? () : ""; } } @@ -125,19 +126,82 @@ sub get_schedule_terms { return @terms; } +sub print_mhc_header { +my $header = "# Autogenerated by sctweb ".localtime()."\n"; +$header .= <" . $_[0]); + print SCHEDULE $header; + close SCHEDULE; + } else { + print $header; + } +} + sub do_mhc_schedule { + $| = 1; my @readheaders = ("Section ID/Title", "Days", "Time", "Start/EndDates", "Site/Building/Room"); my %days = (M => "Mon", T => "Tue", W => "Wed", R => "Thu", F => "Fri", S => "Sat"); my $te = new HTML::TableExtract( headers => [ @readheaders ] ); - my (@terms, $row); + my (@terms, $row, $file); + $file = shift unless (!defined $_[0] or $_[0] =~ /^\d/); @terms = get_schedule_terms(); - foreach(@ARGV || @terms) { + print_mhc_header($file); + foreach(@_ || @terms) { $response = $ua->get("$url&tserve_tip_write=||WID|SID|PIN|Term&tserve_trans_config=" . ($opts{cfg} || "rstusch" || "rgrades") . ".cfg&Term=".($_) ); die $response->status_line unless $response->is_success; $te->parse($response->content); } + open(STDOUT, ">>" . $file) if(defined($file)); print "# MHC school schedule\n"; - print "# Autogenerated by sctweb ".localtime()."\n"; + #print "# Autogenerated by sctweb ".localtime()."\n"; foreach $ts ($te->table_states) { foreach $row ($ts->rows) { map { s/\xa0//g; s/\n/-/g; $_} @$row; @@ -156,12 +220,16 @@ sub do_mhc_schedule { $row->[3] =~ s/(\d\d)-(\d\d)-(\d\d)/20$3$1$2/g; $row->[4] =~ s/ON CAMPUS-//g; $row->[4] =~ s/-/ /g; - my $day = off_for_exams(@$row); - if(defined($day)) { - $day .= " ".off_for_holidays(@$row); - } else { - $day = off_for_holidays(@$row); - } + my @day = (off_for_holidays(@$row),off_for_exams(@$row)); + #my $day = join(" ",off_for_holidays(@$row),off_for_exams(@$row)); + my $day = ""; + #print "@day*\n"; + #$day = join(" ",@day) if (@day); +# if(defined($day)) { +# $day .= " ".off_for_holidays(@$row); +# } else { +# $day = off_for_holidays(@$row); +# } print "\n"; print "# $id\n"; print "X-SC-Subject: ", $row->[0], "\n"; @@ -169,7 +237,7 @@ sub do_mhc_schedule { print "X-SC-Cond: ", $row->[1], "\n"; print "X-SC-Time: ", $row->[2], "\n"; print "X-SC-Duration: ", $row->[3], "\n"; - print("X-SC-Day: ", $day, "\n") if(defined($day) && $day); + print("X-SC-Day: ", "@day", "\n") if(exists $day[0]); print "X-SC-Location: ", $row->[4], "\n"; } } @@ -242,14 +310,26 @@ sub do_html_grades { print "\n"; } +sub do_transcripts { + $response = $ua->get("$url&tserve_tip_write=||WID|SID|PIN&tserve_trans_config=rtranscr.cfg&CareerReqNum=1"); + foreach (split /\n/, $response->content) { + next unless s/^\ //; + s/<\/?[Hh]\d>//g; + print "$_\n"; + } +} + if (defined($ARGV[0]) && $ARGV[0] eq "-g") { shift; do_html_grades; } elsif (defined($ARGV[0]) && $ARGV[0] eq "-s") { shift; do_html_schedule; -} else { - do_mhc_schedule; +} elsif (defined($ARGV[0]) && $ARGV[0] eq "-m") { + shift; + do_mhc_schedule(@ARGV); +} elsif (defined($ARGV[0]) && $ARGV[0] eq "-t") { + do_transcripts; } $ua->get("$url&tserve_trans_config=alogout.cfg"); # Logout -- 2.30.2