Holiday and exam support for MHC schedule
authorTim Pope <code@tpope.net>
Fri, 27 Aug 2004 20:08:44 +0000 (20:08 +0000)
committerTim Pope <code@tpope.net>
Fri, 27 Aug 2004 20:08:44 +0000 (20:08 +0000)
perl/sctweb

index 5925b9795f95fca5aa5976b7ecda171494bc220c..2cbedd6a2675ec0a6d3a5964b1c42ce149dbac13 100755 (executable)
@@ -52,8 +52,9 @@ sub off_for_holidays {
     open(HOLIDAY, "today --category=holiday --date=$firstday+$days|") or return undef;
     my @holidays=();
     while(<HOLIDAY>) {
-       /^(\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 .= <<EOF
+
+X-SC-Subject: New Years Day
+X-SC-Category: Holiday
+X-SC-Cond: 1 Jan
+
+X-SC-Subject: Martin Luther King, Jr. Day
+X-SC-Category: Holiday
+X-SC-Cond: 3rd Mon Jan
+X-SC-Duration: 19861102-
+
+X-SC-Subject: Presidents Day
+X-SC-Category: Holiday
+X-SC-Cond: 3rd Mon Feb
+X-SC-Duration: 17760704-
+
+X-SC-Subject: Memorial Day
+X-SC-Category: Holiday
+X-SC-Cond: Last Mon May
+X-SC-Duration: 17760704-
+
+X-SC-Subject: Independence Day
+X-SC-Category: Holiday
+X-SC-Cond: 4 Jul
+X-SC-Duration: 17760704-
+
+X-SC-Subject: Labor Day
+X-SC-Category: Holiday
+X-SC-Cond: 1st Mon Sep
+
+X-SC-Subject: Columbus Day
+X-SC-Category: Holiday
+X-SC-Cond: 2nd Mon Oct
+
+X-SC-Subject: Veterans Day
+X-SC-Category: Holiday
+X-SC-Cond: 11 Nov
+
+X-SC-Subject: Thanksgiving
+X-SC-Category: Holiday
+X-SC-Cond: 4th Thu Nov
+
+X-SC-Subject: Christmas
+X-SC-Category: Holiday
+X-SC-Cond: 25 Dec
+
+EOF
+;
+    if(defined($_[0])) {
+       open SCHEDULE, (">" . $_[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 "</table>\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/^\&nbsp;//;
+       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