Diff for /loncom/interface/lonsearchcat.pm between versions 1.277 and 1.285

version 1.277, 2006/09/27 19:32:11 version 1.285, 2007/05/01 02:13:40
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 522  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 751  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 764  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 833  sub print_advanced_search_form{ Line 836  sub print_advanced_search_form{
 $closebutton  $closebutton
 END  END
     my $srchtype = 'Catalog';      my $srchtype = 'Catalog';
       my $jscript;
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         $srchtype = '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();
     }      }
     my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search");  }
   </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 936  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 976  ENDHEADER Line 990  ENDHEADER
                description=>'Network-wide number of accesses (hits)',},                 description=>'Network-wide number of accesses (hits)',},
              { name=>'stdno',               { name=>'stdno',
                description=>                 description=>
                'Total number of students who have worked on this problem',},                 'Statistics calculated for number of students',},
              { name => 'avetries',               { name => 'avetries',
                description=>'Average number of tries till solved',},                 description=>'Average number of tries till solved',},
              { name => 'difficulty',               { name => 'difficulty',
Line 1381  sub parse_advanced_search { Line 1395  sub parse_advanced_search {
    'lastrevisiondatestart_month','lastrevisiondatestart_day',     'lastrevisiondatestart_month','lastrevisiondatestart_day',
    'lastrevisiondatestart_year','lastrevisiondateend_month',     'lastrevisiondatestart_year','lastrevisiondateend_month',
    'lastrevisiondateend_day','lastrevisiondateend_year') {     'lastrevisiondateend_day','lastrevisiondateend_year') {
  $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\']//g;   $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\'.]//g;
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
  # is this required?  Hmmm.   # is this required?  Hmmm.
Line 1414  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 1504  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 1599  sub parse_advanced_search { Line 1640  sub parse_advanced_search {
     #      #
     if (@queries) {      if (@queries) {
         if ($env{'form.area'} eq 'portfolio') {          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 {          } else {
     $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')';      $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')';
         }          }
Line 1636  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 1819  sub process_phrase_input { Line 1858  sub process_phrase_input {
             $item[1];              $item[1];
         }          }
     term:      term:
         /[\w\Q:!@#$%^&*()+_=|{}<>,.;\\\/?\E]+/ {          /[\w\Q:!@#$%^&*()+_=|{}<>,.;\\\/?\E\-]+/ {
             $item[1];              $item[1];
         }          }
 ENDGRAMMAR  ENDGRAMMAR
Line 2475  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.277  
changed lines
  Added in v.1.285


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