Diff for /loncom/interface/Attic/lonspreadsheet.pm between versions 1.9 and 1.10

version 1.9, 2000/12/08 17:16:37 version 1.10, 2000/12/09 19:14:20
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Spreadsheet/Grades Display Handler  # Spreadsheet/Grades Display Handler
 #  #
 # 11/11,11/15,11/27,12/04,12/05,12/06,12/07,12/08 Gerd Kortemeyer  # 11/11,11/15,11/27,12/04,12/05,12/06,12/07,12/08,12/09 Gerd Kortemeyer
   
 package Apache::lonspreadsheet;  package Apache::lonspreadsheet;
   
 use strict;  use strict;
   use vars qw(%spreadsheets);
 use Safe;  use Safe;
 use Safe::Hole;  use Safe::Hole;
 use Opcode;  use Opcode;
Line 413  sub rown { Line 414  sub rown {
        $vl='<font size=+2 color='.$bgcolor.'>&#35;</font>';         $vl='<font size=+2 color='.$bgcolor.'>&#35;</font>';
            }             }
            $rowdata.=             $rowdata.=
         '<td bgcolor='.$bgcolor.'><a href="javascript:prompt('.$fm.');">'.$vl.         '<td bgcolor='.$bgcolor.'><a href="javascript:celledit('.$fm.');">'.$vl.
        '</a></td>';         '</a></td>';
        } else {         } else {
            $rowdata.='<td bgcolor='.$bgcolor.'>&nbsp;'.$vl.'&nbsp;</td>';             $rowdata.='<td bgcolor='.$bgcolor.'>&nbsp;'.$vl.'&nbsp;</td>';
Line 454  sub readsheet { Line 455  sub readsheet {
     $fn=~/\.(\w+)/;      $fn=~/\.(\w+)/;
     &settype($safeeval,$1);      &settype($safeeval,$1);
     my %f=();      my %f=();
     my $content='';      unless ($spreadsheets{$fn}) {
     {         $spreadsheets{$fn}='';
       my $fh;         {
       if ($fh=Apache::File->new($fn)) {           my $fh;
          $content=join('',<$fh>);           if ($fh=Apache::File->new($fn)) {
       }              $spreadsheets{$fn}=join('',<$fh>);
            }
          }
     }      }
     {      {
       my $parser=HTML::TokeParser->new(\$content);        my $parser=HTML::TokeParser->new(\$spreadsheets{$fn});
       my $token;        my $token;
       while ($token=$parser->get_token) {        while ($token=$parser->get_token) {
          if ($token->[0] eq 'S') {           if ($token->[0] eq 'S') {
Line 476  sub readsheet { Line 479  sub readsheet {
     &setformulas($safeeval,%f);      &setformulas($safeeval,%f);
 }  }
   
   # ----------------------------------------------- Make a temp copy of the sheet
   
   sub tmpwrite {
       my ($safeeval,$tmpdir,$uname,$udom,$symb)=@_;
       my $fn=$uname.'_'.$udom.'_spreadsheet_'.&getfilename($safeeval);
       $fn=~s/\W/\_/g;
       $fn=$tmpdir.$fn.'.tmp';
       my $fh;
       if ($fh=Apache::File->new('>'.$fn)) {
    print $fh join("\n",&getformulas($safeeval));
       }
   }
   
   # ---------------------------------------------------------- Read the temp copy
   
   sub tmpread {
       my ($safeeval,$tmpdir,$uname,$udom,$symb,$nfield,$nform)=@_;
       my $fn=$uname.'_'.$udom.'_spreadsheet_'.&getfilename($safeeval);
       $fn=~s/\W/\_/g;
       $fn=$tmpdir.$fn.'.tmp';
       my $fh;
       my %fo=();
       if ($fh=Apache::File->new($fn)) {
           my $name;
           while ($name=<$fh>) {
       chomp($name);
               my $value=<$fh>;
               chomp($value);
               $fo{$name}=$value;
           }
       }
       $fo{$nfield}=$nform;
       &setformulas($safeeval,%fo);
   }
   
 # --------------------------------------------------------------- Read metadata  # --------------------------------------------------------------- Read metadata
   
 sub readmeta {  sub readmeta {
Line 635  sub rowaassess { Line 673  sub rowaassess {
     &setconstants($safeeval,%c);      &setconstants($safeeval,%c);
 }  }
   
   # --------------------------------------------------------- Various form fields
   
   sub textfield {
       my ($title,$name,$value)=@_;
       return "\n<p><b>$title:</b><br>".
              '<input type=text name="'.$name.'" size=80 value="'.$value.'">';
   }
   
   sub hiddenfield {
       my ($name,$value)=@_;
       return "\n".'<input type=hidden name="'.$name.'" value="'.$value.'">';
   }
   
   sub selectbox {
       my ($title,$name,$value,%options)=@_;
       my $selout="\n<p><b>$title:</b><br>".'<select name="'.$name.'">';
       map {
           $selout.='<option value="'.$_.'"';
           if ($_ eq $value) { $selout.=' selected'; }
           $selout.='>'.$options{$_}.'</option>';
       } sort keys %options;
       return $selout.'</select>';
   }
   
   # ---------------------------------------------------------------- Main handler
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
Line 649  sub handler { Line 712  sub handler {
   
   if (($ENV{'request.course.fn'}) ||     if (($ENV{'request.course.fn'}) || 
       ($ENV{'request.state'} eq 'construct')) {         ($ENV{'request.state'} eq 'construct')) { 
    
   # --------------------------- Get query string for limited number of parameters
       map {
          my ($name, $value) = split(/=/,$_);
          $value =~ tr/+/ /;
          $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
          if (($name='uname') || ($name='udom') || ($name='usymb')) {
              unless ($ENV{'form.'.$name}) {
                 $ENV{'form.'.$name}=$value;
      }
          }
       } (split(/&/,$ENV{'QUERY_STRING'}));
   
   # ------------------------------------------- Nothing there? Must be login user
   
       unless ($ENV{'form.uname'}) {
    $ENV{'form.uname'}=$ENV{'user.name'};
           $ENV{'form.udom'}=$ENV{'user.domain'};
       }
   # ------------------------------------------------------------------- Open page
   
     $r->content_type('text/html');      $r->content_type('text/html');
     $r->send_http_header;      $r->send_http_header;
   
     $r->print('<html><head><title>LON-CAPA Spreadsheet</title></head>');      $r->print('<html><head><title>LON-CAPA Spreadsheet</title>');
     $r->print('<body bgcolor="#FFFFFF">');      $r->print(<<ENDSCRIPT);
    <script language="JavaScript">
   
       function celledit(cn,cf) {
           var cnf=prompt(cn,cf);
    if (cnf!=null) {
       document.sheet.unewfield.value=cn;
               document.sheet.unewformula.value=cnf;
               document.sheet.submit();
           }
       }
   
   </script>
   ENDSCRIPT
       $r->print('</head><body bgcolor="#FFFFFF">'.
          '<form action="'.$r->uri.'" name=sheet method=post>'.
          &hiddenfield('uname',$ENV{'form.uname'}).
          &hiddenfield('udom',$ENV{'form.udom'}).
          &hiddenfield('usymb',$ENV{'form.usymb'}).
          &hiddenfield('unewfield','').
          &hiddenfield('unewformula',''));
     my $sheetone=initsheet();      my $sheetone=initsheet();
     &readsheet($sheetone,$r->filename);      if ($ENV{'form.unewfield'}) {
           $r->print('<h2>Modified Workcopy</h2>');
           $ENV{'form.unewformula'}=~s/\'/\"/g;
           $r->print('New formula: '.$ENV{'form.unewfield'}.'='.
                     $ENV{'form.unewformula'}.'<br>');
    &tmpread($sheetone,$r->dir_config('lonDaemons').'/tmp/',
                    $ENV{'form.uname'},$ENV{'form.udom'},$ENV{'form.usymb'},
                    $ENV{'form.unewfield'},$ENV{'form.unewformula'});
           &setfilename($sheetone,$r->filename);
           $r->filename=~/\.(\w+)/;
           &settype($sheetone,$1);
      } else {
           &readsheet($sheetone,$r->filename);
       }
     &updaterows($sheetone);      &updaterows($sheetone);
       &tmpwrite($sheetone,$r->dir_config('lonDaemons').'/tmp/',
                 $ENV{'form.uname'},$ENV{'form.udom'},$ENV{'form.usymb'});
     &calcsheet($sheetone);      &calcsheet($sheetone);
     $r->print(&outsheet($sheetone));      $r->print(&outsheet($sheetone));
   
     $r->print('</body></html>');      $r->print('</form></body></html>');
   
   } else {    } else {
 # ----------------------------- Not in a course, or not allowed to modify parms  # ----------------------------- Not in a course, or not allowed to modify parms

Removed from v.1.9  
changed lines
  Added in v.1.10


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