#!/usr/bin/perl ##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ # Calendar (by: Dan C Clark) # Created: December, 15 ,2000 # ©2002 Daniel C. Clark (www.dancclark.com) # Everything for the calendar is included in this file ##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ use CGI qw(:all) ; use CGI::Carp qw(fatalsToBrowser); @days=( "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"); @monarr=("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"); @months = ('January','February','March','April','May','June','July', 'August','September','October','November','December'); $eventsPath = "/home/events" ; # Full Path to writable directory where events are stored $todaysdate=`date +%B__%d,_%Y`; # Should remove this, because it forks $todaysdate=~s/_/ /g; $end_a=""; $cal =`cal`; $m_day =`date +%w`; $digitday=`date +%d`; $digitday=~s/\n|\s|\?//g; $m_day =~s/\n|\s|\?//g; $c = 0; $home =qq(
Home

); sub default { $m_day =`date +%w`; $m_year =`date +%Y`; $m_mon =`date +%m`; $m_mon =~s/^0//g ; $m_mon =~s/\n//g ; $m_mon =~s/\?|\s//g; $mon = $m_mon ; $myyear = $m_year ; $myyear =~s/\n|\s|\?//g; $m_day =~s/\n|\s|\?//g; } if (defined param('doAdd')) { AddEvent(); } elsif (defined param('searchMe')) { SearchEvent(); } elsif (defined param('del')) { DelEvent(); } elsif (defined param('new')) { NewEvent(); } elsif (defined param('get')) { GetEvent(); } elsif (defined param('d_e')) { DelEntry(); } elsif (defined param('edd')) { EditView(); } elsif (defined param('chg')) { ChgEvent(); } elsif (defined param('upd')) { Update(); } else { noselect(); } sub DelEntry { #physically removes entry my $mon_in = param('m') ; my $day_in = param('d') ; my $year_in= param('y') ; my $db_new = $year_in .$mon_in .$day_in ; $un1 = unlink "$eventsPath/$db_new.db"; ##dbmopen(%dan, "$eventsPath/$db_new", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; ##delete ; ##dbmclose(%dan); my $dbdate = $mon_in . $year_in ; $un2 = unlink "$eventsPath/$dbdate.db" ; #dbmopen(%dn, "$eventsPath/$dbdate", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; #$dn{$day_in} = 1 ; #dbmclose(%dn); noselect() ; } sub ChgEvent { my $mon_in = param('m') ; my $day_in = param('d') ; my $year_in= param('y') ; if (!$mon_in || !$day_in || !$year_in) { noselect(); exit 0; } my $db_new = $year_in .$mon_in .$day_in ; dbmopen(%dan, "$eventsPath/$db_new", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; foreach (keys %dan) { $all_tab .= qq( $days[day_in], @months[$mon_in] $day_in $year_in :: $_ ); } dbmclose(%dan); $html=qq( $home
$all_tab
); print header; print $html ; } sub Update { my $mon_in = param('m') ; my $day_in = param('d') ; my $year_in= param('y') ; if (!$mon_in || !$day_in || !$year_in) { noselect(); exit 0; } my $db_new = $year_in .$mon_in .$day_in ; dbmopen(%dan, "$eventsPath/$db_new", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; foreach (keys %dan) { $dan{$_} = param("$_"); } dbmclose(%dan); noselect() ; } sub noselect { make() ; calHTML(); print header ; print " $html


$days 
"; } sub SearchEvent { noselect(); } sub EditView { make() ; $html = qq(
Click on Hyperlinked dates to Edit
); $html .= inner_cal_tables() ; $html .= qq(
Home); print header ; print $html ; } sub DelEvent { make() ; $html = qq(
Click on Hyperlinked dates to Delete
); $html .= inner_cal_tables() ; $html .= qq(
Home); print header ; print $html ; } sub NewEvent { $mon_in = param('m') ; $day_in = param('d') ; $year_in= param('y') ; $time_in= param('t') ; $text_in= param('txt') ; $db_new = $year_in .$mon_in .$day_in ; # ie : a unique date ( 2000713) --- Dan CLark (7/14/2000) dbmopen(%dan, "$eventsPath/$db_new", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; if ($dan{$time_in}) { $text_in .= "
" .$dan{$time_in} ; } $dan{$time_in} = $text_in ."
" ; dbmclose(%dan); my $dbdate = $mon_in . $year_in ; dbmopen(%dn, "data/$dbdate", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; $dn{$day_in} = 1 ; dbmclose(%dn); generic_print() ; } sub generic_print { doTables() ; $hash_mon = setMonth() ; $hash_year = setYear() ; theDetails(); calHTML() ; print header ; print " $html


$days 
"; } sub GetEvent { $mon_in = param('m') ; $day_in = param('d') ; $year_in= param('y') ; $eventDetails =1; my $db_new = $year_in .$mon_in .$day_in ; dbmopen(%dan, "$eventsPath/$db_new", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; foreach (keys %dan) { $hash_evnt .= qq(
$dan{$_}
); } dbmclose(%dan); generic_print() ; } sub AddEvent { $html= makeHTMLevent() ; print header ; print $html ; } sub doTables { $mon = param('m') ; $myyear = param('y') ; $g = 1; $isOn = 0; if (!$mon || !$myyear || $mon > 12 || $mon < 1 || $myyear < 1900 ) { default() ; } if ((($myyear % 4 == 0) && ($myyear % 100 != 0)) || ($myyear % 400 == 0)) { @monarr[1] = "29"; } $fin = @monarr[$mon - 1] ; # @monarr is a 0 based array -- Dan (7/13/00)) $begin = dayofweek(1,$mon,$myyear); $begin++; # dday derived 'begin' is in range 0-6. I need 1-7 -- Dan (7/11/00) $db_date .=$mon; $db_date .=$myyear ; if (!$fin) { $fin = 31 ; } dbmopen(%dannyd, "data/$db_date", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; $tables =qq(\n\n) ; $tables .=qq( \n) ; $tables .=qq( \n) ; $tables .=qq( \n) ; $tables .=qq( \n) ; $tables .=qq( \n) ; foreach (1..42) { $url =""; $end_a =""; if ($_ == 36 && $isOn == 0) { last; } if ($_ == $begin) { $isOn=1; $w=0; } if ($w == $fin ) { $isOn=0; } if ($isOn) { ######### For deleting only ################ if (defined param('del')) { if ($dannyd{$g}) { $url = qq( ); $end_a=""; } } ########################################### elsif (defined param('edd')) { if ($dannyd{$g}) { $url = qq( ); $end_a=""; } } else { if ($dannyd{$g}) { $url = qq( ); $end_a=""; } } $tables.= qq(\n \n $url $g $end_a ) ; $g++; $w++; } else { $tables.= qq( \n\n   ) ; } if ($_ % 7 == 0 && $_ != 0) { $tables.="\n"; } } dbmclose(%dannyd); } sub dayofweek { my ($day, $month, $year) = @_; # When is doomsday this year? my $doomsday = doomsday( $year ); # And when is doomsday this month? my $baseday; if ( $month == 2 ) { $baseday = isleap($year) ? 29 : 28; # For even months, the Nth day of the Nth month is doomsday } elsif ( $month % 2 == 0 ) { $baseday = $month; # I work from 9-5 at the 7-11 } elsif ( $month == 5 ) { $baseday = 9; } elsif ( $month == 9 ) { $baseday = 5; } elsif ( $month == 7 ) { $baseday = 11; } elsif ( $month == 11 ) { $baseday = 7; # march } elsif ( $month == 3 ) { $baseday = 7; # January } elsif ( $month == 1 ) { $baseday = isleap($year) ? 32 : 31; } # And how far after that are we? my $on = $day - $baseday; $on = $on % 7; # And, just to make sure it's positive ... $on = ($on + 7) % 7; # So, the day of the week should be doomsday, plus however far on we are return ($doomsday + $on) % 7; } sub isleap { my ($year) = @_; return 1 if ( ($year % 4 == 0) && ( ($year % 100) || ($year % 400 == 0) ) ); return 0; } sub doomsday { $yearss = @_[0] ; # All your base ... my %base = ( 1500 => 3, 1600 => 2, 1700 => 0, 1800 => 5, 1900 => 3, 2000 => 2, 2100 => 0, 2200 => 5, 2300 => 3, 2400 => 2, 2500 => 0, 2600 => 5 ); my $century = $yearss - ( $yearss % 100 ); if ($century < 1500 || $century > 2600) { warn "Date is outside the range that I know about."; exit(); } my $base = $base{$century}; my $twelves = int ( ( $yearss - $century )/12); my $rem = ( $yearss - $century ) % 12; my $fours = int ($rem/4); my $doomsday = $base + ($twelves + $rem + $fours)%7; # ... are belong to Dooms day - Danny D ! return $doomsday % 7; } sub make { doTables() ; $hash_mon = setMonth() ; $hash_year = setYear() ; $hash_evnt = doEvents() ; #else { $hash_evnt =" "; } theDetails() ; } sub theDetails { if ($eventDetails) { $eventDate="Events for: @days[dayofweek($day_in,$mon_in,$year_in)], @months[$mon_in - 1] $day_in, $year_in " ; } ### else { $eventDate ="@days[$m_day], @months[$mon - 1] $digitday, $myyear " ; } $gen_cal =qq( $tables
  $eventDate  
$hash_evnt
 SELECT MONTH AND YEAR :

); } sub doEvents { # default() ; $my_evnt .=$myyear ; $my_evnt .=$mon ; $my_evnt .=$digitday ; dbmopen(%eve, "$eventsPath/$my_evnt", 0777) || die "Can't open DBM Dan (line 41 ) ---> $! " ; $ww=0; foreach (keys %eve) { @tmp[$ww] = $_ ; $ww++ ; } foreach (sort { $b <=> $a } @tmp) { $h_evnt.=qq(
$eve{$_}

); } return $h_evnt ; } sub setDay { my $m_day =`date +%w`; $m_day =~s/^0|\s|\n//g; foreach (1..31) { $ddd =" " ; if ($m_day == $_) { $ddd =~s/\/ " ; if ($c == $danclark) { $p =~s/\/