version 1.12, 2003/05/29 18:31:27
|
version 1.13, 2003/06/18 15:32:37
|
Line 145 sub filename {
|
Line 145 sub filename {
|
if (@_) { |
if (@_) { |
my ($newfilename) = @_; |
my ($newfilename) = @_; |
if (! defined($newfilename) || $newfilename eq 'Default' || |
if (! defined($newfilename) || $newfilename eq 'Default' || |
$newfilename !~ /\w/) { |
$newfilename !~ /\w/ || $newfilename eq '') { |
my %tmphash = &Apache::lonnet::get('environment', |
my $key = 'course.'.$self->{'cid'}.'.spreadsheet_default_'. |
['spreadsheet_default_'. |
$self->{'type'}; |
$self->{'type'}], |
if (exists($ENV{$key}) && $ENV{$key} ne '') { |
$self->{'cdom'}, |
$newfilename = $ENV{$key}; |
$self->{'cnum'}); |
} else { |
my ($tmp) = keys(%tmphash); |
$newfilename = 'default_'.$self->{'type'}; |
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
|
$newfilename=$tmphash{'spreadsheet_default_'.$self->{'type'}}; |
|
} |
|
if (! defined($newfilename) || |
|
$newfilename !~ /\w/ || |
|
$newfilename =~ /^\W*$/) { |
|
$newfilename = 'default.'.$self->{'type'}; |
|
} |
} |
} elsif ($newfilename !~ /^\/res\/.*\.spreadsheet/ && |
} |
$newfilename !~ /^default\.$self->{'type'}$/ ) { |
if ($newfilename !~ /\w/ || $newfilename =~ /^\W*$/) { |
my $regexp = '_'.$self->{'type'}.'$'; |
$newfilename = 'default_'.$self->{'type'}; |
if ($newfilename !~ /$regexp/) { |
} |
|
if ($newfilename !~ /^default\.$self->{'type'}$/ ) { |
|
if ($newfilename !~ /_$self->{'type'}$/) { |
|
$newfilename =~ s/[\s_]*$//; |
$newfilename .= '_'.$self->{'type'}; |
$newfilename .= '_'.$self->{'type'}; |
} |
} |
} |
} |
Line 188 default spreadsheets.......!
|
Line 184 default spreadsheets.......!
|
sub make_default { |
sub make_default { |
my $self = shift(); |
my $self = shift(); |
my $result = &Apache::lonnet::put('environment', |
my $result = &Apache::lonnet::put('environment', |
{'spreadsheet_default_'.$self->{'type'} => $self->filename()}, |
{'spreadsheet_default_'.$self->{'type'} => $self->filename()}, |
$self->{'cdom'},$self->{'cnum'}); |
$self->{'cdom'},$self->{'cnum'}); |
return $result if ($result ne 'ok'); |
return $result if ($result ne 'ok'); |
my $symb = $self->{'symb'}; |
my $symb = $self->{'symb'}; |
Line 221 sub is_default {
|
Line 217 sub is_default {
|
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
$default_filename = $tmphash{'spreadsheet_default_'.$self->{'type'}}; |
$default_filename = $tmphash{'spreadsheet_default_'.$self->{'type'}}; |
} |
} |
|
if ($default_filename =~ /^\s*$/) { |
|
$default_filename = 'default_'.$self->{'type'}; |
|
} |
return 1 if ($self->filename() eq $default_filename); |
return 1 if ($self->filename() eq $default_filename); |
return 0; |
return 0; |
} |
} |
Line 1476 sub clear_spreadsheet_definition_cache {
|
Line 1475 sub clear_spreadsheet_definition_cache {
|
undef(%spreadsheets); |
undef(%spreadsheets); |
} |
} |
|
|
sub load { |
sub load_system_default_sheet { |
my $self = shift; |
my $self = shift; |
my $includedir = $Apache::lonnet::perlvar{'lonIncludes'}; |
my $includedir = $Apache::lonnet::perlvar{'lonIncludes'}; |
|
# load in the default defined spreadsheet |
|
my $sheetxml=''; |
|
my $fh; |
|
if ($fh=Apache::File->new($includedir.'/default_'.$self->{'type'})) { |
|
$sheetxml=join('',<$fh>); |
|
$fh->close(); |
|
} else { |
|
# $sheetxml='<field row="0" col="A">"Error"</field>'; |
|
$sheetxml='<field row="0" col="A"></field>'; |
|
} |
|
$self->filename('default_'); |
|
my ($formulas,undef) = &parse_sheet(\$sheetxml); |
|
return $formulas; |
|
} |
|
|
|
sub load { |
|
my $self = shift; |
# |
# |
my $stype = $self->{'type'}; |
my $stype = $self->{'type'}; |
my $cnum = $self->{'cnum'}; |
my $cnum = $self->{'cnum'}; |
my $cdom = $self->{'cdom'}; |
my $cdom = $self->{'cdom'}; |
my $chome = $self->{'chome'}; |
my $chome = $self->{'chome'}; |
my $filename = $self->{'filename'}; |
|
# |
# |
|
my $filename = $self->filename(); |
my $cachekey = join('_',($cnum,$cdom,$stype,$filename)); |
my $cachekey = join('_',($cnum,$cdom,$stype,$filename)); |
# |
# |
# see if sheet is cached |
# see if sheet is cached |
Line 1494 sub load {
|
Line 1510 sub load {
|
$formulas = $spreadsheets{$cachekey}->{'formulas'}; |
$formulas = $spreadsheets{$cachekey}->{'formulas'}; |
} else { |
} else { |
# Not cached, need to read |
# Not cached, need to read |
if (! defined($self->filename())) { |
if (! defined($filename)) { |
# load in the default defined spreadsheet |
$formulas = $self->load_system_default_sheet(); |
my $sheetxml=''; |
|
my $fh; |
|
if ($fh=Apache::File->new($includedir.'/default.'.$filename)) { |
|
$sheetxml=join('',<$fh>); |
|
$fh->close(); |
|
} else { |
|
# $sheetxml='<field row="0" col="A">"Error"</field>'; |
|
$sheetxml='<field row="0" col="A"></field>'; |
|
} |
|
($formulas,undef) = &parse_sheet(\$sheetxml); |
|
} elsif($self->filename() =~ /^\/res\/.*\.spreadsheet$/) { |
} elsif($self->filename() =~ /^\/res\/.*\.spreadsheet$/) { |
# Load a spreadsheet definition file |
# Load a spreadsheet definition file |
my $sheetxml=&Apache::lonnet::getfile |
my $sheetxml=&Apache::lonnet::getfile |
Line 1515 sub load {
|
Line 1521 sub load {
|
.$self->filename().'"</field>'; |
.$self->filename().'"</field>'; |
} |
} |
($formulas,undef) = &parse_sheet(\$sheetxml); |
($formulas,undef) = &parse_sheet(\$sheetxml); |
|
# Get just the filename and set the sheets filename |
|
my ($newfilename) = ($filename =~ /\/([^\/]*)\.spreadsheet$/); |
|
if ($self->is_default()) { |
|
$self->filename($newfilename); |
|
$self->make_default(); |
|
} else { |
|
$self->filename($newfilename); |
|
} |
|
} elsif ($filename =~ /^default\.$self->{'type'}/) { |
|
# if there is an Original_$stype, load it instead |
|
$formulas = $self->load_system_default_sheet(); |
} else { |
} else { |
# Load the spreadsheet definition file from the save file |
# Load the spreadsheet definition file from the save file |
my %tmphash = &Apache::lonnet::dump($self->filename(),$cdom,$cnum); |
my %tmphash = &Apache::lonnet::dump($filename,$cdom,$cnum); |
my ($tmp) = keys(%tmphash); |
my ($tmp) = keys(%tmphash); |
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
while (my ($cell,$formula) = each(%tmphash)) { |
while (my ($cell,$formula) = each(%tmphash)) { |
$formulas->{$cell}=$formula; |
$formulas->{$cell}=$formula; |
} |
} |
} else { |
} else { |
# Unable to grab the specified spreadsheet, |
$formulas = $self->load_system_default_sheet(); |
# so we get the default ones instead. |
|
$filename = 'default.'.$stype; |
|
$self->filename($filename); |
|
my $sheetxml; |
|
if (my $fh=Apache::File->new($includedir.'/'.$filename)) { |
|
$sheetxml = join('',<$fh>); |
|
$fh->close(); |
|
} else { |
|
$sheetxml='<field row="0" col="A">'. |
|
'"Unable to load spreadsheet"</field>'; |
|
} |
|
($formulas,undef) = &parse_sheet(\$sheetxml); |
|
$self->formulas($formulas); |
|
} |
} |
} |
} |
|
$filename=$self->filename(); # filename may have changed |
$cachekey = join('_',($cnum,$cdom,$stype,$filename)); |
$cachekey = join('_',($cnum,$cdom,$stype,$filename)); |
%{$spreadsheets{$cachekey}->{'formulas'}} = %{$formulas}; |
%{$spreadsheets{$cachekey}->{'formulas'}} = %{$formulas}; |
} |
} |
Line 1595 sub save {
|
Line 1600 sub save {
|
my $filename = $self->{'filename'}; |
my $filename = $self->{'filename'}; |
my $cachekey = join('_',($cnum,$cdom,$stype,$filename)); |
my $cachekey = join('_',($cnum,$cdom,$stype,$filename)); |
# Cache new sheet |
# Cache new sheet |
%{$spreadsheets{$cachekey}}=%f; |
%{$spreadsheets{$cachekey}->{'formulas'}}=%f; |
# Write sheet |
# Write sheet |
foreach (keys(%f)) { |
foreach (keys(%f)) { |
delete($f{$_}) if ($f{$_} eq 'import'); |
delete($f{$_}) if ($f{$_} eq 'import'); |
Line 1705 sub othersheets {
|
Line 1710 sub othersheets {
|
if ($tmp =~ /^(con_lost|error|no_such_host)/i ) { |
if ($tmp =~ /^(con_lost|error|no_such_host)/i ) { |
@alternatives = ('Default'); |
@alternatives = ('Default'); |
} else { |
} else { |
@alternatives = sort (keys(%results)); |
@alternatives = ('Default', sort (keys(%results))); |
} |
} |
return @alternatives; |
return @alternatives; |
} |
} |
Line 1758 sub get_row_number_from_key {
|
Line 1763 sub get_row_number_from_key {
|
# may not be the key we need to save |
# may not be the key we need to save |
$self->{'maxrow'}++; |
$self->{'maxrow'}++; |
$self->{'row_numbers'}->{$key} = $self->{'maxrow'}; |
$self->{'row_numbers'}->{$key} = $self->{'maxrow'}; |
|
# $self->logthis('added row '.$self->{'row_numbers'}->{$key}. |
|
# ' for '.$key); |
$self->{'new_rows'} = 1; |
$self->{'new_rows'} = 1; |
} |
} |
return $self->{'row_numbers'}->{$key}; |
return $self->{'row_numbers'}->{$key}; |