# The LearningOnline Network with CAPA # # $Id: lonstudentsubmissions.pm,v 1.17 2004/09/08 14:58:33 matthew Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # package Apache::lonstudentsubmissions; use strict; use Apache::lonnet(); use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::loncoursedata(); use Apache::lonstatistics; use Apache::lonlocal; use Apache::lonstathelpers; use HTML::Entities(); use Time::Local(); use Spreadsheet::WriteExcel(); my @SubmitButtons = ({ name => 'PrevProblem', text => 'Previous Problem' }, { name => 'NextProblem', text => 'Next Problem' }, { name => 'break'}, { name => 'SelectAnother', text => 'Choose a different Problem' }, { name => 'Generate', text => 'Generate Report'}, ); sub BuildStudentSubmissionsPage { my ($r,$c)=@_; # my %Saveable_Parameters = ('Status' => 'scalar', 'Section' => 'array', 'NumPlots' => 'scalar', ); &Apache::loncommon::store_course_settings('student_submissions', \%Saveable_Parameters); &Apache::loncommon::restore_course_settings('student_submissions', \%Saveable_Parameters); # &Apache::lonstatistics::PrepareClasslist(); # $r->print(&CreateInterface()); # my @Students = @Apache::lonstatistics::Students; # if (@Students < 1) { $r->print('
$/|g; $submission =~ s|\\||g; $submission = '
'.$submission.'
'; # my $Str = ''. &mt('See the status bar above for student answer computation progress'). '
'); # if ($ENV{'form.correctans'} eq 'true') { &Apache::lonstathelpers::GetStudentAnswers($r,$problem,$Students, 'Statistics', 'stats_status'); $r->print(''); } # $r->rflush(); 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 ($awarded_col,$weight_col); for (my $i=0;$i<=$#Columns;$i++) { if ($Columns[$i]->{'name'} eq 'weight' ) { $weight_col = $i; } if ($Columns[$i]->{'name'} eq 'awarded') { $awarded_col = $i; } } # # Create excel worksheet my $filename = '/prtspool/'. $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. time.'_'.rand(1000000000).'.xls'; my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); if (! defined($workbook)) { $r->log_error("Error creating excel spreadsheet $filename: $!"); $r->print(''.&mt("Unable to create new Excel file. ". "This error has been logged. ". "Please alert your LON-CAPA administrator"). '
'); return undef; } # $workbook->set_tempdir('/home/httpd/perl/tmp'); # my $format = &Apache::loncommon::define_excel_formats($workbook); my $worksheet = $workbook->addworksheet('Student Submission Data'); # # Make sure we get new weight data instead of data on a 10 minute delay &Apache::lonnet::clear_EXT_cache_status(); # # Put on the standard headers and whatnot my $rows_output=0; $worksheet->write($rows_output++,0,$resource->{'title'},$format->{'h1'}); $worksheet->write($rows_output++,0,$resource->{'src'},$format->{'h3'}); $rows_output++; $worksheet->write_row($rows_output++,0, [map {$_->{'display'}} @Columns], $format->{'bold'}); # # Populate the worksheet with the student data my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin ($r,'Excel File Compilation Status', 'Excel File Compilation Progress', scalar(@$Students),'inline',undef,'Statistics','stats_status'); foreach my $student (@$Students) { last if ($c->aborted()); my $results = &Apache::loncoursedata::get_response_data_by_student ($student,$resource->{'symb'},$respid); my %row; $row{'username'} = $student->{'username'}; $row{'domain'} = $student->{'domain'}; $row{'id'} = $student->{'id'}; $row{'correct'} = $student->{'answer'}; $row{'weight'} = &Apache::lonnet::EXT ('resource.'.$partid.'.weight',$resource->{'symb'}, undef,undef,undef); if (! defined($results) || ref($results) ne 'ARRAY') { $row{'score'} = '='. &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell ($rows_output,$awarded_col) .'*'. &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell ($rows_output,$weight_col); my $cols_output = 0; foreach my $col (@Columns) { if (! exists($row{$col->{'name'}})) { $cols_output++; next; } $worksheet->write($rows_output,$cols_output++, $row{$col->{'name'}}); } $rows_output++; } else { for (my $i=0;$i'. &mt('Your Excel spreadsheet.'). '
'."\n"); $r->print(''); $r->rflush(); return; } ######################################################### ######################################################### ## ## Generic Interface Routines ## ######################################################### ######################################################### sub CreateInterface { ## ## Output Selection my $OutputSelector = $/.''.$/; ## ## Environment variable initialization my $Str = ''; $Str .= &Apache::lonhtmlcommon::breadcrumbs (undef,'Student Submission Reports'); $Str .= ''; $Str .= '
'.&mt('Sections').' | '; $Str .= ''.&mt('Enrollment Status').' | '; $Str .= ''.&mt('Output Options').' | '; $Str .= '
---|---|---|
'."\n"; $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); $Str .= ' | '; # $Str .= ''; $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); $Str .= ' | '; # # Render problem checkbox my $prob_checkbox = ''; # # Concise view checkbox my $concise_view_checkbox = ''.&mt('Output Format: [_1]',$OutputSelector).'