--- loncom/interface/lonsearchcat.pm 2002/07/16 15:02:06 1.143
+++ loncom/interface/lonsearchcat.pm 2002/07/30 18:30:56 1.147
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.143 2002/07/16 15:02:06 matthew Exp $
+# $Id: lonsearchcat.pm,v 1.147 2002/07/30 18:30:56 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -87,8 +87,10 @@ use Apache::lonnet();
use Apache::File();
use CGI qw(:standard);
use Text::Query;
+use DBI;
use GDBM_File;
use Apache::loncommon();
+use Apache::lonmysql();
# ---------------------------------------- variables used throughout the module
@@ -101,10 +103,6 @@ use Apache::loncommon();
=over 4
-=item $closebutton
-
-button that closes the search window
-
=item $importbutton
button to take the select results and go to group sorting
@@ -125,10 +123,6 @@ that produces it. Adding a new view typ
adding a line to the definition of this hash and making sure the function
takes the proper parameters.
-=item $results_db
-
-The name of the database results from searches are put in.
-
=back
=cut
@@ -137,20 +131,18 @@ The name of the database results from se
######################################################################
# -- dynamically rendered interface components
-my $closebutton; # button that closes the search window
my $importbutton; # button to take the selected results and go to group sorting
# -- miscellaneous variables
my %groupsearch_db; # database hash
my $diropendb = ""; # db file
-
-my $results_db = "";
# View Description Function Pointer
my %Views = ("Detailed Citation View" => \&detailed_citation_view,
"Summary View" => \&summary_view,
"Fielded Format" => \&fielded_format_view,
"XML/SGML" => \&xml_sgml_view );
-
+my %persistent_db;
+my $hidden_fields;
######################################################################
######################################################################
@@ -178,25 +170,56 @@ string that holds portions of the screen
######################################################################
sub handler {
my $r = shift;
- untie %groupsearch_db;
-
+ #
+ my $closebutton; # button that closes the search window
+ # This button is different for the RAT compared to
+ # normal invocation.
+ #
$r->content_type('text/html');
$r->send_http_header;
return OK if $r->header_only;
+ ##
+ ## Pick up form fields passed in the links.
+ ##
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['catalogmode','launch','acts','mode','form','element','pause',
+ 'phase','persistent_db_id','table','start','show']);
+ ##
+ ## The following is a trick - we wait a few seconds if asked to so
+ ## the daemon running the search can get ahead of the daemon
+ ## printing the results. We only need (theoretically) to do
+ ## this once, so the pause indicator is deleted
+ ##
+ if (exists($ENV{'form.pause'})) {
+ sleep(3);
+ delete($ENV{'form.pause'});
+ }
##
## Initialize global variables
##
my $domain = $r->dir_config('lonDefDomain');
$diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain).
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db";
- $results_db = "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain).
- '_'.&Apache::lonnet::escape($ENV{'user.name'})."_searchresults.db";
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['catalogmode','launch','acts','mode','form','element',
- 'reqinterface']);
+ #
+ # set the name of the persistent database
+ # $ENV{'form.persistent_db_id'} can only have digits in it.
+ if (! exists($ENV{'form.persistent_db_id'}) ||
+ ($ENV{'form.persistent_db_id'} =~ /\D/) ||
+ ($ENV{'form.launch'} eq '1')) {
+ $ENV{'form.persistent_db_id'} = time;
+ }
+ my $persistent_db_file = "/home/httpd/perl/tmp/".
+ &Apache::lonnet::escape($domain).
+ '_'.&Apache::lonnet::escape($ENV{'user.name'}).
+ '_'.$ENV{'form.persistent_db_id'}.'_persistent_search.db';
+ ##
+ if (! &get_persistent_form_data($r,$persistent_db_file)) {
+ &write_status($r,"Unable to get persistent data");
+ }
##
## Clear out old values from groupsearch database
##
+ untie %groupsearch_db if (tied(%groupsearch_db));
if ($ENV{'form.launch'} eq '1') {
if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {
&start_fresh_session();
@@ -208,23 +231,15 @@ sub handler {
}
}
##
- ## Produce some output, so people know it is working
- ##
- $r->print("\n");
- $r->rflush;
- ##
## Configure dynamic components of interface
##
- my $hidden; # Holds 'hidden' html forms
+ $hidden_fields = '';
+ ##
if ($ENV{'form.catalogmode'} eq 'interactive') {
- $hidden="".
- "\n";
$closebutton=""."\n";
} elsif ($ENV{'form.catalogmode'} eq 'groupsearch') {
- $hidden=<
-END
$closebutton=<
END
@@ -232,55 +247,91 @@ END
END
+ } else {
+ $closebutton = '';
+ $importbutton = '';
}
- $hidden .= &make_persistent({ "form.mode" => $ENV{'form.mode'},
- "form.form" => $ENV{'form.form'},
- "form.element" => $ENV{'form.element'},
- "form.date" => 2 });
- ##
- ## What are we doing?
- ##
- my $searchtype;
- $searchtype = 'Basic' if ($ENV{'form.basicsubmit'} eq 'SEARCH');
- $searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH');
- if ($searchtype) {
+ ##
+ ## Sanity checks on form elements
+ ##
+ if (!defined($ENV{'form.viewselect'})) {
+ $ENV{'form.viewselect'} ="Detailed Citation View";
+ }
+ $ENV{'form.phase'} = 'displaybasic' if (! exists($ENV{'form.phase'}));
+ ##
+ ## Switch on the phase
+ ##
+ if ($ENV{'form.phase'} eq 'disp_basic') {
+ &print_basic_search_form($r,$closebutton);
+ } elsif ($ENV{'form.phase'} eq 'disp_adv') {
+ &print_advanced_search_form($r,$closebutton);
+ } elsif ($ENV{'form.phase'} eq 'results') {
+ &display_results($r,$importbutton,$closebutton);
+ } elsif($ENV{'form.phase'} eq 'run_search') {
+ my ($query,$customquery,$customshow,$libraries,$pretty_string) =
+ &get_persistent_data($persistent_db_file,
+ ['query','customquery','customshow',
+ 'libraries','pretty_string']);
+ &write_status($r,"query = $query");
+ &write_status($r,"customquery = $customquery");
+ &write_status($r,"customshow = $customshow");
+ &write_status($r,"libraries = $libraries");
+ &write_status($r,"pretty_string = $pretty_string");
+ &run_search($r,$query,$customquery,$customshow,
+ $libraries,$pretty_string);
+ } elsif(($ENV{'form.phase'} eq 'basic_search') ||
+ ($ENV{'form.phase'} eq 'adv_search')) {
+ # Set up table
+ if (! defined(&create_results_table())) {
+ my $error = &Apache::lonmysql::get_error();
+ $r->print(<Search Error
+
+Unable to create table in which to store search results.
+The search has been aborted.
+