Diff for /loncom/interface/spreadsheet/Spreadsheet.pm between versions 1.12 and 1.13

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};

Removed from v.1.12  
changed lines
  Added in v.1.13


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>