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); |
} |
} |
|
|
###################################################################### |
###################################################################### |