Diff for /loncom/interface/Attic/lonspreadsheet.pm between versions 1.81 and 1.82

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

Removed from v.1.81  
changed lines
  Added in v.1.82


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