--- loncom/interface/spreadsheet/assesscalc.pm 2005/04/07 06:56:23 1.39 +++ loncom/interface/spreadsheet/assesscalc.pm 2005/05/15 02:28:23 1.43 @@ -1,5 +1,5 @@ # -# $Id: assesscalc.pm,v 1.39 2005/04/07 06:56:23 albertel Exp $ +# $Id: assesscalc.pm,v 1.43 2005/05/15 02:28:23 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -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}++; } @@ -708,8 +710,6 @@ sub parameter_part_is_valid { sub compute { my $self = shift; my ($r) = @_; - my $connection = $r->connection(); - if ($connection->aborted()) { $self->cleanup(); return; } $self->initialize_safe_space(); ######################################### ######################################### @@ -737,11 +737,8 @@ sub compute { } # # Get the values of the metadata fields - if ($connection->aborted()) { $self->cleanup(); return; } $self->ensure_current_caches(); - if ($connection->aborted()) { $self->cleanup(); return; } %parameters = $self->get_parameter_values(keys(%parameters)); - if ($connection->aborted()) { $self->cleanup(); return; } # # Clean out unnecessary parameters foreach (keys(%parameters)) { @@ -749,19 +746,14 @@ sub compute { } # # Get the students performance data + $self->determine_parts(($parameters{'parameter_0_hiddenparts'} ne '')); 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 @@ -783,7 +775,6 @@ sub compute { } } } - if ($connection->aborted()) { $self->cleanup(); return; } # # Move the parameters into the spreadsheet while (my ($parm,$value) = each(%parameters)) { @@ -797,14 +788,12 @@ sub compute { } $self->formulas(\%f); $self->constants(\%c); - if ($connection->aborted()) { $self->cleanup(); return; } $self->calcsheet(); # # Store export row in cache my @exportarray = $self->exportrow(); $self->deal_with_export_row(@exportarray); $self->save() if ($self->need_to_save()); - if ($connection->aborted()) { $self->cleanup(); return; } return; } @@ -814,6 +803,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 +830,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; @@ -919,7 +910,6 @@ spreadsheet only if necessary. sub export_data { my $self = shift; my ($r) = @_; - my $connection = $r->connection(); my $symb = $self->{'symb'}; if (! exists($env{'request.role.adv'}) || ! $env{'request.role.adv'} || ! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb}) || @@ -930,7 +920,6 @@ sub export_data { ) { $self->compute($r); } - if ($connection->aborted()) { $self->cleanup(); return; } my @Data; if ($self->badcalc()) { @Data = ();