[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*$/ ) {