discourse-legacysite-perl/site/slowtwitch.com/cgi-bin/search.pl
2024-06-17 21:49:12 +10:00

137 lines
3.4 KiB
Perl
Executable File

#!/usr/bin/perl
use lib '/home/slowtwitch/slowtwitch.com/cgi-bin';
# The CGI.pm module is by far the best CGI module for Perl
use CGI qw(:standard);
# This library keeps me honest and enforces rules I need to
# to follow, ESPECIALLY for mod_perl
use strict;
# Disables strict referencing... Gotta do this to allow
# package-based config file
no strict 'refs';
# Ah yes... The wonderful Spindex configuration and
# search routine modules themselves. :)
use Spindex::config;
use Spindex::search;
# Yes it is lame- Deal with it. :)
my $VERSION="4.1.5";
#Globally define the "return sequence"
my $RET="\n";
#Let's fix the time so mod_perl works ok... :o)
$^T=time;
# Invoked by 'Print_Page' when it happens upon an HTML
# comment in a template.
# Syntax: Handle_Comment($cgi-process,$line-with-a-comment);
sub Handle_Comment {
my($cur,$cline)=@_;
# Make sure it is a real comment, all on one line
# and strip out the innards (shoving the real comment into $1)
if($cline =~ /<!--(.+)-->/) {
my $comment=$1;
$comment =~ s/\s//g; # strip all whitespace
# COMMENT DISPATCH TABLE
if($comment =~ /(.+)RESULTS(.+)/) {
# Ok, put the results here, formatted as
# requested.
my $sf=$1; # opening formatting
my $ef=$2; # ending formatting
for(Handle_Submission($cur)) {
print "$sf$_$ef$RET"
}
} #endif
} #endif
} #end Handle_Comment
# Print a Spindex template page
# Syntax: Print_Page($cgi-process)
sub Print_Page {
my $cur=shift;
# Open the normal template
unless(-e "$templateFile") { die "File does not exist: $templateFile\n"; }
open(TEMPL,"<$templateFile") or die "Cannot open $templateFile.\n";
# Spit the expiration jazz to the browser to control
# content caching. NOTE: Usually ignored by IE. :(
print header(-expires=>"$expire");
while(<TEMPL>) {
my $tline="$_";
# Print the line to the browser, or else handle
# it as a comment
unless($tline =~ /<!--/) { print "$tline"; }
else { Handle_Comment($cur,"$tline"); }
}
close TEMPL;
}
# My default logging mechanism. $logfile must be writable by the
# Apache user (usually nobody)
# Syntax: Write_Log(@array-of-stuff-to-write);
sub Write_Log {
my @msg=@_;
unless(defined($logFile)) { return; }
open(SPL,">>$logFile") or warn "Couldnot open $logFile\n";
# Automattically add the local time
print SPL scalar(localtime(time))," - ",@msg,"\n";
close SPL;
}
# Called from Handle_Comment when a RESULTS comment is found.
# Syntax: @results=Handle_Submission($cgi-process);
sub Handle_Submission {
my $cur=shift;
unless($cur->param('searchoption')) {
# Not a POST
if($allDefault) {
# If they want a full index, give it to 'em.
$BYDATE=0;
# Search for '.' (everything)
return(Do_Search("."));
} else {
# Otherwise, we are done.
return;
}
} #end unless
# If they are searching BYDATE, set it, else clear it.
if($cur->param('searchoption') eq "By Date") { $BYDATE=1; }
else { $BYDATE=0; }
my $toSearch;
my @SearchInDirs=();
if(defined(%OptionSearch)) {
@SearchInDirs=$cur->param('searchIn');
}
# If we're searching BYDATE, set $toSearch to the number of days,
# otherwise, set it to the search term.
if($BYDATE) {
$toSearch=$cur->param('updateDays');
} else {
$toSearch=$cur->param('searchFor');
# Log it if $logSearches is set
if($logSearches) { Write_Log($ENV{REMOTE_ADDR}," - $toSearch"); }
}
return(Do_Search("$toSearch",@SearchInDirs));
}
{##############MAIN
my $client=new CGI();
# Make it so
Print_Page($client);
}