--- loncom/interface/statistics/lonproblemstatistics.pm 2003/04/01 17:00:24 1.49 +++ loncom/interface/statistics/lonproblemstatistics.pm 2003/08/29 21:11:25 1.57 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonproblemstatistics.pm,v 1.49 2003/04/01 17:00:24 matthew Exp $ +# $Id: lonproblemstatistics.pm,v 1.57 2003/08/29 21:11:25 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -62,7 +62,7 @@ my @Fields = ( align => 'right', color => '#FFFFE6' }, { name => 'container', - title => 'Container', + title => 'Sequence or Folder', align => 'left', color => '#FFFFE6', sortable => 'yes' }, @@ -75,7 +75,8 @@ my @Fields = ( { name => 'part', title => 'Part', align => 'left', - color => '#FFFFE6' }, + color => '#FFFFE6', + }, { name => 'num_students', title => '#Stdnts', align => 'right', @@ -131,7 +132,8 @@ my @Fields = ( format => '%5.2f', sortable => 'yes', graphable => 'yes', - long_title => 'Degree of Difficulty' }, + long_title => 'Degree of Difficulty'. + '[ 1 - ((#YES+#yes) / Tries) ]'}, { name => 'num_solved', title => '#YES', align => 'right', @@ -155,7 +157,7 @@ my @Fields = ( format => '%4.1f', sortable => 'yes', graphable => 'yes', - long_title => 'Percent Wrong' }, + long_title => 'Percent of students whose final answer is wrong' }, ); ############################################### @@ -172,57 +174,6 @@ select sections, maps, and output. ############################################### ############################################### -sub CreateInterface { - my $Str = ''; - $Str .= ''."\n"; - $Str .= ''; - $Str .= ''; - $Str .= ''; - $Str .= ''; - $Str .= ''."\n"; - # - $Str .= ''."\n"; - $Str .= '
SectionsSequences and FoldersOutput
'."\n"; - $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); - $Str .= ''; - # - my $only_seq_with_assessments = sub { - my $s=shift; - if ($s->{'num_assess'} < 1) { - return 0; - } else { - return 1; - } - }; - $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5, - $only_seq_with_assessments); - $Str .= ''."\n"; - $Str .= &CreateAndParseOutputSelector(); - $Str .= '
'."\n"; - return $Str; -} - -####################################################### -####################################################### - -=pod - -=item &CreateAndParseOutputSelector() - -Construct a selection list of options for output and parse output selections. -The current output selected is indicated by the values of the two package -variables $output_mode and $show. @OutputOptions holds the descriptions of -the output options and the values for $output_mode and $show. - -Based on code from lonstudentassessment.pm. - -=cut - -####################################################### -####################################################### -my $output_mode; -my $show; - my @OutputOptions = ( { name => 'problem statistics grouped by sequence', @@ -246,92 +197,46 @@ my @OutputOptions = }, ); -sub OutputDescriptions { - my $Str = ''; - $Str .= "

Output Modes

\n"; - $Str .= "
\n"; - foreach my $outputmode (@OutputOptions) { - $Str .="
".$outputmode->{'name'}."
\n"; - $Str .="
".$outputmode->{'description'}."
\n"; - } - $Str .= "
\n"; - return $Str; -} - -sub CreateAndParseOutputSelector { +sub CreateInterface { my $Str = ''; - my $elementname = 'statsoutputmode'; - # - # Format for output options is 'mode, restrictions'; - my $selected = 'HTML problem statistics grouped'; - if (exists($ENV{'form.'.$elementname})) { - if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) { - $selected = $ENV{'form.'.$elementname}->[0]; - } else { - $selected = $ENV{'form.'.$elementname}; - } - } + $Str .= ''."\n"; + $Str .= ''; + $Str .= ''; + $Str .= ''; + $Str .= ''; + $Str .= ''; + $Str .= ''."\n"; # - # Set package variables describing output mode - $output_mode = 'html'; - $show = 'all'; - foreach my $option (@OutputOptions) { - next if ($option->{'value'} ne $selected); - $output_mode = $option->{'mode'}; - $show = $option->{'show'}; - } + $Str .= ''."\n"; + $Str .= '
SectionsEnrollment StatusSequences and FoldersOutput
'."\n"; + $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); + $Str .= ''; + $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); + $Str .= ''; # - # Build the form element - $Str = qq/"; - return $Str; -} - -############################################### -############################################### - -=pod - -=item &Gather_Student_Data() - -Ensures all student data is up to date. - -=cut - -############################################### -############################################### -sub Gather_Student_Data { - my ($r) = @_; - my $c = $r->connection(); - # - my @Sequences = &Apache::lonstatistics::Sequences_with_Assess(); - # - my @Students = @Apache::lonstatistics::Students; - # - # Open the progress window - my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin - ($r,'Statistics Compilation Status', - 'Statistics Compilation Progress', scalar(@Students)); - # - while (my $student = shift @Students) { - return if ($c->aborted()); - my ($status,undef) = &Apache::loncoursedata::ensure_current_data - ($student->{'username'},$student->{'domain'}, - $ENV{'request.course.id'}); - &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, - 'last student'); - } - &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); - $r->rflush(); + }; + $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5, + $only_seq_with_assessments); + $Str .= ''."\n"; + my ($html,$outputmode,$show) = + &Apache::lonstatistics::CreateAndParseOutputSelector( + 'statsoutputmode', + 'HTML problem statistics grouped', + @OutputOptions); + $Str .= $html; + $Str .= '
'."\n"; + $Str .= ''; + $Str .= ' 'x5; + $Str .= ''; + $Str .= ' 'x5; + return ($Str,$outputmode,$show); } ############################################### @@ -350,27 +255,17 @@ Main interface to problem statistics. sub BuildProblemStatisticsPage { my ($r,$c)=@_; # - $output_mode = 'html'; - $show = 'grouped'; - # - $r->print(&CreateInterface()); + my ($interface,$output_mode,$show) = &CreateInterface(); + $r->print($interface); $r->print(''); $r->print(''); $r->print(''); if (! exists($ENV{'form.statsfirstcall'})) { - $r->print(< - -Please make your selections in the boxes above and hit -the button marked "Update Display". - -

-ENDMSG return; } # - &Gather_Student_Data($r); + &Apache::lonstatistics::Gather_Student_Data($r); # # if ($output_mode eq 'html') { @@ -646,7 +541,19 @@ sub output_excel { $rows_output++; $cols_output=0; # - # Add the headers + # Long Headersheaders + foreach my $field (@Fields) { + next if ($field->{'name'} eq 'problem_num'); + if (exists($field->{'long_title'})) { + $excel_sheet->write($rows_output,$cols_output++, + $field->{'long_title'}); + } else { + $excel_sheet->write($rows_output,$cols_output++,''); + } + } + $rows_output++; + $cols_output=0; + # Brief headers foreach my $field (@Fields) { next if ($field->{'name'} eq 'problem_num'); $excel_sheet->write($rows_output,$cols_output++,$field->{'title'}); @@ -711,8 +618,7 @@ sub statistics_html_table_data { } $row .= '>'; if (exists($field->{'special'}) && $field->{'special'} eq 'link') { - $row .= ''; + $row .= ''; } if (exists($field->{'format'})) { $row .= sprintf($field->{'format'},$data->{$field->{'name'}}); @@ -783,7 +689,6 @@ sub plot_statistics { } } return if (! defined($sortfield) || $sortfield eq ''); - &Apache::lonnet::logthis('data field = '.$datafield); # my $Max = 0; my $problem_num = 0; @@ -887,7 +792,8 @@ sub get_statistics { $data->{'problem_num'} = $problem_num; $data->{'container'} = $sequence->{'title'}; $data->{'title'} = $resource->{'title'}; - $data->{'title.link'} = $resource->{'src'}; + $data->{'title.link'} = $resource->{'src'}.'?symb='. + &Apache::lonnet::escape($resource->{'symb'}); # return $data; }