--- loncom/interface/statistics/lonstudentassessment.pm 2005/01/14 21:15:09 1.109 +++ loncom/interface/statistics/lonstudentassessment.pm 2006/05/30 12:46:50 1.140 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonstudentassessment.pm,v 1.109 2005/01/14 21:15:09 matthew Exp $ +# $Id: lonstudentassessment.pm,v 1.140 2006/05/30 12:46:50 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,14 +50,20 @@ Presents assessment data about a student package Apache::lonstudentassessment; use strict; -use Apache::lonstatistics; -use Apache::lonhtmlcommon; +use Apache::lonstatistics(); +use Apache::lonhtmlcommon(); use Apache::loncommon(); use Apache::loncoursedata; use Apache::lonnet; # for logging porpoises use Apache::lonlocal; +use Apache::grades(); +use Apache::lonmsgdisplay(); +use Time::HiRes; use Spreadsheet::WriteExcel; use Spreadsheet::WriteExcel::Utility(); +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + ####################################################### ####################################################### @@ -144,6 +150,7 @@ sub BuildStudentAssessmentPage { 'chartoutputmode' => 'scalar', 'chartoutputdata' => 'scalar', 'Section' => 'array', + 'Groups' => 'array', 'StudentData' => 'array', 'Maps' => 'array'); &Apache::loncommon::store_course_settings('chart',\%Saveable_Parameters); @@ -152,10 +159,10 @@ sub BuildStudentAssessmentPage { &Apache::lonstatistics::PrepareClasslist(); # $single_student_mode = 0; - $single_student_mode = 1 if ($ENV{'form.SelectedStudent'}); + $single_student_mode = 1 if ($env{'form.SelectedStudent'}); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['selectstudent']); - if ($ENV{'form.selectstudent'}) { + if ($env{'form.selectstudent'}) { &Apache::lonstatistics::DisplayClasslist($r); return; } @@ -166,12 +173,15 @@ sub BuildStudentAssessmentPage { $r->print(&CreateInterface()); $r->print(''); $r->print(''); + $env{'form.sort'}.'" />'); $r->rflush(); # - if (! exists($ENV{'form.notfirstrun'}) && ! $single_student_mode) { + if (! exists($env{'form.notfirstrun'}) && ! $single_student_mode) { return; } + $r->print('
'.&mt('Sections').' | '; + $Str .= ''.&mt('Groups').' | '; $Str .= ''.&mt('Student Data').' | '; $Str .= ''.&mt('Enrollment Status').' | '; $Str .= ''.&mt('Sequences and Folders').' | '; @@ -327,21 +338,14 @@ sub CreateInterface { $Str .= '||||
'."\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::GroupSelect('Group','multiple',5); + $Str .= ' | '; $Str .= &Apache::lonstatistics::StudentDataSelect('StudentData','multiple', 5,undef); $Str .= ' | '."\n"; $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); $Str .= ' | '."\n"; - $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5, - $only_seq_with_assessments); + $Str .= &Apache::lonstatistics::map_select('Maps','multiple,all',5); $Str .= ' | '."\n"; $Str .= &CreateAndParseOutputSelector(); $Str .= ' | '."\n";
@@ -435,14 +439,9 @@ sub CreateAndParseOutputSelector {
[$elementname]);
#
# Format for output options is 'mode, restrictions';
- my $selected = 'html, without links';
- if (exists($ENV{'form.'.$elementname})) {
- if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) {
- $selected = $ENV{'form.'.$elementname}->[0];
- } else {
- $selected = $ENV{'form.'.$elementname};
- }
- }
+ my $selected = (&Apache::loncommon::get_env_multiple('form.'.$elementname))[0];
+ $selected = 'html, without links' if (!$selected);
+
#
# Set package variables describing output mode
$show_links = 'no';
@@ -482,6 +481,7 @@ my @OutputDataOptions =
grand_maximum => 1,
summary_table => 1,
maximum_row => 1,
+ ignore_weight => 0,
shortdesc => 'Total Score and Maximum Possible for each '.
'Sequence or Folder',
longdesc => 'The score of each student as well as the '.
@@ -500,6 +500,7 @@ my @OutputDataOptions =
grand_maximum => 1,
summary_table => 1,
maximum_row => 1,
+ ignore_weight => 0,
shortdesc => 'Score on each Problem Part',
longdesc =>'The students score on each problem part, computed as'.
'the part weight * part awarded',
@@ -517,6 +518,7 @@ my @OutputDataOptions =
grand_maximum => 0,
summary_table => 0,
maximum_row => 0,
+ ignore_weight => 0,
shortdesc => 'Number of Tries before success on each Problem Part',
longdesc =>'The number of tries before success on each problem part.',
non_html_notes => 'negative values indicate an incorrect problem',
@@ -534,6 +536,7 @@ my @OutputDataOptions =
grand_maximum => 1,
summary_table => 1,
maximum_row => 0,
+ ignore_weight => 1,
shortdesc => 'Number of Problem Parts completed successfully.',
longdesc => 'The Number of Problem Parts completed successfully and '.
'the maximum possible for each student',
@@ -556,14 +559,9 @@ sub CreateAndParseOutputDataSelector {
my $Str = '';
my $elementname = 'chartoutputdata';
#
- my $selected = 'scores';
- if (exists($ENV{'form.'.$elementname})) {
- if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) {
- $selected = $ENV{'form.'.$elementname}->[0];
- } else {
- $selected = $ENV{'form.'.$elementname};
- }
- }
+ my $selected = (&Apache::loncommon::get_env_multiple('form.'.$elementname))[0];
+ $selected = 'scores' if (!$selected);
+
#
$chosen_output = $OutputDataOptions[0];
foreach my $option (@OutputDataOptions) {
@@ -586,6 +584,26 @@ sub CreateAndParseOutputDataSelector {
#######################################################
#######################################################
+sub count_parts {
+ my ($navmap,$sequence) = @_;
+ my @resources = &get_resources($navmap,$sequence);
+ my $count = 0;
+ foreach my $res (@resources) {
+ $count += scalar(@{$res->parts});
+ }
+ return $count;
+}
+
+sub get_resources {
+ my ($navmap,$sequence) = @_;
+ my @resources = $navmap->retrieveResources($sequence,
+ sub { shift->is_problem(); },
+ 0,0,0);
+ return @resources;
+}
+
+#######################################################
+#######################################################
=pod
@@ -613,17 +631,49 @@ Return a line of the chart for a student
my %prog_state; # progress state used by loncommon PrgWin routines
my $total_sum_width;
+ my %width; # Holds sequence width information
+ my @sequences;
+ my $navmap; # Have to keep this around since weakref is a bit zealous
+
+sub html_cleanup {
+ undef(%prog_state);
+ undef(%width);
+ #
+ undef($navmap);
+ undef(@sequences);
+}
+
sub html_initialize {
my ($r) = @_;
#
$padding = ' 'x3;
$count = 0;
$nodata_count = 0;
- undef(%prog_state);
+ &html_cleanup();
+ ($navmap,@sequences) =
+ &Apache::lonstatistics::selected_sequences_with_assessments();
+ if (! ref($navmap)) {
+ # Unable to get data, so bail out
+ $r->print("". + &mt('Unable to retrieve course information.'). + ''); + } + + # If we're showing links, show a checkbox to open in new + # windows. + if ($show_links ne 'no') { + $r->print(<".$ENV{'course.'.$ENV{'request.course.id'}.'.description'}.
+ $r->print(" | ||
'.$seq->{'title'}.' | '. + $Str .= '||||||||
'.$seq->compTitle.' | '. ''.$ave.' | '. ''.$max.' '.' | '.&mt('Maximum').' | '."\n"; my $total = 0; my $total_max = 0; - foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { - my $value = $Statistics->{$seq->{'symb'}}->{'score'}; - my $max = $Statistics->{$seq->{'symb'}}->{'max'}; - $Str .= '|||||
---|---|---|---|---|---|---|---|---|
'.$seq->{'title'}.' | '. + foreach my $seq (@sequences) { + my $value = $Statistics->{$seq->symb}->{'score'}; + my $max = $Statistics->{$seq->symb}->{'max'}; + $Str .= '||||||||
'.&HTML::Entities::encode($seq->compTitle).' | '. ''.$value.' | '. ''.$max.' |