[LON-CAPA-cvs] cvs: loncom /interface lonspreadsheet.pm

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 04 Dec 2002 21:49:34 -0000


This is a MIME encoded message

--matthew1039038574
Content-Type: text/plain

matthew		Wed Dec  4 16:49:34 2002 EDT

  Modified files:              
    /loncom/interface	lonspreadsheet.pm 
  Log:
  Multiple bugfixes.
  Correct spreadsheet is now loaded for assessment sheets (not just the default)
  Spreadsheet filename is now a part of the rowlabel data for 'symb' rowlabels
      and used by all the format_xxx_rowlabel routines.
  The symb, title, and spreadsheet filename are now escaped before being 
      stored internally for rowlabels of type 'symb'.
  The order assessments were display in the student spreadsheet was borken and 
      has now been fixed.
  The code marked 'I do not think this works anymore' has been removed as has
      the comment because it was correct.
  IMPORTANT CHANGE: Changing the default assessment spreadsheet or the default
      student spreadsheet will now expire all student spreadsheets.  This 
      makes our caching work better.
  
  
--matthew1039038574
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20021204164934.txt"

Index: loncom/interface/lonspreadsheet.pm
diff -u loncom/interface/lonspreadsheet.pm:1.153 loncom/interface/lonspreadsheet.pm:1.154
--- loncom/interface/lonspreadsheet.pm:1.153	Tue Dec  3 05:04:21 2002
+++ loncom/interface/lonspreadsheet.pm	Wed Dec  4 16:49:33 2002
@@ -1,5 +1,5 @@
 #
-# $Id: lonspreadsheet.pm,v 1.153 2002/12/03 10:04:21 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.154 2002/12/04 21:49:33 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -981,7 +981,11 @@
     if ($n) {
         my ($usy,$ufn)=split(/__&&&\__/,$sheet->{'f'}->{'A'.$n});
         if (exists($sheet->{'rowlabel'}->{$usy})) {
-            $rowlabel = $sheet->{'rowlabel'}->{$usy};
+            # This is dumb, but we need the information when we output
+            # the html version of the studentcalc spreadsheet for the
+            # links to the assesscalc sheets.
+            $rowlabel = $sheet->{'rowlabel'}->{$usy}.':'.
+                &Apache::lonnet::escape($ufn);
         } else { 
             $rowlabel = '';
         }
@@ -1198,9 +1202,13 @@
         my @sortby2=(undef);
         # Skip row 0
         for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
-            my (undef,$symb,$uname,$udom,$mapid,$resid,$title) = 
-                split(':',$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$row}});
-            $symb = &Apache::lonnet::unescape($symb);
+            my ($key,undef) = split(/__&&&\__/,$sheet->{'f'}->{'A'.$row});
+            my $rowlabel = $sheet->{'rowlabel'}->{$key};
+            my (undef,$symb,$mapid,$resid,$title,$ufn) = 
+                split(':',$rowlabel);
+            $ufn   = &Apache::lonnet::unescape($ufn);
+            $symb  = &Apache::lonnet::unescape($symb);
+            $title = &Apache::lonnet::unescape($title);
             my ($sequence) = ($symb =~ /\/([^\/]*\.sequence)/);
             if ($sequence eq '') {
                 $sequence = $symb;
@@ -1387,18 +1395,21 @@
         if ($sheet->{'sheettype'} eq 'classcalc') {
             $row_html.='<td>'.&format_html_rowlabel($sheet,$rowlabel).'</td>';
             # Output links for each student?
-            # Nope, that is already done for us in format_html_rowlabel (for now)
+            # Nope, that is already done for us in format_html_rowlabel 
+            # (for now)
         } elsif ($sheet->{'sheettype'} eq 'studentcalc') {
+            my $ufn = (split(/:/,$rowlabel))[5];
             $row_html.='<td>'.&format_html_rowlabel($sheet,$rowlabel);
             $row_html.= '<br>'.
                 '<select name="sel_'.$rownum.'" '.
                     'onChange="changesheet('.$rownum.')">'.
                         '<option name="default">Default</option>';
+
             foreach (@{$sheet->{'othersheets'}}) {
                 $row_html.='<option name="'.$_.'"';
-                #if ($ufn eq $_) {
-                #    $row_html.=' selected';
-                #}
+                if ($ufn eq $_) {
+                    $row_html.=' selected';
+                }
                 $row_html.='>'.$_.'</option>';
             }
             $row_html.='</select></td>';
@@ -1902,9 +1913,16 @@
                                           $cdom,$cnum);
             if ($reply eq 'ok') {
                 if ($makedef) { 
-                    return &Apache::lonnet::put('environment',
-                                  {'spreadsheet_default_'.$stype => $fn },
-                                                $cdom,$cnum);
+                    $reply = &Apache::lonnet::put('environment',
+                                    {'spreadsheet_default_'.$stype => $fn },
+                                                  $cdom,$cnum);
+                    if ($reply eq 'ok' && 
+                        ($sheet->{'sheettype'} eq 'studentcalc' ||
+                         $sheet->{'sheettype'} eq 'assesscalc')) {
+                        # Expire the spreadsheets of the other students.
+                        &Apache::lonnet::expirespread('','','studentcalc','');
+                    }
+                    return $reply;
                 } 
                 return $reply;
             } 
@@ -2069,11 +2087,15 @@
     my ($type,$labeldata) = split(':',$rowlabel,2);
     my $result = '';
     if ($type eq 'symb') {
-        my ($symb,$mapid,$resid,$title) = split(':',$labeldata);
-        $symb = &Apache::lonnet::unescape($symb);
+        my ($symb,$mapid,$resid,$title,$ufn) = split(':',$labeldata);
+        $ufn   = 'default' if (!defined($ufn) || $ufn eq '');
+        $ufn   = &Apache::lonnet::unescape($ufn);
+        $symb  = &Apache::lonnet::unescape($symb);
+        $title = &Apache::lonnet::unescape($title);
         $result = '<a href="/adm/assesscalc?usymb='.$symb.
             '&uname='.$sheet->{'uname'}.'&udom='.$sheet->{'udom'}.
-                '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'</a>';
+                '&ufn='.$ufn.
+                    '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'</a>';
     } elsif ($type eq 'student') {
         my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
         if ($fullname =~ /^\s*$/) {
@@ -2097,8 +2119,10 @@
     my ($type,$labeldata) = split(':',$rowlabel,2);
     my $result = '';
     if ($type eq 'symb') {
-        my ($symb,$mapid,$resid,$title) = split(':',$labeldata);
-        $symb = &Apache::lonnet::unescape($symb);
+        my ($symb,$mapid,$resid,$title,$ufn) = split(':',$labeldata);
+        $ufn   = &Apache::lonnet::unescape($ufn);
+        $symb  = &Apache::lonnet::unescape($symb);
+        $title = &Apache::lonnet::unescape($title);
         $result = $title;
     } elsif ($type eq 'student') {
         my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
@@ -2119,8 +2143,10 @@
     my ($type,$labeldata) = split(':',$rowlabel,2);
     my $result = '';
     if ($type eq 'symb') {
-        my ($symb,$mapid,$resid,$title) = split(':',$labeldata);
-        $symb = &Apache::lonnet::unescape($symb);
+        my ($symb,$mapid,$resid,$title,$ufn) = split(':',$labeldata);
+        $ufn   = &Apache::lonnet::unescape($ufn);
+        $symb  = &Apache::lonnet::unescape($symb);
+        $title = &Apache::lonnet::unescape($title);
         $result = $title;
     } elsif ($type eq 'student') {
         my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
@@ -2228,10 +2254,11 @@
             return 'Could not access course data';
         }
         #
-        my %assesslist;
+        my %assesslist = ();
         foreach ('Feedback','Evaluation','Tutoring','Discussion') {
             my $symb = '_'.lc($_);
-            $assesslist{$symb} = join(':',('symb',$symb,0,0,$_));
+            $assesslist{$symb} = join(':',('symb',$symb,0,0,
+                                           &Apache::lonnet::escape($_)));
         }
         #
         while (my ($key,$srcf) = each(%course_db)) {
@@ -2243,8 +2270,9 @@
                 my $symb=
                     &Apache::lonnet::declutter($course_db{'map_id_'.$mapid}).
                         '___'.$resid.'___'.&Apache::lonnet::declutter($srcf);
-                $assesslist{$symb}='symb:'.&Apache::lonnet::escape($symb).':'
-                    .$mapid.':'.$resid.':'.$course_db{'title_'.$id};
+                $assesslist{$symb} ='symb:'.&Apache::lonnet::escape($symb).':'
+                    .$mapid.':'.$resid.':'.
+                        &Apache::lonnet::escape($course_db{'title_'.$id});
             }
         }
         untie(%course_db);
@@ -2343,10 +2371,6 @@
                  ($formula =~ /^(~~~|---)/) )) {
             $f{$_}='!!! Obsolete';
             $changed=1;
-        } elsif ($ufn) {
-            # I do not think this works any more
-            $sheet->{'rowlabel'}->{$usy}
-                =~s/assesscalc\?usymb\=/assesscalc\?ufn\=$ufn&\usymb\=/;
         }
     }
     # New and unknown keys
@@ -2687,7 +2711,7 @@
             &checkthis($uname.':'.$udom.':assesscalc:'.$map,$time) ||
             &checkthis($uname.':'.$udom.':assesscalc:'.$usymb,$time)) {
             return 1;
-        } 
+        }
     } else {
         if (&checkthis('::studentcalc:',$time) || 
             &checkthis($uname.':'.$udom.':studentcalc:',$time)) {
@@ -2708,6 +2732,7 @@
     $udom  = $udom  || $sheet->{'udom'};
     $stype = $stype || $sheet->{'sheettype'};
     my @exportarr=();
+    # This handles the assessment sheets for '_feedback', etc
     if (defined($usymb) && ($usymb=~/^\_(\w+)/) && 
         (!defined($fn) || $fn eq '')) {
         $fn='default_'.$1;
@@ -2953,11 +2978,16 @@
         delete $ENV{'form.unewformula'} if (exists($ENV{'form.unewformula'}));
     }
     #
-    # Clean up symb and spreadsheet filename
+    # Look for special assessment spreadsheets - '_feedback', etc.
     #
-    if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) {
+    if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'} || 
+                                             $ENV{'form.ufn'} eq '' || 
+                                             $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;
+    }
     #
     # Interactive loading of specific sheet?
     #
@@ -3272,3 +3302,5 @@
 
 1;
 __END__
+
+

--matthew1039038574--