--- loncom/interface/statistics/longradinganalysis.pm 2006/02/14 16:34:46 1.2
+++ loncom/interface/statistics/longradinganalysis.pm 2014/02/26 16:01:56 1.14
@@ -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.14 2014/02/26 16:01:56 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -34,7 +34,8 @@ use Apache::loncoursedata();
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;
@@ -54,6 +55,7 @@ sub build_grading_analysis_page {
#
my %saveable_parameters = ('Status' => 'scalar',
'Section' => 'array',
+ 'Group' => 'array',
);
&Apache::loncommon::store_course_settings('grading_analysis',
\%saveable_parameters);
@@ -67,7 +69,10 @@ sub build_grading_analysis_page {
my @students = @Apache::lonstatistics::Students;
#
if (@students < 1 && exists($env{'form.firstrun'})) {
- $r->print('
There are no students in the sections selected
');
+ $r->print(
+ ''
+ .&mt('There are no students in the sections/groups selected.')
+ .'
');
}
#
#my @cache_button_HTML =
@@ -118,7 +123,7 @@ sub build_grading_analysis_page {
$env{'form.problemchoice'}.'" />');
#
if (! defined($current_problem->{'resource'})) {
- $r->print('resource is undefined');
+ $r->print(''.&mt('resource is undefined').'
');
} else {
my $resource = $current_problem->{'resource'};
$r->print(''.$resource->compTitle.'
');
@@ -128,7 +133,10 @@ sub build_grading_analysis_page {
if ($resource->is_task()) {
&task_analysis($r,$resource,\@students);
} else {
- $r->print('Analysis of '.$resource->src().' is not supported
');
+ $r->print(
+ ''
+ .&mt('Analysis of [_1] is not supported.',$resource->src())
+ .'
');
}
}
$r->print('
');
@@ -147,10 +155,7 @@ sub build_grading_analysis_page {
sub task_analysis {
my ($r,$problem,$students) = @_;
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
- ($r,'Student Answer Compilation Status',
- 'Student Answer Compilation Progress', scalar(@$students),
- 'inline',undef,'Statistics','stats_status');
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,scalar(@$students));
my %graders;
foreach my $student (@$students) {
my $sname = $student->{'username'};
@@ -174,24 +179,114 @@ sub task_analysis {
}
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
- &mt('last student'));
+ '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('
'.
+ ''.&mt('Your CSV file.')."\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('
'.
+ ''.
+ &mt('Your Excel spreadsheet.').''."\n");
} else {
- $r->print('');
- 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("$link ($grader) | $graders{$grader} |
");
+ $r->print(&Apache::loncommon::start_data_table());
+ $r->print(&Apache::loncommon::start_data_table_header_row().
+ ''.&mt('Name (username)').' | '.&mt('Grades Assigned').' | '.
+ &Apache::loncommon::end_data_table_header_row() );
+ foreach my $line (@output) {
+ $r->print(&Apache::loncommon::start_data_table_row().
+ sprintf("%s (%s) | %s | ",
+ @{$line}).
+ &Apache::loncommon::end_data_table_row());
}
- $r->print('
');
+ $r->print(&Apache::loncommon::end_data_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(); #This is never used
+ $excel_sheet->write($header_row,$cols_output++,
+ &Apache::lonstatistics::section_and_enrollment_description('plaintext'),
+ $format->{'h3'});
+
+ $excel_sheet->write($header_row,$cols_output++,
+ &mt('Compiled on [_1]',&Apache::lonlocal::locallocaltime(time)),
+ $format->{'h3'});
+ $cols_output = 0;
+ foreach my $field ('Grader Name','Username','Grades Assigned') {
+ $excel_sheet->write($description_row,$cols_output++,&mt($field),
+ $format->{'bold'});
+ }
+ return ($excel_workbook,$excel_sheet,$filename,$format,$rows_output);
+}
+
#########################################################
#########################################################
##
@@ -206,20 +301,20 @@ sub create_interface {
foreach ('HTML','Excel','CSV') {
$output_selector .= '