version 1.39, 2003/03/07 17:01:45
|
version 1.47, 2003/05/13 15:00:42
|
Line 198 sub get_student_fields_to_show {
|
Line 198 sub get_student_fields_to_show {
|
return @to_show; |
return @to_show; |
} |
} |
|
|
sub get_sequences_to_show { |
|
my @Sequences; |
|
foreach my $map_symb (@Apache::lonstatistics::SelectedMaps) { |
|
foreach my $sequence (@Apache::lonstatistics::Sequences) { |
|
next if ($sequence->{'symb'} ne $map_symb && $map_symb ne 'all'); |
|
next if ($sequence->{'num_assess'} < 1); |
|
push (@Sequences,$sequence); |
|
} |
|
} |
|
return @Sequences; |
|
} |
|
|
|
|
|
####################################################### |
####################################################### |
####################################################### |
####################################################### |
|
|
Line 237 sub CreateInterface {
|
Line 224 sub CreateInterface {
|
$Str .= '<tr>'; |
$Str .= '<tr>'; |
$Str .= '<td align="center"><b>Sections</b></td>'; |
$Str .= '<td align="center"><b>Sections</b></td>'; |
$Str .= '<td align="center"><b>Student Data</b></td>'; |
$Str .= '<td align="center"><b>Student Data</b></td>'; |
$Str .= '<td align="center"><b>Problem Sets</b></td>'; |
$Str .= '<td align="center"><b>Enrollment Status</b></td>'; |
|
$Str .= '<td align="center"><b>Sequences and Folders</b></td>'; |
$Str .= '<td align="center"><b>Output Format</b></td>'; |
$Str .= '<td align="center"><b>Output Format</b></td>'; |
$Str .= '</tr>'."\n"; |
$Str .= '</tr>'."\n"; |
# |
# |
Line 255 sub CreateInterface {
|
Line 243 sub CreateInterface {
|
$Str .= &Apache::lonstatistics::StudentDataSelect('StudentData','multiple', |
$Str .= &Apache::lonstatistics::StudentDataSelect('StudentData','multiple', |
5,undef); |
5,undef); |
$Str .= '</td><td>'."\n"; |
$Str .= '</td><td>'."\n"; |
|
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5); |
|
$Str .= '</td><td>'."\n"; |
$Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5, |
$Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5, |
$only_seq_with_assessments); |
$only_seq_with_assessments); |
$Str .= '</td><td>'."\n"; |
$Str .= '</td><td>'."\n"; |
Line 284 my @OutputOptions =
|
Line 274 my @OutputOptions =
|
show => 'all', |
show => 'all', |
show_links => 'yes', |
show_links => 'yes', |
}, |
}, |
|
{ name => 'HTML, with all links', |
|
value => 'html, with all links', |
|
description => 'Output HTML with each symbol linked to the problem '. |
|
'which generated it. '. |
|
'This includes links for unattempted problems.', |
|
mode => 'html', |
|
show => 'all', |
|
show_links => 'all', |
|
}, |
{ name => 'HTML, without links', |
{ name => 'HTML, without links', |
value => 'html, without links', |
value => 'html, without links', |
description => 'Output HTML. By not including links, the size of the'. |
description => 'Output HTML. By not including links, the size of the'. |
Line 394 sub OutputDescriptions {
|
Line 393 sub OutputDescriptions {
|
|
|
sub CreateAndParseOutputSelector { |
sub CreateAndParseOutputSelector { |
my $Str = ''; |
my $Str = ''; |
my $elementname = 'outputmode'; |
my $elementname = 'chartoutputmode'; |
# |
# |
# Format for output options is 'mode, restrictions'; |
# Format for output options is 'mode, restrictions'; |
my $selected = 'html, with links'; |
my $selected = 'html, with links'; |
Line 485 sub html_initialize {
|
Line 484 sub html_initialize {
|
$Str .= $title.' 'x($width-$base).$padding; |
$Str .= $title.' 'x($width-$base).$padding; |
} |
} |
# Now the selected sequences need to be listed |
# Now the selected sequences need to be listed |
foreach my $sequence (&get_sequences_to_show) { |
foreach my $sequence (&Apache::lonstatistics::Sequences_with_Assess()){ |
my $title = $sequence->{'title'}; |
my $title = $sequence->{'title'}; |
my $base = $sequence->{'base_width'}; |
my $base = $sequence->{'base_width'}; |
my $width = $sequence->{'width'}; |
my $width = $sequence->{'width'}; |
Line 538 sub html_outputstudent {
|
Line 537 sub html_outputstudent {
|
# By sequence build up the data |
# By sequence build up the data |
my $studentstats; |
my $studentstats; |
my $PerformanceStr = ''; |
my $PerformanceStr = ''; |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
my ($performance,$score,$seq_max) = |
my ($performance,$score,$seq_max) = |
&StudentPerformanceOnSequence($student,\%StudentsData, |
&StudentPerformanceOnSequence($student,\%StudentsData, |
$seq,$show_links); |
$seq,$show_links); |
Line 608 sub StudentAverageTotal {
|
Line 607 sub StudentAverageTotal {
|
my $total_max = 0; |
my $total_max = 0; |
$Str .= '<table border=2 cellspacing="1">'."\n"; |
$Str .= '<table border=2 cellspacing="1">'."\n"; |
$Str .= "<tr><th>Title</th><th>Average</th><th>Maximum</th></tr>\n"; |
$Str .= "<tr><th>Title</th><th>Average</th><th>Maximum</th></tr>\n"; |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
my $ave = int(100*($Statistics->{$seq->{'symb'}}->{'score'}/ |
my $ave; |
($num_students-$nodata_count)))/100; |
if ($num_students > $nodata_count) { |
|
$ave = int(100*($Statistics->{$seq->{'symb'}}->{'score'}/ |
|
($num_students-$nodata_count)))/100; |
|
} else { |
|
$ave = 0; |
|
} |
$total_ave += $ave; |
$total_ave += $ave; |
my $max = $seq->{'num_assess_parts'}; |
my $max = $seq->{'num_assess_parts'}; |
$total_max += $max; |
$total_max += $max; |
Line 666 sub multi_sheet_excel_initialize {
|
Line 670 sub multi_sheet_excel_initialize {
|
my $num_data_per_part = 2; # 'status' and 'numtries' |
my $num_data_per_part = 2; # 'status' and 'numtries' |
my $fields_per_student = scalar(&get_student_fields_to_show()); |
my $fields_per_student = scalar(&get_student_fields_to_show()); |
my $bytes_per_field = 20; # Back of the envelope calculation |
my $bytes_per_field = 20; # Back of the envelope calculation |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$num_sequences++ if ($seq->{'num_assess'} > 0); |
$num_sequences++ if ($seq->{'num_assess'} > 0); |
$fields_per_student += $num_data_per_part * $seq->{'num_assess_parts'}; |
$fields_per_student += $num_data_per_part * $seq->{'num_assess_parts'}; |
} |
} |
Line 812 sub excel_initialize {
|
Line 816 sub excel_initialize {
|
} |
} |
# |
# |
# Add the Sequence Headers |
# Add the Sequence Headers |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$excel_sheet->write($rows_output,$cols_output,$seq->{'title'}); |
$excel_sheet->write($rows_output,$cols_output,$seq->{'title'}); |
if ($show eq 'totals') { |
if ($show eq 'totals') { |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
Line 830 sub excel_initialize {
|
Line 834 sub excel_initialize {
|
$rows_output += 1; |
$rows_output += 1; |
} |
} |
# |
# |
|
# Output a row for MAX |
|
if ($show ne 'totals') { |
|
$cols_output = 0; |
|
foreach my $field (&get_student_fields_to_show()) { |
|
if ($field eq 'username' || $field eq 'fullname' || |
|
$field eq 'id') { |
|
$excel_sheet->write($rows_output,$cols_output++,'Maximum'); |
|
} else { |
|
$excel_sheet->write($rows_output,$cols_output++,''); |
|
} |
|
} |
|
# |
|
# Add the Sequence Headers |
|
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
$excel_sheet->write($rows_output,$cols_output++, |
|
$seq->{'num_assess_parts'}); |
|
} |
|
$rows_output++; |
|
} |
|
# |
# Let the user know what we are doing |
# Let the user know what we are doing |
my $studentcount = scalar(@Apache::lonstatistics::Students); |
my $studentcount = scalar(@Apache::lonstatistics::Students); |
$r->print("<h1>Compiling Excel spreadsheet for ". |
$r->print("<h1>Compiling Excel spreadsheet for ". |
Line 868 sub excel_outputstudent {
|
Line 892 sub excel_outputstudent {
|
} |
} |
# |
# |
# Write out sequence scores and totals data |
# Write out sequence scores and totals data |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
my ($performance,$score,$seq_max) = |
my ($performance,$score,$seq_max) = |
&StudentPerformanceOnSequence($student,\%StudentsData, |
&StudentPerformanceOnSequence($student,\%StudentsData, |
$seq,'no'); |
$seq,'no'); |
Line 974 sub csv_initialize{
|
Line 998 sub csv_initialize{
|
$Str .= '"'.&Apache::loncommon::csv_translate($field).'",'; |
$Str .= '"'.&Apache::loncommon::csv_translate($field).'",'; |
} |
} |
} |
} |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
if ($show eq 'scores') { |
if ($show eq 'scores') { |
$Str .= '"'.&Apache::loncommon::csv_translate($seq->{'title'}). |
$Str .= '"'.&Apache::loncommon::csv_translate($seq->{'title'}). |
'",'; |
'",'; |
Line 1028 sub csv_outputstudent {
|
Line 1052 sub csv_outputstudent {
|
} |
} |
# |
# |
# Output performance data |
# Output performance data |
foreach my $seq (&get_sequences_to_show) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
my ($performance,$score,$seq_max) = |
my ($performance,$score,$seq_max) = |
&StudentPerformanceOnSequence($student,\%StudentsData, |
&StudentPerformanceOnSequence($student,\%StudentsData, |
$seq,'no'); |
$seq,'no'); |
Line 1134 sub StudentPerformanceOnSequence {
|
Line 1158 sub StudentPerformanceOnSequence {
|
$symbol = ' '; |
$symbol = ' '; |
} |
} |
$sum++; |
$sum++; |
|
} elsif (exists($resource_data->{'resource.'. |
|
$partnum.'.tries'})){ |
|
$symbol = '.'; |
} else { |
} else { |
$symbol = ' '; |
$symbol = ' '; |
} |
} |
Line 1146 sub StudentPerformanceOnSequence {
|
Line 1173 sub StudentPerformanceOnSequence {
|
} |
} |
} |
} |
# |
# |
if ($links eq 'yes' && $symbol ne ' ') { |
if ( ($links eq 'yes' && $symbol ne ' ') || |
|
($links eq 'all')) { |
$symbol = '<a href="/adm/grades'. |
$symbol = '<a href="/adm/grades'. |
'?symb='.&Apache::lonnet::escape($resource->{'symb'}). |
'?symb='.&Apache::lonnet::escape($resource->{'symb'}). |
'&student='.$student->{'username'}. |
'&student='.$student->{'username'}. |