[LON-CAPA-cvs] cvs: loncom /interface lonsearchcat.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 16 Jul 2002 15:02:07 -0000
This is a MIME encoded message
--matthew1026831727
Content-Type: text/plain
matthew Tue Jul 16 11:02:07 2002 EDT
Modified files:
/loncom/interface lonsearchcat.pm
Log:
Very beginnings of results database started.
&handler, &parse_basic_search, and &parse_advanced_search
Added support for 'pretty' version of query string which appears at the
top of the search results page.
&search_results_header
Print out the pretty query string.
--matthew1026831727
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20020716110207.txt"
Index: loncom/interface/lonsearchcat.pm
diff -u loncom/interface/lonsearchcat.pm:1.142 loncom/interface/lonsearchcat.pm:1.143
--- loncom/interface/lonsearchcat.pm:1.142 Fri Jul 12 17:02:27 2002
+++ loncom/interface/lonsearchcat.pm Tue Jul 16 11:02:06 2002
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.142 2002/07/12 21:02:27 matthew Exp $
+# $Id: lonsearchcat.pm,v 1.143 2002/07/16 15:02:06 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -125,6 +125,10 @@
adding a line to the definition of this hash and making sure the function
takes the proper parameters.
+=item $results_db
+
+The name of the database results from searches are put in.
+
=back
=cut
@@ -140,6 +144,7 @@
my %groupsearch_db; # database hash
my $diropendb = ""; # db file
+my $results_db = "";
# View Description Function Pointer
my %Views = ("Detailed Citation View" => \&detailed_citation_view,
"Summary View" => \&summary_view,
@@ -178,16 +183,19 @@
$r->content_type('text/html');
$r->send_http_header;
return OK if $r->header_only;
-
+ ##
+ ## Initialize global variables
+ ##
my $domain = $r->dir_config('lonDefDomain');
$diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain).
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db";
-
+ $results_db = "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain).
+ '_'.&Apache::lonnet::escape($ENV{'user.name'})."_searchresults.db";
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['catalogmode','launch','acts','mode','form','element',
'reqinterface']);
##
- ## Clear out old values from database
+ ## Clear out old values from groupsearch database
##
if ($ENV{'form.launch'} eq '1') {
if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {
@@ -239,15 +247,16 @@
# We are running a search
my ($query,$customquery,$customshow,$libraries) =
(undef,undef,undef,undef);
+ my $pretty_string;
if ($searchtype eq 'Basic') {
- $query = &parse_basic_search($r);
+ ($query,$pretty_string) = &parse_basic_search($r);
} elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
- ($query,$customquery,$customshow,$libraries)
+ ($query,$customquery,$customshow,$libraries,$pretty_string)
= &parse_advanced_search($r);
return OK if (! defined($query));
}
# Output some information to the user.
- $r->print(&search_results_header($searchtype));
+ $r->print(&search_results_header($searchtype,$pretty_string));
$r->print("Sending search request to LON-CAPA servers.<br />\n");
$r->rflush();
# Send query statements over the network to be processed by
@@ -561,13 +570,13 @@
sub make_persistent {
my %save = %{shift()};
my $persistent='';
- foreach (keys %save) {
- if (/^form\./ && !/submit/) {
- my $name=$_;
+ foreach my $name (keys %save) {
+ if ($name =~ /^form\./ && $name !~ /submit/) {
my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name}));
$name=~s/^form\.//;
foreach (@values) {
s/\"/\'/g; # do not mess with html field syntax
+ next if (! $_ );
$persistent.=<<END;
<input type="hidden" name="$name" value="$_" />
END
@@ -886,6 +895,7 @@
sub parse_advanced_search {
my ($r)=@_;
my $fillflag=0;
+ my $pretty_search_string = "<br />\n";
# Clean up fields for safety
for my $field ('title','author','subject','keywords','url','version',
'creationdatestart_month','creationdatestart_day',
@@ -925,16 +935,25 @@
# Turn the form input into a SQL-based query
my $query='';
my @queries;
+ my $font = '<font color="#800000" face="helvetica">';
# Evaluate logical expression AND/OR/NOT phrase fields.
foreach my $field ('title','author','subject','notes','abstract','url',
'keywords','version','owner','mime') {
if ($ENV{'form.'.$field}) {
my $searchphrase = $ENV{'form.'.$field};
+ $pretty_search_string .= $font."$field</font> contains <b>".
+ $searchphrase."</b>";
if ($ENV{'form.'.$field.'_related'}) {
- $searchphrase = &related_version($searchphrase);
- $ENV{'form.'.$field} = $searchphrase;
- $ENV{'form.'.$field.'_related'} = undef;
+ my @New_Words;
+ ($searchphrase,@New_Words) = &related_version($searchphrase);
+ if (@New_Words) {
+ $pretty_search_string .= " with related words: ".
+ "<b>@New_Words</b>.";
+ } else {
+ $pretty_search_string .= " with no related words.";
+ }
}
+ $pretty_search_string .= "<br />\n";
push @queries,&build_SQL_query($field,$searchphrase);
}
}
@@ -945,10 +964,17 @@
# Evaluate option lists
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {
push @queries,"(language like \"$ENV{'form.language'}\")";
+ $pretty_search_string.=$font."language</font>= ".
+ &Apache::loncommon::languagedescription($ENV{'form.language'}).
+ "<br />\n";
}
if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') {
push @queries,"(copyright like \"$ENV{'form.copyright'}\")";
+ $pretty_search_string.=$font."copyright</font> = ".
+ &Apache::loncommon::copyrightdescription($ENV{'form.copyright'}).
+ "<br \>\n";
}
+ #
# Evaluate date windows
my $datequery=&build_date_queries(
$ENV{'form.creationdatestart_month'},
@@ -968,18 +994,23 @@
if ($datequery=~/^Incorrect/) {
&output_date_error($r,$datequery);
return ;
- }
- elsif ($datequery) {
+ } elsif ($datequery) {
+ # Here is where you would set up pretty_search_string to output
+ # date query information.
push @queries,$datequery;
}
# Process form information for custom metadata querying
my $customquery=undef;
if ($ENV{'form.custommetadata'}) {
+ $pretty_search_string .=$font."Custom Metadata Search</font>: <b>".
+ $ENV{'form.custommetadata'}."</b><br />\n";
$customquery=&build_custommetadata_query('custommetadata',
$ENV{'form.custommetadata'});
}
my $customshow=undef;
if ($ENV{'form.customshow'}) {
+ $pretty_search_string .=$font."Custom Metadata Display</font>: <b>".
+ $ENV{'form.customshow'}."</b><br />\n";
$customshow=$ENV{'form.customshow'};
$customshow=~s/[^\w\s]//g;
my @fields=split(/\s+/,$customshow);
@@ -994,18 +1025,28 @@
my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}}
: ($ENV{'form.domains'}) );
my %domain_hash = ();
+ my $pretty_domains_string;
foreach (@allowed_domains) {
$domain_hash{$_}++;
}
- foreach (keys(%Apache::lonnet::libserv)) {
- if ($_ eq 'any') {
- $libraries_to_query = undef;
- last;
+ if ($domain_hash{'any'}) {
+ $pretty_domains_string = "Searching all domains.";
+ } else {
+ if (@allowed_domains > 1) {
+ $pretty_domains_string = "Searching domains:";
+ } else {
+ $pretty_domains_string = "Searching domain ";
+ }
+ foreach (sort @allowed_domains) {
+ $pretty_domains_string .= "<b>$_</b> ";
}
- if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {
- push @$libraries_to_query,$_;
+ foreach (keys(%Apache::lonnet::libserv)) {
+ if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {
+ push @$libraries_to_query,$_;
+ }
}
}
+ $pretty_search_string .= $pretty_domains_string."<br />\n";
#
if (@queries) {
$query=join(" AND ",@queries);
@@ -1013,7 +1054,8 @@
} elsif ($customquery) {
$query = '';
}
- return ($query,$customquery,$customshow,$libraries_to_query);
+ return ($query,$customquery,$customshow,$libraries_to_query,
+ $pretty_search_string);
}
######################################################################
@@ -1047,10 +1089,18 @@
&output_blank_field_error($r);
return OK;
}
+ my $pretty_search_string = '<b>'.$ENV{'form.basicexp'}.'</b>';
my $search_string = $ENV{'form.basicexp'};
if ($ENV{'form.related'}) {
- $search_string = &related_version($ENV{'form.basicexp'});
+ my @New_Words;
+ ($search_string,@New_Words) = &related_version($ENV{'form.basicexp'});
+ if (@New_Words) {
+ $pretty_search_string .= " with related words: <b>@New_Words</b>.";
+ } else {
+ $pretty_search_string .= " with no related words.";
+ }
}
+ &Apache::lonnet::logthis("Search String: $search_string");
# Build SQL query string based on form page
my $query='';
my $concatarg=join('," ",',
@@ -1058,7 +1108,8 @@
'keywords'));
$concatarg='title' if $ENV{'form.titleonly'};
$query=&build_SQL_query('concat('.$concatarg.')',$search_string);
- return 'select * from metadata where '.$query;
+ $pretty_search_string .= "<br />\n";
+ return 'select * from metadata where '.$query,$pretty_search_string;
}
@@ -1082,16 +1133,17 @@
sub related_version {
my $search_string = shift;
my $result = $search_string;
+ my %New_Words = ();
while ($search_string =~ /(\w+)/cg) {
my $word = $1;
next if (lc($word) =~ /\b(or|and|not)\b/);
my @Words = &Apache::loncommon::get_related_words($word);
- my $replacement = join " OR ", ($word,
- ($#Words>4? @Words[0..4] : @Words)
- );
+ @Words = ($#Words>4? @Words[0..4] : @Words);
+ foreach (@Words) { $New_Words{$_}++;}
+ my $replacement = join " OR ", ($word,@Words);
$result =~ s/(\b)$word(\b)/$1($replacement)$2/g;
}
- return $result;
+ return $result,sort(keys(%New_Words));
}
######################################################################
@@ -1657,7 +1709,7 @@
######################################################################
######################################################################
sub search_results_header {
- my ($mode) = @_;
+ my ($mode,$pretty_query) = @_;
$mode = lc($mode);
my $title;
if ($mode eq 'advanced') {
@@ -1759,6 +1811,9 @@
<img align=right src=/adm/lonIcons/lonlogos.gif>
<h1>$title</h1>
END
+ if ($pretty_query) {
+ $result .= "<p>Search query: $pretty_query</p>";
+ }
return $result;
}
--matthew1026831727--