Diff for /loncom/interface/lonsearchcat.pm between versions 1.61 and 1.71

version 1.61, 2001/03/21 12:40:37 version 1.71, 2001/03/22 14:10:12
Line 94  sub handler { Line 94  sub handler {
 END  END
   
     $closebutton=<<END if $ENV{'form.catalogmode'} eq 'interactive';      $closebutton=<<END if $ENV{'form.catalogmode'} eq 'interactive';
 <input type="button" name="close" value="CLOSE" onClick="self.close()">  <input type="button" name="close" value='CLOSE' onClick="self.close()">
 END  END
   
 # ------------------------------------------------ First, check out environment  # ------------------------------------------------ First, check out environment
Line 267  ENDDOCUMENT Line 267  ENDDOCUMENT
     $r->print(<<ENDDOCUMENT);      $r->print(<<ENDDOCUMENT);
 <font color="#800000">Search historic archives</font>  <font color="#800000">Search historic archives</font>
 <br>  <br>
 <input type="submit" name="basicsubmit" value="SEARCH">  <input type="submit" name="basicsubmit" value='SEARCH' />
 <input type="reset" name="reset" value="RESET">  <input type="reset" name="reset" value='RESET' />
 $closebutton  $closebutton
 $basicviewselect  $basicviewselect
 </p>  </p>
Line 276  $basicviewselect Line 276  $basicviewselect
 <h3>Advanced Search</h3>  <h3>Advanced Search</h3>
 $scrout  $scrout
 <p>  <p>
 <input type="submit" name="advancedsubmit" value="SEARCH">  <input type="submit" name="advancedsubmit" value='SEARCH' />
 <input type="reset" name="reset" value="RESET">  <input type="reset" name="reset" value='RESET' />
 $closebutton  $closebutton
 $advancedviewselect  $advancedviewselect
 </p>  </p>
Line 292  ENDDOCUMENT Line 292  ENDDOCUMENT
   
 sub simpletextfield {  sub simpletextfield {
     my ($name,$value)=@_;      my ($name,$value)=@_;
     return '<input type=text name="'.$name.'" size=20 value="'.$value.'">';      return '<input type=text name=\''.$name.
      '\' size=20 value=\''.$value.'\' />';
 }  }
   
 sub simplecheckbox {  sub simplecheckbox {
     my ($name,$value)=@_;      my ($name,$value)=@_;
     my $checked='';      my $checked='';
     $checked="CHECKED" if $value eq 'on';      $checked="CHECKED" if $value eq 'on';
     return '<input type=checkbox name="'.$name.'" '. $checked . '>';      return '<input type=checkbox name=\''.$name.'\' '. $checked . '>';
 }  }
   
 sub searchphrasefield {  sub searchphrasefield {
Line 311  END Line 312  END
     my $uctitle=uc($title);      my $uctitle=uc($title);
     return "\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:</b>".      return "\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:</b>".
    "</FONT> $instruction<br>".     "</FONT> $instruction<br>".
            '<input type=text name="'.$name.'" size=80 value="'.$value.'">';             '<input type=text name="'.$name.'" size=80 value=\''.$value.'\'>';
 }  }
   
 sub dateboxes {  sub dateboxes {
Line 464  sub selectbox { Line 465  sub selectbox {
     my $selout="\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".      my $selout="\n<p><font color=\"#800000\" face=\"helvetica\"><b>$uctitle:".
  "</b></font><br>".'<select name="'.$name.'">';   "</b></font><br>".'<select name="'.$name.'">';
     map {      map {
         $selout.='<option value="'.$_.'"';          $selout.='<option value=\''.$_.'\'';
         if ($_ eq $value) { $selout.=' selected'; }          if ($_ eq $value) { $selout.=' selected'; }
         $selout.='>'.$options{$_}.'</option>';          $selout.='>'.$options{$_}.'</option>';
     } sort keys %options;      } sort keys %options;
Line 477  sub advancedsearch { Line 478  sub advancedsearch {
     my %ENV=%{$envhash};      my %ENV=%{$envhash};
   
     my $fillflag=0;      my $fillflag=0;
       # Clean up fields for safety
       for my $field ('title','author','subject','keywords','url','version',
      'creationdatestart_month','creationdatestart_day',
      'creationdatestart_year','creationdateend_month',
      'creationdateend_day','creationdateend_year',
      'lastrevisiondatestart_month','lastrevisiondatestart_day',
      'lastrevisiondatestart_year','lastrevisiondateend_month',
      'lastrevisiondateend_day','lastrevisiondateend_year',
      'notes','abstract','mime','language','owner',
      'custommetadata') {
    $ENV{"form.$field"}=~s/[^\w\s\(\)\=\-\"\']//g;
       }
     for my $field ('title','author','subject','keywords','url','version',      for my $field ('title','author','subject','keywords','url','version',
    'notes','abstract','mime','language','owner',     'notes','abstract','mime','language','owner',
    'custommetadata') {     'custommetadata') {
Line 531  sub advancedsearch { Line 544  sub advancedsearch {
     elsif ($datequery) {      elsif ($datequery) {
  push @queries,$datequery;   push @queries,$datequery;
     }      }
       my $customquery;
       if ($ENV{'form.custommetadata'}) {
    $customquery=&build_custommetadata_query('custommetadata',
         $ENV{'form.custommetadata'});
       }
     if (@queries) {      if (@queries) {
  $query=join(" AND ",@queries);   $query=join(" AND ",@queries);
  $query="select * from metadata where $query";   $query="select * from metadata where $query";
  my $reply=&Apache::lonnet::metadata_query($query);   my $reply=&Apache::lonnet::metadata_query($query);
  &output_results('Advanced',$r,$envhash,$query,$reply);   &output_results('Advanced',$r,$envhash,$customquery,$reply);
     }      }
     else {      else {
  &output_results('Advanced',$r,$envhash,$query);   &output_results('Advanced',$r,$envhash,$query);
Line 559  sub basicsearch { Line 577  sub basicsearch {
     my ($r,$envhash)=@_;      my ($r,$envhash)=@_;
     my %ENV=%{$envhash};      my %ENV=%{$envhash};
   
       # Clean up fields for safety
       for my $field ('basicexp') {
    $ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g;
       }
   
     unless (&filled($ENV{'form.basicexp'})) {      unless (&filled($ENV{'form.basicexp'})) {
  &output_blank_field_error($r);   &output_blank_field_error($r);
  return OK;   return OK;
Line 578  sub basicsearch { Line 601  sub basicsearch {
 sub output_blank_field_error {  sub output_blank_field_error {
     my ($r)=@_;      my ($r)=@_;
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $persistent='';      my $persistent=&make_persistent();
     map {  
  if (/^form\./ && !/submit/) {  
     my $name=$_;  
     my $key=$name;  
     $name=~s/^form\.//;  
     $persistent.=<<END;  
 <INPUT TYPE='hidden' NAME='$name' VALUE='$ENV{$key}'>  
 END  
         }  
     } (keys %ENV);  
   
     $r->print(<<BEGINNING);      $r->print(<<BEGINNING);
 <html>  <html>
Line 697  END Line 710  END
  }   }
   
  # make query information persistent to allow for subsequent revision   # make query information persistent to allow for subsequent revision
  my $persistent='';   my $persistent=&make_persistent();
  map {  
     if (/^form\./ && !/submit/) {  
  my $name=$_;  
  my $key=$name;  
  $name=~s/^form\.//;  
  $persistent.=<<END;  
 <INPUT TYPE='hidden' NAME='$name' VALUE='$ENV{$key}'>  
 END  
             }  
  } (keys %ENV);  
   
  $r->print(<<BEGINNING);   $r->print(<<BEGINNING);
 <html>  <html>
Line 781  sub build_SQL_query { Line 784  sub build_SQL_query {
     return $sql_query;      return $sql_query;
 }  }
   
   # ------------------------------------------------- build custom metadata query
   sub build_custommetadata_query {
       my ($field_name,$logic_statement)=@_;
       my $q=new Text::Query('abc',
     -parse => 'Text::Query::ParseAdvanced',
     -build => 'Text::Query::BuildAdvancedString');
       $q->prepare($logic_statement);
       my $matchexp=${$q}{'-parse'}{'-build'}{'matchstring'};
       # quick fix to change literal into xml tag-matching
       $matchexp=~s/\(\?\:([^\)]*)\\\=([^\)]*)\)/\(\?\:\\\<$1\\\>\[\^\\\<\]\*$2\[\^\\\<\]\*\\\<\\\/$1\\\>)/g;
       return $matchexp;
   }
   
 # - Recursively parse a reverse notation expression into a SQL query expression  # - Recursively parse a reverse notation expression into a SQL query expression
 sub recursive_SQL_query_build {  sub recursive_SQL_query_build {
     my ($dkey,$pattern)=@_;      my ($dkey,$pattern)=@_;
Line 926  sub build_date_queries { Line 942  sub build_date_queries {
    "a starting month, day, and year and an ending month, ".     "a starting month, day, and year and an ending month, ".
    "day, and year.";     "day, and year.";
  }   }
  my $cnumeric1="$cyear1$cmonth1$cday1";   my $cnumeric1=sprintf("%d%2d%2d",$cyear1,$cmonth1,$cday1);
  $cnumeric1+=0;   $cnumeric1+=0;
  my $cnumeric2="$cyear2$cmonth2$cday2";   my $cnumeric2=sprintf("%d%2d%2d",$cyear2,$cmonth2,$cday2);
  $cnumeric2+=0;   $cnumeric2+=0;
  if ($cnumeric1>$cnumeric2) {   if ($cnumeric1>$cnumeric2) {
     return "Incorrect entry for the creation date.  The starting ".      return "Incorrect entry for the creation date.  The starting ".
Line 944  sub build_date_queries { Line 960  sub build_date_queries {
     return "Incorrect entry for the last revision date.  You must ".      return "Incorrect entry for the last revision date.  You must ".
    "specify a starting month, day, and year and an ending ".     "specify a starting month, day, and year and an ending ".
    "month, day, and year.";     "month, day, and year.";
  my $lnumeric1="$lyear1$lmonth1$lday1";   }
    my $lnumeric1=sprintf("%d%2d%2d",$lyear1,$lmonth1,$lday1);
  $lnumeric1+=0;   $lnumeric1+=0;
  my $lnumeric2="$lyear2$lmonth2$lday2";   my $lnumeric2=sprintf("%d%2d%2d",$lyear2,$lmonth2,$lday2);
  $lnumeric2+=0;   $lnumeric2+=0;
  if ($lnumeric1>$lnumeric2) {   if ($lnumeric1>$lnumeric2) {
     return "Incorrect entry for the last revision date.  The ".      return "Incorrect entry for the last revision date.  The ".
Line 965  sub build_date_queries { Line 982  sub build_date_queries {
 sub output_date_error {  sub output_date_error {
     my ($r,$message)=@_;      my ($r,$message)=@_;
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $persistent='';      my $persistent=&make_persistent();
     map {  
  if (/^form\./ && !/submit/) {  
     my $name=$_;  
     my $key=$name;  
     $name=~s/^form\.//;  
     $persistent.=<<END;  
 <INPUT TYPE='hidden' NAME='$name' VALUE='$ENV{$key}'>  
 END  
         }  
     } (keys %ENV);  
   
     $r->print(<<BEGINNING);      $r->print(<<BEGINNING);
 <html>  <html>
Line 1002  $message Line 1009  $message
 RESULTS  RESULTS
 }  }
   
   sub make_persistent {
       my $persistent='';
       
       map {
    if (/^form\./ && !/submit/) {
       my $name=$_;
       my $key=$name;
       $ENV{$key}=~s/\'//g; # do not mess with html field syntax
       $name=~s/^form\.//;
       $persistent.=<<END;
   <input type='hidden' name='$name' value='$ENV{$key}' />
   END
           }
       } (keys %ENV);
       return $persistent;
   }
 1;  1;
 __END__  __END__

Removed from v.1.61  
changed lines
  Added in v.1.71


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