# Calendar widget program. Creates pop-up calendar to select a date. package CalendarWidget; use strict; #force all variables to be declared before use use CGI qw(:standard escape escapeHTML); # most common CGI interface functions use CGI::Carp qw(warningsToBrowser fatalsToBrowser); #all diags to browser use Calendar::Simple; my $requested_new_month = param("requested_new_month"); my $specific_date_was_selected = param("specific_date_was_selected"); my $yyyy = param("yyyy"); my $mm = param("mm"); my $dd = param("dd"); sub calendar_widget { ####### dispatching logic begins here if (defined (param("specific_date_was_selected"))) #spec date was selected { if ($specific_date_was_selected eq "specific_date_was_selected") {return($yyyy,$mm,$dd);} # return selected date to calling program else {} } elsif (defined (param("requested_new_month"))) # if request not current mo & yr { if ($requested_new_month eq "previous_month") # requested previous_month { # adjust calendar backward in time if ($mm eq "1") # if previously displayed month was January { $mm = 12; # change new displayed month to December $yyyy = $yyyy-1; # and adjust year } else # for all other months {$mm = $mm-1; } #change new displayed month to previous month } else # requested_new_month was next_month { # adjust calendar forward in time if ($mm eq "12") # if previously displayed month was December { $mm = 1; # change new displayed month to January $yyyy = $yyyy+1; # and adjust year } else { $mm = $mm+1; } #change new displayed month to next month } show_calendar($mm, $yyyy); #show the revised calendar } else { show_calendar(); } #show calendar using current month / year } ####### dispatching logic ends here sub show_calendar { my ($specified_month, $specified_year) = @_; #get passed parms from calling pgm my (@month, @row, @calendar_table_entry, @array, $array, $url1, $url2, $theTime); my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); my @weekDays = qw (Sun Mon Tue Wed Thu Fri Sat); my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings, $year) = localtime(); $year = 1900 + $yearOffset; $theTime = "$weekDays[$dayOfWeek], $months[$month] $dayOfMonth, $year $hour:$minute:$second"; my @month_names = qw(January February March April May June July August September October November December); if (($specified_month eq '') || ($specified_year eq '')) #if no date spec'ed { @month = calendar($month+1, $year); # uses ACTUAL # of month & year $specified_month = $month+1; $specified_year=$year; } else # (month / year info were spec'ed, get info for specified month / year { @month = calendar($specified_month, $specified_year); } $url1 = url().sprintf("?requested_new_month=%s&yyyy=%s&mm=%s",escape("previous_month"),escape($specified_year),escape($specified_month)); $url2 = url().sprintf("?requested_new_month=%s&yyyy=%s&mm=%s",escape("next_month"),escape($specified_year),escape($specified_month)); push (@row,qq(
| ), qq(), "$theTime", qq() ) ) ); push (@row, Tr ( ( qq( | ), qq(), (a({-href=>$url1},"<<")), qq() ), ( qq( | ), qq(), "@month_names[$specified_month-1] $specified_year", qq() ), ( qq( | ), qq(), (a({-href=>$url2},">>")), qq() ) ) ); foreach $array(@array) # specify calendar days of week { @calendar_table_entry[$j] = $array; $i++; $j++; } $j=0; push (@row, Tr ( ( qq( | ), @calendar_table_entry[$j] ), td (@calendar_table_entry[$j+1]), td (@calendar_table_entry[$j+2]), td (@calendar_table_entry[$j+3]), td (@calendar_table_entry[$j+4]), td (@calendar_table_entry[$j+5]), td (@calendar_table_entry[$j+6]) ) ); foreach (@month) { $j=0; @array = @$_; foreach $array(@array) # specify calendar numbered days in month { @calendar_table_entry[$j] = $array; $i++; $j++; } $j=0; push (@row, Tr ( ( qq( | ), qq(), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month), escape(@calendar_table_entry[$j]))}, @calendar_table_entry[$j])), qq() ), ( qq( | ), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month),escape(@calendar_table_entry[$j+1]))}, @calendar_table_entry[$j+1]))), ( qq( | ), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month), escape(@calendar_table_entry[$j+2]))}, @calendar_table_entry[$j+2]))), ( qq( | ), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month), escape(@calendar_table_entry[$j+3]))}, @calendar_table_entry[$j+3]))), ( qq( | ), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month), escape(@calendar_table_entry[$j+4]))}, @calendar_table_entry[$j+4]))), ( qq( | ), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month), escape(@calendar_table_entry[$j+5]))}, @calendar_table_entry[$j+5]))), ( qq( | ), qq(), (a({-href=>url().sprintf("?specific_date_was_selected=%s&yyyy=%04d&mm=%02d&dd=%02d", escape("specific_date_was_selected"), escape($specified_year), escape($specified_month), escape(@calendar_table_entry[$j+6]))}, @calendar_table_entry[$j+6])), qq() ) ) ); } print table (@row); return(); } 1; |