--- loncom/interface/Attic/lonspreadsheet.pm	2002/12/09 21:11:12	1.158
+++ loncom/interface/Attic/lonspreadsheet.pm	2003/03/19 17:16:23	1.160.2.4
@@ -1,5 +1,5 @@
 #
-# $Id: lonspreadsheet.pm,v 1.158 2002/12/09 21:11:12 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.160.2.4 2003/03/19 17:16:23 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -833,7 +833,7 @@ sub expandnamed {
             push @matches,$parameter if ($parameter =~ /$expression/);
         }
         if (scalar(@matches) == 0) {
-            $returnvalue = 'unmatched parameter: '.$parameter;
+            $returnvalue = undef; #'unmatched parameter: '.$parameter;
         } elsif (scalar(@matches) == 1) {
             $returnvalue = '$c{\''.$matches[0].'\'}';
         } elsif (scalar(@matches) > 0) {
@@ -1882,6 +1882,14 @@ sub makenewsheet {
     $sheet->{'mapid'} = $ENV{'form.mapid'};
     $sheet->{'resid'} = $ENV{'form.resid'};
     $sheet->{'cid'}   = $ENV{'request.course.id'};
+    if (! exists($Section{$uname.':'.$udom})) {
+        my $classlist = &Apache::loncoursedata::get_classlist();
+        foreach my $student (keys(%$classlist)) {
+            my ($studentDomain,$studentName,undef,undef,undef,$studentSection,
+                undef,undef)   =   @{$classlist->{$student}};
+            $Section{$studentName.':'.$studentDomain} = $studentSection;
+        }
+    }
     $sheet->{'csec'}  = $Section{$uname.':'.$udom};
     $sheet->{'coursefilename'}   = $ENV{'request.course.fn'};
     $sheet->{'cnum'}  = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
@@ -2094,8 +2102,27 @@ sub parmval {
     # second, check map parms
     my $thisparm = $parmhash{$symbparm};
     return $thisparm if (defined($thisparm));
+
     # first, check default
-    return &Apache::lonnet::metadata($fn,$rwhat.'.default');
+    $thisparm = &Apache::lonnet::metadata($fn,$rwhat.'.default');
+    return $thisparm if (defined($thisparm));
+
+    #Cascade Up
+    my $space=$what;
+    $space=~s/\.\w+$//;
+    if ($space ne '0') {
+	my @parts=split(/_/,$space);
+	my $id=pop(@parts);
+	my $part=join('_',@parts);
+	if ($part eq '') { $part='0'; }
+	my $newwhat=$rwhat;
+	$newwhat=~s/\Q$space\E/$part/;
+	my $partgeneral=&parmval($newwhat,$sheet);
+	if (defined($partgeneral)) { return $partgeneral; }
+    }
+
+    #nothing defined
+    return '';
 }
 
 
@@ -2391,7 +2418,7 @@ sub updatestudentassesssheet {
         unless ((exists($sheet->{'rowlabel'}->{$usy}) && 
                  (defined($sheet->{'rowlabel'}->{$usy})) || (!$1) ||
                  ($formula =~ /^(~~~|---)/) )) {
-            $f{$_}='!!! Obsolete';
+            $f{$cell}='!!! Obsolete';
             $changed=1;
         }
     }
@@ -2915,7 +2942,8 @@ sub cachedssheets {
     $uname = $uname || $sheet->{'uname'};
     $udom  = $udom  || $sheet->{'udom'};
     if (! $loadedcaches{$uname.'_'.$udom}) {
-        my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets',
+        my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'.
+                                        $ENV{'request.course.id'},
                                         $sheet->{'udom'},
                                         $sheet->{'uname'});
         if ($tmp[0] !~ /^error/) {
@@ -3007,9 +3035,9 @@ sub handler {
                                              $ENV{'form.ufn'} eq 'default')) {
         $ENV{'form.ufn'}='default_'.$1;
     }
-    if (!$ENV{'form.ufn'} || $ENV{'form.ufn'} eq 'default') {
-        $ENV{'form.ufn'}='course_default_'.$sheettype;
-    }
+#    if (!$ENV{'form.ufn'} || $ENV{'form.ufn'} eq 'default') {
+#        $ENV{'form.ufn'}='course_default_'.$sheettype;
+#    }
     #
     # Interactive loading of specific sheet?
     #
@@ -3211,6 +3239,7 @@ ENDSCRIPT
         $oldsheets{'course'} ne $sheet->{'cid'}) {
         undef %oldsheets;
         undef %loadedcaches;
+        undef %Section;
     }
     $oldsheets{'course'} = $sheet->{'cid'};
     #