--- loncom/interface/statistics/lonproblemstatistics.pm 2005/04/07 06:56:24 1.104 +++ loncom/interface/statistics/lonproblemstatistics.pm 2006/12/06 22:22:38 1.111 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonproblemstatistics.pm,v 1.104 2005/04/07 06:56:24 albertel Exp $ +# $Id: lonproblemstatistics.pm,v 1.111 2006/12/06 22:22:38 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,6 +60,8 @@ use Apache::lonlocal; use Spreadsheet::WriteExcel; use Apache::lonstathelpers(); use Time::HiRes; +use LONCAPA; + my @StatsArray; my %SeqStat; # keys are symbs, values are hash refs @@ -608,12 +610,13 @@ sub CreateInterface { &parse_field_selection(); # my $Str = ''; - $Str .= &Apache::lonhtmlcommon::breadcrumbs - (undef,'Overall Problem Statistics','Statistics_Overall_Key'); + $Str .= &Apache::lonhtmlcommon::breadcrumbs('Overall Problem Statistics', + 'Statistics_Overall_Key'); $Str .= ''."\n"; $Str .= ''; $Str .= ''; - $Str .= ''; + $Str .= ''; + $Str .= ''; $Str .= ''; $Str .= ''; $Str .= '
'.&mt('Sections').''.&mt('Enrollment Status').''.&mt('Groups').''.&mt('Access Status').''.&mt('Sequences and Folders').''.&mt('Statistics').''. @@ -623,6 +626,8 @@ sub CreateInterface { $Str .= '
'."\n"; $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); $Str .= ''; + $Str .= &Apache::lonstatistics::GroupSelect('Group','multiple',5); + $Str .= ''; $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); $Str .= ''; # @@ -661,6 +666,11 @@ Main interface to problem statistics. my $navmap; my @sequences; +sub clean_up { + undef($navmap); + undef(@sequences); +} + sub BuildProblemStatisticsPage { my ($r,$c)=@_; undef($navmap); @@ -669,6 +679,7 @@ sub BuildProblemStatisticsPage { my %Saveable_Parameters = ('Status' => 'scalar', 'statsoutputmode' => 'scalar', 'Section' => 'array', + 'Groups' => 'array', 'StudentData' => 'array', 'Maps' => 'array', 'fieldselections'=> 'array'); @@ -705,6 +716,7 @@ sub BuildProblemStatisticsPage { 'for the first analysis. Future analysis this session '. ' will not have this delay.'). '

'); + &clean_up(); return; } $r->rflush(); @@ -718,6 +730,7 @@ sub BuildProblemStatisticsPage { if (! ref($navmap)) { $r->print('

'.&mt('A course-wide error occured.').'

'. '

'.$navmap.'

'); + &clean_up(); return; } if (exists($env{'form.Excel'})) { @@ -765,6 +778,7 @@ sub BuildProblemStatisticsPage { &output_sequence_statistics($r); } } + &clean_up(); return; } @@ -1302,6 +1316,7 @@ sub Excel_output { &Apache::lonstatistics::section_and_enrollment_description('plaintext'), $format->{'h3'}); $cols_output += scalar(&Apache::lonstatistics::get_selected_sections()); + $cols_output += scalar(&Apache::lonstatistics::get_selected_groups()); # # Time restrictions my $time_string; @@ -1543,6 +1558,7 @@ sub get_statistics { # my $data = &Apache::loncoursedata::get_problem_statistics ([&Apache::lonstatistics::get_selected_sections()], + [&Apache::lonstatistics::get_selected_groups()], $Apache::lonstatistics::enrollment_status, $symb,$part,$courseid,$starttime,$endtime); $data->{'symb'} = $symb; @@ -1551,7 +1567,7 @@ sub get_statistics { $data->{'container'} = $sequence->compTitle; $data->{'title'} = $resource->compTitle; $data->{'title.link'} = $resource->src.'?symb='. - &Apache::lonnet::escape($resource->symb); + &escape($resource->symb); # if ($SelectedFields{'deg_of_disc'}) { $data->{'deg_of_disc'} = @@ -1569,7 +1585,7 @@ sub get_statistics { $data->{'urlres'}=$urlres; my %storestats = &LONCAPA::lonmetadata::dynamic_metadata_storage($data); - my ($dom,$user) = $urlres=~/^(\w+)\/(\w+)/; + my ($dom,$user) = ($urlres=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)}); &Apache::lonnet::put('nohist_resevaldata',\%storestats,$dom,$user); } # @@ -1621,8 +1637,9 @@ sub compute_discrimination_factor { &Apache::loncoursedata::rank_students_by_scores_on_resources (\@Resources, [&Apache::lonstatistics::get_selected_sections()], + [&Apache::lonstatistics::get_selected_groups()], $Apache::lonstatistics::enrollment_status,undef, - $starttime,$endtime); + $starttime,$endtime, $symb); # # compute their percent scores on the problems in the sequence, my $number_to_grab = int(scalar(@{$ranking})/4); @@ -1632,7 +1649,7 @@ sub compute_discrimination_factor { my @TopSet = map { $_->[&Apache::loncoursedata::RNK_student()]; - } @{$ranking}[($num_students-$number_to_grab)..($num_students-1)]; + } @{$ranking}[-$number_to_grab..0]; if (! @BottomSet || (@BottomSet == 1 && $BottomSet[0] eq '') || ! @TopSet || (@TopSet == 1 && $TopSet[0] eq '')) { return 'nan'; @@ -1686,6 +1703,7 @@ sub compute_sequence_statistics { my ($smin,$smax,$sMean,$sSTD,$scount,$sMAX) = &Apache::loncoursedata::score_stats ([&Apache::lonstatistics::get_selected_sections()], + [&Apache::lonstatistics::get_selected_groups()], $Apache::lonstatistics::enrollment_status, \@Resources,$starttime,$endtime,undef); $SeqStat{$symb}->{'title'} = $seq->compTitle; @@ -1701,6 +1719,7 @@ sub compute_sequence_statistics { my ($cmin,$cmax,$cMean,$cSTD,$ccount)= &Apache::loncoursedata::count_stats ([&Apache::lonstatistics::get_selected_sections()], + [&Apache::lonstatistics::get_selected_groups()], $Apache::lonstatistics::enrollment_status, \@Resources,$starttime,$endtime,undef); my $K = $part_count;