############################################ ## ## ## 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 Rebuild_Database { &LockOpen (NEWDBLOCK,"$dir/newdblock.txt"); opendir (MESSAGES,$dir); @messagedir = readdir(MESSAGES); closedir (MESSAGES); foreach $message (@messagedir) { if ($message =~ /^newmessagelist/) { unlink "$dir/$message"; } } if ($DBMType==1) { tie (%NewMessageList,'AnyDBM_File',"$dir/newmessagelist",O_RDWR|O_CREAT,0666,$DB_HASH) || &Error("9150","9151"); } elsif ($DBMType==2) { dbmopen(%NewMessageList,"$dir/newmessagelist",0666) || &Error("9150","9151"); } else { tie (%NewMessageList,'AnyDBM_File',"$dir/newmessagelist",O_RDWR|O_CREAT,0666) || &Error("9150","9151"); } %MonthToNumber = ('Jan',1,'Feb',2,'Mar',3,'Apr',4,'May',5,'Jun',6, 'Jul',7,'Aug',8,'Sep',9,'Oct',10,'Nov',11,'Dec',12); %day_counts = (1,0,2,31,3,59,4,90,5,120,6,151,7,181, 8,212,9,243,10,273,11,304,12,334); opendir (MESSAGES,$dir); @messagedir = readdir(MESSAGES); closedir (MESSAGES); @messagecount = (); @physicalmessages = (); %is_real = (); foreach $message (@messagedir) { next if ($message =~ /^\./); if ((-d "$dir/$message") && ($message =~ /^bbs\d+/)) { opendir (COUNT,"$dir/$message"); push (@messagecount,readdir(COUNT)); closedir (COUNT); } else { push (@messagecount,"$message"); } } foreach $message (@messagecount) { unless (($message =~ /\.tmp$/) || ($message == 0)) { push (@physicalmessages,$message); $is_real{$message} = 1; $subdir = "bbs".int($message/1000); unless (-d "$dir/$subdir") { mkdir ("$dir/$subdir",0777); chmod 0777,"$dir/$subdir"; } unless (-e "$dir/$subdir/$message") { rename ("$dir/$message","$dir/$subdir/$message"); } } } if (-e "$dir/messages.idx") { open (INDEX,"$dir/messages.idx"); while () { chop; if (($message,$timestamp,$sub,$poster,$date,$prev,$next,$count,$admin,$ip) = split(/\|/)) { $count = ""; unless (($date =~ /^\d+$/) && ($date > 500000000) && ($date < 1500000000)) { &ConvertOldDate; } unless ($admin eq "AdminPost") { $admin = ""; } foreach $key ($date,$sub,$poster,$prev,$next,$count,$admin,$ip) { $NewMessageList{$message} .= "$key|"; if ($message>$lastmessage) { $lastmessage = $message; } } } } close (INDEX); unlink "$dir/messages.idx"; while (($key,$value) = each(%NewMessageList)) { unless ($is_real{$key}>0) { delete ($NewMessageList{$key}); } } } open (SEARCH,"$dir/searchterms.idx"); while () { if (/^(\d+) /) { $searched{$1}=1; } } close (SEARCH); &LockOpen (SEARCH,"$dir/searchterms.idx","a"); foreach $message (@physicalmessages) { next if ($NewMessageList{$message} && $searched{$message}); unless ($searched{$message}) { print SEARCH "$message "; } $subdir = "bbs".int($message/1000); open (FILE,"$dir/$subdir/$message"); @message = ; close (FILE); %wordlist = (); $firstline = 0; $date=$sub=$poster=$prev=$next=$count=$admin=$ip=""; foreach $line (@message) { @words = (); if ($line =~ /^SUBJECT>(.*)/i) { $sub=$1; } elsif ($line =~ /^ADMIN>(.*)/i) { $admin=$1; } elsif ($line =~ /^POSTER>(.*)/i) { $poster=$1; } elsif ($line =~ /^EMAIL>/i) { next; } elsif ($line =~ /^DATE>(.*)/i) { $date=$1; } elsif ($line =~ /^EMAILNOTICES>/i) { next; } elsif ($line =~ /^IP_ADDRESS>(.*)/i) { $ip=$1; } elsif ($line =~ /^