--- loncom/interface/statistics/lonstudentsubmissions.pm 2004/09/01 21:13:04 1.15 +++ 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.15 2004/09/01 21:13:04 matthew Exp $ +# $Id: lonstudentsubmissions.pm,v 1.16 2004/09/02 21:02:54 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,10 +131,13 @@ 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); + } else { + &prepare_html_output($r,$current_problem, + $ProblemData,\@Students); + } } $r->print('
'); } else { @@ -148,6 +151,27 @@ 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 ## @@ -159,14 +183,16 @@ 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; @@ -182,22 +208,30 @@ sub prepare_html_output { $r->print('

'.&mt('Unable to determine response type').'

'); } else { my $count = 0; - my $header; + 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_header(); - } elsif ($response_type eq 'radiobutton') { - $header = &html_radiobutton_header(); + $header .= &html_essay_headers(); } elsif ($response_type eq 'option') { - $header = &html_option_header(); + $header .= &html_option_headers(); } else { - $header = &html_generic_header(); + $header .= &html_generic_headers(); } $header = ''.$header.''; # - $r->print($/.'
'.$/.$header.$/); + $r->print($/.$header.$/); foreach my $student (@$Students) { if ($count >= 50) { - $r->print('
'.$/.''.$/.$header.$/); + $r->print('
'.$/.$header.$/); $count = 0; } last if ($c->aborted()); @@ -211,25 +245,45 @@ sub prepare_html_output { next; } my $data; - $data->{'sname'} = $student->{'username'}.'@'. - $student->{'domain'}; + $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->{'submission'} = - $response->[&Apache::loncoursedata::RDs_submission()]; - $data->{'correct'} = $student->{'answer'}; - my $row; + $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($data); - } elsif ($response_type eq 'radiobutton') { - $row = &html_radiobutton($data); + $row .= &html_essay + ($response->[&Apache::loncoursedata::RDs_submission()], + $student->{'answer'}, + scalar(@Columns),$rowextra); } elsif ($response_type eq 'option') { - $row = &html_option($data); + $row .= &html_option + ($response->[&Apache::loncoursedata::RDs_submission()], + $student->{'answer'}, + scalar(@Columns),$rowextra); } else { - $row = &html_generic($data); + $row .= &html_generic + ($response->[&Apache::loncoursedata::RDs_submission()], + $student->{'answer'}, + scalar(@Columns),$rowextra); } + $row .= ''; $r->print($row.$/); $count++; } @@ -244,59 +298,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'}.'

'; - # - 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'}.''; - } + $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($data->{'correct'}) && $data->{'correct'} !~ /^\s*$/) { - $Str .= ''. - ''.&mt('Correct Answer:').''.$data->{'correct'}.''; + if (defined($correct) && $correct !~ /^\s*$/) { + $Str .= ''. + ''.&mt('Correct Answer:').''.$correct.''; } } $Str .= ''; @@ -304,17 +330,12 @@ 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').''; } @@ -322,256 +343,48 @@ sub html_radiobutton_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_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; + 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'}.''; + 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_headers { + return &html_generic_headers(); } sub html_option { - my ($data)=@_; - $data->{'submission'} = '