#!/usr/bin/perl ############################################################################## # PROGRAM : BuildACommunity.com Perl Module # # VERSION : 3.1 # # # # NOTES : # ############################################################################## # All source code, images, programs, files included in this distribution # # Copyright (c) 1999 -> 2017 # # Eric L. Pickup, Ecreations, BuildACommunity # # All Rights Reserved. # ############################################################################## # # # ------ DO NOT MODIFY ANYTHING BELOW THIS POINT !!! ------- # # # ############################################################################## use CGI::Carp qw(fatalsToBrowser); #use Time::HiRes qw(gettimeofday); #$PSTART = gettimeofday; use DB_File; require "./common.pm"; require "$GPath{'imagesize.pm'}"; $PROGRAM_NAME = "postcards.cgi"; &parse_FORM; if (-e "$GPath{'user.pm'}") { require "$GPath{'user.pm'}"; if ($FORM{'UserName'} && $FORM{'PassWord'}) { %IUSER = &get_user($FORM{'UserName'},$FORM{'PassWord'}); } $USERPRESENT = "T"; } if ($CONFIG{'POSTCARDS_SetMaxCardsByUserName'} eq "YES") { $CONFIG{'POSTCARD_max_cards'} = $POSTCARD_max_cards; } # Let's set some postcard specific variables... $mycgi = "$CONFIG{'CGI_DIR'}/$CONFIG{'POSTCARD_script_name'}"; $postcard_file = "$GPath{'ecard_data'}/postcards.txt"; $postcard_db = "$GPath{'ecard_data'}/postcards.db"; $banned_file = "$GPath{'ecard_data'}/banned.txt"; $sender_file = "$GPath{'ecard_data'}/senders.txt"; $receivers_file = "$GPath{'ecard_data'}/receivers.txt"; $sender_db = "$GPath{'ecard_data'}/senders.db"; $pc_database = "$GPath{'ecard_data'}/database.txt"; if ($ENV{'HTTP_USER_AGENT'} =~ /MSIE/i) {$ie = "T";} if ($CONFIG{'POSTCARDS_show_colors_page'} ne "YES") { $FORM{'Text_Color'} = $CONFIG{'text_color'}; $FORM{'Link_Color'} = $CONFIG{'link_color'}; $FORM{'BackGround_Color'} = $CONFIG{'win_color'}; } else { $FORM{'Text_Color'} = $FORM{'Text_Color'} || $CONFIG{'postcard_default_text_color'}; $FORM{'Link_Color'} = $FORM{'Link_Color'} || $CONFIG{'postcard_default_link_color'}; $FORM{'BackGround_Color'} = $FORM{'BackGround_Color'} || $CONFIG{'postcard_default_win_color'}; } if (($FORM{'ct'} ne "") && ($FORM{'action'} eq "")){ $FORM{'ticket'} = $FORM{'ct'}; &pickup; &print_output('pc_pickup_page'); } if (($FORM{'action'} eq "Back To The Main Post Office Page!") ||($FORM{'action'} eq "")) { if ($CONFIG{'POSTCARDS_show_intropage'} eq "YES") { &login; &print_output('pc_postcard_front_page'); } else { require "$GPath{'postcards_pictures.pm'}"; &print_pictures; &print_output('pc_pictures'); } } foreach $k (keys %FORM) { $FORM{$k} =~ s/"/\"/g; $FORM{$k} =~ s/\cM//g; } $FORM{'text'} =~ s/\n\n/

/g; $FORM{'text'} =~ s/\n//g; if ($FORM{'UserName'} ne "") { ($found, %IUSER) = &get_user_4_forums($FORM{'UserName'},$FORM{'PassWord'}); $Member = $Found; } $FORM{'email'} =~ s/(\cM|\n)+/!!/g; if ($FORM{'action'} eq "Pick up Your Postcard") { &pickup; &print_output('pc_pickup_page'); } if (($FORM{'action'} =~ /Send A Postcard To A Friend/i) || ($FORM{'action'} eq "Search For Cards") || ($FORM{'action'} eq "Send Another Postcard") || ($FORM{'action'} eq "Send $FORM{'recipient'} A Postcard") || ($FORM{'action'} eq "Change Your Picture") || ($FORM{'action'} eq "See More Cards") || ($FORM{'action'} eq "More Card Sets")) { require "$GPath{'postcards_pictures.pm'}"; &print_pictures; &print_output('pc_pictures'); } if (($FORM{'filename'} eq "") && ($FORM{'imageurl'} eq "")) { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/blankfields.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/blankfields.tmplt"; &print_output('error'); } if ((($FORM{'step'} eq "2") && ($FORM{'action'} eq "Next Step")) || ($FORM{'action'} eq "Send A Postcard")) { if ($CONFIG{'POSTCARDS_show_music_page'} eq "YES") { &music_page; } else { $FORM{'step'} = "3"; $FORM{'action'} = "Next Step"; } } if ($FORM{'action'} eq "Change Your Music") { &music_page; } if (($FORM{$FORM{'category'}} ne "NOTHING") && ($FORM{'format'} eq "Form-Based")) { $FORM{'sound'} = $FORM{$FORM{'category'}}; } if ($FORM{'sound'} eq "NONE") { $FORM{'sound'} = ""; } if (($FORM{'step'} eq "3") && ($FORM{'action'} eq "Next Step")) { if ($CONFIG{'POSTCARDS_show_colors_page'} eq "YES") { require($GPath{'postcards_colors.pm'}); &colors; &print_output('pc_colors'); } else { $FORM{'step'} = "4"; $FORM{'action'} = "Next Step"; } } if ($FORM{'action'} eq "Change Your Colors") { require($GPath{'postcards_colors.pm'}); &colors; &print_output('pc_colors'); } if (($FORM{'step'} eq "4") && ($FORM{'action'} eq "Next Step")) { &text_page; } if ($FORM{'action'} eq "Change Your Text") { &text_page; } #if ($FORM{'text'} eq "") { # my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/blankfields.tmplt"); # $BODY = $template->fill_in; # $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/blankfields.tmplt"; # &print_output('error'); #} if (($FORM{'step'} eq "5") && ($FORM{'action'} eq "Next Step")) { &addresses_page; } if ($FORM{'action'} eq "Change The Addresses or Names") { &addresses_page; } #if (($FORM{'sender'} eq "") || ($FORM{'senderemail'} eq "") || ($FORM{'email'} eq "")) { # my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/blankfields.tmplt"); # $BODY = $template->fill_in; # $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/blankfields.tmplt"; # &print_output('error'); #} if ($FORM{'senderemail'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $FORM{'senderemail'} !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/error_invalidemail.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/error_invalidemail.tmplt"; &print_output('error'); } if ($FORM{'email'} =~ /!!/) { $FORM{'email'} =~ s/ //g; $FORM{'email'} =~ s/\n//g; $Multiple = "T"; } else { if (($FORM{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $FORM{'email'} !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/)) { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/error_invalidemail.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/error_invalidemail.tmplt"; &print_output('error'); } } if ($FORM{'action'} =~ /Java/i) { $FORM{'filename'} =~ s/!!.*//; &print_java; &print_output('java_select'); } if ($FORM{'javaeffect'} ne "") {$FORM{'filename'} .= "!!$FORM{'javaeffect'}";} if ($FORM{'action'} eq "Preview Your Card") { &preview; &print_output('pc_preview'); } if ($FORM{'action'} eq "Send Your Card") { $| = 1; &send_card; $no_exit = "T"; &print_output('pc_sent'); &sent_mail_notification; exit; } sub addresses_page{ &get_addresses; &print_output('pc_addresses'); } sub music_page { &print_music; &print_output('pc_music'); } sub colors_page { require "$GPath{'postcards_colors.pm'}"; &colors; &print_output('pc_colors'); } sub text_page { &print_text; &print_output('pc_text'); } sub pickup { &lock("postcards"); open(POSTCARDS, "$postcard_file") || die $!; # $postcard_file is defined in the configuration section. while() { @line = split(/\t/, $_); if ( $line[0] eq "$FORM{'ticket'}" ) { $ticket_match = 'true'; $FORM{'filename'} = $line[1]; $FORM{'sound'} = $line[2]; $FORM{'sender'} = $line[3]; $FORM{'senderemail'} = $line[4]; $FORM{'recipient'} = $line[5]; $FORM{'email'} = $line[6]; $FORM{'imageurl'} = $line[7]; $FORM{'Text_Color'} = $line[8]; $FORM{'Link_Color'} = $line[9]; $FORM{'BackGround_Color'} = $line[10]; $FORM{'BackGround'} = $line[11]; $FORM{'Icon'} = $line[12]; $FORM{'UserName'} = $line[13]; $FORM{'respemail'} = $line[14]; $FORM{'PickupPage'} = $line[15]; $FORM{'CardSentRedirect'} = $line[16]; @text = @line; for (0..15) { shift(@text); } last; } } close(POSTCARDS); &unlock("postcards"); if ( $ticket_match ne 'true' ) { &no_ticket_error; } if ($FORM{'respemail'} eq "") { &pickedup_mail_notification; } &view_card; } sub card_sent { } sub view_card { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/view.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/view.tmplt"; } sub no_ticket_error { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/error_noticket.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/error_noticket.tmplt"; &print_output('error'); } sub send_card { &save_postcard_info(); &card_sent; } sub preview { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/preview.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/preview.tmplt"; } sub get_addresses { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/addresses.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/addresses.tmplt"; } sub print_text { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/text.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/text.tmplt"; } sub print_music { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/music.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/music.tmplt"; } sub print_java { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/java.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/java.tmplt"; } sub login { my $template = new Text::Template (DELIMITERS => [$open_deliminator, $close_deliminator], TYPE => FILE, SOURCE => "$GPath{'source_templates'}/ecardspro/frontpage.tmplt"); $BODY = $template->fill_in; $LOWLEVELTEMPLATE = "$GPath{'source_templates'}/ecardspro/frontpage.tmplt"; } sub sent_mail_notification { open (BANNED, "$banned_file"); @banned = ; close(BANNED); # $CONFIG{'POSTCARD_max_cards'} = 10; # print "Content-type: text/html\n\n"; $fn = "$GPath{'ecard_data'}/postcard_email.txt"; open(FILE, "$fn") || &diehtml("I can't read $fn"); @EMAIL = ; close(FILE); # print "FORM = $FORM{'email'}\n MAX CARDS = $CONFIG{'POSTCARD_max_cards'}"; (@emails) = split(/!!/, $FORM{'email'}); my $count = 0; if ($CONFIG{'POSTCARD_max_cards'} eq "") { $CONFIG{'POSTCARD_max_cards'} = 1; } $CONFIG{'POSTCARD_max_cards'}++; foreach $address (@emails) { my $email_banned = undef; foreach $email_address (@banned) { $email_address =~ s/(\n|\cM)//g; if ($email_address =~ /^$address$/i) { $email_banned = "T"; } } if (! $email_banned) { # print "|$address|\n TEST: $count < $CONFIG{'POSTCARD_max_cards'}"; $address =~ s/ //g; $count++; if ($count < $CONFIG{'POSTCARD_max_cards'}) { &send_enote; } } } } sub send_enote { # print "

sent to $address


\n"; if ($address !~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $address =~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) { # print "

sent to $address
SERVER: $CONFIG{'mail_cmd'}
From: $CONFIG{'email'}


\n"; # print "SENDING MAIL!\n"; open (MAIL, "| $CONFIG{'mail_cmd'}") || &diehtml("I can't open sendmail\n"); # open (MAIL, "| /usr/bin/sendmail -t") || &diehtml("I can't open sendmail\n"); print MAIL "To: $address\n"; print MAIL "From: $CONFIG{'email'}\n"; $CONFIG{'POSTCARDS_message_sent'} =~ s/\[RECIPIENT\]/$FORM{'email'}/g; $CONFIG{'POSTCARDS_message_sent'} =~ s/\[SENDER\]/$FORM{'sender'}/g; print MAIL "Subject: $CONFIG{'POSTCARDS_message_sent'}\n"; foreach my $line(@EMAIL) { $line =~ s/\[POSTCARDPAGE\]/$CONFIG{'POSTCARDS_url'}/g; $line =~ s/\[POSTCARDPICKUP\]/$CONFIG{'POSTCARDS_url'}\?ct=$FORM{'ticket'}/g; $line =~ s/\[SENDER\]/$FORM{'sender'}/g; $line =~ s/\[TICKET\]/$FORM{'ticket'}/g; $line =~ s/\[RECIPIENT\]/$FORM{'email'}/g; print MAIL "$line"; } print MAIL "\n\n\n"; close(MAIL); # print "

DONE SENDING MAIL!

\n"; # print "To: $address\n"; # print "From: $CONFIG{'email'}\n"; # print "Subject: $CONFIG{'POSTCARDS_message_sent'}\n"; # # foreach $line(@EMAIL) { # $line =~ s/\[POSTCARDPAGE\]/$CONFIG{'POSTCARDS_url'}/g; # $line =~ s/\[POSTCARDPICKUP\]/$CONFIG{'POSTCARDS_url'}\?ct=$FORM{'ticket'}/g; # $line =~ s/\[SENDER\]/$FORM{'sender'} /g; # $line =~ s/\[TICKET\]/$FORM{'ticket'} /g; # $line =~ s/\[RECIPIENT\]/$FORM{'email'} /g; # print "$line"; # } # print "\n\n\n"; } } sub pickedup_mail_notification { open (BANNED, "$banned_file"); @banned = ; close(BANNED); my $email_banned = undef; foreach $email_address (@banned) { $email_address =~ s/(\n|\cM)//g; if (($email_address =~ /^$FORM{'senderemail'}$/i) || ($email_address =~ /^$FORM{'email'}$/i)) { $email_banned = "T"; } } if (! $email_banned) { $fn = "$GPath{'ecard_data'}/postcard_recieved_email.txt"; open(FILE, "$fn") || &diehtml("I can't read $fn"); @EMAIL = ; close(FILE); open (MAIL, "| $CONFIG{'mail_cmd'}") || &diehtml("I can't open sendmail\n"); print MAIL "To: $FORM{'senderemail'}\n"; print MAIL "From: $CONFIG{'email'}\n"; $CONFIG{'POSTCARDS_message_received'} =~ s/\[RECIPIENT\]/$FORM{'email'}/g; $CONFIG{'POSTCARDS_message_received'} =~ s/\[SENDER\]/$FORM{'sender'}/g; print MAIL "Subject: $CONFIG{'POSTCARDS_message_received'}\n\n"; $FORM{'email'} =~ s/!!/,/g; foreach $line(@EMAIL) { $line =~ s/\[POSTCARDPAGE\]/$CONFIG{'POSTCARDS_url'}/g; $line =~ s/\[POSTCARDPICKUP\]/$CONFIG{'POSTCARDS_url'}\?ct=$FORM{'ticket'}/g; $line =~ s/\[SENDER\]/$FORM{'sender'}/g; $line =~ s/\[TICKET\]/$FORM{'ticket'}/g; $line =~ s/\[RECIPIENT\]/$FORM{'email'}/g; print MAIL "$line"; } print MAIL "\n\n\n"; close(MAIL); } } sub save_postcard_info { local (@postcard_text, $line ); open (BANNED, "$banned_file"); @banned = ; close(BANNED); $email_banned = "F"; foreach $email_address (@banned) { $email_address =~ s/(\n|\cM)//g; if (($email_address =~ /^$FORM{'senderemail'}$/i) || ($email_address =~ /^$FORM{'email'}$/i)) { $email_banned = "T"; } } if ($email_banned ne "T") { $imagefilename = $FORM{'filename'}; $FORM{'ticket'} = time . "." . $$; # tickets are "time.pid" &lock("postcards"); open(POSTCARD_FILE, ">> $postcard_file") || &diehtml("I can't create $postcard_file: $!"); print POSTCARD_FILE "$FORM{'ticket'}\t"; print POSTCARD_FILE "$imagefilename\t"; print POSTCARD_FILE "$FORM{'sound'}\t"; print POSTCARD_FILE "$FORM{'sender'}\t"; print POSTCARD_FILE "$FORM{'senderemail'}\t"; print POSTCARD_FILE "$FORM{'recipient'}\t"; print POSTCARD_FILE "$FORM{'email'}\t"; print POSTCARD_FILE "$FORM{'imageurl'}\t"; print POSTCARD_FILE "$FORM{'Text_Color'}\t"; print POSTCARD_FILE "$FORM{'Link_Color'}\t"; print POSTCARD_FILE "$FORM{'BackGround_Color'}\t"; print POSTCARD_FILE "$FORM{'BackGround'}\t"; print POSTCARD_FILE "$FORM{'Icon'}\t"; print POSTCARD_FILE "$FORM{'UserName'}\t"; print POSTCARD_FILE "$FORM{'respemail'}\t"; print POSTCARD_FILE "$FORM{'PickupPage'}\t"; print POSTCARD_FILE "$FORM{'CardSentRedirect'}"; @postcard_text = split(/\n/, $FORM{'text'} ); foreach $line (@postcard_text) { print POSTCARD_FILE "\t$line"; } print POSTCARD_FILE "\n"; # end of the line close(POSTCARD_FILE); $time = time; open(FILE, ">> $sender_file") || &diehtml("I can't create $sender_file: $!"); print FILE "$time\|\|$FORM{'sender'}\|\|$FORM{'senderemail'}\n"; close(FILE); open(FILE, ">> $receivers_file") || &diehtml("I can't create $receivers_file: $!"); (@emails) = split(/!!/, $FORM{'email'}); foreach $ad (@emails) { print FILE "$time\|\|$FORM{'recipient'}\|\|$ad\n"; } close(FILE); &unlock("postcards"); } } sub maintain_state { my @exempt = @_; my %fields = ( ref => "1", refered_search => "1", filename => "1", sound => "1", text => "1", page => "1", sender => "1", senderemail => "1", recipient => "1", email => "1", preview => "1", view => "1", search => "1", cat => "1", letter => "1", imageurl => "1", Text_Color => "1", Link_Color => "1", BackGround_Color => "1", BackGround => "1", Icon => "1", UserName => "1", PassWord => "1", PickupPage => "1", CardSentRedirect => "1", respemail => "1", ); foreach my $e (@exempt) { $e =~ s/(\n|\cM)//g; delete $fields{$e}; } my $STATE = undef; if ($fields{'ref'}) {$STATE .= "\n";} if ($fields{'view'}) {$STATE .= "\n";} if ($fields{'cat'}) {$STATE .= "\n";} if ($fields{'letter'}) {$STATE .= "\n";} if ($fields{'refered_search'}) {$STATE .= "\n";} if ($fields{'filename'}) {$STATE .= "\n";} if ($fields{'sound'}) {$STATE .= "\n";} if ($fields{'text'}) {$STATE .= "\n";} if ($fields{'page'}) {$STATE .= "\n";} if ($fields{'sender'}) {$STATE .= "\n";} if ($fields{'senderemail'}) {$STATE .= "\n";} if ($fields{'recipient'}) {$STATE .= "\n";} if ($fields{'preview'}) {$STATE .= "\n";} if ($fields{'email'}) {$STATE .= "\n";} if ($fields{'imageurl'}) {$STATE .= "\n";} if ($fields{'search'}) {$STATE .= "\n";} if ($fields{'Text_Color'}) {$STATE .= "\n";} if ($fields{'Link_Color'}) {$STATE .= "\n";} if ($fields{'BackGround_Color'}) {$STATE .= "\n";} if ($fields{'BackGround'}) {$STATE .= "\n";} if ($fields{'Icon'}) {$STATE .= "\n";} if ($fields{'UserName'}) {$STATE .= "\n";} if ($fields{'PassWord'}) {$STATE .= "\n";} if ($fields{'PickupPage'}) {$STATE .= "\n";} if ($fields{'CardSentRedirect'}) {$STATE .= "\n";} if ($fields{'respemail'}) {$STATE .= "\n";} return $STATE; }