--- loncom/interface/lonsearchcat.pm 2002/08/04 18:28:01 1.151 +++ loncom/interface/lonsearchcat.pm 2002/08/26 14:34:19 1.155 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.151 2002/08/04 18:28:01 matthew Exp $ +# $Id: lonsearchcat.pm,v 1.155 2002/08/26 14:34:19 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -115,6 +115,11 @@ that produces it. Adding a new view typ adding a line to the definition of this hash and making sure the function takes the proper parameters. +=item $bodytag + +LON-CAPA standard body tag, gotten from &Apache::lonnet::bodytag. +No title, no table, just a tag. + =back =cut @@ -136,6 +141,8 @@ my %Views = ("Detailed Citation View" => "Compact View" => \&compact_view); my %persistent_db; my $hidden_fields; +my $bodytag; + ###################################################################### ###################################################################### @@ -201,19 +208,20 @@ sub handler { ($ENV{'form.launch'} eq '1')) { $ENV{'form.persistent_db_id'} = time; } + $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1); my $persistent_db_file = "/home/httpd/perl/tmp/". &Apache::lonnet::escape($domain). '_'.&Apache::lonnet::escape($ENV{'user.name'}). '_'.$ENV{'form.persistent_db_id'}.'_persistent_search.db'; ## - if (! &get_persistent_form_data($r,$persistent_db_file)) { + if (! &get_persistent_form_data($persistent_db_file)) { if ($ENV{'form.phase'} =~ /(run_search|results)/) { &Apache::lonnet::logthis("lonsearchcat:Unable to recover data ". "from $persistent_db_file"); $r->print(< LON-CAPA Search Error - +$bodytag We were unable to retrieve data describing your search. This is a serious error and has been logged. Please alert your LON-CAPA administrator. @@ -233,8 +241,10 @@ END &start_fresh_session(); untie %groupsearch_db; } else { - $r->print('Unable to tie hash to db '. - 'file'); + # This is a stupid error to give to the user. + # It really tells them nothing. + $r->print(''.$bodytag. + 'Unable to tie hash to db file'); return OK; } } @@ -329,7 +339,7 @@ END if (! defined(&create_results_table())) { $r->print(<Search Error - +$bodytag Unable to create table in which to store search results. The search has been aborted. @@ -341,7 +351,7 @@ END if (! &make_form_data_persistent($r,$persistent_db_file)) { $r->print(<Search Error - +$bodytag Unable to properly store search information. The search has been aborted. @@ -360,8 +370,7 @@ END = &parse_advanced_search($r,$closebutton); return OK if (! defined($query)); } - &make_persistent($r, - { query => $query, + &make_persistent({ query => $query, customquery => $customquery, customshow => $customshow, libraries => $libraries, @@ -391,6 +400,7 @@ Returns a scalar which holds html for th sub print_basic_search_form{ my ($r,$closebutton) = @_; + my $bodytag=&Apache::loncommon::bodytag('Catalog Search'); my $scrout=<<"ENDDOCUMENT"; @@ -403,13 +413,10 @@ sub print_basic_search_form{ } - - -

Search Catalog

+$bodytag
$hidden_fields -

Basic Search

Enter terms or phrases separated by AND, OR, or NOT then press SEARCH below. @@ -475,6 +482,7 @@ END if (!defined($ENV{'form.viewselect'})) { $ENV{'form.viewselect'} ="Detailed Citation View"; } + my $bodytag=&Apache::loncommon::bodytag('Advanced Catalog Search'); my $scrout=<<"ENDHEADER"; @@ -487,10 +495,7 @@ END } - - -

Advanced Catalog Search

-
+$bodytag Enter terms or phrases separated by search operators such as AND, OR, or NOT.
@@ -620,25 +625,25 @@ LASTREVISIONDATEEND (&Apache::loncommon::copyrightids), ); # ------------------------------------------- Compute customized metadata field - $scrout.=< -LIMIT BY SPECIAL METADATA FIELDS: - -For resource-specific metadata, enter in an expression in the form of -key=value separated by operators such as AND, OR or NOT.
-Example: grandmother=75 OR grandfather=85 -
-CUSTOMMETADATA - $scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); - $scrout.=< -SHOW SPECIAL METADATA FIELDS: - -Enter in a space-separated list of special metadata fields to show -in a fielded listing for each record result. -
-CUSTOMSHOW - $scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); +# $scrout.=< +#LIMIT BY SPECIAL METADATA FIELDS: +# +#For resource-specific metadata, enter in an expression in the form of +#key=value separated by operators such as AND, OR or NOT.
+#Example: grandmother=75 OR grandfather=85 +#
+#CUSTOMMETADATA +# $scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); +# $scrout.=< +#SHOW SPECIAL METADATA FIELDS: +# +#Enter in a space-separated list of special metadata fields to show +#in a fielded listing for each record result. +#
+#CUSTOMSHOW +# $scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); $scrout.=< @@ -671,7 +676,6 @@ to them. ###################################################################### ###################################################################### sub get_persistent_form_data { - my $r = shift; my $filename = shift; return 0 if (! -e $filename); return undef if (! tie(%persistent_db,'GDBM_File',$filename, @@ -683,24 +687,15 @@ sub get_persistent_form_data { # Loop through the keys, looking for 'form.' foreach my $name (keys(%persistent_db)) { next if ($name !~ /^form./); + next if (exists($ENV{$name})); my @values = map { &Apache::lonnet::unescape($_); } split(',',$persistent_db{$name}); next if (@values <1); - if (exists($ENV{$name})) { - if (ref($ENV{$name}) eq 'ARRAY') { - # If it is an array, tack @values on the end of it. - $ENV{$name} = [@$ENV{$name},@values]; - } elsif (! ref($ENV{$name}) && $arrays_allowed{$name}) { - # if arrays are allowed, turn it into one and add @values - $ENV{$name} = [$ENV{$name},@values]; - } # otherwise, assume the value in $ENV{$name} is better than ours. + if ($arrays_allowed{$name}) { + $ENV{$name} = [@values]; } else { - if ($arrays_allowed{$name}) { - $ENV{$name} = [@values]; - } else { - $ENV{$name} = $values[0] if ($values[0]); - } + $ENV{$name} = $values[0] if ($values[0]); } } untie (%persistent_db); @@ -741,7 +736,7 @@ sub get_persistent_data { my @values = map { &Apache::lonnet::unescape($_); } split(',',$persistent_db{$name}); - if (@values == 1) { + if (@values <= 1) { push @Values,$values[0]; } else { push @Values,\@values; @@ -769,14 +764,11 @@ elements escaped and concatenated in a c ###################################################################### ###################################################################### sub make_persistent { - my $r = shift; my %save = %{shift()}; my $filename = shift; return undef if (! tie(%persistent_db,'GDBM_File', $filename,&GDBM_WRCREAT(),0640)); foreach my $name (keys(%save)) { - next if (! exists($save{$name})); - next if (! defined($save{$name}) || $save{$name} eq ''); my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name})); # We handle array references, but not recursively. my $store = join(',', map { &Apache::lonnet::escape($_); } @values ); @@ -811,7 +803,7 @@ sub make_form_data_persistent { next if (!/^form/ || /submit/); $save{$_} = $ENV{$_}; } - return &make_persistent($r,\%save,$filename); + return &make_persistent(\%save,$filename); } ###################################################################### @@ -1230,21 +1222,21 @@ sub parse_advanced_search { } # Process form information for custom metadata querying my $customquery=undef; - if ($ENV{'form.custommetadata'}) { - $pretty_search_string .=$font."Custom Metadata Search: ". - $ENV{'form.custommetadata'}."
\n"; - $customquery=&build_custommetadata_query('custommetadata', - $ENV{'form.custommetadata'}); - } +# if ($ENV{'form.custommetadata'}) { +# $pretty_search_string .=$font."Custom Metadata Search: ". +# $ENV{'form.custommetadata'}."
\n"; +# $customquery=&build_custommetadata_query('custommetadata', +# $ENV{'form.custommetadata'}); +# } my $customshow=undef; - if ($ENV{'form.customshow'}) { - $pretty_search_string .=$font."Custom Metadata Display: ". - $ENV{'form.customshow'}."
\n"; - $customshow=$ENV{'form.customshow'}; - $customshow=~s/[^\w\s]//g; - my @fields=split(/\s+/,$customshow); - $customshow=join(" ",@fields); - } +# if ($ENV{'form.customshow'}) { +# $pretty_search_string .=$font."Custom Metadata Display: ". +# $ENV{'form.customshow'}."
\n"; +# $customshow=$ENV{'form.customshow'}; +# $customshow=~s/[^\w\s]//g; +# my @fields=split(/\s+/,$customshow); +# $customshow=join(" ",@fields); +# } ## --------------------------------------------------------------- ## Deal with restrictions to given domains ## @@ -1259,15 +1251,15 @@ sub parse_advanced_search { $domain_hash{$_}++; } if ($domain_hash{'any'}) { - $pretty_domains_string = "Searching all domains."; + $pretty_domains_string = "In all LON-CAPA domains."; } else { if (@allowed_domains > 1) { - $pretty_domains_string = "Searching domains:"; + $pretty_domains_string = "In LON-CAPA domains:"; } else { - $pretty_domains_string = "Searching domain "; + $pretty_domains_string = "In LON-CAPA domain "; } foreach (sort @allowed_domains) { - $pretty_domains_string .= "$_ "; + $pretty_domains_string .= "".$_." "; } foreach (keys(%Apache::lonnet::libserv)) { if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) { @@ -1685,8 +1677,9 @@ sub print_sort_form { Results - +$bodytag + END #

Sort Results

@@ -1902,16 +1895,16 @@ sub run_search { $r->print(< Search Status - +$bodytag END # Check to see if $pretty_string has more than one carriage return. # Assume \n s are following
s and truncate the value. # (there is probably a better way)... - my @Lines = split /\n/,$pretty_string; - if (@Lines > 1) { - $pretty_string = join /\n/,(@Lines[0..1],'....
'); + my @Lines = split /
/,$pretty_string; + if (@Lines > 2) { + $pretty_string = join '
',(@Lines[0..2],'....
'); } $r->print("Search: ".$pretty_string); $r->rflush(); @@ -1920,7 +1913,11 @@ END # my @Servers_to_contact; if (defined($serverlist)) { - @Servers_to_contact = @$serverlist; + if (ref($serverlist) eq 'ARRAY') { + @Servers_to_contact = @$serverlist; + } else { + @Servers_to_contact = ($serverlist); + } } else { @Servers_to_contact = sort(keys(%Apache::lonnet::libserv)); } @@ -2061,7 +2058,13 @@ END # We have run out of time or run out of servers to talk to and # results to get. $r->print(""); - $r->print(""); + if ($ENV{'form.catalogmode'} ne 'groupsearch') { + $r->print(""); + } return; } @@ -2494,13 +2497,13 @@ sub search_results_header { parent.close(); } function changeTitle(val) { - if (opener.inf.document.forms.resinfo.elements.t) { - opener.inf.document.forms.resinfo.elements.t.value=val; + if (parent.opener.inf.document.forms.resinfo.elements.t) { + parent.opener.inf.document.forms.resinfo.elements.t.value=val; } } function changeURL(val) { - if (opener.inf.document.forms.resinfo.elements.u) { - opener.inf.document.forms.resinfo.elements.u.value=val; + if (parent.opener.inf.document.forms.resinfo.elements.u) { + parent.opener.inf.document.forms.resinfo.elements.u.value=val; } } @@ -2546,6 +2549,7 @@ SCRIPT SCRIPT $result.=< +$bodytag $importbutton @@ -2558,7 +2562,7 @@ END sub search_status_header { return <Search Status - +$bodytag

Search Status

Sending search request to LON-CAPA servers.
ENDSTATUS @@ -2830,7 +2834,7 @@ sub output_blank_field_error { BEGINNING $r->print(< - +$bodytag

Search Catalog

@@ -2877,7 +2881,7 @@ sub output_date_error { The LearningOnline Network with CAPA - +$bodytag

Search Catalog