version 1.118, 2005/03/11 20:26:32
|
version 1.124, 2005/04/19 01:28:25
|
Line 153 sub BuildStudentAssessmentPage {
|
Line 153 sub BuildStudentAssessmentPage {
|
&Apache::lonstatistics::PrepareClasslist(); |
&Apache::lonstatistics::PrepareClasslist(); |
# |
# |
$single_student_mode = 0; |
$single_student_mode = 0; |
$single_student_mode = 1 if ($ENV{'form.SelectedStudent'}); |
$single_student_mode = 1 if ($env{'form.SelectedStudent'}); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['selectstudent']); |
['selectstudent']); |
if ($ENV{'form.selectstudent'}) { |
if ($env{'form.selectstudent'}) { |
&Apache::lonstatistics::DisplayClasslist($r); |
&Apache::lonstatistics::DisplayClasslist($r); |
return; |
return; |
} |
} |
Line 167 sub BuildStudentAssessmentPage {
|
Line 167 sub BuildStudentAssessmentPage {
|
$r->print(&CreateInterface()); |
$r->print(&CreateInterface()); |
$r->print('<input type="hidden" name="notfirstrun" value="true" />'); |
$r->print('<input type="hidden" name="notfirstrun" value="true" />'); |
$r->print('<input type="hidden" name="sort" value="'. |
$r->print('<input type="hidden" name="sort" value="'. |
$ENV{'form.sort'}.'" />'); |
$env{'form.sort'}.'" />'); |
$r->rflush(); |
$r->rflush(); |
# |
# |
if (! exists($ENV{'form.notfirstrun'}) && ! $single_student_mode) { |
if (! exists($env{'form.notfirstrun'}) && ! $single_student_mode) { |
return; |
return; |
} |
} |
|
$r->print('<h4>'. |
|
&Apache::lonstatistics::section_and_enrollment_description(). |
|
'</h4>'); |
# |
# |
my $initialize = \&html_initialize; |
my $initialize = \&html_initialize; |
my $output_student = \&html_outputstudent; |
my $output_student = \&html_outputstudent; |
Line 231 sub BuildStudentAssessmentPage {
|
Line 234 sub BuildStudentAssessmentPage {
|
sub next_and_previous_buttons { |
sub next_and_previous_buttons { |
my $Str = ''; |
my $Str = ''; |
$Str .= '<input type="hidden" name="SelectedStudent" value="'. |
$Str .= '<input type="hidden" name="SelectedStudent" value="'. |
$ENV{'form.SelectedStudent'}.'" />'; |
$env{'form.SelectedStudent'}.'" />'; |
# |
# |
# Build the previous student link |
# Build the previous student link |
my $previous = &Apache::lonstatistics::previous_student(); |
my $previous = &Apache::lonstatistics::previous_student(); |
Line 350 sub CreateInterface {
|
Line 353 sub CreateInterface {
|
&mt('Clear Caches').'" />'; |
&mt('Clear Caches').'" />'; |
$Str .= ' 'x5; |
$Str .= ' 'x5; |
$Str .= |
$Str .= |
&mt('Status[_1]', |
&mt('Status [_1]', |
'<input type="text" name="stats_status" size="60" value="" />'); |
'<input type="text" name="stats_status" size="60" value="" />'); |
$Str .= '<br />'; |
$Str .= '<br />'; |
return $Str; |
return $Str; |
Line 427 sub CreateAndParseOutputSelector {
|
Line 430 sub CreateAndParseOutputSelector {
|
[$elementname]); |
[$elementname]); |
# |
# |
# Format for output options is 'mode, restrictions'; |
# Format for output options is 'mode, restrictions'; |
my $selected = 'html, without links'; |
my $selected = (&Apache::loncommon::get_env_multiple('form.'.$elementname))[0]; |
if (exists($ENV{'form.'.$elementname})) { |
$selected = 'html, without links' if (!$selected); |
if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) { |
|
$selected = $ENV{'form.'.$elementname}->[0]; |
|
} else { |
|
$selected = $ENV{'form.'.$elementname}; |
|
} |
|
} |
|
# |
# |
# Set package variables describing output mode |
# Set package variables describing output mode |
$show_links = 'no'; |
$show_links = 'no'; |
Line 548 sub CreateAndParseOutputDataSelector {
|
Line 546 sub CreateAndParseOutputDataSelector {
|
my $Str = ''; |
my $Str = ''; |
my $elementname = 'chartoutputdata'; |
my $elementname = 'chartoutputdata'; |
# |
# |
my $selected = 'scores'; |
my $selected = (&Apache::loncommon::get_env_multiple('form.'.$elementname))[0]; |
if (exists($ENV{'form.'.$elementname})) { |
$selected = 'scores' if (!$selected); |
if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) { |
|
$selected = $ENV{'form.'.$elementname}->[0]; |
|
} else { |
|
$selected = $ENV{'form.'.$elementname}; |
|
} |
|
} |
|
# |
# |
$chosen_output = $OutputDataOptions[0]; |
$chosen_output = $OutputDataOptions[0]; |
foreach my $option (@OutputDataOptions) { |
foreach my $option (@OutputDataOptions) { |
Line 649 sub html_initialize {
|
Line 642 sub html_initialize {
|
'</h3>'); |
'</h3>'); |
} |
} |
# |
# |
$r->print("<h3>".$ENV{'course.'.$ENV{'request.course.id'}.'.description'}. |
$r->print("<h3>".$env{'course.'.$env{'request.course.id'}.'.description'}. |
" ".localtime(time)."</h3>"); |
" ".localtime(time)."</h3>"); |
# |
# |
if ($chosen_output->{'base'} !~ /^final table/) { |
if ($chosen_output->{'base'} !~ /^final table/) { |
Line 717 sub html_initialize {
|
Line 710 sub html_initialize {
|
$Str .= "<pre>"; |
$Str .= "<pre>"; |
$r->print($Str); |
$r->print($Str); |
$r->rflush(); |
$r->rflush(); |
|
# |
|
# Let the user know what we are doing |
|
my $studentcount = scalar(@Apache::lonstatistics::Students); |
|
if ($env{'form.SelectedStudent'}) { |
|
$studentcount = '1'; |
|
} |
|
# |
|
# Initialize progress window |
|
%prog_state=&Apache::lonhtmlcommon::Create_PrgWin |
|
($r,'HTML Chart Status', |
|
'HTML Chart Progress', $studentcount, |
|
'inline',undef,'Statistics','stats_status'); |
|
# |
|
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state, |
|
'Processing first student'); |
return; |
return; |
} |
} |
|
|
Line 744 sub html_outputstudent {
|
Line 752 sub html_outputstudent {
|
my %StudentsData; |
my %StudentsData; |
my @tmp = &Apache::loncoursedata::get_current_state |
my @tmp = &Apache::loncoursedata::get_current_state |
($student->{'username'},$student->{'domain'},undef, |
($student->{'username'},$student->{'domain'},undef, |
$ENV{'request.course.id'}); |
$env{'request.course.id'}); |
if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { |
if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { |
%StudentsData = @tmp; |
%StudentsData = @tmp; |
} |
} |
Line 829 sub html_outputstudent {
|
Line 837 sub html_outputstudent {
|
$r->print($Str); |
$r->print($Str); |
# |
# |
$r->rflush(); |
$r->rflush(); |
|
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student'); |
return; |
return; |
} |
} |
|
|
Line 846 sub html_finish {
|
Line 855 sub html_finish {
|
} |
} |
} |
} |
$r->rflush(); |
$r->rflush(); |
|
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
undef($navmap); |
undef($navmap); |
return; |
return; |
} |
} |
Line 1036 sub excel_initialize {
|
Line 1046 sub excel_initialize {
|
return if (! defined($excel_workbook)); |
return if (! defined($excel_workbook)); |
# |
# |
# Add a worksheet |
# Add a worksheet |
my $sheetname = $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
my $sheetname = $env{'course.'.$env{'request.course.id'}.'.description'}; |
$sheetname = &Apache::loncommon::clean_excel_name($sheetname); |
$sheetname = &Apache::loncommon::clean_excel_name($sheetname); |
$excel_sheet = $excel_workbook->addworksheet($sheetname); |
$excel_sheet = $excel_workbook->addworksheet($sheetname); |
# |
# |
# Put the course description in the header |
# Put the course description in the header |
$excel_sheet->write($header_row,$cols_output++, |
$excel_sheet->write($header_row,$cols_output++, |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}, |
$env{'course.'.$env{'request.course.id'}.'.description'}, |
$format->{'h1'}); |
$format->{'h1'}); |
$cols_output += 3; |
$cols_output += 3; |
# |
# |
# Put a description of the sections listed |
# Put a description of the sections listed |
my $sectionstring = ''; |
my $sectionstring = ''; |
my @Sections = @Apache::lonstatistics::SelectedSections; |
my @Sections = &Apache::lonstatistics::get_selected_sections(); |
if (scalar(@Sections) > 1) { |
$excel_sheet->write($header_row,$cols_output++, |
if (scalar(@Sections) > 2) { |
&Apache::lonstatistics::section_and_enrollment_description('plaintext'), |
my $last = pop(@Sections); |
|
$sectionstring = "Sections ".join(', ',@Sections).', and '.$last; |
|
} else { |
|
$sectionstring = "Sections ".join(' and ',@Sections); |
|
} |
|
} else { |
|
if ($Sections[0] eq 'all') { |
|
$sectionstring = "All sections"; |
|
} else { |
|
$sectionstring = "Section ".$Sections[0]; |
|
} |
|
} |
|
$excel_sheet->write($header_row,$cols_output++,$sectionstring, |
|
$format->{'h3'}); |
$format->{'h3'}); |
$cols_output += scalar(@Sections); |
|
# |
# |
# Put the date in there too |
# Put the date in there too |
$excel_sheet->write($header_row,$cols_output++, |
$excel_sheet->write($header_row,$cols_output++, |
Line 1325 sub excel_initialize {
|
Line 1321 sub excel_initialize {
|
# |
# |
# 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); |
if ($ENV{'form.SelectedStudent'}) { |
if ($env{'form.SelectedStudent'}) { |
$studentcount = '1'; |
$studentcount = '1'; |
} |
} |
if ($studentcount > 1) { |
if ($studentcount > 1) { |
Line 1372 sub excel_outputstudent {
|
Line 1368 sub excel_outputstudent {
|
my @tmp = &Apache::loncoursedata::get_current_state($student->{'username'}, |
my @tmp = &Apache::loncoursedata::get_current_state($student->{'username'}, |
$student->{'domain'}, |
$student->{'domain'}, |
undef, |
undef, |
$ENV{'request.course.id'}); |
$env{'request.course.id'}); |
if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { |
if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { |
%StudentsData = @tmp; |
%StudentsData = @tmp; |
} |
} |
Line 1556 END
|
Line 1552 END
|
'inline',undef,'Statistics','stats_status'); |
'inline',undef,'Statistics','stats_status'); |
# |
# |
# Open a file |
# Open a file |
$filename = '/prtspool/'. |
($outputfile,$filename) = &Apache::loncommon::create_text_file($r,'csv'); |
$ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. |
if (! defined($outputfile)) { return ''; } |
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; |
|
} |
|
# |
# |
# Datestamp |
# Datestamp |
my $description = $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
my $description = $env{'course.'.$env{'request.course.id'}.'.description'}; |
print $outputfile '"'.&Apache::loncommon::csv_translate($description).'",'. |
print $outputfile '"'.&Apache::loncommon::csv_translate($description).'",'. |
'"'.&Apache::loncommon::csv_translate(scalar(localtime(time))).'"'. |
'"'.&Apache::loncommon::csv_translate(scalar(localtime(time))).'"'. |
"\n"; |
"\n"; |
|
print $outputfile '"'. |
|
&Apache::loncommon::csv_translate |
|
(&Apache::lonstatistics::section_and_enrollment_description()). |
|
'"'."\n"; |
foreach my $item ('shortdesc','non_html_notes') { |
foreach my $item ('shortdesc','non_html_notes') { |
next if (! exists($chosen_output->{$item})); |
next if (! exists($chosen_output->{$item})); |
print $outputfile |
print $outputfile |
Line 1654 sub csv_outputstudent {
|
Line 1646 sub csv_outputstudent {
|
my @tmp = &Apache::loncoursedata::get_current_state($student->{'username'}, |
my @tmp = &Apache::loncoursedata::get_current_state($student->{'username'}, |
$student->{'domain'}, |
$student->{'domain'}, |
undef, |
undef, |
$ENV{'request.course.id'}); |
$env{'request.course.id'}); |
if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { |
if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { |
%StudentsData = @tmp; |
%StudentsData = @tmp; |
} |
} |
Line 1822 sub student_tries_on_sequence {
|
Line 1814 sub student_tries_on_sequence {
|
} elsif ($status eq 'incorrect_by_override') { |
} elsif ($status eq 'incorrect_by_override') { |
$symbol = '-'; |
$symbol = '-'; |
} elsif ($status eq 'ungraded_attempted') { |
} elsif ($status eq 'ungraded_attempted') { |
$symbol = '#'; |
$symbol = 'u'; |
} elsif ($status eq 'incorrect_attempted' || |
} elsif ($status eq 'incorrect_attempted' || |
$tries > 0) { |
$tries > 0) { |
$symbol = '.'; |
$symbol = '.'; |
Line 1939 sub student_performance_on_sequence {
|
Line 1931 sub student_performance_on_sequence {
|
if (length($symbol) > 1) { |
if (length($symbol) > 1) { |
$symbol = '*'; |
$symbol = '*'; |
} |
} |
if (exists($resource_data->{'resource.'.$part.'.solved'})) { |
if (exists($resource_data->{'resource.'.$part.'.solved'}) && |
|
$resource_data->{'resource.'.$part.'.solved'} ne '') { |
my $status = $resource_data->{'resource.'.$part.'.solved'}; |
my $status = $resource_data->{'resource.'.$part.'.solved'}; |
if ($status eq 'excused') { |
if ($status eq 'excused') { |
$symbol = 'x'; |
$symbol = 'x'; |
$max -= $weight; # Do not count 'excused' problems. |
$max -= $weight; # Do not count 'excused' problems. |
|
} elsif ($status eq 'ungraded_attempted') { |
|
$symbol = 'u'; |
} |
} |
$hasdata = 1; |
$hasdata = 1; |
|
} elsif ($resource_data->{'resource.'.$part.'.award'} eq 'DRAFT') { |
|
$symbol = 'd'; |
|
$hasdata = 1; |
} elsif (!exists($resource_data->{'resource.'.$part.'.awarded'})){ |
} elsif (!exists($resource_data->{'resource.'.$part.'.awarded'})){ |
# Unsolved. Did they try? |
# Unsolved. Did they try? |
if (exists($resource_data->{'resource.'.$part.'.tries'})){ |
if (exists($resource_data->{'resource.'.$part.'.tries'})){ |
Line 1994 problems.
|
Line 1992 problems.
|
####################################################### |
####################################################### |
sub CreateLegend { |
sub CreateLegend { |
my $Str = "<p><pre>". |
my $Str = "<p><pre>". |
" 1 correct by student in 1 try\n". |
" digit score or number of tries to get correct ". |
" 7 correct by student in 7 tries\n". |
|
" * correct by student in more than 9 tries\n". |
" * correct by student in more than 9 tries\n". |
" + correct by hand grading or override\n". |
" + correct by hand grading or override\n". |
" - incorrect by override\n". |
" - incorrect by override\n". |
" . incorrect attempted\n". |
" . incorrect attempted\n". |
" # ungraded attempted\n". |
" u ungraded attempted\n". |
|
" d draft answer saved but not submitted\n". |
" not attempted (blank field)\n". |
" not attempted (blank field)\n". |
" x excused". |
" x excused". |
"</pre><p>"; |
"</pre><p>"; |