--- loncom/interface/lonsearchcat.pm 2003/05/30 20:54:28 1.175 +++ loncom/interface/lonsearchcat.pm 2003/06/16 20:54:39 1.180 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.175 2003/05/30 20:54:28 www Exp $ +# $Id: lonsearchcat.pm,v 1.180 2003/06/16 20:54:39 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -82,7 +82,6 @@ use Text::Query; use GDBM_File; use Apache::loncommon(); use Apache::lonmysql(); -use Apache::lonmenu(); # ---------------------------------------- variables used throughout the module @@ -215,8 +214,7 @@ sub handler { ## 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"; + $diropendb= "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_searchcat.db"; # # set the name of the persistent database # $ENV{'form.persistent_db_id'} can only have digits in it. @@ -384,7 +382,8 @@ END (undef,undef,undef,undef); my $pretty_string; 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 ($query,$customquery,$customshow,$libraries,$pretty_string) = &parse_advanced_search($r,$closebutton); @@ -556,12 +555,15 @@ then press SEARCH below. ENDDOCUMENT $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.=<Advanced Search -$checkbox use related words +$relatedcheckbox use related words + $domaincheckbox only search domain $domain

@@ -581,10 +583,10 @@ per page.

ENDDOCUMENT - if ($ENV{'request.course.id'}) { $scrout.='
'; } -} -if ($ENV{'request.course.id'}) { - $scrout.=(<

Course Search

@@ -596,10 +598,13 @@ Enter terms or phrases, then press SEARC @@ -607,7 +612,7 @@ $scrout.=(<

ENDENDCOURSE -} + } $scrout.=(< @@ -1019,11 +1024,11 @@ If $value eq 'on' the box is checked. ############################################### ############################################### -sub simplecheckbox { - my ($name,$value)=@_; - my $checked=''; - $checked="checked" if $value eq 'on'; - return ''; +sub simplecheckbox{ + my ($name,$value,$checked)=@_; + $checked="checked" if ($value eq 'on'); + return ''; } ############################################### @@ -1417,11 +1422,33 @@ sub parse_advanced_search { ## --------------------------------------------------------------- ## Deal with restrictions to given domains ## + my ($libraries_to_query,$pretty_domains_string) = + &parse_domain_restrictions(); + $pretty_search_string .= $pretty_domains_string."
\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; # $ENV{'form.domains'} can be either a scalar or an array reference. # We need an array. - my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}} - : ($ENV{'form.domains'}) ); + if (! exists($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 $pretty_domains_string; foreach (@allowed_domains) { @@ -1444,16 +1471,7 @@ sub parse_advanced_search { } } } - $pretty_search_string .= $pretty_domains_string."
\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); + return ($libraries_to_query,$pretty_domains_string); } ###################################################################### @@ -1481,7 +1499,8 @@ sub parse_basic_search { $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"}); $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g; } - + my ($libraries_to_query,$pretty_domains_string) = + &parse_domain_restrictions(); # Check to see if enough is filled in unless (&filled($ENV{'form.basicexp'})) { &output_blank_field_error($r,$closebutton,'phase=disp_basic'); @@ -1500,13 +1519,17 @@ sub parse_basic_search { } # Build SQL query string based on form page my $query=''; - my $concatarg=join('," ",', + my $concatarg=join(',', ('title', 'author', 'subject', 'notes', 'abstract', 'keywords')); $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 .= "
\n"; - return 'select * from metadata where '.$query,$pretty_search_string; + return ('SELECT * FROM metadata WHERE '.$query,$pretty_search_string, + $libraries_to_query); } @@ -1623,9 +1646,9 @@ sub recursive_SQL_query_build { my ($key,$value)=($1,$2); my $replacement=''; if ($key eq 'literal') { - $replacement="($dkey like \"\%$value\%\")"; - } elsif ($key eq 'not') { - $value=~s/like/not like/; + $replacement="($dkey LIKE \"\%$value\%\")"; + } elsif (lc($key) eq 'not') { + $value=~s/LIKE/NOT LIKE/; # $replacement="($dkey not like $value)"; $replacement="$value"; } elsif ($key eq 'and') { @@ -2132,6 +2155,7 @@ END my $time_remaining = $max_time - (time - $starttime) ; my $last_time = $time_remaining; &update_seconds($r,$time_remaining); + &update_status($r,'contacting '.$Servers_to_contact[0]); while (($time_remaining > 0) && ((@Servers_to_contact) || keys(%Server_status))) { # Send out a search request if it needs to be done. @@ -2370,7 +2394,7 @@ sub display_results { ."\n" ); if ($total_results == 0) { - $r->print("There are currently no results.\n". + $r->print("

There are currently no results.

Please try to reload this page, which will update the display.\n". ""); return; } else { @@ -2755,9 +2779,6 @@ sub print_frames_interface { "&persistent_db_id=".$ENV{'form.persistent_db_id'}; my $run_search_link = $basic_link."&phase=run_search"; my $results_link = &results_link(); - my $loadevents=&Apache::lonmenu::loadevents(); - my $unloadevents=&Apache::lonmenu::unloadevents(); - my $addscript=&Apache::lonmenu::registerurl(); my $result = <<"ENDFRAMES"; @@ -2765,10 +2786,9 @@ sub print_frames_interface { var targetwin = opener; var queue = ''; -$addscript LON-CAPA Digital Library Search Results - +
ENDCOURSESEARCH - $scrout.=' '.&simpletextfield('courseexp',$ENV{'form.courseexp'},40); - my $crscheckbox = &simplecheckbox('crsfulltext',$ENV{'form.crsfulltext'}); - my $relcheckbox = &simplecheckbox('crsrelated',$ENV{'form.crsrelated'}); -$scrout.=(<
$relcheckbox use related words
$crscheckbox fulltext search (time consuming)