'.
@@ -315,11 +352,14 @@ sub numerical_plot_percent {
last;
}
}
+ $percent_spread = $highest_percent - $lowest_percent;
my $bin_size = 1;
foreach (qw/0.01 0.05 0.1 0.5 1 2 5 10 20 25 50 100/) {
if ($lowest_percent/2 < $_){
$bin_size = $_;
- last;
+ if ( ($percent_spread/$bin_size) < $max_bins ) {
+ last;
+ }
}
}
my @bins;
@@ -337,7 +377,9 @@ sub numerical_plot_percent {
while (my ($ans,$submissions) = each(%$responses)) {
while (my ($submission,$counts) = each(%$submissions)) {
my ($correct_count,$incorrect_count) = @$counts;
- my $scaled_value = 100*($submission-$ans)/abs($ans);
+ my $scaled_value =
+ ($ans) ? 100*($submission-$ans)/abs($ans)
+ : 0;
if ($scaled_value < $bins[0]) {
$bins[0]=$scaled_value -1;
}
@@ -366,10 +408,13 @@ sub numerical_plot_percent {
if ($max <$_) { $max = $_; last; }
}
#
- my $title = &mt('Percent Difference');
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Percent Difference',
+ 'xlabel' => 'Percent Difference from Correct',
+ 'ylabel' => 'Percent of Answers');
my @labels = (1..scalar(@bins)-1);
my $graph = &Apache::loncommon::DrawBarGraph
- ($title,'Percent Difference from Correct','Percent of Answers',
+ ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},
$max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,
{xskip=>1});
#
@@ -392,7 +437,12 @@ sub numerical_plot_differences {
} elsif ($low_bin < 0 && $high_bin < -$low_bin) {
$high_bin = -$low_bin;
}
- if (($high_bin -$low_bin)/$min_bin_size * 2 > $max_bins) {
+ if ($high_bin == $low_bin) {
+ $high_bin+=1;
+ $low_bin-=1;
+ }
+ if (!$min_bin_size ||
+ ($high_bin -$low_bin)/$min_bin_size * 2 > $max_bins) {
$min_bin_size = abs($high_bin - $low_bin) / $max_bins * 2;
}
my @bins;
@@ -434,10 +484,13 @@ sub numerical_plot_differences {
if ($max <$_) { $max = $_; last; }
}
#
- my $title = &mt('Difference between submission and correct');
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Difference between submission and correct',
+ 'xlabel' => 'Difference from Correct',
+ 'ylabel' => 'Percent of Answers');
my @labels = (1..scalar(@bins)-1);
my $graph = &Apache::loncommon::DrawBarGraph
- ($title,'Difference from Correct','Percent of Answers',
+ ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},
$max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,
{xskip=>1});
#
@@ -481,8 +534,12 @@ sub numerical_classify_responses {
if ($stats{'max_abs'} < $abs_high) {
$stats{'max_abs'} = $abs_high;
}
- my $low_percent = 100 * abs($abs_low / $subm{'correct'});
- my $high_percent = 100 * abs($abs_high / $subm{'correct'});
+ my $low_percent;
+ my $high_percent;
+ if (defined($subm{'correct'}) && $subm{'correct'} != 0) {
+ $low_percent = 100 * abs($abs_low / $subm{'correct'});
+ $high_percent = 100 * abs($abs_high / $subm{'correct'});
+ }
if (! defined($stats{'min_percent'}) ||
$stats{'min_percent'} > $low_percent) {
$stats{'min_percent'} = $low_percent;
@@ -530,6 +587,8 @@ sub numerical_classify_responses {
}
}
}
+ $stats{'correct_count'} |= 0;
+ $stats{'incorrect_count'} |= 0;
$stats{'students'}=scalar(keys(%students));
return (\%submission_data,\%stats);
}
@@ -585,10 +644,7 @@ sub numerical_determine_answers {
my ($r,$resource,$partid,$respid,$students)=@_;
my $c = $r->connection();
#
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
- ($r,'Student Answer Compilation Status',
- 'Student Answer Compilation Progress', scalar(@$students),
- 'inline',undef,'Statistics','stats_status');
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,scalar(@$students));
#
# Read in the cache (if it exists) before we start timing things.
&Apache::lonstathelpers::ensure_proper_cache($resource->{'symb'});
@@ -606,13 +662,23 @@ sub numerical_determine_answers {
$sdom);
# make the key
my $key = $partid.'.'.$respid;
+ # pick one of the possible answers
+ my $which = 'INTERNAL';
+ if (!exists($analysis->{$key}{$which})) {
+ $which = (sort(keys(%{ $analysis->{$key} })))[0];
+ }
foreach my $item ('answer','unit','ans_high','ans_low') {
- $correct->{$sname.':'.$sdom}->{$item} =
- $analysis->{$key.'.'.$item}->[0];
+ if (ref($analysis->{$key.'.'.$item}) eq 'ARRAY') {
+ $correct->{$sname.':'.$sdom}->{$item} =
+ $analysis->{$key.'.'.$item}[0];
+ } else {
+ $correct->{$sname.':'.$sdom}->{$item} =
+ $analysis->{$key.'.'.$item}{$which}[0][0];
+ }
}
- $answers{$analysis->{$key.'.answer'}->[0]}++;
+ $answers{$correct->{$sname.':'.$sdom}{'answer'}}++;
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
- &mt('last student'));
+ 'last student');
}
&Apache::lonstathelpers::write_analysis_cache();
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
@@ -736,7 +802,7 @@ sub circle {
sub radio_response_analysis {
my ($r,$problem,$problem_analysis,$students) = @_;
#
- if ($ENV{'form.AnalyzeOver'} !~ /^(tries|time)$/) {
+ if ($env{'form.AnalyzeOver'} !~ /^(tries|time)$/) {
$r->print('Bad request');
}
#
@@ -765,7 +831,8 @@ sub radio_response_analysis {
$analysis_html .= $table;
# Gather student data
my $response_data = &Apache::loncoursedata::get_response_data
- (\@Apache::lonstatistics::SelectedSections,
+ ([&Apache::lonstatistics::get_selected_sections()],
+ [&Apache::lonstatistics::get_selected_groups()],
$Apache::lonstatistics::enrollment_status,
$resource->symb,$respid);
my $correct; # either a hash reference or a scalar
@@ -778,7 +845,7 @@ sub radio_response_analysis {
my ($idx,@remainder) = split('&',$student->{'answer'});
my ($answer) = ($remainder[$idx]=~/^(.*)=([^=]*)$/);
$correct->{$student->{'username'}.':'.$student->{'domain'}}=
- &Apache::lonnet::unescape($answer);
+ &unescape($answer);
}
} else {
foreach my $foil (keys(%$foildata)) {
@@ -789,29 +856,29 @@ sub radio_response_analysis {
}
#
if (! defined($response_data) || ref($response_data) ne 'ARRAY' ) {
- $analysis_html = ''.
- &mt('There is no submission data for this resource').
- ' ';
+ $analysis_html = ' '
+ .&mt('There is no submission data for this resource.')
+ .'
';
$r->print($analysis_html);
return;
}
#
$analysis_html.='';
- for (my $plot_num = 1;$plot_num<=$ENV{'form.NumPlots'};$plot_num++) {
+ for (my $plot_num = 1;$plot_num<=$env{'form.NumPlots'};$plot_num++) {
# classify data ->correct foil -> selected foil
my ($restriction_function,
$correct_foil_title,$incorrect_foil_title,
$pre_graph_text,$post_graph_text,
$no_data_text,@extra_data);
- if ($ENV{'form.AnalyzeOver'} eq 'tries') {
+ if ($env{'form.AnalyzeOver'} eq 'tries') {
$restriction_function = sub {($_[0]->{'tries'} == $plot_num?1:0)};
- $correct_foil_title = 'Attempt '.$plot_num;
- $incorrect_foil_title = 'Attempt '.$plot_num;
+ $correct_foil_title = &mt('Attempt [_1]',$plot_num);
+ $incorrect_foil_title = &mt('Attempt [_1]',$plot_num);
$pre_graph_text =
'Attempt [_1], [_2] submissions, [_3] correct, [_4] incorrect';
$post_graph_text = '';
$no_data_text = 'No data exists for attempt [_1]';
- } elsif ($ENV{'form.AnalyzeOver'} eq 'time') {
+ } elsif ($env{'form.AnalyzeOver'} eq 'time') {
my $starttime = &Apache::lonhtmlcommon::get_date_from_form
('startdate_'.$plot_num);
my $endtime = &Apache::lonhtmlcommon::get_date_from_form
@@ -822,7 +889,9 @@ sub radio_response_analysis {
&get_time_from_row($response_data->[-1]),
$plot_num);
$pre_graph_text =
- 'Data from [_6] to [_7] [_2] submissions from [_5] students, [_3] correct, [_4] incorrect';
+ 'Data from [_6] to [_7]'
+ .' '
+ .'[_2] submissions from [_5] students, [_3] correct, [_4] incorrect';
$extra_data[0] = &Apache::lonlocal::locallocaltime($starttime);
$extra_data[1] = &Apache::lonlocal::locallocaltime($endtime);
#
@@ -862,8 +931,9 @@ sub radio_response_analysis {
# Concept Plot
my $concept_plot = '';
if (scalar(@$concepts) > 1) {
+ my $title = &mt('Correct Concepts');
$concept_plot = &RR_concept_plot($concepts,$foil_choice_data,
- 'Correct Concepts');
+ $title);
}
# % Choosing plot
my $choice_plot = &RR_create_percent_selected_plot
@@ -881,16 +951,14 @@ sub radio_response_analysis {
$choice_plot ne '' ||
$stacked_plot ne '') {
my $correct = $foil_choice_data->{'_correct'};
- if (! defined($correct) || $correct eq '') {
- $correct = 0;
- }
- my $incorrect =
+ $correct |= 0;
+ my $incorrect = $foil_choice_data->{'_count'}-$correct;
$analysis_html.= ''.
''.
&mt($pre_graph_text,
$plot_num,$foil_choice_data->{'_count'},
$correct,
- $foil_choice_data->{'_count'}-$correct,
+ $incorrect,
$foil_choice_data->{'_students'},
@extra_data).
' '.$/;
@@ -912,11 +980,13 @@ sub radio_response_analysis {
}
} elsif ($no_data_text ne '') {
$analysis_html.=''.
+ ''.
&mt($no_data_text,
$plot_num,$foil_choice_data->{'_count'},
$correct,
$foil_choice_data->{'_count'}-$correct,
- @extra_data);
+ @extra_data).
+ '
';
if (defined($post_graph_text)) {
$analysis_html.=' '.$post_graph_text;
}
@@ -935,7 +1005,7 @@ sub ensure_start_end_times {
(localtime($last - $sec_in_day*($plot_num-1)))[3..5];
$start = &Time::Local::timelocal(0,0,0,$sday,$smon,$syear);
$end = $start + $sec_in_day;
- if ($plot_num == $ENV{'form.NumPlots'}) {
+ if ($plot_num == $env{'form.NumPlots'}) {
$start = $first;
}
}
@@ -978,10 +1048,11 @@ sub RR_concept_plot {
for (my $i=0;$i<=$#correct;$i++) {
$correct[$i] = sprintf('%0f',$correct[$i]/$total*100);
}
- my $xlabel = 'concept';
+ my $xlabel = &mt('concept');
+ my $ylabel = &mt('Percent Choosing');
my $plot= &Apache::loncommon::DrawBarGraph($title,
$xlabel,
- 'Percent Choosing',
+ $ylabel,
100,
['#33ff00','#ff3300'],
undef,
@@ -1047,10 +1118,11 @@ sub RR_create_percent_selected_plot {
@labels = (1 .. scalar(@correct));
}
#
- my $xlabel = 'foil chosen';
+ my $xlabel = &mt('foil chosen');
+ my $ylabel = &mt('Percent Choosing');
my $plot= &Apache::loncommon::DrawBarGraph($title,
$xlabel,
- 'Percent Choosing',
+ $ylabel,
100,
['#33ff00','#ff3300'],
\@labels,
@@ -1111,8 +1183,10 @@ sub RR_create_stacked_selection_plot {
push(@empty_row,0);
}
#
+ my $xlabel = &mt('Correct Foil');
+ my $ylabel = &mt('foils chosen Incorrectly');
my $graph = &Apache::loncommon::DrawBarGraph
- ($title,'Correct Foil','foils chosen Incorrectly',
+ ($title,$xlabel,$ylabel,
100,$plotcolors,\@labels,\@empty_row,@dataset);
return ($graph,\%count_per_foil);
}
@@ -1170,35 +1244,36 @@ sub OptionResponseAnalysis {
my ($r,$problem,$problem_data,$Students) = @_;
my ($resource,$respid) = ($problem->{'resource'},
$problem->{'respid'});
- &Apache::lonnet::logthis('option response analysis on '.$resource->symb);
# Note: part data is not needed.
my $PerformanceData = &Apache::loncoursedata::get_response_data
- (\@Apache::lonstatistics::SelectedSections,
+ ([&Apache::lonstatistics::get_selected_sections()],
+ [&Apache::lonstatistics::get_selected_groups()],
$Apache::lonstatistics::enrollment_status,
$resource->symb,$respid);
if (! defined($PerformanceData) ||
ref($PerformanceData) ne 'ARRAY' ) {
- $r->print(''.
- &mt('There is no student data for this problem.').
- ' ');
+ $r->print(''
+ .&mt('There is no student data for this problem.')
+ .'
'
+ );
} else {
$r->rflush();
- if ($ENV{'form.AnalyzeOver'} eq 'tries') {
+ if ($env{'form.AnalyzeOver'} eq 'tries') {
my $analysis_html = &OR_tries_analysis($r,
$PerformanceData,
$problem_data);
$r->print($analysis_html);
$r->rflush();
- } elsif ($ENV{'form.AnalyzeOver'} eq 'time') {
+ } elsif ($env{'form.AnalyzeOver'} eq 'time') {
my $analysis_html = &OR_time_analysis($PerformanceData,
$problem_data);
$r->print($analysis_html);
$r->rflush();
} else {
- $r->print(''.
- &mt('The analysis you have selected is '.
- 'not supported at this time').
- ' ');
+ $r->print(''
+ );
}
}
}
@@ -1211,12 +1286,11 @@ sub OptionResponseAnalysis {
sub OR_tries_analysis {
my ($r,$PerformanceData,$ORdata) = @_;
my $mintries = 1;
- my $maxtries = $ENV{'form.NumPlots'};
+ my $maxtries = $env{'form.NumPlots'};
my ($table,$Foils,$Concepts) = &build_foil_index($ORdata);
if (! defined($Concepts)) {
$Concepts = [];
}
- &Apache::lonnet::logthis('got '.scalar(@$PerformanceData).' data points');
my %response_data = &OR_analyze_by_tries($r,$PerformanceData,
$mintries,$maxtries);
my $analysis = '';
@@ -1273,16 +1347,21 @@ sub OR_tries_analysis {
if (defined($Concepts)) { $num_concepts = scalar(@$Concepts); }
#
for (my $try=$mintries;$try<=$maxtries;$try++) {
- &Apache::lonnet::logthis('try = '.$try);
if (! defined($response_data{'_total'}->[$try]) ||
$response_data{'_total'}->[$try] == 0) {
if ($try > 1) {
- $analysis_html.= '
'.
- &mt('None of the selected students attempted the problem more than [_1] times.',$try-1).
- ' ';
+ $analysis_html.= '
'
+ .''
+ .&mt('None of the selected students attempted the problem more than [quant,_1,time].'
+ ,$try-1)
+ .'
'
+ .' ';
} else {
- $analysis_html.= '
'.
- &mt('None of the selected students have attempted the problem').' ';
+ $analysis_html.= '
'
+ .''
+ .&mt('None of the selected students have attempted the problem.')
+ .'
'
+ .' ';
}
last;
}
@@ -1303,22 +1382,24 @@ sub OR_tries_analysis {
}
}
#
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Correct Concepts',
+ 'xlabel' => 'Concept Number',
+ 'ylabel' => 'Percent Correct');
$concept_graph = &Apache::loncommon::DrawBarGraph
- ('Correct Concepts','Concept Number','Percent Correct',
+ ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},
100,$plotcolors,undef,\@concept_plot_data,{xskip=>1});
}
- &Apache::lonnet::logthis('got here a_0');
#
# Create Foil Plots
my $data_count = $response_data{'_total'}->[$try];
my $correct = $response_data{'_correct'}->[$try];
+ $correct |= 0;
my @Datasets;
foreach my $option ('_correct',@{$ORdata->{'_Options'}}) {
- &Apache::lonnet::logthis('checking option '.$option);
next if (! exists($foil_plot[$try]->{$option}));
push(@Datasets,$foil_plot[$try]->{$option});
}
- &Apache::lonnet::logthis('got here a');
#
# Put a blank in the data set between concepts
for (my $set =0;$set<=$#Datasets;$set++) {
@@ -1335,7 +1416,6 @@ sub OR_tries_analysis {
}
#
# Set up the labels needed for the bar graph
- &Apache::lonnet::logthis('got here b');
my @Labels;
my $idx = 1;
foreach my $concept (@{$Concepts}) {
@@ -1345,24 +1425,29 @@ sub OR_tries_analysis {
push(@Labels,'');
}
#
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Correct Statements',
+ 'xlabel' => 'Statement',
+ 'ylabel' => '% Answered Correct');
my $correct_graph = &Apache::loncommon::DrawBarGraph
- ('Correct Statements','Statement','% Answered Correct',
+ ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},
100,$plotcolors,\@Labels,$Datasets[0],{xskip=>1});
#
#
- &Apache::lonnet::logthis('got here c');
next if (! defined($Datasets[0]));
- &Apache::lonnet::logthis('got here d');
for (my $i=0; $i< scalar(@{$Datasets[0]});$i++) {
$Datasets[0]->[$i]=0;
}
my $count = $response_data{'_total'}->[$try] -
$response_data{'_correct'}->[$try];
+ %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Incorrect Statements',
+ 'xlabel' => 'Statement',
+ 'ylabel' => '% Chosen Incorrectly');
my $incorrect_graph = &Apache::loncommon::DrawBarGraph
- ('Incorrect Statements','Statement','% Chosen Incorrectly',
+ ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},
100,$plotcolors,\@Labels,@Datasets,{xskip=>1});
- &Apache::lonnet::logthis('incorrect graph = '.$incorrect_graph);
$analysis_html.=
'
'.
''.
@@ -1423,13 +1508,14 @@ sub OR_time_analysis {
if (defined($Concepts)) { $num_concepts = scalar(@$Concepts); }
#
if ($num_concepts < 2) {
- $table = ''.
- &mt('Not enough data for concept analysis. '.
- 'Performing Foil Analysis').
- ' '.$table;
+ $table = ''.
+ &mt('Not enough data for concept analysis.'.
+ ' Performing Foil Analysis instead.').
+ '
'.
+ $table;
}
#
- my $num_plots = $ENV{'form.NumPlots'};
+ my $num_plots = $env{'form.NumPlots'};
my $num_data = scalar(@$performance_data)-1;
#
my $current_index;
@@ -1480,9 +1566,10 @@ sub OR_time_analysis {
##
my ($processed_time_data,$correct,$data_count,$student_count) =
&OR_time_process_data($performance_data,$begin_index,$end_index);
+ $correct |= 0;
##
$table .= ''.
- &mt('[_1] submissions from [_2] students, [_3] correct, [_4] incorrect',
+ &mt('[quant,_1,submission,submissions,No submissions] from [quant,_2,student], [_3] correct, [_4] incorrect',
$data_count,$student_count,$correct,$data_count-$correct).
' '.$/;
my $concept_correct_plot = '';
@@ -1504,7 +1591,7 @@ sub OR_time_analysis {
$table .= ''.
&mt('Start time: [_1]',$startdateform).' '.
&mt('End time: [_1]',$enddateform).' '.$/;
- $table.= '  '.$/;
+ $table.= ' '.$/;
}
$table .= '
';
#
@@ -1515,7 +1602,11 @@ sub OR_Foil_Time_Analysis {
my ($processed_time_data,$correct,$data_count,$student_count,
$ORdata,$Foils,$Concepts) = @_;
if ($data_count <= 0) {
- return (''.&mt('There is no data to plot').' ','');
+ return (''
+ .&mt('There is no data to plot.')
+ .'
'
+ ,''
+ );
}
my $analysis_html;
my @plotdata;
@@ -1550,9 +1641,13 @@ sub OR_Foil_Time_Analysis {
}
#
# Create the plot
- my $correct_plot = &Apache::loncommon::DrawBarGraph('Correct Statements',
- 'Statement Number',
- 'Percent Correct',
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Correct Statements',
+ 'xlabel' => 'Statement Number',
+ 'ylabel' => 'Percent Correct');
+ my $correct_plot = &Apache::loncommon::DrawBarGraph($lt{'title'},
+ $lt{'xlabel'},
+ $lt{'ylabel'},
100,
$plotcolors,
undef,
@@ -1561,10 +1656,14 @@ sub OR_Foil_Time_Analysis {
for (my $j=0; $j< scalar(@{$plotdata[0]});$j++) {
$plotdata[0]->[$j]=0;
}
+ %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Incorrect Statements',
+ 'xlabel' => 'Statement Number',
+ 'ylabel' => 'Incorrect Option Choice');
my $incorrect_plot =
- &Apache::loncommon::DrawBarGraph('Incorrect Statements',
- 'Statement Number',
- 'Incorrect Option Choice',
+ &Apache::loncommon::DrawBarGraph($lt{'title'},
+ $lt{'xlabel'},
+ $lt{'ylabel'},
100,
$plotcolors,
undef,
@@ -1593,9 +1692,13 @@ sub OR_Concept_Time_Analysis {
}
#
# Create the plot
- return &Apache::loncommon::DrawBarGraph('Correct Concepts',
- 'Concept Number',
- 'Percent Correct',
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Correct Concepts',
+ 'xlabel' => 'Concept Number',
+ 'ylabel' => 'Percent Correct');
+ return &Apache::loncommon::DrawBarGraph($lt{'title'},
+ $lt{'xlabel'},
+ $lt{'ylabel'},
100,
$plotcolors,
undef,
@@ -1691,23 +1794,23 @@ sub build_foil_index {
}
#
# Build up the table of row labels.
- my $table = ''."\n";
+ my $table = &Apache::loncommon::start_data_table();
if (@Concepts > 1) {
- $table .= ''.
+ $table .= &Apache::loncommon::start_data_table_header_row().
''.&mt('Concept Number').' '.
''.&mt('Concept').' '.
''.&mt('Foil Number').' '.
''.&mt('Foil Name').' '.
''.&mt('Foil Text').' '.
''.&mt('Correct Value').' '.
- " \n";
+ &Apache::loncommon::end_data_table_header_row();
} else {
- $table .= ''.
+ $table .= &Apache::loncommon::start_data_table_header_row().
''.&mt('Foil Number').' '.
''.&mt('Foil Name').' '.
''.&mt('Foil Text').' '.
''.&mt('Correct Value').' '.
- " \n";
+ &Apache::loncommon::end_data_table_header_row();
}
my $conceptindex = 1;
my $foilindex = 1;
@@ -1715,39 +1818,39 @@ sub build_foil_index {
my @FoilsInConcept = @{$concept->{'foils'}};
my $firstfoil = shift(@FoilsInConcept);
if (@Concepts > 1) {
- $table .= ''.
+ $table .= &Apache::loncommon::start_data_table_row().
''.$conceptindex.' '.
''.&HTML::Entities::encode($concept->{'name'},'<>&"').' '.
''.$foilindex++.' '.
''.&HTML::Entities::encode($Foildata{$firstfoil}->{'name'},'<>&"').' '.
''.$Foildata{$firstfoil}->{'text'}.' '.
''.&HTML::Entities::encode($Foildata{$firstfoil}->{'value'},'<>&"').' '.
- " \n";
+ &Apache::loncommon::end_data_table_row();
} else {
- $table .= ''.
+ $table .= &Apache::loncommon::start_data_table_row().
''.$foilindex++.' '.
''.&HTML::Entities::encode($Foildata{$firstfoil}->{'name'},'<>&"').' '.
''.$Foildata{$firstfoil}->{'text'}.' '.
''.&HTML::Entities::encode($Foildata{$firstfoil}->{'value'},'<>&"').' '.
- " \n";
+ &Apache::loncommon::end_data_table_row();
}
foreach my $foilid (@FoilsInConcept) {
if (@Concepts > 1) {
- $table .= ''.
+ $table .= &Apache::loncommon::start_data_table_row().
' '.
' '.
''.$foilindex.' '.
''.&HTML::Entities::encode($Foildata{$foilid}->{'name'},'<>&"').' '.
''.$Foildata{$foilid}->{'text'}.' '.
''.&HTML::Entities::encode($Foildata{$foilid}->{'value'},'<>&"').' '.
- " \n";
+ &Apache::loncommon::end_data_table_row();
} else {
- $table .= ''.
+ $table .= &Apache::loncommon::start_data_table_row().
''.$foilindex.' '.
''.&HTML::Entities::encode($Foildata{$foilid}->{'name'},'<>&"').' '.
''.$Foildata{$foilid}->{'text'}.' '.
''.&HTML::Entities::encode($Foildata{$foilid}->{'value'},'<>&"').' '.
- " \n";
+ &Apache::loncommon::end_data_table_row();
}
} continue {
$foilindex++;
@@ -1755,7 +1858,7 @@ sub build_foil_index {
} continue {
$conceptindex++;
}
- $table .= "
\n";
+ $table .= &Apache::loncommon::end_data_table();
#
# Build option index with color stuff
return ($table,\@Foils,\@Concepts);
@@ -1811,87 +1914,93 @@ sub build_foil_key {
sub CreateInterface {
##
## Environment variable initialization
- if (! exists$ENV{'form.AnalyzeOver'}) {
- $ENV{'form.AnalyzeOver'} = 'tries';
+ if (! exists($env{'form.AnalyzeOver'})) {
+ $env{'form.AnalyzeOver'} = 'tries';
}
##
## Build the menu
my $Str = '';
- $Str .= &Apache::lonhtmlcommon::breadcrumbs
- (undef,'Detailed Problem Analysis');
- $Str .= ''."\n";
- $Str .= '';
- $Str .= ''.&mt('Sections').' ';
- $Str .= ''.&mt('Enrollment Status').' ';
- $Str .= ' ';
- $Str .= ' '."\n";
+ $Str .= '';
+ $Str .= &Apache::loncommon::start_data_table();
+ $Str .= &Apache::loncommon::start_data_table_header_row();
+ $Str .= '
'.&mt('Sections').' ';
+ $Str .= ''.&mt('Groups').' ';
+ $Str .= ''.&mt('Access Status').' ';
+ $Str .= ''.&mt('Options').' ';
+ $Str .= &Apache::loncommon::end_data_table_header_row();
##
##
- $Str .= ''."\n";
+ $Str .= &Apache::loncommon::start_data_table_row();
+ $Str .= ' '."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
$Str .= ' ';
#
+ $Str .= ''."\n";
+ $Str .= &Apache::lonstatistics::GroupSelect('Group','multiple',5);
+ $Str .= ' ';
+ #
$Str .= '';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
$Str .= ' ';
#
##
##
- $Str .= '';
+ $Str .= ' ';
##
my $showprob_checkbox =
- ' ';
- $Str.= ''.
- &mt('Show problem [_1]',$showprob_checkbox).
- ' ';
+ $Str.= ''.
+ $showprob_checkbox.' '.&mt('Show problem').
+ ' ';
##
- my $analyze_selector = '';
- $analyze_selector .= '';
+ $analyze_selector .= ' ';
- $analyze_selector .= ' ';
$analyze_selector .= ' ';
- $Str .= ''.
+ $Str .= ''.
&mt('Analyze Over [_1] [_2]',
$analyze_selector,
&Apache::loncommon::help_open_topic('Analysis_Analyze_Over')).
- ' '.$/;
+ ' '.$/;
##
my $numplots_selector = '';
- if (! exists($ENV{'form.NumPlots'})
- || $ENV{'form.NumPlots'} < 1
- || $ENV{'form.NumPlots'} > 20) {
- $ENV{'form.NumPlots'} = 5;
+ if (! exists($env{'form.NumPlots'})
+ || $env{'form.NumPlots'} < 1
+ || $env{'form.NumPlots'} > 20) {
+ $env{'form.NumPlots'} = 5;
}
foreach my $i (1,2,3,4,5,6,7,8,10,15,20) {
$numplots_selector .= '';
}
- $numplots_selector .= ' ';
- $Str .= ''.&mt('Number of Plots [_1]',$numplots_selector).
- ' ';
+ $numplots_selector .= '';
+ $Str .= ''.&mt('Number of Plots [_1]',$numplots_selector).
+ ' ';
##
- $Str .= ''.&mt('Status: [_1]',
- ' '
- ).
- ' ';
$Str .= ' ';
##
##
- $Str .= ' '."\n";
- $Str .= '
'."\n";
+ $Str .= &Apache::loncommon::end_data_table_row();
+ $Str .= &Apache::loncommon::end_data_table();
+ $Str .= ''
+ .&mt('Status: [_1]',
+ ' ')
+ .'
';
+ $Str .= '';
return $Str;
}
@@ -1923,7 +2032,7 @@ sub hashify_attempt {
my %attempt;
$attempt{'student'} = $row->[&Apache::loncoursedata::RD_sname()];
$attempt{'tries'} = $row->[&Apache::loncoursedata::RD_tries()];
- $attempt{'submission'} = &Apache::lonnet::unescape($row->[&Apache::loncoursedata::RD_submission()]);
+ $attempt{'submission'} = &unescape($row->[&Apache::loncoursedata::RD_submission()]);
$attempt{'award'} = $row->[&Apache::loncoursedata::RD_awarddetail()];
$attempt{'timestamp'} = $row->[&Apache::loncoursedata::RD_timestamp()];
return %attempt;
@@ -1947,12 +2056,12 @@ sub Process_OR_Row {
my @Foilsubs = split('&',$submission);
for (my $j=0;$j<=$#Foilgrades;$j++) {
my ($foilid,$correct) = split('=',$Foilgrades[$j]);
- $foilid = &Apache::lonnet::unescape($foilid);
+ $foilid = &unescape($foilid);
my (undef,$submission) = split('=',$Foilsubs[$j]);
if ($correct) {
$RowData{$foilid}->{'_correct'}++;
} else {
- $submission = &Apache::lonnet::unescape($submission);
+ $submission = &unescape($submission);
$RowData{$foilid}->{$submission}++;
}
$RowData{$foilid}->{'_total'}++;