--- loncom/interface/Attic/lonspreadsheet.pm	2002/11/19 22:36:09	1.143
+++ loncom/interface/Attic/lonspreadsheet.pm	2002/11/21 19:50:49	1.148
@@ -1,5 +1,5 @@
 #
-# $Id: lonspreadsheet.pm,v 1.143 2002/11/19 22:36:09 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.148 2002/11/21 19:50:49 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1530,10 +1530,9 @@ A link to the spreadsheet will be availa
 END
     $r->rflush();
     my $starttime = time;
-    foreach (keys(%f)) {
-	next if ($_!~/^A(\d+)/ || $1 == 0 || ($f{$_}=~/^[!~-]/));
+    foreach my $rownum (&sort_indicies($sheet)) {
         $count++;
-        my ($sname,$sdom) = split(':',$f{$_});
+        my ($sname,$sdom) = split(':',$f{'A'.$rownum});
         my $student_excel_worksheet=$workbook->addworksheet($sname.'@'.$sdom);
         # Create a new spreadsheet
         my $studentsheet = &makenewsheet($sname,$sdom,'studentcalc',undef);
@@ -2065,6 +2064,9 @@ sub format_html_rowlabel {
                 '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'</a>';
     } elsif ($type eq 'student') {
         my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
+        if ($fullname =~ /^\s*$/) {
+            $fullname = $sname.'@'.$sdom;
+        }
         $result ='<a href="/adm/studentcalc?uname='.$sname.
             '&udom='.$sdom.'">';
         $result.=$section.'&nbsp;'.$id."&nbsp;".$fullname.'</a>';
@@ -2317,7 +2319,8 @@ sub updatestudentassesssheet {
     $sheet->{'maxrow'} = 0;
     my %existing=();
     # Now obsolete rows
-    while (my ($cell, $formula) = each (%f)) {
+    foreach my $cell (keys(%f)) {
+        my $formula = $f{$cell};
         next if ($cell !~ /^A(\d+)/);
         $sheet->{'maxrow'} = $1 if ($1 > $sheet->{'maxrow'});
         my ($usy,$ufn)=split(/__&&&\__/,$formula);
@@ -2365,7 +2368,8 @@ sub loadstudent{
     undef @tmp;
     # 
     my @assessdata=();
-    while (my ($cell,$value) = each (%formulas)) {
+    foreach my $cell (keys(%formulas)) {
+        my $value = $formulas{$cell};
         if(defined($c) && ($c->aborted())) {
             last;
         }
@@ -2377,18 +2381,15 @@ sub loadstudent{
                                  $sheet->{'udom'},
                                  'assesscalc',$usy,$ufn,$r);
         my $index=0;
-        foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
-                 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') {
+        foreach my $col ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+                         'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') {
             if (defined($assessdata[$index])) {
-                my $col=$_;
                 if ($assessdata[$index]=~/\D/) {
                     $constants{$col.$row}="'".$assessdata[$index]."'";
                 } else {
                     $constants{$col.$row}=$assessdata[$index];
                 }
-                unless ($col eq 'A') { 
-                    $formulas{$col.$row}='import';
-                }
+                $formulas{$col.$row}='import' if ($col ne 'A');
             }
             $index++;
         }
@@ -2651,7 +2652,11 @@ sub loadrows {
 
 sub checkthis {
     my ($keyname,$time)=@_;
-    return ($time<$expiredates{$keyname});
+    if (! exists($expiredates{$keyname})) {
+        return 0;
+    } else {
+        return ($time<$expiredates{$keyname});
+    }
 }
 
 sub forcedrecalc {
@@ -2685,6 +2690,7 @@ sub forcedrecalc {
 #
 sub exportsheet {
     my ($sheet,$uname,$udom,$stype,$usymb,$fn,$r)=@_;
+    my $flag = 0;
     $uname = $uname || $sheet->{'uname'};
     $udom  = $udom  || $sheet->{'udom'};
     $stype = $stype || $sheet->{'sheettype'};
@@ -2753,14 +2759,24 @@ sub exportsheet {
                                        [$key],
                                        $sheet->{'cdom'},$sheet->{'cnum'});
         if ($tmp[0]!~/^error/) {
-            %currentlystored = @tmp;
+            # We only got one key, so we will access it directly.
+            foreach (split('___&___',$tmp[1])) {
+                my ($key,$value) = split('___=___',$_);
+                $key = '' if (! defined($key));
+                $currentlystored{$key} = $value;
+            }
         }
     } else {
         my @tmp = &Apache::lonnet::get('nohist_calculatedsheets_'.
                                        $sheet->{'cid'},[$key],
                                        $sheet->{'udom'},$sheet->{'uname'});
         if ($tmp[0]!~/^error/) {
-            %currentlystored = @tmp;
+            # We only got one key, so we will access it directly.
+            foreach (split('___&___',$tmp[1])) {
+                my ($key,$value) = split('___=___',$_);
+                $key = '' if (! defined($key));
+                $currentlystored{$key} = $value;
+            }
         }
     }
     #
@@ -2779,17 +2795,19 @@ sub exportsheet {
     #
     # Store away the new value
     #
+    my $timekey = $key.'.time';
     if ($stype eq 'studentcalc') {
-        &Apache::lonnet::put('nohist_calculatedsheets',
-                             { $key => $newstore,
-                               $key.time => $now },
-                             $sheet->{'cdom'},$sheet->{'cnum'});
-    } else {
-        &Apache::lonnet::put('nohist_calculatedsheets_'.$sheet->{'cid'},
-                             { $key => $newstore,
-                               $key.time => $now },
-                             $sheet->{'udom'},
-                             $sheet->{'uname'})
+        my $result = &Apache::lonnet::put('nohist_calculatedsheets',
+                                          { $key     => $newstore,
+                                            $timekey => $now },
+                                          $sheet->{'cdom'},
+                                          $sheet->{'cnum'});
+    } else {
+        my $result = &Apache::lonnet::put('nohist_calculatedsheets_'.$sheet->{'cid'},
+                                          { $key     => $newstore,
+                                            $timekey => $now },
+                                          $sheet->{'udom'},
+                                          $sheet->{'uname'});
     }
     return @exportarr;
 }