Diff for /loncom/interface/lonsearchcat.pm between versions 1.278 and 1.287

version 1.278, 2006/12/06 22:22:37 version 1.287, 2007/06/15 23:29:17
Line 379  END Line 379  END
                                      $errorstring);                                       $errorstring);
   
     my $msg =       my $msg = 
  'Unable to create table in which to store search results. '.   'Unable to create table in which to save search results. '.
  'The search has been aborted.';   'The search has been aborted.';
     &Apache::loncommon::simple_error_page($r,'Search Error',      &Apache::loncommon::simple_error_page($r,'Search Error',
   $msg);    $msg);
Line 388  END Line 388  END
         delete($env{'form.launch'});          delete($env{'form.launch'});
         if (! &make_form_data_persistent($r,$persistent_db_file)) {          if (! &make_form_data_persistent($r,$persistent_db_file)) {
     my $msg=      my $msg=
  'Unable to properly store search information. '.   'Unable to properly save search information. '.
  'The search has been aborted.';   'The search has been aborted.';
     &Apache::loncommon::simple_error_page($r,'Search Error',      &Apache::loncommon::simple_error_page($r,'Search Error',
   $msg);    $msg);
Line 750  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 763  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 832  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 935  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 975  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 1380  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 1413  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 1503  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 1598  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 1635  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 1818  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 2106  sub ensure_db_and_table { Line 2146  sub ensure_db_and_table {
     ##      ##
     if (! defined($table) || $table eq '' || $table =~ /\D/ ) {      if (! defined($table) || $table eq '' || $table =~ /\D/ ) {
         $r->print("Unable to retrieve search results.  ".          $r->print("Unable to retrieve search results.  ".
                   "Unable to determine the table results were stored in.  ".                    "Unable to determine the table results were saved in.  ".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         return undef;          return undef;
     }      }
Line 2116  sub ensure_db_and_table { Line 2156  sub ensure_db_and_table {
     my $connection_result = &Apache::lonmysql::connect_to_db();      my $connection_result = &Apache::lonmysql::connect_to_db();
     if (!defined($connection_result)) {      if (!defined($connection_result)) {
         $r->print("Unable to connect to the MySQL database where your results".          $r->print("Unable to connect to the MySQL database where your results".
                   " are stored.".                    " are saved.".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         &Apache::lonnet::logthis("lonsearchcat: unable to get lonmysql to".          &Apache::lonnet::logthis("lonsearchcat: unable to get lonmysql to".
                                  " connect to database.");                                   " connect to database.");
Line 2474  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;
     #      #
     # Check on the mysql table we will use to store results.      # Check on the mysql table we will use to store results.
     my $table =$env{'form.table'};      my $table =$env{'form.table'};
     if (! defined($table) || $table eq '' || $table =~ /\D/ ) {      if (! defined($table) || $table eq '' || $table =~ /\D/ ) {
         $r->print("Unable to determine table id to store search results in.".          $r->print("Unable to determine table id to save search results in.".
                   "The search has been aborted.".                    "The search has been aborted.".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         return;          return;
Line 2719  sub display_results { Line 2760  sub display_results {
     if ($env{'form.catalogmode'} eq 'import') {      if ($env{'form.catalogmode'} eq 'import') {
         if (! tie(%groupsearch_db,'GDBM_File',$diropendb,          if (! tie(%groupsearch_db,'GDBM_File',$diropendb,
                   &GDBM_WRCREAT(),0640)) {                    &GDBM_WRCREAT(),0640)) {
             $r->print('Unable to store import results.</form>'.              $r->print('Unable to save import results.</form>'.
       &Apache::loncommon::end_page());        &Apache::loncommon::end_page());
             $r->rflush();              $r->rflush();
             return;              return;
Line 2956  sub catalogmode_output { Line 2997  sub catalogmode_output {
         $title=~ s/\'/\\\'/g;          $title=~ s/\'/\\\'/g;
         if ($env{'form.catalogmode'} eq 'interactive') {          if ($env{'form.catalogmode'} eq 'interactive') {
             $output.=<<END               $output.=<<END 
 <font size='-1'><INPUT TYPE="button" NAME="returnvalues" VALUE="SELECT"  <font size='-1'><input type="button" name="returnvalues" value="select"
 onClick="javascript:select_data('$title','$url')">  onClick="javascript:select_data('$title','$url')" />
 </font>  </font>
 END  END
         }          }
Line 2966  END Line 3007  END
         $groupsearch_db{"pre_${fnum}_title"}=$title;          $groupsearch_db{"pre_${fnum}_title"}=$title;
         $output.=<<END;          $output.=<<END;
 <font size='-1'>  <font size='-1'>
 <input type="checkbox" name="returnvalues" value="SELECT"  <input type="checkbox" name="returnvalues" value="select"
 onClick="javascript:queue($checkbox_num,$fnum)" />  onClick="javascript:queue($checkbox_num,$fnum)" />
 </font>  </font>
 END  END
Line 3403  sub detailed_citation_view { Line 3444  sub detailed_citation_view {
         if (exists($field->{'type'}) && $field->{'type'} eq 'list') {          if (exists($field->{'type'}) && $field->{'type'} eq 'list') {
             $result .= '<b>'.&mt($field->{'translate'}).'</b>';              $result .= '<b>'.&mt($field->{'translate'}).'</b>';
             foreach my $item (split(',',$values{$field->{'name'}})){              foreach my $item (split(',',$values{$field->{'name'}})){
                 $result .=                   $item = &Apache::lonnet::clutter($item);
   &Apache::lonhtmlcommon::crumbs(&Apache::lonnet::clutter($item),                  $result .= &display_url($item,[2,0,1]);
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1);  
             }              }
         } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){          } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){
             $result.= &mt($field->{'translate'},              $result.= &mt($field->{'translate'},
Line 3415  sub detailed_citation_view { Line 3453  sub detailed_citation_view {
                                   $values{$field->{'name'}}))."<br />\n";                                    $values{$field->{'name'}}))."<br />\n";
         } else {          } else {
             if ($field->{'special'} eq 'url link') {              if ($field->{'special'} eq 'url link') {
                if ($jumpurl=~/^http\:\/\//) {                  $result .= &display_url($jumpurl,[3,0,1]);
                  $result.='<tt>'.$jumpurl.'</tt>';  
                } else {  
                  $result .=  
   &Apache::lonhtmlcommon::crumbs($jumpurl,  
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),3,0,1);  
                }  
             } else {              } else {
                 $result.= &mt($field->{'translate'},                  $result.= &mt($field->{'translate'},
                               $values{$field->{'name'}});                                $values{$field->{'name'}});
Line 3479  sub summary_view { Line 3509  sub summary_view {
         $result .= '&nbsp;'.$tmp.'&nbsp;';          $result .= '&nbsp;'.$tmp.'&nbsp;';
     }      }
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     my $link;      $jumpurl=~s|^/ext/|http://|;
     if ($jumpurl=~m|^/ext/|) {      my $link = &display_url($jumpurl,[2,0,1]);
  $jumpurl=~s|^/ext/|http://|;  
  $link='<br /><tt>'.$jumpurl.'</tt>';  
     } else {  
  $link=&Apache::lonhtmlcommon::crumbs($jumpurl,  
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1);  
     }  
     $result.=<<END;      $result.=<<END;
 <a href="$jumpurl"   <a href="$jumpurl" 
    target='preview'>$values{'title'}</a>$link     target='preview'>$values{'title'}</a> <br />
   $link <br />
 $values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}<br />  $values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}<br />
 $values{'copyrighttag'}<br />  $values{'copyrighttag'}<br />
 $values{'extrashow'}  $values{'extrashow'}
Line 3524  sub summary_preview { Line 3548  sub summary_preview {
 sub compact_view {  sub compact_view {
     my ($prefix,%values) = @_;      my ($prefix,%values) = @_;
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     my $link;      $jumpurl=~s|^/ext/|http://|;
     if ($jumpurl=~m|^/ext/|) {  
  $jumpurl=~s|^/ext/|http://|;      my $link = &display_url($jumpurl,[1,1,1]);
  $link='<tt>'.$jumpurl.'</tt>';      
     } else {  
         $link=&Apache::lonhtmlcommon::crumbs($jumpurl,  
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),1,1,1).' ';  
     }  
     my $result =       my $result = 
         $prefix.'<img src="'.&Apache::loncommon::icon($values{'url'}).'">';          $prefix.'<img src="'.&Apache::loncommon::icon($values{'url'}).'">';
     if (exists($env{'form.sortfield'}) &&       if (exists($env{'form.sortfield'}) && 
Line 3542  sub compact_view { Line 3560  sub compact_view {
         if (! defined($tmp)) { $tmp = 'undefined'; }          if (! defined($tmp)) { $tmp = 'undefined'; }
         $result .= '&nbsp;'.$tmp.'&nbsp;';          $result .= '&nbsp;'.$tmp.'&nbsp;';
     }      }
     $result.='&nbsp;<a href="'.$jumpurl.'" target="preview">'.      $jumpurl = &HTML::Entities::encode($jumpurl,'<>&"');
         $values{'title'}.'</a>'.('&nbsp;'x2).$link.      $result.=' <span class="LC_nobreak">'.
         '<b>'.$values{'author'}.'</b> ('.$values{'domain'}.')<br />';   '<a href="'.$jumpurl.'" target="preview">'.
           &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.
    $link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')<br />';
     return $result;      return $result;
 }  }
   
   sub display_url {
       my ($url,$crumb_args) = @_;
       my $link;
       if ($url=~m|^/ext/|) {
    $url=~s|^/ext/|http://|;
    $link='<span class="LC_filename">'.$url.'</span>';
       } elsif ($url=~m{^(http://|/uploaded/)}) {
    $link='<span class="LC_filename">'.$url.'</span>';
       } else {
           $link=&Apache::lonhtmlcommon::crumbs($url,
     'preview',
     '',
     (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),@{$crumb_args}).' ';
       }
       return $link;
   }
   
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################

Removed from v.1.278  
changed lines
  Added in v.1.287


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