--- loncom/interface/lonsearchcat.pm 2002/07/28 20:02:14 1.145
+++ loncom/interface/lonsearchcat.pm 2002/07/29 21:53:57 1.146
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.145 2002/07/28 20:02:14 matthew Exp $
+# $Id: lonsearchcat.pm,v 1.146 2002/07/29 21:53:57 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -141,7 +141,6 @@ my %Views = ("Detailed Citation View" =>
"Summary View" => \&summary_view,
"Fielded Format" => \&fielded_format_view,
"XML/SGML" => \&xml_sgml_view );
-my $persistent_db_file;
my %persistent_db;
my $hidden_fields;
######################################################################
@@ -172,8 +171,6 @@ string that holds portions of the screen
sub handler {
my $r = shift;
#
- untie %groupsearch_db if (tied(%groupsearch_db));
- #
my $closebutton; # button that closes the search window
# This button is different for the RAT compared to
# normal invocation.
@@ -185,8 +182,18 @@ sub handler {
## Pick up form fields passed in the links.
##
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['catalogmode','launch','acts','mode','form','element',
- 'reqinterface','persistent_db_id','table']);
+ ['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(5);
+ delete($ENV{'form.pause'});
+ }
##
## Initialize global variables
##
@@ -195,29 +202,21 @@ sub handler {
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db";
#
# set the name of the persistent database
- # $ENV{'form.persistent_db_id'} can only have digits in it.
+ # $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.persistent_db_id'} = time;
}
- $persistent_db_file = "/home/httpd/perl/tmp/".
+ 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';
- #
- # Read in the database. It should (hopefully) not be catastrophic to
- # fail in this exercise.
- if (-e $persistent_db_file) {
- # Read in the previous values, if we can.
- if (tie(%persistent_db,'GDBM_File',$persistent_db_file,
- &GDBM_READER,0640)) {
- &reconstruct_persistent_form_data($r);
- untie (%persistent_db);
- }
- }
+ ##
+ &get_persistent_form_data($r,$persistent_db_file);
##
## 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();
@@ -233,6 +232,7 @@ sub handler {
##
$hidden_fields = '';
+ ##
if ($ENV{'form.catalogmode'} eq 'interactive') {
$closebutton=""."\n";
@@ -244,69 +244,78 @@ END
END
+ } else {
+ $closebutton = '';
+ $importbutton = '';
}
##
- ## Do a search, if needed.
+ ## Sanity checks on form elements
##
- my $searchtype;
- $searchtype = 'Basic' if ($ENV{'form.basicsubmit'} eq 'SEARCH');
- $searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH');
- if ($searchtype) {
- ##
- ## make query information persistent to allow for subsequent revision
- ##
- tie(%persistent_db,'GDBM_File',$persistent_db_file,&GDBM_WRCREAT,0640);
- &make_persistent(\%ENV);
- untie(%persistent_db);
+ 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())) {
+ # Unable to make table to store results in.
+ # Definately abort search.
+ }
+ if (! &make_form_data_persistent($r,$persistent_db_file)) {
+ # Unable to store persistent data.
+ # Probably should bail out.
+ }
#
# We are running a search
my ($query,$customquery,$customshow,$libraries) =
(undef,undef,undef,undef);
my $pretty_string;
- if ($searchtype eq 'Basic') {
+ if ($ENV{'form.phase'} eq 'basic_search') {
($query,$pretty_string) = &parse_basic_search($r,$closebutton);
- } elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
+ } else { # Advanced search
($query,$customquery,$customshow,$libraries,$pretty_string)
= &parse_advanced_search($r,$closebutton);
return OK if (! defined($query));
}
- # Output some information to the user.
- $r->print(&search_results_header($searchtype,$pretty_string));
- $r->print("Sending search request to LON-CAPA servers.
\n");
- $r->rflush();
- &run_search($r,$query,$customquery,$customshow,$libraries);
+ &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");
+ &make_persistent($r,
+ { query => $query,
+ customquery => $customquery,
+ customshow => $customshow,
+ libraries => $libraries,
+ pretty_string => $pretty_string },
+ $persistent_db_file);
##
- ## Display the results
+ ## Print out the frames interface
##
- &display_results($r,$searchtype,$importbutton,$closebutton);
- $r->rflush();
- } else {
- #
- # Set the default view if it is not already set.
- if (!defined($ENV{'form.viewselect'})) {
- $ENV{'form.viewselect'} ="Detailed Citation View";
- }
- #
- # remove the requested interface from the environment.
- my $interface;
- if ($ENV{'form.reqinterface'}) {
- $interface = lc($ENV{'form.reqinterface'});
- } else {
- $interface = 'basic';
- }
- ##
- ## Determine course of action
- ##
- if ($interface eq 'display') {
- # &display_results($closebutton));
- } elsif ($interface eq 'advanced') {
- $r->print(&advanced_search_form($closebutton));
- } elsif ($interface eq 'basic') {
- # Output normal search interface
- $r->print(&basic_search_form($closebutton));
- }
+ &print_frames_interface($r);
}
- untie (%persistent_db);
return OK;
}
@@ -315,7 +324,7 @@ END
=pod
-=item &basic_search_form()
+=item &print_basic_search_form()
Returns a scalar which holds html for the basic search form.
@@ -324,8 +333,8 @@ Returns a scalar which holds html for th
######################################################################
######################################################################
-sub basic_search_form{
- my ($closebutton) = @_;
+sub print_basic_search_form{
+ my ($r,$closebutton) = @_;
my $scrout=<<"ENDDOCUMENT";