version 1.81, 2002/04/08 18:28:03
|
version 1.82, 2002/04/09 18:41:11
|
Line 1149 sub othersheets {
|
Line 1149 sub othersheets {
|
return @alternatives; |
return @alternatives; |
} |
} |
|
|
|
|
|
# |
|
# -------------------------------------- Parse a spreadsheet |
|
# |
|
sub parse_sheet { |
|
# $sheetxml is a scalar reference or a scalar |
|
my ($sheetxml) = @_; |
|
if (! ref($sheetxml)) { |
|
my $tmp = $sheetxml; |
|
$sheetxml = \$tmp; |
|
} |
|
my %f; |
|
my $parser=HTML::TokeParser->new($sheetxml); |
|
my $token; |
|
while ($token=$parser->get_token) { |
|
if ($token->[0] eq 'S') { |
|
if ($token->[1] eq 'field') { |
|
$f{$token->[2]->{'col'}.$token->[2]->{'row'}}= |
|
$parser->get_text('/field'); |
|
} |
|
if ($token->[1] eq 'template') { |
|
$f{'template_'.$token->[2]->{'col'}}= |
|
$parser->get_text('/template'); |
|
} |
|
} |
|
} |
|
return \%f; |
|
} |
|
|
# |
# |
# -------------------------------------- Read spreadsheet formulas for a course |
# -------------------------------------- Read spreadsheet formulas for a course |
# |
# |
Line 1160 sub readsheet {
|
Line 1189 sub readsheet {
|
my $cdom=&getcdom($safeeval); |
my $cdom=&getcdom($safeeval); |
my $chome=&getchome($safeeval); |
my $chome=&getchome($safeeval); |
|
|
# --------- There is no filename. Look for defaults in course and global, cache |
if (! defined($fn) || $fn eq '') { |
|
# There is no filename. Look for defaults in course and global, cache |
unless($fn) { |
|
unless ($fn=$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}) { |
unless ($fn=$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}) { |
$fn=&Apache::lonnet::reply('get:'.$cdom.':'.$cnum. |
my %tmphash = &Apache::lonnet::get('environment', |
':environment:spreadsheet_default_'.$stype, |
['spreadsheet_default_'.$stype], |
$chome); |
$cdom,$cnum); |
unless (($fn) && ($fn!~/^error\:/)) { |
my ($tmp) = keys(%tmphash); |
$fn='default_'.$stype; |
if ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
} |
$fn = 'default_'.$stype; |
$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; |
} else { |
|
$fn = $tmphash{'spreadsheet_default_'.$stype}; |
|
} |
|
$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; |
|
} |
|
} else { |
|
# We do have a filename, do a get on it. |
|
my %tmphash = &Apache::lonnet::get('environment', |
|
[$fn], |
|
$cdom,$cnum); |
|
my ($tmp) = keys(%tmphash); |
|
if ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
|
# On error, grab the default filename |
|
$fn = 'default_'.$stype; |
|
} else { |
|
$fn = $tmphash{$fn}; |
} |
} |
|
$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; |
} |
} |
|
|
# ---------------------------------------------------------- fn now has a value |
# ---------------------------------------------------------- fn now has a value |
Line 1189 sub readsheet {
|
Line 1233 sub readsheet {
|
my %f=(); |
my %f=(); |
|
|
if ($fn=~/^default\_/) { |
if ($fn=~/^default\_/) { |
my $sheetxml=''; |
my $sheetxml=''; |
{ |
|
my $fh; |
my $fh; |
my $dfn=$fn; |
my $dfn=$fn; |
$dfn=~s/\_/\./g; |
$dfn=~s/\_/\./g; |
if ($fh=Apache::File->new($includedir.'/'.$dfn)) { |
if ($fh=Apache::File->new($includedir.'/'.$dfn)) { |
$sheetxml=join('',<$fh>); |
$sheetxml=join('',<$fh>); |
} else { |
} else { |
$sheetxml='<field row="0" col="A">"Error"</field>'; |
$sheetxml='<field row="0" col="A">"Error"</field>'; |
} |
} |
} |
%f=&parse_sheet(\$sheetxml); |
my $parser=HTML::TokeParser->new(\$sheetxml); |
} elsif($fn=~/\/*\.spreadsheet$/) { |
my $token; |
my $sheetxml=''; |
while ($token=$parser->get_token) { |
my $fh; |
if ($token->[0] eq 'S') { |
my $dfn=$fn; |
if ($token->[1] eq 'field') { |
$dfn=~s/\_/\./g; |
$f{$token->[2]->{'col'}.$token->[2]->{'row'}}= |
|
$parser->get_text('/field'); |
if ($fn !~ /^$Apache::lonnet::perlvar{'lonDocRoot'}\/res/) { |
} |
$fn = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'.$fn; |
if ($token->[1] eq 'template') { |
} |
$f{'template_'.$token->[2]->{'col'}}= |
if ($fn !~ /^$Apache::lonnet::perlvar{'lonDocRoot'}/) { |
$parser->get_text('/template'); |
$fn = $Apache::lonnet::perlvar{'lonDocRoot'}.$fn; |
|
} |
|
if ($fh=Apache::File->new($fn)) { |
|
$sheetxml=join('',<$fh>); |
|
} else { |
|
$sheetxml='<field row="0" col="A">"Error loading spreadsheet ' |
|
.$fn.'"</field>'; |
|
} |
|
%f=&parse_sheet(\$sheetxml); |
|
} else { |
|
my $sheet=''; |
|
my %tmphash = &Apache::lonnet::dump($fn,$cdom,$cnum); |
|
my ($tmp) = keys(%tmphash); |
|
unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
|
foreach (keys(%tmphash)) { |
|
$f{$_}=$tmphash{$_}; |
} |
} |
} |
} |
} |
} |
} else { |
|
my $sheet=''; |
|
my %tmphash = &Apache::lonnet::dump($fn,$cdom,$cnum); |
|
my ($tmp) = keys(%tmphash); |
|
unless ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
|
foreach (keys(%tmphash)) { |
|
$f{$_}=$tmphash{$_}; |
|
} |
|
} |
|
} |
|
# --------------------------------------------------------------- Cache and set |
# --------------------------------------------------------------- Cache and set |
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f); |
$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}=join('___;___',%f); |
&setformulas($safeeval,%f); |
&setformulas($safeeval,%f); |