--- loncom/interface/lonsearchcat.pm 2001/03/15 18:43:30 1.18 +++ 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,7 @@ 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); @@ -232,12 +257,6 @@ ENDDOCUMENT # --------------------------------------------------------- Various form fields -sub textfield { - my ($title,$name,$value)=@_; - return "\n

$title:
". - ''; -} - sub simpletextfield { my ($name,$value)=@_; return ''; @@ -424,22 +443,110 @@ 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\%'"; + 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($reply); + &output_results($r,$envhash,$reply); return OK; } +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.=< +END + } + } (keys %ENV); + + $r->print(< + +The LearningOnline Network with CAPA +BEGINNING + $r->print(< + + +

Search Catalog

+
+$persistent + + +
+

Helpful Message

+

+Incorrect search query due to blank entry fields. +You need to fill in the relevant +fields on the search page in order for a query to be +processed. +

+ + +RESULTS +} + # ----------------------------- format and output results based on a reply list sub output_results { - my (@replylist)=@_; + my ($r,$envhash,@replylist)=@_; + my %ENV=%{$envhash}; foreach my $reply (@replylist) { my @results; @@ -481,7 +588,7 @@ onClick="javascript:select_data('$title'
END $compiledresult.=<URL: $url +URL: $url
Title: $title
Author(s): $author
@@ -554,7 +661,7 @@ $persistent

Search Query

-Basic search: $expression +Basic search: $ENV{'form.basicexp'}

Search Results

$compiledresult @@ -564,5 +671,10 @@ RESULTS } } +# ------------------------------------------------------------- build_SQL_query +sub build_SQL_query { + +} + 1; __END__