--- loncom/interface/Attic/lonspreadsheet.pm 2002/07/05 21:44:50 1.96 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/07/15 12:26:51 1.97 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.96 2002/07/05 21:44:50 www Exp $ +# $Id: lonspreadsheet.pm,v 1.97 2002/07/15 12:26:51 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -783,6 +783,8 @@ sub sett { } else { $pattern='[A-Z]'; } + +# Deal with the template row foreach (keys(%f)) { if ($_=~/template\_(\w)/) { my $col=$1; @@ -809,6 +811,8 @@ sub sett { } } } + +# Deal with the normal cells foreach (keys(%f)) { if (($f{$_}) && ($_!~/template\_/)) { my $matches=($_=~/^$pattern(\d+)/); @@ -824,6 +828,21 @@ sub sett { } } } +# For inserted lines, [B-Z] is also valid + + unless ($sheettype eq 'assesscalc') { + foreach (keys(%f)) { + if ($_=~/[B-Z](\d+)/) { + if ($f{'A'.$1}=~/^[\~\-]/) { + $t{$_}=$f{$_}; + $t{$_}=~s/\.\.+/\,/g; + $t{$_}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; + $t{$_}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge; + } + } + } + } + # For some reason 'A0' gets special treatment... This seems superfluous # but I imagine it is here for a reason. $t{'A0'}=$f{'A0'}; @@ -836,6 +855,7 @@ sub calc { undef %v; &sett(); my $notfinished=1; + my $lastcalc=''; my $depth=0; while ($notfinished) { $notfinished=0; @@ -846,12 +866,12 @@ sub calc { undef %v; return $_.': '.$@; } - if ($v{$_} ne $old) { $notfinished=1; } + if ($v{$_} ne $old) { $notfinished=1; $lastcalc=$_; } } $depth++; if ($depth>100) { undef %v; - return 'Maximum calculation depth exceeded'; + return $lastcalc.': Maximum calculation depth exceeded'; } } return ''; @@ -986,6 +1006,13 @@ sub getformulas { return %{$safeeval->varglob('f')}; } +# ----------------------------------------------------- Get value of $f{'A'.$n} + +sub getfa { + my ($safeeval,$n)=@_; + return $safeeval->reval('$f{"A'.$n.'"}'); +} + # -------------------------------------------------------------------- Get type sub gettype { @@ -1124,7 +1151,7 @@ sub rown { } my $showf=0; my $proc; - my $maxred; + my $maxred=1; my $sheettype=&gettype($safeeval); if ($sheettype eq 'studentcalc') { $proc='&outrowassess'; @@ -1137,6 +1164,7 @@ sub rown { } else { $maxred=26; } + if (&getfa($safeeval,$n)=~/^[\~\-]/) { $maxred=1; } if ($n eq '-') { $proc='&templaterow'; $n=-1; $dataflag=1; } foreach ($safeeval->reval($proc.'('.$n.')')) { my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD'); @@ -1678,7 +1706,8 @@ sub updateclasssheet { if ($_=~/^A(\d+)/) { $maxrow=($1>$maxrow)?$1:$maxrow; $existing{$f{$_}}=1; - unless ((defined($currentlist{$f{$_}})) || (!$1)) { + unless ((defined($currentlist{$f{$_}})) || (!$1) || + ($f{$_}=~/^(\~\~\~|\-\-\-)/)) { $f{$_}='!!! Obsolete'; $changed=1; } @@ -1817,8 +1846,9 @@ sub updatestudentassesssheet { $maxrow=($1>$maxrow)?$1:$maxrow; my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); $existing{$usy}=1; - unless ((defined($current{$usy})) || (!$1)) { - $f{$_}='!!! Obsolete'; + unless ((defined($current{$usy})) || (!$1) || + ($f{$_}=~/^(\~\~\~|\-\-\-)/)){ + $f{$_}='!!! Obsolete'; $changed=1; } elsif ($ufn) { $current{$usy} @@ -1871,7 +1901,7 @@ sub loadstudent { foreach (keys(%f)) { if ($_=~/^A(\d+)/) { my $row=$1; - unless (($f{$_}=~/^\!/) || ($row==0)) { + unless (($f{$_}=~/^[\!\~\-]/) || ($row==0)) { my ($usy,$ufn)=split(/\_\_\&\&\&\_\_/,$f{$_}); @assessdata=&exportsheet(&getuname($safeeval), &getudom($safeeval), @@ -1910,7 +1940,7 @@ sub loadcourse { my $total=0; foreach (keys(%f)) { if ($_=~/^A(\d+)/) { - unless ($f{$_}=~/^\!/) { $total++; } + unless ($f{$_}=~/^[\!\~\-]/) { $total++; } } } my $now=0; @@ -1930,7 +1960,7 @@ ENDPOP foreach (keys(%f)) { if ($_=~/^A(\d+)/) { my $row=$1; - unless (($f{$_}=~/^\!/) || ($row==0)) { + unless (($f{$_}=~/^[\!\~\-]/) || ($row==0)) { my @studentdata=&exportsheet(split(/\:/,$f{$_}), 'studentcalc'); undef %userrdatas; @@ -2094,7 +2124,7 @@ sub loadassessment { my %f=&getformulas($safeeval); foreach (keys(%f)) { if ($_=~/^A/) { - unless ($f{$_}=~/^\!/) { + unless ($f{$_}=~/^[\!\~\-]/) { if ($f{$_}=~/^parameter/) { if ($thisassess{$f{$_}}) { my $val=&parmval($f{$_},$safeeval);