--- loncom/interface/lonsearchcat.pm 2006/09/27 19:32:11 1.277 +++ loncom/interface/lonsearchcat.pm 2007/03/12 17:06:15 1.281 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.277 2006/09/27 19:32:11 raeburn Exp $ +# $Id: lonsearchcat.pm,v 1.281 2007/03/12 17:06:15 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -78,7 +78,6 @@ use HTML::Entities(); use Parse::RecDescent; use Apache::lonnavmaps; use Apache::lonindexer(); -use lib '/home/httpd/lib/perl/'; use LONCAPA; ###################################################################### @@ -522,7 +521,7 @@ sub course_search { my $applies = 0; my $symb = $resource->symb(); my $ressymb = $symb; - if ($symb =~ m#(___adm/\w+/\w+)/(\d+)/bulletinboard$#) { + if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) { $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard'; unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) { $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#; @@ -833,10 +832,21 @@ sub print_advanced_search_form{ $closebutton END my $srchtype = 'Catalog'; + my $jscript; if ($env{'form.area'} eq 'portfolio') { $srchtype = 'Portfolio'; + $jscript = ''; + } + my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search", + $jscript); $scrout .= <<"ENDHEADER"; $bread_crumb
@@ -936,33 +946,33 @@ ENDHEADER if ($env{'form.area'} eq 'portfolio') { # Added fields + my $curnumadd = $env{'form.numaddedfields'}; + if ($curnumadd eq '') { + $curnumadd = 1; + } $scrout .= '

'.&mt('Custom Metadata fields').'

'; $scrout .= "\n"; $scrout .= ''.''. - ''. - ''; - for (my $j=1; $j<=$env{'form.numaddedfields'}; $j++) { + &mt('Field Value(s)').''; + + for (my $j=0; $j<$curnumadd; $j++) { my $num = $j+1; $scrout .= ''. + '" size="10" value="'.$env{'form.addedfield_'.$j}. + '" />'. ''; + 'name="addedvalues_'.$j.'" size="15" value="'. + $env{'form.addedvalues_'.$j}.'" />'; } - my $numadded = 1 + $env{'form.numaddedfields'}; - $scrout .= ''. - '
 '. &mt('Field Name').''. - &mt('Field Value(s)').'
'.&mt('1: '). - ''. - '
'.&mt('Custom metadata [_1]: ',$num). ''. '
 
'. - ''. - '
'; + $scrout .= ''. + ''; } else { # # Dynamic metadata @@ -1414,6 +1424,17 @@ sub parse_advanced_search { $fillflag++; } } + if ($env{'form.area'} eq 'portfolio') { + # Added metadata fields + for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) { + my $field = $env{'form.addedfield_'.$i}; + $field =~ s/^\s*(\S*)\s*$/$1/; + $field =~ s/\W/_/g; + if ($field ne '') { + $fillflag++; + } + } + } if (! $fillflag) { &output_blank_field_error($r,$closebutton, 'phase=disp_adv',$hidden_fields); @@ -1504,9 +1525,25 @@ sub parse_advanced_search { # # Added metadata fields for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) { - if (($env{'form.addedfield_'.$i} ne '') && - ($env{'form.addedvalue_'.$i} ne '')) { - my $stuff = 1; #FIXME + my $field = $env{'form.addedfield_'.$i}; + $field =~ s/^\s*(\S*)\s*$/$1/; + $field =~ s/\W/_/g; + $field =~ tr/A-Z/a-z/; + if ($field ne '') { + my $value = $env{'form.addedvalues_'.$i}; + if ($value ne '') { + $value =~ s/'/''/g; #' stupid emacs + my ($error,$query) = + &process_phrase_input($value,0,'pf.value'); + if (!defined($error)) { + push(@queries,"pf.field = '$field' AND $query"); + $pretty_search_string .= + $font.$field.': '. + $env{'form.addedvalues_'.$i}.'
'; + } + } else { + push(@queries,"pf.field = '$field' AND pf.value IS NULL"); + } } } } else { @@ -1599,7 +1636,7 @@ sub parse_advanced_search { # if (@queries) { if ($env{'form.area'} eq 'portfolio') { - $query ="SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa WHERE (pm.url = pa.url AND (pa.start < NOW() AND (pa.end IS NULL OR pa.end > NOW())) AND (".join(') AND (',@queries).'))'; + $query ="SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa, portfolio_addedfields pf WHERE (pm.url = pa.url AND pf.url = pm.url AND (pa.start < NOW() AND (pa.end IS NULL OR pa.end > NOW())) AND (".join(') AND (',@queries).'))'; } else { $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')'; } @@ -1636,11 +1673,9 @@ sub parse_domain_restrictions { foreach (sort @allowed_domains) { $pretty_domains_string .= "".$_." "; } - foreach (keys(%Apache::lonnet::libserv)) { - if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) { - push @$libraries_to_query,$_; - } - } + my %servers = &Apache::lonnet::get_servers(\@allowed_domains, + 'library'); + $libraries_to_query = [keys(%servers)]; } return ($libraries_to_query, $pretty_domains_string); @@ -2475,7 +2510,8 @@ END @Servers_to_contact = ($serverlist); } } else { - @Servers_to_contact = sort(keys(%Apache::lonnet::libserv)); + my %all_library_servers = &Apache::lonnet::all_library(); + @Servers_to_contact = sort(keys(%all_library_servers)); } my %Server_status; #