version 1.135, 2002/07/03 20:10:14
|
version 1.142, 2002/07/12 21:02:27
|
Line 40
|
Line 40
|
|
|
=head1 NAME |
=head1 NAME |
|
|
lonsearchcat |
lonsearchcat - LONCAPA Search Interface |
|
|
=head1 SYNOPSIS |
=head1 SYNOPSIS |
|
|
Line 109 button that closes the search window
|
Line 109 button that closes the search window
|
|
|
button to take the select results and go to group sorting |
button to take the select results and go to group sorting |
|
|
=item %hash |
=item %groupsearch_db |
|
|
The ubiquitous database hash |
Database hash used to save values for the groupsearch RAT interface. |
|
|
=item $diropendb |
=item $diropendb |
|
|
The full path to the (temporary) search database file. This is set and |
The full path to the (temporary) search database file. This is set and |
used in &handler() and is also used in &output_results(). |
used in &handler() and is also used in &output_results(). |
|
|
|
=item %Views |
|
|
|
Hash which associates an output view description with the function |
|
that produces it. Adding a new view type should be as easy as |
|
adding a line to the definition of this hash and making sure the function |
|
takes the proper parameters. |
|
|
=back |
=back |
|
|
=cut |
=cut |
Line 130 my $closebutton; # button that closes t
|
Line 137 my $closebutton; # button that closes t
|
my $importbutton; # button to take the selected results and go to group sorting |
my $importbutton; # button to take the selected results and go to group sorting |
|
|
# -- miscellaneous variables |
# -- miscellaneous variables |
my %hash; # database hash |
my %groupsearch_db; # database hash |
my $diropendb = ""; # db file |
my $diropendb = ""; # db file |
|
|
|
# View Description Function Pointer |
|
my %Views = ("Detailed Citation View" => \&detailed_citation_view, |
|
"Summary View" => \&summary_view, |
|
"Fielded Format" => \&fielded_format_view, |
|
"XML/SGML" => \&xml_sgml_view ); |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
|
|
Line 160 string that holds portions of the screen
|
Line 173 string that holds portions of the screen
|
###################################################################### |
###################################################################### |
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
untie %hash; |
untie %groupsearch_db; |
|
|
$r->content_type('text/html'); |
$r->content_type('text/html'); |
$r->send_http_header; |
$r->send_http_header; |
Line 177 sub handler {
|
Line 190 sub handler {
|
## Clear out old values from database |
## Clear out old values from database |
## |
## |
if ($ENV{'form.launch'} eq '1') { |
if ($ENV{'form.launch'} eq '1') { |
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
&start_fresh_session(); |
&start_fresh_session(); |
untie %hash; |
untie %groupsearch_db; |
} else { |
} else { |
$r->print('<html><head></head><body>Unable to tie hash to db '. |
$r->print('<html><head></head><body>Unable to tie hash to db '. |
'file</body></html>'); |
'file</body></html>'); |
Line 223 END
|
Line 236 END
|
$searchtype = 'Basic' if ($ENV{'form.basicsubmit'} eq 'SEARCH'); |
$searchtype = 'Basic' if ($ENV{'form.basicsubmit'} eq 'SEARCH'); |
$searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH'); |
$searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH'); |
if ($searchtype) { |
if ($searchtype) { |
|
# We are running a search |
my ($query,$customquery,$customshow,$libraries) = |
my ($query,$customquery,$customshow,$libraries) = |
(undef,undef,undef,undef); |
(undef,undef,undef,undef); |
if ($searchtype eq 'Basic') { |
if ($searchtype eq 'Basic') { |
Line 232 END
|
Line 246 END
|
= &parse_advanced_search($r); |
= &parse_advanced_search($r); |
return OK if (! defined($query)); |
return OK if (! defined($query)); |
} |
} |
|
# Output some information to the user. |
|
$r->print(&search_results_header($searchtype)); |
|
$r->print("Sending search request to LON-CAPA servers.<br />\n"); |
|
$r->rflush(); |
# Send query statements over the network to be processed by |
# Send query statements over the network to be processed by |
# either the SQL database or a recursive scheme of 'grep'-like |
# either the SQL database or a recursive scheme of 'grep'-like |
# actions (for custom metadata). |
# actions (for custom metadata). |
$r->rflush(); |
|
my $reply=&Apache::lonnet::metadata_query($query,$customquery, |
my $reply=&Apache::lonnet::metadata_query($query,$customquery, |
$customshow,$libraries); |
$customshow,$libraries); |
|
$r->rflush(); |
&output_results($searchtype,$r,$reply,$hidden); |
&output_results($searchtype,$r,$reply,$hidden); |
} elsif ($ENV{'form.reqinterface'} eq 'advanced') { |
} else { |
|
# |
|
# We need to get information to search on |
|
# |
|
# Set the default view if it is not already set. |
|
if (!defined($ENV{'form.viewselect'})) { |
|
$ENV{'form.viewselect'} ="Detailed Citation View"; |
|
} |
# Output the advanced interface |
# Output the advanced interface |
$r->print(&advanced_search_form($closebutton,$hidden)); |
if ($ENV{'form.reqinterface'} eq 'advanced') { |
} else { |
$r->print(&advanced_search_form($closebutton,$hidden)); |
# Output normal search interface |
} else { |
$r->print(&basic_search_form($closebutton,$hidden)); |
# Output normal search interface |
|
$r->print(&basic_search_form($closebutton,$hidden)); |
|
} |
} |
} |
return OK; |
return OK; |
} |
} |
Line 295 ENDDOCUMENT
|
Line 322 ENDDOCUMENT
|
' '; |
' '; |
# $scrout.=&simplecheckbox('allversions',$ENV{'form.allversions'}); |
# $scrout.=&simplecheckbox('allversions',$ENV{'form.allversions'}); |
# $scrout.='<font color="#800000">Search historic archives</font>'; |
# $scrout.='<font color="#800000">Search historic archives</font>'; |
$scrout.=<<ENDDOCUMENT; |
my $checkbox = &simplecheckbox('related',$ENV{'form.related'}); |
</td><td><a href="/adm/searchcat?reqinterface=advanced">Advanced Search</a></td></tr></table> |
$scrout.=<<END; |
|
</td><td><a href="/adm/searchcat?reqinterface=advanced">Advanced Search</a></td></tr> |
|
<tr><td>$checkbox use related words</td><td></td></tr> |
|
</table> |
</p> |
</p> |
<p> |
<p> |
<input type="submit" name="basicsubmit" value='SEARCH' /> |
<input type="submit" name="basicsubmit" value='SEARCH' /> |
$closebutton |
$closebutton |
<!-- view selection --> |
END |
<select name="viewselect"> |
$scrout.=&selectbox(undef,'viewselect', |
<option value="Detailed Citation View" selected="true" >Detailed Citation View</option> |
$ENV{'form.viewselect'}, |
<option value="Summary View" >Summary View</option> |
undef,undef,undef, |
<option value="Fielded Format">Fielded Format</option> |
sort(keys(%Views))); |
<option value="XML/SGML" >XML/SGML</option> |
$scrout.=<<ENDDOCUMENT; |
</select> |
|
<!-- end of view selection --> |
|
<input type="button" value="HELP" onClick="openhelp()" /> |
<input type="button" value="HELP" onClick="openhelp()" /> |
</p> |
</p> |
</form> |
</form> |
Line 341 $closebutton
|
Line 369 $closebutton
|
<input type="button" value="HELP" onClick="openhelp()" /> |
<input type="button" value="HELP" onClick="openhelp()" /> |
</p> |
</p> |
END |
END |
|
if (!defined($ENV{'form.viewselect'})) { |
|
$ENV{'form.viewselect'} ="Detailed Citation View"; |
|
} |
my $scrout=<<"ENDHEADER"; |
my $scrout=<<"ENDHEADER"; |
<html> |
<html> |
<head> |
<head> |
Line 365 $hidden
|
Line 396 $hidden
|
<table> |
<table> |
<tr><td><font color="#800000" face="helvetica"><b>VIEW:</b></font></td> |
<tr><td><font color="#800000" face="helvetica"><b>VIEW:</b></font></td> |
<td> |
<td> |
<!-- view selection --> |
|
<select name="viewselect" size ="1"> |
|
<option value="Detailed Citation View" selected="true">Detailed Citation View</option> |
|
<option value="Summary View">Summary View</option> |
|
<option value="Fielded Format">Fielded Format</option> |
|
<option value="XML/SGML">XML/SGML</option> |
|
</select> |
|
<!-- end of view selection --> |
|
</td></tr> |
|
ENDHEADER |
ENDHEADER |
$scrout.=&searchphrasefield('title', 'title' ,$ENV{'form.title'}); |
$scrout.=&selectbox(undef,'viewselect', |
|
$ENV{'form.viewselect'}, |
|
undef,undef,undef, |
|
sort(keys(%Views))); |
|
$scrout.="</td><td>Related<br />Words</td></tr>\n"; |
|
$scrout.=&searchphrasefield_with_related('title', 'title' , |
|
$ENV{'form.title'}); |
$scrout.=&searchphrasefield('author', 'author' ,$ENV{'form.author'}); |
$scrout.=&searchphrasefield('author', 'author' ,$ENV{'form.author'}); |
$scrout.=&searchphrasefield('subject', 'subject' ,$ENV{'form.subject'}); |
$scrout.=&searchphrasefield_with_related('subject', 'subject' , |
$scrout.=&searchphrasefield('keywords','keywords',$ENV{'form.keywords'}); |
$ENV{'form.subject'}); |
|
$scrout.=&searchphrasefield_with_related('keywords','keywords', |
|
$ENV{'form.keywords'}); |
$scrout.=&searchphrasefield('URL', 'url' ,$ENV{'form.url'}); |
$scrout.=&searchphrasefield('URL', 'url' ,$ENV{'form.url'}); |
$scrout.=&searchphrasefield('notes', 'notes' ,$ENV{'form.notes'}); |
$scrout.=&searchphrasefield_with_related('notes', 'notes' , |
$scrout.=&searchphrasefield('abstract','abstract',$ENV{'form.abstract'}); |
$ENV{'form.notes'}); |
|
$scrout.=&searchphrasefield_with_related('abstract','abstract', |
|
$ENV{'form.abstract'}); |
# Hack - an empty table row. |
# Hack - an empty table row. |
$scrout.="<tr><td> </td><td> </td></tr>\n"; |
$scrout.="<tr><td> </td><td> </td><td> </td></tr>\n"; |
$scrout.=&searchphrasefield('file<br />extension','mime', |
$scrout.=&searchphrasefield('file<br />extension','mime', |
$ENV{'form.mime'}); |
$ENV{'form.mime'}); |
$scrout.="<tr><td> </td><td> </td></tr>\n"; |
$scrout.="<tr><td> </td><td> </td><td> </td></tr>\n"; |
$scrout.=&searchphrasefield('publisher<br />owner','owner', |
$scrout.=&searchphrasefield('publisher<br />owner','owner', |
$ENV{'form.owner'}); |
$ENV{'form.owner'}); |
$scrout.="</table>\n"; |
$scrout.="</table>\n"; |
Line 545 END
|
Line 577 END
|
return $persistent; |
return $persistent; |
} |
} |
|
|
|
|
###################################################################### |
###################################################################### |
|
# HTML form building functions # |
###################################################################### |
###################################################################### |
|
|
=pod |
=pod |
Line 555 END
|
Line 587 END
|
|
|
=over 4 |
=over 4 |
|
|
|
=cut |
|
|
|
############################################### |
|
############################################### |
|
|
|
=pod |
|
|
=item &simpletextfield() |
=item &simpletextfield() |
|
|
Inputs: $name,$value,$size |
Inputs: $name,$value,$size |
Line 562 Inputs: $name,$value,$size
|
Line 601 Inputs: $name,$value,$size
|
Returns a text input field with the given name, value, and size. |
Returns a text input field with the given name, value, and size. |
If size is not specified, a value of 20 is used. |
If size is not specified, a value of 20 is used. |
|
|
|
=cut |
|
|
|
############################################### |
|
############################################### |
|
|
|
sub simpletextfield { |
|
my ($name,$value,$size)=@_; |
|
$size = 20 if (! defined($size)); |
|
return '<input type="text" name="'.$name. |
|
'" size="'.$size.'" value="'.$value.'" />'; |
|
} |
|
|
|
############################################### |
|
############################################### |
|
|
|
=pod |
|
|
=item &simplecheckbox() |
=item &simplecheckbox() |
|
|
Inputs: $name,$value |
Inputs: $name,$value |
Line 569 Inputs: $name,$value
|
Line 625 Inputs: $name,$value
|
Returns a simple check box with the given $name. |
Returns a simple check box with the given $name. |
If $value eq 'on' the box is checked. |
If $value eq 'on' the box is checked. |
|
|
=item &searchphrasefield() |
=cut |
|
|
Inputs: $title,$name,$value |
############################################### |
|
############################################### |
|
|
Returns html for a title line and an input field for entering search terms. |
sub simplecheckbox { |
the instructions "Enter terms or phrases separated by search operators such |
my ($name,$value)=@_; |
as AND, OR, or NOT." are given following the title. The entry field (which |
my $checked=''; |
is where the $name and $value are used) is an 80 column simpletextfield. |
$checked="checked" if $value eq 'on'; |
|
return '<input type="checkbox" name="'.$name.'" '. $checked . ' />'; |
|
} |
|
|
=item &dateboxes() |
############################################### |
|
############################################### |
|
|
Returns html selection form elements for the specification of |
=pod |
the day, month, and year. |
|
|
|
=item &selectbox() |
=item &fieldtitle() |
|
|
Returns a scalar containing an html <select> form. |
Input: $title |
|
|
Inputs: |
Returns a scalar with html which will display $title as a search |
|
field heading. |
|
|
=over 4 |
=cut |
|
|
=item $title |
############################################### |
|
############################################### |
|
|
Printed above the select box, in uppercase. |
sub fieldtitle { |
|
my $title = uc(shift()); |
|
return '<font color="#800000" face="helvetica"><b>'.$title. |
|
': </b></font>'; |
|
} |
|
|
=item $name |
############################################### |
|
############################################### |
|
|
The name element of the <select> tag. |
=pod |
|
|
=item $default |
=item &searchphrasefield() |
|
|
The default value of the form. Can be $anyvalue or in @idlist. |
Inputs: $title,$name,$value |
|
|
=item $anyvalue |
Returns html for a title line and an input field for entering search terms. |
|
The entry field (which is where the $name and $value are used) is a 50 column |
|
simpletextfield. The html returned is for a row in a three column table. |
|
|
The <option value="..."> used to indicate a default of |
=cut |
none of the values. |
|
|
|
=item $anytag |
############################################### |
|
############################################### |
|
|
|
sub searchphrasefield { |
|
my ($title,$name,$value)=@_; |
|
return '<tr><td>'.&fieldtitle($title).'</td><td>'. |
|
&simpletextfield($name,$value,50)."</td><td> </td></tr>\n"; |
|
} |
|
|
The text associate with $anyvalue above. |
############################################### |
|
############################################### |
|
|
=item $functionref |
=pod |
|
|
Each element in @idlist will be passed as a parameter |
=item &searchphrasefield_with_related() |
to the function referenced here. The return value of the function should |
|
be a scalar description of the items. If this value is undefined the |
|
description of each item in @idlist will be the item name. |
|
|
|
=item @idlist |
Inputs: $title,$name,$value |
|
|
The items to be selected from. One of these or $anyvalue will be the |
Returns html for a title line and an input field for entering search terms |
value returned by the form element, $ENV{form.$name}. |
and a check box for 'related words'. The entry field (which is where the |
|
$name and $value are used) is a 50 column simpletextfield. The name of |
|
the related words checkbox is "$name_related". |
|
|
=back |
=cut |
|
|
=back |
############################################### |
|
############################################### |
|
|
|
sub searchphrasefield_with_related { |
|
my ($title,$name,$value)=@_; |
|
return '<tr><td>'.&fieldtitle($title).'</td><td>'. |
|
&simpletextfield($name,$value,50).'</td><td align="center"> '. |
|
&simplecheckbox($name.'_related',$ENV{'form.'.$name.'_related'}). |
|
" </td></tr>\n"; |
|
} |
|
|
=cut |
############################################### |
|
############################################### |
|
|
###################################################################### |
=pod |
###################################################################### |
|
|
|
sub simpletextfield { |
=item &dateboxes() |
my ($name,$value,$size)=@_; |
|
$size = 20 if (! defined($size)); |
|
return '<input type="text" name="'.$name. |
|
'" size="'.$size.'" value="'.$value.'" />'; |
|
} |
|
|
|
sub simplecheckbox { |
Returns html selection form elements for the specification of |
my ($name,$value)=@_; |
the day, month, and year. |
my $checked=''; |
|
$checked="checked" if $value eq 'on'; |
|
return '<input type="checkbox" name="'.$name.'" '. $checked . ' />'; |
|
} |
|
|
|
sub searchphrasefield { |
=cut |
my ($title,$name,$value)=@_; |
|
my $uctitle=uc($title); |
############################################### |
return '<tr><td><font color="#800000" face="helvetica">'. |
############################################### |
'<b>'.$uctitle.': </b></font></td><td>'. |
|
&simpletextfield($name,$value,50)."</td></tr>\n"; |
|
} |
|
|
|
sub dateboxes { |
sub dateboxes { |
my ($name,$defaultmonth,$defaultday,$defaultyear, |
my ($name,$defaultmonth,$defaultday,$defaultyear, |
Line 699 END
|
Line 770 END
|
return "$month$day$year"; |
return "$month$day$year"; |
} |
} |
|
|
|
############################################### |
|
############################################### |
|
|
|
=pod |
|
|
|
=item &selectbox() |
|
|
|
Returns a scalar containing an html <select> form. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $title |
|
|
|
Printed above the select box, in uppercase. If undefined, only a select |
|
box will be returned, with no additional html. |
|
|
|
=item $name |
|
|
|
The name element of the <select> tag. |
|
|
|
=item $default |
|
|
|
The default value of the form. Can be $anyvalue, or in @idlist. |
|
|
|
=item $anyvalue |
|
|
|
The <option value="..."> used to indicate a default of |
|
none of the values. Can be undef. |
|
|
|
=item $anytag |
|
|
|
The text associate with $anyvalue above. |
|
|
|
=item $functionref |
|
|
|
Each element in @idlist will be passed as a parameter |
|
to the function referenced here. The return value of the function should |
|
be a scalar description of the items. If this value is undefined the |
|
description of each item in @idlist will be the item name. |
|
|
|
=item @idlist |
|
|
|
The items to be selected from. One of these or $anyvalue will be the |
|
value returned by the form element, $ENV{form.$name}. |
|
|
|
=back |
|
|
|
=cut |
|
|
|
############################################### |
|
|
sub selectbox { |
sub selectbox { |
my ($title,$name,$default,$anyvalue,$anytag,$functionref,@idlist)=@_; |
my ($title,$name,$default,$anyvalue,$anytag,$functionref,@idlist)=@_; |
if (! defined($functionref)) { $functionref = sub { $_[0]}; } |
if (! defined($functionref)) { $functionref = sub { $_[0]}; } |
my $uctitle=uc($title); |
my $selout=''; |
my $selout="\n".'<p><font color="#800000" face="helvetica">'. |
if (defined($title)) { |
'<b>'.$uctitle.': </b></font><select name="'.$name.'">'; |
my $uctitle=uc($title); |
foreach ($anyvalue,@idlist) { |
$selout="\n".'<p><font color="#800000" face="helvetica">'. |
|
'<b>'.$uctitle.': </b></font>'; |
|
} |
|
$selout .= '<select name="'.$name.'">'; |
|
unshift @idlist,$anyvalue if (defined($anyvalue)); |
|
foreach (@idlist) { |
$selout.='<option value="'.$_.'"'; |
$selout.='<option value="'.$_.'"'; |
if ($_ eq $default and !/^any$/) { |
if ($_ eq $default and !/^any$/) { |
$selout.=' selected >'.&{$functionref}($_).'</option>'; |
$selout.=' selected >'.&{$functionref}($_).'</option>'; |
Line 715 sub selectbox {
|
Line 844 sub selectbox {
|
} |
} |
else {$selout.='>'.&{$functionref}($_).'</option>';} |
else {$selout.='>'.&{$functionref}($_).'</option>';} |
} |
} |
return $selout.'</select></p>'; |
return $selout.'</select>'.(defined($title)?'</p>':' '); |
} |
} |
|
|
###################################################################### |
###################################################################### |
|
# End of HTML form building functions # |
|
###################################################################### |
|
|
|
=pod |
|
|
|
=back |
|
|
|
=cut |
|
|
|
|
|
###################################################################### |
###################################################################### |
###################################################################### |
|
|
=pod |
=pod |
Line 789 sub parse_advanced_search {
|
Line 929 sub parse_advanced_search {
|
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}) { |
push @queries,&build_SQL_query($field,$ENV{'form.'.$field}); |
my $searchphrase = $ENV{'form.'.$field}; |
|
if ($ENV{'form.'.$field.'_related'}) { |
|
$searchphrase = &related_version($searchphrase); |
|
$ENV{'form.'.$field} = $searchphrase; |
|
$ENV{'form.'.$field.'_related'} = undef; |
|
} |
|
push @queries,&build_SQL_query($field,$searchphrase); |
} |
} |
} |
} |
# I dislike the hack below. |
# I dislike the hack below. |
Line 901 sub parse_basic_search {
|
Line 1047 sub parse_basic_search {
|
&output_blank_field_error($r); |
&output_blank_field_error($r); |
return OK; |
return OK; |
} |
} |
|
my $search_string = $ENV{'form.basicexp'}; |
|
if ($ENV{'form.related'}) { |
|
$search_string = &related_version($ENV{'form.basicexp'}); |
|
} |
# 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('," ",', |
('title', 'author', 'subject', 'notes', 'abstract', |
('title', 'author', 'subject', 'notes', 'abstract', |
'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.')',$ENV{'form.'.'basicexp'}); |
|
return 'select * from metadata where '.$query; |
return 'select * from metadata where '.$query; |
} |
} |
|
|
Line 919 sub parse_basic_search {
|
Line 1067 sub parse_basic_search {
|
|
|
=pod |
=pod |
|
|
|
=item &related_version |
|
|
|
Modifies an input string to include related words. Words in the string |
|
are replaced with parenthesized lists of 'OR'd words. For example |
|
"torque" is replaced with "(torque OR word1 OR word2 OR ...)". |
|
|
|
Note: Using this twice on a string is probably silly. |
|
|
|
=cut |
|
|
|
###################################################################### |
|
###################################################################### |
|
sub related_version { |
|
my $search_string = shift; |
|
my $result = $search_string; |
|
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) |
|
); |
|
$result =~ s/(\b)$word(\b)/$1($replacement)$2/g; |
|
} |
|
return $result; |
|
} |
|
|
|
###################################################################### |
|
###################################################################### |
|
|
|
=pod |
|
|
=item &build_SQL_query() |
=item &build_SQL_query() |
|
|
Builds a SQL query string from a logical expression with AND/OR keywords |
Builds a SQL query string from a logical expression with AND/OR keywords |
Line 1107 sub output_results {
|
Line 1287 sub output_results {
|
my $elapsetime=0; |
my $elapsetime=0; |
my $resultflag=0; |
my $resultflag=0; |
my $tflag=1; |
my $tflag=1; |
my $viewselect=$ENV{'form.viewselect'}; |
## |
|
## Set viewing function |
|
## |
|
my $viewfunction = $Views{$ENV{'form.viewselect'}}; |
|
if (!defined($viewfunction)) { |
|
$r->print("Internal Error - Bad view selected.\n"); |
|
$r->rflush(); |
|
return; |
|
} |
# |
# |
# make query information persistent to allow for subsequent revision |
# make query information persistent to allow for subsequent revision |
my $persistent=&make_persistent(\%ENV); |
my $persistent=&make_persistent(\%ENV); |
# spit out the results header |
# |
$r->print(&search_results_header($mode)); |
# Begin producing output |
$r->rflush(); |
$r->rflush(); |
|
# |
# begin showing the cataloged results |
# begin showing the cataloged results |
my $action = "/adm/searchcat"; |
my $action = "/adm/searchcat"; |
if ($mode eq 'Basic') { |
if ($mode eq 'Basic') { |
Line 1134 $persistent
|
Line 1323 $persistent
|
CATALOGCONTROLS |
CATALOGCONTROLS |
# |
# |
# make the pop-up window for status |
# make the pop-up window for status |
# |
|
$r->print(&make_popwin(%rhash)); |
$r->print(&make_popwin(%rhash)); |
$r->rflush(); |
$r->rflush(); |
## |
## |
Line 1211 CATALOGCONTROLS
|
Line 1399 CATALOGCONTROLS
|
} # end of if ($reply eq 'con_lost') else statement |
} # end of if ($reply eq 'con_lost') else statement |
my %Fields = undef; # Holds the data to be sent to the various |
my %Fields = undef; # Holds the data to be sent to the various |
# *_view routines. |
# *_view routines. |
my ($extrashow,$customfields,$customhash) = &handle_custom_fields(\@results); |
my ($extrashow,$customfields,$customhash) = |
|
&handle_custom_fields(\@results); |
my @customfields = @$customfields; |
my @customfields = @$customfields; |
my %customhash = %$customhash; |
my %customhash = %$customhash; |
untie %hash if (keys %hash); |
untie %groupsearch_db if (tied %groupsearch_db); |
# |
# |
if (! tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
if (! tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
$r->print('<html><head></head><body>Unable to tie hash to db '. |
$r->print('<html><head></head><body>Unable to tie hash to db '. |
'file</body></html>'); |
'file</body></html>'); |
} else { |
} else { |
Line 1228 CATALOGCONTROLS
|
Line 1417 CATALOGCONTROLS
|
chomp $result; |
chomp $result; |
next unless $result; |
next unless $result; |
%Fields = &parse_raw_result($result,$rkey); |
%Fields = &parse_raw_result($result,$rkey); |
|
# |
|
# Check copyright tags and skip results the user cannot use |
|
my (undef,undef,$resdom,$resname) = split('/',$Fields{'url'}); |
|
# Check for priv |
|
if (($Fields{'copyright'} eq 'priv') && |
|
(($ENV{'user.name'} ne $resname) && |
|
($ENV{'user.domain'} ne $resdom))) { |
|
next; |
|
} |
|
# Check for domain |
|
if (($Fields{'copyright'} eq 'domain') && |
|
($ENV{'user.domain'} ne $resdom)) { |
|
next; |
|
} |
|
# |
$Fields{'extrashow'}=$extrashow; |
$Fields{'extrashow'}=$extrashow; |
if ($extrashow) { |
if ($extrashow) { |
foreach my $field (@customfields) { |
foreach my $field (@customfields) { |
Line 1249 END
|
Line 1453 END
|
} |
} |
if ($ENV{'form.catalogmode'} eq 'groupsearch') { |
if ($ENV{'form.catalogmode'} eq 'groupsearch') { |
$fnum+=0; |
$fnum+=0; |
$hash{"pre_${fnum}_link"}=$Fields{'url'}; |
$groupsearch_db{"pre_${fnum}_link"}=$Fields{'url'}; |
$hash{"pre_${fnum}_title"}=$Fields{'title'}; |
$groupsearch_db{"pre_${fnum}_title"}=$Fields{'title'}; |
$compiledresult.=<<END; |
$compiledresult.=<<END; |
<font size='-1'> |
<font size='-1'> |
<input type="checkbox" name="returnvalues" value="SELECT" |
<input type="checkbox" name="returnvalues" value="SELECT" |
Line 1262 END
|
Line 1466 END
|
# <input type="hidden" name="url$fnum" value="$url" /> |
# <input type="hidden" name="url$fnum" value="$url" /> |
$fnum++; |
$fnum++; |
} |
} |
if ($viewselect eq 'Detailed Citation View') { |
# Render the result into html |
$compiledresult.=&detailed_citation_view |
$compiledresult.= &$viewfunction(%Fields, hostname => $rkey ); |
(%Fields, hostname => $rkey ); |
|
} |
|
elsif ($viewselect eq 'Summary View') { |
|
$compiledresult.=&summary_view |
|
(%Fields, hostname => $rkey ); |
|
} |
|
elsif ($viewselect eq 'Fielded Format') { |
|
$compiledresult.=&fielded_format_view |
|
(%Fields, hostname => $rkey ); |
|
} |
|
elsif ($viewselect eq 'XML/SGML') { |
|
$compiledresult.=&xml_sgml_view |
|
(%Fields, hostname => $rkey ); |
|
} |
|
if ($compiledresult or $servercount!=$servernum) { |
if ($compiledresult or $servercount!=$servernum) { |
$compiledresult.="<hr align='left' width='200' noshade />"; |
$compiledresult.="<hr align='left' width='200' noshade />"; |
} |
} |
} |
} |
untie %hash; |
untie %groupsearch_db; |
} |
} |
if ($compiledresult) { |
if ($compiledresult) { |
$resultflag=1; |
$resultflag=1; |
$r->print($compiledresult); |
$r->print($compiledresult); |
} |
} |
my $percent=sprintf('%3.0f',($servercount/$servernum*100)); |
|
} # End of foreach loop over servers remaining |
} # End of foreach loop over servers remaining |
} # End of big loop - while($serversleft && $timeremain) |
} # End of big loop - while($serversleft && $timeremain) |
unless ($resultflag) { |
unless ($resultflag) { |
Line 1932 RESULTS
|
Line 2121 RESULTS
|
|
|
=item &start_fresh_session() |
=item &start_fresh_session() |
|
|
Cleans the global %hash by removing all fields which begin with |
Cleans the global %groupsearch_db by removing all fields which begin with |
'pre_' or 'store'. |
'pre_' or 'store'. |
|
|
=cut |
=cut |
Line 1940 Cleans the global %hash by removing all
|
Line 2129 Cleans the global %hash by removing all
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub start_fresh_session { |
sub start_fresh_session { |
delete $hash{'mode_catalog'}; |
delete $groupsearch_db{'mode_catalog'}; |
foreach (keys %hash) { |
foreach (keys %groupsearch_db) { |
if ($_ =~ /^pre_/) { |
if ($_ =~ /^pre_/) { |
delete $hash{$_}; |
delete $groupsearch_db{$_}; |
} |
} |
if ($_ =~ /^store/) { |
if ($_ =~ /^store/) { |
delete $hash{$_}; |
delete $groupsearch_db{$_}; |
} |
} |
} |
} |
} |
} |