Diff for /loncom/interface/Attic/lonspreadsheet.pm between versions 1.6 and 1.8

version 1.6, 2000/12/06 14:50:47 version 1.8, 2000/12/07 22:51:29
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 Gerd Kortemeyer  # 11/11,11/15,11/27,12/04,12/05,12/06,12/07 Gerd Kortemeyer
   
 package Apache::lonspreadsheet;  package Apache::lonspreadsheet;
   
Line 10  use Safe; Line 10  use Safe;
 use Safe::Hole;  use Safe::Hole;
 use Opcode;  use Opcode;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common :http);
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
   
Line 48  $filename=''; Line 48  $filename='';
 sub mask {  sub mask {
     my ($lower,$upper)=@_;      my ($lower,$upper)=@_;
   
     $lower=~/([A-Z]|\*)(\d+|\*)/;      $lower=~/([A-Za-z]|\*)(\d+|\*)/;
     my $la=$1;      my $la=$1;
     my $ld=$2;      my $ld=$2;
   
     $upper=~/([A-Z]|\*)(\d+|\*)/;      $upper=~/([A-Za-z]|\*)(\d+|\*)/;
     my $ua=$1;      my $ua=$1;
     my $ud=$2;      my $ud=$2;
     my $alpha='';      my $alpha='';
     my $num='';      my $num='';
   
     if (($la eq '*') || ($ua eq '*')) {      if (($la eq '*') || ($ua eq '*')) {
        $alpha='[A-Z]';         $alpha='[A-Za-z]';
     } else {      } else {
        $alpha='['.$la.'-'.$ua.']';         if (($la=~/[A-Z]/) && ($ua=~/[A-Z]/) ||
              ($la=~/[a-z]/) && ($ua=~/[a-z]/)) {
             $alpha='['.$la.'-'.$ua.']';
          } else {
             $alpha='['.$la.'-Za-'.$ua.']';
          }
     }         }   
   
     if (($ld eq '*') || ($ud eq '*')) {      if (($ld eq '*') || ($ud eq '*')) {
Line 83  sub mask { Line 88  sub mask {
        } else {         } else {
            my @lda=($ld=~m/\d/g);             my @lda=($ld=~m/\d/g);
            my @uda=($ud=~m/\d/g);             my @uda=($ud=~m/\d/g);
            my $i; $j=0;             my $i; $j=0; $notdone=1;
            for ($i=0;$i<=$#lda;$i++) {             for ($i=0;($i<=$#lda)&&($notdone);$i++) {
                if ($lda[$i]==$uda[$i]) {                 if ($lda[$i]==$uda[$i]) {
    $num.=$lda[$i];     $num.=$lda[$i];
                    $j=$i;                     $j=$i;
                  } else {
                      $notdone=0;
                }                 }
            }             }
            if ($j<$#lda-1) {             if ($j<$#lda-1) {
Line 105  sub mask { Line 112  sub mask {
                }                 }
                $num.=')';                 $num.=')';
            } else {             } else {
                $num.='['.$lda[$#lda].'-'.$uda[$#uda].']';                 if ($lda[$#lda]!=$uda[$#uda]) {
                     $num.='['.$lda[$#lda].'-'.$uda[$#uda].']';
          }
            }             }
        }         }
     }      }
Line 242  sub sett { Line 251  sub sett {
                 }                  }
             } else {              } else {
        $t{$_}=$f{$_};         $t{$_}=$f{$_};
                $t{$_}=~s/\.+/\,/g;                 $t{$_}=~s/\.\.+/\,/g;
                $t{$_}=~s/(^|[^\"\'])([A-Z]\d+)/$1\$v\{\'$2\'\}/g;                 $t{$_}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g;
             }              }
         }          }
     } keys %f;      } keys %f;
Line 287  sub outrow { Line 296  sub outrow {
         $fm=~s/[\'\"]/\&\#34;/g;          $fm=~s/[\'\"]/\&\#34;/g;
         $cols[$#cols+1]="'$_$n','$fm'".'___eq___'.$v{$_.$n};          $cols[$#cols+1]="'$_$n','$fm'".'___eq___'.$v{$_.$n};
     } ('A','B','C','D','E','F','G','H','I','J','K','L','M',      } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
        'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');         'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
          'a','b','c','d','e','f','g','h','i','j','k','l','m',
          'n','o','p','q','r','s','t','u','v','w','x','y','z');
     return @cols;      return @cols;
 }  }
   
Line 416  sub outsheet { Line 427  sub outsheet {
     map {      map {
         $tabledata.="<td><b><font size=+1>$_</font></b></td>";          $tabledata.="<td><b><font size=+1>$_</font></b></td>";
     } ('A<br>Import','B','C','D','E','F','G','H','I','J','K','L','M',      } ('A<br>Import','B','C','D','E','F','G','H','I','J','K','L','M',
        'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');         'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
          'a','b','c','d','e','f','g','h','i','j','k','l','m',
          'n','o','p','q','r','s','t','u','v','w','x','y','z');
     $tabledata.='</tr>';      $tabledata.='</tr>';
     my $row;      my $row;
     my $maxrow=&getmaxrow($safeeval);      my $maxrow=&getmaxrow($safeeval);
Line 431  sub outsheet { Line 444  sub outsheet {
 # --------------------------------------- Read spreadsheet formulas from a file  # --------------------------------------- Read spreadsheet formulas from a file
   
 sub readsheet {  sub readsheet {
     my ($safeeval,$fn)=shift;      my ($safeeval,$fn)=@_;
     &setfilename($safeeval,$fn);      &setfilename($safeeval,$fn);
     $fn=~/\.(\w+)/;      $fn=~/\.(\w+)/;
     &settype($safeeval,$1);      &settype($safeeval,$1);
     my %f=();      my %f=();
     my $content;      my $content='';
     {      {
       my $fh=Apache::File->new($fn);        my $fh;
       $content=join('',<$fh>);        if ($fh=Apache::File->new($fn)) {
            $content=join('',<$fh>);
         }
     }      }
     {      {
       my $parser=HTML::TokeParser->new(\$content);        my $parser=HTML::TokeParser->new(\$content);
Line 510  sub updaterows { Line 525  sub updaterows {
     '___'.$resid.'___'.      '___'.$resid.'___'.
     &Apache::lonnet::declutter($srcf);      &Apache::lonnet::declutter($srcf);
  $allassess{$symb}=$bighash{'title_'.$id};   $allassess{$symb}=$bighash{'title_'.$id};
   
                  if ($stype eq 'assesscalc') {                   if ($stype eq 'assesscalc') {
                    map {                     map {
                        if ($_=~/^stores\_(.*)/) {                         if ($_=~/^stores\_(.*)/) {
Line 520  sub updaterows { Line 536  sub updaterows {
                               $display=                                $display=
          &Apache::lonnet::metadata($srcf,$key.'.name');           &Apache::lonnet::metadata($srcf,$key.'.name');
                           }                            }
   
   
                           $allkeys{$key}=$display;                            $allkeys{$key}=$display;
        }         }
                    } split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));                     } split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));
Line 614  sub rowaassess { Line 632  sub rowaassess {
   
   
 sub handler {  sub handler {
   
     my $r=shift;      my $r=shift;
   
   $r->content_type('text/html');     if ($r->header_only) {
   $r->send_http_header;        $r->content_type('text/html');
         $r->send_http_header;
         return OK;
      }
   
   # ----------------------------------------------------- Needs to be in a course
   
     if (($ENV{'request.course.fn'}) || 
         ($ENV{'request.state'} eq 'construct')) { 
    
       $r->content_type('text/html');
       $r->send_http_header;
   
   $r->print('<html><head><title>LON-CAPA Spreadsheet</title></head>');      $r->print('<html><head><title>LON-CAPA Spreadsheet</title></head>');
   $r->print('<body bgcolor="#FFFFFF">');      $r->print('<body bgcolor="#FFFFFF">');
     
     my $sheetone=initsheet();      my $sheetone=initsheet();
     &setformulas($sheetone,      &readsheet($sheetone,$r->filename);
    'B3' => 5, 'C4' => 6, 'C6' => 'B3+C4', 'C2' => 'C6+B5', 'B5'=>'&SUM("A*")',      &updaterows($sheetone);
    'A1' => 'a1', 'A2'=>'a2', 'A3'=>'a3','A4'=>'a4','A5'=>'a5','A6'=>'a6');  
     &setrowlabels($sheetone,  
    'a1'=>'A Points','a2'=>'B Points','a3'=>'C Points',  
    'a4'=>'Percentage Correct','a5'=>'Bonus Points','a6'=>'Points Awarded');  
     &setconstants($sheetone,  
    'A1' => '3', 'A2'=>'4', 'A3'=>'0','A4'=>'76','A5'=>'1.5','A6'=>'6');  
      
     &setmaxrow($sheetone,6);  
     &calcsheet($sheetone);      &calcsheet($sheetone);
     $r->print(&outsheet($sheetone));      $r->print(&outsheet($sheetone));
   
     $r->print('</body></html>');      $r->print('</body></html>');
   
     } else {
   # ----------------------------- Not in a course, or not allowed to modify parms
         $ENV{'user.error.msg'}=
           $r->uri.":opa:0:0:Cannot modify spreadsheet";
         return HTTP_NOT_ACCEPTABLE; 
     }
     return OK;      return OK;
 }  }
   

Removed from v.1.6  
changed lines
  Added in v.1.8


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