version 1.35, 2001/01/20 12:29:37
|
version 1.36, 2001/01/20 22:57:05
|
Line 6
|
Line 6
|
# 01/01/01,02/01,03/01,19/01,20/01 Gerd Kortemeyer |
# 01/01/01,02/01,03/01,19/01,20/01 Gerd Kortemeyer |
|
|
package Apache::lonspreadsheet; |
package Apache::lonspreadsheet; |
|
|
use strict; |
use strict; |
use Safe; |
use Safe; |
use Safe::Hole; |
use Safe::Hole; |
Line 40 my %parmhash;
|
Line 40 my %parmhash;
|
my $includedir; |
my $includedir; |
my $tmpdir; |
my $tmpdir; |
|
|
|
|
|
sub mdeb { |
|
my $msg=shift; |
|
my $mem=''; |
|
{ |
|
my $mfh=Apache::File->new('/proc/'.$$.'/status'); |
|
my $line; |
|
while ($line=<$mfh>) { |
|
my ($name,$value)=split(/\:/,$line); |
|
if ($name eq 'VmSize') { $mem=$value; } |
|
} |
|
$mfh->close(); |
|
} |
|
print $msg.$mem."<br>\n"; |
|
} |
|
|
|
|
|
|
|
|
# ============================================================================= |
# ============================================================================= |
# ===================================== Implements an instance of a spreadsheet |
# ===================================== Implements an instance of a spreadsheet |
|
|
sub initsheet { |
sub initsheet { |
my $safeeval = new Safe; |
my $safeeval = new Safe(shift); |
my $safehole = new Safe::Hole; |
my $safehole = new Safe::Hole; |
$safeeval->permit("entereval"); |
$safeeval->permit("entereval"); |
$safeeval->permit(":base_math"); |
$safeeval->permit(":base_math"); |
Line 61 sub initsheet {
|
Line 80 sub initsheet {
|
# c: preloaded constants (A-column) |
# c: preloaded constants (A-column) |
# rl: row label |
# rl: row label |
|
|
%v=(); |
undef %v; |
%t=(); |
undef %t; |
%f=(); |
undef %f; |
%c=(); |
undef %c; |
%rl=(); |
undef %rl; |
|
|
$maxrow=0; |
$maxrow=0; |
$sheettype=''; |
$sheettype=''; |
Line 779 sub readsheet {
|
Line 798 sub readsheet {
|
|
|
sub makenewsheet { |
sub makenewsheet { |
my ($uname,$udom,$stype,$usymb)=@_; |
my ($uname,$udom,$stype,$usymb)=@_; |
my $safeeval=initsheet(); |
my $safeeval=initsheet($stype); |
$safeeval->reval( |
$safeeval->reval( |
'$uname="'.$uname. |
'$uname="'.$uname. |
'";$udom="'.$udom. |
'";$udom="'.$udom. |
Line 1116 sub updatestudentassesssheet {
|
Line 1135 sub updatestudentassesssheet {
|
} |
} |
$updatedata{$ENV{'request.course.fn'}.'_'.$stype}= |
$updatedata{$ENV{'request.course.fn'}.'_'.$stype}= |
join('___;___',%current); |
join('___;___',%current); |
undef %allkeys; |
|
undef %allassess; |
|
} else { |
} else { |
return 'Could not access course data'; |
return 'Could not access course data'; |
} |
} |
Line 1171 sub loadstudent {
|
Line 1188 sub loadstudent {
|
my $safeeval=shift; |
my $safeeval=shift; |
my %c=(); |
my %c=(); |
my %f=&getformulas($safeeval); |
my %f=&getformulas($safeeval); |
|
my @assessdata=(); |
map { |
map { |
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
my $row=$1; |
my $row=$1; |
unless ($f{$_}=~/^\!/) { |
unless ($f{$_}=~/^\!/) { |
my @assessdata=&exportsheet(&getuname($safeeval), |
@assessdata=&exportsheet(&getuname($safeeval), |
&getudom($safeeval), |
&getudom($safeeval), |
'assesscalc',$f{$_}); |
'assesscalc',$f{$_}); |
my $index=0; |
my $index=0; |
map { |
map { |
if ($assessdata[$index]) { |
if ($assessdata[$index]) { |
Line 1205 sub loadcourse {
|
Line 1223 sub loadcourse {
|
map { |
map { |
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
my $row=$1; |
my $row=$1; |
unless (($f{$_}=~/^\!/) |
unless ($f{$_}=~/^\!/) { |
|| ($row>200)) |
|
{ |
|
my @studentdata=&exportsheet(&getuname($safeeval), |
my @studentdata=&exportsheet(&getuname($safeeval), |
&getudom($safeeval), |
&getudom($safeeval), |
'studentcalc'); |
'studentcalc'); |
Line 1287 sub loadassessment {
|
Line 1303 sub loadassessment {
|
my ($name,$value)=split(/\=/,$_); |
my ($name,$value)=split(/\=/,$_); |
$courseopt{$userprefix.&Apache::lonnet::unescape($name)}= |
$courseopt{$userprefix.&Apache::lonnet::unescape($name)}= |
&Apache::lonnet::unescape($value); |
&Apache::lonnet::unescape($value); |
} split(/\&/,$courserdatas{$ENV{'request.course.id'}}); |
} split(/\&/,$courserdatas{$cid}); |
# --------------------------------------------------- Get userdata (if present) |
# --------------------------------------------------- Get userdata (if present) |
unless |
unless |
((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) { |
((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) { |
Line 1394 sub loadrows() {
|
Line 1410 sub loadrows() {
|
# |
# |
|
|
sub exportsheet { |
sub exportsheet { |
|
|
my ($uname,$udom,$stype,$usymb,$fn)=@_; |
my ($uname,$udom,$stype,$usymb,$fn)=@_; |
my $thissheet=&makenewsheet($uname,$udom,$stype,$usymb); |
my $thissheet=&makenewsheet($uname,$udom,$stype,$usymb); |
&readsheet($thissheet,$fn); |
&readsheet($thissheet,$fn); |
&updatesheet($thissheet); |
&updatesheet($thissheet); |
&loadrows($thissheet); |
&loadrows($thissheet); |
&calcsheet($thissheet); |
&calcsheet($thissheet); |
my @returnthis=&exportdata($thissheet); |
return &exportdata($thissheet); |
undef $thissheet; |
|
return @returnthis; |
|
} |
} |
|
|
# ================================================================ Main handler |
# ================================================================ Main handler |
Line 1576 ENDSCRIPT
|
Line 1591 ENDSCRIPT
|
|
|
# ----------------------------------------------------- Update sheet, load rows |
# ----------------------------------------------------- Update sheet, load rows |
|
|
|
$r->print("Loaded sheet, updating rows ...<br>\n"); |
|
$r->rflush(); |
|
|
&updatesheet($asheet); |
&updatesheet($asheet); |
|
|
|
$r->print("Updated rows, loading row data ...<br>\n"); |
|
$r->rflush(); |
|
|
&loadrows($asheet); |
&loadrows($asheet); |
|
|
|
$r->print("Loaded row data, calculating sheet ...<br>\n"); |
|
$r->rflush(); |
|
|
my $calcoutput=&calcsheet($asheet); |
my $calcoutput=&calcsheet($asheet); |
$r->print('<h3><font color=red>'.$calcoutput.'</h3></font>'); |
$r->print('<h3><font color=red>'.$calcoutput.'</h3></font>'); |