#!/usr/bin/perl ############################################################################## # WWWBoard Version 2.0 ALPHA 2 # # Copyright 1996 Matt Wright mattw@worldwidemart.com # # Created 10/21/95 Last Modified 11/25/95 # # Scripts Archive at: http://www.worldwidemart.com/scripts/ # ############################################################################## # COPYRIGHT NOTICE # # Copyright 1996 Matthew M. Wright All Rights Reserved. # # # # WWWBoard may be used and modified free of charge by anyone so long as # # this copyright notice and the comments above remain intact. By using this # # code you agree to indemnify Matthew M. Wright from any liability that # # might arise from it's use. # # # # Selling the code for this program without prior written consent is # # expressly forbidden. In other words, please ask first before you try and # # make money off of my program. # # # # Obtain permission before redistributing this software over the Internet or # # in any other medium. In all cases copyright and header must remain intact.# ############################################################################## # # # Copyright 1998 Steven Miller Multipage Addition # # Website: http://www.vaultworld.com/cgi-scripts # # Email: webmaster@vaultworld.com # # Note to Self => Changing commented CODE changes nothing. # ############################################################################## # Define Variables $basedir = "//wwwboard"; $baseurl = "http:///wwwboard"; $cgi_url = "http:///cgi-bin/multipageboard.pl"; $mesgdir = "messages"; $datafile = "data.txt"; $mesgfile = "baseboard.html"; $faqfile = "faq.html"; $ext = "html"; $title = "Multipage Board"; # Done ########################################################################### ########################################################################### # Configure Options $show_faq = 1; # 1 - YES; 0 = NO $allow_html = 1; # 1 = YES; 0 = NO $quote_text = 1; # 1 = YES; 0 = NO $subject_line = 0; # 0 = Quote Subject Editable; 1 = Quote Subject # UnEditable; 2 = Don't Quote Subject, Editable. $use_time = 1; # 1 = YES; 0 = NO $body_eval="bgcolor= \"0606f9\" text= \"ffff00\" link= \"ffffff\" vlink= \"cdcdcd\" "; ########################################################################### # New Variables and Multi Page Layout Information # Create by Steven Miller Jr Email: webmaster@vaultworld.com # Site http://www.vaultworld.com/cgi-scripts # Last Updated: 2 Mar 98 ################### Basic Items ################################ $ext2 = ".html"; $pagename = ""; @page_contents = ""; $countpages = 0; # The Current Page Count $pages_needed = 0; # Total Number of Pages Needed $one = 1; ################ Customize Multipage Appearance############################# #Config Items $use_proboard = 1; # 1 = YES; 0 = NO $pageprefix = "multipage"; #This is the name of the multiply files ex polevault1.html $firstpagename = $pageprefix . $one . $ext2; $perpagedisplay = 5; #Display the Number of Original Post Per Page #Note qq? and qq+ same as " but eliminates all \/ /" Stuff $pagedirectoryfaq = qq?
[ Post Message ][ FAQ ][One Page Version][Multi Page Version] \n
?; $pagedirectory = qq?
[ Post Message ][One Page Version][Multi Page Version]\n
?; $counter = qq+ +; ###Ads Banner Option $show_ads = 0; #1 = Yes 0 = No $adsbanner = qq+ +; # Done ########################################################################### # Get the Data Number &get_number; # Get Form Information &parse_form; # Put items into nice variables &get_variables; # Open the new file and write information to it. &new_file; # Open the Main WWWBoard File to add link &main_page; # Now Add Thread to Individual Pages if ($num_followups >= 1) { &thread_pages; } # Create on the fly Main WWWBoard File if($use_proboard) { &on_the_fly_main_page; } # Return the user HTML if($use_proboard) { &return_proboad; } else { &return_html; } # Increment Number &increment_num; ############################ # Get Data Number Subroutine sub get_number { open(NUMBER,"$basedir/$datafile"); $num = ; close(NUMBER); if ($num == 99999) { $num = "1"; } else { $num++; } } ####################### # Parse Form Subroutine sub parse_form { # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; if ($allow_html != 1) { $value =~ s/<([^>]|\n)*>//g; } else { unless ($name eq 'body') { $value =~ s/<([^>]|\n)*>//g; } } $FORM{$name} = $value; } } ############### # Get Variables sub get_variables { if ($FORM{'followup'}) { $followup = "1"; @followup_num = split(/,/,$FORM{'followup'}); $num_followups = @followups = @followup_num; $last_message = pop(@followups); $origdate = "$FORM{'origdate'}"; $origname = "$FORM{'origname'}"; $origsubject = "$FORM{'origsubject'}"; } else { $followup = "0"; } if ($FORM{'name'}) { $name = "$FORM{'name'}"; $name =~ s/"//g; $name =~ s///g; $name =~ s/\&//g; } else { &error(no_name); } if ($FORM{'email'} =~ /.*\@.*\..*/) { $email = "$FORM{'email'}"; } if ($FORM{'subject'}) { $subject = "$FORM{'subject'}"; $subject =~ s/\&/\&\;/g; $subject =~ s/"/\"\;/g; } else { &error(no_subject); } if ($FORM{'url'} =~ /.*\:.*\..*/ && $FORM{'url_title'}) { $message_url = "$FORM{'url'}"; $message_url_title = "$FORM{'url_title'}"; } if ($FORM{'img'} =~ /.*tp:\/\/.*\..*/) { $message_img = "$FORM{'img'}"; } if ($FORM{'body'}) { $body = "$FORM{'body'}"; $body =~ s/\cM//g; $body =~ s/\n\n/

/g; $body =~ s/\n/
/g; $body =~ s/<//g; $body =~ s/"/"/g; } else { &error(no_body); } if ($quote_text == 1) { $hidden_body = "$body"; $hidden_body =~ s//>/g; $hidden_body =~ s/"/"/g; } ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } $month = ($mon + 1); @months = ("January","February","March","April","May","June","July","August","September","October","November","December"); if ($use_time == 1) { $date = "$hour\:$min\:$sec $month/$mday/$year"; } else { $date = "$month/$mday/$year"; } chop($date) if ($date =~ /\n$/); $long_date = "$months[$mon] $mday, 19$year at $hour\:$min\:$sec"; } ##################### # New File Subroutine sub new_file { open(NEWFILE,">$basedir/$mesgdir/$num\.$ext") || die $!; print NEWFILE "\n"; print NEWFILE " \n"; print NEWFILE " $subject\n"; print NEWFILE " \n"; print NEWFILE " \n"; print NEWFILE "

\n"; print NEWFILE "

$subject

\n"; print NEWFILE "
\n"; print NEWFILE "
\n"; if ($show_faq == 1) { print NEWFILE "
[ Follow Ups ] [ Post Followup ] [ $title ] [ FAQ ]
\n"; } else { print NEWFILE "
[ Follow Ups ] [ Post Followup ] [ $title ]
\n"; } print NEWFILE "

\n"; print NEWFILE "Posted by "; if ($email) { print NEWFILE "$name on $long_date:

\n"; } else { print NEWFILE "$name on $long_date:

\n"; } if ($followup == 1) { print NEWFILE "In Reply to: $origsubject posted by "; if ($origemail) { print NEWFILE "$origname on $origdate:

\n"; } else { print NEWFILE "$origname on $origdate:

\n"; } } if ($message_img) { print NEWFILE "

\n"; } print NEWFILE "$body\n"; print NEWFILE "
\n"; if ($message_url) { print NEWFILE "

\n"; } print NEWFILE "

\n"; print NEWFILE "Follow Ups:
\n"; print NEWFILE "

    \n"; print NEWFILE "
\n"; print NEWFILE "

\n"; print NEWFILE "Post a Followup

\n"; print NEWFILE "

\n"; print NEWFILE "\n"; print NEWFILE "\n"; if ($email) { print NEWFILE "\n"; } print NEWFILE "\n"; print NEWFILE "\n"; print NEWFILE "Name:
\n"; print NEWFILE "E-Mail:

\n"; if ($subject_line == 1) { if ($subject_line =~ /^Re:/) { print NEWFILE "\n"; print NEWFILE "Subject: $subject

\n"; } else { print NEWFILE "\n"; print NEWFILE "Subject: Re: $subject

\n"; } } elsif ($subject_line == 2) { print NEWFILE "Subject:

\n"; } else { if ($subject =~ /^Re:/) { print NEWFILE "Subject:

\n"; } else { print NEWFILE "Subject:

\n"; } } print NEWFILE "Comments:
\n"; print NEWFILE "\n"; print NEWFILE "

\n"; print NEWFILE "Optional Link URL:
\n"; print NEWFILE "Link Title:
\n"; print NEWFILE "Optional Image URL:

\n"; print NEWFILE " \n"; print NEWFILE "


\n"; if ($show_faq == 1) { print NEWFILE "
[ Follow Ups ] [ Post Followup ] [ $title ] [ FAQ ]
\n"; } else { print NEWFILE "
[ Follow Ups ] [ Post Followup ] [ $title ]
\n"; } print NEWFILE "\n"; close(NEWFILE); } ############################### # Main WWWBoard Page Subroutine sub main_page { open(MAIN,"$basedir/$mesgfile") || die $!; @main =
; close(MAIN); open(MAIN,">$basedir/$mesgfile") || die $!; if ($followup == 0) { foreach $main_line (@main) { if ($main_line =~ //) { print MAIN "\n"; print MAIN "
  • $subject - $name $date\n"; print MAIN "(0)\n"; print MAIN "
      \n"; print MAIN "
    \n"; } else { print MAIN "$main_line"; } } } else { foreach $main_line (@main) { $work = 0; if ($main_line =~ /
      /) { print MAIN "
        \n"; print MAIN "
      • $subject - $name $date\n"; print MAIN "(0)\n"; print MAIN "
          \n"; print MAIN "
        \n"; } elsif ($main_line =~ /\((.*)\)/) { $response_num = $1; $num_responses = $2; $num_responses++; foreach $followup_num (@followup_num) { if ($followup_num == $response_num) { print MAIN "($num_responses)\n"; $work = 1; } } if ($work != 1) { print MAIN "$main_line"; } } else { print MAIN "$main_line"; } } } close(MAIN); } ############################################ # Add Followup Threading to Individual Pages sub thread_pages { ## Need to capture the number of the current followup. ## First thing to do is get the original/first post ## this will enable use to slurp the whole thread from the ## body of the main message $original_post = $followup_num[0]; ## Add in the last follow message to have the thread include on it also splice(@followup_num, -1, 0, $num); ## Open the main page and make a copy for later parsing ## open(MAIN,"$basedir/$mesgfile") || die $!; @maincopy =
        ; close(MAIN); ## Declare Array to hold Whole Thread #my @whole_thread_container; ## Parse the main page and slurp out the whole thread associated with ## the orginal post $number_of_lines_maincopy = @maincopy; @whole_thread_container = ""; @complete_threads = ""; ## Add in the last follow message to have the thread include on it also splice(@complete_threads, -1, 0, $num); my $detect = 0; #determine the number of main responses not replies for ($count = 0; $count < $number_of_lines_maincopy; $count++) { if ($maincopy[$count] =~ //) { $detect = 0; splice(@whole_thread_container, -1, 0, $maincopy[$count]); } if ($maincopy[$count] =~ // || $detect) { $detect = 1; splice(@whole_thread_container, -1, 0, $maincopy[$count]); #Slurp out all of the threads from the main page if ($maincopy[$count] =~ /*/) { $topvalue = $1; splice(@complete_threads, -1, 0, $topvalue); } } } ## Now take the whole_thread_container and replace the thread information ## in all of the pages affected by the follow-up foreach $followup_num (@complete_threads) { open(FOLLOWUP,"$basedir/$mesgdir/$followup_num\.$ext"); @followup_lines = ; close(FOLLOWUP); $detect = 0; open(FOLLOWUP,">$basedir/$mesgdir/$followup_num\.$ext"); foreach $followup_line (@followup_lines) { ## Look for where the Follow Ups End if ($followup_line =~ /Post a Followup/) { $detect = 0; ## Spit out the information in the @whole_thread_container foreach $whole_thread_container (@whole_thread_container) { #need to parse out the message directory $whole_thread_container =~ s($mesgdir/)(); print FOLLOWUP "$whole_thread_container"; } ## Make sure to reprint line previous to "Post a Follow" which ## seems easier to find on the page print FOLLOWUP "

        \n"; #print FOLLOWUP "$followup_line"; } ## Look for the Follow Ups begin if ($followup_line =~ /Follow Ups:/) { $detect = 1; print FOLLOWUP "$followup_line"; } if ($detect != 1) { print FOLLOWUP "$followup_line"; } } close(FOLLOWUP); } } sub return_html { print "Content-type: text/html\n\n"; print "Message Added: $subject\n"; print "

        Message Added: $subject

        \n"; print "The following information was added to the message board:


        \n"; print "Name: $name
        \n"; print "E-Mail: $email
        \n"; print "Subject: $subject
        \n"; print "Body of Message:

        \n"; print "$body

        \n"; if ($message_url) { print "Link: $message_url_title
        \n"; } if ($message_img) { print "Image:
        \n"; } print "Added on Date: $date

        \n"; print "


        \n"; print "
        [ Go to Your Message ] [ $title ]
        \n"; print "\n"; } sub increment_num { open(NUM,">$basedir/$datafile") || die $!; print NUM "$num"; close(NUM); } sub error { $error = $_[0]; print "Content-type: text/html\n\n"; if ($error eq 'no_name') { print "$title ERROR: No Name\n"; print "

        ERROR: No Name

        \n"; print "You forgot to fill in the 'Name' field in your posting. Correct it below and re-submit. The necessary fields are: Name, Subject and Message.


        \n"; &rest_of_form; } elsif ($error eq 'no_subject') { print "$title ERROR: No Subject\n"; print "

        ERROR: No Subject

        \n"; print "You forgot to fill in the 'Subject' field in your posting. Correct it below and re-submit. The necessary fields are: Name, Subject and Message.


        \n"; &rest_of_form; } elsif ($error eq 'no_body') { print "$title ERROR: No Message\n"; print "

        ERROR: No Message

        \n"; print "You forgot to fill in the 'Message' fieldin your posting. Correct it below and re-submit. The necessary fields are: Name, Subjectand Message.


        \n"; &rest_of_form; } else { print "ERROR! Undefined.
        Error:: $error\n"; } exit; } sub rest_of_form { print "\n"; if ($followup == 1) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "Name:
        \n"; print "E-Mail:

        \n"; if ($subject_line == 1) { print "\n"; print "Subject: $FORM{'subject'}

        \n"; } else { print "Subject:

        \n"; } print "Message:
        \n"; print "

        \n"; print "Optional Link URL:
        \n"; print "Link Title:
        \n"; print "Optional Image URL:

        \n"; print " \n"; print "

        \n"; print "

        \n"; if ($show_faq == 1) { print "
        [ Follow Ups ] [ Post Followup ] [ $title ] [ FAQ ]
        \n"; } else { print "
        [ Follow Ups ] [ Post Followup ] [ $title ]
        \n"; } print "\n"; } ######################################################################################### ######################################################################################### # Multi Board Additions ############################ # On the Fly main page sub on_the_fly_main_page { $numofmainresponses = 0; open(MAIN,"$basedir/$mesgfile") || die $!; @maincopy =
        ; close(MAIN); $number_of_lines_maincopy = @maincopy; #determine the number of main responses not replies for ($count = 0; $count < $number_of_lines_maincopy; $count++) { if ($maincopy[$count] =~ /*/) { $numofmainresponses++; $topvalue = $1; $count++; do { $count++; }while($maincopy[$count] !~ /*/); } } #determine the interger number of pages $pages_needed = $numofmainresponses / $perpagedisplay; $pages_needed_remander = $numofmainresponses % $perpagedisplay; #Store In Interger Format $pages_needed = ($pages_needed - ($pages_needed_remander/$perpagedisplay)); #Added one because a remainder if ($pages_needed_remander) { $pages_needed++; } #determine what type of pages to type if($numofmainresponses < $perpagedisplay) { #print only one page # Logic: Begin Storing Lines after first top and until bottom tag is found $detect = 0; $countpages = 1; for ($count = 0; $count < $number_of_lines_maincopy; $count++) { if ($maincopy[$count] =~ /*/) { $topvalue = $1; $counttops++; $detect = 1; splice(@page_contents, -1, 0, $maincopy[$count]); #read and store until next top $count++; while($maincopy[$count] !~ /*/) { splice(@page_contents, -1, 0, $maincopy[$count]); $count++; last if ($count == $maincopylength); last if ($maincopy[$count] =~ /