#!/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(); }