version 1.147, 2002/07/30 18:30:56
|
version 1.149, 2002/07/30 20:26:05
|
Line 221 sub handler {
|
Line 221 sub handler {
|
## |
## |
untie %groupsearch_db if (tied(%groupsearch_db)); |
untie %groupsearch_db if (tied(%groupsearch_db)); |
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)) { |
&start_fresh_session(); |
&start_fresh_session(); |
untie %groupsearch_db; |
untie %groupsearch_db; |
} else { |
} else { |
Line 257 END
|
Line 257 END
|
if (!defined($ENV{'form.viewselect'})) { |
if (!defined($ENV{'form.viewselect'})) { |
$ENV{'form.viewselect'} ="Detailed Citation View"; |
$ENV{'form.viewselect'} ="Detailed Citation View"; |
} |
} |
$ENV{'form.phase'} = 'displaybasic' if (! exists($ENV{'form.phase'})); |
$ENV{'form.phase'} = 'disp_basic' if (! exists($ENV{'form.phase'})); |
## |
## |
## Switch on the phase |
## Switch on the phase |
## |
## |
Line 283 END
|
Line 283 END
|
($ENV{'form.phase'} eq 'adv_search')) { |
($ENV{'form.phase'} eq 'adv_search')) { |
# Set up table |
# Set up table |
if (! defined(&create_results_table())) { |
if (! defined(&create_results_table())) { |
my $error = &Apache::lonmysql::get_error(); |
|
$r->print(<<END); |
$r->print(<<END); |
<html><head><title>Search Error</title></head> |
<html><head><title>Search Error</title></head> |
<body> |
<body> |
Unable to create table in which to store search results. |
Unable to create table in which to store search results. |
The search has been aborted. |
The search has been aborted. |
<pre> |
|
ERROR: |
|
$error |
|
</pre> |
|
</body> |
</body> |
</html> |
</html> |
END |
END |
Line 627 sub get_persistent_form_data {
|
Line 622 sub get_persistent_form_data {
|
my $filename = shift; |
my $filename = shift; |
return 0 if (! -e $filename); |
return 0 if (! -e $filename); |
return undef if (! tie(%persistent_db,'GDBM_File',$filename, |
return undef if (! tie(%persistent_db,'GDBM_File',$filename, |
&GDBM_READER,0640)); |
&GDBM_READER(),0640)); |
# |
# |
# These make sure we do not get array references printed out as 'values'. |
# These make sure we do not get array references printed out as 'values'. |
my %arrays_allowed = ('form.category'=>1,'form.domains'=>1); |
my %arrays_allowed = ('form.category'=>1,'form.domains'=>1); |
Line 684 sub get_persistent_data {
|
Line 679 sub get_persistent_data {
|
my @Values; # Return array |
my @Values; # Return array |
return undef if (! -e $filename); |
return undef if (! -e $filename); |
return undef if (! tie(%persistent_db,'GDBM_File',$filename, |
return undef if (! tie(%persistent_db,'GDBM_File',$filename, |
&GDBM_READER,0640)); |
&GDBM_READER(),0640)); |
foreach my $name (@Vars) { |
foreach my $name (@Vars) { |
if (! exists($persistent_db{$name})) { |
if (! exists($persistent_db{$name})) { |
push @Values, undef; |
push @Values, undef; |
Line 725 sub make_persistent {
|
Line 720 sub make_persistent {
|
my %save = %{shift()}; |
my %save = %{shift()}; |
my $filename = shift; |
my $filename = shift; |
return undef if (! tie(%persistent_db,'GDBM_File', |
return undef if (! tie(%persistent_db,'GDBM_File', |
$filename,&GDBM_WRCREAT,0640)); |
$filename,&GDBM_WRCREAT(),0640)); |
foreach my $name (keys(%save)) { |
foreach my $name (keys(%save)) { |
next if (! exists($save{$name})); |
next if (! exists($save{$name})); |
next if (! defined($save{$name}) || $save{$name} eq ''); |
next if (! defined($save{$name}) || $save{$name} eq ''); |
Line 1603 sub create_results_table {
|
Line 1598 sub create_results_table {
|
} |
} |
return undef; # Error... |
return undef; # Error... |
} |
} |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
|
|
Line 1628 sub write_status {
|
Line 1624 sub write_status {
|
|
|
=pod |
=pod |
|
|
|
=item Search Status update functions |
|
|
|
Each of the following functions changes the values of one of the |
|
input fields used to display the search status to the user. |
|
|
|
=over 4 |
|
|
|
=item &update_count_status() |
|
|
|
=item &update_contact_status() |
|
|
|
=item &update_read_status() |
|
|
|
=back |
|
|
|
=cut |
|
|
|
###################################################################### |
|
###################################################################### |
|
sub update_count_status { |
|
my ($r,$text) = @_; |
|
$text =~ s/\'/\\\'/g; |
|
$r->print |
|
("<script>document.statusform.count.value = ' $text'</script>\n"); |
|
$r->rflush(); |
|
} |
|
|
|
sub update_contact_status { |
|
my ($r,$text) = @_; |
|
$text =~ s/\'/\\\'/g; |
|
$r->print |
|
("<script>document.statusform.c_server.value = ' $text'</script>\n"); |
|
$r->rflush(); |
|
} |
|
|
|
sub update_read_status { |
|
my ($r,$text) = @_; |
|
$text =~ s/\'/\\\'/g; |
|
$r->print |
|
("<script>document.statusform.r_server.value = ' $text'</script>\n"); |
|
$r->rflush(); |
|
} |
|
|
|
###################################################################### |
|
###################################################################### |
|
|
|
=pod |
|
|
=item &run_search |
=item &run_search |
|
|
=cut |
=cut |
Line 1636 sub write_status {
|
Line 1680 sub write_status {
|
###################################################################### |
###################################################################### |
sub run_search { |
sub run_search { |
my ($r,$query,$customquery,$customshow,$serverlist,$pretty_string) = @_; |
my ($r,$query,$customquery,$customshow,$serverlist,$pretty_string) = @_; |
|
my $c = $r->connection; |
# |
# |
# Timing variables |
# Timing variables |
# |
# |
Line 1645 sub run_search {
|
Line 1690 sub run_search {
|
# Print run_search header |
# Print run_search header |
# |
# |
$r->print("<html><head><title>Search Status</title></head><body>"); |
$r->print("<html><head><title>Search Status</title></head><body>"); |
$r->print("Search: ".$pretty_string."<br />\n"); |
$r->print("Search: ".$pretty_string."\n"); |
$r->rflush(); |
$r->rflush(); |
# |
# |
# Determine the servers we need to contact. |
# Determine the servers we need to contact. |
Line 1660 sub run_search {
|
Line 1705 sub run_search {
|
my $table =$ENV{'form.table'}; |
my $table =$ENV{'form.table'}; |
if (! defined($table) || $table eq '') { |
if (! defined($table) || $table eq '') { |
$r->print("Unable to determine table id to store search results in.". |
$r->print("Unable to determine table id to store search results in.". |
"The search has been aborted."); |
"The search has been aborted.</body></html>"); |
return; |
return; |
} |
} |
my $table_status = &Apache::lonmysql::check_table($table); |
my $table_status = &Apache::lonmysql::check_table($table); |
Line 1674 sub run_search {
|
Line 1719 sub run_search {
|
} |
} |
if (! $table_status) { |
if (! $table_status) { |
$r->print("The table id,$table, we tried to use is invalid.". |
$r->print("The table id,$table, we tried to use is invalid.". |
"The search has been aborted."); |
"The search has been aborted.</body></html>"); |
return; |
return; |
} |
} |
## |
## |
Line 1683 sub run_search {
|
Line 1728 sub run_search {
|
my $hitcountsum; |
my $hitcountsum; |
my $server; |
my $server; |
my $status; |
my $status; |
$r->print("Searching"); |
$r->print(<<END); |
|
<form name="statusform" action="" method="post"> |
|
<table> |
|
<tr><th>Contacting</th><th>Receiving</th><th>Total Matches</th></tr> |
|
<tr> |
|
<td><input type="text" name="c_server" value="" size="15" /></td> |
|
<td><input type="text" name="r_server" value="" size="15" /></td> |
|
<td><input type="text" name="count" value="" size="10" /></td> |
|
</tr> |
|
</table> |
|
</form> |
|
END |
|
$r->rflush(); |
while ((time - $starttime < $max_time) && |
while ((time - $starttime < $max_time) && |
((@Servers_to_contact) || keys(%Server_status))) { |
((@Servers_to_contact) || keys(%Server_status))) { |
# Send out a search request if it needs to be done. |
# Send out a search request if it needs to be done. |
Line 1694 sub run_search {
|
Line 1751 sub run_search {
|
$customshow,[$server]); |
$customshow,[$server]); |
($server) = keys(%$reply); |
($server) = keys(%$reply); |
$Server_status{$server} = $reply->{$server}; |
$Server_status{$server} = $reply->{$server}; |
# $r->print("Contacted:$server:reply:$Server_status{$server}"); |
&update_contact_status($r,$server); |
$r->print(" ."); |
|
$r->rflush(); |
|
} else { |
} else { |
|
&update_contact_status($r,'none'); |
sleep(1); # wait a sec. to give time for files to be written |
sleep(1); # wait a sec. to give time for files to be written |
} |
} |
while (my ($server,$status) = each(%Server_status)) { |
while (my ($server,$status) = each(%Server_status)) { |
|
last if ($c->aborted()); |
if ($status eq 'con_lost') { |
if ($status eq 'con_lost') { |
delete ($Server_status{$server}); |
delete ($Server_status{$server}); |
# $r->print("server $server is not responding."); |
|
next; |
next; |
} |
} |
$status=~/^([\.\w]+)$/; |
$status=~/^([\.\w]+)$/; |
my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$1; |
my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$1; |
if (-e $datafile && ! -e "$datafile.end") { |
if (-e $datafile && ! -e "$datafile.end") { |
# Let the user know we are receiving data from the server |
|
# $r->print("$server:Receiving file"); |
|
next; |
next; |
} |
} |
|
last if ($c->aborted()); |
if (-e "$datafile.end") { |
if (-e "$datafile.end") { |
|
&update_read_status($r,$server); |
if (-z "$datafile") { |
if (-z "$datafile") { |
delete($Server_status{$server}); |
delete($Server_status{$server}); |
next; |
next; |
Line 1729 sub run_search {
|
Line 1785 sub run_search {
|
} |
} |
# Read in the whole file. |
# Read in the whole file. |
while (my $result = <$fh>) { |
while (my $result = <$fh>) { |
|
last if ($c->aborted()); |
# handle custom fields? Someday we will! |
# handle custom fields? Someday we will! |
chomp($result); |
chomp($result); |
next unless $result; |
next unless $result; |
Line 1743 sub run_search {
|
Line 1800 sub run_search {
|
} |
} |
# $r->print(&Apache::lonmysql::get_debug()); |
# $r->print(&Apache::lonmysql::get_debug()); |
$hitcountsum ++; |
$hitcountsum ++; |
|
&update_count_status($r,$hitcountsum) if ($hitcountsum % 50 == 0); |
} # End of foreach (@results) |
} # End of foreach (@results) |
$fh->close(); |
$fh->close(); |
# $server is only deleted if the results file has been |
# $server is only deleted if the results file has been |
Line 1751 sub run_search {
|
Line 1809 sub run_search {
|
# $r->print("Received $new_count more results from ". |
# $r->print("Received $new_count more results from ". |
# $server."."); |
# $server."."); |
} |
} |
|
last if ($c->aborted()); |
|
&update_count_status($r,$hitcountsum); |
} |
} |
|
last if ($c->aborted()); |
# Finished looping through the servers |
# Finished looping through the servers |
} |
} |
|
&update_read_status($r,'none'); |
&Apache::lonmysql::disconnect_from_db(); |
&Apache::lonmysql::disconnect_from_db(); |
# Let the user know |
# Let the user know |
# |
# |
# We have run out of time or run out of servers to talk to and |
# We have run out of time or run out of servers to talk to and |
# results to get. |
# results to get. |
$r->print("<br /><b>Search Completed</b><br />"); |
$r->print("<b>Search Completed.</b> "); |
if ($hitcountsum) { |
if ($hitcountsum) { |
$r->print($hitcountsum." successful matches were found.<br />"); |
$r->print($hitcountsum." matches were found."); |
} else { |
} else { |
$r->print("There were no successful matches to your query.<br />"); |
$r->print("There were no successful matches to your query."); |
} |
} |
$r->print("</body></html>"); |
$r->print("</body></html>"); |
return; |
return; |
Line 1845 sub display_results {
|
Line 1907 sub display_results {
|
## |
## |
if ($ENV{'form.catalogmode'} eq 'groupsearch') { |
if ($ENV{'form.catalogmode'} eq 'groupsearch') { |
if (! tie(%groupsearch_db,'GDBM_File',$diropendb, |
if (! tie(%groupsearch_db,'GDBM_File',$diropendb, |
&GDBM_WRCREAT,0640)) { |
&GDBM_WRCREAT(),0640)) { |
$r->print('Unable to tie hash to db file</body></html>'); |
$r->print('Unable to tie hash to db file</body></html>'); |
$r->rflush(); |
$r->rflush(); |
return; |
return; |
Line 1907 sub display_results {
|
Line 1969 sub display_results {
|
## |
## |
$r->print("<center>Results $min to $max out of $total_results</center>\n"); |
$r->print("<center>Results $min to $max out of $total_results</center>\n"); |
$r->print |
$r->print |
('<br /><center>'. |
('<center>'. |
&prev_next_buttons($min,$ENV{'form.show'},$total_results, |
&prev_next_buttons($min,$ENV{'form.show'},$total_results, |
"table=".$ENV{'form.table'}. |
"table=".$ENV{'form.table'}. |
"&phase=results". |
"&phase=results". |
"&persistent_db_id=".$ENV{'form.persistent_db_id'}) |
"&persistent_db_id=".$ENV{'form.persistent_db_id'}) |
."</center><br />\n" |
."</center>\n" |
); |
); |
## |
## |
## Get results from MySQL table |
## Get results from MySQL table |
Line 1937 sub display_results {
|
Line 1999 sub display_results {
|
$r->print("There were no results matching your query"); |
$r->print("There were no results matching your query"); |
} else { |
} else { |
$r->print |
$r->print |
('<br /><center>'. |
('<center>'. |
&prev_next_buttons($min,$ENV{'form.show'},$total_results, |
&prev_next_buttons($min,$ENV{'form.show'},$total_results, |
"table=".$ENV{'form.table'}. |
"table=".$ENV{'form.table'}. |
"&phase=results". |
"&phase=results". |
"&persistent_db_id=". |
"&persistent_db_id=". |
$ENV{'form.persistent_db_id'}) |
$ENV{'form.persistent_db_id'}) |
."</center><br />\n" |
."</center>\n" |
); |
); |
} |
} |
$r->print("</body></html>"); |
$r->print("</body></html>"); |