--- loncom/interface/statistics/lonproblemstatistics.pm 2004/03/29 15:58:33 1.74 +++ loncom/interface/statistics/lonproblemstatistics.pm 2004/04/01 20:02:56 1.79 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonproblemstatistics.pm,v 1.74 2004/03/29 15:58:33 matthew Exp $ +# $Id: lonproblemstatistics.pm,v 1.79 2004/04/01 20:02:56 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,6 +61,7 @@ use Apache::lonstathelpers(); use Time::HiRes; my @StatsArray; +my %SeqStat; # keys are symbs, values are hash refs ## ## Localization notes: @@ -69,27 +70,63 @@ my @StatsArray; ## header for plots created with Graph.pm, both of which more than likely do ## not support localization. ## +# +# +## +## Description of Field attributes +## +## Attribute Required Value Meaning or Use +## +## name yes any scalar Used to uniquely identify field +## title yes any scalar This is what the user sees to identify +## the field. Passed through &mt(). +## long_title yes any scalar Used as graph heading and in excel +## output. NOT translated +## align no (left|right|center) HTML cell contents alignment +## color yes html color HTML cell background color +## used to visually group statistics +## special no (link) Indicates a link, target is name.link +## Currently set in &get_statistics() +## graphable no (yes|no) Can a bar graph of the field be +## produced? +## sortable no (yes|no) Should a sort link be put in the +## column header? +## selectable yes (yes|no) Can the column be removed from the +## statistics display? +## selected yes (yes|no) Is the column selected by default? +## my @Fields = ( { name => 'problem_num', title => 'P#', align => 'right', - color => '#FFFFE6' }, + color => '#FFFFE6', + selectable => 'no', + selected => 'yes', + }, { name => 'container', title => 'Sequence or Folder', align => 'left', color => '#FFFFE6', - sortable => 'yes' }, + sortable => 'yes', + selectable => 'no', + selected => 'yes', + }, { name => 'title', title => 'Title', align => 'left', color => '#FFFFE6', special => 'link', - sortable => 'yes', }, + sortable => 'yes', + selectable => 'no', + selected => 'yes', + }, { name => 'part', title => 'Part', align => 'left', color => '#FFFFE6', - }, + selectable => 'no', + selected => 'yes', + }, { name => 'num_students', title => '#Stdnts', align => 'right', @@ -97,7 +134,10 @@ my @Fields = ( format => '%d', sortable => 'yes', graphable => 'yes', - long_title => 'Number of Students Attempting Problem' }, + long_title => 'Number of Students Attempting Problem', + selectable => 'yes', + selected => 'yes', + }, { name => 'tries', title => 'Tries', align => 'right', @@ -105,7 +145,10 @@ my @Fields = ( format => '%d', sortable => 'yes', graphable => 'yes', - long_title => 'Total Number of Tries' }, + long_title => 'Total Number of Tries', + selectable => 'yes', + selected => 'yes', + }, { name => 'max_tries', title => 'Max Tries', align => 'right', @@ -113,7 +156,10 @@ my @Fields = ( format => '%d', sortable => 'yes', graphable => 'yes', - long_title => 'Maximum Number of Tries' }, + long_title => 'Maximum Number of Tries', + selectable => 'yes', + selected => 'yes', + }, { name => 'min_tries', title => 'Min Tries', align => 'right', @@ -121,7 +167,10 @@ my @Fields = ( format => '%d', sortable => 'yes', graphable => 'yes', - long_title => 'Minumum Number of Tries' }, + long_title => 'Minumum Number of Tries', + selectable => 'yes', + selected => 'yes', + }, { name => 'mean_tries', title => 'Mean Tries', align => 'right', @@ -129,7 +178,10 @@ my @Fields = ( format => '%5.2f', sortable => 'yes', graphable => 'yes', - long_title => 'Average Number of Tries' }, + long_title => 'Average Number of Tries', + selectable => 'yes', + selected => 'yes', + }, { name => 'std_tries', title => 'S.D. tries', align => 'right', @@ -137,7 +189,10 @@ my @Fields = ( format => '%5.2f', sortable => 'yes', graphable => 'yes', - long_title => 'Standard Deviation of Number of Tries' }, + long_title => 'Standard Deviation of Number of Tries', + selectable => 'yes', + selected => 'yes', + }, { name => 'skew_tries', title => 'Skew Tries', align => 'right', @@ -145,7 +200,10 @@ my @Fields = ( format => '%5.2f', sortable => 'yes', graphable => 'yes', - long_title => 'Skew of Number of Tries' }, + long_title => 'Skew of Number of Tries', + selectable => 'yes', + selected => 'no', + }, { name => 'num_solved', title => '#YES', align => 'right', @@ -153,7 +211,10 @@ my @Fields = ( format => '%4.1f',# format => '%d', sortable => 'yes', graphable => 'yes', - long_title => 'Number of Students able to Solve' }, + long_title => 'Number of Students able to Solve', + selectable => 'yes', + selected => 'yes', + }, { name => 'num_override', title => '#yes', align => 'right', @@ -161,7 +222,10 @@ my @Fields = ( format => '%4.1f',# format => '%d', sortable => 'yes', graphable => 'yes', - long_title => 'Number of Students given Override' }, + long_title => 'Number of Students given Override', + selectable => 'yes', + selected => 'yes', + }, { name => 'num_wrong', title => '#Wrng', align => 'right', @@ -169,7 +233,10 @@ my @Fields = ( format => '%4.1f', sortable => 'yes', graphable => 'yes', - long_title => 'Percent of students whose final answer is wrong' }, + long_title => 'Percent of students whose final answer is wrong', + selectable => 'yes', + selected => 'yes', + }, { name => 'deg_of_diff', title => 'DoDiff', align => 'right', @@ -178,7 +245,10 @@ my @Fields = ( sortable => 'yes', graphable => 'yes', long_title => 'Degree of Difficulty'. - '[ 1 - ((#YES+#yes) / Tries) ]'}, + '[ 1 - ((#YES+#yes) / Tries) ]', + selectable => 'yes', + selected => 'yes', + }, { name => 'deg_of_disc', title => 'DoDisc', align => 'right', @@ -186,9 +256,205 @@ my @Fields = ( format => '%4.2f', sortable => 'yes', graphable => 'yes', - long_title => 'Degree of Discrimination' }, + long_title => 'Degree of Discrimination', + selectable => 'yes', + selected => 'no', + }, +); + +my @SeqFields = ( + { name => 'title', + title => 'Sequence', + align => 'left', + color => '#FFFFE6', + special => 'no', + sortable => 'no', + selectable => 'yes', + selected => 'no', + }, + { name => 'items', + title => '#Items', + align => 'right', + color => '#FFFFE6', + format => '%4d', + sortable => 'no', + graphable => 'no', + long_title => 'Number of Items in Sequence', + selectable => 'yes', + selected => 'no', + }, + { name => 'scoremean', + title => 'Score Mean', + align => 'right', + color => '#FFFFE6', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Mean Sequence Score', + selectable => 'yes', + selected => 'no', + }, + { name => 'scorestd', + title => 'Score STD', + align => 'right', + color => '#FFFFE6', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Standard Deviation of Sequence Scores', + selectable => 'yes', + selected => 'no', + }, + { name => 'scoremax', + title => 'Score Max', + align => 'right', + color => '#FFFFE6', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Maximum Sequence Score', + selectable => 'yes', + selected => 'no', + }, + { name => 'scoremin', + title => 'Score Min', + align => 'right', + color => '#FFFFE6', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Minumum Sequence Score', + selectable => 'yes', + selected => 'no', + }, + { name => 'scorecount', + title => 'Score N', + align => 'right', + color => '#FFFFE6', + format => '%4d', + sortable => 'no', + graphable => 'no', + long_title => 'Number of Students in score computations', + selectable => 'yes', + selected => 'no', + }, + { name => 'countmean', + title => 'Count Mean', + align => 'right', + color => '#FFFFFF', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Mean Sequence Score', + selectable => 'yes', + selected => 'no', + }, + { name => 'countstd', + title => 'Count STD', + align => 'right', + color => '#FFFFFF', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Standard Deviation of Sequence Scores', + selectable => 'yes', + selected => 'no', + }, + { name => 'countmax', + title => 'Count Max', + align => 'right', + color => '#FFFFFF', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Maximum Number of Correct Problems', + selectable => 'yes', + selected => 'no', + }, + { name => 'countmin', + title => 'Count Min', + align => 'right', + color => '#FFFFFF', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'Minumum Number of Correct Problems', + selectable => 'yes', + selected => 'no', + }, + { name => 'count', + title => 'Count N', + align => 'right', + color => '#FFFFFF', + format => '%4d', + sortable => 'no', + graphable => 'no', + long_title => 'Number of Students in score computations', + selectable => 'yes', + selected => 'no', + }, + { name => 'KR-21', + title => 'KR-21', + align => 'right', + color => '#FFAAAA', + format => '%4.2f', + sortable => 'no', + graphable => 'no', + long_title => 'KR-21 reliability statistic', + selectable => 'yes', + selected => 'no', + }, ); +my %SelectedFields; + +sub parse_field_selection { + # + # Pull out the defaults + if (! defined($ENV{'form.fieldselections'})) { + $ENV{'form.fieldselections'} = []; + foreach my $field (@Fields) { + next if ($field->{'selectable'} ne 'yes'); + if ($field->{'selected'} eq 'yes') { + push(@{$ENV{'form.fieldselections'}},$field->{'name'}); + } + } + } + # + # This should not happen, but in case it does... + if (ref($ENV{'form.fieldselections'}) ne 'ARRAY') { + $ENV{'form.fieldselections'} = [$ENV{'form.fieldselections'}]; + } + # + # Set the field data and the selected fields (for easier checking) + undef(%SelectedFields); + foreach my $field (@Fields) { + next if ($field->{'selectable'} ne 'yes'); + $field->{'selected'} = 'no'; + foreach my $selection (@{$ENV{'form.fieldselections'}}) { + if ($selection eq $field->{'name'} || $selection eq 'all') { + $field->{'selected'} = 'yes'; + $SelectedFields{$field->{'name'}}++; + } + } + } + return; +} + +sub field_selection_input { + my $Str = '\n"; +} + ############################################### ############################################### @@ -204,6 +470,7 @@ select sections, maps, and output. ############################################### ############################################### sub CreateInterface { + &parse_field_selection(); my $Str = ''; $Str .= &Apache::lonhtmlcommon::breadcrumbs (undef,'Overall Problem Statistics','Statistics_Overall_Key'); @@ -212,6 +479,7 @@ sub CreateInterface { $Str .= '