version 1.1, 2006/02/14 16:05:46
|
version 1.13, 2014/02/12 16:51:16
|
Line 34 use Apache::loncoursedata();
|
Line 34 use Apache::loncoursedata();
|
use Apache::lonstatistics; |
use Apache::lonstatistics; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonstathelpers(); |
use Apache::lonstathelpers(); |
use Apache::lonstudentsubmissions(); |
use Spreadsheet::WriteExcel; |
|
use Spreadsheet::WriteExcel::Utility(); |
use HTML::Entities(); |
use HTML::Entities(); |
use Time::Local(); |
use Time::Local(); |
use Data::Dumper; |
use Data::Dumper; |
Line 54 sub build_grading_analysis_page {
|
Line 55 sub build_grading_analysis_page {
|
# |
# |
my %saveable_parameters = ('Status' => 'scalar', |
my %saveable_parameters = ('Status' => 'scalar', |
'Section' => 'array', |
'Section' => 'array', |
|
'Group' => 'array', |
); |
); |
&Apache::loncommon::store_course_settings('grading_analysis', |
&Apache::loncommon::store_course_settings('grading_analysis', |
\%saveable_parameters); |
\%saveable_parameters); |
Line 67 sub build_grading_analysis_page {
|
Line 69 sub build_grading_analysis_page {
|
my @students = @Apache::lonstatistics::Students; |
my @students = @Apache::lonstatistics::Students; |
# |
# |
if (@students < 1 && exists($env{'form.firstrun'})) { |
if (@students < 1 && exists($env{'form.firstrun'})) { |
$r->print('<h2>There are no students in the sections selected</h2>'); |
$r->print( |
|
'<p class="LC_info">' |
|
.&mt('There are no students in the sections/groups selected.') |
|
.'</h2>'); |
} |
} |
# |
# |
#my @cache_button_HTML = |
#my @cache_button_HTML = |
Line 118 sub build_grading_analysis_page {
|
Line 123 sub build_grading_analysis_page {
|
$env{'form.problemchoice'}.'" />'); |
$env{'form.problemchoice'}.'" />'); |
# |
# |
if (! defined($current_problem->{'resource'})) { |
if (! defined($current_problem->{'resource'})) { |
$r->print('resource is undefined'); |
$r->print('<p class="LC_error">'.&mt('resource is undefined').'</p>'); |
} else { |
} else { |
my $resource = $current_problem->{'resource'}; |
my $resource = $current_problem->{'resource'}; |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
Line 128 sub build_grading_analysis_page {
|
Line 133 sub build_grading_analysis_page {
|
if ($resource->is_task()) { |
if ($resource->is_task()) { |
&task_analysis($r,$resource,\@students); |
&task_analysis($r,$resource,\@students); |
} else { |
} else { |
$r->print('<h2>Analysis of '.$resource->src().' is not supported</h2>'); |
$r->print( |
|
'<p class="LC_warning">' |
|
.&mt('Analysis of [_1] is not supported.',$resource->src()) |
|
.'</p>'); |
} |
} |
} |
} |
$r->print('<hr />'); |
$r->print('<hr />'); |
Line 147 sub build_grading_analysis_page {
|
Line 155 sub build_grading_analysis_page {
|
|
|
sub task_analysis { |
sub task_analysis { |
my ($r,$problem,$students) = @_; |
my ($r,$problem,$students) = @_; |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,scalar(@$students)); |
($r,'Student Answer Compilation Status', |
|
'Student Answer Compilation Progress', scalar(@$students), |
|
'inline',undef,'Statistics','stats_status'); |
|
my %graders; |
my %graders; |
foreach my $student (@$students) { |
foreach my $student (@$students) { |
my $sname = $student->{'username'}; |
my $sname = $student->{'username'}; |
Line 158 sub task_analysis {
|
Line 163 sub task_analysis {
|
my %data = &Apache::lonnet::restore($problem->symb(), |
my %data = &Apache::lonnet::restore($problem->symb(), |
$env{'request.course.id'}, |
$env{'request.course.id'}, |
$sdom,$sname); |
$sdom,$sname); |
|
my $last_grader; |
foreach my $ver (0..$data{'version'}) { |
foreach my $ver (0..$data{'version'}) { |
if (exists($data{"$ver:resource.0.regrader"}) |
if (exists($data{"$ver:resource.0.regrader"}) |
&& $data{"$ver:resource.0.regrader"} =~ /\S/) { |
&& $data{"$ver:resource.0.regrader"} =~ /\S/) { |
$graders{$data{"$ver:resource.0.regrader"}}++; |
$last_grader=$data{"$ver:resource.0.regrader"}; |
} |
} |
|
if (exists($data{"$ver:resource.0.version"}) |
|
&& $last_grader =~ /\S/) { |
|
$graders{$last_grader}++; |
|
} |
|
} |
|
if ($last_grader =~ /\S/) { |
|
$graders{$last_grader}++; |
} |
} |
|
|
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&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') { |
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') { |
} 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 { |
} else { |
$r->print('<table class="thinborder">'); |
$r->print(&Apache::loncommon::start_data_table()); |
foreach my $grader (sort(keys(%graders))) { |
$r->print(&Apache::loncommon::start_data_table_header_row(). |
my ($gname,$gdom) = split('@',$grader,2); |
'<th>'.&mt('Name (username)').'</th><th>'.&mt('Grades Assigned').'</th>'. |
my $name = &Apache::loncommon::plainname($gname,$gdom); |
&Apache::loncommon::end_data_table_header_row() ); |
my $link = &Apache::loncommon::aboutmewrapper($name,$gname,$gdom); |
foreach my $line (@output) { |
$r->print("<tr><td>$link (<tt>$grader</tt>)</td><td>$graders{$grader}</td></tr>"); |
$r->print(&Apache::loncommon::start_data_table_row(). |
|
sprintf("<td>%s (<tt>%s</tt>)</td><td>%s</td></tr>", |
|
@{$line}). |
|
&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print('</table>'); |
$r->print(&Apache::loncommon::end_data_table()); |
} |
} |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&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); |
|
} |
|
|
######################################################### |
######################################################### |
######################################################### |
######################################################### |
## |
## |
Line 197 sub create_interface {
|
Line 301 sub create_interface {
|
foreach ('HTML','Excel','CSV') { |
foreach ('HTML','Excel','CSV') { |
$output_selector .= ' <option value="'.lc($_).'"'; |
$output_selector .= ' <option value="'.lc($_).'"'; |
if ($env{'form.output'} eq lc($_)) { |
if ($env{'form.output'} eq lc($_)) { |
$output_selector .= ' selected '; |
$output_selector .= ' selected="selected"'; |
} |
} |
$output_selector .='>'.&mt($_).'</option>'.$/; |
$output_selector .='>'.&mt($_).'</option>'.$/; |
} |
} |
$output_selector .= '</select>'.$/; |
$output_selector .= '</select>'.$/; |
|
|
my $str = ''; |
my $str = ''; |
$str .= &Apache::lonhtmlcommon::breadcrumbs |
$str .= &Apache::lonhtmlcommon::breadcrumbs('Detailed Grading Statistics'); |
(undef,'Detailed Grading Statistics'); |
|
$str .= '<table cellspacing="5">'."\n"; |
$str .= '<table cellspacing="5">'."\n"; |
$str .= '<tr>'; |
$str .= '<tr>'; |
$str .= '<td align="center"><b>'.&mt('Sections').'</b></td>'; |
$str .= '<td align="center"><b>'.&mt('Sections').'</b></td>'; |
$str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>'; |
$str .= '<td align="center"><b>'.&mt('Groups').'</b></td>'; |
$str .= '<td>'.&mt('<b>Output as</b> [_1]',$output_selector).'</td>'; |
$str .= '<td align="center"><b>'.&mt('Access Status').'</b></td>'; |
|
$str .= '<td>'.&mt('[_1]Output as[_2] [_3]','<b>',$output_selector,'</b>').'</td>'; |
$str .= '</tr>'."\n"; |
$str .= '</tr>'."\n"; |
## |
## |
## |
## |
Line 218 sub create_interface {
|
Line 322 sub create_interface {
|
$str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); |
$str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); |
$str .= '</td>'; |
$str .= '</td>'; |
# |
# |
|
$str .= '<td align="center">'."\n"; |
|
$str .= &Apache::lonstatistics::GroupSelect('Group','multiple',5); |
|
$str .= '</td>'; |
|
# |
$str .= '<td align="center">'; |
$str .= '<td align="center">'; |
$str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); |
$str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); |
$str .= '</td>'; |
$str .= '</td>'; |
# |
# |
$str .= '<td>'; |
$str .= '<td>'; |
## |
|
$str .= '<nobr><label>'.&mt('Status: [_1]', |
|
'<input type="text" '. |
|
'name="stats_status" size="60" value="" />' |
|
). |
|
'</label></nobr>'; |
|
$str .= '</td>'; |
$str .= '</td>'; |
## |
## |
## |
## |