#!/usr/local/bin/perl # Change the above line to reflect the location of your installation of PERL # # ------------------------------------------------------------------- # Program: swish-cgi.pl # Author : John Millard (millarj@muohio.edu) # Hacked with by Lachlan Cranswick (L.Cranswick@dl.ac.uk) - 2nd January 2001 # # Purpose: A gateway interface (CGI) to the SWISH Searcher/indexer # # Instructions: # # 1. Install and configure SWISH -- # Available from Enterprise Integration Technologies at # http://www.eit.com/goodies/software/swish/swish.html # # 2. Index your site so that SWISH returns the url for each file # ie. Swish should return http://www.yoursite.edu/file_name.html # See the SWISH documentation about REPLACE_RULES to see how. # # 3. Customize the User-Defined variables below to reflect your site. # # 4. Install this file in your cgi directory. This may vary # from site to site, but is usually in a directory like cgi-bin # # 5. Create a link from your pages to the cgi # ex. http://www.yoursite.edu/cgi-bin/swish-cgi # Running the cgi as a URL will generate a blank query form on the fly. # # # Note: if you don't like the the initial form that comes up, you can modify # the print_form subroutine # # To change the format of the returned results, you may modify the # print_results subroutine # -------- User defined configuration variables ----------- # Absolute path and command to execute the SWISH searcher $swish = "/usr/local/bin/swish-search"; # URL of where you put this cgi $swishcgi = "/cgi-bin/swishccp14all-cgi.pl"; # Optional parameters to pass to the SWISH searcher $params = " "; # Absolute path and filename of your created swish index file $index = "/web_disc/ccp14/search-databases/swish.index.ccp14all"; # The Full name of your organization -- Printed with Search Results $organization = "EPSRC funded CCP14 Project"; # The full name of your department -- Printed with search Results $department = "Collaborative Computational Prject for Single Crystal and Powder Diffraction"; # ------ End of Configuration Variables ------------ #sub read_form # Reads in form data if it exists read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the Name value pairs @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; push(@search_tags, $value), next if ($name eq 'search_tags'); $FORM{$name} = $value } $query = $FORM{'query'}; $results = $FORM{'results'}; if (@search_tags) { $tags = join("",@search_tags); $search_tags = "\-t $tags"; } else { $search_tags = ""; } if ($query) { &search_parse; } else { &search_parse; # REM Lachlan Test - kludge due to copying someone elses script - print form disabled &print_form; } sub print_form { &html_header("Search the Crystallographic Webpages on the CCP14"); # To change the form that get's generated on the fly, edit the HTML below. print <
[CCP14 Home: (Frames | No Frames)]

EOF # REMM OUT by LACHLAN &html_trailer; } sub search_parse # Run SWISH and parse output { #Initialize counter variable for number of results $count = 0; open(SWISH, "$swish -w $query -m $results $search_tags -f $index|"); while () { # First, check to see if search produced an error chop; if ($_ eq "err: no results") {&search_error("There were no items that matched your search request - Try Again");} if ($_ eq "err: could not open index file") {&search_error("Could not open SWISH Index File $index");} if ($_ eq "err: no search words specified") {&search_error("Please Enter at least one Search Word - Try Again");} if ($_ eq "err: a word is too common") {&search_error("One of your search terms is too common, please try again");} # Next Line ignores lines that begin with a non-digit next if /^\D/; $count++; push(@results, $_); } &html_header("Search CCP14 based Crystallographic Webpages: Results"); print "The Swish CCP14 Crystallographic Search\n"; print "found the following items that might be relevant to your\n"; print "search topic. A higher relevancy score means the item is more\n"; print "likely to be what you are looking for.

\n"; print "Your Search for $query, returned $count Items.\n"; print "Click here to do another search\n"; print "


\n"; foreach (@results) { select(STDOUT); ($stringone, $title, $filesize) = split(/\"/, $_); ($rank, $url) = split(/ /, $stringone); print "
$title
\n"; print "
Relevancy Score: $rank Size of Document: $filesize Bytes

\n"; } print "

\n"; &html_trailer; } sub search_error { &html_header("Your Search Results"); $error_message = $_[0]; print "$error_message\n"; &html_trailer; } sub html_header # This subroutine takes the document title as a command # line parameter and adds header information to the top # of the HTML document to be returned. { $document_title = $_[0]; print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "$document_title\n"; print "\n"; # REM Lachlan print "

$document_title

\n"; # print "
\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print "
\n"; print "
\n"; print " [CCP14 Home: (Frames | \n"; print " No Frames)]\n"; print "
\n"; print "
\n"; print "
\n"; print " What's New\n"; print "
\n"; print "
\n"; print "
\n"; print " Introduction\n"; print "
\n"; print "
\n"; print "
\n"; print " Site Map\n"; print "
\n"; print "
\n"; print "
\n"; print " Search the CCP14\n"; print "
\n"; print "
\n"; print "
\n"; print " Download Programs\n"; print "
\n"; print "
\n"; print "
\n"; print " Tutorials\n"; print "
\n"; print "
\n"; print "
\n"; print " Solutions\n"; print "
\n"; print "
\n"; print "
\n"; print "
\n"; # print "\n"; # print "\n"; # print "\n"; # print "\n"; # print "
\n"; } sub html_trailer # This subroutine prints a suitable HTML trailer { # print "
\n"; print "

\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print "
\n"; print "
\n"; print " [CCP14 Home: (Frames | \n"; print " No Frames)]\n"; print "
\n"; print "
\n"; print "
\n"; print " What's New\n"; print "
\n"; print "
\n"; print "
\n"; print " Introduction\n"; print "
\n"; print "
\n"; print "
\n"; print " Site Map\n"; print "
\n"; print "
\n"; print "
\n"; print " Search the CCP14\n"; print "
\n"; print "
\n"; print "
\n"; print " Download Programs\n"; print "
\n"; print "
\n"; print "
\n"; print " Tutorials\n"; print "
\n"; print "
\n"; print "
\n"; print " Solutions\n"; print "
\n"; print "
\n"; print "
\n"; print "
\n"; print "
\n"; print "If you have any queries or comments, please feel free to \n"; print "contact the CCP14\n"; print "
\n"; print "
\n"; print "\n\n"; exit; }