version 1.32, 2001/01/02 23:27:11
|
version 1.35, 2001/01/20 12:29:37
|
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,02/01 Gerd Kortemeyer |
# 01/01/01,02/01,03/01,19/01,20/01 Gerd Kortemeyer |
|
|
package Apache::lonspreadsheet; |
package Apache::lonspreadsheet; |
|
|
Line 20 use HTML::TokeParser;
|
Line 20 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 can/should be in the keys) |
# (user and course can/should be in the keys) |
# |
# |
use vars qw(%spreadsheets %courserdatas %userrdatas %defaultsheets); |
|
|
my %spreadsheets; |
|
my %courserdatas; |
|
my %userrdatas; |
|
my %defaultsheets; |
|
my %updatedata; |
|
|
# |
# |
# These global hashes are dependent on user, course and resource, |
# These global hashes are dependent on user, course and resource, |
Line 423 ENDDEFS
|
Line 428 ENDDEFS
|
# ------------------------------------------------ Add or change formula values |
# ------------------------------------------------ Add or change formula values |
|
|
sub setformulas { |
sub setformulas { |
my ($safeeval,@f)=@_; |
my ($safeeval,%f)=@_; |
$safeeval->reval('%f='."('".join("','",@f)."');"); |
%{$safeeval->varglob('f')}=%f; |
} |
} |
|
|
# ------------------------------------------------ Add or change formula values |
# ------------------------------------------------ Add or change formula values |
|
|
sub setconstants { |
sub setconstants { |
my ($safeeval,@c)=@_; |
my ($safeeval,%c)=@_; |
$safeeval->reval('%c='."('".join("','",@c)."');"); |
%{$safeeval->varglob('c')}=%c; |
} |
} |
|
|
# ------------------------------------------------ Add or change formula values |
# ------------------------------------------------ Add or change formula values |
|
|
sub setrowlabels { |
sub setrowlabels { |
my ($safeeval,@rl)=@_; |
my ($safeeval,%rl)=@_; |
$safeeval->reval('%rl='."('".join("','",@rl)."');"); |
%{$safeeval->varglob('rl')}=%rl; |
} |
} |
|
|
# ------------------------------------------------------- Calculate spreadsheet |
# ------------------------------------------------------- Calculate spreadsheet |
Line 459 sub getvalues {
|
Line 464 sub getvalues {
|
|
|
sub getformulas { |
sub getformulas { |
my $safeeval=shift; |
my $safeeval=shift; |
return $safeeval->reval('%f'); |
return %{$safeeval->varglob('f')}; |
} |
} |
|
|
# -------------------------------------------------------------------- Get type |
# -------------------------------------------------------------------- Get type |
Line 1056 sub updateclasssheet {
|
Line 1061 sub updateclasssheet {
|
sub updatestudentassesssheet { |
sub updatestudentassesssheet { |
my $safeeval=shift; |
my $safeeval=shift; |
my %bighash; |
my %bighash; |
|
my $stype=&gettype($safeeval); |
|
my %current=(); |
|
unless ($updatedata{$ENV{'request.course.fn'}.'_'.$stype}) { |
# -------------------------------------------------------------------- Tie hash |
# -------------------------------------------------------------------- Tie hash |
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', |
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', |
&GDBM_READER,0640)) { |
&GDBM_READER,0640)) { |
Line 1064 sub updatestudentassesssheet {
|
Line 1072 sub updatestudentassesssheet {
|
my %allkeys=(); |
my %allkeys=(); |
my %allassess=(); |
my %allassess=(); |
|
|
my $stype=&gettype($safeeval); |
|
|
|
map { |
map { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
my $mapid=$1; |
my $mapid=$1; |
Line 1102 sub updatestudentassesssheet {
|
Line 1108 sub updatestudentassesssheet {
|
# %allkeys has a list of storage and parameter displays by unikey |
# %allkeys has a list of storage and parameter displays by unikey |
# %allassess has a list of all resource displays by symb |
# %allassess has a list of all resource displays by symb |
# |
# |
# -------------------- Find discrepancies between the course row table and this |
|
# |
|
my %f=&getformulas($safeeval); |
|
my $changed=0; |
|
|
|
my %current=(); |
|
if ($stype eq 'assesscalc') { |
if ($stype eq 'assesscalc') { |
%current=%allkeys; |
%current=%allkeys; |
} elsif ($stype eq 'studentcalc') { |
} elsif ($stype eq 'studentcalc') { |
%current=%allassess; |
%current=%allassess; |
} |
} |
|
$updatedata{$ENV{'request.course.fn'}.'_'.$stype}= |
|
join('___;___',%current); |
|
undef %allkeys; |
|
undef %allassess; |
|
} else { |
|
return 'Could not access course data'; |
|
} |
|
# ------------------------------------------------------ Get current from cache |
|
} else { |
|
%current=split(/\_\_\_\;\_\_\_/, |
|
$updatedata{$ENV{'request.course.fn'}.'_'.$stype}); |
|
} |
|
# -------------------- Find discrepancies between the course row table and this |
|
# |
|
my %f=&getformulas($safeeval); |
|
my $changed=0; |
|
|
my $maxrow=0; |
my $maxrow=0; |
my %existing=(); |
my %existing=(); |
Line 1138 sub updatestudentassesssheet {
|
Line 1155 sub updatestudentassesssheet {
|
$f{'A'.$maxrow}=$_; |
$f{'A'.$maxrow}=$_; |
} |
} |
} keys %current; |
} keys %current; |
|
|
if ($changed) { &setformulas($safeeval,%f); } |
if ($changed) { &setformulas($safeeval,%f); } |
|
|
&setmaxrow($safeeval,$maxrow); |
&setmaxrow($safeeval,$maxrow); |
&setrowlabels($safeeval,%current); |
&setrowlabels($safeeval,%current); |
|
|
} else { |
undef %current; |
return 'Could not access course data'; |
undef %existing; |
} |
|
} |
} |
|
|
# ------------------------------------------------ Load data for one assessment |
# ------------------------------------------------ Load data for one assessment |
Line 1190 sub loadcourse {
|
Line 1206 sub loadcourse {
|
if ($_=~/^A(\d+)/) { |
if ($_=~/^A(\d+)/) { |
my $row=$1; |
my $row=$1; |
unless (($f{$_}=~/^\!/) |
unless (($f{$_}=~/^\!/) |
|
|
|| ($row>200)) |
|| ($row>200)) |
|
|
{ |
{ |
my @studentdata=&exportsheet(&getuname($safeeval), |
my @studentdata=&exportsheet(&getuname($safeeval), |
&getudom($safeeval), |
&getudom($safeeval), |
Line 1572 ENDSCRIPT
|
Line 1586 ENDSCRIPT
|
&outsheet($r,$asheet); |
&outsheet($r,$asheet); |
$r->print('</form></body></html>'); |
$r->print('</form></body></html>'); |
|
|
|
# --------------------------------- We know this leaks, so terminate this child |
|
|
|
$r->child_terminate(); |
|
|
# ------------------------------------------------------------------------ Done |
# ------------------------------------------------------------------------ Done |
} else { |
} else { |