Diff for /loncom/interface/lonsearchcat.pm between versions 1.215 and 1.216

version 1.215, 2004/04/22 20:05:18 version 1.216, 2004/04/23 17:52:55
Line 736  ENDHEADER Line 736  ENDHEADER
     &Apache::loncommon::domain_select('domains',      &Apache::loncommon::domain_select('domains',
    $ENV{'form.domains'},1).     $ENV{'form.domains'},1).
     '</td></tr>'.$/;      '</td></tr>'.$/;
     $scrout .= "</table>\n<br />\n<table>\n";      $scrout .= "</table>\n<br />";
     my %dates=&Apache::lonlocal::texthash      #
         ('creationdatestart'     => 'Creation Date After',      # Creation/Modification date limits
          'creationdateend'       => 'Creation Date Before',      $scrout .= "\n<table>\n";
          'lastrevisiondatestart' => 'Last Revision Date After',      my $cafter = 
          'lastrevisiondateend'   => 'Last Revision Date Before');          &Apache::lonhtmlcommon::date_setter('advsearch',         # formname
     foreach my $field (sort keys %dates) {                                              'creationdate1', # fieldname
  $scrout.='<tr>'.                                              0,           # current value
             '<td align="right">'.&titlefield($dates{$field}).'</td><td>'.                                               '',          # special 
     &Apache::lonhtmlcommon::date_setter('advsearch',$field,0,'',1).                                              1,           # includeempty
     '</td></tr>'.$/;                                              '',          # state
     }                                              1,           # no_hh_mm_ss
                                               );
       my $cbefore = 
           &Apache::lonhtmlcommon::date_setter('advsearch',         # formname
                                               'creationdate2', # fieldname
                                               0,           # current value
                                               '',          # special 
                                               1,           # includeempty
                                               '',          # state
                                               1,           # no_hh_mm_ss
                                               );
       $scrout .= &mt('<tr><td align="right">Created between</td>'.
                      '<td>[_1]</td></tr>'.
                      '<tr><td align="right">and </td>'.
                      '<td>[_2]</td></tr>',$cafter,$cbefore);
       my $lafter = 
           &Apache::lonhtmlcommon::date_setter('advsearch',
                                               'revisiondate1', 
                                               0,           # current value
                                               '',          # special 
                                               1,           # includeempty
                                               '',          # state
                                               1,           # no_hh_mm_ss
                                               );
       my $lbefore = 
           &Apache::lonhtmlcommon::date_setter('advsearch',
                                               'revisiondate2',
                                               0,           # current value
                                               '',          # special 
                                               1,           # includeempty
                                               '',          # state
                                               1,           # no_hh_mm_ss
                                               );
       $scrout .= &mt('<tr><td align="right">Last modified between </td>'.
                      '<td>[_1]</td></tr>'.
                      '<tr><td align="right">and</td>'.
                      '<td>[_2]</td></tr>',$lafter,$lbefore);
     $scrout.="</table>\n";      $scrout.="</table>\n";
     $scrout.=<<ENDDOCUMENT;      $scrout.=<<ENDDOCUMENT;
 $advanced_buttons  $advanced_buttons
Line 1045  Parse advanced search form and return th Line 1081  Parse advanced search form and return th
 ######################################################################  ######################################################################
 sub parse_advanced_search {  sub parse_advanced_search {
     my ($r,$closebutton,$hidden_fields)=@_;      my ($r,$closebutton,$hidden_fields)=@_;
       my @BasicFields = ('title','author','subject','keywords','url','version',
                          'notes','abstract','extension','language','owner',
   #                       'custommetadata','customshow',
                          'modifyinguser','standards','mime');
                          
     my $fillflag=0;      my $fillflag=0;
     my $pretty_search_string = "<br />\n";      my $pretty_search_string = "<br />\n";
     # Clean up fields for safety      # Clean up fields for safety
     for my $field ('title','author','subject','keywords','url','version',      for my $field (@BasicFields,
    'creationdatestart_month','creationdatestart_day',                     'creationdatestart_month','creationdatestart_day',
    'creationdatestart_year','creationdateend_month',     'creationdatestart_year','creationdateend_month',
    'creationdateend_day','creationdateend_year',     'creationdateend_day','creationdateend_year',
    'lastrevisiondatestart_month','lastrevisiondatestart_day',     'lastrevisiondatestart_month','lastrevisiondatestart_day',
    'lastrevisiondatestart_year','lastrevisiondateend_month',     'lastrevisiondatestart_year','lastrevisiondateend_month',
    'lastrevisiondateend_day','lastrevisiondateend_year',     'lastrevisiondateend_day','lastrevisiondateend_year') {
    'notes','abstract','extension','language','owner',   $ENV{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\']//g;
    'custommetadata','customshow','category') {  
  $ENV{"form.$field"}=~s/[^\w\/\s\(\)\=\-\"\']//g;  
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
  # is this required?  Hmmm.   # is this required?  Hmmm.
  next unless (exists($ENV{"form.$_"}));   next if (! exists($ENV{'form.'.$_}));
  $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"});   $ENV{'form.'.$_}=&Apache::lonnet::unescape($ENV{'form.'.$_});
  $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g;   $ENV{'form.'.$_}=~s/[^\w\/\s\(\)\=\-\"\']//g;
     }      }
     # Preprocess the category form element.      # Preprocess the category form element.
     $ENV{'form.category'} = 'any' if (! defined($ENV{'form.category'}) ||      $ENV{'form.category'} = 'any' if (! defined($ENV{'form.category'}) ||
                                       ref($ENV{'form.category'}));                                        ref($ENV{'form.category'}));
     #      #
     # Check to see if enough information was filled in      # Check to see if enough information was filled in
     for my $field ('title','author','subject','keywords','url','version',      for my $field (@BasicFields) {
    'notes','abstract','category','extension','language',   if (&filled($ENV{'form.'.$field})) {
                    'owner','custommetadata') {  
  if (&filled($ENV{"form.$field"})) {  
     $fillflag++;      $fillflag++;
  }   }
     }      }
       for my $field ('lowestgradelevel','highestgradelevel') {
           if ( $ENV{'form.'.$field} =~ /^\d+$/ &&
                $ENV{'form.'.$field} > 0) {
               $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 1087  sub parse_advanced_search { Line 1130  sub parse_advanced_search {
     my @queries;      my @queries;
     my $font = '<font color="#800000" face="helvetica">';      my $font = '<font color="#800000" face="helvetica">';
     # Evaluate logical expression AND/OR/NOT phrase fields.      # Evaluate logical expression AND/OR/NOT phrase fields.
     foreach my $field ('title','author','subject','notes','abstract','url',      foreach my $field (@BasicFields) {
        'keywords','version','owner','standards') {  
  if ($ENV{'form.'.$field}) {   if ($ENV{'form.'.$field}) {
             my $searchphrase = $ENV{'form.'.$field};              my $searchphrase = $ENV{'form.'.$field};
             $pretty_search_string .= $font."$field</font> contains <b>".              $pretty_search_string .= $font."$field</font> contains <b>".
Line 1120  sub parse_advanced_search { Line 1162  sub parse_advanced_search {
             $searchphrase = join(' OR ',@extensions);              $searchphrase = join(' OR ',@extensions);
         }          }
     }      }
     if (exists($ENV{'form.extension'}) && $ENV{'form.extension'} !~ /^\s*$/) {  
         $searchphrase .= ' OR ' if (defined($searchphrase));  
         my @extensions = split(/,/,$ENV{'form.extension'});  
         $searchphrase .= join(' OR ',@extensions);  
     }  
     if (defined($searchphrase)) {      if (defined($searchphrase)) {
         push @queries,&build_SQL_query('mime',$searchphrase);          push @queries,&build_SQL_query('mime',$searchphrase);
         $pretty_search_string .=$font.'mime</font> contains <b>'.          $pretty_search_string .=$font.'mime</font> contains <b>'.
Line 1132  sub parse_advanced_search { Line 1169  sub parse_advanced_search {
     }      }
     #      #
     # Evaluate option lists      # Evaluate option lists
       if ($ENV{'form.lowestgradelevel'}        &&
           $ENV{'form.lowestgradelevel'} ne '0' &&
           $ENV{'form.lowestgradelevel'} =~ /^\d+$/) {
    push(@queries,
                '(lowestgradelevel>='.$ENV{'form.lowestgradelevel'}.')');
           $pretty_search_string.="lowestgradelevel>=".
               $ENV{'form.lowestgradelevel'}."<br />\n";
       }
       if ($ENV{'form.highestgradelevel'}        &&
           $ENV{'form.highestgradelevel'} ne '0' &&
           $ENV{'form.highestgradelevel'} =~ /^\d+$/) {
    push(@queries,
                '(highestgradelevel<='.$ENV{'form.highestgradelevel'}.')');
           $pretty_search_string.="highestgradelevel<=".
               $ENV{'form.highestgradelevel'}."<br />\n";
       }
     if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {      if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {
  push @queries,"(language like \"$ENV{'form.language'}\")";   push @queries,"(language like \"$ENV{'form.language'}\")";
         $pretty_search_string.=$font."language</font>= ".          $pretty_search_string.=$font."language</font>= ".
Line 1146  sub parse_advanced_search { Line 1199  sub parse_advanced_search {
     }      }
     #      #
     # Evaluate date windows      # Evaluate date windows
     my $datequery=&build_date_queries(      my $cafter =
  $ENV{'form.creationdatestart_month'},          &Apache::lonhtmlcommon::get_date_from_form('creationdate1');
  $ENV{'form.creationdatestart_day'},      my $cbefore = 
  $ENV{'form.creationdatestart_year'},          &Apache::lonhtmlcommon::get_date_from_form('creationdate2');
  $ENV{'form.creationdateend_month'},      if ($cafter > $cbefore) {
  $ENV{'form.creationdateend_day'},          my $tmp = $cafter;
  $ENV{'form.creationdateend_year'},          $cafter = $cbefore;
  $ENV{'form.lastrevisiondatestart_month'},          $cbefore = $tmp;
  $ENV{'form.lastrevisiondatestart_day'},      }
  $ENV{'form.lastrevisiondatestart_year'},      my $mafter = 
  $ENV{'form.lastrevisiondateend_month'},          &Apache::lonhtmlcommon::get_date_from_form('revisiondate1');
  $ENV{'form.lastrevisiondateend_day'},      my $mbefore =
  $ENV{'form.lastrevisiondateend_year'},          &Apache::lonhtmlcommon::get_date_from_form('revisiondate2');
  );      if ($mafter > $mbefore) {
     # Test to see if date windows are legitimate          my $tmp = $mafter;
     if ($datequery=~/^Incorrect/) {          $mafter = $mbefore;
  &output_date_error($r,$datequery,$closebutton,$hidden_fields);          $mbefore = $tmp;
  return ;      }
     } elsif ($datequery) {      my ($datequery,$error,$prettydate)=&build_date_queries($cafter,$cbefore,
                                                              $mafter,$mbefore);
       if (defined($error)) {
           &output_date_error($r,$error,$closebutton,$hidden_fields);
       } elsif (defined($datequery)) {
         # Here is where you would set up pretty_search_string to output          # Here is where you would set up pretty_search_string to output
         # date query information.          # date query information.
           $pretty_search_string .= '<br />'.$prettydate.'<br />';
  push @queries,$datequery;   push @queries,$datequery;
     }      }
     #      #
Line 1200  sub parse_advanced_search { Line 1258  sub parse_advanced_search {
     $pretty_search_string .= $pretty_domains_string."<br />\n";      $pretty_search_string .= $pretty_domains_string."<br />\n";
     #      #
     if (@queries) {      if (@queries) {
  $query=join(" AND ",@queries);   $query="select * from metadata where ".join(" AND ",@queries);
  $query="select * from metadata where $query";  
     } elsif ($customquery) {      } elsif ($customquery) {
         $query = '';          $query = '';
     }      }
Line 1459  Also reports errors (check for /^Incorre Line 1516  Also reports errors (check for /^Incorre
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub build_date_queries {  sub build_date_queries {
     my ($cmonth1,$cday1,$cyear1,$cmonth2,$cday2,$cyear2,      my ($cafter,$cbefore,$mafter,$mbefore) = @_;
  $lmonth1,$lday1,$lyear1,$lmonth2,$lday2,$lyear2)=@_;      my ($result,$error,$pretty_string);
     my @queries;      #
     if ($cmonth1 or $cday1 or $cyear1 or $cmonth2 or $cday2 or $cyear2) {      # Verify the input
  unless ($cmonth1 and $cday1 and $cyear1 and      if (! defined($cafter) && ! defined($cbefore) &&
  $cmonth2 and $cday2 and $cyear2) {          ! defined($mafter) && ! defined($mbefore)) {
     return "Incorrect entry for the creation date.  You must specify ".          # This is an okay situation, so return undef for the error
    "a starting month, day, and year and an ending month, ".          return (undef,undef,undef);
    "day, and year.";      }
  }      if ((defined($cafter)  && ! defined($cbefore)) ||
  my $cnumeric1=sprintf("%d%2d%2d",$cyear1,$cmonth1,$cday1);          (defined($cbefore) && ! defined($cafter))) {
  $cnumeric1+=0;          # This is bad, so let them know
  my $cnumeric2=sprintf("%d%2d%2d",$cyear2,$cmonth2,$cday2);          $error = &mt('Incorrect entry for the creation date.  '.
  $cnumeric2+=0;                      'You must specify both the beginning and ending dates.');
  if ($cnumeric1>$cnumeric2) {      }
     return "Incorrect entry for the creation date.  The starting ".      if (! defined($error) && 
    "date must occur before the ending date.";          ((defined($mafter)  && ! defined($mbefore)) ||
  }          (defined($mbefore) && ! defined($mafter)))) {
  my $cquery="(creationdate BETWEEN '$cyear1-$cmonth1-$cday1' AND '".          # This is also bad, so let them know
            "$cyear2-$cmonth2-$cday2 23:59:59')";          $error = &mt('Incorrect entry for the last revision date.  '.
  push @queries,$cquery;                       'You must specify both the beginning and ending dates.');
     }      }
     if ($lmonth1 or $lday1 or $lyear1 or $lmonth2 or $lday2 or $lyear2) {      if (! defined($error)) {
  unless ($lmonth1 and $lday1 and $lyear1 and          #
  $lmonth2 and $lday2 and $lyear2) {          # Build the queries
     return "Incorrect entry for the last revision date.  You must ".          my @queries;
    "specify a starting month, day, and year and an ending ".          if (defined($cbefore) && defined($cafter)) {
    "month, day, and year.";              my (undef,undef,undef,$caday,$camon,$cayear) = localtime($cafter);
  }              my (undef,undef,undef,$cbday,$cbmon,$cbyear) = localtime($cbefore);
  my $lnumeric1=sprintf("%d%2d%2d",$lyear1,$lmonth1,$lday1);              # Correct for year being relative to 1900
  $lnumeric1+=0;              $cayear+=1900; $cbyear+=1900;
  my $lnumeric2=sprintf("%d%2d%2d",$lyear2,$lmonth2,$lday2);              my $cquery=
  $lnumeric2+=0;                  '(creationdate BETWEEN '.
  if ($lnumeric1>$lnumeric2) {                  "'".$cayear.'-'.$camon.'-'.$caday."'".
     return "Incorrect entry for the last revision date.  The ".                  ' AND '.
    "starting date must occur before the ending date.";                  "'".$cbyear.'-'.$cbmon.'-'.$cbday." 23:59:59')";
  }              $pretty_string .= '<br />' if (defined($pretty_string));
  my $lquery="(lastrevisiondate BETWEEN '$lyear1-$lmonth1-$lday1' AND '".              $pretty_string .= 
            "$lyear2-$lmonth2-$lday2 23:59:59')";                  &mt('created between [_1] and [_2]',
  push @queries,$lquery;                      &Apache::lonlocal::locallocaltime($cafter),
     }                      &Apache::lonlocal::locallocaltime($cbefore+24*60*60-1));
     if (@queries) {              push(@queries,$cquery);
  return join(" AND ",@queries);              $pretty_string =~ s/ 00:00:00//g;
           }
           if (defined($mbefore) && defined($mafter)) {
               my (undef,undef,undef,$maday,$mamon,$mayear) = localtime($mafter);
               my (undef,undef,undef,$mbday,$mbmon,$mbyear) = localtime($mbefore);
               # Correct for year being relative to 1900
               $mayear+=1900; $mbyear+=1900;
               my $mquery=
                   '(lastrevisiondate BETWEEN '.
                   "'".$mayear.'-'.$mamon.'-'.$maday."'".
                   ' AND '.
                   "'".$mbyear.'-'.$mbmon.'-'.$mbday." 23:59:59')";
               push(@queries,$mquery);
               $pretty_string .= '<br />' if (defined($pretty_string));
               $pretty_string .= 
                   &mt('last revised between [_1] and [_2]',
                       &Apache::lonlocal::locallocaltime($mafter),
                       &Apache::lonlocal::locallocaltime($mbefore+24*60*60-1));
               $pretty_string =~ s/ 00:00:00//g;
           }
           if (@queries) {
               $result .= join(" AND ",@queries);
           }
     }      }
     return '';      return ($result,$error,$pretty_string);
 }  }
   
 ######################################################################  ######################################################################

Removed from v.1.215  
changed lines
  Added in v.1.216


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