Diff for /loncom/interface/lonsearchcat.pm between versions 1.276 and 1.283

version 1.276, 2006/09/26 15:24:18 version 1.283, 2007/03/12 22:05:30
Line 78  use HTML::Entities(); Line 78  use HTML::Entities();
 use Parse::RecDescent;  use Parse::RecDescent;
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
 use Apache::lonindexer();  use Apache::lonindexer();
 use lib '/home/httpd/lib/perl/';  
 use LONCAPA;  use LONCAPA;
   
 ######################################################################  ######################################################################
Line 171  sub handler { Line 170  sub handler {
                 '_'.$env{'form.persistent_db_id'}.'_persistent_search.db';                  '_'.$env{'form.persistent_db_id'}.'_persistent_search.db';
     ##      ##
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
   
       my @allowed_searches = ('portfolio');
       if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) {
           push(@allowed_searches,'res');
       } 
     if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') {      if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') {
         &Apache::lonhtmlcommon::add_breadcrumb          push(@allowed_searches,'course');
              ({href=>'/adm/searchcat?'.      }
                    'catalogmode='.$env{'form.catalogmode'}.      my $crumb_text = 'Portfolio Search';
                    '&launch='.$env{'form.launch'}.      if (@allowed_searches == 3) {
                    '&mode='.$env{'form.mode'},          $crumb_text = 'Course, Portfolio and Catalog Search';
               text=>"Course and Catalog Search",      } elsif (@allowed_searches ==2) {
               target=>'_top',          if (grep(/^res$/,@allowed_searches)) {
               bug=>'Searching',});              $crumb_text = 'Portfolio and Catalog Search'; 
     } else {          } elsif (grep(/^course$/,@allowed_searches)) {
         &Apache::lonhtmlcommon::add_breadcrumb              $crumb_text = 'Portfolio and Course Search';
              ({href=>'/adm/searchcat?'.          }
                    'catalogmode='.$env{'form.catalogmode'}.      }
                    '&launch='.$env{'form.launch'}.      &Apache::lonhtmlcommon::add_breadcrumb
                    '&mode='.$env{'form.mode'},         ({href=>'/adm/searchcat?'.
               text=>"Catalog Search",                 'catalogmode='.$env{'form.catalogmode'}.
                  '&launch='.$env{'form.launch'}.
                  '&mode='.$env{'form.mode'},
                 text=>"$crumb_text",
               target=>'_top',                target=>'_top',
               bug=>'Searching',});                bug=>'Searching',});
     }  
     #      #
     if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) {      if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) {
         if (! &get_persistent_form_data($persistent_db_file)) {          if (! &get_persistent_form_data($persistent_db_file)) {
Line 297  END Line 303  END
     }      }
     #      #
     if ($env{'form.searchmode'} eq 'advanced') {      if ($env{'form.searchmode'} eq 'advanced') {
           my $srchtype = 'Catalog';
           if ($env{'form.area'} eq 'portfolio') {
               $srchtype = 'Portfolio';
           }
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/searchcat?phase=disp_adv&'.              ({href=>'/adm/searchcat?phase=disp_adv&'.
                   'catalogmode='.$env{'form.catalogmode'}.                    'catalogmode='.$env{'form.catalogmode'}.
                   '&launch='.$env{'form.launch'}.                    '&launch='.$env{'form.launch'}.
                   '&mode='.$env{'form.mode'},                    '&mode='.$env{'form.mode'},
                   text=>"Advanced Search",                    text=>"Advanced $srchtype Search",
                   bug=>'Searching',});                    bug=>'Searching',});
     } elsif ($env{'form.searchmode'} eq 'course search') {      } elsif ($env{'form.searchmode'} eq 'course search') {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
Line 511  sub course_search { Line 521  sub course_search {
             my $applies = 0;              my $applies = 0;
             my $symb = $resource->symb();              my $symb = $resource->symb();
             my $ressymb = $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';                  $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';
                 unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {                  unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {
                     $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;                      $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;
Line 740  sub setup_basic_search { Line 750  sub setup_basic_search {
                        '</label>';                         '</label>';
     $onlysearchdomain = '<label>'.&mt('[_1] only search domain [_2]',      $onlysearchdomain = '<label>'.&mt('[_1] only search domain [_2]',
       &Apache::lonhtmlcommon::checkbox('domains',$env{'form.domains'},        &Apache::lonhtmlcommon::checkbox('domains',$env{'form.domains'},
                                        $r->dir_config('lonDefDomain'))).                                         $r->dir_config('lonDefDomain')),
         $r->dir_config('lonDefDomain')).
                         '</label>';                          '</label>';
     if ($area eq 'res') {      if ($area eq 'res') {
         $inclext= '<label>'.&mt('[_1] include external resources',          $inclext= '<label>'.&mt('[_1] include external resources',
Line 753  sub setup_basic_search { Line 764  sub setup_basic_search {
                        '&launch='.$env{'form.launch'}.                         '&launch='.$env{'form.launch'}.
                        '&mode='.$env{'form.mode'}.                         '&mode='.$env{'form.mode'}.
                        '&area='.$area.                         '&area='.$area.
                          '&form='.$env{'form.form'}.
                          '&titleelement='.$env{'form.titleelement'}.
                          '&element='.$env{'form.element'}.
                        '">'.&mt('Advanced Search').'</a>';                         '">'.&mt('Advanced Search').'</a>';
     #      #
     $scrout.='<form name="loncapa_search" method="post" '.      $scrout.='<form name="loncapa_search" method="post" '.
Line 821  sub print_advanced_search_form{ Line 835  sub print_advanced_search_form{
 <input type="reset" name="reset" value='$lt{"reset"}' />  <input type="reset" name="reset" value='$lt{"reset"}' />
 $closebutton  $closebutton
 END  END
     my $scrout= &Apache::loncommon::start_page('Advanced Catalog Search');      my $srchtype = 'Catalog';
       my $jscript;
       if ($env{'form.area'} eq 'portfolio') {
           $srchtype = 'Portfolio';
           $jscript = '<script type="text/javascript">
   function additional_metadata() {
       if (document.advsearch.newfield.checked) {
           document.advsearch.phase.value = "disp_adv";
           document.advsearch.numaddedfields.value = parseInt(document.advsearch.numaddedfields.value) +1;
           document.advsearch.submit();
       }
   }
   </script>';
       }
       my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",
                                                  $jscript);
     $scrout .= <<"ENDHEADER";      $scrout .= <<"ENDHEADER";
 $bread_crumb  $bread_crumb
 <form method="post" action="/adm/searchcat" name="advsearch">  <form method="post" action="/adm/searchcat" name="advsearch">
Line 832  ENDHEADER Line 861  ENDHEADER
         '<input type="hidden" name="phase" value="adv_search" />';          '<input type="hidden" name="phase" value="adv_search" />';
     my %fields=&Apache::lonmeta::fieldnames();      my %fields=&Apache::lonmeta::fieldnames();
     #      #
     $scrout .= '<h3>'.&mt('Standard Metadata').'</h3>';      $scrout .= '<h3>'.&mt('Standard [_1] Metadata',$srchtype).'</h3>';
     $scrout .= "<table>\n";      $scrout .= "<table>\n";
     $scrout .= '<tr><td>&nbsp;</td><td colspan="2"><font size="-1">'.      $scrout .= '<tr><td>&nbsp;</td><td colspan="2"><font size="-1">'.
         ('&nbsp;'x2).&searchhelp()."</font></td></tr>\n";          ('&nbsp;'x2).&searchhelp()."</font></td></tr>\n";
Line 921  ENDHEADER Line 950  ENDHEADER
           
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         # Added fields          # Added fields
           my $curnumadd = $env{'form.numaddedfields'};
           if ($curnumadd eq '') {
               $curnumadd = 1;
           }
         $scrout .= '<h3>'.&mt('Custom Metadata fields').'</h3>';          $scrout .= '<h3>'.&mt('Custom Metadata fields').'</h3>';
         $scrout .= "<table>\n";          $scrout .= "<table>\n";
         $scrout .= '<tr><td>&nbsp;</td><td align="center">'.          $scrout .= '<tr><td>&nbsp;</td><td align="center">'.
                    &mt('Field Name').'</td>'.'<td align="center">'.                     &mt('Field Name').'</td>'.'<td align="center">'.
                    &mt('Field Value(s)').'</td></tr>'.                     &mt('Field Value(s)').'</td></tr>';
                    '<tr><td>'.&mt('1: ').  
                    '</td><td align="center">'.          for (my $j=0; $j<$curnumadd; $j++) {
                    '<input type="text" name="addedfield_0" size="10" /></td>'.  
                    '<td align="center"><input type="text" '.  
                    'name="addedvalues_0" size="15" /></td></tr>';  
         for (my $j=1; $j<=$env{'form.numaddedfields'}; $j++) {  
             my $num = $j+1;              my $num = $j+1;
             $scrout .= '<tr><td>'.&mt('Custom metadata [_1]: ',$num).              $scrout .= '<tr><td>'.&mt('Custom metadata [_1]: ',$num).
                        '</td><td align="center">'.                         '</td><td align="center">'.
                        '<input type="text" name="addedfield_'.$j.                         '<input type="text" name="addedfield_'.$j.
                        '" size="10" /></td>'.                         '" size="10" value="'.$env{'form.addedfield_'.$j}.
                          '" /></td>'.
                        '<td align="center"><input type="text" '.                         '<td align="center"><input type="text" '.
                        'name="addedvalues_'.$j.'" size="15" /></td></tr>';                         'name="addedvalues_'.$j.'" size="15" value="'.
                          $env{'form.addedvalues_'.$j}.'" /></td></tr>';
         }          }
         my $numadded = 1 + $env{'form.numaddedfields'};          $scrout .= '<tr><td align="left" colspan="3"><label>'.
         $scrout .= '<tr><td colspan="3">&nbsp;</td></tr>'.                     '<input type="checkbox" name="newfield" '.
                    '<tr><td align="left" colspan="3">'.                     'value="1" onclick="javascript:additional_metadata()" />'.
                    '<input type="button" name="newfield" '.                     &mt('Another custom field/value pair?').'</label>'.
                    'value="Additional custom field/value" '.                     '<input type="hidden" name="numaddedfields" value="'.
                    'onclick="javascript:additional_metadata()" />'.                     $curnumadd.'" /></td></tr></table>';
                    '<input type="hidden" name="numaddedfelds" value="'.  
                    $numadded.'" /></td></tr></table>';  
     } else {      } else {
         #          #
         # Dynamic metadata          # Dynamic metadata
Line 1399  sub parse_advanced_search { Line 1428  sub parse_advanced_search {
             $fillflag++;              $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) {      if (! $fillflag) {
  &output_blank_field_error($r,$closebutton,   &output_blank_field_error($r,$closebutton,
                                   'phase=disp_adv',$hidden_fields);                                    'phase=disp_adv',$hidden_fields);
Line 1489  sub parse_advanced_search { Line 1529  sub parse_advanced_search {
         #          #
         # Added metadata fields          # Added metadata fields
         for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) {          for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) {
             if (($env{'form.addedfield_'.$i} ne '') &&               my $field = $env{'form.addedfield_'.$i};
                 ($env{'form.addedvalue_'.$i} ne '')) {              $field =~ s/^\s*(\S*)\s*$/$1/;
                 my $stuff = 1; #FIXME               $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.'</font>: '.
                               $env{'form.addedvalues_'.$i}.'<br />';
                       }
                   } else {
                       push(@queries,"pf.field = '$field' AND pf.value IS NULL");
                   }
             }              }
         }          }
     } else {      } else {
Line 1583  sub parse_advanced_search { Line 1639  sub parse_advanced_search {
     }      }
     #      #
     if (@queries) {      if (@queries) {
  $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')';          if ($env{'form.area'} eq 'portfolio') {
               $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).')';
           }
     } elsif ($customquery) {      } elsif ($customquery) {
         $query = '';          $query = '';
     }      }
Line 1617  sub parse_domain_restrictions { Line 1677  sub parse_domain_restrictions {
         foreach (sort @allowed_domains) {          foreach (sort @allowed_domains) {
             $pretty_domains_string .= "<b>".$_."</b> ";              $pretty_domains_string .= "<b>".$_."</b> ";
         }          }
         foreach (keys(%Apache::lonnet::libserv)) {   my %servers = &Apache::lonnet::get_servers(\@allowed_domains,
             if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {     'library');
                 push @$libraries_to_query,$_;   $libraries_to_query = [keys(%servers)];
             }  
         }  
     }      }
     return ($libraries_to_query,      return ($libraries_to_query,
             $pretty_domains_string);              $pretty_domains_string);
Line 2456  END Line 2514  END
             @Servers_to_contact = ($serverlist);              @Servers_to_contact = ($serverlist);
         }          }
     } else {      } 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;      my %Server_status;
     #      #

Removed from v.1.276  
changed lines
  Added in v.1.283


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>