--- loncom/interface/lonsearchcat.pm 2001/03/15 14:20:13 1.14
+++ loncom/interface/lonsearchcat.pm 2001/03/19 16:45:38 1.41
@@ -3,6 +3,30 @@
#
# 03/08/2001 Scott Harrison
#
+# Functions
+#
+# handler(server reference) : interacts with the Apache server layer
+# (for /adm/searchcat URLs)
+# simpletextfield(name,value) : returns HTML formatted string for simple text
+# field
+# simplecheckbox(name,value) : returns HTML formatted string for simple
+# checkbox
+# searchphrasefield(title,name,value) : returns HTML formatted string for
+# a search expression phrase field
+# dateboxes(name, defaultmonth, defaultday, defaultyear) : returns HTML
+# formatted string
+# for a calendar date
+# selectbox(title,name,value,%HASH=options) : returns HTML formatted string for
+# a selection box field
+# advancedsearch() :
+# filled(field) : determines whether a given field has been filled
+# basicsearch() :
+# output_blank_field_error() : outputs a message saying that more fields need
+# to be filled in
+# output_results() : outputs results from search
+# build_SQL_query() : builds a SQL query string from a logical expression
+# with AND/OR keywords
+
package Apache::lonsearchcat;
use strict;
@@ -10,6 +34,7 @@ use Apache::Constants qw(:common);
use Apache::lonnet();
use Apache::File();
use CGI qw(:standard);
+use Text::Query;
my %language;
my $scrout;
@@ -77,7 +102,10 @@ END
}
if ($ENV{'form.basicsubmit'} eq 'SEARCH') {
- return &basicsearch($r,$ENV{'form.basicexp'});
+ return &basicsearch($r,\%ENV);
+ }
+ elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
+ return &advancedsearch($r,\%ENV);
}
$scrout=''; # building a part of screen output
@@ -178,7 +206,7 @@ For author-specific metadata, enter in a
CUSTOMMETADATA
$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'});
-$scrout.='initial users of this system do not need to worry about this option';
+$scrout.=' initial users of this system do not need to worry about this option';
# ---------------------------------------------------------------- Print screen
$r->print(<
".
- '';
-}
-
sub simpletextfield {
my ($name,$value)=@_;
return '';
@@ -416,55 +438,158 @@ sub selectbox {
return $selout.'';
}
+# ------------------------------------------------ Performing a advanced search
+sub advancedsearch {
+ my ($r,$envhash)=@_;
+ my %ENV=%{$envhash};
+
+ my $fillflag=0;
+ for my $field ('title','author','subject','keywords','url','version',
+ 'notes','abstract','mime','language','owner',
+ 'custommetadata') {
+ if (&filled($ENV{"form.$field"})) {
+ $fillflag++;
+ }
+ }
+
+ unless ($fillflag) {
+ &output_blank_field_error($r);
+ return OK;
+ }
+
+ my $query='';
+# my $concatarg=join('," ",',
+# ('title', 'author', 'subject', 'notes', 'abstract'));
+
+ $query="select * from metadata where concat(title) like '\%$ENV{'form.title'}\%'";
+ my $reply=&Apache::lonnet::metadata_query($query);
+
+ &output_results($r,$envhash,$reply);
+ return OK;
+}
+
+# ---------------------------------------------------- see if a field is filled
+sub filled {
+ my ($field)=@_;
+ if ($field=~/\S/) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+}
+
# --------------------------------------------------- Performing a basic search
sub basicsearch {
- my ($r,$expression)=@_;
+ my ($r,$envhash)=@_;
+ my %ENV=%{$envhash};
- my $query=$expression;
- $query="select * from metadata where concat(title,\" \",author) like '\%$expression\%'";
-# my $reply=&Apache::lonnet::reply("querysend:$query",'msul3');
+ unless (&filled($ENV{'form.basicexp'})) {
+ &output_blank_field_error($r);
+ return OK;
+ }
+
+ my $query='';
+ my $concatarg=join('," ",',
+ ('title', 'author', 'subject', 'notes', 'abstract'));
+
+ $query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'";
my $reply=&Apache::lonnet::metadata_query($query);
+ &output_results($r,$envhash,$reply);
+ return OK;
+}
- my @results;
+sub output_blank_field_error {
+ my ($r)=@_;
+ # make query information persistent to allow for subsequent revision
+ my $persistent='';
+ map {
+ if (/^form\./ && !/submit/) {
+ my $name=$_;
+ my $key=$name;
+ $name=~s/^form\.//;
+ $persistent.=<Search Catalog
+
-Basic search: $expression +Basic search: $ENV{'form.basicexp'}