--- ConnorCalendar/calendar.pl 2013/05/28 22:07:14 1.2 +++ ConnorCalendar/calendar.pl 2013/05/30 14:38:50 1.7 @@ -8,7 +8,7 @@ | | Nicholas DeClario | March 2009 -| $Id: calendar.pl,v 1.2 2013/05/28 22:07:14 nick Exp $ +| $Id: calendar.pl,v 1.7 2013/05/30 14:38:50 nick Exp $ | +------------------------------------------------------------------------------ =end comment @@ -26,13 +26,16 @@ use Calendar::Simple; use Date::Calendar::Year qw( :all ); use Date::Calendar::Profiles qw( $Profiles ); +my $VERSION = q/$Id: calendar.pl,v 1.7 2013/05/30 14:38:50 nick Exp $/; my $DEBUG = ""; my $URL = "http://demandred.dyndns.org/cgi-bin/ConnorCalendar/index.cgi"; my %post_in = ( ); my %opts = &fetchOptions( ); +my @list = ( ); my @months = qw/ January February March April May June July - August September October Novemeber December /; + August September October November December /; my %holidays = ( + "Easter Sunday" => 'even', "Christmas Day" => 'even', "Christmas Eve" => 'odd', "Father's Day" => 'all', @@ -40,7 +43,7 @@ my %holidays = ( "Labor Day" => 'even', "Memorial Day" => 'odd', "New Year's Day" => 'even', - "New Year's Eve" => 'odd', + "New Year's Eve" => 'even', "Thanksgiving Day" => 'odd', ); @@ -48,32 +51,27 @@ my %specials = ( "11/28" => "even", "5/6" => "odd", ); +my @weekend = qw/ 2011 8 12 /; +my %weekends = &calcWeekends( @weekend ); &ReadParse( ); my $yr = sprintf( "%d", $post_in{'cy'} ) || ( ( localtime )[5] + 1900 ); my $YEAR = sprintf( "%d", $yr ); +push @list, 'Easter Sunday' if ( ! $YEAR % 2 ); print "Content-type: text/html\n\n"; -print ""; -print "Calendar Days I Have Connor"; -print "

Calendar for $YEAR

\n"; -print "

Holidays I have Connor are in Red\n
"; -print "Today is Blue\n
"; -print "Weekends and special days I have Connor are in Green\n

"; - +print &header( ); +print &css( ); my $year_us = Date::Calendar::Year->new( $YEAR, $Profiles->{'US-FL'} ); my @hdays = $year_us->labels( ); -$DEBUG = "Holidays for $YEAR:\n"; -foreach ( sort @hdays ) { $DEBUG .= $_ ."\n"; } - - -print "
<-- $YEAR " . - "-->
"; +print "

<-- " . + "Calendar Days Connor Visits for $YEAR" . + "-->

"; my $row = 0; -print ""; +print "
"; for( my $month = 1; $month <= 12; $month++ ) { if ( $row >= 3 ) @@ -93,6 +91,7 @@ for( my $month = 1; $month <= 12; $month { my $h_day = ( $year_us->labels( $YEAR, $month, $day ) )[1]; if( &IHaveConnor( $h_day ) ) { + push @list, $h_day; print sprintf "%2d ", $day; } elsif ( &isSpecial( $YEAR, $month, $day ) || &isWeekend( $YEAR, $month, $day ) ) { @@ -112,7 +111,19 @@ for( my $month = 1; $month <= 12; $month $row++; } print "
"; -print "
$DEBUG
"; +print "

Holidays I have Connor are in Red\n
"; +print "Today is Blue\n
"; +print "Weekends and special days I have Connor are in Green\n

"; + + +print "
List of Special/Holidays " . + "I have Connor:

"; +print map { $_ . "
\n" } sort @list; +print "

\n"; +print "

Version: $VERSION
"; +print "CVS: http://demandred.dyndns.org/cgi-bin/cvsweb/ConnorCalendar/"; +print "

"; + ############################################################################### ############################################################################### @@ -141,8 +152,11 @@ sub isSpecial if ( defined $specials{$ref} ) { - return 1 if ( $specials{$ref} eq "all" || - $specials{$ref} eq $yr ); + if ( $specials{$ref} eq "all" || + $specials{$ref} eq $yr ) { + push @list, $ref; + return 1; + } } return 0; @@ -150,10 +164,15 @@ sub isSpecial sub isWeekend { - my $y = shift || return 0; + my $y = shift || return 0; my $m = shift || return 0; my $d = shift || return 0; + $m--; + my $ds = sprintf( "$y/$months[$m]/%02d", $d ); + + return 1 if ( defined $weekends{$ds} ); + return 0; } @@ -169,6 +188,40 @@ sub isToday return 0; } +sub calcWeekends +{ + my $y = shift; + my $m = shift; + my $d = shift; + my %weekends = ( ); + + print "Weekends I have Connor:\n"; + + use Calendar; + my $date = Calendar->new_from_Gregorian( $m, $d, $y ); + + $weekends{$date->date_string( "%Y/%M/%d" )} = 1; + &twoMore( $date ); + while ( $date->date_string( "%Y" ) <= 2026 ) + { + $date += 14; + $weekends{$date->date_string( "%Y/%M/%d" )} = 1; + &twoMore( $date ); + } + + return %weekends; + + sub twoMore + { + my $td = shift; + + $td++; + $weekends{$td->date_string( "%Y/%M/%d" )} = 1; + $td++; + $weekends{$td->date_string( "%Y/%M/%d" )} = 1; + } +} + ############################################################################### ############################################################################### sub ReadParse @@ -223,6 +276,253 @@ sub fetchOptions { return %opts; } +sub header { + return < + + + + + Calendar Days Connor Visits + + +EOF +} + +sub css { + return < +body { + +padding-top: 0px; +padding-left: 0px; +padding-right: 0px; +padding-bottom: 0px; + + text-align:left; + margin:0; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + #font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 12pt; + background: #eeeeee; + color:#000000; + + +} + +.name { + color: #191970; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + #font-family: Verdana, Arial, sans-serif; + font-size: 18pt; font-weight: bold; line-height: 38pt; + text-align: center; +} + +p.Legend { + color: #000000; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + font-size: 8pt; + margin: auto; + width: 300px; + background-color : transparent; + border-top: 1px solid #888888; + border-left: 1px solid #888888; + border-right: 1px solid #888888; + border-bottom: 1px solid #888888; + padding-top: 3px; + padding-bottom: 3px; + padding-left: 3px; + padding-right: 3px; +} + +h1 { + color: #191970; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + #font-family: Verdana, Arial, sans-serif; + font-size: 12pt; font-weight: bold; line-height: 15pt; + background-color : transparent; + margin-left: 20px; + margin-right: 20px; + border-top: 1px solid black; + border-bottom: 1px solid black; +} + + +h2 { + color: #191970; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + font-weight: bold; + font-size: 18px; +} + +h3 { + color: #191970; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + font-weight: bold; + font-size: 14px; +} + + +textarea { width:100%; } + +.gallery { +padding-top: 80px; +padding-left: 60px; +padding-right: 50px; +line-height: 120%; +background:url('topleft.jpg') no-repeat top left; +} +.browse { +padding-top: 80px; +padding-left: 60px; +padding-right: 50px; +line-height: 120%; +background:url(topleft.jpg) no-repeat top left; +} +.content, .rc { +padding-top: 100px; +padding-left: 80px; +padding-right: 50px; +line-height: 120%; +} + + +p.footer { + color: #000000; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; + font-size: 8pt; + margin: auto; + width: 500px; + background-color : transparent; + border-top: 1px solid #888888; + padding-top: 3px; + padding-bottom: 3px; + padding-left: 3px; + padding-right: 3px; + text-align: center; +} + + +.header { +float: right; +margin-top: 30px; +margin-right: 50px; +padding: 10px; +padding-top: 10px,10px,10px,10px; + +} +pre { + border: #777777 1px dashed; + padding: 0.5em; + margin-left: 1em; + margin-right: 2em; + white-space: pre; + background-color: #fbfdff; + color: black; + font-size:12px; +} + +.refer { + padding-left: 60px; + padding-right: 50px; + margin-right: 50px; + margin-left: 50px; + font-size:80%; +} + +.gotobar { + color: #191970; + font-size:10px; +} + +.edit bar { + color: #949ce5; +} + +.contactInfo { + font-size:12px; + text-align:center; +} + +.workHeader { + text-align:left; + font-size:13px; + text-decoration:none; + font-weight:normal; +} + +.workHeaderDate { + float: right; +} + +.workHeaderStrong { + font-size:15px; + text-decoration:none; + font-weight:bolder; +} + +.jobDescription { + padding-top:15px; + font-size:13px; +} + +.bulletContent { + font-size:13px; +} + +.leftCol { + width:10.2em; + position:absolute; + top:0; + font-size:13px; + padding-left:1%; + padding-right:1%; +} + +.rightCol { + width:10.2em; + position:absolute; + top:0; + font-size:13px; + padding-left:1%; + padding-right:1%; +} + +a:link {color:#082e58; text-decoration: none; font-weight:bolder;} +a:visited {color:#7795b7; font-weight:normal; text-decoration:none;} +a:hover {color:#949ce5;} + + +a.definition:before { content:"[::"; } +a.definition:after { content:"]"; } +a.alias { text-decoration:none; border-bottom: thin dashed; } +a.near:link { color:#093; } +a.near:visited { color:#550; } +a.upload:before { content:"<"; } +a.upload:after { content:">"; } +a.outside:before { content:"["; } +a.outside:after { content:"]"; } +img.logo { float: right; clear: right; border-style:none; } +div.diff { padding-left:5%; padding-right:5%; } +div.old { background-color:#FFFFAF; } +div.new { background-color:#CFFFCF; } +div.message { background-color:#FEE; } +div.journal h1 { font-size:large; } +table.history { border-style:none; } +td.history { border-style:none; } +span.result { font-size:larger; } +span.info { font-size:smaller; font-style:italic; } +div.rss { background-color:#EEF; } +div.sister { float:left; margin-right:1ex; background-color:#FFF; } +div.sister p { margin-top:0; } +div.sister img { border:none; } +div.near { background-color:#EFE; } +div.near p { margin-top:0; } + +EOF + +} + __END__ =head1 NAME