#!/usr/bin/perl # class_schedule_maker.pl # CGI for creating a class schedule # Copyright (C) 2000 Brock Wilcox # Released under the same terms as Perl itself # HISTORY # 2000.08.16.23.54 # - Now goes all the way through the process correctly # - Uses code from scheduler.pl for converting # to pretty schedule # 2000.08.16.21.26 # - Shifted towards events wrather than classes # 2000.08.15.04.24 # - Adapted from schedule4.pl use BrockCGI; use BrockHTML; use Time::Local; @colors = ("#ff0000",,"#0000ff","#00ff00","#ff00ff","#00ffff", "#ffff00","#ff8888","#8888ff","#88ff88","#ff88ff","#88ffff","#ffff88"); sub print_input_form { print "
\n

\n"; # Save current data foreach $name (keys %data) { foreach $value (@{$data{$name}}) { print "\n"; } } start_block("width" => "95%"); print <<" ENDPRINT";

Weekly Schedule Generator

Enter schedule information

General Info
Event


Description


Start time
: AM PM

End time
: AM PM
Days
Sunday (S)
Monday (M)
Tuesday (T)
Wednesday (W)
Thursday (TH)
Friday (F)
Saturday (A)
Highlight Color
ENDPRINT for $i (1..$#colors) { print "\n"; print "\n"; print "\n"; print "\n"; } print <<" ENDPRINT";
TEXT
TEXT
ENDPRINT stop_block; } sub print_current_table { print <<" LIST_HEADER";
LIST_HEADER # Loop through, printing out current data for($i=0;$i<$length;$i++) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "
Event Start End Days Description
" . $data{'event'}[$i] . " $data{'start_hour'}[$i]:" . $data{'start_min'}[$i] . " " . ($data{'start_ampm'}[$i] == 0 ? "AM" : "PM") . " $data{'end_hour'}[$i]:" . $data{'end_min'}[$i] . " " . ($data{'end_ampm'}[$i] == 0 ? "AM" : "PM") . ""; if ($data{'monday'}[$i] eq 'on') {print "M";} if ($data{'tuesday'}[$i] eq "on") {print "T";} if ($data{'wednesday'}[$i] eq "on") {print "W";} if ($data{'thursday'}[$i] eq "on") {print "TH";} if ($data{'friday'}[$i] eq "on") {print "F";} if ($data{'satday'}[$i] eq "on") {print "S";} if ($data{'sunday'}[$i] eq "on") {print "SU";} print " ", $data{'description'}[$i], "
\n
\n"; } sub create_event_list { for($i=0;$i<$length;$i++) { $start = timelocal(0, $data{'start_min'}[$i], ($data{'start_hour'}[$i]%12)+12*$data{'start_ampm'}[$i], 1,0,2000); $end = timelocal(0, $data{'end_min'}[$i], ($data{'end_hour'}[$i]%12)+12*$data{'end_ampm'}[$i], 1,0,2000); $desc = $data{'description'}[$i]; $color = $colors[$data{'color'}[$i]]; $event = $data{'event'}[$i]; if($data{'sunday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*0, 'end' => $end + 60*60*24*0, 'desc' => $desc, 'color' => $color}; } if($data{'monday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*1, 'end' => $end + 60*60*24*1, 'desc' => $desc, 'color' => $color}; } if($data{'tuesday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*2, 'end' => $end + 60*60*24*2, 'desc' => $desc, 'color' => $color}; } if($data{'wednesday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*3, 'end' => $end + 60*60*24*3, 'desc' => $desc, 'color' => $color}; } if($data{'thursday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*4, 'end' => $end + 60*60*24*4, 'desc' => $desc, 'color' => $color}; } if($data{'friday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*5, 'end' => $end + 60*60*24*5, 'desc' => $desc, 'color' => $color}; } if($data{'saturday'}[$i] eq 'on') { push @events,{ 'event' => $event, 'start' => $start + 60*60*24*6, 'end' => $end + 60*60*24*6, 'desc' => $desc, 'color' => $color}; } } } sub dump_event_list { print <<" ENDPRINT";
ENDPRINT foreach $event (@events) { print "{color} . "\">\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print <<" ENDPRINT";
Event Start End Description
" . $event->{event} . "" . $event->{start} . "" . $event->{end} . "" . $event->{desc} . "
ENDPRINT } sub convert_event_list { $start_day = timelocal(0,0,0,1,0,2000); $stop_day = timelocal(0,0,0,7,0,2000); $start_time = 60*60*9; $stop_time = 60*60*16 - 1; $time_inc = 60*10; for($day=$start_day;$day<=$stop_day;$day+=60*60*24) { for($hour=$start_time;$hour<=$stop_time;$hour+=$time_inc) { $col = int (($day - $start_day) / (60*60*24)); $row = int (($hour - $start_time) / $time_inc); $s_time = $day+$hour; $e_time = $day+$hour+$time_inc; $sch[$col][$row][0] = ''; $sch[$col][$row][1] = '#dddddd'; foreach $event (@events) { if(($event->{start}>=$s_time) && ($event->{start}<$e_time)) { if(length $sch[$col][$row][0]>0) { $sch[$col][$row][0] .= '
' . $event->{event}; } else { $sch[$col][$row][0] = $event->{event}; } } if($event->{start}<$e_time and $event->{end}>$s_time) { $sch[$col][$row][1] = ($event->{color} or '#444499'); } } } } } sub print_sch { # $start_day = timelocal(0,0,0,1,0,2000); # $stop_day = timelocal(0,0,0,7,0,2000); # $start_time = 0; # $stop_time = 60*60*24 - 1; # $time_inc = 60*30; print "


\n"; print "\n"; print "\n\n"; # for($day=$start_day;$day<=$stop_day;$day+=60*60*24) for $day ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') { # print "\n"; print "\n"; } print "\n"; $t = $start_time; for $x (0 .. $#{$sch[0]}) { print "\n"; print "\n"; $t += $time_inc; for $y (0 .. $#sch) { print "\n"; } print "\n"; } print "
 ",substr(scalar localtime($day),0,3),"$day
",substr(scalar localtime($t+$start_day),-13,5),"$sch[$y][$x][0] 


\n"; } sub print_current_list_with_done { print "
\n"; start_block("width" => "80%"); print_current_table; print "
\n
\n"; # Save current data foreach $name (keys %data) { foreach $value (@{$data{$name}}) { print "\n"; } } print "\n"; print "
\n
\n"; stop_block; } sub print_current_list { print "
\n"; start_block("width" => "80%"); print_current_table; print "
\n"; stop_block; } sub parse_form { if ($length > 0) { # Make sure values are there. # If not, we will give them one. if (scalar(@{$data{'monday'}}) < $length) {push @{$data{'monday'}}, "off";} if (scalar(@{$data{'tuesday'}}) < $length) {push @{$data{'tuesday'}}, "off";} if (scalar(@{$data{'wednesday'}}) < $length) {push @{$data{'wednesday'}}, "off";} if (scalar(@{$data{'thursday'}}) < $length) {push @{$data{'thursday'}}, "off";} if (scalar(@{$data{'friday'}}) < $length) {push @{$data{'friday'}}, "off";} if (scalar(@{$data{'satday'}}) < $length) {push @{$data{'satday'}}, "off";} if (scalar(@{$data{'sunday'}}) < $length) {push @{$data{'sunday'}}, "off";} if ($data{'event'}[$length - 1] eq "") {$data{'class'}[$length - 1] = " ";} if ($data{'start_hour'}[$length - 1] eq "") {$data{'start_hour'}[$length - 1] = " ";} if ($data{'start_min'}[$length - 1] eq "") {$data{'start_min'}[$length - 1] = " ";} #if ($data{'start_ampm'}[$length - 1] eq "") {$data{'start_ampm'}[$length - 1] = " ";} if ($data{'end_hour'}[$length - 1] eq "") {$data{'end_hour'}[$length - 1] = " ";} if ($data{'end_min'}[$length - 1] eq "") {$data{'end_min'}[$length - 1] = " ";} #if ($data{'end_ampm'}[$length - 1] eq "") {$data{'end_ampm'}[$length - 1] = " ";} if ($data{'description'}[$length - 1] eq "") {$data{'description'}[$length - 1] = " ";} # print "
    \n"; # foreach $name (keys %data) # { # print "
  • $name
  • \n"; # print "
      \n"; # foreach $value (@{$data{$name}}) # { # print "
    • $value
    • \n"; # } # print "
    \n"; # } # print "
\n"; } } # Main Program # Get CGI vars %data = &get_data; # Start HTML start_html("title" => "Hello", "bgcolor" => "#ccccff"); # Set length to the number of colors. $length = scalar(@{$data{'color'}}); # Parse the previous data parse_form; if (exists $data{'done'}) { # Print the current list of classes print_current_table; create_event_list; # dump_event_list; convert_event_list; print_sch; } else { # Print the input form print_input_form; # Print the current list of classes print_current_list_with_done; } print "

\n"; # Stop HTML stop_html; # End of class_schedule_maker.pl