[LON-CAPA-cvs] cvs: loncom /interface lonspreadsheet.pm
www
lon-capa-cvs@mail.lon-capa.org
Mon, 15 Jul 2002 12:26:51 -0000
www Mon Jul 15 08:26:51 2002 EDT
Modified files:
/loncom/interface lonspreadsheet.pm
Log:
Bug #507
Allows to insert extra lines on top and bottom of spreadsheet.
Internally marked "---n" and "~~~n".
Will always open up columns B-Z for calculations (changes to sett).
Index: loncom/interface/lonspreadsheet.pm
diff -u loncom/interface/lonspreadsheet.pm:1.96 loncom/interface/lonspreadsheet.pm:1.97
--- loncom/interface/lonspreadsheet.pm:1.96 Fri Jul 5 17:44:50 2002
+++ loncom/interface/lonspreadsheet.pm Mon Jul 15 08:26:51 2002
@@ -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 @@
} else {
$pattern='[A-Z]';
}
+
+# Deal with the template row
foreach (keys(%f)) {
if ($_=~/template\_(\w)/) {
my $col=$1;
@@ -809,6 +811,8 @@
}
}
}
+
+# Deal with the normal cells
foreach (keys(%f)) {
if (($f{$_}) && ($_!~/template\_/)) {
my $matches=($_=~/^$pattern(\d+)/);
@@ -824,6 +828,21 @@
}
}
}
+# 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 @@
undef %v;
&sett();
my $notfinished=1;
+ my $lastcalc='';
my $depth=0;
while ($notfinished) {
$notfinished=0;
@@ -846,12 +866,12 @@
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 @@
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 @@
}
my $showf=0;
my $proc;
- my $maxred;
+ my $maxred=1;
my $sheettype=&gettype($safeeval);
if ($sheettype eq 'studentcalc') {
$proc='&outrowassess';
@@ -1137,6 +1164,7 @@
} 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 @@
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 @@
$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 @@
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 @@
my $total=0;
foreach (keys(%f)) {
if ($_=~/^A(\d+)/) {
- unless ($f{$_}=~/^\!/) { $total++; }
+ unless ($f{$_}=~/^[\!\~\-]/) { $total++; }
}
}
my $now=0;
@@ -1930,7 +1960,7 @@
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 @@
my %f=&getformulas($safeeval);
foreach (keys(%f)) {
if ($_=~/^A/) {
- unless ($f{$_}=~/^\!/) {
+ unless ($f{$_}=~/^[\!\~\-]/) {
if ($f{$_}=~/^parameter/) {
if ($thisassess{$f{$_}}) {
my $val=&parmval($f{$_},$safeeval);