--- loncom/interface/lonsearchcat.pm 2002/06/27 19:28:50 1.133
+++ loncom/interface/lonsearchcat.pm 2002/07/03 20:10:14 1.135
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.133 2002/06/27 19:28:50 matthew Exp $
+# $Id: lonsearchcat.pm,v 1.135 2002/07/03 20:10:14 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -107,7 +107,7 @@ 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
@@ -219,16 +219,29 @@ END
##
## What are we doing?
##
- if ($ENV{'form.basicsubmit'} eq 'SEARCH') {
- # Perform basic search and give results
- return &basicsearch($r,$hidden);
- } elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
- # Perform advanced search and give results
- return &advancedsearch($r,$hidden);
+ my $searchtype;
+ $searchtype = 'Basic' if ($ENV{'form.basicsubmit'} eq 'SEARCH');
+ $searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH');
+ if ($searchtype) {
+ my ($query,$customquery,$customshow,$libraries) =
+ (undef,undef,undef,undef);
+ if ($searchtype eq 'Basic') {
+ $query = &parse_basic_search($r);
+ } elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
+ ($query,$customquery,$customshow,$libraries)
+ = &parse_advanced_search($r);
+ return OK if (! defined($query));
+ }
+ # Send query statements over the network to be processed by
+ # either the SQL database or a recursive scheme of 'grep'-like
+ # actions (for custom metadata).
+ $r->rflush();
+ my $reply=&Apache::lonnet::metadata_query($query,$customquery,
+ $customshow,$libraries);
+ &output_results($searchtype,$r,$reply,$hidden);
} elsif ($ENV{'form.reqinterface'} eq 'advanced') {
# Output the advanced interface
$r->print(&advanced_search_form($closebutton,$hidden));
- return OK;
} else {
# Output normal search interface
$r->print(&basic_search_form($closebutton,$hidden));
@@ -362,22 +375,13 @@ $hidden
ENDHEADER
- $scrout.=&searchphrasefield('title','title',
- $ENV{'form.title'});
- $scrout.=&searchphrasefield('author','author',
- $ENV{'form.author'});
- $scrout.=&searchphrasefield('subject','subject',
- $ENV{'form.subject'});
- $scrout.=&searchphrasefield('keywords','keywords',
- $ENV{'form.keywords'});
- $scrout.=&searchphrasefield('URL','url',
- $ENV{'form.url'});
-# $scrout.=&searchphrasefield('Limit by version','version',
-# $ENV{'form.version'});
- $scrout.=&searchphrasefield('notes','notes',
- $ENV{'form.notes'});
- $scrout.=&searchphrasefield('abstract','abstract',
- $ENV{'form.abstract'});
+ $scrout.=&searchphrasefield('title', 'title' ,$ENV{'form.title'});
+ $scrout.=&searchphrasefield('author', 'author' ,$ENV{'form.author'});
+ $scrout.=&searchphrasefield('subject', 'subject' ,$ENV{'form.subject'});
+ $scrout.=&searchphrasefield('keywords','keywords',$ENV{'form.keywords'});
+ $scrout.=&searchphrasefield('URL', 'url' ,$ENV{'form.url'});
+ $scrout.=&searchphrasefield('notes', 'notes' ,$ENV{'form.notes'});
+ $scrout.=&searchphrasefield('abstract','abstract',$ENV{'form.abstract'});
# Hack - an empty table row.
$scrout.="
| |
\n";
$scrout.=&searchphrasefield('file
extension','mime',
@@ -425,8 +429,6 @@ ENDHEADER
$scrout.="\n";
}
#----------------------------------------------------------------
- #
- #
$scrout.=&selectbox('Limit by language','language',
$ENV{'form.language'},'any','Any Language',
\&{Apache::loncommon::languagedescription},
@@ -721,16 +723,28 @@ sub selectbox {
=pod
-=item &advancedsearch()
+=item &parse_advanced_search()
+
+Parse advanced search form and return the following:
+
+=over 4
+
+=item $query Scalar containing an SQL query.
-Parse advanced search results.
+=item $customquery Scalar containing a custom query.
+
+=item $customshow Scalar containing commands to show custom metadata.
+
+=item $libraries_to_query Reference to array of domains to search.
+
+=back
=cut
######################################################################
######################################################################
-sub advancedsearch {
- my ($r,$hidden)=@_;
+sub parse_advanced_search {
+ my ($r)=@_;
my $fillflag=0;
# Clean up fields for safety
for my $field ('title','author','subject','keywords','url','version',
@@ -766,7 +780,7 @@ sub advancedsearch {
}
unless ($fillflag) {
&output_blank_field_error($r);
- return OK;
+ return ;
}
# Turn the form input into a SQL-based query
my $query='';
@@ -778,6 +792,10 @@ sub advancedsearch {
push @queries,&build_SQL_query($field,$ENV{'form.'.$field});
}
}
+ # I dislike the hack below.
+ if ($ENV{'form.category'}) {
+ $ENV{'form.mime'}='';
+ }
# Evaluate option lists
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {
push @queries,"(language like \"$ENV{'form.language'}\")";
@@ -803,18 +821,18 @@ sub advancedsearch {
# Test to see if date windows are legitimate
if ($datequery=~/^Incorrect/) {
&output_date_error($r,$datequery);
- return OK;
+ return ;
}
elsif ($datequery) {
push @queries,$datequery;
}
# Process form information for custom metadata querying
- my $customquery='';
+ my $customquery=undef;
if ($ENV{'form.custommetadata'}) {
$customquery=&build_custommetadata_query('custommetadata',
$ENV{'form.custommetadata'});
}
- my $customshow='';
+ my $customshow=undef;
if ($ENV{'form.customshow'}) {
$customshow=$ENV{'form.customshow'};
$customshow=~s/[^\w\s]//g;
@@ -842,36 +860,14 @@ sub advancedsearch {
push @$libraries_to_query,$_;
}
}
- ## ---------------------------------------------------------------
#
- # Send query statements over the network to be processed by either the SQL
- # database or a recursive scheme of 'grep'-like actions (for custom
- # metadata).
if (@queries) {
$query=join(" AND ",@queries);
$query="select * from metadata where $query";
- my $reply; # reply hash reference
- unless ($customquery or $customshow) {
- $reply=&Apache::lonnet::metadata_query($query,undef,undef,
- $libraries_to_query);
- }
- else {
- $reply=&Apache::lonnet::metadata_query($query,
- $customquery,$customshow,
- $libraries_to_query);
- }
- &output_results('Advanced',$r,$customquery,$reply,$hidden);
- return OK;
} elsif ($customquery) {
- my $reply; # reply hash reference
- $reply=&Apache::lonnet::metadata_query('',
- $customquery,$customshow,
- $libraries_to_query);
- &output_results('Advanced',$r,$customquery,$reply,$hidden);
- return OK;
+ $query = '';
}
- # should not get to this point
- return 'Error. Should not have gone to this point.';
+ return ($query,$customquery,$customshow,$libraries_to_query);
}
######################################################################
@@ -879,16 +875,16 @@ sub advancedsearch {
=pod
-=item &basicsearch()
+=item &parse_basic_search()
-Parse basic search form.
+Parse the basic search form and return a scalar containing an sql query.
=cut
######################################################################
######################################################################
-sub basicsearch {
- my ($r,$hidden)=@_;
+sub parse_basic_search {
+ my ($r)=@_;
# Clean up fields for safety
for my $field ('basicexp') {
$ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g;
@@ -914,16 +910,7 @@ sub basicsearch {
$concatarg='title' if $ENV{'form.titleonly'};
$query=&build_SQL_query('concat('.$concatarg.')',$ENV{'form.'.'basicexp'});
-
- # Get reply (either a hash reference to filehandles or bad connection)
-# &Apache::lonnet::logthis("metadata query started:".time);
- my $reply=&Apache::lonnet::metadata_query('select * from metadata where '.$query);
-# &Apache::lonnet::logthis("metadata query finished:".time);
- # Output search results
-
- &output_results('Basic',$r,$query,$reply,$hidden);
-
- return OK;
+ return 'select * from metadata where '.$query;
}
@@ -1113,7 +1100,7 @@ contacted, etc.)
sub output_results {
# &Apache::lonnet::logthis("output_results:".time);
my $fnum; # search result counter
- my ($mode,$r,$query,$replyref,$hidden)=@_;
+ my ($mode,$r,$replyref,$hidden)=@_;
my %rhash=%{$replyref};
my $compiledresult='';
my $timeremain=300; # (seconds)
@@ -1307,8 +1294,10 @@ END
unless ($resultflag) {
$r->print("\nThere were no results that matched your query\n");
}
-# $r->print(''."\n"); $r->rflush();
+ $r->print(''.
+ "\n");
$r->print("