version 1.41, 2001/03/19 16:45:38
|
version 1.43, 2001/03/20 12:21:56
|
Line 2
|
Line 2
|
# Search Catalog |
# Search Catalog |
# |
# |
# 03/08/2001 Scott Harrison |
# 03/08/2001 Scott Harrison |
|
# Scott Harrison: 03/12/2001, 03/13/2001, 03/14/2001, 03/15/2001, 03/19/2001 |
|
# Scott Harrison: 03/20/2001 |
# |
# |
# Functions |
# Functions |
# |
# |
Line 18
|
Line 20
|
# for a calendar date |
# for a calendar date |
# selectbox(title,name,value,%HASH=options) : returns HTML formatted string for |
# selectbox(title,name,value,%HASH=options) : returns HTML formatted string for |
# a selection box field |
# a selection box field |
# advancedsearch() : |
# advancedsearch(server reference, environment reference) : perform a complex |
|
# multi-field logical query |
# filled(field) : determines whether a given field has been filled |
# filled(field) : determines whether a given field has been filled |
# basicsearch() : |
# basicsearch(server reference, environment reference) : perform a simple |
# output_blank_field_error() : outputs a message saying that more fields need |
# single-field logical query |
# to be filled in |
# output_blank_field_error(server reference) : outputs a message saying that |
# output_results() : outputs results from search |
# more fields need to be filled in |
# build_SQL_query() : builds a SQL query string from a logical expression |
# output_results(output mode, |
# with AND/OR keywords |
# server reference, |
|
# environment reference, |
|
# reply list reference) : outputs results from search |
|
# build_SQL_query(field name, logic) : builds a SQL query string from a |
|
# logical expression with AND/OR keywords |
|
# recursive_SQL_query_build(field name, reverse notation expression) : |
|
# builds a SQL query string from a reverse notation expression |
|
# logical expression with AND/OR keywords |
|
|
package Apache::lonsearchcat; |
package Apache::lonsearchcat; |
|
|
Line 464 sub advancedsearch {
|
Line 474 sub advancedsearch {
|
$query="select * from metadata where concat(title) like '\%$ENV{'form.title'}\%'"; |
$query="select * from metadata where concat(title) like '\%$ENV{'form.title'}\%'"; |
my $reply=&Apache::lonnet::metadata_query($query); |
my $reply=&Apache::lonnet::metadata_query($query); |
|
|
&output_results($r,$envhash,$reply); |
&output_results('Advanced',$r,$envhash,$reply); |
return OK; |
return OK; |
} |
} |
|
|
Line 495 sub basicsearch {
|
Line 505 sub basicsearch {
|
|
|
$query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'"; |
$query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'"; |
my $reply=&Apache::lonnet::metadata_query($query); |
my $reply=&Apache::lonnet::metadata_query($query); |
&output_results($r,$envhash,$reply); |
&output_results('Basic',$r,$envhash,$reply); |
return OK; |
return OK; |
} |
} |
|
|
Line 545 RESULTS
|
Line 555 RESULTS
|
|
|
# ----------------------------- format and output results based on a reply list |
# ----------------------------- format and output results based on a reply list |
sub output_results { |
sub output_results { |
my ($r,$envhash,@replylist)=@_; |
my ($mode,$r,$envhash,@replylist)=@_; |
my %ENV=%{$envhash}; |
my %ENV=%{$envhash}; |
foreach my $reply (@replylist) { |
foreach my $reply (@replylist) { |
|
|
Line 660 onClick='self.close();'>
|
Line 670 onClick='self.close();'>
|
$persistent |
$persistent |
<hr> |
<hr> |
<h3>Search Query</h3> |
<h3>Search Query</h3> |
|
RESULTS |
|
if ($mode eq 'Basic') { |
|
$r->print(<<RESULTS); |
<p> |
<p> |
<b>Basic search:</b> $ENV{'form.basicexp'} |
<b>Basic search:</b> $ENV{'form.basicexp'} |
</p> |
</p> |
|
RESULTS |
|
elsif ($mode eq 'Advanced') { |
|
$r->print(<<RESULTS); |
|
<p> |
|
<b>Advanced search</b> |
|
</p> |
|
RESULTS |
|
} |
<h3>Search Results</h3> |
<h3>Search Results</h3> |
$compiledresult |
$compiledresult |
</body> |
</body> |
Line 673 RESULTS
|
Line 694 RESULTS
|
|
|
# ------------------------------------------------------------- build_SQL_query |
# ------------------------------------------------------------- build_SQL_query |
sub build_SQL_query { |
sub build_SQL_query { |
|
my ($field_name,$logic_statement)=@_; |
|
my $q=new Text::Query('abc', |
|
-parse => 'Text::Query::ParseAdvanced', |
|
-build => 'Text::Query::Build'); |
|
$q->prepare($statement); |
|
my $matchexp=${$q}{'matchexp'}; chomp $matchexp; |
|
my $sql_query=&recursive_SQL_query_build($field_name,$matchexp); |
|
} |
|
|
|
# - Recursively parse a reverse notation expression into a SQL query expression |
|
sub recursive_SQL_query_build { |
|
my ($dkey,$pattern)=@_; |
|
my @matches=($pattern=~/(\[[^\]|\[]*\])/g); |
|
return $pattern unless @matches; |
|
foreach my $match (@matches) { |
|
$match=~/\[ (\w+)\s(.*) \]/; |
|
($key,$value)=($1,$2); |
|
my $replacement=''; |
|
if ($key eq 'literal') { |
|
$replacement="($dkey like \"\%$value\%\")"; |
|
} |
|
elsif ($key eq 'and') { |
|
$value=~/(.*[\"|\)]) ([|\(|\^].*)/; |
|
$replacement="($1 AND $2)"; |
|
} |
|
elsif ($key eq 'or') { |
|
$value=~/(.*[\"|\)]) ([|\(|\^].*)/; |
|
$replacement="($1 OR $2)"; |
|
} |
|
substr($pattern, |
|
index($pattern,$match), |
|
length($match), |
|
$replacement |
|
); |
|
} |
|
&recursive_SQL_query_build($dkey,$pattern); |
} |
} |
|
|
1; |
1; |