[LON-CAPA-cvs] cvs: loncom /interface/statistics longradinganalysis.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 14 Feb 2006 22:12:46 -0000


albertel		Tue Feb 14 17:12:46 2006 EDT

  Modified files:              
    /loncom/interface/statistics	longradinganalysis.pm 
  Log:
  - adding CSV and Excel outputs to grade analysis
  
  
Index: loncom/interface/statistics/longradinganalysis.pm
diff -u loncom/interface/statistics/longradinganalysis.pm:1.2 loncom/interface/statistics/longradinganalysis.pm:1.3
--- loncom/interface/statistics/longradinganalysis.pm:1.2	Tue Feb 14 11:34:46 2006
+++ loncom/interface/statistics/longradinganalysis.pm	Tue Feb 14 17:12:46 2006
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: longradinganalysis.pm,v 1.2 2006/02/14 16:34:46 albertel Exp $
+# $Id: longradinganalysis.pm,v 1.3 2006/02/14 22:12:46 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -34,7 +34,8 @@
 use Apache::lonstatistics;
 use Apache::lonlocal;
 use Apache::lonstathelpers();
-use Apache::lonstudentsubmissions();
+use Spreadsheet::WriteExcel;
+use Spreadsheet::WriteExcel::Utility();
 use HTML::Entities();
 use Time::Local();
 use Data::Dumper;
@@ -177,21 +178,106 @@
                                                  &mt('last student'));
 
     }
+
+    my @output;
+    foreach my $grader (sort(keys(%graders))) {
+	my ($gname,$gdom) = split(/(?:\:|\@)/,$grader,2);
+	my $name = &Apache::loncommon::plainname($gname,$gdom);
+	push(@output,[$name,$gname."@".$gdom,$graders{$grader}]);
+    }
+
     if ($env{'form.output'} eq 'csv') {
+	my ($outputfile,$filename) = &init_csv_output($r);
+	foreach my $line (@output) {
+	    print $outputfile 
+		('"'.join(q{","},
+			  map {&Apache::loncommon::csv_translate($_)} @{$line})
+		 .'"'."\n");
+	}
+	close($outputfile);
+	$r->print('<br />'.
+		  '<a href="'.$filename.'">'.&mt('Your csv file.')."</a>\n");
     } elsif ($env{'form.output'} eq 'excel') {
+	my ($excel_workbook,$excel_sheet,$filename,$format,$rows_output) = 
+	    &init_excel_output($r);
+	foreach my $line (@output) {
+	    my $cols_output = 0;
+	    foreach my $item (@{ $line }) {
+		$excel_sheet->write($rows_output,$cols_output++,$item);
+	    }
+	    $rows_output++;
+	}
+	# Write the excel file
+	$excel_workbook->close();
+
+	# Tell the user where to get their excel file
+	$r->print('<br />'.
+		  '<a href="'.$filename.'">'.
+		  &mt('Your Excel spreadsheet.').'</a>'."\n");
     } else {
 	$r->print('<table class="thinborder">');
-	foreach my $grader (sort(keys(%graders))) {
-	    my ($gname,$gdom) = split('@',$grader,2);
-	    my $name = &Apache::loncommon::plainname($gname,$gdom);
-	    my $link = &Apache::loncommon::aboutmewrapper($name,$gname,$gdom);
-	    $r->print("<tr><td>$link (<tt>$grader</tt>)</td><td>$graders{$grader}</td></tr>");
+	$r->print('<tr><th>Name (username)</th><th>Grades Assigned</th></tr>');
+	foreach my $line (@output) {
+	    $r->print(sprintf("<tr><td>%s (<tt>%s</tt>)</td><td>%s</td></tr>",
+			      @{$line}));
 	}
 	$r->print('</table>');
     }
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
 }
 
+sub init_csv_output {
+    my ($r) = @_;
+    my ($outputfile,$filename) = 
+	&Apache::loncommon::create_text_file($r,'csv');
+    my $description = $env{'course.'.$env{'request.course.id'}.'.description'};
+    print $outputfile ('"'.&Apache::loncommon::csv_translate($description).
+		       '","'.&Apache::loncommon::csv_translate(scalar(localtime(time))).
+		       '"'."\n");
+    print $outputfile ('"'.
+		       &Apache::loncommon::csv_translate(&Apache::lonstatistics::section_and_enrollment_description()).
+		       '"'."\n");
+    print $outputfile ('"'  .&Apache::loncommon::csv_translate('Grader Name'));
+    print $outputfile ('","'.&Apache::loncommon::csv_translate('Username'));
+    print $outputfile ('","'.&Apache::loncommon::csv_translate('Grades Assigned').
+		       '"'."\n");
+    return ($outputfile,$filename);
+}
+
+sub init_excel_output {
+    my ($r) = @_;
+    my ($excel_workbook,$filename,$format)=
+	&Apache::loncommon::create_workbook($r);
+    return if (! defined($excel_workbook));
+    my $rows_output = 0;
+    my $cols_output = 0;
+    my $header_row = $rows_output++;
+    my $description_row = $rows_output++;
+    $rows_output++;        # blank row
+    
+    my $sheetname = $env{'course.'.$env{'request.course.id'}.'.description'};
+    $sheetname = &Apache::loncommon::clean_excel_name($sheetname);
+    my $excel_sheet = $excel_workbook->addworksheet($sheetname);
+    $excel_sheet->write($header_row,$cols_output++,
+			$env{'course.'.$env{'request.course.id'}.'.description'},
+			$format->{'h1'});
+    $cols_output += 3;
+    my $sectionstring = '';
+    my @Sections = &Apache::lonstatistics::get_selected_sections();
+    $excel_sheet->write($header_row,$cols_output++,
+			&Apache::lonstatistics::section_and_enrollment_description('plaintext'),
+			$format->{'h3'});
+    
+    $excel_sheet->write($header_row,$cols_output++,
+			'Compiled on '.localtime(time),$format->{'h3'});
+    $cols_output = 0;
+    foreach my $field ('Grader Name','Username','Grades Assigned') {
+	$excel_sheet->write($description_row,$cols_output++,$field,
+			    $format->{'bold'});
+    }
+    return ($excel_workbook,$excel_sheet,$filename,$format,$rows_output);
+}
+
 #########################################################
 #########################################################
 ##