Diff for /loncom/interface/lonsearchcat.pm between versions 1.42 and 1.43

version 1.42, 2001/03/20 11:45:21 version 1.43, 2001/03/20 12:21:56
Line 31 Line 31
 #                server reference,   #                server reference, 
 #                environment reference,  #                environment reference,
 #                reply list reference) : outputs results from search  #                reply list reference) : outputs results from search
 # build_SQL_query() : builds a SQL query string from a logical expression  # build_SQL_query(field name, logic) : builds a SQL query string from a
 #                     with AND/OR keywords  #                                      logical expression with AND/OR keywords
   # recursive_SQL_query_build(field name, reverse notation expression) : 
   #                 builds a SQL query string from a reverse notation expression
   #                 logical expression with AND/OR keywords
   
 package Apache::lonsearchcat;  package Apache::lonsearchcat;
   
Line 471  sub advancedsearch { Line 474  sub advancedsearch {
     $query="select * from metadata where concat(title) like '\%$ENV{'form.title'}\%'";      $query="select * from metadata where concat(title) like '\%$ENV{'form.title'}\%'";
     my $reply=&Apache::lonnet::metadata_query($query);      my $reply=&Apache::lonnet::metadata_query($query);
   
     &output_results($r,$envhash,$reply);      &output_results('Advanced',$r,$envhash,$reply);
     return OK;      return OK;
 }  }
   
Line 502  sub basicsearch { Line 505  sub basicsearch {
   
     $query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'";      $query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'";
     my $reply=&Apache::lonnet::metadata_query($query);      my $reply=&Apache::lonnet::metadata_query($query);
     &output_results($r,$envhash,$reply);      &output_results('Basic',$r,$envhash,$reply);
     return OK;      return OK;
 }  }
   
Line 552  RESULTS Line 555  RESULTS
   
 # ----------------------------- format and output results based on a reply list  # ----------------------------- format and output results based on a reply list
 sub output_results {  sub output_results {
     my ($r,$envhash,@replylist)=@_;      my ($mode,$r,$envhash,@replylist)=@_;
     my %ENV=%{$envhash};      my %ENV=%{$envhash};
     foreach my $reply (@replylist) {      foreach my $reply (@replylist) {
   
Line 667  onClick='self.close();'> Line 670  onClick='self.close();'>
 $persistent  $persistent
 <hr>  <hr>
 <h3>Search Query</h3>  <h3>Search Query</h3>
   RESULTS
       if ($mode eq 'Basic') {
    $r->print(<<RESULTS);
 <p>  <p>
 <b>Basic search:</b> $ENV{'form.basicexp'}  <b>Basic search:</b> $ENV{'form.basicexp'}
 </p>  </p>
   RESULTS
       elsif ($mode eq 'Advanced') {
    $r->print(<<RESULTS);
   <p>
   <b>Advanced search</b>
   </p>
   RESULTS
       }
 <h3>Search Results</h3>  <h3>Search Results</h3>
 $compiledresult  $compiledresult
 </body>  </body>
Line 680  RESULTS Line 694  RESULTS
   
 # ------------------------------------------------------------- build_SQL_query  # ------------------------------------------------------------- build_SQL_query
 sub build_SQL_query {  sub build_SQL_query {
       my ($field_name,$logic_statement)=@_;
       my $q=new Text::Query('abc',
     -parse => 'Text::Query::ParseAdvanced',
     -build => 'Text::Query::Build');
       $q->prepare($statement);
       my $matchexp=${$q}{'matchexp'}; chomp $matchexp;
       my $sql_query=&recursive_SQL_query_build($field_name,$matchexp);
   }
   
   # - Recursively parse a reverse notation expression into a SQL query expression
   sub recursive_SQL_query_build {
       my ($dkey,$pattern)=@_;
       my @matches=($pattern=~/(\[[^\]|\[]*\])/g);
       return $pattern unless @matches;
       foreach my $match (@matches) {
    $match=~/\[ (\w+)\s(.*) \]/;
    ($key,$value)=($1,$2);
    my $replacement='';
    if ($key eq 'literal') {
       $replacement="($dkey like \"\%$value\%\")";
    }
    elsif ($key eq 'and') {
       $value=~/(.*[\"|\)]) ([|\(|\^].*)/;
       $replacement="($1 AND $2)";
    }
    elsif ($key eq 'or') {
       $value=~/(.*[\"|\)]) ([|\(|\^].*)/;
       $replacement="($1 OR $2)";
    }
    substr($pattern,
          index($pattern,$match),
          length($match),
          $replacement
          );
       }
       &recursive_SQL_query_build($dkey,$pattern);
 }  }
   
 1;  1;

Removed from v.1.42  
changed lines
  Added in v.1.43


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