[LON-CAPA-cvs] cvs: loncom /interface lonsearchcat.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Wed, 03 Jul 2002 19:11:09 -0000
matthew Wed Jul 3 15:11:09 2002 EDT
Modified files:
/loncom/interface lonsearchcat.pm
Log:
Changed &advancedsearch and &basicsearch to &parse_advanced_search and
&parse_basic_search, both of which now return sql queries. Calls to
&Apache::lonnet::metadata_query are now done in &handler().
&output_results no longer requires the sql query be passed to it.
&parse_raw_result tries to be intelligent about author names.
Index: loncom/interface/lonsearchcat.pm
diff -u loncom/interface/lonsearchcat.pm:1.133 loncom/interface/lonsearchcat.pm:1.134
--- loncom/interface/lonsearchcat.pm:1.133 Thu Jun 27 15:28:50 2002
+++ loncom/interface/lonsearchcat.pm Wed Jul 3 15:11:09 2002
@@ -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.134 2002/07/03 19:11:09 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -107,7 +107,7 @@
=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 @@
##
## 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));
@@ -721,16 +734,28 @@
=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 +791,7 @@
}
unless ($fillflag) {
&output_blank_field_error($r);
- return OK;
+ return ;
}
# Turn the form input into a SQL-based query
my $query='';
@@ -803,18 +828,18 @@
# 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 +867,14 @@
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 +882,16 @@
=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 +917,7 @@
$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 +1107,7 @@
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)
@@ -1372,6 +1366,9 @@
&Apache::loncommon::copyrightdescription($Fields{'copyright'});
$Fields{'mimetag'} =
&Apache::loncommon::filedescription($Fields{'mime'});
+ if ($Fields{'author'}=~/^(\s*|error)$/) {
+ $Fields{'author'}="Unknown Author";
+ }
# Put spaces in the keyword list, if needed.
$Fields{'keywords'}=~ s/,([A-z])/, $1/g;
if ($Fields{'title'}=~ /^\s*$/ ) {