version 1.175, 2003/05/30 20:54:28
|
version 1.180, 2003/06/16 20:54:39
|
Line 82 use Text::Query;
|
Line 82 use Text::Query;
|
use GDBM_File; |
use GDBM_File; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonmysql(); |
use Apache::lonmysql(); |
use Apache::lonmenu(); |
|
|
|
# ---------------------------------------- variables used throughout the module |
# ---------------------------------------- variables used throughout the module |
|
|
Line 215 sub handler {
|
Line 214 sub handler {
|
## Initialize global variables |
## 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/$ENV{'user.domain'}_$ENV{'user.name'}_searchcat.db"; |
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db"; |
|
# |
# |
# set the name of the persistent database |
# set the name of the persistent database |
# $ENV{'form.persistent_db_id'} can only have digits in it. |
# $ENV{'form.persistent_db_id'} can only have digits in it. |
Line 384 END
|
Line 382 END
|
(undef,undef,undef,undef); |
(undef,undef,undef,undef); |
my $pretty_string; |
my $pretty_string; |
if ($ENV{'form.phase'} eq 'basic_search') { |
if ($ENV{'form.phase'} eq 'basic_search') { |
($query,$pretty_string) = &parse_basic_search($r,$closebutton); |
($query,$pretty_string,$libraries) = |
|
&parse_basic_search($r,$closebutton); |
} else { # Advanced search |
} else { # Advanced search |
($query,$customquery,$customshow,$libraries,$pretty_string) |
($query,$customquery,$customshow,$libraries,$pretty_string) |
= &parse_advanced_search($r,$closebutton); |
= &parse_advanced_search($r,$closebutton); |
Line 556 then press SEARCH below.
|
Line 555 then press SEARCH below.
|
ENDDOCUMENT |
ENDDOCUMENT |
$scrout.=' '.&simpletextfield('basicexp',$ENV{'form.basicexp'},40). |
$scrout.=' '.&simpletextfield('basicexp',$ENV{'form.basicexp'},40). |
' '; |
' '; |
my $checkbox = &simplecheckbox('related',$ENV{'form.related'}); |
my $relatedcheckbox = &simplecheckbox('related',$ENV{'form.related'}); |
|
my $domain = $r->dir_config('lonDefDomain'); |
|
my $domaincheckbox = &simplecheckbox('domains',$domain,'checked'); |
$scrout.=<<END; |
$scrout.=<<END; |
</td><td><a |
</td><td><a |
href="/adm/searchcat?phase=disp_adv&catalogmode=$ENV{'form.catalogmode'}&launch=$ENV{'form.launch'}" |
href="/adm/searchcat?phase=disp_adv&catalogmode=$ENV{'form.catalogmode'}&launch=$ENV{'form.launch'}" |
>Advanced Search</a></td></tr> |
>Advanced Search</a></td></tr> |
<tr><td>$checkbox use related words</td><td></td></tr> |
<tr><td>$relatedcheckbox use related words</td> |
|
<td>$domaincheckbox only search domain <b>$domain</b></td></tr> |
</table> |
</table> |
</p> |
</p> |
<p> |
<p> |
Line 581 per page.
|
Line 583 per page.
|
</p> |
</p> |
</form> |
</form> |
ENDDOCUMENT |
ENDDOCUMENT |
if ($ENV{'request.course.id'}) { $scrout.='<hr />'; } |
} |
} |
if ($ENV{'request.course.id'}) { |
if ($ENV{'request.course.id'}) { |
$scrout.=(<<ENDCOURSESEARCH); |
$scrout.=(<<ENDCOURSESEARCH); |
<hr /> |
<h1>Course Search</h1> |
<h1>Course Search</h1> |
<form method="post" action="/adm/searchcat"> |
<form method="post" action="/adm/searchcat"> |
<input type="hidden" name="phase" value="course_search" /> |
<input type="hidden" name="phase" value="course_search" /> |
Line 596 Enter terms or phrases, then press SEARC
|
Line 598 Enter terms or phrases, then press SEARC
|
<table> |
<table> |
<tr><td> |
<tr><td> |
ENDCOURSESEARCH |
ENDCOURSESEARCH |
$scrout.=' '.&simpletextfield('courseexp',$ENV{'form.courseexp'},40); |
$scrout.=' '. |
my $crscheckbox = &simplecheckbox('crsfulltext',$ENV{'form.crsfulltext'}); |
&simpletextfield('courseexp',$ENV{'form.courseexp'},40); |
my $relcheckbox = &simplecheckbox('crsrelated',$ENV{'form.crsrelated'}); |
my $crscheckbox = |
$scrout.=(<<ENDENDCOURSE); |
&simplecheckbox('crsfulltext',$ENV{'form.crsfulltext'}); |
|
my $relcheckbox = |
|
&simplecheckbox('crsrelated',$ENV{'form.crsrelated'}); |
|
$scrout.=(<<ENDENDCOURSE); |
</td></tr> |
</td></tr> |
<tr><td>$relcheckbox use related words</td><td></td></tr> |
<tr><td>$relcheckbox use related words</td><td></td></tr> |
<tr><td>$crscheckbox fulltext search (time consuming)</td><td></td></tr> |
<tr><td>$crscheckbox fulltext search (time consuming)</td><td></td></tr> |
Line 607 $scrout.=(<<ENDENDCOURSE);
|
Line 612 $scrout.=(<<ENDENDCOURSE);
|
<input type="submit" name="coursesubmit" value='SEARCH' /> |
<input type="submit" name="coursesubmit" value='SEARCH' /> |
</p> |
</p> |
ENDENDCOURSE |
ENDENDCOURSE |
} |
} |
$scrout.=(<<ENDDOCUMENT); |
$scrout.=(<<ENDDOCUMENT); |
</body> |
</body> |
</html> |
</html> |
Line 1019 If $value eq 'on' the box is checked.
|
Line 1024 If $value eq 'on' the box is checked.
|
############################################### |
############################################### |
############################################### |
############################################### |
|
|
sub simplecheckbox { |
sub simplecheckbox{ |
my ($name,$value)=@_; |
my ($name,$value,$checked)=@_; |
my $checked=''; |
$checked="checked" if ($value eq 'on'); |
$checked="checked" if $value eq 'on'; |
return '<input type="checkbox" name="'.$name.'" value="'.$value.'" '. |
return '<input type="checkbox" name="'.$name.'" '. $checked . ' />'; |
$checked.' />'; |
} |
} |
|
|
############################################### |
############################################### |
Line 1417 sub parse_advanced_search {
|
Line 1422 sub parse_advanced_search {
|
## --------------------------------------------------------------- |
## --------------------------------------------------------------- |
## Deal with restrictions to given domains |
## Deal with restrictions to given domains |
## |
## |
|
my ($libraries_to_query,$pretty_domains_string) = |
|
&parse_domain_restrictions(); |
|
$pretty_search_string .= $pretty_domains_string."<br />\n"; |
|
# |
|
if (@queries) { |
|
$query=join(" AND ",@queries); |
|
$query="select * from metadata where $query"; |
|
} elsif ($customquery) { |
|
$query = ''; |
|
} |
|
return ($query,$customquery,$customshow,$libraries_to_query, |
|
$pretty_search_string); |
|
} |
|
|
|
sub parse_domain_restrictions { |
my $libraries_to_query = undef; |
my $libraries_to_query = undef; |
# $ENV{'form.domains'} can be either a scalar or an array reference. |
# $ENV{'form.domains'} can be either a scalar or an array reference. |
# We need an array. |
# We need an array. |
my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}} |
if (! exists($ENV{'form.domains'})) { |
: ($ENV{'form.domains'}) ); |
return (undef,''); |
|
} |
|
my @allowed_domains; |
|
if (ref($ENV{'form.domains'})) { |
|
@allowed_domains = @{$ENV{'form.domains'}}; |
|
} else { |
|
@allowed_domains = ($ENV{'form.domains'}); |
|
} |
my %domain_hash = (); |
my %domain_hash = (); |
my $pretty_domains_string; |
my $pretty_domains_string; |
foreach (@allowed_domains) { |
foreach (@allowed_domains) { |
Line 1444 sub parse_advanced_search {
|
Line 1471 sub parse_advanced_search {
|
} |
} |
} |
} |
} |
} |
$pretty_search_string .= $pretty_domains_string."<br />\n"; |
return ($libraries_to_query,$pretty_domains_string); |
# |
|
if (@queries) { |
|
$query=join(" AND ",@queries); |
|
$query="select * from metadata where $query"; |
|
} elsif ($customquery) { |
|
$query = ''; |
|
} |
|
return ($query,$customquery,$customshow,$libraries_to_query, |
|
$pretty_search_string); |
|
} |
} |
|
|
###################################################################### |
###################################################################### |
Line 1481 sub parse_basic_search {
|
Line 1499 sub parse_basic_search {
|
$ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"}); |
$ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"}); |
$ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g; |
$ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g; |
} |
} |
|
my ($libraries_to_query,$pretty_domains_string) = |
|
&parse_domain_restrictions(); |
# Check to see if enough is filled in |
# Check to see if enough is filled in |
unless (&filled($ENV{'form.basicexp'})) { |
unless (&filled($ENV{'form.basicexp'})) { |
&output_blank_field_error($r,$closebutton,'phase=disp_basic'); |
&output_blank_field_error($r,$closebutton,'phase=disp_basic'); |
Line 1500 sub parse_basic_search {
|
Line 1519 sub parse_basic_search {
|
} |
} |
# 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_ws(" ",'.$concatarg.')',$search_string); |
|
if (defined($pretty_domains_string) && $pretty_domains_string ne '') { |
|
$pretty_search_string .= ' '.$pretty_domains_string; |
|
} |
$pretty_search_string .= "<br />\n"; |
$pretty_search_string .= "<br />\n"; |
return 'select * from metadata where '.$query,$pretty_search_string; |
return ('SELECT * FROM metadata WHERE '.$query,$pretty_search_string, |
|
$libraries_to_query); |
} |
} |
|
|
|
|
Line 1623 sub recursive_SQL_query_build {
|
Line 1646 sub recursive_SQL_query_build {
|
my ($key,$value)=($1,$2); |
my ($key,$value)=($1,$2); |
my $replacement=''; |
my $replacement=''; |
if ($key eq 'literal') { |
if ($key eq 'literal') { |
$replacement="($dkey like \"\%$value\%\")"; |
$replacement="($dkey LIKE \"\%$value\%\")"; |
} elsif ($key eq 'not') { |
} elsif (lc($key) eq 'not') { |
$value=~s/like/not like/; |
$value=~s/LIKE/NOT LIKE/; |
# $replacement="($dkey not like $value)"; |
# $replacement="($dkey not like $value)"; |
$replacement="$value"; |
$replacement="$value"; |
} elsif ($key eq 'and') { |
} elsif ($key eq 'and') { |
Line 2132 END
|
Line 2155 END
|
my $time_remaining = $max_time - (time - $starttime) ; |
my $time_remaining = $max_time - (time - $starttime) ; |
my $last_time = $time_remaining; |
my $last_time = $time_remaining; |
&update_seconds($r,$time_remaining); |
&update_seconds($r,$time_remaining); |
|
&update_status($r,'contacting '.$Servers_to_contact[0]); |
while (($time_remaining > 0) && |
while (($time_remaining > 0) && |
((@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 2370 sub display_results {
|
Line 2394 sub display_results {
|
."</center>\n" |
."</center>\n" |
); |
); |
if ($total_results == 0) { |
if ($total_results == 0) { |
$r->print("There are currently no results.\n". |
$r->print("<h3>There are currently no results.</h3>Please try to reload this page, which will update the display.\n". |
"</form></body></html>"); |
"</form></body></html>"); |
return; |
return; |
} else { |
} else { |
Line 2755 sub print_frames_interface {
|
Line 2779 sub print_frames_interface {
|
"&persistent_db_id=".$ENV{'form.persistent_db_id'}; |
"&persistent_db_id=".$ENV{'form.persistent_db_id'}; |
my $run_search_link = $basic_link."&phase=run_search"; |
my $run_search_link = $basic_link."&phase=run_search"; |
my $results_link = &results_link(); |
my $results_link = &results_link(); |
my $loadevents=&Apache::lonmenu::loadevents(); |
|
my $unloadevents=&Apache::lonmenu::unloadevents(); |
|
my $addscript=&Apache::lonmenu::registerurl(); |
|
my $result = <<"ENDFRAMES"; |
my $result = <<"ENDFRAMES"; |
<html> |
<html> |
<head> |
<head> |
Line 2765 sub print_frames_interface {
|
Line 2786 sub print_frames_interface {
|
var targetwin = opener; |
var targetwin = opener; |
var queue = ''; |
var queue = ''; |
</script> |
</script> |
$addscript |
|
<title>LON-CAPA Digital Library Search Results</title> |
<title>LON-CAPA Digital Library Search Results</title> |
</head> |
</head> |
<frameset rows="150,*" onLoad="$loadevents" onUnload="$unloadevents"> |
<frameset rows="150,*"> |
<frame name="statusframe" src="$run_search_link"> |
<frame name="statusframe" src="$run_search_link"> |
<frame name="resultsframe" src="$results_link"> |
<frame name="resultsframe" src="$results_link"> |
</frameset> |
</frameset> |