version 1.31, 2005/02/02 21:19:53
|
version 1.34, 2005/02/23 01:21:46
|
Line 741 sub prepare_excel_output {
|
Line 741 sub prepare_excel_output {
|
$partid, |
$partid, |
$respid); |
$respid); |
my @response_data = |
my @response_data = |
&excel_response_data(\@headers,$prob,$partid, |
&compile_response_data(\@headers,$response, |
$respid,$response,$resptype); |
$prob,$partid,$respid, |
|
$resptype, |
|
\&excel_format_item); |
$worksheet->write_row($rows_output++,$cols_output, |
$worksheet->write_row($rows_output++,$cols_output, |
\@response_data); |
\@response_data); |
$cols_output+=scalar(@response_data); |
$cols_output+=scalar(@response_data); |
Line 754 sub prepare_excel_output {
|
Line 756 sub prepare_excel_output {
|
} |
} |
} |
} |
# Fill in the remaining rows with the students data |
# Fill in the remaining rows with the students data |
for (my $row = $student_row+1;$row<=$max_row;$row++) { |
for (my $row = $student_row+1;$row<$max_row;$row++) { |
my $cols = 0; |
my $cols = 0; |
foreach my $field (@StudentColumns) { |
foreach my $field (@StudentColumns) { |
$worksheet->write($row,$cols++, |
$worksheet->write($row,$cols++, |
$student->{$field}); |
$student->{$field}); |
} |
} |
} |
} |
$rows_output++; |
|
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
'last student'); |
'last student'); |
} |
} |
Line 782 sub prepare_excel_output {
|
Line 783 sub prepare_excel_output {
|
return; |
return; |
} |
} |
|
|
sub excel_response_data { |
sub compile_response_data { |
my ($headers,$prob,$partid,$respid,$response,$resptype) = @_; |
my ($headers,$response,$prob,$partid,$respid,$resptype,$format) = @_; |
if (! ref($headers) || ref($headers) ne 'ARRAY' || ! scalar(@$headers)) { |
if (! ref($headers) || ref($headers) ne 'ARRAY' || ! scalar(@$headers)) { |
return (); |
return (); |
} |
} |
|
if (ref($format) ne 'CODE') { |
|
$format = sub { return $_[0]; }; |
|
} |
# |
# |
my $submission = &HTML::Entities::decode($response->{'Submission'}); |
my $submission = |
return '' if (! defined($submission) || $submission eq ''); |
&HTML::Entities::decode |
|
(&Apache::lonnet::unescape($response->{'Submission'})); |
|
return () if (! defined($submission) || $submission eq ''); |
$submission =~ s/\\\"/\"/g; |
$submission =~ s/\\\"/\"/g; |
$submission =~ s/\\\'/\'/g; |
$submission =~ s/\\\'/\'/g; |
if ($resptype eq 'radiobutton') { |
if ($resptype eq 'radiobutton') { |
Line 825 sub excel_response_data {
|
Line 831 sub excel_response_data {
|
} elsif (exists($submission{$header})) { |
} elsif (exists($submission{$header})) { |
$option = $submission{$header}; |
$option = $submission{$header}; |
} |
} |
push(@values,&excel_format_item($option,$header)); |
push(@values,&{$format}($option,$header)); |
} else { |
} else { |
# A normal column |
# A normal column |
push(@values, |
push(@values,&{$format}($response->{$original_header}, |
&excel_format_item($response->{$original_header}, |
|
$original_header)); |
$original_header)); |
} |
} |
} |
} |
} else { |
} else { |
@values = map { &excel_format_item($response->{$_},$_); } @$headers; |
@values = map { &{$format}($response->{$_},$_); } @$headers; |
} |
} |
return @values; |
return @values; |
} |
} |
Line 842 sub excel_response_data {
|
Line 847 sub excel_response_data {
|
sub excel_format_item { |
sub excel_format_item { |
my ($item,$type) = @_; |
my ($item,$type) = @_; |
if ($type eq 'Time') { |
if ($type eq 'Time') { |
&Apache::lonstathelpers::calc_serial($item); |
$item = &Apache::lonstathelpers::calc_serial($item); |
} else { |
} else { |
if ($item =~ m/^=/) { |
if ($item =~ m/^=/) { |
$item = ' '.$item; |
$item = ' '.$item; |
Line 891 sub prepare_csv_output {
|
Line 896 sub prepare_csv_output {
|
} |
} |
# |
# |
# Compute the number of columns per response |
# Compute the number of columns per response |
my @extra_resp_headers; |
my @extra_resp_headers = &get_extra_response_headers(); |
if ($ENV{'form.correctans'} eq 'true') { |
|
push(@extra_resp_headers,'Correct'); |
|
} |
|
if ($ENV{'form.prob_status'} eq 'true') { |
|
push(@extra_resp_headers,'Award Detail'); |
|
push(@extra_resp_headers,'Time'); |
|
push(@extra_resp_headers,'Attempt'); |
|
push(@extra_resp_headers,'Awarded'); |
|
} |
|
my $response_multiplier = scalar(@extra_resp_headers); |
|
# |
# |
# Create the table header |
# Create the table header |
my @student_columns = ('username','domain','id'); |
my @student_columns = ('username','domain','id'); |
Line 910 sub prepare_csv_output {
|
Line 905 sub prepare_csv_output {
|
push(@{$headers{'student'}},@student_columns); |
push(@{$headers{'student'}},@student_columns); |
# Pad for the student data |
# Pad for the student data |
foreach my $row ('problem','part','response') { |
foreach my $row ('problem','part','response') { |
foreach (@student_columns) { |
$headers{$row}=[map {''} @student_columns]; |
push(@{$headers{$row}},''); |
|
} |
|
} |
} |
# |
# |
# we put the headers into the %headers hash |
# we put the headers into the %headers hash |
my $prob_start_idx = 0; |
my %problem_analysis; |
|
my %start_col; |
|
my $max_column = scalar(@student_columns); |
foreach my $prob (@$problems) { |
foreach my $prob (@$problems) { |
$headers{'problem'}->[$prob_start_idx] = $prob->compTitle; |
my %analysis = &Apache::lonstathelpers::get_problem_data($prob->src); |
my $part_start_idx = $prob_start_idx; |
$problem_analysis{$prob->src}=\%analysis; |
|
$headers{'problem'}->[$max_column] = $prob->compTitle; |
foreach my $partid (@{$prob->parts}) { |
foreach my $partid (@{$prob->parts}) { |
$headers{'part'}->[$part_start_idx] = $prob->part_display($partid); |
$headers{'part'}->[$max_column] = $prob->part_display($partid); |
my $responses = [$prob->responseIds($partid)]; |
my $responses = [$prob->responseIds($partid)]; |
|
my $resptypes = [$prob->responseType($partid)]; |
for (my $i=0;$i<scalar(@$responses);$i++) { |
for (my $i=0;$i<scalar(@$responses);$i++) { |
my $resp_idx = $prob_start_idx + $response_multiplier * $i; |
my @headers = &get_headers($prob,$partid,$responses->[$i], |
$headers{'response'}->[$resp_idx]= |
$resptypes->[$i], |
|
$problem_analysis{$prob->src}, |
|
'csv','display', |
|
@extra_resp_headers); |
|
$start_col{$prob->symb}->{$partid}->{$responses->[$i]}= |
|
$max_column; |
|
$headers{'response'}->[$max_column]= |
&mt('Response [_1]',$responses->[$i]); |
&mt('Response [_1]',$responses->[$i]); |
for (my $j=0;$j<=$#extra_resp_headers;$j++) { |
for (my $j=0;$j<=$#headers;$j++) { |
$headers{'student'}->[$resp_idx+$j]=$extra_resp_headers[$j]; |
$headers{'student'}->[$max_column+$j]=$headers[$j]; |
} |
} |
|
$max_column += scalar(@headers); |
} |
} |
$part_start_idx += scalar(@$responses)*$response_multiplier; |
|
} |
} |
$prob_start_idx += $prob->countResponses * $response_multiplier; |
|
} |
} |
foreach my $row ('problem','part','response','student') { |
foreach my $row ('problem','part','response','student') { |
print $outputfile '"'.join('","',map { ''; } @student_columns).'","'. |
print $outputfile '"'. |
join('","', |
join('","', |
map { |
map { |
&Apache::loncommon::csv_translate($_); |
&Apache::loncommon::csv_translate($_); |
Line 947 sub prepare_csv_output {
|
Line 949 sub prepare_csv_output {
|
foreach my $student (@$students) { |
foreach my $student (@$students) { |
last if ($c->aborted()); |
last if ($c->aborted()); |
my @rows; |
my @rows; |
my $prob_start_idx = 0; |
|
foreach my $prob (@$problems) { |
foreach my $prob (@$problems) { |
my $part_start_idx = 0; |
|
foreach my $partid (@{$prob->parts}) { |
foreach my $partid (@{$prob->parts}) { |
my @responses = $prob->responseIds($partid); |
my @responses = $prob->responseIds($partid); |
my @response_type = $prob->responseType($partid); |
my @response_type = $prob->responseType($partid); |
for (my $i=0;$i<=$#responses;$i++) { |
for (my $i=0;$i<=$#responses;$i++) { |
my $resp_start_idx = $response_multiplier * $i; |
|
my $respid = $responses[$i]; |
my $respid = $responses[$i]; |
|
my $resptype = $response_type[$i]; |
|
my @headers = &get_headers($prob,$partid,$respid,$resptype, |
|
$problem_analysis{$prob->src}, |
|
'csv','normal', |
|
@extra_resp_headers); |
my $results = |
my $results = |
&Apache::loncoursedata::get_response_data_by_student |
&Apache::loncoursedata::get_response_data_by_student |
($student,$prob->symb(),$respid); |
($student,$prob->symb(),$respid); |
Line 967 sub prepare_csv_output {
|
Line 971 sub prepare_csv_output {
|
next if ($j != 0); |
next if ($j != 0); |
} |
} |
my $idx = scalar(@$results) - $j - 1; |
my $idx = scalar(@$results) - $j - 1; |
my $response = $results->[$idx]; |
my $response = &hashify_response($results->[$idx], |
my @data = &compile_response_data($response,$student, |
$prob,$student, |
|
$partid,$respid); |
|
my @data = &compile_response_data(\@headers,$response, |
$prob,$partid, |
$prob,$partid, |
$respid); |
$respid,$resptype, |
|
\&csv_format_item); |
|
my $resp_start_idx = |
|
$start_col{$prob->symb}->{$partid}->{$respid}; |
for (my $k=0;$k<=$#data;$k++) { |
for (my $k=0;$k<=$#data;$k++) { |
$rows[$j]->[$prob_start_idx + $part_start_idx + |
$rows[$j]->[$resp_start_idx + $k] = $data[$k]; |
$resp_start_idx + $k] = $data[$k]; |
|
} |
} |
} |
} |
} |
} |
$part_start_idx += scalar(@responses)*$response_multiplier; |
|
} |
} |
$prob_start_idx += $prob->countResponses * $response_multiplier; |
|
} |
} |
foreach my $row (@rows) { |
foreach my $row (@rows) { |
print $outputfile '"'.join('","', |
print $outputfile '"'.join('","', |
map { $student->{$_}; } |
map { $student->{$_}; } |
@student_columns).'"'; |
@student_columns).'"'; |
|
for (my $i=scalar(@student_columns);$i<$max_column;$i++) { |
for (my $i=0;$i<$prob_start_idx;$i++) { |
|
my $value = &Apache::loncommon::csv_translate($row->[$i]); |
my $value = &Apache::loncommon::csv_translate($row->[$i]); |
$value ||=''; |
$value ||=''; |
print $outputfile ',"'.$value.'"'; |
print $outputfile ',"'.$value.'"'; |
Line 1009 sub prepare_csv_output {
|
Line 1014 sub prepare_csv_output {
|
return; |
return; |
} |
} |
|
|
sub compile_response_data { |
sub csv_format_item { |
my ($response,$student,$prob,$partid,$respid) = @_; |
my ($item,$type) = @_; |
my @rowdata; |
if ($type eq 'Time') { |
push(@rowdata,&Apache::lonnet::unescape($response->[&Apache::loncoursedata::RDs_submission()])); |
$item = localtime($item); |
if ($ENV{'form.correctans'} eq 'true') { |
|
my $correct = &Apache::lonstathelpers::get_student_answer |
|
($prob,$student->{'username'},$student->{'domain'}, |
|
$partid,$respid); |
|
push(@rowdata,$correct); |
|
} |
|
if ($ENV{'form.prob_status'}) { |
|
push(@rowdata,$response->[&Apache::loncoursedata::RDs_awarddetail()]); |
|
push(@rowdata,&Apache::lonlocal::locallocaltime |
|
($response->[&Apache::loncoursedata::RDs_timestamp()])); |
|
push(@rowdata,$response->[&Apache::loncoursedata::RDs_tries()]); |
|
push(@rowdata,$response->[&Apache::loncoursedata::RDs_awarded()]); |
|
} |
} |
return @rowdata; |
$item =&Apache::loncommon::csv_translate($item); |
|
return $item; |
} |
} |
|
|
######################################################### |
######################################################### |