Diff for /loncom/interface/Attic/lonspreadsheet.pm between versions 1.165 and 1.170

version 1.165, 2003/01/30 16:20:08 version 1.170, 2003/02/13 22:22:01
Line 262  ENDSCRIPT Line 262  ENDSCRIPT
     # Global directory configs      # Global directory configs
     #      #
     $sheet->includedir($r->dir_config('lonIncludes'));      $sheet->includedir($r->dir_config('lonIncludes'));
     $sheet->tmpdir($r->dir_config('lonDaemons').'/tmp/');  
     #      #
     # Check user permissions      # Check user permissions
     if (($sheet->{'type'}  eq 'classcalc'       ) ||       if (($sheet->{'type'}  eq 'classcalc'       ) || 
Line 524  my %numbertimes; Line 523  my %numbertimes;
 # Directories  # Directories
 #  #
 my $includedir;  my $includedir;
 my $tmpdir;  
   
 sub includedir {  sub includedir {
     my $self = shift;      my $self = shift;
     $includedir = shift;      $includedir = shift;
 }  }
   
 sub tmpdir {  
     my $self = shift;  
     $tmpdir = shift;  
 }  
   
 my %spreadsheets;  my %spreadsheets;
 my %loadedcaches;  #my %loadedcaches;
 my %courserdatas;  my %courserdatas;
 my %userrdatas;  my %userrdatas;
 my %defaultsheets;  my %defaultsheets;
 my %rowlabel_cache;  my %rowlabel_cache;
 my %oldsheets;  #my %oldsheets;
   
 sub complete_recalc {  sub complete_recalc {
     my $self = shift;      my $self = shift;
Line 609  sub cachedssheets { Line 602  sub cachedssheets {
     my ($uname,$udom) = @_;      my ($uname,$udom) = @_;
     $uname = $uname || $self->{'uname'};      $uname = $uname || $self->{'uname'};
     $udom  = $udom  || $self->{'udom'};      $udom  = $udom  || $self->{'udom'};
     if (! $Apache::lonspreadsheet::loadedcaches{$uname.'_'.$udom}) {      if (! exists($Apache::lonspreadsheet::loadedcaches{$uname.'_'.$udom})) {
         my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'.          my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'.
                                         $ENV{'request.course.id'},                                          $ENV{'request.course.id'},
                                         $self->{'udom'},                                          $self->{'udom'},
Line 1588  sub sett { Line 1581  sub sett {
     foreach my $col ($self->template_cells()) {      foreach my $col ($self->template_cells()) {
         next if ($col=~/^$pattern/);          next if ($col=~/^$pattern/);
         foreach my $trow ($self->rows()) {          foreach my $trow ($self->rows()) {
             next if ($trow eq '0');  
             # Get the name of this cell              # Get the name of this cell
             my $lb=$col.$trow;              my $lb=$col.$trow;
             # Grab the template declaration              # Grab the template declaration
Line 1745  sub calcsheet { Line 1737  sub calcsheet {
     $self->sett();      $self->sett();
     my $result =  $self->{'safe'}->reval('&calc();');      my $result =  $self->{'safe'}->reval('&calc();');
     %{$self->{'values'}} = %{$self->{'safe'}->varglob('sheet_values')};      %{$self->{'values'}} = %{$self->{'safe'}->varglob('sheet_values')};
   #    $self->logthis($self->get_errorlog());
     return $result;      return $result;
 }  }
   
Line 1904  sub rebuild_stats { Line 1897  sub rebuild_stats {
     $self->{'rows'}=[];      $self->{'rows'}=[];
     $self->{'template_cells'}=[];      $self->{'template_cells'}=[];
     foreach my $cell($self->formulas_keys()) {      foreach my $cell($self->formulas_keys()) {
         push(@{$self->{'rows'}},$1) if ($cell =~ /^A(\d+)/);          push(@{$self->{'rows'}},$1) if ($cell =~ /^A(\d+)/ && $1 != 0);
         push(@{$self->{'template_cells'}},$1) if ($cell =~ /^template_(\w+)/);          push(@{$self->{'template_cells'}},$1) if ($cell =~ /^template_(\w+)/);
     }      }
     return;      return;
Line 1951  sub rowlabels { Line 1944  sub rowlabels {
         $self->{'rowlabel'}=$rowlabel;          $self->{'rowlabel'}=$rowlabel;
         return;          return;
     } else {      } else {
         return %{$self->{'rowlabel'}} if (defined($self->{'rowlabels'}));          return %{$self->{'rowlabel'}} if (defined($self->{'rowlabel'}));
     }      }
 }  }
   
Line 2541  sub export_sheet_as_excel { Line 2534  sub export_sheet_as_excel {
             }              }
             next if ($row_is_empty);              next if ($row_is_empty);
         }          }
           $worksheet->write($rows_output,$cols_output++,$rownum);
         $worksheet->write($rows_output,$cols_output++,$label);          $worksheet->write($rows_output,$cols_output++,$label);
         if (ref($label)) {          if (ref($label)) {
             $cols_output = (scalar(@$label));              $cols_output = (scalar(@$label));
Line 2665  sub readsheet { Line 2659  sub readsheet {
     # $fn now has a value      # $fn now has a value
     $self->{'filename'} = $fn;      $self->{'filename'} = $fn;
     # see if sheet is cached      # see if sheet is cached
     my $fstring='';      if (exists($spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn})) {
     if ($fstring=$spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn}) {          
         my %tmp = split(/___;___/,$fstring);          my %tmp = split(/___;___/,
                           $spreadsheets{$cnum.'_'.$cdom.'_'.$stype.'_'.$fn});
         $self->formulas(\%tmp);          $self->formulas(\%tmp);
     } else {      } else {
         # Not cached, need to read          # Not cached, need to read
Line 2776  sub tmpwrite { Line 2771  sub tmpwrite {
         $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'.          $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'.
            $self->{'filename'};             $self->{'filename'};
     $fn=~s/\W/\_/g;      $fn=~s/\W/\_/g;
     $fn=$tmpdir.$fn.'.tmp';      $fn=$Apache::lonnet::tmpdir.$fn.'.tmp';
     my $fh;      my $fh;
     if ($fh=Apache::File->new('>'.$fn)) {      if ($fh=Apache::File->new('>'.$fn)) {
         my %f = $self->formulas();          my %f = $self->formulas();
Line 2795  sub tmpread { Line 2790  sub tmpread {
            $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'.             $ENV{'user.domain'}.'_spreadsheet_'.$self->{'usymb'}.'_'.
            $self->{'filename'};             $self->{'filename'};
     $fn=~s/\W/\_/g;      $fn=~s/\W/\_/g;
     $fn=$tmpdir.$fn.'.tmp';      $fn=$Apache::lonnet::tmpdir.$fn.'.tmp';
     my $fh;      my $fh;
     my %fo=();      my %fo=();
     my $countrows=0;      my $countrows=0;
Line 2948  sub updateclasssheet { Line 2943  sub updateclasssheet {
             $self->{'maxrow'}= $rownum;              $self->{'maxrow'}= $rownum;
         }          }
         $existing{$f{$cell}}=1;          $existing{$f{$cell}}=1;
         unless ((defined($currentlist{$f{$cell}})) || ($rownum ne '0') ||          if (! defined($currentlist{$f{$cell}}) && ($f{$cell}=~/^(~~~|---)/)) {
                 ($f{$cell}=~/^(~~~|---)/)) {  
             $f{$cell}='!!! Obsolete';              $f{$cell}='!!! Obsolete';
             $changed=1;              $changed=1;
         }          }
Line 2980  sub get_student_rowlabels { Line 2974  sub get_student_rowlabels {
     $self->{'rowlabel'} = {};      $self->{'rowlabel'} = {};
     #      #
     my $identifier =$self->{'coursefilename'}.'_'.$stype;      my $identifier =$self->{'coursefilename'}.'_'.$stype;
     if  ($rowlabel_cache{$identifier}) {      if  (exists($rowlabel_cache{$identifier})) {
         %{$self->{'rowlabel'}}=split(/___;___/,$rowlabel_cache{$identifier});          my %tmp = split(/___;___/,$rowlabel_cache{$identifier});
           $self->rowlabels(\%tmp);
     } else {      } else {
         # Get the data and store it in the cache          # Get the data and store it in the cache
         # Tie hash          # Tie hash
Line 3033  sub get_assess_rowlabels { Line 3028  sub get_assess_rowlabels {
     $self->rowlabels({});      $self->rowlabels({});
     my $identifier =$self->{'coursefilename'}.'_'.$stype.'_'.$usymb;      my $identifier =$self->{'coursefilename'}.'_'.$stype.'_'.$usymb;
     #      #
     if  ($rowlabel_cache{$identifier}) {      if (exists($rowlabel_cache{$identifier})) {
         $self->rowlabels(split(/___;___/,$rowlabel_cache{$identifier}));          my %tmp = split('___;___',$rowlabel_cache{$identifier});
           $self->rowlabels(\%tmp);
     } else {      } else {
         # Get the data and store it in the cache          # Get the data and store it in the cache
         # Tie hash          # Tie hash
Line 3078  sub get_assess_rowlabels { Line 3074  sub get_assess_rowlabels {
         untie(%course_db);          untie(%course_db);
         # Store away the results          # Store away the results
         $self->rowlabels(\%parameter_labels);          $self->rowlabels(\%parameter_labels);
         $rowlabel_cache{$identifier}=join('___;___',$self->rowlabels());          $rowlabel_cache{$identifier}=join('___;___',%parameter_labels);
     }      }
           
 }  }
   
 sub updatestudentassesssheet {  sub updatestudentassesssheet {
Line 3099  sub updatestudentassesssheet { Line 3094  sub updatestudentassesssheet {
     foreach my $rownum ($self->rows()) {      foreach my $rownum ($self->rows()) {
         my $cell = 'A'.$rownum;          my $cell = 'A'.$rownum;
         my $formula = $f{$cell};          my $formula = $f{$cell};
         next if ($rownum eq '0');  
         $self->{'maxrow'} = $rownum if ($rownum > $self->{'maxrow'});          $self->{'maxrow'} = $rownum if ($rownum > $self->{'maxrow'});
         my ($usy,$ufn)=split(/__&&&\__/,$formula);          my ($usy,$ufn)=split(/__&&&\__/,$formula);
         $existing{$usy}=1;          $existing{$usy}=1;
Line 3147  sub loadstudent{ Line 3141  sub loadstudent{
         if(defined($c) && ($c->aborted())) {          if(defined($c) && ($c->aborted())) {
             last;              last;
         }          }
         next if (($value =~ /^[!~-]/) || ($row==0));          next if ($value =~ /^[!~-]/);
         my ($usy,$ufn)=split(/__&&&\__/,$value);          my ($usy,$ufn)=split(/__&&&\__/,$value);
         @assessdata=$self->exportsheet($self->{'uname'},          @assessdata=$self->exportsheet($self->{'uname'},
                                         $self->{'udom'},                                          $self->{'udom'},
Line 3199  sub loadcourse { Line 3193  sub loadcourse {
 </script>  </script>
 ENDPOP  ENDPOP
     $r->rflush();      $r->rflush();
       # It would be nice to load in the classlist and assessment info at this 
       # point, before attacking the student spreadsheets.
     foreach my $row ($self->rows()) {      foreach my $row ($self->rows()) {
         if(defined($c) && ($c->aborted())) {          if(defined($c) && ($c->aborted())) {
             last;              last;
         }          }
         my $cell = 'A'.$row;          my $cell = 'A'.$row;
         next if (($formulas{$cell}=~/^[\!\~\-]/)  || ($row==0));          next if ($formulas{$cell}=~/^[\!\~\-]/);
         my ($sname,$sdom) = split(':',$formulas{$cell});          my ($sname,$sdom) = split(':',$formulas{$cell});
         my $started = time;          my $started = time;
         my @studentdata=$self->exportsheet($sname,$sdom,'studentcalc',          my @studentdata=$self->exportsheet($sname,$sdom,'studentcalc',

Removed from v.1.165  
changed lines
  Added in v.1.170


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