--- loncom/interface/spreadsheet/Spreadsheet.pm 2005/04/29 18:12:21 1.37.2.2 +++ loncom/interface/spreadsheet/Spreadsheet.pm 2005/02/03 23:59:41 1.38 @@ -1,5 +1,5 @@ # -# $Id: Spreadsheet.pm,v 1.37.2.2 2005/04/29 18:12:21 albertel Exp $ +# $Id: Spreadsheet.pm,v 1.38 2005/02/03 23:59:41 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -313,6 +313,9 @@ Returns the safe space required by a Spr sub initialize_safe_space { my $self = shift; + my $usection = &Apache::lonnet::getsection($self->{'domain'}, + $self->{'name'}, + $ENV{'request.course.id'}); if (! defined($safeeval)) { $safeeval = new Safe(shift); my $safehole = new Safe::Hole; @@ -320,7 +323,7 @@ sub initialize_safe_space { $safeeval->permit(":base_math"); $safeeval->permit("sort"); $safeeval->deny(":base_io"); - $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); + $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&Apache::lonnet::EXT'); $safehole->wrap(\&mask,$safeeval,'&mask'); $safeeval->share('$@'); my $code=<<'ENDDEFS'; @@ -379,6 +382,25 @@ $errormsg = ''; =pod +=item EXT(parameter) + +Calls the system EXT function to determine the value of the given parameter. + +=cut + +#------------------------------------------------------- +sub EXT { + my ($parameter) = @_; + return '' if (! defined($parameter) || $parameter eq ''); + $parameter =~ s/^parameter\./resource\./; + my $value = &Apache::lonnet::EXT($parameter,$symb,$domain,$name,$usection); + return $value; +} + +#------------------------------------------------------- + +=pod + =item NUM(range) returns the number of items in the range. @@ -571,7 +593,7 @@ sub SUMMAX { foreach (grep eval("/$mask/"),keys(%sheet_values)) { push (@inside,$sheet_values{$_}); } - @inside=sort {$a <=> $b} (@inside); + @inside=sort(@inside); my $sum=0; my $i; for ($i=$#inside;(($i>$#inside-$num) && ($i>=0));$i--) { $sum+=$inside[$i]; @@ -598,7 +620,7 @@ sub SUMMIN { foreach (grep eval("/$mask/"),keys(%sheet_values)) { $inside[$#inside+1]=$sheet_values{$_}; } - @inside=sort {$a <=> $b} (@inside); + @inside=sort(@inside); my $sum=0; my $i; for ($i=0;(($i<$num) && ($i<=$#inside));$i++) { $sum+=$inside[$i]; @@ -696,10 +718,11 @@ ENDDEFS # Place some of the %$self items into the safe space except the safe space # itself my $initstring = ''; - foreach (qw/name domain type usymb cid csec coursefilename + foreach (qw/name domain type symb cid csec coursefilename cnum cdom chome uhome/) { $initstring.= qq{\$$_="$self->{$_}";}; } + $initstring.=qq{\$usection="$usection";}; $self->{'safe'}->reval($initstring); return $self; } @@ -911,8 +934,7 @@ sub sett { $t{$cell}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$sheet_values\{\'$2\'\}/g; $t{$cell}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.$self->expandnamed($2)/ge; } elsif ( $col =~ /^[A-Z]$/ ) { - if ($formula !~ /^\!/ && exists($self->{'constants'}->{$cell}) - && $self->{'constants'}->{$cell} ne '') { + if ($formula !~ /^\!/ && exists($self->{'constants'}->{$cell})) { my $data = $self->{'constants'}->{$cell}; $t{$cell} = $data; }