--- loncom/interface/lonsearchcat.pm 2002/06/26 16:04:13 1.130 +++ loncom/interface/lonsearchcat.pm 2002/07/30 20:08:04 1.148 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.130 2002/06/26 16:04:13 matthew Exp $ +# $Id: lonsearchcat.pm,v 1.148 2002/07/30 20:08:04 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,7 +40,7 @@ =head1 NAME -lonsearchcat +lonsearchcat - LONCAPA Search Interface =head1 SYNOPSIS @@ -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,23 +103,26 @@ use Apache::loncommon(); =over 4 -=item $closebutton - -button that closes the search window - =item $importbutton -button to take the selecte results and go to group sorting +button to take the select results and go to group sorting -=item %hash +=item %groupsearch_db -The ubiquitous database hash +Database hash used to save values for the groupsearch RAT interface. =item $diropendb The full path to the (temporary) search database file. This is set and used in &handler() and is also used in &output_results(). +=item %Views + +Hash which associates an output view description with the function +that produces it. Adding a new view type should be as easy as +adding a line to the definition of this hash and making sure the function +takes the proper parameters. + =back =cut @@ -126,13 +131,18 @@ used in &handler() and is also used in & ###################################################################### # -- 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 %hash; # database hash +my %groupsearch_db; # database hash my $diropendb = ""; # db file - +# 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; ###################################################################### ###################################################################### @@ -160,26 +170,60 @@ string that holds portions of the screen ###################################################################### sub handler { my $r = shift; - untie %hash; - + # + 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"; - - &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'; ## - ## Clear out old values from database + 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(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { + if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { &start_fresh_session(); - untie %hash; + untie %groupsearch_db; } else { $r->print('
Unable to tie hash to db '. 'file'); @@ -187,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=<