[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);