--- loncom/interface/statistics/lonproblemanalysis.pm 2005/04/07 06:56:24 1.120 +++ loncom/interface/statistics/lonproblemanalysis.pm 2006/05/30 12:46:49 1.126 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonproblemanalysis.pm,v 1.120 2005/04/07 06:56:24 albertel Exp $ +# $Id: lonproblemanalysis.pm,v 1.126 2006/05/30 12:46:49 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,6 +38,9 @@ use Apache::lonstudentsubmissions(); use HTML::Entities(); use Time::Local(); use capa; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + my $plotcolors = ['#33ff00', '#0033cc', '#990000', '#aaaa66', '#663399', '#ff9933', @@ -97,8 +100,11 @@ sub BuildProblemAnalysisPage { $r->print($html.(' 'x5)); } # - $r->print(&Apache::lonstathelpers::submission_report_form - ('problem_analysis')); + + # This is commented out pending actual implementation of + # CSV and Excel output. + #$r->print(&Apache::lonstathelpers::submission_report_form + # ('problem_analysis')); # $r->print('
'); $r->rflush(); @@ -159,11 +165,14 @@ sub BuildProblemAnalysisPage { } $r->print('
'); } else { - $r->print(''); + my $submit_button = ''; + $r->print($submit_button); $r->print(' 'x5); $r->print('

'.&mt('Please select a problem to analyze').'

'); - $r->print(&Apache::lonstathelpers::problem_selector($problem_types)); + $r->print(&Apache::lonstathelpers::problem_selector($problem_types, + $submit_button)); } } @@ -338,7 +347,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; } @@ -393,7 +404,8 @@ 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 (!$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; @@ -785,7 +797,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)) { @@ -1814,8 +1826,7 @@ sub CreateInterface { ## ## Build the menu my $Str = ''; - $Str .= &Apache::lonhtmlcommon::breadcrumbs - (undef,'Detailed Problem Analysis'); + $Str .= &Apache::lonhtmlcommon::breadcrumbs('Detailed Problem Analysis'); $Str .= ''."\n"; $Str .= ''; $Str .= ''; @@ -1920,7 +1931,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; @@ -1944,12 +1955,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'}++;
'.&mt('Sections').'