Diff for /loncom/interface/Attic/lonspreadsheet.pm between versions 1.26 and 1.27

version 1.26, 2001/01/01 20:52:10 version 1.27, 2001/01/02 12:12:43
Line 3 Line 3
 #  #
 # 11/11,11/15,11/27,12/04,12/05,12/06,12/07,  # 11/11,11/15,11/27,12/04,12/05,12/06,12/07,
 # 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30,  # 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30,
 # 01/01/01 Gerd Kortemeyer  # 01/01/01,02/01 Gerd Kortemeyer
   
 package Apache::lonspreadsheet;  package Apache::lonspreadsheet;
   
Line 18  use HTML::TokeParser; Line 18  use HTML::TokeParser;
   
 #  #
 # These cache hashes need to be independent of user, resource and course  # These cache hashes need to be independent of user, resource and course
 # (user and course are in the keys)  # (user and course can/should be in the keys)
 #  #
 use vars qw(%spreadsheets %courserdatas %userrdatas);  use vars qw(%spreadsheets %courserdatas %userrdatas %defaultsheets);
   
 #  #
 # These global hashes are dependent on user, course and resource,   # These global hashes are dependent on user, course and resource, 
 # and need to be initialized every time when a sheet is calculated  # and need to be initialized every time when a sheet is calculated
Line 28  use vars qw(%spreadsheets %courserdatas Line 29  use vars qw(%spreadsheets %courserdatas
 my %courseopt;  my %courseopt;
 my %useropt;  my %useropt;
 my %parmhash;  my %parmhash;
 my $csec;  
 my $uname;  
 my $udom;  
   
 # =============================================================================  # =============================================================================
 # ===================================== Implements an instance of a spreadsheet  # ===================================== Implements an instance of a spreadsheet
Line 61  sub initsheet { Line 59  sub initsheet {
   
 $maxrow=0;  $maxrow=0;
 $sheettype='';  $sheettype='';
   
   # filename/reference of the sheet
   
 $filename='';  $filename='';
   
   # user data
   $uname='';
   $uhome='';
   $udom='';
   
   # course data
   
   $csec='';
   $chome='';
   $cnum='';
   $cdom='';
   
   # symb
   
   $usymb='';
   
 sub mask {  sub mask {
     my ($lower,$upper)=@_;      my ($lower,$upper)=@_;
   
Line 452  sub gettype { Line 469  sub gettype {
     my $safeeval=shift;      my $safeeval=shift;
     return $safeeval->reval('$sheettype');      return $safeeval->reval('$sheettype');
 }  }
   
 # ------------------------------------------------------------------ Set maxrow  # ------------------------------------------------------------------ Set maxrow
   
 sub setmaxrow {  sub setmaxrow {
Line 480  sub getfilename { Line 498  sub getfilename {
     return $safeeval->reval('$filename');      return $safeeval->reval('$filename');
 }  }
   
   # ----------------------------------------------------------- Get course number
   
   sub getcnum {
       my $safeeval=shift;
       return $safeeval->reval('$cnum');
   }
   
   # ------------------------------------------------------------- Get course home
   
   sub getchome {
       my $safeeval=shift;
       return $safeeval->reval('$chome');
   }
   
   # ----------------------------------------------------------- Get course domain
   
   sub getcdom {
       my $safeeval=shift;
       return $safeeval->reval('$cdom');
   }
   
   # ---------------------------------------------------------- Get course section
   
   sub getcsec {
       my $safeeval=shift;
       return $safeeval->reval('$csec');
   }
   
   # --------------------------------------------------------------- Get user name
   
   sub getuname {
       my $safeeval=shift;
       return $safeeval->reval('$uname');
   }
   
   # ------------------------------------------------------------- Get user domain
   
   sub getudom {
       my $safeeval=shift;
       return $safeeval->reval('$udom');
   }
   
   # --------------------------------------------------------------- Get user home
   
   sub getuhome {
       my $safeeval=shift;
       return $safeeval->reval('$uhome');
   }
   
   # -------------------------------------------------------------------- Get symb
   
   sub getusymb {
       my $safeeval=shift;
       return $safeeval->reval('$usymb');
   }
   
 # ------------------------------------------------------------- Export of A-row  # ------------------------------------------------------------- Export of A-row
   
 sub exportrow {  sub exportrow {
Line 490  sub exportrow { Line 564  sub exportrow {
 # ========================================================== End of Spreadsheet  # ========================================================== End of Spreadsheet
 # =============================================================================  # =============================================================================
   
   #
   # Procedures for screen output
   #
 # --------------------------------------------- Produce output row n from sheet  # --------------------------------------------- Produce output row n from sheet
   
 sub rown {  sub rown {
Line 600  sub outsheet { Line 676  sub outsheet {
     $r->print('</table>');      $r->print('</table>');
 }  }
   
   #
   # -------------------------------------- Read spreadsheet formulas for a course
   #
   
   sub readsheet {
     my ($safeeval,$fn)=@_;
     my $stype=&gettype($safeeval);
     my $cnum=&getcnum($safeeval);
   
   # --------- There is no filename. Look for defaults in course and global, cache
   
     unless($fn) {
         unless ($fn=$defaultsheets{$cnum.'_'.$stype}) {
            $fn=&Apache::lonnet::reply('get:'.
                   $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
                   $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.
                   ':environment:spreadsheet_default_'.&gettype($safeeval),
                        $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
            unless (($fn) && ($fn!~/^error\:/)) {
        $fn='default_'.$stype;
            }
            $defaultsheets{$cnum.'_'.$stype}=$fn; 
         }
     }
   
 # ------------------------------------- Read spreadsheet formulas from a course  # ---------------------------------------------------------- fn now has a value
   
 sub readsheet {    &setfilename($safeeval,$fn);
     my ($safeeval,$fn,$r)=@_;  
     my %f=();  # ------------------------------------------------------ see if sheet is cached
     if (($fn eq '') || ($fn=~/^default\_/)) {    my $fstring='';
     if ($fstring=$spreadsheets{$cnum.'_'.$stype.'_'.$fn}) {
         &setformulas($sheetone,split(/\_\_\_\;\_\_\_/,$fstring));
     } else {
   
   # ---------------------------------------------------- Not cached, need to read
   
        my %f=();
   
        if ($fn=~/^default\_/) {
  my $sheetxml='';   my $sheetxml='';
        {         {
          my $fh;           my $fh;
Line 616  sub readsheet { Line 724  sub readsheet {
                $sheetxml=join('',<$fh>);                 $sheetxml=join('',<$fh>);
           }            }
        }         }
        my $parser=HTML::TokeParser->new(\$sheetxml);          my $parser=HTML::TokeParser->new(\$sheetxml);
        my $token;          my $token;
        while ($token=$parser->get_token) {          while ($token=$parser->get_token) {
           if ($token->[0] eq 'S') {            if ($token->[0] eq 'S') {
       if ($token->[1] eq 'field') {        if ($token->[1] eq 'field') {
   $f{$token->[2]->{'col'}.$token->[2]->{'row'}}=    $f{$token->[2]->{'col'}.$token->[2]->{'row'}}=
Line 629  sub readsheet { Line 737  sub readsheet {
                      $parser->get_text('/template');                       $parser->get_text('/template');
              }               }
           }            }
        }          }
        &setfilename($safeeval,'default_'.&gettype($safeeval));        } else {
     } else {          my $sheet='';
        &setfilename($safeeval,$fn);          my $reply=&Apache::lonnet::reply('dump:'.
        unless ($spreadsheets{$fn}) {  
           $spreadsheets{$fn}='';  
           my $reply=&Apache::lonnet::reply('dump:'.  
               $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.                $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
               $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':'.$fn,                $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':'.$fn,
               $ENV{'course.'.$ENV{'request.course.id'}.'.home'});                $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
           unless ($reply=~/^error\:/) {            unless ($reply=~/^error\:/) {
              $spreadsheets{$fn}=$reply;               $sheet=$reply;
           }    }
             map {
                my ($name,$value)=split(/\=/,$_);
                $f{&Apache::lonnet::unescape($name)}=
           &Apache::lonnet::unescape($value);
             } split(/\&/,$sheet);
        }         }
        map {  # --------------------------------------------------------------- Cache and set
            my ($name,$value)=split(/\=/,$_);         $spreadsheets{$cnum.'_'.$stype.'_'.$fn}=join('___;___',%f);       
            $f{&Apache::lonnet::unescape($name)}=         &setformulas($safeeval,%f);
       &Apache::lonnet::unescape($value);  
        } split(/\&/,$spreadsheets{$fn});  
     }      }
   
     &setformulas($safeeval,%f);  
 }  }
   
 # ------------------------------------------------------------ Save spreadsheet  # ------------------------------------------------------------ Save spreadsheet
Line 1283  ENDSCRIPT Line 1389  ENDSCRIPT
                  $ENV{'form.usymb'});                   $ENV{'form.usymb'});
     } else {      } else {
         unless ($ENV{'form.ufn'}) {          unless ($ENV{'form.ufn'}) {
            my $reply=&Apache::lonnet::reply('get:'.  
                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.  
                      $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.  
                      ':environment:spreadsheet_default_'.  
                      &gettype($sheetone),  
                      $ENV{'course.'.$ENV{'request.course.id'}.'.home'});  
            unless (($reply=~/^error\:/) || ($reply eq '')) {  
        $ENV{'form.ufn'}=$reply;  
                unless ($reroute) {  
                   $r->print('<p>Using customized default spreadsheet<p>');  
        }  
            }  
         }  
         &readsheet($sheetone,$ENV{'form.ufn'},$r);  
         $ENV{'form.ufn'}=&getfilename($sheetone);  
     }      }
   
   if (&gettype($sheetone) eq 'classcalc') {    if (&gettype($sheetone) eq 'classcalc') {

Removed from v.1.26  
changed lines
  Added in v.1.27


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