############################################ ## ## ## WebBBS ## ## by Darryl Burgdorf ## ## (e-mail burgdorf@awsd.com) ## ## ## ## version: 4.31 ## ## last modified: 5/28/00 ## ## copyright (c) 2000 ## ## ## ## latest version is available from ## ## http://awsd.com/scripts/ ## ## ## ############################################ sub WebBBS { &Parse_Form; &Initialize_Data; if ($ENV{'QUERY_STRING'} =~ /addresslist/i) { &UpdateAddressList; } elsif ($ENV{'QUERY_STRING'} =~ /delete/i) { if ($DBMType==2) { dbmclose (%MessageList); } else { untie %MessageList; } unless ($UseLocking) { &MasterLockOpen; } &LockOpen (DBLOCK,"$dir/dblock.txt"); &MessageDBMWrite; &Delete; } elsif ($ENV{'QUERY_STRING'} =~ /reconfigure/i) { &Reconfigure; } elsif ($ENV{'QUERY_STRING'} =~ /search/i) { &Search; } elsif ($ENV{'QUERY_STRING'} =~ /subscribe/i) { &Subscribe; } else { &TopStats; } } sub TopStats { foreach $message (@sortedmessages) { $date=$sub=$poster=$prev=$next=$count=$admin=$ip=""; ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) = split(/\|/,$MessageList{$message}); unless ($PosterCount{$poster}) { $PosterCount++; } $PosterCount{$poster}++; if ($date > $LastDate{$poster}) { $LastPost{$poster} = $message; $LastDate{$poster} = $date; } } &Header($text{'3001'},$MessageHeaderFile); &Header2; print "
\n"; if ($AdminRun) { print "

$text{'3001'}\n"; } else { print "

$text{'3000'} $TopNPosters $text{'3001'}\n"; } print "

$text{'3002'}: $TotalMessages "; print "| $text{'3003'}: $PosterCount\n"; if ($PosterCount == 0) { &Footer($MessageFooterFile,"credits"); } $average = int(($TotalMessages/$PosterCount)+.5); print "
$text{'3004'}: $average\n"; print "

\n"; print ""; print ""; print ""; print "\n"; if ($AdminRun && $UserProfileDir) { opendir (PROFILES,$UserProfileDir); @profiles = readdir(PROFILES); closedir (PROFILES); foreach $profile (@profiles) { if ($profile =~ /^(.*)\.txt$/) { $ProfileList{$1} = 1; } } } foreach $key (sort ByPostCount keys(%PosterCount)) { unless ($AdminRun) { $postercounter++; last if ($postercounter > $TopNPosters); } print ""; print ""; $percent = (($PosterCount{$key}/$TotalMessages)*100)+0.0051; if ($percent < 10) { $percent =~ s/(....).*/$1/; } else { $percent =~ s/(.....).*/$1/; } print ""; print "\n"; } if ($AdminRun) { foreach $key (keys(%ProfileList)) { next if ($ProfileList{$key} < 1); print ""; print ""; print ""; print "\n"; } } print "
"; print "$text{'3005'}

 "; print "$text{'3006'}

 "; print "$text{'3007'}

 "; print "$text{'3008'}

"; $ProfileCheck = $key; $ProfileCheck =~ s/\s/\+/g; $ProfileCheck =~ tr/A-Z/a-z/; if (-e "$UserProfileDir/$ProfileCheck.txt") { print "$key"; $ProfileList{$ProfileCheck} = 0; } else { print "$key"; } print " "; print "$PosterCount{$key} "; print "${percent}% "; print &PrintDate($LastDate{$key}),"
"; $ProfileName = $key; $ProfileName =~ s/\+/ /g; print ""; print "$ProfileName"; print " "; print "0 "; print " 

\n"; &Footer($MessageFooterFile,"credits"); } sub ByPostCount { $PosterCount{$b}<=>$PosterCount{$a}; } sub Delete { $PassCheck = 0; unless ($FORM{'newpassword'}) { &Error("9600","9601"); } $newpassword = crypt($FORM{'newpassword'},"aa"); $message = $FORM{'delete'}; $subdir = "bbs".int($message/1000); unless (-e "$dir/$subdir/$message") { &Error("9600","9601"); } $oldpassword = ""; open (FILE,"$dir/$subdir/$message"); @message = ; close (FILE); foreach $line (@message) { if ($line =~ /^PASSWORD>(.*)/i) { $oldpassword = $1; last; } } if ($oldpassword) { if ($newpassword eq $oldpassword) { $PassCheck = 1; } } unless ($PassCheck == 1) { unless (-e "$dir/password.txt") { &Error("9600","9601"); } open (PASSWORD, "$dir/password.txt"); $password = ; close (PASSWORD); chop ($password) if ($password =~ /\n$/); unless ($newpassword eq $password) { &Error("9600","9601"); } } unlink "$dir/$subdir/$message"; delete ($MessageList{$message}); if ($DisplayViews) { &LockOpen (COUNTLOCK,"$dir/countlock.txt"); unless ($NoCountLock) { &CountDBMWrite; } if ($CountList{$message}) { delete ($CountList{$message}); } } open (SEARCH,"$dir/searchterms.idx"); &LockOpen (NEWSEARCH,"$dir/newsearchterms.idx"); while () { if (/^(\d+) /) { $message = $1; $subdir = "bbs".int($message/1000); if (-e "$dir/$subdir/$message") { print NEWSEARCH "$_"; } } } close (SEARCH); &LockOpen (SEARCH,"$dir/searchterms.idx"); rename ("$dir/newsearchterms.idx","$dir/searchterms.idx"); &LockClose (NEWSEARCH,"$dir/newsearchterms.idx"); &LockClose (SEARCH,"$dir/searchterms.idx"); &Header($text{'0212'},$MessageHeaderFile,"refresh"); &Header2("refresh"); print "

$text{'0212'}\n"; print "

$text{'0200'}\n"; &Footer($MessageFooterFile,"return","refresh"); } sub Subscribe { &Header($text{'4000'},$MessageHeaderFile); &Header2; print "

"; print "$text{'4000'}\n"; print "

$text{'4001'} "; if ($email_list == 1) { print "$text{'4002'} "; } else { print "$text{'4003'} "; } print "$text{'4004'}\n"; print "

\n"; print "

$text{'4005'}: "; print " \n"; print "
$text{'4006'} "; print " $text{'4007'}"; print "
\n"; &Footer($MessageFooterFile,"credits"); } 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); unless ($FORM{'ListType'}) { $FORM{'ListType'} = $Cookies{'listtype'}; } unless ($FORM{'ListTime'}) { $FORM{'ListTime'} = $Cookies{'listtime'}; } unless ($FORM{'password'}) { $FORM{'password'} = $Cookies{'password'}; } if (!$email) { $email = $Cookies{'email'}; } } sub Search { &Header("$boardname - $text{'6000'}",$MessageHeaderFile); &Header2; print "

$text{'6001'}\n"; print "

$text{'6002'}\n"; print "

\n"; print "
"; if ($FORM{'ListTime'} =~ /(\d+) ([\w\(\)]+)/) { $FORM{'ListTimeA'} = $1; $FORM{'ListTimeB'} = $2; } else { $FORM{'ListTimeA'} = 2; $FORM{'ListTimeB'} = "$text{'0062'}"; } print "

$text{'6003'}:"; unless ($ArchiveOnly) { print "
$text{'6004'} "; print " "; print "\n"; print "
"; } else { print "
"; } print " $text{'6005'} "; ($mday,$mon,$year) = (localtime(int($MessageList{$sortedmessages[0]})+($HourOffset*3600)))[3,4,5]; print " "; print " "; print ""; print " $text{'6006'} "; ($mday,$mon,$year) = (localtime(int($MessageList{$sortedmessages[@sortedmessages-1]})+($HourOffset*3600)))[3,4,5]; print " "; print " "; print "\n"; print "\n

$text{'6007'}: "; ($mday,$mon,$year) = (localtime(int($MessageList{$sortedmessages[0]})+($HourOffset*3600)))[3,4,5]; print "$mday $months[$mon] ",$year+1900; print "
$text{'6008'}: "; ($mday,$mon,$year) = (localtime(int($MessageList{$sortedmessages[@sortedmessages-1]})+($HourOffset*3600)))[3,4,5]; print "$mday $months[$mon] ",$year+1900; print "\n
\n"; print "

$text{'6009'}:", "
$text{'6010'}\n", "
$text{'6011'} $text{'6012'}:", "
\n", "
$text{'6013'}: \n"; if ($AdminRun) { print "
$text{'6013'} $text{'6015'}: \n"; } print "

\n"; &Footer($MessageFooterFile,"credits"); } sub Reconfigure { &Header("$boardname - $text{'6500'}",$MessageHeaderFile); &Header2; print "

$text{'6501'}\n"; print "

$text{'6502'} "; if ($UseCookies) { print "$text{'6503'}\n"; } else { print "$text{'6504'}\n"; } print "

\n"; print "\n"; print "
"; unless ($ArchiveOnly) { if ($FORM{'ListTime'} =~ /(\d+) ([\w\(\)]+)/) { $FORM{'ListTimeA'} = $1; $FORM{'ListTimeB'} = $2; } else { $FORM{'ListTimeA'} = 2; $FORM{'ListTimeB'} = "$text{'0062'}"; } if ($UseCookies) { print "

$text{'6505'}:"; print "
$text{'6506'} "; } else { print "

$text{'6507'} "; } print " "; print "\n"; if ($UseCookies) { print "
$text{'6508'}\n"; } } unless (!($AdminRun) && ($ENV{'HTTP_USER_AGENT'} =~ /Lynx/i)) { print "

$text{'6509'}:

\n", "

$text{'5000'}\n"; } print "

\n"; &Footer($MessageFooterFile,"credits"); } sub UpdateAddressList { unless ($email) { &Error("9300","9301"); } unless (-w "$dir") { &Error("9410","9411"); } &LockOpen (LIST,"$dir/addresses.txt"); @list = ; $listcheck = 0; seek (LIST, 0, 0); foreach $address (@list) { if ($address =~ /$email/i) { if ($FORM{'action'} eq "delete") { &Error("9850","9851"); $listcheck = 1; } else { &Error("9700","9701"); print LIST "$address"; $listcheck = 1; } } else { print LIST "$address"; } } if ($listcheck < 1) { if ($FORM{'action'} eq "delete") { &Error("9750","9751"); } else { &Error("9800","9801"); print LIST "$email\n"; } } truncate (LIST, tell(LIST)); &LockClose (LIST,"$dir/addresses.txt"); &Footer($MessageFooterFile,"return"); } 1;