version 1.6, 2000/12/06 14:50:47
|
version 1.7, 2000/12/06 23:23:38
|
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 614 sub rowaassess {
|
Line 627 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 |
|
|
$r->print('<html><head><title>LON-CAPA Spreadsheet</title></head>'); |
if (($ENV{'request.course.fn'}) || |
$r->print('<body bgcolor="#FFFFFF">'); |
($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('<body bgcolor="#FFFFFF">'); |
|
|
my $sheetone=initsheet(); |
my $sheetone=initsheet(); |
&setformulas($sheetone, |
&setformulas($sheetone, |
'B3' => 5, 'C4' => 6, 'C6' => 'B3+C4', 'C2' => 'C6+B5', 'B5'=>'&SUM("A*")', |
'B3' => 5, 'C4' => 6, 'C6' => 'B3+C4', 'C2' => 'C6+B5', 'B5'=>'&SUM("A*")', |
'A1' => 'a1', 'A2'=>'a2', 'A3'=>'a3','A4'=>'a4','A5'=>'a5','A6'=>'a6'); |
'A1' => 'da1', 'A2'=>'da2', 'A3'=>'da3','A4'=>'da4','A5'=>'da5','A6'=>'da6', |
|
'a1' => '28.7', 'a2' => 'C4+a1','G1'=>'&SUM("*25")'); |
&setrowlabels($sheetone, |
&setrowlabels($sheetone, |
'a1'=>'A Points','a2'=>'B Points','a3'=>'C Points', |
'da1'=>'A Points','da2'=>'B Points','da3'=>'C Points', |
'a4'=>'Percentage Correct','a5'=>'Bonus Points','a6'=>'Points Awarded'); |
'da4'=>'Percentage Correct','da5'=>'Bonus Points','da6'=>'Points Awarded'); |
&setconstants($sheetone, |
&setconstants($sheetone, |
'A1' => '3', 'A2'=>'4', 'A3'=>'0','A4'=>'76','A5'=>'1.5','A6'=>'6'); |
'A1' => '3', 'A2'=>'4', 'A3'=>'0','A4'=>'76','A5'=>'1.5','A6'=>'6'); |
|
|
Line 637 sub handler {
|
Line 661 sub handler {
|
&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; |
} |
} |
|
|