--- loncom/interface/spreadsheet/Spreadsheet.pm 2003/12/08 19:43:03 1.32
+++ loncom/interface/spreadsheet/Spreadsheet.pm 2005/04/29 18:12:21 1.37.2.2
@@ -1,5 +1,5 @@
#
-# $Id: Spreadsheet.pm,v 1.32 2003/12/08 19:43:03 matthew Exp $
+# $Id: Spreadsheet.pm,v 1.37.2.2 2005/04/29 18:12:21 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -86,6 +86,12 @@ sub new {
my ($stype) = ($class =~ /Apache::(.*)$/);
#
my ($name,$domain,$filename,$usymb)=@_;
+ if (! defined($name) || $name eq '') {
+ $name = $ENV{'user.name'};
+ }
+ if (! defined($domain) || $domain eq '') {
+ $domain = $ENV{'user.domain'};
+ }
#
my $self = {
name => $name,
@@ -160,7 +166,8 @@ sub filename {
if ($newfilename !~ /\w/ || $newfilename =~ /^\W*$/) {
$newfilename = 'default_'.$self->{'type'};
}
- if ($newfilename !~ /^default\.$self->{'type'}$/ ) {
+ if ($newfilename !~ /^default\.$self->{'type'}$/ &&
+ $newfilename !~ /^\/res\/(.*)spreadsheet$/) {
if ($newfilename !~ /_$self->{'type'}$/) {
$newfilename =~ s/[\s_]*$//;
$newfilename .= '_'.$self->{'type'};
@@ -564,7 +571,7 @@ sub SUMMAX {
foreach (grep eval("/$mask/"),keys(%sheet_values)) {
push (@inside,$sheet_values{$_});
}
- @inside=sort(@inside);
+ @inside=sort {$a <=> $b} (@inside);
my $sum=0; my $i;
for ($i=$#inside;(($i>$#inside-$num) && ($i>=0));$i--) {
$sum+=$inside[$i];
@@ -591,7 +598,7 @@ sub SUMMIN {
foreach (grep eval("/$mask/"),keys(%sheet_values)) {
$inside[$#inside+1]=$sheet_values{$_};
}
- @inside=sort(@inside);
+ @inside=sort {$a <=> $b} (@inside);
my $sum=0; my $i;
for ($i=0;(($i<$num) && ($i<=$#inside));$i++) {
$sum+=$inside[$i];
@@ -614,7 +621,6 @@ parametername should be a string such as
sub MINPARM {
my ($expression) = @_;
my $min = undef;
- study($expression);
foreach $parameter (keys(%c)) {
next if ($parameter !~ /$expression/);
if ((! defined($min)) || ($min > $c{$parameter})) {
@@ -639,7 +645,6 @@ parametername should be a string such as
sub MAXPARM {
my ($expression) = @_;
my $max = undef;
- study($expression);
foreach $parameter (keys(%c)) {
next if ($parameter !~ /$expression/);
if ((! defined($min)) || ($max < $c{$parameter})) {
@@ -845,7 +850,6 @@ sub expandnamed {
my @matches = ();
my @values = ();
$#matches = -1;
- study $expression;
while (my($parameter,$value) = each(%{$self->{'constants'}})) {
next if ($parameter !~ /$expression/);
push(@matches,$parameter);
@@ -907,7 +911,8 @@ 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})) {
+ if ($formula !~ /^\!/ && exists($self->{'constants'}->{$cell})
+ && $self->{'constants'}->{$cell} ne '') {
my $data = $self->{'constants'}->{$cell};
$t{$cell} = $data;
}
@@ -1209,6 +1214,9 @@ sub display {
} elsif ($outputmode eq 'csv') {
$self->compute($r);
$self->outsheet_csv($r);
+ } elsif ($outputmode eq 'xml') {
+# $self->compute($r);
+ $self->outsheet_xml($r);
}
$self->cleanup();
return;
@@ -1287,7 +1295,7 @@ sub html_editable_cell {
} elsif ($value =~ /^\s*$/ ) {
$value = '#';
} else {
- $value = &HTML::Entities::encode($value) if ($value !~/ /);
+ $value = &HTML::Entities::encode($value,'<>&"') if ($value !~/ /);
}
return $value if (! $allowed);
#
@@ -1310,7 +1318,7 @@ sub html_editable_cell {
sub html_uneditable_cell {
my ($cell,$bgcolor) = @_;
my $value = (defined($cell) ? $cell->{'value'} : '');
- $value = &HTML::Entities::encode($value) if ($value !~/ /);
+ $value = &HTML::Entities::encode($value,'<>&"') if ($value !~/ /);
return ' '.$value.' ';
}
@@ -1356,6 +1364,8 @@ sub output_options {
description => 'HTML'},
{value => 'excel',
description => 'Excel'},
+# {value => 'xml',
+# description => 'XML'},
{value => 'csv',
description => 'Comma Separated Values'},);
}
@@ -1551,17 +1561,20 @@ sub outsheet_xml {
## But not on this day
my $Str = '
\n\n\n".$Str."\n\n\n"); return $Str; } @@ -1588,8 +1601,7 @@ sub parse_sheet { $formulas{$cell} = $formula; $sources{$cell} = $source if (defined($source)); $parser->get_text('/field'); - } - if ($token->[1] eq 'template') { + } elsif ($token->[1] eq 'template') { $formulas{'template_'.$token->[2]->{'col'}}= $parser->get_text('/template'); } @@ -1643,7 +1655,7 @@ sub load { # Not cached, need to read if (! defined($filename)) { $formulas = $self->load_system_default_sheet(); - } elsif($self->filename() =~ /^\/res\/.*\.spreadsheet$/) { + } elsif($filename =~ /^\/res\/.*\.spreadsheet$/) { # Load a spreadsheet definition file my $sheetxml=&Apache::lonnet::getfile (&Apache::lonnet::filelocation('',$filename));