version 1.142, 2002/07/12 21:02:27
|
version 1.143, 2002/07/16 15:02:06
|
Line 125 that produces it. Adding a new view typ
|
Line 125 that produces it. Adding a new view typ
|
adding a line to the definition of this hash and making sure the function |
adding a line to the definition of this hash and making sure the function |
takes the proper parameters. |
takes the proper parameters. |
|
|
|
=item $results_db |
|
|
|
The name of the database results from searches are put in. |
|
|
=back |
=back |
|
|
=cut |
=cut |
Line 140 my $importbutton; # button to take the s
|
Line 144 my $importbutton; # button to take the s
|
my %groupsearch_db; # database hash |
my %groupsearch_db; # database hash |
my $diropendb = ""; # db file |
my $diropendb = ""; # db file |
|
|
|
my $results_db = ""; |
# View Description Function Pointer |
# View Description Function Pointer |
my %Views = ("Detailed Citation View" => \&detailed_citation_view, |
my %Views = ("Detailed Citation View" => \&detailed_citation_view, |
"Summary View" => \&summary_view, |
"Summary View" => \&summary_view, |
Line 178 sub handler {
|
Line 183 sub handler {
|
$r->content_type('text/html'); |
$r->content_type('text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
## |
|
## Initialize global variables |
|
## |
my $domain = $r->dir_config('lonDefDomain'); |
my $domain = $r->dir_config('lonDefDomain'); |
$diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain). |
$diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain). |
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db"; |
"\_".&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'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['catalogmode','launch','acts','mode','form','element', |
['catalogmode','launch','acts','mode','form','element', |
'reqinterface']); |
'reqinterface']); |
## |
## |
## Clear out old values from database |
## Clear out old values from groupsearch database |
## |
## |
if ($ENV{'form.launch'} eq '1') { |
if ($ENV{'form.launch'} eq '1') { |
if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
Line 239 END
|
Line 247 END
|
# We are running a search |
# We are running a search |
my ($query,$customquery,$customshow,$libraries) = |
my ($query,$customquery,$customshow,$libraries) = |
(undef,undef,undef,undef); |
(undef,undef,undef,undef); |
|
my $pretty_string; |
if ($searchtype eq 'Basic') { |
if ($searchtype eq 'Basic') { |
$query = &parse_basic_search($r); |
($query,$pretty_string) = &parse_basic_search($r); |
} elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') { |
} elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') { |
($query,$customquery,$customshow,$libraries) |
($query,$customquery,$customshow,$libraries,$pretty_string) |
= &parse_advanced_search($r); |
= &parse_advanced_search($r); |
return OK if (! defined($query)); |
return OK if (! defined($query)); |
} |
} |
# Output some information to the user. |
# 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->print("Sending search request to LON-CAPA servers.<br />\n"); |
$r->rflush(); |
$r->rflush(); |
# Send query statements over the network to be processed by |
# Send query statements over the network to be processed by |
Line 561 to be somewhat persistent.
|
Line 570 to be somewhat persistent.
|
sub make_persistent { |
sub make_persistent { |
my %save = %{shift()}; |
my %save = %{shift()}; |
my $persistent=''; |
my $persistent=''; |
foreach (keys %save) { |
foreach my $name (keys %save) { |
if (/^form\./ && !/submit/) { |
if ($name =~ /^form\./ && $name !~ /submit/) { |
my $name=$_; |
|
my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name})); |
my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name})); |
$name=~s/^form\.//; |
$name=~s/^form\.//; |
foreach (@values) { |
foreach (@values) { |
s/\"/\'/g; # do not mess with html field syntax |
s/\"/\'/g; # do not mess with html field syntax |
|
next if (! $_ ); |
$persistent.=<<END; |
$persistent.=<<END; |
<input type="hidden" name="$name" value="$_" /> |
<input type="hidden" name="$name" value="$_" /> |
END |
END |
Line 886 Parse advanced search form and return th
|
Line 895 Parse advanced search form and return th
|
sub parse_advanced_search { |
sub parse_advanced_search { |
my ($r)=@_; |
my ($r)=@_; |
my $fillflag=0; |
my $fillflag=0; |
|
my $pretty_search_string = "<br />\n"; |
# Clean up fields for safety |
# Clean up fields for safety |
for my $field ('title','author','subject','keywords','url','version', |
for my $field ('title','author','subject','keywords','url','version', |
'creationdatestart_month','creationdatestart_day', |
'creationdatestart_month','creationdatestart_day', |
Line 925 sub parse_advanced_search {
|
Line 935 sub parse_advanced_search {
|
# Turn the form input into a SQL-based query |
# Turn the form input into a SQL-based query |
my $query=''; |
my $query=''; |
my @queries; |
my @queries; |
|
my $font = '<font color="#800000" face="helvetica">'; |
# Evaluate logical expression AND/OR/NOT phrase fields. |
# Evaluate logical expression AND/OR/NOT phrase fields. |
foreach my $field ('title','author','subject','notes','abstract','url', |
foreach my $field ('title','author','subject','notes','abstract','url', |
'keywords','version','owner','mime') { |
'keywords','version','owner','mime') { |
if ($ENV{'form.'.$field}) { |
if ($ENV{'form.'.$field}) { |
my $searchphrase = $ENV{'form.'.$field}; |
my $searchphrase = $ENV{'form.'.$field}; |
|
$pretty_search_string .= $font."$field</font> contains <b>". |
|
$searchphrase."</b>"; |
if ($ENV{'form.'.$field.'_related'}) { |
if ($ENV{'form.'.$field.'_related'}) { |
$searchphrase = &related_version($searchphrase); |
my @New_Words; |
$ENV{'form.'.$field} = $searchphrase; |
($searchphrase,@New_Words) = &related_version($searchphrase); |
$ENV{'form.'.$field.'_related'} = undef; |
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); |
push @queries,&build_SQL_query($field,$searchphrase); |
} |
} |
} |
} |
Line 945 sub parse_advanced_search {
|
Line 964 sub parse_advanced_search {
|
# Evaluate option lists |
# Evaluate option lists |
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') { |
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') { |
push @queries,"(language like \"$ENV{'form.language'}\")"; |
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') { |
if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') { |
push @queries,"(copyright like \"$ENV{'form.copyright'}\")"; |
push @queries,"(copyright like \"$ENV{'form.copyright'}\")"; |
|
$pretty_search_string.=$font."copyright</font> = ". |
|
&Apache::loncommon::copyrightdescription($ENV{'form.copyright'}). |
|
"<br \>\n"; |
} |
} |
|
# |
# Evaluate date windows |
# Evaluate date windows |
my $datequery=&build_date_queries( |
my $datequery=&build_date_queries( |
$ENV{'form.creationdatestart_month'}, |
$ENV{'form.creationdatestart_month'}, |
Line 968 sub parse_advanced_search {
|
Line 994 sub parse_advanced_search {
|
if ($datequery=~/^Incorrect/) { |
if ($datequery=~/^Incorrect/) { |
&output_date_error($r,$datequery); |
&output_date_error($r,$datequery); |
return ; |
return ; |
} |
} elsif ($datequery) { |
elsif ($datequery) { |
# Here is where you would set up pretty_search_string to output |
|
# date query information. |
push @queries,$datequery; |
push @queries,$datequery; |
} |
} |
# Process form information for custom metadata querying |
# Process form information for custom metadata querying |
my $customquery=undef; |
my $customquery=undef; |
if ($ENV{'form.custommetadata'}) { |
if ($ENV{'form.custommetadata'}) { |
|
$pretty_search_string .=$font."Custom Metadata Search</font>: <b>". |
|
$ENV{'form.custommetadata'}."</b><br />\n"; |
$customquery=&build_custommetadata_query('custommetadata', |
$customquery=&build_custommetadata_query('custommetadata', |
$ENV{'form.custommetadata'}); |
$ENV{'form.custommetadata'}); |
} |
} |
my $customshow=undef; |
my $customshow=undef; |
if ($ENV{'form.customshow'}) { |
if ($ENV{'form.customshow'}) { |
|
$pretty_search_string .=$font."Custom Metadata Display</font>: <b>". |
|
$ENV{'form.customshow'}."</b><br />\n"; |
$customshow=$ENV{'form.customshow'}; |
$customshow=$ENV{'form.customshow'}; |
$customshow=~s/[^\w\s]//g; |
$customshow=~s/[^\w\s]//g; |
my @fields=split(/\s+/,$customshow); |
my @fields=split(/\s+/,$customshow); |
Line 994 sub parse_advanced_search {
|
Line 1025 sub parse_advanced_search {
|
my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}} |
my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}} |
: ($ENV{'form.domains'}) ); |
: ($ENV{'form.domains'}) ); |
my %domain_hash = (); |
my %domain_hash = (); |
|
my $pretty_domains_string; |
foreach (@allowed_domains) { |
foreach (@allowed_domains) { |
$domain_hash{$_}++; |
$domain_hash{$_}++; |
} |
} |
foreach (keys(%Apache::lonnet::libserv)) { |
if ($domain_hash{'any'}) { |
if ($_ eq 'any') { |
$pretty_domains_string = "Searching all domains."; |
$libraries_to_query = undef; |
} else { |
last; |
if (@allowed_domains > 1) { |
|
$pretty_domains_string = "Searching domains:"; |
|
} else { |
|
$pretty_domains_string = "Searching domain "; |
} |
} |
if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) { |
foreach (sort @allowed_domains) { |
push @$libraries_to_query,$_; |
$pretty_domains_string .= "<b>$_</b> "; |
|
} |
|
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) { |
if (@queries) { |
$query=join(" AND ",@queries); |
$query=join(" AND ",@queries); |
Line 1013 sub parse_advanced_search {
|
Line 1054 sub parse_advanced_search {
|
} elsif ($customquery) { |
} elsif ($customquery) { |
$query = ''; |
$query = ''; |
} |
} |
return ($query,$customquery,$customshow,$libraries_to_query); |
return ($query,$customquery,$customshow,$libraries_to_query, |
|
$pretty_search_string); |
} |
} |
|
|
###################################################################### |
###################################################################### |
Line 1047 sub parse_basic_search {
|
Line 1089 sub parse_basic_search {
|
&output_blank_field_error($r); |
&output_blank_field_error($r); |
return OK; |
return OK; |
} |
} |
|
my $pretty_search_string = '<b>'.$ENV{'form.basicexp'}.'</b>'; |
my $search_string = $ENV{'form.basicexp'}; |
my $search_string = $ENV{'form.basicexp'}; |
if ($ENV{'form.related'}) { |
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 |
# Build SQL query string based on form page |
my $query=''; |
my $query=''; |
my $concatarg=join('," ",', |
my $concatarg=join('," ",', |
Line 1058 sub parse_basic_search {
|
Line 1108 sub parse_basic_search {
|
'keywords')); |
'keywords')); |
$concatarg='title' if $ENV{'form.titleonly'}; |
$concatarg='title' if $ENV{'form.titleonly'}; |
$query=&build_SQL_query('concat('.$concatarg.')',$search_string); |
$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; |
} |
} |
|
|
|
|
Line 1082 Note: Using this twice on a string is pr
|
Line 1133 Note: Using this twice on a string is pr
|
sub related_version { |
sub related_version { |
my $search_string = shift; |
my $search_string = shift; |
my $result = $search_string; |
my $result = $search_string; |
|
my %New_Words = (); |
while ($search_string =~ /(\w+)/cg) { |
while ($search_string =~ /(\w+)/cg) { |
my $word = $1; |
my $word = $1; |
next if (lc($word) =~ /\b(or|and|not)\b/); |
next if (lc($word) =~ /\b(or|and|not)\b/); |
my @Words = &Apache::loncommon::get_related_words($word); |
my @Words = &Apache::loncommon::get_related_words($word); |
my $replacement = join " OR ", ($word, |
@Words = ($#Words>4? @Words[0..4] : @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; |
$result =~ s/(\b)$word(\b)/$1($replacement)$2/g; |
} |
} |
return $result; |
return $result,sort(keys(%New_Words)); |
} |
} |
|
|
###################################################################### |
###################################################################### |
Line 1657 Checked for existance & 'edit' mode.
|
Line 1709 Checked for existance & 'edit' mode.
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub search_results_header { |
sub search_results_header { |
my ($mode) = @_; |
my ($mode,$pretty_query) = @_; |
$mode = lc($mode); |
$mode = lc($mode); |
my $title; |
my $title; |
if ($mode eq 'advanced') { |
if ($mode eq 'advanced') { |
Line 1759 SCRIPT
|
Line 1811 SCRIPT
|
<img align=right src=/adm/lonIcons/lonlogos.gif> |
<img align=right src=/adm/lonIcons/lonlogos.gif> |
<h1>$title</h1> |
<h1>$title</h1> |
END |
END |
|
if ($pretty_query) { |
|
$result .= "<p>Search query: $pretty_query</p>"; |
|
} |
return $result; |
return $result; |
} |
} |
|
|