--- loncom/interface/statistics/lonstudentsubmissions.pm 2004/03/07 20:41:28 1.7
+++ loncom/interface/statistics/lonstudentsubmissions.pm 2004/09/02 21:02:54 1.16
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentsubmissions.pm,v 1.7 2004/03/07 20:41:28 matthew Exp $
+# $Id: lonstudentsubmissions.pm,v 1.16 2004/09/02 21:02:54 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,14 +43,10 @@ my @SubmitButtons = ({ name => 'PrevProb
{ name => 'NextProblem',
text => 'Next Problem' },
{ name => 'break'},
- { name => 'ClearCache',
- text => 'Clear Caches' },
- { name => 'updatecaches',
- text => 'Update Student Data' },
{ name => 'SelectAnother',
text => 'Choose a different Problem' },
{ name => 'Generate',
- text => 'Generate Spreadsheet'},
+ text => 'Generate Report'},
);
sub BuildStudentSubmissionsPage {
@@ -75,18 +71,8 @@ sub BuildStudentSubmissionsPage {
$r->print('
There are no students in the sections selected ');
}
#
- &Apache::loncoursedata::clear_internal_caches();
- if (exists($ENV{'form.ClearCache'}) ||
- exists($ENV{'form.updatecaches'}) ||
- (exists($ENV{'form.firstanalysis'}) &&
- $ENV{'form.firstanalysis'} ne 'no')) {
- &Apache::lonstatistics::Gather_Full_Student_Data($r);
- }
- if (! exists($ENV{'form.firstanalysis'})) {
- $r->print(' ');
- } else {
- $r->print(' ');
- }
+ my @CacheButtonHTML =
+ &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
$r->rflush();
#
if (exists($ENV{'form.problemchoice'}) &&
@@ -100,6 +86,9 @@ sub BuildStudentSubmissionsPage {
$r->print(' 'x5);
}
}
+ foreach my $html (@CacheButtonHTML) {
+ $r->print($html.(' 'x5));
+ }
#
$r->print(' ');
$r->rflush();
@@ -133,15 +122,22 @@ sub BuildStudentSubmissionsPage {
my $resource = $current_problem->{'resource'};
$r->print(''.$resource->{'title'}.' ');
$r->print(''.$resource->{'src'}.' ');
- $r->print(&Apache::lonstathelpers::render_resource($resource));
+ if ($ENV{'form.renderprob'} eq 'true') {
+ $r->print(&Apache::lonstathelpers::render_resource($resource));
+ }
$r->rflush();
my %Data = &Apache::lonstathelpers::get_problem_data
($resource->{'src'});
my $ProblemData = $Data{$current_problem->{'part'}.
'.'.
$current_problem->{'respid'}};
- &prepare_excel_output($r,$current_problem,
- $ProblemData,\@Students);
+ if ($ENV{'form.output'} eq 'excel') {
+ &prepare_excel_output($r,$current_problem,
+ $ProblemData,\@Students);
+ } else {
+ &prepare_html_output($r,$current_problem,
+ $ProblemData,\@Students);
+ }
}
$r->print(' ');
} else {
@@ -153,6 +149,241 @@ 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 => 'grading',
+ display =>'Score'},
+ );
+
+#########################################################
+#########################################################
+##
+## prepare_html_output
+##
+#########################################################
+#########################################################
+sub prepare_html_output {
+ my ($r,$problem,$ProblemData,$Students) = @_;
+ my $c = $r->connection();
+ my ($resource,$respid,$partid) = ($problem->{'resource'},
+ $problem->{'respid'},
+ $problem->{'part'});
+ #
+ 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;
+ }
+ }
+ if (! defined($response_type)) {
+ $r->print(''.&mt('Unable to determine response type').' ');
+ } else {
+ 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 {
+ @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;
+ }
+ 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
+ ($response->[&Apache::loncoursedata::RDs_submission()],
+ $student->{'answer'},
+ scalar(@Columns),$rowextra);
+ } elsif ($response_type eq 'option') {
+ $row .= &html_option
+ ($response->[&Apache::loncoursedata::RDs_submission()],
+ $student->{'answer'},
+ scalar(@Columns),$rowextra);
+ } else {
+ $row .= &html_generic
+ ($response->[&Apache::loncoursedata::RDs_submission()],
+ $student->{'answer'},
+ scalar(@Columns),$rowextra);
+ }
+ $row .= ' ';
+ $r->print($row.$/);
+ $count++;
+ }
+ }
+ $r->print(''.$/);
+ }
+ return;
+}
+
+#####################################################
+##
+## HTML helper routines
+##
+#####################################################
+sub html_headers {
+ my ($Columns) = @_;
+ my $Str;
+ foreach my $column (@$Columns) {
+ $Str .= ''.$column->{'display'}.' ';
+ }
+ return $Str;
+}
+
+sub html_essay {
+ my ($submission,$correct,$tablewidth,$rowextra)=@_;
+ #
+ $submission =~ s|\\r\\n|$/|g;
+ $submission = &HTML::Entities::encode($submission,'<>&"');
+ $submission =~ s|$/\s*$/|$/$/|g;
+ $submission =~ s|\\||g;
+ $submission = '
'.$submission.'
';
+ #
+ my $Str = ''.
+ ''.$submission.' ';
+ if ($ENV{'form.correctans'} eq 'true') {
+ $Str .= ' ';
+ if (defined($correct) && $correct !~ /^\s*$/) {
+ $Str .= ''.
+ ''.&mt('Correct Answer:').' '.$correct.' ';
+ }
+ }
+ $Str .= ' ';
+ #
+ return $Str;
+}
+
+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 ($submission,$correct,$tablewidth,$rowclass)=@_;
+ $submission =~ s/=([^=])$//;
+ return &html_generic_results($submission,$correct,$tablewidth,$rowclass);
+}
+
+sub html_generic {
+ my ($submission,$correct,$tablewidth,$rowclass)=@_;
+ my $Str .= ''.$submission.' ';
+ if ($ENV{'form.correctans'} eq 'true') {
+ $Str .= ''.$correct.' ';
+ }
+ $Str .= '';
+ return $Str;
+}
+
+sub html_option_headers {
+ return &html_generic_headers();
+}
+
+sub html_option {
+ my ($submission,$correct,$tablewidth,$rowclass)=@_;
+ $submission =
+ '