version 1.275, 2006/07/31 19:45:58
|
version 1.276, 2006/09/26 15:24:18
|
Line 139 sub handler {
|
Line 139 sub handler {
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['catalogmode','launch','acts','mode','form','element','pause', |
['catalogmode','launch','acts','mode','form','element','pause', |
'phase','persistent_db_id','table','start','show', |
'phase','persistent_db_id','table','start','show', |
'cleargroupsort','titleelement']); |
'cleargroupsort','titleelement','area']); |
## |
## |
## The following is a trick - we wait a few seconds if asked to so |
## The following is a trick - we wait a few seconds if asked to so |
## the daemon running the search can get ahead of the daemon |
## the daemon running the search can get ahead of the daemon |
Line 249 sub handler {
|
Line 249 sub handler {
|
if (exists($env{'form.mode'})) { |
if (exists($env{'form.mode'})) { |
$hidden_fields .= &hidden_field('mode'); |
$hidden_fields .= &hidden_field('mode'); |
} |
} |
|
if (exists($env{'form.area'})) { |
|
$hidden_fields .= &hidden_field('area'); |
|
} |
## |
## |
## Configure dynamic components of interface |
## Configure dynamic components of interface |
## |
## |
Line 318 END
|
Line 321 END
|
} elsif ($env{'form.phase'} eq 'disp_adv') { |
} elsif ($env{'form.phase'} eq 'disp_adv') { |
&print_advanced_search_form($r,$closebutton,$hidden_fields); |
&print_advanced_search_form($r,$closebutton,$hidden_fields); |
} elsif ($env{'form.phase'} eq 'results') { |
} elsif ($env{'form.phase'} eq 'results') { |
&display_results($r,$importbutton,$closebutton,$diropendb); |
&display_results($r,$importbutton,$closebutton,$diropendb, |
|
$env{'form.area'}); |
} elsif ($env{'form.phase'} =~ /^(sort|run_search)$/) { |
} elsif ($env{'form.phase'} =~ /^(sort|run_search)$/) { |
my ($query,$customquery,$customshow,$libraries,$pretty_string) = |
my ($query,$customquery,$customshow,$libraries,$pretty_string) = |
&get_persistent_data($persistent_db_file, |
&get_persistent_data($persistent_db_file, |
Line 328 END
|
Line 332 END
|
&print_sort_form($r,$pretty_string); |
&print_sort_form($r,$pretty_string); |
} elsif ($env{'form.phase'} eq 'run_search') { |
} elsif ($env{'form.phase'} eq 'run_search') { |
&run_search($r,$query,$customquery,$customshow, |
&run_search($r,$query,$customquery,$customshow, |
$libraries,$pretty_string); |
$libraries,$pretty_string,$env{'form.area'}); |
} |
} |
} elsif ($env{'form.phase'} eq 'course_search') { |
} elsif ($env{'form.phase'} eq 'course_search') { |
&course_search($r); |
&course_search($r); |
Line 358 END
|
Line 362 END
|
$persistent_db_file); |
$persistent_db_file); |
# |
# |
# Set up table |
# Set up table |
if (! defined(&create_results_table())) { |
if (! defined(&create_results_table($env{'form.area'}))) { |
my $errorstring=&Apache::lonmysql::get_error(); |
my $errorstring=&Apache::lonmysql::get_error(); |
&Apache::lonnet::logthis('lonsearchcat.pm: Unable to create '. |
&Apache::lonnet::logthis('lonsearchcat.pm: Unable to create '. |
'needed table. lonmysql error:'. |
'needed table. lonmysql error:'. |
Line 665 sub print_basic_search_form {
|
Line 669 sub print_basic_search_form {
|
&Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic', |
&Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic', |
$env{'form.catalogmode'} ne 'import'); |
$env{'form.catalogmode'} ne 'import'); |
my $scrout = &Apache::loncommon::start_page('Search').$bread_crumb; |
my $scrout = &Apache::loncommon::start_page('Search').$bread_crumb; |
|
# Search form for resource space |
if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { |
if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { |
# Define interface components |
$scrout .= &setup_basic_search($r,'res',$hidden_fields,$closebutton); |
my $userelatedwords= '<label>'. |
$scrout .= '<hr /><br />'; |
&mt('[_1] use related words', |
|
&Apache::lonhtmlcommon::checkbox |
|
('related',$env{'form.related'},'related')).'</label>'; |
|
my $onlysearchdomain='<label>'. |
|
&mt('[_1] only search domain [_2]', |
|
&Apache::lonhtmlcommon::checkbox('domains', |
|
$env{'form.domains'}, |
|
$r->dir_config('lonDefDomain') |
|
), |
|
$r->dir_config('lonDefDomain') |
|
).'</label>'; |
|
my $inclext= '<label>'. |
|
&mt('[_1] include external resources', |
|
&Apache::lonhtmlcommon::checkbox |
|
('inclext',$env{'form.inclext'})).'</label>'; |
|
my $adv_search_link = |
|
'<a href="/adm/searchcat?'. |
|
'phase=disp_adv&'. |
|
'catalogmode='.$env{'form.catalogmode'}. |
|
'&launch='.$env{'form.launch'}. |
|
'&mode='.$env{'form.mode'}. |
|
'">'.&mt('Advanced Search').'</a>'; |
|
# |
|
$scrout.='<form name="loncapa_search" method="post" '. |
|
'action="/adm/searchcat">'. |
|
'<input type="hidden" name="phase" value="basic_search" />'. |
|
$hidden_fields; |
|
# |
|
$scrout .= '<center>'.$/; |
|
if ($env{'request.course.id'}) { |
|
$scrout .= '<h1>'.&mt('LON-CAPA Catalog Search').'</h1>'; |
|
} else { |
|
# No need to tell them they are searching |
|
$scrout.= ('<br />'x2); |
|
} |
|
$scrout.='<table>'. |
|
'<tr><td align="center" valign="top">'. |
|
&Apache::lonhtmlcommon::textbox('basicexp', |
|
$env{'form.basicexp'},50). |
|
'<br />'. |
|
'<font size="-1">'.&searchhelp().'</font>'.'</td>'. |
|
'<td><font size="-1">'. |
|
'<nobr>'.(' 'x3).$adv_search_link.'</nobr>'.'<br />'. |
|
'<nobr>'.(' 'x1).$userelatedwords.'</nobr>'.'<br />'. |
|
'<nobr>'.(' 'x1).$onlysearchdomain.'</nobr>'.'<br />'. |
|
'<nobr>'.(' 'x1).$inclext.'</nobr>'.'<br />'. |
|
'</font></td>'. |
|
'</tr>'.$/; |
|
# |
|
$scrout .= '<tr><td align="center" colspan="2">'. |
|
'<font size="-1">'. |
|
'<input type="submit" name="basicsubmit" '. |
|
'value="'.&mt('Search').'" />'. |
|
(' 'x2).$closebutton.(' 'x2). |
|
&viewoptions(). |
|
'</font>'. |
|
'</td></tr>'.$/; |
|
$scrout .= '</table>'.$/.'</center>'.'</form>'; |
|
} |
} |
|
# Search form for accessible portfolio files |
|
$scrout.= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton); |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my %lt=&Apache::lonlocal::texthash('srch' => 'Search', |
my %lt=&Apache::lonlocal::texthash('srch' => 'Search', |
'header' => 'Course Search', |
'header' => 'Course Search', |
Line 777 ENDENDCOURSE
|
Line 726 ENDENDCOURSE
|
$r->print($scrout); |
$r->print($scrout); |
return; |
return; |
} |
} |
|
|
|
sub setup_basic_search { |
|
my ($r,$area,$hidden_fields,$closebutton) = @_; |
|
# Define interface components |
|
my %lt = &Apache::lonlocal::texthash ( |
|
res => 'LON-CAPA Catalog Search', |
|
portfolio => 'Portfolio Search', |
|
); |
|
my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout); |
|
$userelatedwords = '<label>'.&mt('[_1] use related words', |
|
&Apache::lonhtmlcommon::checkbox('related',$env{'form.related'},'related')). |
|
'</label>'; |
|
$onlysearchdomain = '<label>'.&mt('[_1] only search domain [_2]', |
|
&Apache::lonhtmlcommon::checkbox('domains',$env{'form.domains'}, |
|
$r->dir_config('lonDefDomain'))). |
|
'</label>'; |
|
if ($area eq 'res') { |
|
$inclext= '<label>'.&mt('[_1] include external resources', |
|
&Apache::lonhtmlcommon::checkbox('inclext',$env{'form.inclext'})). |
|
'</label>'; |
|
} |
|
$adv_search_link = '<a href="/adm/searchcat?'. |
|
'phase=disp_adv&'. |
|
'catalogmode='.$env{'form.catalogmode'}. |
|
'&launch='.$env{'form.launch'}. |
|
'&mode='.$env{'form.mode'}. |
|
'&area='.$area. |
|
'">'.&mt('Advanced Search').'</a>'; |
|
# |
|
$scrout.='<form name="loncapa_search" method="post" '. |
|
'action="/adm/searchcat">'. |
|
'<input type="hidden" name="phase" value="basic_search" />'. |
|
$hidden_fields; |
|
if (!exists($env{'form.area'})) { |
|
$scrout .= '<input type="hidden" name="area" value="'.$area.'" />'; |
|
} |
|
# |
|
$scrout .= '<center>'.$/; |
|
# if ($env{'request.course.id'}) { |
|
$scrout .= '<h1>'.$lt{$area}.'</h1>'; |
|
# } else { |
|
# No need to tell them they are searching |
|
# $scrout.= ('<br />'x2); |
|
# } |
|
$scrout.='<table>'. |
|
'<tr><td align="center" valign="top">'. |
|
&Apache::lonhtmlcommon::textbox('basicexp', |
|
$env{'form.basicexp'},50). |
|
'<br />'. |
|
'<font size="-1">'.&searchhelp().'</font>'.'</td>'. |
|
'<td><font size="-1">'. |
|
'<nobr>'.(' 'x3).$adv_search_link.'</nobr>'.'<br />'. |
|
'<nobr>'.(' 'x1).$userelatedwords.'</nobr>'.'<br />'. |
|
'<nobr>'.(' 'x1).$onlysearchdomain.'</nobr>'.'<br />'. |
|
'<nobr>'.(' 'x1).$inclext.'</nobr>'.'<br />'. |
|
'</font></td>'. |
|
'</tr>'.$/; |
|
# |
|
$scrout .= '<tr><td align="center" colspan="2">'. |
|
'<font size="-1">'. |
|
'<input type="submit" name="basicsubmit" '. |
|
'value="'.&mt('Search').'" />'. |
|
(' 'x2).$closebutton.(' 'x2). &viewoptions(). |
|
'</font>'. |
|
'</td></tr>'.$/; |
|
$scrout .= '</table>'.$/.'</center>'.'</form>'; |
|
return $scrout; |
|
} |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
|
|
Line 871 ENDHEADER
|
Line 889 ENDHEADER
|
&titlefield(&mt('Domains')).'</td><td colspan="2">'. |
&titlefield(&mt('Domains')).'</td><td colspan="2">'. |
&Apache::loncommon::domain_select('domains', |
&Apache::loncommon::domain_select('domains', |
$env{'form.domains'},1). |
$env{'form.domains'},1). |
'<br /><label>'. |
'<br /><label>'; |
&mt('[_1] include external resources', |
if ($env{'form.area'} ne 'portfolio') { |
&Apache::lonhtmlcommon::checkbox |
$scrout .= &mt('[_1] include external resources', |
('inclext',$env{'form.inclext'})).'</label></td></tr>'.$/; |
&Apache::lonhtmlcommon::checkbox |
|
('inclext',$env{'form.inclext'})).'</label>' |
|
} |
|
$scrout .= '</td></tr>'.$/; |
# |
# |
# Misc metadata |
# Misc metadata |
$scrout.='<tr><td align="right" valign="top">'. |
if ($env{'form.area'} ne 'portfolio') { |
&titlefield(&mt('Copyright/Distribution')).'</td><td colspan="2">'. |
$scrout.='<tr><td align="right" valign="top">'. |
&Apache::lonmeta::selectbox('copyright', |
&titlefield(&mt('Copyright/Distribution')). |
$env{'form.copyright'}, |
'</td><td colspan="2">'. |
\&Apache::loncommon::copyrightdescription, |
&Apache::lonmeta::selectbox('copyright', |
( undef, |
$env{'form.copyright'}, |
&Apache::loncommon::copyrightids) |
\&Apache::loncommon::copyrightdescription, |
).'</td></tr>'.$/; |
( undef, |
|
&Apache::loncommon::copyrightids) |
|
).'</td></tr>'.$/; |
|
} |
$scrout.='<tr><td align="right" valign="top">'. |
$scrout.='<tr><td align="right" valign="top">'. |
&titlefield(&mt('Language')).'</td><td colspan="2">'. |
&titlefield(&mt('Language')).'</td><td colspan="2">'. |
&Apache::lonmeta::selectbox('language', |
&Apache::lonmeta::selectbox('language', |
Line 892 ENDHEADER
|
Line 916 ENDHEADER
|
\&Apache::loncommon::languagedescription, |
\&Apache::loncommon::languagedescription, |
('any',&Apache::loncommon::languageids) |
('any',&Apache::loncommon::languageids) |
).'</td></tr>'; |
).'</td></tr>'; |
$scrout .= "</table>\n"; |
|
# |
|
# Dynamic metadata |
|
$scrout .= '<h3>'.&mt('Problem Statistics').'</h3>'; |
|
$scrout .= "<table>\n"; |
|
$scrout .= '<tr><td> </td><td align="center">'.&mt('Minimum').'</td>'. |
|
'<td align="center">'.&mt('Maximum').'</td></tr>'."\n"; |
|
foreach my $statistic |
|
({ name=>'count', |
|
description=>'Network-wide number of accesses (hits)',}, |
|
{ name=>'stdno', |
|
description=> |
|
'Total number of students who have worked on this problem',}, |
|
{ name => 'avetries', |
|
description=>'Average number of tries till solved',}, |
|
{ name => 'difficulty', |
|
description=>'Degree of difficulty',}, |
|
{ name => 'disc', |
|
description=>'Degree of discrimination'}) { |
|
$scrout .= '<tr><td align="right">'. |
|
&titlefield(&mt($statistic->{'description'})). |
|
'</td><td align="center">'. |
|
'<input type="text" name="'.$statistic->{'name'}.'_min" '. |
|
'value="" size="6" />'. |
|
'</td><td align="center">'. |
|
'<input type="text" name="'.$statistic->{'name'}.'_max" '. |
|
'value="" size="6" />'. |
|
'</td></tr>'.$/; |
|
} |
|
$scrout .= "</table>\n"; |
$scrout .= "</table>\n"; |
$scrout .= '<h3>'.&mt('Evaluation Data').'</h3>'; |
|
$scrout .= "<table>\n"; |
|
$scrout .= '<tr><td> </td><td align="center">'.&mt('Minimum').'</td>'. |
if ($env{'form.area'} eq 'portfolio') { |
'<td align="center">'.&mt('Maximum').'</td></tr>'."\n"; |
# Added fields |
foreach my $evaluation |
$scrout .= '<h3>'.&mt('Custom Metadata fields').'</h3>'; |
( { name => 'clear', |
$scrout .= "<table>\n"; |
description => 'Material presented in clear way'}, |
$scrout .= '<tr><td> </td><td align="center">'. |
{ name =>'depth', |
&mt('Field Name').'</td>'.'<td align="center">'. |
description => 'Material covered with sufficient depth'}, |
&mt('Field Value(s)').'</td></tr>'. |
{ name => 'helpful', |
'<tr><td>'.&mt('1: '). |
description => 'Material is helpful'}, |
'</td><td align="center">'. |
{ name => 'correct', |
'<input type="text" name="addedfield_0" size="10" /></td>'. |
description => 'Material appears to be correct'}, |
'<td align="center"><input type="text" '. |
{ name => 'technical', |
'name="addedvalues_0" size="15" /></td></tr>'; |
description => 'Resource is technically correct'}){ |
for (my $j=1; $j<=$env{'form.numaddedfields'}; $j++) { |
$scrout .= '<tr><td align="right">'. |
my $num = $j+1; |
&titlefield(&mt($evaluation->{'description'})). |
$scrout .= '<tr><td>'.&mt('Custom metadata [_1]: ',$num). |
'</td><td align="center">'. |
'</td><td align="center">'. |
'<input type="text" name="'.$evaluation->{'name'}.'_min" '. |
'<input type="text" name="addedfield_'.$j. |
'value="" size="6" />'. |
'" size="10" /></td>'. |
'</td><td align="center">'. |
'<td align="center"><input type="text" '. |
'<input type="text" name="'.$evaluation->{'name'}.'_max" '. |
'name="addedvalues_'.$j.'" size="15" /></td></tr>'; |
'value="" size="6" />'. |
} |
'</td></tr>'.$/; |
my $numadded = 1 + $env{'form.numaddedfields'}; |
|
$scrout .= '<tr><td colspan="3"> </td></tr>'. |
|
'<tr><td align="left" colspan="3">'. |
|
'<input type="button" name="newfield" '. |
|
'value="Additional custom field/value" '. |
|
'onclick="javascript:additional_metadata()" />'. |
|
'<input type="hidden" name="numaddedfelds" value="'. |
|
$numadded.'" /></td></tr></table>'; |
|
} else { |
|
# |
|
# Dynamic metadata |
|
$scrout .= '<h3>'.&mt('Problem Statistics').'</h3>'; |
|
$scrout .= "<table>\n"; |
|
$scrout .= '<tr><td> </td><td align="center">'. |
|
&mt('Minimum').'</td>'.'<td align="center">'. |
|
&mt('Maximum').'</td></tr>'."\n"; |
|
foreach my $statistic |
|
({ name=>'count', |
|
description=>'Network-wide number of accesses (hits)',}, |
|
{ name=>'stdno', |
|
description=> |
|
'Total number of students who have worked on this problem',}, |
|
{ name => 'avetries', |
|
description=>'Average number of tries till solved',}, |
|
{ name => 'difficulty', |
|
description=>'Degree of difficulty',}, |
|
{ name => 'disc', |
|
description=>'Degree of discrimination'}) { |
|
$scrout .= '<tr><td align="right">'. |
|
&titlefield(&mt($statistic->{'description'})). |
|
'</td><td align="center">'. |
|
'<input type="text" name="'.$statistic->{'name'}. |
|
'_min" value="" size="6" /></td><td align="center">'. |
|
'<input type="text" name="'.$statistic->{'name'}. |
|
'_max" value="" size="6" /></td></tr>'.$/; |
|
} |
|
$scrout .= "</table>\n"; |
|
$scrout .= '<h3>'.&mt('Evaluation Data').'</h3>'; |
|
$scrout .= "<table>\n"; |
|
$scrout .= '<tr><td> </td><td align="center">'. |
|
&mt('Minimum').'</td>'.'<td align="center">'. |
|
&mt('Maximum').'</td></tr>'."\n"; |
|
foreach my $evaluation |
|
( { name => 'clear', |
|
description => 'Material presented in clear way'}, |
|
{ name =>'depth', |
|
description => 'Material covered with sufficient depth'}, |
|
{ name => 'helpful', |
|
description => 'Material is helpful'}, |
|
{ name => 'correct', |
|
description => 'Material appears to be correct'}, |
|
{ name => 'technical', |
|
description => 'Resource is technically correct'}){ |
|
$scrout .= '<tr><td align="right">'. |
|
&titlefield(&mt($evaluation->{'description'})). |
|
'</td><td align="center">'. |
|
'<input type="text" name="'. |
|
$evaluation->{'name'}.'_min" value="" size="6" />'. |
|
'</td><td align="center"><input type="text" name="'. |
|
$evaluation->{'name'}.'_max" value="" size="6" />'. |
|
'</td></tr>'.$/; |
|
} |
|
$scrout .= "</table>\n"; |
} |
} |
$scrout .= "</table>\n"; |
|
# |
# |
# Creation/Modification date limits |
# Creation/Modification date limits |
$scrout .= '<h3>'.&mt('Creation and Modification dates').'</h3>'; |
$scrout .= '<h3>'.&mt('Creation and Modification dates').'</h3>'; |
Line 1429 sub parse_advanced_search {
|
Line 1485 sub parse_advanced_search {
|
&Apache::loncommon::copyrightdescription($env{'form.copyright'}). |
&Apache::loncommon::copyrightdescription($env{'form.copyright'}). |
"<br />\n"; |
"<br />\n"; |
} |
} |
# |
if ($env{'form.area'} eq 'portfolio') { |
# Statistics |
# |
foreach my $field (@StatsFields,@EvalFields) { |
# Added metadata fields |
my ($min,$max); |
for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) { |
if (exists($env{'form.'.$field.'_min'}) && |
if (($env{'form.addedfield_'.$i} ne '') && |
$env{'form.'.$field.'_min'} ne '') { |
($env{'form.addedvalue_'.$i} ne '')) { |
$min = $env{'form.'.$field.'_min'}; |
my $stuff = 1; #FIXME |
} |
} |
if (exists($env{'form.'.$field.'_max'}) && |
} |
$env{'form.'.$field.'_max'} ne '') { |
} else { |
$max = $env{'form.'.$field.'_max'}; |
# |
} |
# Statistics |
next if (! defined($max) && ! defined($min)); |
foreach my $field (@StatsFields,@EvalFields) { |
if (defined($min) && defined($max)) { |
my ($min,$max); |
($min,$max) = sort {$a <=>$b} ($min,$max); |
if (exists($env{'form.'.$field.'_min'}) && |
} |
$env{'form.'.$field.'_min'} ne '') { |
if (defined($min) && $min =~ /^(\d+\.\d+|\d+|\.\d+)$/) { |
$min = $env{'form.'.$field.'_min'}; |
push(@queries,'('.$field.'>'.$min.')'); |
} |
$pretty_search_string.=$font.$field.'</font>>'.$min.'<br />'; |
if (exists($env{'form.'.$field.'_max'}) && |
} |
$env{'form.'.$field.'_max'} ne '') { |
if (defined($max) && $max =~ /^(\d+\.\d+|\d+|\.\d+)$/) { |
$max = $env{'form.'.$field.'_max'}; |
push(@queries,'('.$field.'<'.$max.')'); |
} |
$pretty_search_string.=$font.$field.'</font><'.$max.'<br />'; |
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.'</font>>'.$min.'<br />'; |
|
} |
|
if (defined($max) && $max =~ /^(\d+\.\d+|\d+|\.\d+)$/) { |
|
push(@queries,'('.$field.'<'.$max.')'); |
|
$pretty_search_string.=$font.$field.'</font><'.$max.'<br />'; |
|
} |
} |
} |
} |
} |
# |
# |
Line 1596 sub parse_basic_search {
|
Line 1663 sub parse_basic_search {
|
} |
} |
my $pretty_search_string=$search_string; |
my $pretty_search_string=$search_string; |
my @Queries; |
my @Queries; |
my $searchfield = 'concat_ws(" ",'.join(',', |
my @fields = ('title','author','subject','notes','abstract','keywords'); |
('title','author','subject', |
my $searchfield; |
'notes','abstract','keywords') |
if ($env{'form.area'} eq 'portfolio') { |
).')'; |
$searchfield = 'concat_ws(" ",pm.'.join(',pm.',@fields).')'; |
|
} else { |
|
$searchfield = 'concat_ws(" ",'.join(',',@fields).')'; |
|
} |
my ($error,$SQLQuery) = &process_phrase_input($search_string, |
my ($error,$SQLQuery) = &process_phrase_input($search_string, |
$env{'form.related'}, |
$env{'form.related'}, |
$searchfield); |
$searchfield); |
Line 1612 sub parse_basic_search {
|
Line 1682 sub parse_basic_search {
|
#foreach my $q (@Queries) { |
#foreach my $q (@Queries) { |
# &Apache::lonnet::logthis(' '.$q); |
# &Apache::lonnet::logthis(' '.$q); |
#} |
#} |
my $final_query = 'SELECT * FROM metadata WHERE '.join(" AND ",@Queries); |
my $final_query; |
|
if ($env{'form.area'} eq 'portfolio') { |
|
$final_query = 'SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa WHERE (pm.url = pa.url AND (pa.start < NOW() AND (pa.end IS NULL OR pa.end > NOW())) AND '.join(" AND ",@Queries).')'; |
|
} else { |
|
$final_query = 'SELECT * FROM metadata WHERE '.join(" AND ",@Queries); |
|
} |
# |
# |
if ($env{'form.related'}) { |
if ($env{'form.related'}) { |
$pretty_search_string.=' '.&mt('(including related words)'); |
$pretty_search_string.=' '.&mt('(including related words)'); |
Line 1622 sub parse_basic_search {
|
Line 1697 sub parse_basic_search {
|
} |
} |
$pretty_search_string .= "<br />\n"; |
$pretty_search_string .= "<br />\n"; |
$pretty_search_string =~ s:^<br /> and ::; |
$pretty_search_string =~ s:^<br /> and ::; |
#&Apache::lonnet::logthis('simple search final query = '.$/.$final_query); |
&Apache::lonnet::logthis('simple search final query = '.$/.$final_query); |
return ($final_query,$pretty_search_string, |
return ($final_query,$pretty_search_string, |
$libraries_to_query); |
$libraries_to_query); |
} |
} |
Line 2176 my @Fullindicies;
|
Line 2251 my @Fullindicies;
|
Creates the table of search results by calling lonmysql. Stores the |
Creates the table of search results by calling lonmysql. Stores the |
table id in $env{'form.table'} |
table id in $env{'form.table'} |
|
|
Inputs: none. |
Inputs: search area - either res or portfolio |
|
|
Returns: the identifier of the table on success, undef on error. |
Returns: the identifier of the table on success, undef on error. |
|
|
Line 2185 Returns: the identifier of the table on
|
Line 2260 Returns: the identifier of the table on
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub set_up_table_structure { |
sub set_up_table_structure { |
|
my ($tabletype) = @_; |
my ($datatypes,$fullindicies) = |
my ($datatypes,$fullindicies) = |
&LONCAPA::lonmetadata::describe_metadata_storage(); |
&LONCAPA::lonmetadata::describe_metadata_storage($tabletype); |
# Copy the table description before modifying it... |
# Copy the table description before modifying it... |
@Datatypes = @{$datatypes}; |
@Datatypes = @{$datatypes}; |
unshift(@Datatypes,{name => 'id', |
unshift(@Datatypes,{name => 'id', |
Line 2199 sub set_up_table_structure {
|
Line 2275 sub set_up_table_structure {
|
} |
} |
|
|
sub create_results_table { |
sub create_results_table { |
&set_up_table_structure(); |
my ($area) = @_; |
|
if ($area eq 'portfolio') { |
|
&set_up_table_structure('portfolio_search'); |
|
} else { |
|
&set_up_table_structure('metadata'); |
|
} |
my $table = &Apache::lonmysql::create_table |
my $table = &Apache::lonmysql::create_table |
( { columns => \@Datatypes, |
( { columns => \@Datatypes, |
FULLTEXT => [{'columns' => \@Fullindicies},], |
FULLTEXT => [{'columns' => \@Fullindicies},], |
Line 2331 results into MySQL.
|
Line 2412 results into MySQL.
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub run_search { |
sub run_search { |
my ($r,$query,$customquery,$customshow,$serverlist,$pretty_string) = @_; |
my ($r,$query,$customquery,$customshow,$serverlist, |
|
$pretty_string,$area) = @_; |
|
my $tabletype = 'metadata'; |
|
if ($area eq 'portfolio') { |
|
$tabletype = 'portfolio_search'; |
|
} |
my $connection = $r->connection; |
my $connection = $r->connection; |
# |
# |
# Print run_search header |
# Print run_search header |
Line 2407 END
|
Line 2492 END
|
## |
## |
## Prepare for the big loop. |
## Prepare for the big loop. |
my $hitcountsum; |
my $hitcountsum; |
|
my %matches; |
my $server; |
my $server; |
my $status; |
my $status; |
my $revise = &revise_button(); |
my $revise = &revise_button(); |
Line 2461 END
|
Line 2547 END
|
delete ($Server_status{$server}); |
delete ($Server_status{$server}); |
next; |
next; |
} |
} |
$status=~s|/||g; |
$status=~s|/||g; |
my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$status; |
my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$status; |
if (-e $datafile && ! -e "$datafile.end") { |
if (-e $datafile && ! -e "$datafile.end") { |
&update_status($r,&mt('Receiving results from [_1]',$server)); |
&update_status($r,&mt('Receiving results from [_1]',$server)); |
Line 2490 END
|
Line 2576 END
|
next if (! $result); |
next if (! $result); |
# |
# |
# Parse the result. |
# Parse the result. |
my %Fields = &parse_raw_result($result,$server); |
my %Fields = &parse_raw_result($result,$server,$tabletype); |
$Fields{'hostname'} = $server; |
$Fields{'hostname'} = $server; |
# |
# |
# Skip if external and we did not want that |
# Skip if external and we did not want that |
Line 2498 END
|
Line 2584 END
|
# Skip based on copyright |
# Skip based on copyright |
next if (! ©right_check(\%Fields)); |
next if (! ©right_check(\%Fields)); |
|
|
|
if ($area eq 'portfolio') { |
|
next if (defined($matches{$Fields{'url'}})); |
|
# Skip if inaccessible |
|
next if (!&Apache::lonnet::portfolio_access($Fields{'url'})); |
|
$matches{$Fields{'url'}} = 1; |
|
} |
# |
# |
# Store the result in the mysql database |
# Store the result in the mysql database |
my $result = &Apache::lonmysql::store_row($table,\%Fields); |
my $result = &Apache::lonmysql::store_row($table,\%Fields); |
Line 2584 Prints the results out for selection and
|
Line 2676 Prints the results out for selection and
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub display_results { |
sub display_results { |
my ($r,$importbutton,$closebutton,$diropendb) = @_; |
my ($r,$importbutton,$closebutton,$diropendb,$area) = @_; |
my $connection = $r->connection; |
my $connection = $r->connection; |
$r->print(&search_results_header($importbutton,$closebutton)); |
$r->print(&search_results_header($importbutton,$closebutton)); |
## |
## |
Line 2654 sub display_results {
|
Line 2746 sub display_results {
|
$r->print(&hidden_field('table'). |
$r->print(&hidden_field('table'). |
&hidden_field('phase'). |
&hidden_field('phase'). |
&hidden_field('persistent_db_id'). |
&hidden_field('persistent_db_id'). |
&hidden_field('start') |
&hidden_field('start'). |
|
&hidden_field('area') |
); |
); |
# |
# |
# Build sorting selector |
# Build sorting selector |
Line 2675 sub display_results {
|
Line 2768 sub display_results {
|
{key =>'lowestgradelevel'}, |
{key =>'lowestgradelevel'}, |
{key =>'highestgradelevel'}, |
{key =>'highestgradelevel'}, |
{key =>'standards',desc=>'Standards'}, |
{key =>'standards',desc=>'Standards'}, |
|
); |
|
if ($area eq 'portfolio') { |
|
push(@fields, |
|
( |
|
{key => 'scope'}, |
|
{key => 'keynum'}, |
|
)); |
|
} else { |
|
push(@fields, |
|
( |
{key =>'count',desc=>'Number of accesses'}, |
{key =>'count',desc=>'Number of accesses'}, |
{key =>'stdno',desc=>'Students Attempting'}, |
{key =>'stdno',desc=>'Students Attempting'}, |
{key =>'avetries',desc=>'Average Number of Tries'}, |
{key =>'avetries',desc=>'Average Number of Tries'}, |
Line 2685 sub display_results {
|
Line 2788 sub display_results {
|
{key =>'correct',desc=>'Evaluation: Material is Correct'}, |
{key =>'correct',desc=>'Evaluation: Material is Correct'}, |
{key =>'helpful',desc=>'Evaluation: Material is Helpful'}, |
{key =>'helpful',desc=>'Evaluation: Material is Helpful'}, |
{key =>'depth',desc=>'Evaluation: Material has Depth'}, |
{key =>'depth',desc=>'Evaluation: Material has Depth'}, |
); |
)); |
|
} |
my %fieldnames = &Apache::lonmeta::fieldnames(); |
my %fieldnames = &Apache::lonmeta::fieldnames(); |
my @field_order; |
my @field_order; |
foreach my $field_data (@fields) { |
foreach my $field_data (@fields) { |
Line 2702 sub display_results {
|
Line 2806 sub display_results {
|
my %sort_fields = map {$_->{'key'},$_->{'desc'}} @fields; |
my %sort_fields = map {$_->{'key'},$_->{'desc'}} @fields; |
$sort_fields{'select_form_order'} = \@field_order; |
$sort_fields{'select_form_order'} = \@field_order; |
$env{'form.sortorder'} = 'desc' if (! exists($env{'form.sortorder'})); |
$env{'form.sortorder'} = 'desc' if (! exists($env{'form.sortorder'})); |
$env{'form.sortfield'} = 'count' if (! exists($env{'form.sortfield'})); |
if (! exists($env{'form.sortfield'})) { |
|
if ($area eq 'portfolio') { |
|
$env{'form.sortfield'} = 'owner'; |
|
} else { |
|
$env{'form.sortfield'} = 'count'; |
|
} |
|
} |
if (! exists($env{'form.sortorder'})) { |
if (! exists($env{'form.sortorder'})) { |
if ($env{'form.sortfield'}=~/^(count|stdno|disc|clear|technical|correct|helpful)$/) { |
if ($env{'form.sortfield'}=~/^(count|stdno|disc|clear|technical|correct|helpful)$/) { |
$env{'form.sortorder'}='desc'; |
$env{'form.sortorder'}='desc'; |
Line 2766 sub display_results {
|
Line 2876 sub display_results {
|
my @Results = &Apache::lonmysql::get_rows($table,$sort_command); |
my @Results = &Apache::lonmysql::get_rows($table,$sort_command); |
## |
## |
## Loop through the results and output them. |
## Loop through the results and output them. |
|
my $tabletype = 'metadata'; |
|
if ($area eq 'portfolio') { |
|
$tabletype = 'portfolio_search'; |
|
} |
foreach my $row (@Results) { |
foreach my $row (@Results) { |
if ($connection->aborted()) { |
if ($connection->aborted()) { |
&cleanup(); |
&cleanup(); |
return; |
return; |
} |
} |
my %Fields = %{&parse_row(@$row)}; |
my %Fields = %{&parse_row($tabletype,@$row)}; |
my $output="<p>\n"; |
my $output="<p>\n"; |
if (! defined($Fields{'title'}) || $Fields{'title'} eq '') { |
if (! defined($Fields{'title'}) || $Fields{'title'} eq '') { |
$Fields{'title'} = 'Untitled'; |
$Fields{'title'} = 'Untitled'; |
Line 2855 Parse a row returned from the database.
|
Line 2969 Parse a row returned from the database.
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub parse_row { |
sub parse_row { |
my @Row = @_; |
my ($tabletype,@Row) = @_; |
my %Fields; |
my %Fields; |
if (! scalar(@Datatypes)) { |
if (! scalar(@Datatypes)) { |
&set_up_table_structure(); |
&set_up_table_structure($tabletype); |
} |
} |
for (my $i=0;$i<=$#Row;$i++) { |
for (my $i=0;$i<=$#Row;$i++) { |
$Fields{$Datatypes[$i]->{'name'}}=&unescape($Row[$i]); |
$Fields{$Datatypes[$i]->{'name'}}=&unescape($Row[$i]); |
Line 2894 The 'title' field is set to "Untitled" i
|
Line 3008 The 'title' field is set to "Untitled" i
|
########################################################### |
########################################################### |
########################################################### |
########################################################### |
sub parse_raw_result { |
sub parse_raw_result { |
my ($result,$hostname) = @_; |
my ($result,$hostname,$tabletype) = @_; |
# conclude from self to others regarding fields |
# conclude from self to others regarding fields |
my %Fields=&LONCAPA::lonmetadata::metadata_col_to_hash |
my %Fields=&LONCAPA::lonmetadata::metadata_col_to_hash |
(map { |
($tabletype, |
|
map { |
&unescape($_); |
&unescape($_); |
} (split(/\,/,$result)) ); |
} (split(/\,/,$result)) ); |
return %Fields; |
return %Fields; |
} |
} |
|
|