--- loncom/interface/spreadsheet/assesscalc.pm 2005/03/03 17:52:36 1.37 +++ loncom/interface/spreadsheet/assesscalc.pm 2005/05/15 02:18:12 1.41 @@ -1,5 +1,5 @@ # -# $Id: assesscalc.pm,v 1.37 2005/03/03 17:52:36 matthew Exp $ +# $Id: assesscalc.pm,v 1.41 2005/05/15 02:18:12 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -125,7 +125,7 @@ sub clear_package { if (defined($current_name) && defined($current_domain) && defined($current_course) && - $current_course eq $ENV{'request.course.id'} && + $current_course eq $env{'request.course.id'} && %newExportrows) { &save_cached_export_rows($current_name,$current_domain); } @@ -143,7 +143,7 @@ sub clear_package { sub save_cached_export_rows { my ($sname,$sdomain) = @_; my $result = &Apache::lonnet::put - ('nohist_calculatedsheets_'.$ENV{'request.course.id'}, + ('nohist_calculatedsheets_'.$env{'request.course.id'}, $newExportrows{$sname.':'.$sdomain}, $sdomain,$sname); delete($newExportrows{$sname.':'.$sdomain}); @@ -180,8 +180,8 @@ sub initialize_package { $navmap = $in_navmap; undef(%useropt); undef(%userdata); - if ($current_course ne $ENV{'request.course.id'}) { - $current_course = $ENV{'request.course.id'}; + if ($current_course ne $env{'request.course.id'}) { + $current_course = $env{'request.course.id'}; undef(%courseopt); } &load_cached_export_rows(); @@ -207,13 +207,13 @@ sub load_parameter_caches { # # Course Parameters Cache if (! %courseopt) { - $current_course = $ENV{'request.course.id'}; + $current_course = $env{'request.course.id'}; undef(%courseopt); if (! defined($current_name) || ! defined($current_domain)) { return; } - my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; - my $id = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $id = $env{'course.'.$env{'request.course.id'}.'.num'}; my %Tmp = &Apache::lonnet::dump('resourcedata',$dom,$id); while (my ($name,$value) = each(%Tmp)) { $courseopt{$name}=$value; @@ -256,8 +256,8 @@ sub ensure_current_caches { ## Check for a modified parameters ## if (! defined($current_course) || - $current_course ne $ENV{'request.course.id'} ) { - $current_course = $ENV{'request.course.id'}; + $current_course ne $env{'request.course.id'} ) { + $current_course = $env{'request.course.id'}; undef(%courseopt); undef(%useropt); undef(%userdata); @@ -562,15 +562,15 @@ sub excel_rows { # writes the meat of the spreadsheet to an excel worksheet. Called # by Spreadsheet::outsheet_excel; my $self = shift; - my ($connection,$worksheet,$cols_output,$rows_output) = @_; + my ($connection,$worksheet,$cols_output,$rows_output,$format) = @_; return if (! ref($worksheet)); # # Write a header row $cols_output = 0; foreach my $value ('Parameter','Description','Value') { - $worksheet->write($rows_output,$cols_output++,$value); + $worksheet->write($rows_output,$cols_output++,$value,$format->{'h4'}); } - $rows_output++; + $rows_output++; # # Write each row foreach my $rownum (sort {$a <=> $b} ($self->rows())) { @@ -661,6 +661,7 @@ sub get_problem_state { sub determine_parts { my $self = shift; + my $check_hidden = shift; if (exists($self->{'Parts'}) && ref($self->{'Parts'}) eq 'HASH') { return; } @@ -671,9 +672,10 @@ sub determine_parts { my $metadata = &Apache::lonnet::metadata($src,'packages'); foreach (split(',',$metadata)) { my ($part) = (/^part_(.*)$/); - if (defined($part) && - ! &Apache::loncommon::check_if_partid_hidden - ($part,$self->{'symb'},$self->{'name'},$self->{'domain'}) + if (!defined($part)) { next; } + if (!$check_hidden) { $Parts{$part}++; next; } + if (!&Apache::loncommon::check_if_partid_hidden + ($part,$self->{'symb'},$self->{'name'},$self->{'domain'}) ) { $Parts{$part}++; } @@ -749,19 +751,14 @@ sub compute { } # # Get the students performance data + $self->determine_parts(exists($parameters{'parameter_0_hiddenparts'})); my %student_parameters = $self->get_problem_state(); while (my ($parm,$value) = each(%student_parameters)) { $parm =~ s/^resource\./stores_/; $parm =~ s/\./_/g; - $parameters{$parm} = $value; - } - # - # Clean out any bad parameters - $self->determine_parts(); - foreach my $param (keys(%parameters)) { - if (! $self->parameter_part_is_valid($param)) { - delete ($parameters{$param}); - } + # Clean out any bad parameters + next if (! $self->parameter_part_is_valid($parm)); + $parameters{$parm} = $value; } # # Set up the formulas and parameter values @@ -769,7 +766,7 @@ sub compute { my %c; # # Check for blackout requirements - if ((!exists($ENV{'request.role.adv'}) || !$ENV{'request.role.adv'})) { + if ((!exists($env{'request.role.adv'}) || !$env{'request.role.adv'})) { while (my ($parm,$value) = each(%parameters)) { last if ($self->blackout()); next if ($parm !~ /^(parameter_.*)_problemstatus$/); @@ -814,6 +811,7 @@ sub compute { sub sett { my $self = shift; my %t=(); + undef(%Apache::Spreadsheet::sheet_values); # # Deal with the template row by copying the template formulas into each # row. @@ -840,7 +838,8 @@ sub sett { next if ($cell =~ /template_/); if ($cell =~ /^A/ && $cell ne 'A0') { if ($formula !~ /^\!/) { - $t{$cell}=$self->{'constants'}->{$formula}; + $Apache::Spreadsheet::sheet_values{$cell}= + eval($self->{'constants'}->{$formula}); } } else { $t{$cell}=$formula; @@ -875,11 +874,11 @@ These rows are saved in the students dir sub load_cached_export_rows { undef(%Exportrows); my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'. - $ENV{'request.course.id'}, + $env{'request.course.id'}, $current_domain,$current_name,undef); if ($tmp[0]!~/^error/) { my %tmp = @tmp; - my $default_filename = $ENV{'course.'.$ENV{'request.course.id'}. + my $default_filename = $env{'course.'.$env{'request.course.id'}. '.spreadsheet_default_assesscalc'}; # We only got one key, so we will access it directly. while (my ($key,$sheetdata) = each(%tmp)) { @@ -921,7 +920,7 @@ sub export_data { my ($r) = @_; my $connection = $r->connection(); my $symb = $self->{'symb'}; - if (! exists($ENV{'request.role.adv'}) || ! $ENV{'request.role.adv'} || + if (! exists($env{'request.role.adv'}) || ! $env{'request.role.adv'} || ! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb}) || ! $self->check_expiration_time($Exportrows{$symb}->{'time'}) || ! exists($Exportrows{$symb}->{$self->{'filename'}}) ||