--- loncom/interface/Attic/lonspreadsheet.pm 2002/04/11 13:35:23 1.84 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/05/30 13:37:09 1.90 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.84 2002/04/11 13:35:23 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.90 2002/05/30 13:37:09 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -122,6 +122,8 @@ sub initsheet { $safeeval->permit("sort"); $safeeval->deny(":base_io"); $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); + $safehole->wrap(\&send_msg, $safeeval,"&send_msg"); + $safehole->wrap(\&send_crit_msg,$safeeval,"&send_crit_msg"); my $code=<<'ENDDEFS'; # ---------------------------------------------------- Inside of the safe space @@ -740,7 +742,25 @@ sub expandnamed { return 0; } } else { - return '$c{\''.$expression.'\'}'; + # it is not a function, so it is a parameter name + # We should do the following: + # 1. Take the list of parameter names + # 2. look through the list for ones that match the parameter we want + # 3. If there are no collisions, return the one that matches + # 4. If there is a collision, return 'bad parameter name error' + my $returnvalue = ''; + my @matches = (); + $#matches = -1; + study $expression; + foreach $parameter (keys(%c)) { + push @matches,$parameter if ($parameter =~ /$expression/); + } + if ($#matches == 0) { + $returnvalue = '$c{\''.$matches[0].'\'}'; + } else { + $returnvalue = "'bad parameter name : $expression'"; + } + return $returnvalue; } } @@ -760,11 +780,17 @@ sub sett { if ($_=~/A(\d+)/) { my $trow=$1; if ($trow) { + # Get the name of this cell my $lb=$col.$trow; + # Grab the template declaration $t{$lb}=$f{'template_'.$col}; + # Replace '#' with the row number $t{$lb}=~s/\#/$trow/g; + # Replace '....' with ',' $t{$lb}=~s/\.\.+/\,/g; + # Replace 'A0' with the value from 'A0' $t{$lb}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; + # Replace parameters $t{$lb}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge; } } @@ -787,6 +813,8 @@ sub sett { } } } + # For some reason 'A0' gets special treatment... This seems superfluous + # but I imagine it is here for a reason. $t{'A0'}=$f{'A0'}; $t{'A0'}=~s/\.\.+/\,/g; $t{'A0'}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; @@ -1284,6 +1312,9 @@ sub readsheet { } else { $fn = $tmphash{'spreadsheet_default_'.$stype}; } + unless (($fn) && ($fn!~/^error\:/)) { + $fn='default_'.$stype; + } $defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; } } @@ -1316,17 +1347,11 @@ sub readsheet { } elsif($fn=~/\/*\.spreadsheet$/) { my $sheetxml=&Apache::lonnet::getfile (&Apache::lonnet::filelocation('',$fn)); - print "
$sheetxml
"; if ($sheetxml == -1) { $sheetxml='"Error loading spreadsheet ' .$fn.'"'; } %f=%{&parse_sheet(\$sheetxml)}; - print "
";
-         foreach (sort( keys(%f))) {
-             print "$_ = $f{$_}\n";
-         }
-         print "
"; } else { my $sheet=''; my %tmphash = &Apache::lonnet::dump($fn,$cdom,$cnum); @@ -2377,17 +2402,8 @@ $tmpdir=$r->dir_config('lonDaemons').'/t # --------------------------- Get query string for limited number of parameters - foreach (split(/&/,$ENV{'QUERY_STRING'})) { - my ($name, $value) = split(/=/,$_); - $value =~ tr/+/ /; - $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; - if (($name eq 'uname') || ($name eq 'udom') || - ($name eq 'usymb') || ($name eq 'ufn')) { - unless ($ENV{'form.'.$name}) { - $ENV{'form.'.$name}=$value; - } - } - } + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['uname','udom','usymb','ufn']); if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) { $ENV{'form.ufn'}='default_'.$1; @@ -2425,8 +2441,8 @@ $tmpdir=$r->dir_config('lonDaemons').'/t function celledit(cn,cf) { var cnf=prompt(cn,cf); - if (cnf!=null) { - document.sheet.unewfield.value=cn; + if (cnf!=null) { + document.sheet.unewfield.value=cn; document.sheet.unewformula.value=cnf; document.sheet.submit(); } @@ -2654,6 +2670,7 @@ ENDSCRIPT } } $r->print('>'); + if (&gettype($asheet) eq 'classcalc') { $r->print( ' Output CSV format: