############################################ ## ## ## WebBBS ## ## by Darryl Burgdorf ## ## (e-mail burgdorf@awsd.com) ## ## ## ## version: 4.33 ## ## last modified: 6/8/00 ## ## copyright (c) 2000 ## ## ## ## latest version is available from ## ## http://awsd.com/scripts/ ## ## ## ############################################ sub WebBBS { &Initialize_Data; if ($DisplayViews) { unless ($UseLocking) { &MasterLockOpen; } &LockOpen (COUNTLOCK,"$dir/countlock.txt"); unless ($NoCountLock) { &CountDBMWrite; } } if ((!($UseFrames) && ($ENV{'QUERY_STRING'} =~ /review=(\d+)/i)) || (!($UseFrames) && ($ENV{'QUERY_STRING'} =~ /rev=(\d+)/i)) || ($ENV{'QUERY_STRING'} =~ /read=(\d+)/i)) { $messagenumber = $1; if ($messagenumber < 1) { $messagenumber = $lastmessage; } if ($FORM{'ListType'} =~ /Guestbook-Style, Thread/) { &DisplayThread; } else { &DisplayMessage; } } elsif ($ENV{'QUERY_STRING'} =~ /form=(\d+)/i) { $messagenumber = $1; require $webbbs_form; &PostForm; } } sub DisplayMessage { unless (($ArchiveOnly || (!($AllowResponses))) || $SepPostFormRead) { $SpellCheckerMeta = 1; } foreach $message (@sortedmessages) { if ($message < $messagenumber) { $prevmessage = $message; } elsif ($message > $messagenumber) { $nextmessage = $message; last; } } $subdir = "bbs".int($messagenumber/1000); open (FILE,"$dir/$subdir/$messagenumber") || &Error("9100","9101"); @message = ; close (FILE); if ($DisplayViews) { unless ($CountList{$messagenumber}) { $CountList{$messagenumber} = 0; } $CountList{$messagenumber}++; } ($admin,$subject,$poster,$email,$date,$image_url,$linkname,$linkurl) = ""; foreach $line (@message) { if ($line =~ /^SUBJECT>(.*)/i) { $subject = $1; } elsif ($line =~ /^ADMIN>AdminPost/i) { $admin = "AdminPost"; } elsif ($line =~ /^ADMIN>/i) { next; } elsif ($line =~ /^POSTER>(.*)/i) { $poster = $1; } elsif ($line =~ /^EMAIL>(.*)/i) { $email = $1; } elsif ($line =~ /^DATE>(.*)/i) { $date = $1; } elsif ($line =~ /^EMAILNOTICES>/i) { next; } elsif ($line =~ /^IP_ADDRESS>(.*)/i) { $ipaddress = $1; } elsif ($line =~ /^/i) { $remoteuser = $1; } elsif ($line =~ /^PASSWORD>(.*)/i) { $oldpassword = $1; } elsif ($line =~ /^PREVIOUS>(.*)/i) { $previous = $1; } elsif ($line =~ /^NEXT>(.*)/i) { $next = $1; } elsif ($line =~ /^IMAGE>(.*)/i) { $image_url = $1; } elsif ($line =~ /^LINKNAME>(.*)/i) { $linkname = $1; } elsif ($line =~ /^LINKURL>(.*)/i) { $linkurl = $1; } elsif (!$startup) { $startup = 1; $title = $subject; $title =~ s/<[^>]*\s+ALT\s*=\s*"(([^>"])*)"[^>]*>/$1/ig; $title =~ s/<([^>]|\n)*>//g; &Header($title,$MessageHeaderFile); if ($AdminRun && ($FORM{'ListType'} =~ /Chrono/)) { $FORM{'ListType'} = "Threaded"; } unless (((($FORM{'ListType'} =~ /Chrono/) || ($previous == 0)) && ($next == 0)) && ($prevmessage == 0) && ($nextmessage == 0) && ($ArchiveOnly || (!($AllowResponses))) && ($UseFrames)) { $navbar = $NavBarStart; unless ((($FORM{'ListType'} =~ /Chrono/) || ($previous == 0)) && ($next == 0)) { $navbar .= " "; if ($FORM{'ListType'} =~ /Chrono/) { $navbar .= "$text{'0001'}"; } else { $navbar .= "$text{'0002'}"; } $printbar = 1; } unless ($ArchiveOnly || (!($AllowResponses))) { if ($printbar) { $navbar .= " |"; } if ($SepPostFormRead) { $navbar .= " "; } $navbar .= "$text{'0003'}"; $printbar = 1; } if ($AdminRun) { if ($printbar) { $navbar .= " |"; } if ($SepPostFormRead) { $navbar .= " "; } $navbar .= "$text{'1504'}"; $printbar = 1; } unless ($UseFrames) { if ($printbar) { $navbar .= " |"; } $navbar .= " "; $navbar .= "$text{'0004'}"; $printbar = 1; } if ($prevmessage > 0) { if ($printbar) { $navbar .= " |"; } $navbar .= " "; $navbar .= "$text{'0005'}"; $printbar = 1; } if ($nextmessage > 0) { if ($printbar) { $navbar .= " |"; } $navbar .= " "; $navbar .= "$text{'0006'}"; } $navbar .= $NavBarEnd; print "$navbar"; } unless ($UseFrames) { if ($printboardname) { print "

"; print "$boardname\n"; } } print "

"; print "$subject\n"; print "

"; print "$text{'1000'}: "; $ProfileCheck = $poster; $ProfileCheck =~ s/[^\w\.\-\']/\+/g; $ProfileCheck =~ tr/A-Z/a-z/; if (-e "$UserProfileDir/$ProfileCheck.txt") { print ""; print "$poster"; } else { print "$poster"; } print ""; if ($AdminRun && $remoteuser && ($remoteuser ne $poster)) { print " ($remoteuser)"; } if ($DisplayEmail && $email) { $mailsubject = $subject; if (%SmileyCode) { foreach $key (keys %SmileyCode) { $key2 = $SmileyCode{$key}; $key2 =~ s/([\[\]\(\)\\\*\+\?\\\|])/\\$1/g; $mailsubject =~ s/$key2/$key/g; } } $mailsubject =~ s/<[^>]*\s+ALT\s*=\s*"(([^>"])*)"[^>]*>/$1/ig; $mailsubject =~ s/<([^>]|\n)*>//g; $mailsubject =~ s/"/'/g; print " <"; print "$email>"; } if ($DisplayIPs && $ipaddress) { print " ($ipaddress)\n"; } print "
$text{'1001'}: ",&PrintDate($date),"\n"; if ($MessageList{$previous}>0) { $pdate=$psub=$pposter=$pprev=$pnext=$pcount=$padmin=$pip=""; ($pdate,$psub,$pposter,$pprev,$pnext,$pcount,$padmin,$pip) = split(/\|/,$MessageList{$previous}); $psub =~ s/&pipe;/\|/g; $pposter =~ s/&pipe;/\|/g; print "

$text{'1002'}: "; print ""; print "$psub "; print "($pposter)\n"; } print "$MessageOpenCode\n"; print $line; } else { print $line; } } print "$MessageCloseCode\n"; if ($image_url) { print "

"; print "\n"; } if ($linkurl) { print "

"; print ""; print "$linkname\n"; } if ($AdminRun) { &DisplayMessageAdmin; } else { if ($AllowUserDeletion) { print "

\n", "$NavBarStart\n", "\n", " ", "$text{'0205'}: ", "$NavBarEnd\n"; $FormCount++; } unless ((($FORM{'ListType'} =~ /Chrono/) || ($previous == 0)) && ($next == 0)) { print "

"; print ""; @responses = split(/ /,$next); $responsecount = 0; if ($FORM{'ListType'} =~ /Chrono/) { print "$text{'1003'}\n"; if ($IndexEntryLines eq "news") { print "

\n"; } else { print "

<$ul_dl>"; } if ($FORM{'ListType'} =~ /Reversed/) { @sortedresponses = reverse(@responses); } else { @sortedresponses = @responses; } foreach $response (@sortedresponses) { if ($MessageList{$response}>0) { &PrintMessageDesc($response); $responsecount ++; } } if ($IndexEntryLines eq "news") { print "

\n"; } else { print "\n"; } if ($responsecount eq 0) { print "

"; print "$text{'1004'}\n"; } } else { print "$text{'1005'}\n"; if ($IndexEntryLines eq "news") { print "

\n"; } else { print "

<$ul_dl>"; } &FindStart($messagenumber); &ThreadList($threadstart); if ($IndexEntryLines eq "news") { print "

\n"; } else { print "\n"; } } } } unless (($ArchiveOnly || (!($AllowResponses))) || $SepPostFormRead) { require $webbbs_form; print "\n"; &Print_Form($messagenumber); if ($AdminRun) { print "\n"; &Print_EditForm($messagenumber); } print "

 "; } &Footer($MessageFooterFile,"credits"); } sub DisplayThread { unless (($ArchiveOnly || (!($AllowResponses))) || $SepPostFormRead) { $SpellCheckerMeta = 1; } &FindStart($messagenumber); $title = $subject; $title =~ s/<([^>]|\n)*>/ /g; &Header($title,$MessageHeaderFile); unless (($ArchiveOnly || (!($AllowResponses))) && ($UseFrames)) { unless ($UseFrames) { $navbar = $NavBarStart; $navbar .= " "; $navbar .= "$text{'0004'}"; $navbar .= $NavBarEnd; print "$navbar"; } } unless ($UseFrames) { if ($printboardname) { print "

"; print "$boardname\n"; } } @guestbookthread = (); &ThreadGuestbook($threadstart); @sortedguestbookthread = (sort {$a<=>$b} @guestbookthread); if ($FORM{'ListType'} =~ /Reversed/) { @guestbookthread = reverse(@sortedguestbookthread); @sortedguestbookthread = @guestbookthread; } if ($PaginateGuestbook) { foreach $key (0..@sortedguestbookthread) { if ($sortedguestbookthread[$key] eq $messagenumber) { $CurrentPage = $key; last; } } $FirstPage = $sortedguestbookthread[0]; if (@sortedguestbookthread > $PaginateGuestbook) { $LastPage = $sortedguestbookthread[@sortedguestbookthread-$PaginateGuestbook]; } if ($CurrentPage > $PaginateGuestbook) { $PreviousPage = $sortedguestbookthread[$CurrentPage-$PaginateGuestbook]; } if ($FORM{'ListType'} =~ /Reversed/) { unless ($PreviousPage < $FirstPage) { $PreviousPage = ""; } unless ($FirstPage > $messagenumber) { $FirstPage = ""; } unless (@sortedguestbookthread < ($CurrentPage+$PaginateGuestbook)) { $NextPage = $sortedguestbookthread[$CurrentPage+$PaginateGuestbook]; } unless ($LastPage < $NextPage) { $LastPage = $NextPage; $NextPage = ""; } unless ($LastPage < $messagenumber) { $LastPage = ""; } } else { unless ($PreviousPage > $FirstPage) { $PreviousPage = ""; } unless ($FirstPage < $messagenumber) { $FirstPage = ""; } unless (@sortedguestbookthread < ($CurrentPage+$PaginateGuestbook)) { $NextPage = $sortedguestbookthread[$CurrentPage+$PaginateGuestbook]; } unless ($LastPage > $NextPage) { $LastPage = $NextPage; $NextPage = ""; } unless ($LastPage > $messagenumber) { $LastPage = ""; } } } print "

"; $date=$sub=$poster=$prev=$next=$count=$admin=$ip=""; ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) = split(/\|/,$MessageList{$threadstart}); $sub =~ s/&pipe;/\|/g; print "$sub\n"; $PageCounter = 0; foreach $message (@sortedguestbookthread) { if ($PaginateGuestbook) { if ($FORM{'ListType'} =~ /Reversed/) { next if ($message>$messagenumber); } else { next if ($message<$messagenumber); } $PageCounter++; last if ($PageCounter > $PaginateGuestbook); } &PrintGuestbookDesc($message); } if ($FirstPage || $PreviousPage || $NextPage || $LastPage) { print "$NavBarStart $text{'1005'}:
"; if ($FirstPage) { print "$text{'1100'}"; $PrintBar = 1; } if ($PreviousPage) { if ($PrintBar) { print " | "; } print "$text{'1101'}"; $PrintBar = 1; } if ($NextPage) { if ($PrintBar) { print " | "; } print "$text{'1102'}"; $PrintBar = 1; } if ($LastPage) { if ($PrintBar) { print " | "; } print "$text{'1103'}"; } print "$NavBarEnd\n"; } &Footer($MessageFooterFile,"credits"); } sub FindStart { $threadstart = $_[0]; local ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) = ""; ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) = split(/\|/,$MessageList{$threadstart}); if ($prev && ($MessageList{$prev}>0)) { &FindStart($prev); } } sub ThreadGuestbook { local (@threadresponses); local ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) = ""; ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) = split(/\|/,$MessageList{$_[0]}); push (@guestbookthread,$_[0]); @threadresponses = split(/ /,$next); foreach $threadresponse (@threadresponses) { next unless ($threadresponse > $_[0]); if ($MessageList{$threadresponse}>0) { &ThreadGuestbook($threadresponse); } } } sub SetCookieData { %Cookie_Encode_Chars = ( '\%','%25','\+','%2B','\;','%3B','\,','%2C', '\=','%3D','\&','%26','\:\:','%3A%3A','\s','+' ); %Cookie_Decode_Chars = ( '\+',' ','\%3A\%3A','::','\%26','&','\%3D','=', '\%2C',',','\%3B',';','\%2B','+','\%25','%' ); &GetCookie($boardname); $FORM{'ListType'} = $Cookies{'listtype'}; $FORM{'password'} = $Cookies{'password'}; } 1;