--- loncom/interface/spreadsheet/assesscalc.pm 2005/05/17 18:01:58 1.48 +++ loncom/interface/spreadsheet/assesscalc.pm 2006/05/15 23:44:46 1.51.2.1 @@ -1,5 +1,5 @@ # -# $Id: assesscalc.pm,v 1.48 2005/05/17 18:01:58 albertel Exp $ +# $Id: assesscalc.pm,v 1.51.2.1 2006/05/15 23:44:46 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -312,6 +312,7 @@ sub parmval { # This should be a if (!defined($mapname) || !defined($id) || !defined($fn)) { ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb); + $mapname = &Apache::lonnet::deversion($mapname); } # Cascading lookup scheme my $rwhat=$what; @@ -631,6 +632,7 @@ sub get_parameter_values { if (tie(%parmhash,'GDBM_File', $self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) { my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($self->{'symb'}); + $mapname = &Apache::lonnet::deversion($mapname); foreach my $parmname (@Parameters) { my $value = $self->parmval($parmname,$self->{'symb'}, $self->{'name'},$self->{'domain'}, @@ -703,15 +705,17 @@ sub parameter_part_is_valid { return 1; } # - my (undef,$part) = - ($parameter =~ m/^(resource|stores|parameter)_([^_]+)_.*/); - if (exists($self->{'Parts'}) && - exists($self->{'Parts'}->{$part}) && - $self->{'Parts'}->{$part} ) { - return 1; - } else { - return 0; + my ($start,@pieces)=split('_',$parameter); + if ( $start !~ m/^(resource|stores|parameter)$/) { return 0; } + while (@pieces) { + pop(@pieces); + my $testpart=join('_',@pieces); + if (exists($self->{'Parts'}->{$testpart}) && + $self->{'Parts'}->{$testpart} ) { + return 1; + } } + return 0; } sub compute { @@ -786,9 +790,15 @@ sub compute { if ($parm =~ /_submission$/ && $value =~ /(\{|\})/) { $value = 'witheld'; } - #$value = 'q{'.$value.'}' if ($value =~/([^\d\.]|\.\.)/); + $value = 'q{'.$value.'}' if ($value =~/([^\d\.]|\.\.)/); $c{$parm} = $value; } + foreach my $cell (grep(/^A/,keys(%f))) { + # Clean out any bad formulas + next if (exists($c{$f{$cell}})); + next if ($cell eq 'A0'); + delete($f{$cell}); + } $self->formulas(\%f); $self->constants(\%c); $self->calcsheet(); @@ -837,7 +847,7 @@ sub sett { && $self->{'constants'}->{$formula} ne '' ) { $Apache::Spreadsheet::sheet_values{$cell}= - $self->{'constants'}->{$formula}; + eval($self->{'constants'}->{$formula}); } } else { $t{$cell}=$formula;