--- loncom/interface/Attic/lonspreadsheet.pm 2001/01/20 22:57:05 1.36 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/01/22 22:54:16 1.38 @@ -3,7 +3,7 @@ # # 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, -# 01/01/01,02/01,03/01,19/01,20/01 Gerd Kortemeyer +# 01/01/01,02/01,03/01,19/01,20/01,22/01 Gerd Kortemeyer package Apache::lonspreadsheet; @@ -328,6 +328,7 @@ sub sett { $t{$lb}=~s/\#/$trow/g; $t{$lb}=~s/\.\.+/\,/g; $t{$lb}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; + $t{$lb}=~s/(^|[^\"\'])\[([\w\.]+)\]/$1\$c\{\'$2\'\}/g; } } } keys %f; @@ -344,12 +345,14 @@ sub sett { $t{$_}=$f{$_}; $t{$_}=~s/\.\.+/\,/g; $t{$_}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; + $t{$_}=~s/(^|[^\"\'])\[([\w\.]+)\]/$1\$c\{\'$2\'\}/g; } } } keys %f; $t{'A0'}=$f{'A0'}; $t{'A0'}=~s/\.\.+/\,/g; $t{'A0'}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; + $t{'A0'}=~s/(^|[^\"\'])\[([\w\.]+)\]/$1\$c\{\'$2\'\}/g; } sub calc { @@ -1102,8 +1105,8 @@ sub updatestudentassesssheet { &Apache::lonnet::declutter($bighash{'map_id_'.$mapid}). '___'.$resid.'___'. &Apache::lonnet::declutter($srcf); - $allassess{$symb}=$bighash{'title_'.$id}; - + $allassess{$symb}= + ''.$bighash{'title_'.$id}.''; if ($stype eq 'assesscalc') { map { if (($_=~/^stores\_(.*)/) || ($_=~/^parameter\_(.*)/)) { @@ -1217,17 +1220,33 @@ sub loadstudent { # --------------------------------------------------- Load data for one student sub loadcourse { - my $safeeval=shift; + my ($safeeval,$r)=@_; my %c=(); my %f=&getformulas($safeeval); + my $total=0; + map { + if ($_=~/^A(\d+)/) { + unless ($f{$_}=~/^\!/) { $total++; } + } + } keys %f; + my $now=0; + my $since=time; + $r->print('
'. + "
\n"); + $r->rflush(); map { if ($_=~/^A(\d+)/) { my $row=$1; unless ($f{$_}=~/^\!/) { - my @studentdata=&exportsheet(&getuname($safeeval), - &getudom($safeeval), + my @studentdata=&exportsheet(split(/\:/,$f{$_}), 'studentcalc'); - undef %userrdatas; + undef %userrdatas; + $now++; + $r->print(''."
\n"); + $r->rflush(); + my $index=0; map { if ($studentdata[$index]) { @@ -1244,6 +1263,9 @@ sub loadcourse { } keys %f; &setformulas($safeeval,%f); &setconstants($safeeval,%c); + $r->print(''. + "
\n
"); + $r->rflush(); } # ------------------------------------------------ Load data for one assessment @@ -1268,6 +1290,7 @@ sub loadassessment { "restore:$udom:$uname:". &Apache::lonnet::escape($namespace).":". &Apache::lonnet::escape($symb),$uhome); + my %returnhash=(); map { my ($name,$value)=split(/\=/,$_); @@ -1280,6 +1303,7 @@ sub loadassessment { $returnhash{$_}=$returnhash{$version.':'.$_}; } split(/\:/,$returnhash{$version.':keys'}); } + # ----------------------------- returnhash now has all stores for this resource # ---------------------------- initialize coursedata and userdata for this user @@ -1320,7 +1344,6 @@ sub loadassessment { &Apache::lonnet::unescape($value); } split(/\&/,$userrdatas{$uname.'___'.$udom}); } - # ----------------- now courseopt, useropt initialized for this user and course # (used by parmval) @@ -1339,6 +1362,7 @@ sub loadassessment { $key=~s/^stores\_/resource\./; $key=~s/\_/\./; $c{$_}=$returnhash{$key}; + $c{$key}=$returnhash{$key}; } } } @@ -1392,11 +1416,11 @@ sub updatesheet { # Import the data for rows # -sub loadrows() { - my $safeeval=shift; +sub loadrows { + my ($safeeval,$r)=@_; my $stype=&gettype($safeeval); if ($stype eq 'classcalc') { - &loadcourse($safeeval); + &loadcourse($safeeval,$r); } elsif ($stype eq 'studentcalc') { &loadstudent($safeeval); } else { @@ -1599,7 +1623,7 @@ ENDSCRIPT $r->print("Updated rows, loading row data ...
\n"); $r->rflush(); - &loadrows($asheet); + &loadrows($asheet,$r); $r->print("Loaded row data, calculating sheet ...
\n"); $r->rflush();