\n";
+ $scrout .= ''.&mt('Standard Metadata').' ';
+ $scrout .= "\n";
+ $scrout .= ' '.
+ (' 'x2).&searchhelp()." \n";
my %related_word_search =
- ('title'=>1,
- 'author'=>0,
- 'owner'=>0,
- 'authorspace'=>0,
- 'modifyinguser'=>0,
- 'keywords'=>1,
- 'notes'=>1,
- 'abstract'=>1,
- 'standards'=>1,
- 'mime'=>1,
+ ('title' => 1,
+ 'author' => 0,
+ 'owner' => 0,
+ 'authorspace' => 0,
+ 'modifyinguser'=> 0,
+ 'keywords' => 1,
+ 'notes' => 1,
+ 'abstract' => 1,
+ 'standards'=> 1,
+ 'mime' => 1,
);
#
foreach my $field ('title','author','owner','authorspace','modifyinguser',
@@ -736,18 +729,124 @@ ENDHEADER
&Apache::loncommon::domain_select('domains',
$ENV{'form.domains'},1).
''.$/;
- $scrout .= "
\n \n\n";
- my %dates=&Apache::lonlocal::texthash
- ('creationdatestart' => 'Creation Date After',
- 'creationdateend' => 'Creation Date Before',
- 'lastrevisiondatestart' => 'Last Revision Date After',
- 'lastrevisiondateend' => 'Last Revision Date Before');
- foreach my $field (sort keys %dates) {
- $scrout.=''.
- ''.&titlefield($dates{$field}).' '.
- &Apache::lonhtmlcommon::date_setter('advsearch',$field,0,'',1).
- ' '.$/;
+ #
+ # Misc metadata
+ $scrout.=''.
+ &titlefield(&mt('Copyright/Distribution')).' '.
+ &Apache::lonmeta::selectbox('copyright',
+ '',,
+ \&Apache::loncommon::copyrightdescription,
+ ( undef,
+ &Apache::loncommon::copyrightids)
+ ).' '.$/;
+ $scrout.=''.
+ &titlefield(&mt('Language')).' '.
+ &Apache::lonmeta::selectbox('language',
+ 'notset',,
+ \&Apache::loncommon::languagedescription,
+ ('any',&Apache::loncommon::languageids)
+ ).' ';
+ $scrout .= "
\n";
+ #
+ # Dynamic metadata
+ $scrout .= ''.&mt('Problem Statistics').' ';
+ $scrout .= "\n";
+ $scrout .= ' '.&mt('Minimum').' '.
+ ''.&mt('Maximum').' '."\n";
+ foreach my $statistic
+ ({ name=>'stdno',
+ description=>'Number of Students',},
+ { name => 'avetries',
+ description=>'Average tries to answer correctly',},
+ { name => 'difficulty',
+ description=>'Degree of difficulty',},
+ { name => 'disc',
+ description=>'Degree of discrimination'}) {
+ $scrout .= ''.
+ &titlefield(&mt($statistic->{'description'})).
+ ' '.
+ ' '.
+ ' '.
+ ' '.
+ ' '.$/;
}
+ $scrout .= "
\n";
+ $scrout .= ''.&mt('Evaluation Data').' ';
+ $scrout .= "\n";
+ #
+ # Creation/Modification date limits
+ $scrout .= ''.&mt('Creation and Modification dates').' ';
+ $scrout .= "\n\n";
+ my $cafter =
+ &Apache::lonhtmlcommon::date_setter('advsearch', # formname
+ 'creationdate1', # fieldname
+ 0, # current value
+ '', # special
+ 1, # includeempty
+ '', # 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('Created between '.
+ '[_1] '.
+ 'and '.
+ '[_2] ',$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('Last modified between '.
+ '[_1] '.
+ 'and '.
+ '[_2] ',$lafter,$lbefore);
$scrout.="
\n";
$scrout.=< \n";
# Clean up fields for safety
- for my $field ('title','author','subject','keywords','url','version',
- 'creationdatestart_month','creationdatestart_day',
+ for my $field (@BasicFields,
+ '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','extension','language','owner',
- 'custommetadata','customshow','category') {
- $ENV{"form.$field"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
+ 'lastrevisiondateend_day','lastrevisiondateend_year') {
+ $ENV{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\']//g;
}
foreach ('mode','form','element') {
# is this required? Hmmm.
- next unless (exists($ENV{"form.$_"}));
- $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"});
- $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
+ next if (! exists($ENV{'form.'.$_}));
+ $ENV{'form.'.$_}=&Apache::lonnet::unescape($ENV{'form.'.$_});
+ $ENV{'form.'.$_}=~s/[^\w\/\s\(\)\=\-\"\']//g;
}
# Preprocess the category form element.
$ENV{'form.category'} = 'any' if (! defined($ENV{'form.category'}) ||
ref($ENV{'form.category'}));
#
# Check to see if enough information was filled in
- for my $field ('title','author','subject','keywords','url','version',
- 'notes','abstract','category','extension','language',
- 'owner','custommetadata') {
- if (&filled($ENV{"form.$field"})) {
+ for my $field (@BasicFields) {
+ if (&filled($ENV{'form.'.$field})) {
$fillflag++;
}
}
+ for my $field ('lowestgradelevel','highestgradelevel') {
+ if ( $ENV{'form.'.$field} =~ /^\d+$/ &&
+ $ENV{'form.'.$field} > 0) {
+ $fillflag++;
+ }
+ }
if (! $fillflag) {
&output_blank_field_error($r,$closebutton,
'phase=disp_adv',$hidden_fields);
@@ -1087,8 +1194,7 @@ sub parse_advanced_search {
my @queries;
my $font = '';
# Evaluate logical expression AND/OR/NOT phrase fields.
- foreach my $field ('title','author','subject','notes','abstract','url',
- 'keywords','version','owner','standards') {
+ foreach my $field (@BasicFields) {
if ($ENV{'form.'.$field}) {
my $searchphrase = $ENV{'form.'.$field};
$pretty_search_string .= $font."$field contains ".
@@ -1120,11 +1226,6 @@ sub parse_advanced_search {
$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)) {
push @queries,&build_SQL_query('mime',$searchphrase);
$pretty_search_string .=$font.'mime contains '.
@@ -1132,6 +1233,22 @@ sub parse_advanced_search {
}
#
# 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'}." \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'}." \n";
+ }
if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {
push @queries,"(language like \"$ENV{'form.language'}\")";
$pretty_search_string.=$font."language= ".
@@ -1145,28 +1262,58 @@ sub parse_advanced_search {
" \n";
}
#
+ # Statistics
+ foreach my $field (@StatsFields,@EvalFields) {
+ my ($min,$max);
+ if (exists($ENV{'form.'.$field.'_min'}) &&
+ $ENV{'form.'.$field.'_min'} ne '') {
+ $min = $ENV{'form.'.$field.'_min'};
+ }
+ if (exists($ENV{'form.'.$field.'_max'}) &&
+ $ENV{'form.'.$field.'_max'} ne '') {
+ $max = $ENV{'form.'.$field.'_max'};
+ }
+ next if (! defined($max) && ! defined($min));
+ if (defined($min) && defined($max)) {
+ ($min,$max) = sort {$a <=>$b} ($min,$max);
+ }
+ if (defined($min) && $min =~ /^(\d+\.\d+|\d+|\.\d+)$/) {
+ push(@queries,'('.$field.'>'.$min.')');
+ $pretty_search_string.=$font.$field.'>'.$min.' ';
+ }
+ if (defined($max) && $max =~ /^(\d+\.\d+|\d+|\.\d+)$/) {
+ push(@queries,'('.$field.'<'.$max.')');
+ $pretty_search_string.=$font.$field.'<'.$max.' ';
+ }
+ }
+ #
# Evaluate date windows
- my $datequery=&build_date_queries(
- $ENV{'form.creationdatestart_month'},
- $ENV{'form.creationdatestart_day'},
- $ENV{'form.creationdatestart_year'},
- $ENV{'form.creationdateend_month'},
- $ENV{'form.creationdateend_day'},
- $ENV{'form.creationdateend_year'},
- $ENV{'form.lastrevisiondatestart_month'},
- $ENV{'form.lastrevisiondatestart_day'},
- $ENV{'form.lastrevisiondatestart_year'},
- $ENV{'form.lastrevisiondateend_month'},
- $ENV{'form.lastrevisiondateend_day'},
- $ENV{'form.lastrevisiondateend_year'},
- );
- # Test to see if date windows are legitimate
- if ($datequery=~/^Incorrect/) {
- &output_date_error($r,$datequery,$closebutton,$hidden_fields);
- return ;
- } elsif ($datequery) {
+ my $cafter =
+ &Apache::lonhtmlcommon::get_date_from_form('creationdate1');
+ my $cbefore =
+ &Apache::lonhtmlcommon::get_date_from_form('creationdate2');
+ if ($cafter > $cbefore) {
+ my $tmp = $cafter;
+ $cafter = $cbefore;
+ $cbefore = $tmp;
+ }
+ my $mafter =
+ &Apache::lonhtmlcommon::get_date_from_form('revisiondate1');
+ my $mbefore =
+ &Apache::lonhtmlcommon::get_date_from_form('revisiondate2');
+ if ($mafter > $mbefore) {
+ my $tmp = $mafter;
+ $mafter = $mbefore;
+ $mbefore = $tmp;
+ }
+ 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
# date query information.
+ $pretty_search_string .= ' '.$prettydate.' ';
push @queries,$datequery;
}
#
@@ -1200,11 +1347,11 @@ sub parse_advanced_search {
$pretty_search_string .= $pretty_domains_string." \n";
#
if (@queries) {
- $query=join(" AND ",@queries);
- $query="select * from metadata where $query";
+ $query="select * from metadata where ".join(" AND ",@queries);
} elsif ($customquery) {
$query = '';
}
+# &Apache::lonnet::logthis('query = '.$/.$query);
return ($query,$customquery,$customshow,$libraries_to_query,
$pretty_search_string);
}
@@ -1459,51 +1606,73 @@ Also reports errors (check for /^Incorre
######################################################################
######################################################################
sub build_date_queries {
- my ($cmonth1,$cday1,$cyear1,$cmonth2,$cday2,$cyear2,
- $lmonth1,$lday1,$lyear1,$lmonth2,$lday2,$lyear2)=@_;
- my @queries;
- if ($cmonth1 or $cday1 or $cyear1 or $cmonth2 or $cday2 or $cyear2) {
- unless ($cmonth1 and $cday1 and $cyear1 and
- $cmonth2 and $cday2 and $cyear2) {
- return "Incorrect entry for the creation date. You must specify ".
- "a starting month, day, and year and an ending month, ".
- "day, and year.";
- }
- my $cnumeric1=sprintf("%d%2d%2d",$cyear1,$cmonth1,$cday1);
- $cnumeric1+=0;
- my $cnumeric2=sprintf("%d%2d%2d",$cyear2,$cmonth2,$cday2);
- $cnumeric2+=0;
- if ($cnumeric1>$cnumeric2) {
- return "Incorrect entry for the creation date. The starting ".
- "date must occur before the ending date.";
- }
- my $cquery="(creationdate BETWEEN '$cyear1-$cmonth1-$cday1' AND '".
- "$cyear2-$cmonth2-$cday2 23:59:59')";
- push @queries,$cquery;
- }
- if ($lmonth1 or $lday1 or $lyear1 or $lmonth2 or $lday2 or $lyear2) {
- unless ($lmonth1 and $lday1 and $lyear1 and
- $lmonth2 and $lday2 and $lyear2) {
- return "Incorrect entry for the last revision date. You must ".
- "specify a starting month, day, and year and an ending ".
- "month, day, and year.";
- }
- my $lnumeric1=sprintf("%d%2d%2d",$lyear1,$lmonth1,$lday1);
- $lnumeric1+=0;
- my $lnumeric2=sprintf("%d%2d%2d",$lyear2,$lmonth2,$lday2);
- $lnumeric2+=0;
- if ($lnumeric1>$lnumeric2) {
- return "Incorrect entry for the last revision date. The ".
- "starting date must occur before the ending date.";
- }
- my $lquery="(lastrevisiondate BETWEEN '$lyear1-$lmonth1-$lday1' AND '".
- "$lyear2-$lmonth2-$lday2 23:59:59')";
- push @queries,$lquery;
+ my ($cafter,$cbefore,$mafter,$mbefore) = @_;
+ my ($result,$error,$pretty_string);
+ #
+ # Verify the input
+ if (! defined($cafter) && ! defined($cbefore) &&
+ ! defined($mafter) && ! defined($mbefore)) {
+ # This is an okay situation, so return undef for the error
+ return (undef,undef,undef);
+ }
+ if ((defined($cafter) && ! defined($cbefore)) ||
+ (defined($cbefore) && ! defined($cafter))) {
+ # This is bad, so let them know
+ $error = &mt('Incorrect entry for the creation date. '.
+ 'You must specify both the beginning and ending dates.');
+ }
+ if (! defined($error) &&
+ ((defined($mafter) && ! defined($mbefore)) ||
+ (defined($mbefore) && ! defined($mafter)))) {
+ # This is also bad, so let them know
+ $error = &mt('Incorrect entry for the last revision date. '.
+ 'You must specify both the beginning and ending dates.');
}
- if (@queries) {
- return join(" AND ",@queries);
+ if (! defined($error)) {
+ #
+ # Build the queries
+ my @queries;
+ if (defined($cbefore) && defined($cafter)) {
+ my (undef,undef,undef,$caday,$camon,$cayear) = localtime($cafter);
+ my (undef,undef,undef,$cbday,$cbmon,$cbyear) = localtime($cbefore);
+ # Correct for year being relative to 1900
+ $cayear+=1900; $cbyear+=1900;
+ my $cquery=
+ '(creationdate BETWEEN '.
+ "'".$cayear.'-'.$camon.'-'.$caday."'".
+ ' AND '.
+ "'".$cbyear.'-'.$cbmon.'-'.$cbday." 23:59:59')";
+ $pretty_string .= ' ' if (defined($pretty_string));
+ $pretty_string .=
+ &mt('created between [_1] and [_2]',
+ &Apache::lonlocal::locallocaltime($cafter),
+ &Apache::lonlocal::locallocaltime($cbefore+24*60*60-1));
+ push(@queries,$cquery);
+ $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 .= ' ' 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);
}
######################################################################
@@ -2613,26 +2782,54 @@ extra custom metadata to show.
######################################################################
sub detailed_citation_view {
my ($prefix,%values) = @_;
- my $icon=&Apache::loncommon::icon($values{'url'});
- my $result=<$prefix$values{'title'}
-
-$values{'author'} , $values{'owner'}
-
-Subject: $values{'subject'}
-Keyword(s): $values{'keywords'}
-Notes: $values{'notes'}
-MIME Type: $values{'mimetag'}
-Language: $values{'language'}
-Copyright/Distribution: $values{'copyrighttag'}
-
-$values{'extrashow'}
-
-$values{'shortabstract'}
-
-
-END
+ my $icon=
+ my $result;
+ $result .= ''.$prefix.
+ ' '.
+ ''.$values{'title'}." \n";
+ $result .= "\n";
+ $result .= ''.$values{'author'}.' ,'.
+ ' '.$values{'owner'}.' ';
+ foreach my $field
+ (
+ { name=>'subject',
+ translate => 'Subject: [_1]',},
+ { name=>'keywords',
+ translate => 'Keywords: [_1]',},
+ { name=>'notes',
+ translate => 'Notes: [_1]',},
+ { name=>'mimetag',
+ translate => 'MIME Type: [_1]',},
+ { name=>'standards',
+ translate => 'Standards: [_1]',},
+ { name=>'copyrighttag',
+ translate => 'Copyright/Distribution: [_1]',},
+ { name=>'stdno',
+ translate => 'Number of Students: [_1]',},
+ { name=>'avetries',
+ translate => 'Average Tries: [_1]',},
+ { name=>'disc',
+ translate => 'Degree of Discrimination: [_1]',},
+ { name=>'difficulty',
+ translate => 'Degree of Difficulty: [_1]',},
+ { name=>'clear',
+ translate => 'Clear: [_1]',},
+ { name=>'depth',
+ translate => 'Depth: [_1]',},
+ { name=>'helpful',
+ translate => 'Helpful: [_1]',},
+ { name=>'correct',
+ translate => 'Correcy: [_1]',},
+ { name=>'technical',
+ translate => 'Technical: [_1]',},
+ ) {
+ $result.= &mt($field->{'translate'},$values{$field->{'name'}}).
+ " \n";
+ }
+ $result .= "
".$values{'extrashow'}.
+ ''.$values{'shortabstract'}.'
';
+ $result .= ' '."\n";
return $result;
}