[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstudentassessment.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 06 Mar 2003 22:45:04 -0000
matthew Thu Mar 6 17:45:04 2003 EDT
Modified files:
/loncom/interface/statistics lonstudentassessment.pm
Log:
Added csv download. 'scores','totals', and 'all' work wonderfully now.
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.36 loncom/interface/statistics/lonstudentassessment.pm:1.37
--- loncom/interface/statistics/lonstudentassessment.pm:1.36 Thu Mar 6 16:12:54 2003
+++ loncom/interface/statistics/lonstudentassessment.pm Thu Mar 6 17:45:04 2003
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentassessment.pm,v 1.36 2003/03/06 21:12:54 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.37 2003/03/06 22:45:04 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -851,18 +851,137 @@
#######################################################
{
+my $outputfile;
+my $filename;
+
+my %prog_state; # progress window state
+
sub csv_initialize{
my ($r) = @_;
- $r->print("<h1>Not implemented yet</h1>");
+ #
+ # Clean up
+ $filename = undef;
+ $outputfile = undef;
+ undef(%prog_state);
+ #
+ # Open a file
+ $filename = '/prtspool/'.
+ $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
+ time.'_'.rand(1000000000).'.csv';
+ unless ($outputfile = Apache::File->new('>/home/httpd'.$filename)) {
+ $r->log_error("Couldn't open $filename for output $!");
+ $r->print("Problems occured in writing the csv file. ".
+ "This error has been logged. ".
+ "Please alert your LON-CAPA administrator.");
+ $outputfile = undef;
+ }
+ #
+ # Print out the headings
+ my $Str = '';
+ my $Str2 = undef;
+ foreach my $field (&get_student_fields_to_show()) {
+ if ($show eq 'scores') {
+ $Str .= '"'.&Apache::loncommon::csv_translate($field).'",';
+ } elsif ($show eq 'totals') {
+ $Str .= '"",'; # first row empty on the student fields
+ $Str2 .= '"'.&Apache::loncommon::csv_translate($field).'",';
+ } elsif ($show eq 'all') {
+ $Str .= '"'.&Apache::loncommon::csv_translate($field).'",';
+ }
+ }
+ foreach my $seq (&get_sequences_to_show) {
+ if ($show eq 'scores') {
+ $Str .= '"'.&Apache::loncommon::csv_translate($seq->{'title'}).
+ '",';
+ } elsif ($show eq 'totals') {
+ $Str .= '"'.&Apache::loncommon::csv_translate($seq->{'title'}).
+ '","",';
+ $Str2 .= '"score","total possible",';
+ } elsif ($show eq 'all') {
+ $Str .= '"'.&Apache::loncommon::csv_translate($seq->{'title'}).
+ '",';
+ $Str .= '"",'x($seq->{'num_assess_parts'}-1);
+ $Str .= '"score","total possible",';
+ }
+ }
+ chop($Str);
+ $Str .= "\n";
+ print $outputfile $Str;
+ if (defined($Str2)) {
+ chop($Str2);
+ $Str2 .= "\n";
+ print $outputfile $Str2;
+ }
+ #
+ # Initialize progress window
+ my $studentcount = scalar(@Apache::lonstatistics::Students);
+ %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+ ($r,'CSV File Compilation Status',
+ 'CSV File Compilation Progress', $studentcount);
return;
}
sub csv_outputstudent {
my ($r,$student) = @_;
+ return if (! defined($outputfile));
+ my $Str = '';
+ #
+ # Output student fields
+ my @to_show = &get_student_fields_to_show();
+ foreach my $field (@to_show) {
+ $Str .= '"'.&Apache::loncommon::csv_translate($student->{$field}).'",';
+ }
+ #
+ # Get student assessment data
+ my %StudentsData;
+ my @tmp = &Apache::loncoursedata::get_current_state($student->{'username'},
+ $student->{'domain'},
+ undef,
+ $ENV{'request.course.id'});
+ if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) {
+ %StudentsData = @tmp;
+ }
+ #
+ # Output performance data
+ foreach my $seq (&get_sequences_to_show) {
+ my ($performance,$score,$seq_max) =
+ &StudentPerformanceOnSequence($student,\%StudentsData,
+ $seq,'no');
+ if ($show eq 'scores') {
+ $Str .= '"'.$score.'",';
+ } elsif ($show eq 'totals') {
+ $Str .= '"'.$score.'","'.$seq_max.'",';
+ } elsif ($show eq 'all') {
+ $Str .= '"'.join('","',(split(//,$performance),$score,$seq_max)).
+ '",';
+ }
+ }
+ chop($Str);
+ $Str .= "\n";
+ print $outputfile $Str;
+ #
+ # Update the progress window
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
+ return;
}
sub csv_finish {
my ($r) = @_;
+ return if (! defined($outputfile));
+ close($outputfile);
+ #
+ my $c = $r->connection();
+ return if ($c->aborted());
+ #
+ # Close the progress window
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+ #
+ # Tell the user where to get their csv file
+ $r->print('<br />'.
+ '<a href="'.$filename.'">Your csv file.</a>'."\n");
+ $r->rflush();
+ return;
+
}
}