--- loncom/interface/statistics/lonstudentsubmissions.pm 2004/09/01 21:13:04 1.15
+++ loncom/interface/statistics/lonstudentsubmissions.pm 2004/09/08 14:58:33 1.17
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentsubmissions.pm,v 1.15 2004/09/01 21:13:04 matthew Exp $
+# $Id: lonstudentsubmissions.pm,v 1.17 2004/09/08 14:58:33 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -46,7 +46,7 @@ my @SubmitButtons = ({ name => 'PrevProb
{ name => 'SelectAnother',
text => 'Choose a different Problem' },
{ name => 'Generate',
- text => 'Generate Spreadsheet'},
+ text => 'Generate Report'},
);
sub BuildStudentSubmissionsPage {
@@ -131,15 +131,21 @@ sub BuildStudentSubmissionsPage {
my $ProblemData = $Data{$current_problem->{'part'}.
'.'.
$current_problem->{'respid'}};
- &prepare_html_output($r,$current_problem,
- $ProblemData,\@Students);
-# &prepare_excel_output($r,$current_problem,
-# $ProblemData,\@Students);
+ if ($ENV{'form.output'} eq 'excel') {
+ &prepare_excel_output($r,$current_problem,
+ $ProblemData,\@Students);
+ } elsif ($ENV{'form.output'} eq 'csv') {
+ &prepare_csv_output($r,$current_problem,
+ $ProblemData,\@Students);
+ } else {
+ &prepare_html_output($r,$current_problem,
+ $ProblemData,\@Students);
+ }
}
$r->print('
');
} else {
$r->print('');
+ &mt('Prepare Report').'" />');
$r->print(' 'x5);
$r->print(''.&mt('Please select a problem to analyze').'
');
$r->print(&Apache::lonstathelpers::ProblemSelector('.'));
@@ -148,6 +154,44 @@ sub BuildStudentSubmissionsPage {
#########################################################
#########################################################
+
+my @DefaultColumns =
+ (
+ {name=>'username',
+ display=>'Student'},
+ {name=>'domain',
+ display=>'Domain'},
+ {name => 'id',
+ display => 'Id'},
+ {name => 'time',
+ display =>'Time'},
+ {name => 'attempt',
+ display =>'Attempt'},
+ {name => 'awarddetail',
+ display =>'Awarddetail'},
+ {name => 'awarded',
+ display =>'Award'},
+ # FIXME: Probably need to add score
+ );
+
+sub get_response_type {
+ my ($resource,$partid,$respid) = @_;
+ my $response_type = '';
+ for (my $i=0;
+ $i{'partdata'}->{$partid}->{'ResponseIds'}});
+ $i++) {
+ if($resource->{'partdata'}->{$partid}->{'ResponseIds'}->[$i] eq $respid){
+ $response_type =
+ $resource->{'partdata'}->{$partid}->{'ResponseTypes'}->[$i];
+ last;
+ }
+ }
+ return $response_type;
+}
+
+
+#########################################################
+#########################################################
##
## prepare_html_output
##
@@ -159,83 +203,104 @@ sub prepare_html_output {
my ($resource,$respid,$partid) = ($problem->{'resource'},
$problem->{'respid'},
$problem->{'part'});
- $r->print(''.&mt('Student Responses').'
');
#
if ($ENV{'form.correctans'} eq 'true') {
+ $r->print(''.&mt('Generating Correct Answers').'
');
&Apache::lonstathelpers::GetStudentAnswers($r,$problem,$Students,
'Statistics',
'stats_status');
}
#
+ $r->print(''.&mt('Student Responses').'
');
+ #
$r->rflush();
- my $response_type;
- for (my $i=0;
- $i{'partdata'}->{$partid}->{'ResponseIds'}});
- $i++) {
- if($resource->{'partdata'}->{$partid}->{'ResponseIds'}->[$i] eq $respid){
- $response_type =
- $resource->{'partdata'}->{$partid}->{'ResponseTypes'}->[$i];
- last;
- }
- }
+ my $response_type = &get_response_type($resource,$partid,$respid);
if (! defined($response_type)) {
$r->print(''.&mt('Unable to determine response type').'
');
+ return;
+ }
+ my $count = 0;
+ my @Columns;
+ if (exists($ENV{'form.concise'}) && $ENV{'form.concise'} eq 'true') {
+ foreach (@DefaultColumns) {
+ if ($_->{'name'} =~ /^(username|domain|id)$/){
+ push(@Columns,$_);
+ }
+ }
} else {
- my $count = 0;
- my $header;
- if ($response_type eq 'essay') {
- $header = &html_essay_header();
- } elsif ($response_type eq 'radiobutton') {
- $header = &html_radiobutton_header();
- } elsif ($response_type eq 'option') {
- $header = &html_option_header();
- } else {
- $header = &html_generic_header();
+ @Columns = @DefaultColumns;
+ }
+ my $header = ''.$/.&html_headers(\@Columns);
+ if ($response_type eq 'essay') {
+ $header .= &html_essay_headers();
+ } elsif ($response_type eq 'option') {
+ $header .= &html_option_headers();
+ } else {
+ $header .= &html_generic_headers();
+ }
+ $header = ''.$header.'
';
+ #
+ $r->print($/.$header.$/);
+ foreach my $student (@$Students) {
+ if ($count >= 50) {
+ $r->print('
'.$/.$header.$/);
+ $count = 0;
}
- $header = ''.$header.'
';
- #
- $r->print($/.''.$/.$header.$/);
- foreach my $student (@$Students) {
- if ($count >= 50) {
- $r->print('
'.$/.''.$/.$header.$/);
- $count = 0;
- }
- last if ($c->aborted());
- my $results = &Apache::loncoursedata::get_response_data_by_student
- ($student,$resource->{'symb'},$respid);
- next if (! defined($results) || ref($results) ne 'ARRAY');
- for (my $i=0;$i[$i];
- if ($ENV{'form.last_sub_only'} eq 'true' &&
- $i < (scalar(@$results)-1)) {
- next;
- }
- my $data;
- $data->{'sname'} = $student->{'username'}.'@'.
- $student->{'domain'};
- $data->{'time'} = &Apache::lonlocal::locallocaltime
- ($response->[&Apache::loncoursedata::RDs_timestamp()]);
- $data->{'attempt'} =
- $response->[&Apache::loncoursedata::RDs_tries()];
- $data->{'submission'} =
- $response->[&Apache::loncoursedata::RDs_submission()];
- $data->{'correct'} = $student->{'answer'};
- my $row;
- if ($response_type eq 'essay') {
- $row = &html_essay($data);
- } elsif ($response_type eq 'radiobutton') {
- $row = &html_radiobutton($data);
- } elsif ($response_type eq 'option') {
- $row = &html_option($data);
- } else {
- $row = &html_generic($data);
- }
- $r->print($row.$/);
- $count++;
+ last if ($c->aborted());
+ my $results = &Apache::loncoursedata::get_response_data_by_student
+ ($student,$resource->{'symb'},$respid);
+ next if (! defined($results) || ref($results) ne 'ARRAY');
+ for (my $i=0;$i[$i];
+ if ($ENV{'form.last_sub_only'} eq 'true' &&
+ $i < (scalar(@$results)-1)) {
+ next;
+ }
+ my $data;
+ $data->{'username'} = $student->{'username'};
+ $data->{'domain'} = $student->{'domain'};
+ $data->{'id'} = $student->{'id'};
+ $data->{'fullname'} = $student->{'fullanem'};
+ $data->{'status'} = $student->{'status'};
+ $data->{'time'} = &Apache::lonlocal::locallocaltime
+ ($response->[&Apache::loncoursedata::RDs_timestamp()]);
+ $data->{'attempt'} =
+ $response->[&Apache::loncoursedata::RDs_tries()];
+ $data->{'awarded'} =
+ $response->[&Apache::loncoursedata::RDs_awarded()];
+ $data->{'awarddetail'} =
+ $response->[&Apache::loncoursedata::RDs_awarddetail()];
+ my $rowextra = 'bgcolor="#CCCCCC"';
+ if ($count % 2 == 1) {
+ $rowextra = 'bgcolor="#EEEEEE"';
+ }
+ my $row = '';
+ foreach my $col (@Columns) {
+ $row .= ''.
+ $data->{$col->{'name'}}.' | ';
}
+ if ($response_type eq 'essay') {
+ $row .= &html_essay_results
+ ($response->[&Apache::loncoursedata::RDs_submission()],
+ $student->{'answer'},
+ scalar(@Columns),$rowextra);
+ } elsif ($response_type eq 'option') {
+ $row .= &html_option_results
+ ($response->[&Apache::loncoursedata::RDs_submission()],
+ $student->{'answer'},
+ scalar(@Columns),$rowextra);
+ } else {
+ $row .= &html_generic_results
+ ($response->[&Apache::loncoursedata::RDs_submission()],
+ $student->{'answer'},
+ scalar(@Columns),$rowextra);
+ }
+ $row .= '
';
+ $r->print($row.$/);
+ $count++;
}
- $r->print('
'.$/);
}
+ $r->print(''.$/);
return;
}
@@ -244,59 +309,31 @@ sub prepare_html_output {
## HTML helper routines
##
#####################################################
-my @FullHeaders = (
- {name=>'sname',
- display=>'Student'},
- {name => 'id',
- display => 'Id'},
- {name => 'time',
- display =>'Time'},
- {name => 'attempt',
- display =>'Attempt'},
- {name => 'grading',
- display =>'Grading'},
- );
-
-sub html_essay_header {
- my $header;
- if ($ENV{'form.subdata'} eq 'true') {
- foreach (@FullHeaders) {
- $header .= ''.&mt($_->{'display'}).' | ';
- }
- } else {
- $header = ''.&mt('Username and Submission').' | ';
+sub html_headers {
+ my ($Columns) = @_;
+ my $Str;
+ foreach my $column (@$Columns) {
+ $Str .= ''.$column->{'display'}.' | ';
}
- return $header;
+ return $Str;
}
sub html_essay {
- my ($data)=@_;
+ my ($submission,$correct,$tablewidth,$rowextra)=@_;
#
- $data->{'submission'} =~ s|\\r\\n|$/|g;
- $data->{'submission'} =
- &HTML::Entities::encode($data->{'submission'},'<>&"');
- $data->{'submission'} =~ s|$/\s*$/|$/$/|g;
- $data->{'submission'} =~ s|\\||g;
- $data->{'submission'} = '
'.$data->{'submission'}.'
';
+ $submission =~ s|\\r\\n|$/|g;
+ $submission = &HTML::Entities::encode($submission,'<>&"');
+ $submission =~ s|$/\s*$/|$/$/|g;
+ $submission =~ s|\\||g;
+ $submission = '
'.$submission.'
';
#
- my $Str = '';
- if ($ENV{'form.subdata'} eq 'true') {
- $Str .=
- ''.$data->{'sname'}.' | '.
- ''.$data->{'time'}.' | '.
- ''.$data->{'attempt'}.' | ';
- $Str .= '
';
- $Str .= ''.
- $data->{'submission'}.' | ';
- } else {
- $Str .= ''.$data->{'sname'}.''.
- $data->{'submission'}.' | ';
- }
+ my $Str = '
'.
+ ''.$submission.' | ';
if ($ENV{'form.correctans'} eq 'true') {
$Str .= '
';
- if (defined($data->{'correct'}) && $data->{'correct'} !~ /^\s*$/) {
- $Str .= ''.
- ''.&mt('Correct Answer:').''.$data->{'correct'}.' | ';
+ if (defined($correct) && $correct !~ /^\s*$/) {
+ $Str .= '
'.
+ ''.&mt('Correct Answer:').''.$correct.' | ';
}
}
$Str .= '
';
@@ -304,273 +341,259 @@ sub html_essay {
return $Str;
}
-sub html_radiobutton_header {
- my $header;
- if ($ENV{'form.subdata'} eq 'true') {
- foreach (@FullHeaders) {
- $header .= ''.&mt($_->{'display'}).' | ';
- }
- } else {
- $header =
- ''.&mt('Username').' | ';
- }
- $header .=''.&mt('Submission').' | ';
+sub html_essay_headers {
+ return '';
+}
+
+sub html_generic_headers {
+ my $header =''.&mt('Submission').' | ';
if ($ENV{'form.correctans'} eq 'true') {
$header .= ''.&mt('Correct').' | ';
}
return $header;
}
-sub html_radiobutton {
- my ($data)=@_;
- #
- $data->{'submission'} =~ s/=([^=])$//;
- #
- my $Str = '';
- if ($ENV{'form.subdata'} eq 'true') {
- $Str .=
- ''.''.$data->{'sname'}.' | '.
- ''.$data->{'time'}.' | '.
- ''.$data->{'attempt'}.' | ';
- $Str .= ''.$data->{'submission'}.' | ';
- if ($ENV{'form.correctans'} eq 'true') {
- $Str .= ''.$data->{'correct'}.' | ';
- }
- } else {
- $Str .= ''.$data->{'sname'}.' | ';
- $Str .= ''.$data->{'submission'}.' | ';
- if ($ENV{'form.correctans'} eq 'true') {
- $Str .= ''.$data->{'correct'}.' | ';
- }
- }
- $Str .= '
';
- #
- return $Str;
+sub html_option_headers {
+ return &html_generic_headers();
}
-sub html_generic_header {
- my $header;
- if ($ENV{'form.subdata'} eq 'true') {
- foreach (@FullHeaders) {
- $header .= ''.&mt($_->{'display'}).' | ';
- }
- } else {
- $header =
- ''.&mt('Username').' | ';
- }
- $header .= ''.&mt('Submission').' | ';
- if ($ENV{'form.correctans'} eq 'true') {
- $header .= ''.&mt('Correct').' | ';
- }
- return $header;
+sub html_radiobutton_results {
+ my ($submission,$correct,$tablewidth,$rowclass)=@_;
+ $submission =~ s/=([^=])$//;
+ return &html_generic_results($submission,$correct,$tablewidth,$rowclass);
}
-sub html_generic {
- my ($data)=@_;
- $data->{'submission'} = &Apache::lonnet::unescape($data->{'submission'});
- my $Str = '';
- if ($ENV{'form.subdata'} eq 'true') {
- $Str .=
- ''.$data->{'sname'}.' | '.
- ''.$data->{'time'}.' | '.
- ''.$data->{'attempt'}.' | ';
- } else {
- $Str .= ''.$data->{'sname'}.' | ';
- }
- $Str .= ''.$data->{'submission'}.' | ';
+sub html_generic_results {
+ my ($submission,$correct,$tablewidth,$rowclass)=@_;
+ my $Str .= ''.$submission.' | ';
if ($ENV{'form.correctans'} eq 'true') {
- $Str .= ''.$data->{'correct'}.' | ';
+ $Str .= ''.$correct.' | ';
}
$Str .= '
';
return $Str;
}
-sub html_option_header {
- my $header;
- if ($ENV{'form.subdata'} eq 'true') {
- foreach (@FullHeaders) {
- $header .= ''.&mt($_->{'display'}).' | ';
- }
- } else {
- $header =
- ''.&mt('Username').' | ';
- }
- $header .= ''.&mt('Submission').' | ';
- if ($ENV{'form.correctans'} eq 'true') {
- $header .= ''.&mt('Correct').' | ';
- }
- return $header;
-}
-
-sub html_option {
- my ($data)=@_;
- $data->{'submission'} = ''.
- '- '.join('
- ',
- map {
- &Apache::lonnet::unescape($_) ;
- } sort split('&',$data->{'submission'})).
- '