--- loncom/interface/statistics/lonproblemanalysis.pm	2011/12/21 21:25:51	1.141
+++ loncom/interface/statistics/lonproblemanalysis.pm	2020/11/12 00:15:27	1.142.2.5
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonproblemanalysis.pm,v 1.141 2011/12/21 21:25:51 www Exp $
+# $Id: lonproblemanalysis.pm,v 1.142.2.5 2020/11/12 00:15:27 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -31,7 +31,6 @@ use Apache::lonnet;
 use Apache::loncommon();
 use Apache::lonhtmlcommon();
 use Apache::loncoursedata();
-use Apache::lonquickgrades();
 use Apache::lonstatistics;
 use Apache::lonlocal;
 use Apache::lonstathelpers();
@@ -75,7 +74,6 @@ sub BuildProblemAnalysisPage {
     &Apache::lonstatistics::PrepareClasslist();
     #
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Detailed Problem Analysis'));
-    &Apache::lonquickgrades::startGradeScreen($r,'statistics');
 
     $r->print(&CreateInterface());
     #
@@ -92,7 +90,7 @@ sub BuildProblemAnalysisPage {
         &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
     $r->rflush();
     #
-    my $problem_types = '(option|radiobutton|numerical)';
+    my $problem_types = &analyzable_types();
     if (exists($env{'form.problemchoice'}) && 
         ! exists($env{'form.SelectAnother'})) {
         foreach my $button (@SubmitButtons) {
@@ -118,21 +116,9 @@ sub BuildProblemAnalysisPage {
         $r->rflush();
         #
         # Determine which problem we are to analyze
-        my $current_problem = &Apache::lonstathelpers::get_target_from_id
-            ($env{'form.problemchoice'});
-        #
-        my ($navmap,$prev,$curr,$next) = 
-            &Apache::lonstathelpers::get_prev_curr_next($current_problem,
-                                                        $problem_types,
-                                                        'response',
-                                                        );
-        if (exists($env{'form.PrevProblemAnalysis'}) && defined($prev)) {
-            $current_problem = $prev;
-        } elsif (exists($env{'form.NextProblemAnalysis'}) && defined($next)) {
-            $current_problem = $next;
-        } else {
-            $current_problem = $curr;
-        }
+        my ($navmap,$current_problem) = &get_current_problem(); # need to retrieve $navmap
+                                                                # to support $resource->* calls
+                                                                # for src and compTitle (below)
         #
         # Store the current problem choice and send it out in the form
         $env{'form.problemchoice'} = 
@@ -146,7 +132,7 @@ sub BuildProblemAnalysisPage {
             my $resource = $current_problem->{'resource'};
             $r->print('<h1>'.$resource->compTitle.'</h1>');
             $r->print('<h3>'.$resource->src.'</h3>');
-            $r->print('<h4>'.&Apache::lonstatistics::section_and_enrollment_description().'</h4>');
+            $r->print('<p>'.&Apache::lonstatistics::section_and_enrollment_description().'</p>');
             if ($env{'form.show_prob'} eq 'true') {
                 $r->print('<hr />'
                          .&Apache::lonstathelpers::render_resource($resource)
@@ -193,6 +179,28 @@ sub BuildProblemAnalysisPage {
     }
 }
 
+sub analyzable_types {
+    return '(option|radiobutton|numerical)';
+}
+
+sub get_current_problem {
+    my ($problem_types) = @_;
+    my $current_problem = &Apache::lonstathelpers::get_target_from_id
+        ($env{'form.problemchoice'});
+    my ($navmap,$prev,$curr,$next) =
+        &Apache::lonstathelpers::get_prev_curr_next($current_problem,
+                                                    $problem_types,
+                                                    'response');
+    if (exists($env{'form.PrevProblemAnalysis'}) && ($prev ne '')) {
+        $current_problem = $prev;
+    } elsif (exists($env{'form.NextProblemAnalysis'}) && ($next ne '')) {
+        $current_problem = $next;
+    } else {
+        $current_problem = $curr;
+    }
+    return ($navmap,$current_problem);
+}
+
 #########################################################
 #########################################################
 ##
@@ -400,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});
     #
@@ -473,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});
     #
@@ -858,8 +872,8 @@ sub radio_response_analysis {
             $no_data_text,@extra_data);
         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 = '';
@@ -917,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
@@ -1033,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,
@@ -1102,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,
@@ -1166,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);
 }
@@ -1251,7 +1270,7 @@ sub OptionResponseAnalysis {
             $r->print($analysis_html);
             $r->rflush();
         } else {
-            $r->print('div class="LC_warning"'
+            $r->print('<div class="LC_warning"'
                      .&mt('The analysis you have selected is not supported at this time.')
                      .'</div>'
             );
@@ -1363,8 +1382,12 @@ 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});
         }
         #
@@ -1402,8 +1425,12 @@ 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});
         
         #
@@ -1414,8 +1441,12 @@ sub OR_tries_analysis {
         }
         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});
         $analysis_html.= 
             '<tr><td colspan="4" align="center">'.
@@ -1477,10 +1508,11 @@ sub OR_time_analysis {
     if (defined($Concepts)) { $num_concepts = scalar(@$Concepts); }
     #
     if ($num_concepts < 2) {
-        $table = '<h3>'.
-            &mt('Not enough data for concept analysis.  '.
-                'Performing Foil Analysis').
-                '</h3>'.$table;
+        $table = '<p class="LC_info">'.
+                 &mt('Not enough data for concept analysis.'.
+                     ' Performing Foil Analysis instead.').
+                 '</p>'.
+                 $table;
     }
     #
     my $num_plots = $env{'form.NumPlots'};
@@ -1537,7 +1569,7 @@ sub OR_time_analysis {
         $correct |= 0;
         ##
         $table .= '<tr><td colspan="4" align="center"><font size="+1">'.
-            &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).
                 '</font></td></tr>'.$/;
         my $concept_correct_plot = '';
@@ -1609,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,
@@ -1620,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,
@@ -1652,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,
@@ -1913,16 +1957,16 @@ sub CreateInterface {
         $showprob_checkbox.' '.&mt('Show problem').
         '</label></span><br />';
     ##
-    my $analyze_selector = '<select name="AnalyzeOver" >';
-    $analyze_selector .= '<option value="tries" ';
+    my $analyze_selector = '<select name="AnalyzeOver">';
+    $analyze_selector .= '<option value="tries"';
     if (! exists($env{'form.AnalyzeOver'}) || 
         $env{'form.AnalyzeOver'} eq 'tries'){
         # Default to tries
-        $analyze_selector .= ' selected="selected" ';
+        $analyze_selector .= ' selected="selected"';
     }
     $analyze_selector .= '>'.&mt('Tries').'</option>';
-    $analyze_selector .= '<option value="time" ';
-    $analyze_selector .= ' selected ' if ($env{'form.AnalyzeOver'} eq 'time');
+    $analyze_selector .= '<option value="time"';
+    $analyze_selector .= ' selected="selected"' if ($env{'form.AnalyzeOver'} eq 'time');
     $analyze_selector .= '>'.&mt('Time').'</option>';
     $analyze_selector .= '</select>';
     $Str .= '<span class="LC_nobreak"><label>'.