ΚW Q€¦SEARCH>) { if (/^(\d+) /) { $message = $1; if ($ToMove{$1}) { if ($ArchiveDir) { print ARCSEARCH "$_"; } } else { print NEWSEARCH "$_"; } } } if ($ArchiveDir) { &LockClose (ARCSEARCH,"$ArchiveDir/searchterms.idx"); } &LockClose (NEWSEARCH,"$dir/newsearchterms.idx"); close (SEARCH); unlink "$dir/searchterms.idx"; rename ("$dir/newsearchterms.idx","$dir/searchterms.idx"); print "$ArchivedMessages messages "; if ($ArchiveDir) { print "archived\n"; } else { print "deleted\n"; } if ($ArchiveDir) { if ($DBMType==2) { dbmclose (%ArcMessageList); } else { untie %ArcMessageList; } &LockClose (DBLOCK,"$ArchiveDir/dblock.txt"); if ($DBMType==2) { dbmclose (%ArcCountList); } else { untie %ArcCountList; } &LockClose (DBLOCK,"$ArchiveDir/countlock.txt"); } if ($DBMType==2) { dbmclose (%MessageList); } else { untie %MessageList; } &LockClose (DBLOCK,"$dir/dblock.txt"); if ($DBMType==2) { dbmclose (%CountList); } else { untie %CountList; } &LockClose (DBLOCK,"$dir/countlock.txt"); unless ($UseLocking) { &MasterLockClose; } } sub LockOpen { local(*FILE,$lockfilename,$append) = @_; unless (-e "$lockfilename") { open (FILE,">$lockfilename"); print FILE "\n"; close (FILE); } if ($append) { open (FILE,">>$lockfilename") || &Error; } else { open (FILE,"+<$lockfilename") || &Error; } if ($UseLocking) { local($TrysLeft) = 6000; while ($TrysLeft--) { select(undef,undef,undef,0.01); (flock(FILE,6)) || next; last; } unless ($TrysLeft >= 0) { &Error; } } } sub LockClose { local(*FILE,$lockfilename) = @_; close (FILE); } sub MasterLockOpen { local($TrysLeft) = 6000; if ((-e "$dir/masterlockfile.lok") && ((stat("$dir/masterlockfile.lok"))[9]+15<$time)) { unlink ("$dir/masterlockfile.lok"); } while ($TrysLeft--) { if (-e "$dir/masterlockfile.lok") { select(undef,undef,undef,0.01); } else { open (MASTERLOCKFILE,">$dir/masterlockfile.lok"); print MASTERLOCKFILE "\n"; close (MASTERLOCKFILE); last; } } unless ($TrysLeft >= 0) { &Error; } if ($ArchiveDir) { local($TrysLeft) = 6000; if ((-e "$ArchiveDir/masterlockfile.lok") && ((stat("$ArchiveDir/masterlockfile.lok"))[9]+15<$time)) { unlink ("$ArchiveDir/masterlockfile.lok"); } while ($TrysLeft--) { if (-e "$ArchiveDir/masterlockfile.lok") { select(undef,undef,undef,0.01); } else { open (MASTERLOCKFILE,">$ArchiveDir/masterlockfile.lok"); print MASTERLOCKFILE "\n"; close (MASTERLOCKFILE); last; } } unless ($TrysLeft >= 0) { &Error; } } } sub MasterLockClose { unlink ("$dir/masterlockfile.lok"); unlink ("$ArchiveDir/masterlockfile.lok"); } sub Error { print "FILE LOCK ERROR!\n"; print "\n"; exit; } name = "Preconception - TTC Baby #2 or More"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttc20"; $ArchiveDir = ""; $boardname = "Preconception - TTC over age 20 Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttc40"; $ArchiveDir = ""; $boardname = "Preconception - TTC over age 40 Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcadopt"; $ArchiveDir = ""; $boardname = "TTC after Adopting Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcbreast"; $ArchiveDir = ""; $boardname = "TTC while Breastfeeding Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcclomid"; $ArchiveDir = ""; $boardname = "TTC on Clomid Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcend"; $ArchiveDir = ""; $boardname = "TTC with Endometriosis Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcloss"; $ArchiveDir = ""; $boardname = "Preconception - TTC after a Loss Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcmis"; $ArchiveDir = ""; $boardname = "Preconception - TTC after Miscarriage Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcover"; $ArchiveDir = ""; $boardname = "Preconception - TTC While Overweight Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcstill"; $ArchiveDir = ""; $boardname = "TTC after Stillbirth Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttctube"; $ArchiveDir = ""; $boardname = "TTC after Tubal Reversal Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/ttcvas"; $ArchiveDir = ""; $boardname = "TTC after Vasectomy Reversal Discussion Board"; $Max_Days = 365; $Max_Messages = 500; &Archive; $dir = "/usr/home/preconc/htdocs/boards/uli"; $ArchiveDir = ""; $boardname = "Uli's Feedback Forum"; $Max_Days = 365; $Max_Messages = 500; &Archive; ########################################## # DON'T CHANGE ANYTHING BELOW THIS LINE. # ########################################## print "\n"; exit; sub Archive { print "$boardname: "; unless ($UseLocking) { &MasterLockOpen; } &LockOpen (DBLOCK,"$dir/dblock.txt"); if ($DBMType==1) { tie (%MessageList,'AnyDBM_File',"$dir/messagelist",O_RDWR|O_CREAT,0666,$DB_HASH) || print "(Error!) "; } elsif ($DBMType==2) { dbmopen(%MessageList,"$dir/messagelist",0666) || print "(Error!) "; } else { tie (%MessageList,'AnyDBM_File',"$dir/messagelist",O_RDWR|O_CREAT,0666) || print "(Error!) "; } &LockOpen (COUNTLOCK,"$dir/countlock.txt"); if ($DBMType==1) { tie (%CountList,'AnyDBM_File',"$dir/countlist",O_RDWR|O_CREAT,0666,$DB_HASH) || print "(Error!) "; } elsif ($DBMType==2) { dbmopen(%CountList,"$dir/countlist",0666) || print "(Error!) "; } else { tie (%CountList,'AnyDBM_File',"$dir/countlist",O_RDWR|O_CREAT,0666) || print "(Error!) "; } if ($ArchiveDir) { &LockOpen (DBLOCK,"$ArchiveDir/dblock.txt"); if ($DBMType==1) { tie (%ArcMessageList,'AnyDBM_File',"$ArchiveDir/messagelist",O_RDWR|O_CREAT,0666,$DB_HASH) || print "(Error!) "; } elsif ($DBMType==2) { dbmopen(%ArcMessageList,"$ArchiveDir/messagelist",0666) || print "(Error!) "; } else { tie (%ArcMessageList,'AnyDBM_File',"$ArchiveDir/messagelist",O_RDWR|O_CREAT,0666) || print "(Error!) "; } &LockOpen (COUNTLOCK,"$ArchiveDir/countlock.txt"); if ($DBMType==1) { tie (%ArcCountList,'AnyDBM_File',"$ArchiveDir/countlist",O_RDWR|O_CREAT,0666,$DB_HASH) || print "(Error!) "; } elsif ($DBMType==2) { dbmopen(%ArcCountList,"$ArchiveDir/countlist",0666) || print "(Error!) "; } else { tie (%ArcCountList,'AnyDBM_File',"$ArchiveDir/countlist",O_RDWR|O_CREAT,0666) || print "(Error!) "; } } @messages = (keys %MessageList); $TotalMessages = @messages; $ArchivedMessages = 0; @sortedmessages = (sort {$a<=>$b} @messages); $cutoff = $time - ($Max_Days*86400); %ToMove = (); foreach $message (@sortedmessages) { next unless ($MessageList{$message} > 0); if ((($Max_Days > 0) && ($MessageList{$message} < $cutoff)) || (($Max_Messages > 0) && ($TotalMessages > $Max_Messages))) { $subdir = "bbs".int($message/1000); $ToMove{$message} = 1; if ($ArchiveDir) { unless (-d "$ArchiveDir/$subdir") { mkdir ("$ArchiveDir/$subdir",0777); chmod 0777,"$ArchiveDir/$subdir"; } rename ("$dir/$subdir/$message","$ArchiveDir/$subdir/$message"); $ArcMessageList{$message} = $MessageList{$message}; $ArcCountList{$message} = $CountList{$message}; } else { unlink ("$dir/$subdir/$message"); } delete ($MessageList{$message}); delete ($CountList{$message}); $TotalMessages --; $ArchivedMessages ++; } } open (SEARCH,"$dir/searchterms.idx"); &LockOpen (NEWSEARCH,"$dir/newsearchterms.idx"); if ($ArchiveDir) { &LockOpen (AR@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ` Q€¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ