#!/usr/bin/perl -Tw use strict; use CGI; # Set PATH to cal ######################### $ENV{'PATH'} = '/usr/bin'; # The directory to store entries for dates ######################### my $date_dir = "dates/"; my $cgi = new CGI; my $cal_prog = '/usr/bin/cal'; # A style sheet ######################### my $cal_style= <<"EOT"; EOT # Colors for the backgrounds ########################## my $month_bg_color='#ff0000'; my $week_bg_color='#0000ff'; my $date_bg_color='#e0e0e0'; my $year = 2000; my $num_of_months = 12; # The number of months shown per row ########################## my $months_per_row = 3; print $cgi->header(), $cgi->start_html( -title=>'Calendar', -BGCOLOR=>'#ffffff', -style=>{-code=>$cal_style} ); print $cgi->h1('Calendar for the year '. $year); print ''; # A table for all months ############################ my $row_count = 1; for(;$row_count <= $num_of_months ; $row_count++){ open(CAL,"$cal_prog -m $row_count $year |") || die "Cannot open CAL: $!\n"; my @month = ; close(CAL); print ''; if($row_count % $months_per_row == 0){ print ''; } } print '
'; my $month_name = splice(@month,0,1); $month_name =~ s/^\s+(\w+) \d+$/$1/g; my $days = splice(@month,0,1); # A table for each of the months ################################### print '', '', ''; # Mo Tu We Th Fr Sa Su ############################### my @day_names = split(" ",$days); foreach(@day_names){ print ''; } # Start spitting out the dates ############################### foreach(@month){ s/[^\d] /\-\- /g; s/ (\d)( |\n)/0$1$2/g; print ''; my @dates = split(/ /g, $_); foreach(@dates){ unless(/^--/){ s/\n$//; chomp($month_name); my $date_file = $date_dir . $month_name . $_; my @date_stats = stat($date_file); # Check for entries per date, if any highlight it ################################################# if( -e $date_file && $date_stats[7] > 0){ print ''; } else{ print ''; } } print ''; } print '
', $cgi->h3($month_name), '
',$_,'
',$_; } else{ print '',$_; } print ' --
'; print '
'; print $cgi->end_html; #### #!/usr/bin/perl use strict; use Fcntl; use CGI; my $cgi = new CGI; my $date_dir = 'dates/'; # Check month & date params ############################### unless($cgi->param('month') =~ /\w+/ && $cgi->param('date') =~ /\d{2}/){ die "Invalid parameters!\n"; } my $date_file = $date_dir . $cgi->param('month') . $cgi->param('date'); my $file_identifier = '### CALENDAR.PL DATE FILE ' . $cgi->param('month') . $cgi->param('date'); # Style sheet ######################### my $cal_style= <<"EOT"; EOT # Some color settings ########################## my $time_bg_color = '#ff0000'; my $entry_bg_color = '#efefef'; my $alt_entry_bg_color = '#c0c0c0'; print $cgi->header(), $cgi->start_html( -title=>'Calendar', -BGCOLOR=>'#ffffff', -style=>{ -code=>$cal_style }, ); print $cgi->h2( 'Entries for ', $cgi->param('month'),'-', $cgi->param('date'),'-2000', ); # Read in old entries if any ############################# my(@entries); if(-e $date_file){ sysopen(ENTRIES,$date_file,O_RDONLY) || die "Cannot open $date_file: $!\n"; flock(ENTRIES,1); @entries = ; close(ENTRIES); } # Check to see if requested date file is valid ################################################ unless(splice(@entries,0,1) eq $file_identifier){ die "Not a valid date file!\n"; } print ''; # Start day at $time_count ########################## my $time_count = 8; for(;$time_count < 25; $time_count++){ print ''; # A different coloring for each line ###################################### print ' '; } else{ print ' bgcolor="', $alt_entry_bg_color, '"> '; } # A link to add an entry ############################### print '[ADD ENTRY |'; # ..and to remove one print ' REMOVE] '; print ''; } print '
  ', $time_count, ':00   '; } else{ print ' bgcolor="', $alt_entry_bg_color, '"> '; } foreach(@entries){ if(/^$time_count:([^\n].+)/){ print $1 . '  '; } } print '
'; print $cgi->p; print 'Back to the calendar'; print $cgi->end_html; ##
## #!/usr/bin/perl use CGI; use strict; use Fcntl; my $cgi = new CGI; my $date_dir = 'dates/'; # Check month, date & time params ############################### unless($cgi->param('month') =~ /\w+/ && $cgi->param('date') =~ /\d{2}/ && $cgi->param('time') =~ /\d{1,2}/){ die "Invalid parameters!\n"; } my $date_file = $date_dir . $cgi->param('month') . $cgi->param('date'); my $file_identifier = '### CALENDAR.PL DATE FILE ' . $cgi->param('month') . $cgi->param('date'); my $new_entry; my $redirect = 'showDate.pl?month=' . $cgi->param('month') . '&date=' . $cgi->param('date'); # If we just added an entry write it and bounce back ####################################################### if($cgi->param('action') eq 'Add new entry'){ sysopen(DATE_FILE,$date_file, O_RDWR | O_CREAT,0666) || die "Cannot open $date_file: $!\n"; flock(DATE_FILE,2); my @old_entries = ; # Check to see if requested date file is valid ################################################ unless(splice(@old_entries,0,1) eq $file_identifier){ die "Not a valid date file!\n"; } seek(DATE_FILE, 0, 0); truncate(DATE_FILE, 0); $new_entry = $cgi->param('time') . ":" . $cgi->param('entry'); push(@old_entries,$new_entry); print DATE_FILE $file_identifier foreach(@old_entries){ unless(/^\s$/){ print DATE_FILE $_ . "\n"; } } close(DATE_FILE); print $cgi->redirect($redirect); } # Remove an entry ############################### elsif($cgi->param('action') eq 'rem'){ sysopen(DATE_FILE,$date_file,O_RDWR) || die "Cannot open $date_file: $!\n"; flock(DATE_FILE,2); my(@old_entries,@new_entries); @old_entries = ; # Check to see if requested date file is valid ################################################ unless(splice(@old_entries,0,1) eq $file_identifier){ die "Not a valid date file!\n"; } my $time = $cgi->param('time'); while(@old_entries){ unless(/^$time:.+/){ push(@new_entries,$_); } } seek(DATE_FILE, 0, 0); truncate(DATE_FILE, 0); print DATE_FILE $file_identifier; foreach(@new_entries){ unless(/^\s$/){ print DATE_FILE $_ . "\n"; } } close(DATE_FILE); print $cgi->redirect($redirect); } # The form to add an entry ################################# else{ print $cgi->header(), $cgi->start_html( -title=>'Add entry', -BGCOLOR=>'#ffffff', ); print $cgi->h2( $cgi->param('month'),'-', $cgi->param('date'),'-2000 at', $cgi->param('time'),':00', ); print $cgi->start_form( -action=>'alterDate.pl', -method=>'post', ); print $cgi->p, "Enter text:", $cgi->br, $cgi->textfield( -name=>'entry', -size=>'40', ), $cgi->p, $cgi->submit( -value=>'Add new entry', -name=>'action', ), '', '', ''; print $cgi->end_form(); print $cgi->end_html(); }